如何使用r.js和hbs.js使用多个语言环境

时间:2013-04-27 11:49:48

标签: internationalization requirejs locale handlebars.js require

我有一个项目,我使用require.js和hbs.js(require-handlebars-plugin)等。在我的开发环境中一切正常,但在使用r.js(requirejs optimize)优化项目后,我遇到了问题。

那是;因为hbs.js只编译一个语言环境,整个i18n逻辑被破坏,所以不再可能改变语言环境。我怀疑我不得不为每个语言环境进行优化过程,但我看不出如何。如果有人可以分享他们对这个问题的解决方案,那将是非常好的

谢谢!

1 个答案:

答案 0 :(得分:1)

好的,这就是我解决它的方法:

首先,我为每种语言创建了一个require.js引导程序文件。然后我修改了我的maven pom.xml以执行两次javascript优化,每个区域设置一次。我使用了requirejs-maven-plugin和两个执行元素,每个语言环境一个。每个元素都有一个configFile值,该值指向相应的r.js构建文件。 (每种语言一个)。然后,语言环境的构建文件指向该语言的引导程序文件。

运行优化之后,您现在将拥有每个区域设置的uglified js文件。但很有可能这些都不包含在最终的战争文件中。您必须将r.js build_out文件夹中的uglified文件复制到war中。我通过向maven-war-plugin添加配置元素来做到这一点; warSourceDirectory和webResources复制我的两个语言环境。我还使用了webSourceInclude和webSourceExlude来删除我不想要的文件。

最后一步是在加载站点时加载正确的require bootstrap文件。要做到这一点,只需在index.html中创建一个javascript片段,它首先确定你的语言环境(例如从cookie),然后动态加载引导程序文件

document.write("<script data-main='bootstrap_" + getLocaleString() + "' src='/js/lib/require.js'><\/script>");

感谢https://github.com/SlexAxton/require-handlebars-plugin的作者帮助我解决这个问题。