Это то, что у меня есть, но это не работает.
import moment from 'moment'
import 'moment/min/moment-with-locales'
import 'moment-duration-format' // used by moment
componentDidMount () {
console.log(moment.locale())
console.log(moment.locale('zh-cn'))
console.log(moment.locale())
}
вывод журнала консоли: en, en, en
ожидаемый вывод журнала консоли: en, zh-cn, zh-cn
Когда я попытался изменить момент импорта с «момент» на момент импорта с «момент/минута/момент-с-локалями», но в этой строке возникает ошибка:
const total = moment.duration(this.props.stoveUsage.total, 'seconds').format('H:mm', { trim: false })
ошибка: momentWithLocales2.default.duration(...).format не является функцией
Подтверждая это, moment.locale('es')
не действует на меня в React Native.
import 'moment/min/moment-with-locales'
делает трюк!
moment.locale('fr'); moment().format("ll");
приводит к "1 févr. 2018"
, как и ожидалось.
Если вы не хотите использовать moment-with-locales
, который загружает все данные локали, откат к моменту v2.18 исправил это для меня. Определенно есть ошибка с моментом v2.20 и установкой локали в родной реакции.
@Leeds-eBooks Не могли бы вы объяснить, как вы импортируете момент? Я откатился на 2.18, и все же мне нужно импортировать момент из момента с локалями, чтобы заставить локальный работать правильно в реактивном родном
Спасибо
@msevestre Да, конечно, хотя я думаю, что мое решение может быть устаревшим сейчас, я заставил его работать в своем коде и пошел дальше, я думаю, что более поздняя версия момента могла бы это исправить. Тем не менее, мое исправление:
https://github.com/tqc/moment.git#no-dynamic-import
из git вместо moment
напрямую из npmimport moment from 'moment'
import 'moment/src/locale/en-gb'
import 'moment/src/locale/es'
import 'moment/src/locale/fr'
import 'moment/src/locale/pl'
import 'moment/src/locale/pt'
// ...etc
// bonus trick!
import DeviceInfo from 'react-native-device-info'
const deviceLocale = DeviceInfo.getDeviceLocale()
moment.locale([deviceLocale, 'en'])
Это то, что я делаю, и это работает для меня, но, как я уже сказал, это может больше не понадобиться.
@Leeds-eBooks Потрясающе. Спасибо за ваш быстрый отзыв. Действительно помогло
Это сработало для меня,
https://momentjs.com/docs/#/i18n/экземпляр -locale/
Вы должны указать в App.js все слова на языке, чем вы хотите, это будет работать во всех ваших приложениях.
@VanessaChu - у тебя все еще есть проблема?
Это решение работает для меня
Привет, люди, import 'moment/locale/fr';
работает для меня, но если я хочу сделать динамический, например, не нужно импортировать все существующие языки, знаете ли вы какие-нибудь приемы, чтобы сделать что-то вроде import 'moment/locale/[variable]'
где переменная нужен ли язык?
Так что это работает с каждой страной... :/
Надеюсь, большинство участников обсуждения решили свои проблемы :) Спасибо @Leeds-eBooks
Для 3.x у нас может быть больше версий moment с/без динамического импорта/es6, так что это не проблема.
Привет @MayeuldP ,
Я не знаю, приедете ли вы, чтобы исправить использование переменных языков моментов в Reactjs / ReactNative, но я хочу поделиться решением, которое может кому-то помочь.
вам не нужно импортировать культуру по культуре, вместо этого просто добавьте: import 'moment/min/locales'
only, а позже вы можете установить свой moment.local('') с вашей любимой культурой.
Я использую v2.18, и этот метод работает.
import moment from 'moment';
import momentFR from 'moment/src/locale/fr'
moment.locale('fr',momentFR );
Привет, @KashifAhmed В версии 2.22.2 вы должны использовать moment.updateLocale('fr',momentFR)
Предупреждение об устаревании: используйте moment.updateLocale(localeName, config) для изменения существующей локали. moment.defineLocale(localeName, config) следует использовать только для создания новой локали. См. http://momentjs.com/guides/#/warnings/define -locale/ для получения дополнительной информации.
Проверь это:
import moment from "moment";
import 'moment/min/locales'
Это включает в себя все конфигурации languajes с момента, это js, так что проблем с размером нет.
Раньше у меня была проблема, когда кто-то устанавливал приложение на мобильный телефон с другим языком.
Отсюда вы можете без проблем установить любую локаль, определенную моментом,
moment.locale('es');
Или используйте языковой стандарт устройства, не беспокоясь о том, что он не соответствует вашим языковым спецификациям, как пример из @benadamstyles.
В моем случае импорта локали было недостаточно, поэтому я использовал импортированный словарь и удалил первый символ подчеркивания _
import moment from 'moment';
import momentPTBR from 'moment/src/locale/pt-br';
function prepareLocale(locale) {
for (const key in locale) {
if (locale.hasOwnProperty(key)) {
// remove first character underscore fom key, i.e. '_calendar' => 'calendar'
locale[key.substring(1)] = locale[key];
}
}
return locale;
}
moment.defineLocale('pt-br', prepareLocale(momentPTBR));
import 'moment/src/locale/en-gb'
у меня не сработало, а import 'moment/locale/en-gb'
сработало.
"dependencies": {
"expo": "32.0.0",
"moment": "2.24.0",
"react": "16.5.0",
"react-native": "https://github.com/expo/react-native/archive/sdk-32.0.0.tar.gz"
},
В самом верхнем файле дерева вот как выглядит мой код:
import moment from 'moment'
import 'moment/locale/en-gb'
const momentLocale = moment.locale('en-gb')
if (momentLocale !== 'en-gb') {
throw new Error(`Moment fell back to locale ${momentLocale}`)
}
export default () => null
Я использую v2.18, и этот метод работает.
`
import moment from 'moment'; import momentFR from 'moment/src/locale/fr' moment.locale('fr',momentFR );
не могли бы вы привести несколько примеров.
большое спасибо!
Я изменил свою версию с 2.24 на 2.18, и теперь она работает. Где-то после 2.20 есть баг.
это работа для меня
import moment from 'moment'
import 'moment/locale/pt-br'
moment.locale('pt-br')
это работа для меня
import moment from 'moment' import 'moment/locale/pt-br' moment.locale('pt-br')
Убедитесь, что вы проверяете, что то, что вы возвращаете из .locale()
, является тем, что вы установили. Он молча падает обратно.
Самый полезный комментарий
import 'moment/min/moment-with-locales'
делает трюк!
moment.locale('fr'); moment().format("ll");
приводит к
"1 févr. 2018"
, как и ожидалось.