[英]How can I build a 'moment' function that works in a non-global locale?
使用MomentJS,如有必要,我可以使用.locale
(或旧版本中的.lang
在特定时刻实例(而不是全局)上设置语言环境。 我如何创建一个等效于moment
的函数(它的所有42个签名),该函数始终在不同于全局的特定语言环境中工作?
我在Web项目中有一个必须与自定义语言环境一起工作的子模块。 我们不希望在此特定子模块之外使用此语言环境,但希望在该子模块内一致地使用它。 所以我基本上想要一个我可以像moment
一样调用的moduleMoment
(或任何东西),但是它可以在自定义区域设置中工作。 有内置的方法吗?
注 :我不是在谈论改变现有实例的语言环境,我说的是调用moment
使用比其全球区域以外的区域设置功能(在其所有的各种不同的签名)。 所以这行不通:
var m = moment(args).locale(localeId);
...因为将在全局语言环境中处理args,然后事后在实例上更改语言环境,为时已晚。
我能找到的唯一方法是拥有一个临时设置语言环境的函数,调用moment
,然后将语言环境设置回前一个,如下所示:
function moduleMoment() {
var prevLocaleId, m;
prevLocaleId = moment.locale();
try {
moment.locale(customLocaleId);
m = moment.apply(this, arguments);
return m;
} finally {
moment.locale(prevLocaleId);
}
}
或者可以将其添加到moment
,如下所示:
moment.localized = function(locale) {
var prevLocaleId, m, args;
prevLocaleId = moment.locale();
try {
moment.locale(locale);
m = moment.apply(this, Array.prototype.slice.call(arguments, 1));
return m;
} finally {
moment.locale(prevLocaleId);
}
};
不幸的是,Moment似乎不支持此功能。 GitHub问题跟踪器中有一个新功能请求: https : //github.com/moment/moment/issues/2291
您可以编写一个函数,将其参数转发给 moment
构造函数,然后应用所需的语言。
这是一个例子:
function localizedMoment() { return moment.apply(null, arguments).locale("fr"); }
如果需要允许参数,只需使用 Array.prototype.slice
:
function localizedMoment(locale) { var args = Array.prototype.slice.call(locale, 1); return moment.apply(null, args).locale(locale); }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.