这就是我所拥有的,但它不起作用。
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
当我尝试将 import moment 从 'moment' 更改为 import moment from 'moment/min/moment-with-locales' 但它在这一行引发错误:
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 时刻为我解决了这个问题。 moment v2.20 肯定存在一个错误,并将语言环境设置为 react native。
@Leeds-eBooks 你能解释一下你是如何导入时刻的吗? 我回滚到 2.18,但我需要从 moment-with-locales 导入 moment 以使本地在 react-native 中正常工作
谢谢
@msevestre是的,当然,虽然我认为我的解决方案现在可能已经过时了,但我让它在我的代码中工作并继续前进,我认为更高版本的 moment 可能已经修复了它。 不过,我的解决方法是:
https://github.com/tqc/moment.git#no-dynamic-import
,而不是直接从 npm 安装 $ moment
import 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/instance -locale/
您必须在 App.js 上实例化所有单词到您想要的语言,这将适用于您的所有应用程序。
@VanessaChu - 你还有问题吗?
这个解决方案对我有用
嘿,人们, import 'moment/locale/fr';
对我有用,但是如果我想做一个动态的,比如不必导入所有现有的语言,你知道做类似import 'moment/locale/[variable]'
where variable 的任何技巧吗?是需要的语言吗?
所以它适用于每个国家......:/
我希望大多数讨论参与者都能解决他们的问题:) 谢谢@Leeds-eBooks
对于 3.x,我们可能有更多版本的时刻,有/没有动态导入/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在 v.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'
这包括从那一刻起的所有语言配置,它是 js,所以大小没有问题。
之前有人用不同语言的手机安装应用程序时,我遇到了问题。
从此,您可以毫无问题地设置由 moment 定义的任何语言环境,
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"
。