Moment: 区域设置更改不起作用

创建于 2016-02-15  ·  22评论  ·  资料来源: moment/moment

当我尝试更改语言环境值时,没有任何反应,甚至没有错误。

      this.$log.log(moment.locale()); // returns 'en'
      this.$log.log(moment.locale('fr')); // set to french but returns 'en'
      this.$log.log(moment.locale()); // of course, still returns 'en' instead of 'fr'

我也从 Chrome 开发者工具控制台尝试过:

> moment.locale('fr')
-> "en"
Troubleshooting

最有用的评论

我补充说:
import 'moment/locale/fr';

并使用:
moment.locale('fr')

现在将语言环境正确设置为法语。
它不是动态的,但现在可以完成这项工作。

我想我可以关闭它并感谢所有回答的人。
希望这个问题对使用 TypeScript/Angular/Jspm 的人有所帮助。

所有22条评论

您是否正在使用可能为您提供不同时刻实例的模块加载器?

import m from 'moment';

this.$log.log(m.locale());
this.$log.log(m.locale('fr'));
this.$log.log(m.locale());

this.$log.log(window.moment.locale());
this.$log.log(window.moment.locale('is'));
this.$log.log(window.moment.locale());

我在一个有角度的项目中,模块是用 JSPM 处理的。
我不明白你说的“这可能会给你一个不同的时刻”是什么意思

这 3 行是我尝试过的真实代码,以相同的方法使用相同的时刻。
如果我使用特定变量,我会得到相同的结果。

import * as moment from 'moment';

export function registerDateFormatService(appModule: angular.IModule) {
   appModule.service('dateFormatService', DateFormatService);
}

export class DateFormatService {
   constructor(private $log: ng.ILogService) {
   }

   public format(value: moment.Moment, displayFormat: string): string {
      this.$log.log(value.locale());
      this.$log.log(value.locale('fr'));
      this.$log.log(value.locale());
      return value.format(displayFormat);
   }
}

结果是:

angular.js:13239 Moment {_isAMomentObject: true, _i: "2010-10-20 4:30", _f: "YYYY-MM-DD", _isUTC: false, _pf: Object…}_d: Wed Oct 20 2010 00:00:00 GMT+0200 (CEST)_f: "YYYY-MM-DD"_i: "2010-10-20 4:30"_isAMomentObject: true_isUTC: false_isValid: true_locale: Locale_abbr: "en"_ordinalParse: /\d{1,2}(th|st|nd|rd)/_ordinalParseLenient: /\d{1,2}(th|st|nd|rd)|\d{1,2}/ordinal: (number)__proto__: Locale_pf: Object__proto__: Moment
angular.js:13239 en

您要导入区域设置数据吗? 您使用的是哪个 .js 文件?

您的意思是在该行之后添加另一个导入:
从“时刻”导入 * 作为时刻;

或在模块 sens 中导入,这里使用 JSPM。
(我在 jspm 模块文件夹中有 moment.js 和很多看起来像 localexx.js 像 fr.js 的东西。)

通读文档的“在哪里使用它”部分,看看这些场景是否适用于您。 通常,您要么需要使用moment-with-locales.js ,要么需要单独加载区域设置数据。 大多数加载器不会自动获取语言文件,因此您可能需要单独导入它们。

基本上,如果您尝试切换到未加载的语言环境,moment 将恢复到en语言环境。

我会用这个来试验我能做的。
我正在使用添加到 package.json 的简单行,然后由 jspm 通过 npm install 使用
"moment": "github:moment/moment@^2.11.2"

然后我将它与单个导入一起使用:
import * as moment from 'moment';

我在此评论中写了它,以跟踪可能具有相同用法的未来用户。
我将发布我的实验结果。
谢谢

我补充说:
import 'moment/locale/fr';

并使用:
moment.locale('fr')

现在将语言环境正确设置为法语。
它不是动态的,但现在可以完成这项工作。

