我是新成员,和烬-cli,我仍然在学习的一切。我试图在成员-i18n模块中添加多语言支持。
我在bower中安装了依赖项。
bower install cldr ember-i18n --save我让我的进口品在Brocfile.js里工作
app.import('vendor/cldr/plurals.js');
app.import('vendor/ember-i18n/lib/i18n.js');在我的应用程序中,i18n车把帮手正在工作
{{t hello}}给了我“缺少的翻译:你好”
我不知道在哪里放置或引用包含翻译的成员-cli文件夹结构中的文件。
每一个成员-i18n文档,它看起来会像这样
Ember.I18n.translations = {
hello: "Hello World",
}我试着把它粘在app.js上,只是想看看它能不能正常工作,但是得到了错误:
Uncaught TypeError: Cannot set property 'translations' of undefined发布于 2014-07-08 09:17:26
您可以在initializer (医生来了)中添加您的翻译。通过成员-cli,您可以通过在命令行上执行ember generate initializer i18n生成一个。
在初始化器中,可以设置翻译:
var TRANSLATIONS = {
'user.edit.title': 'Edit User',
'user.followers.title.one': 'One Follower',
'user.followers.title.other': 'All {{count}} Followers',
'button.add_user.title': 'Add a user',
'button.add_user.text': 'Add',
'button.add_user.disabled': 'Saving...'
};
var i18nInitializer = {
name: 'i18n',
initialize: function() {
Ember.I18n.translations = TRANSLATIONS;
}
};
export default i18nInitializer;如果您希望在java-properties文件中通过ajax检索语言数据,您可以使用ajax检索它,并使用java-properties.js解析它。它也可以通过Bower获得。
发布于 2014-08-29 21:01:20
我遇到了与Weston相同的问题,在进行了一些研究之后,我实现了一个可以动态加载用户指定语言的解决方案。对于OP来说,这可能太晚了,但是我把它放在这里,供其他可能对此过程有疑问的人参考。
我的解决方案可能不是处理这个问题的理想方法,但它似乎与我的站点很好地工作。
我正在使用Ember-cli和包含成员-i18n的国际化,以及CLDR来处理复数。我的网站使用cookie来存储用户语言,用户语言用于在站点加载时加载适当的语言文件。cookie还会传递给REST服务(一些API调用返回可以包含翻译文本的对象)。我正在使用jQuery来处理我的cookie。
首先,我创建了我的翻译文件,每个语言都有一个,它们只是javascript文件,然后我将使用$.getScript加载这些文件。我将它们存储在公共/javascript文件夹Ember中的一个“翻译”文件夹中。
translations-en.js
Ember.I18n.translations = {
'hello' : 'Hello World!',
...
}translations-fr.js
Ember.I18n.translations = {
'hello' : 'Bonjour Monde!',
...
}然后,我为CLDR设置了初始化器,它根据我的站点使用的用户--lang cookie --设置默认语言--如果cookie还不存在,它默认为'en‘并创建cookie。
\app\initializers\cldr.js
export default {
name: 'cldr',
initialize: function() {
var lang = $.cookie('user-lang');
if (lang === undefined) { // no cookie exists yet
lang = 'en';
$.cookie('user-lang', lang, {expires:365, path:'/'});
}
CLDR.defaultLanguage = lang;
}
};现在,在应用程序路由的beforeModel函数中,我根据存储在CLDR.defaultLanguage中的值获取转换文件。
\app\routes\application.js
export default Ember.Route.extend({
beforeModel: function() {
$.getScript('./javascript/translations/translations-' + CLDR.defaultLanguage + '.js')
.fail(function(jqxhr, reason, exception) {
// handle failure
});
}
});如果您的站点有大量的翻译字符串或多种语言,您可能不希望每次有人加载您的应用程序时都包含您的翻译文件,或者需要一段时间才能加载。在这种情况下,您可以用ajax调用替换这个getScript,并获得后端提供的文件。在我的例子中,没有太多的翻译字符串,所以这是可以的。
现在,每当用户想要更改语言时,我所要做的就是更新我的用户- language的值,然后重新加载站点,这将再次通过初始化程序和beforeModel函数,并加载适当的语言文件。
export default Ember.Controller.extend({
actions: {
changeLanguage: function(lang) {
$.cookie('user-lang', lang);
window.location.reload();
}
}
});每当用户重新加载页面或返回站点时,默认情况下,他们最后选择的语言将从cookie中加载。当然,用户可以从不同的浏览器中删除cookie或登录,在这种情况下,站点将返回默认的'en‘语言。为了解决这个问题,用户的语言选择需要在后端的某个位置保持,并在应用程序加载时被获取--但这是另一项任务。
发布于 2014-06-22 21:24:34
命名空间是错误的。
你需要Em.I18n.translations。
试过了。很管用。
我不知道在哪里放置或引用包含翻译的成员-cli文件夹结构中的文件。
我也是。当然,app.js可以工作,但也许有人可以提供一个很好的提示。我也是新来的.
https://stackoverflow.com/questions/24344739
复制相似问题