Moment: 如何在 React Native 中更改 momentJS 中的语言环境?

创建于 2018-01-30  ·  21评论  ·  资料来源: moment/moment

这就是我所拥有的,但它不起作用。

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 不是函数

Troubleshooting Up-For-Grabs

最有用的评论

import 'moment/min/moment-with-locales'

成功了!

moment.locale('fr'); moment().format("ll");

结果如预期的那样"1 févr. 2018"

所有21条评论

确认一下, 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 可能已经修复了它。 不过,我的解决方法是:

  • 从 git 安装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()返回的内容是否是您设置的内容。 它无声无息地向后退去。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

alvarotrigo picture alvarotrigo  ·  3评论

vbullinger picture vbullinger  ·  3评论

RobinvanderVliet picture RobinvanderVliet  ·  3评论

Shoroh picture Shoroh  ·  3评论

dbshwang picture dbshwang  ·  3评论