我想我可以关闭它并感谢所有回答的人。
希望这个问题对使用 TypeScript/Angular/Jspm 的人有所帮助。

也许将此添加到文档中。 我遇到了同样的问题,越来越多的人开始使用 jspm 而不是 Bower。

真高兴你做到了! 我在文档存储库中添加了一个问题。 随意在那里发送 PR。

像这样导入
导入'时刻/src/locale/fr-ca';
导入'时刻/src/locale/en-ca';

谢谢@younss ,你的方法对我

@younss你是我的救星! 现在是 2017 年 10 月 10 日,文档没有指定此更改! 从 2.18 时刻更新到 2.19.0 并且语言环境导入完全崩溃:(
使用反应。
再次感谢!

当我更新到 2.19.1 时遇到了同样的问题
也许这可以帮助:

消除 :

  • node_modules 文件夹
  • 包-lock.json

重新启动:
安装

我通常保持 import 'moment' 并在我的源中使用语言环境。 所以不需要像@younss那样导入。
使用 Vue.js。
这对我有用。

也许 pb 在 package-lock.json 文件中,它没有正确更新 moment 节点数据。 通过删除它并重新启动 npm install,它会创建一个新的 package-lock.json 文件,其中所有数据都已更新。

@younss ,谢谢,对我

这个解决方案对我有用..在这里

我补充说:
导入“时刻/语言环境/fr”;

这又变了吗?
我安装了:

npm i moment-with-locales-es6
npm i moment

我用一个函数创建了一个类:

import * as moment from 'moment';
import 'moment/locale/pt-br';
import 'moment/locale/fr-ca';

export class DatetimeFormatPipe
    transform(date: string): string {
        moment.locale('pt-BR');
        console.log(moment.locale()); 
        console.log('pt-BR', moment(date).toLocaleString());

        moment.locale('fr-CA');
        console.log(moment.locale());
        console.log('fr-CA', moment(date).toLocaleString());

        return "";
    }
}

日志如下:

pt-br
pt-BR 2016 年 12 月 20 日星期二 10:45:12 GMT+0100
fr-ca
fr-CA 2016 年 12 月 20 日星期二 10:45:12 GMT+0100

像这样导入
导入'时刻/src/locale/fr-ca';
导入'时刻/src/locale/en-ca';

它对我有用,谢谢!

我用:

import moment from 'moment/dist/moment';
import fr from 'moment/dist/locale/fr';

moment.locale('fr', fr);

它有效。
其他解决方案对我不起作用。

import moment from 'moment/dist/moment';
import 'moment/dist/locale/ru';

moment.locale('ru');

唯一对我有用。 @ligne13感谢您的提示!

时刻 2.25.2

你好,

当使用'import 'moment/locale/fr';' 在我的 Node/Express 应用程序中,我收到此错误: “语法错误

我用谷歌搜索了这个,我尝试添加

如果我无法添加此导入,是否有另一种更改语言环境的方法?

谢谢

保罗


眼镜 :

  • 操作系统:Ubuntu 20.04 到 WSL2
  • 节点:12.18.3
  • 净资产管理:6.14.6
  • 快递:4.16.1
  • MomentJS:2.27

你好,

当使用'import 'moment/locale/fr';' 在我的 Node/Express 应用程序中,我收到此错误: “语法错误

我用谷歌搜索了这个,我尝试添加

如果我无法添加此导入,是否有另一种更改语言环境的方法?

谢谢

保罗

眼镜 :

  • 操作系统:Ubuntu 20.04 到 WSL2
  • 节点:12.18.3
  • 净资产管理:6.14.6
  • 快递:4.16.1
  • MomentJS:2.27

@pbrissaud

您还不能在 node.js 中使用“导入”。 我自己没有尝试过,但我认为这会奏效:

require('moment/locale/fr')
moment.locale('fr');
此页面是否有帮助?
0 / 5 - 0 等级