簡體   English   中英

如何建立在非全局語言環境中工作的“時刻”功能?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM