如何更改 moment.js 的语言?

IT技术 javascript momentjs
2021-02-26 23:14:38

我正在尝试更改由 moment.js 设置的日期的语言。默认是英语,但是我想设置德语。这些是我尝试过的:

var now = moment().format("LLL").lang("de");

它给NaN.

var now = moment("de").format("LLL");

这甚至没有react。

var now = moment().format("LLL", "de");

没有变化:这仍然以英语产生结果。

这怎么可能?

6个回答

您需要 moment.lang (警告lang()自 moment 起已弃用2.8.0,请locale()改用):

moment.lang("de").format('LLL');

http://momentjs.com/docs/#/i18n/


从 v2.8.1 开始,moment.locale('de')设置本地化,但不返回moment. 一些例子:

var march = moment('2017-03')
console.log(march.format('MMMM')) // 'March'

moment.locale('de') // returns the new locale, in this case 'de'
console.log(march.format('MMMM')) // 'March' still, since the instance was before the locale was set

var deMarch = moment('2017-03')
console.log(deMarch.format('MMMM')) // 'März'

// You can, however, change just the locale of a specific moment
march.locale('es')
console.log(march.format('MMMM')) // 'Marzo'

总而言之,调用locale全局moment设置为所有未来moment实例设置语言环境,但不返回 的实例moment调用locale一个实例,为该实例设置它并返回该实例。

此外,正如 Shiv 在评论中所说,请确保您使用“moment-with-locales.min.js”而不是“moment.min.js”,否则它将无法工作。

更新: Deprecation warning: moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages. Arguments: fr
2021-04-25 23:14:38
您需要导入想要的语言,否则这将不起作用: import moment from 'moment'; import localization from 'moment/locale/de' moment().locale("de", localization).format('LLL')
2021-04-25 23:14:38
从'moment/min/moment-with-locales'导入时刻;
2021-05-06 23:14:38
如果您使用“moment.min.js”,它将不起作用;你需要“moment-with-locales.min.js”
2021-05-09 23:14:38
在文档中,您可以通过这样做来创建特定于语言的时刻实例。如果您先格式化,语言将不会处理。或者,您可以在整个脚本中执行类似var deMoment = moment(); deMoment.lang('de')和重用deMoment而不是时刻的操作。
2021-05-11 23:14:38

我还必须导入语言:

import moment from 'moment'
import 'moment/locale/es'  // without this line it didn't work
moment.locale('es')

然后像往常一样使用时刻

alert(moment(date).fromNow())
感谢您解释特定语言环境的导入。
2021-04-19 23:14:38
是的,这是正确的答案......谢谢,我正在想知道为什么它不起作用。但这对于可能使用的任何语言类型来说都是一种真正的痛苦。一定有更好的方法。
2021-04-20 23:14:38
根据文档,如果有人想要包含所有语言环境,那么他/她可以使用它require("moment/min/locales.min");或使用导入import 'moment/min/locales.min'
2021-04-25 23:14:38
您的回答比其他回答更有帮助,因为您已经提到 import 'moment/locale/es'
2021-04-26 23:14:38
谢谢,正是我需要的
2021-04-26 23:14:38

最快的方法:使用 Bower 安装

我刚刚用 bower 安装了 moment 并de.js在我的 html 项目中链接为 javascript 资源。

bower install moment --save

您也可以手动下载moment.jsde.js

在您的项目中链接“de.js”

链接de.js我的主项目文件中的 自动更改了对 moment 类及其方法的所有访问的语言环境。

将有 没有必要再去做一个moment.locale("de").或者 moment.lang("de"). 源代码。

只需像这样链接您想要的语言环境:

<script src="/bower_components/moment/moment.js"></script>
<script src="/bower_components/moment/locale/de.js"></script>

或者bower_components,如果您通过右键单击下载 moment.js 1990ies-style,则可以在没有路径的情况下链接库,这在大多数情况下仍然可以正常工作。

当然,但您仍然需要在我的测试中加载 index.html 中的 javascript 文件。这在 2017 年 5 月仍然是一个问题,也许 moment 应该将其包含在他们的文档中。
2021-04-16 23:14:38
“将不再需要在源代码中执行 moment.locale("de"). 或 moment.lang("de"). 。”。我认为这对于更改语言环境的动态应用程序仍然很有用。就像您理论上可以通过我的 angular 应用程序中的 lang/country 下拉菜单更改我的应用程序中的语言环境一样,然后 moment 应该动态更改格式,我认为使用 moment.locale($lang)
2021-05-01 23:14:38
这应该是正确答案。只需将所需的本地链接到。<script src="/bower_components/moment/locale/de.js"></script>它现在对我有用
2021-05-11 23:14:38

使用 momentjs 2.8+,执行以下操作:

moment.locale("de").format('LLL');

http://momentjs.com/docs/#/i18n/

这是 coorect,只是不要忘记导入要使用的语言环境(参见 Agu Dondo 的回答)。
2021-04-16 23:14:38
如果这个不起作用,试试这个: moment().locale('de').format('LLL');
2021-04-19 23:14:38
应该工作;你能提供一个例子说明它在哪里不起作用吗,你是如何使用 moment 的(你是通过 npm 安装的,等等)?
2021-04-29 23:14:38
apadana 是对的:您使用 设置区域设置moment.locale('de'),然后通过moment()(注意括号)然后创建一个表示现在日期的新对象format('LLL')括号很重要。在 2.20 中测试。另外,请记住使用moment-with-locale.js并在必要时将名称更改为moment.js. moment-with-locale.js在我的情况下,Django 只是拒绝加载
2021-05-10 23:14:38
最近的时刻(我在 2.18.1 中测试过)使用这个:moment.locale("de"); var m = moment().format("LLL")
2021-05-14 23:14:38

2017/2018 年底:其他答案有太多旧代码需要编辑,所以这里是我的替代答案:

需要

let moment = require('moment');
require('moment/locale/fr.js');
// or if you want to include all locales:
require("moment/min/locales.min");

与进口

import moment from 'moment';
import 'moment/locale/fr';
// or if you want to include all locales:
require("moment/min/locales.min");

利用:

moment.locale('fr');
moment().format('D MMM YY');  // Correct, set default global format 
// moment.locale('fr').format('D MMM YY') //Wrong old versions for global default format

带时区

*要求:

require('moment-range');
require('moment-timezone');

*进口:

import 'moment-range';
import 'moment-timezone';

使用区域:

const newYork    = moment.tz("2014-06-01 12:00", "America/New_York");
const losAngeles = newYork.clone().tz("America/Los_Angeles");
const london     = newYork.clone().tz("Europe/London");

格式化日期的函数

const ISOtoDate = function (dateString, format='') {

 // if date is not string use conversion:
 // value.toLocaleDateString() +' '+ value.toLocaleTimeString();

  if ( !dateString ) {
    return '';
  }

  if (format ) {
    return moment(dateString).format(format);
  } else  {
    return moment(dateString);  // It will use default global format
  }  
};
唯一对我有用的是将时刻导入更改为: import moment from 'moment/min/moment-with-locales';
2021-04-17 23:14:38
@leojnxs 是的,如果您想包含所有语言环境,但可以只使用一个或多个特定语言环境为每种语言进行导入
2021-05-08 23:14:38