因此,我尝试了两种方法来设置Moment.js的语言环境。两种方法都不起作用,或者我应该说为时已晚。我的“愿望”是异步导入语言环境文件(灵感来自here)。
当我进入页面时,日期仍然是英语格式,即使它应该是德语。
我正在使用以下方式异步加载数据:
window.moment = require('moment');
moment().format();
window.moment = require('moment-shortformat');
moment().short()
window.moment = require('moment-timezone');
const lang = document.documentElement.lang.substr(0, 2); //for the language
if(lang != 'en'){
import(`moment/locale/${lang}.js`);
moment.locale(lang)
}
由于import(moment/locale/${lang}.js);
解决了承诺,因此我在加载文件时在控制台中签入。 moment.locale(lang)
行之后大约1秒钟(难怪现在还没有准备好显示正确的翻译日期)。
一个小的检查结果表明:当我在控制台中写入moment.locale()
时,正确设置了语言环境。
如果我不使用延迟加载,就像这样:
import 'moment/locale/de';
moment.locale(lang);
一切正常。
我的第二种方法是更长的时间,但是仍然没有运气。把它们加起来。我使用
在php后端创建了一个javascript文件:...
$file = base_path('node_modules/moment/locale/' . $locale . '.js');
...
所以我可以动态调用正确的js文件。但是仍然没有运气。
知道我在做什么错吗?
答案 0 :(得分:1)
是的,如果它是异步的并且正在等待诺言,则必须链接一个then()
呼叫。这是https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import
import('/modules/my-module.js')
.then((module) => {
// Do something with the module.
});
答案 1 :(得分:1)
由于动态导入返回了承诺,因此您可以在解决承诺后调用moment.locale:
if(lang != 'en'){
import(`moment/locale/${lang}.js`).then(module => {
moment.locale(lang)
});
}