我正在使用RequireJS i18n插件将翻译加载到我的应用程序中。我在理解运行时确定用户首选语言的概念方面遇到了困难。
如果您使用
1) 在我的应用程序外部以非AMD方式设置
这让我有些难过,因为这意味着我的一些应用程序将超出RequireJS的范畴,因此不够整洁。这也意味着所有用户的本地化设置(语言时区、日期格式、数值格式)将保存在全局命名空间中。
2) 单独使用require调用以检索本地化设置
我不确定这是怎么工作的,但也许是这样的:
也许这不会起作用,因为它是异步的?而且
有人能看到解决这个问题的好方法吗?有人使用RequireJS i18n插件来做类似的事情吗?
如果您使用
navigator.language
来确定用户的首选语言,则该插件可以很好地工作,但是在我的应用程序中,用户的语言保存在服务器上的数据库中。因此,我需要在运行时设置区域设置:require.config({
config: {
i18n: {
locale: userLocale
}
}
});
我需要一个聪明的方法,在RequireJS加载我的应用程序之前设置userLocale
。有人知道最好的方法是什么吗?可能的方式包括:
1) 在我的应用程序外部以非AMD方式设置userLocale
:
//run Ajax call to determine user's localization preferencess
var Localization = Localization || getUserLocalization();
//and then...
require.config({
config: {
i18n: {
locale: Localization.userLocale
}
}
});
require(['app']);
这让我有些难过,因为这意味着我的一些应用程序将超出RequireJS的范畴,因此不够整洁。这也意味着所有用户的本地化设置(语言时区、日期格式、数值格式)将保存在全局命名空间中。
2) 单独使用require调用以检索本地化设置
我不确定这是怎么工作的,但也许是这样的:
var Localization = require(['localization']);
require.config({
config: {
i18n: {
locale: Localization.userLocale
}
}
});
require(['app']);
也许这不会起作用,因为它是异步的?而且
app
将无法访问Localization
对象,因此仍然需要将其存储为全局变量。有人能看到解决这个问题的好方法吗?有人使用RequireJS i18n插件来做类似的事情吗?