【问题标题】:React Native moment.locale does not workReact Native moment.locale 不起作用
【发布时间】:2017-12-29 02:21:02
【问题描述】:

我正在使用 React Native 版本 0.45.1 和 Moment 版本 2.18.1。

我正在尝试根据本地设备更改日期,但我总是在“en-Us”语言环境中获取日期。 我无法像在某些解决方案中看到的那样导入所有语言环境,因为我事先不知道设备语言环境。 (例如:https://github.com/moment/moment/issues/2962

还有其他选择吗?

【问题讨论】:

    标签: react-native locale momentjs


    【解决方案1】:

    我没有按语言环境导入语言环境,而是使用此解决方案全局设置语言环境:

    import { getDeviceLocale } from "react-native-device-info";
    import moment from "moment";
    import "moment/min/locales";
    
    const deviceLocale = getDeviceLocale();
    
    moment.locale(deviceLocale); //set your locale (eg: fr)
    moment(1316116057189).fromNow(); // il y a 7 ans
    

    分享给需要的人

    【讨论】:

      【解决方案2】:

      我无法像在某些解决方案中看到的那样导入所有语言环境,因为我事先不知道设备语言环境。

      实际上,您可以在这样的时刻import all of the localesmoment-with-locales 就在homepage 上提到):

      import moment from 'moment/min/moment-with-locales'
      // Or if you are using require instead:
      var moment = require('moment/min/moment-with-locales')
      

      然后您应该能够使用您喜欢的任何模块/方法获取设备区域设置(在我的示例中,我将使用Expo)并将时刻区域设置更改为它。例如:

      var deviceLocale = await Expo.Util.getCurrentLocaleAsync()
      moment.locale(deviceLocale)
      

      我不会说导入所有内容是处理此问题的最佳方法,因为 moment-with-localesmoment 大,但它可以完成您希望它完成的工作。您也可以按照我链接到的 Github 评论中提到的那样,只导入您支持的语言环境。

      【讨论】:

      • 我想过这个——但我不喜欢那个方向。在我看来,将所有内容导入应用程序并不是最好的方法,也不是写入移动设备时的正确方法。现在,删除了“moment”包,我正在使用带有“toLocaleDateString”方法的 Date 对象将日期转换为正确的格式。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-19
      • 2021-03-08
      • 2018-06-20
      • 2017-10-14
      • 2021-11-05
      相关资源
      最近更新 更多