我正在使用Backbone和jQuery开发一个应用程序,我有一个关于在哪里放置表单字段,页面标题,按钮文本等标签的问题。
我猜这些应该被外化到某种属性文件中,特别是为了支持i18n,但是我无法找到任何关于什么是最佳实践的好文档。
过去使用Java应用程序和JSP,我们将这样的内容存储在.properties文件中。我应该使用相同的概念并将这些内容放在JSON文件中,然后发出XHR请求来获取文件并以这种方式插入它们吗?
基本上,在使用客户端/ UI框架开发应用程序时,我正在寻找这种方法的最佳实践。
答案 0 :(得分:1)
如果您使用require,则可以将语言文件创建为对象:
locale/en_gb.js
define({
buttons: {
ok: 'Ok',
error: 'Error',
prompts: {
saveChanges: 'You have unsaved changes. Would you like to save them?',
quit: 'Are you sure you want to quit?'
}
},
pages: {
home: 'Home'
contact: 'Contact'
}
});
您有不同语言的区域设置文件。
在扩展视图中,您可以创建一些这样的方法:
localeBase: null,
currentLocale: null,
loadLocale: function(localeName) {
require('locale/'+localeName, function(Locale) {
this.currentLocale = Locale;
});
},
l: function(lookupStr) {
// Lookup 'lookupStr' in 'this.currentLocale'
}
l
方法使用.
带注释的查找字符串,如:
"pages.home"
返回"Home"
或者如果localeBase
设置为:
"buttons"
然后,如果字符串以.
开头:
".prompts.quit"
它将相对于localeBase
进行查找(如果它不是从开始AKA绝对查找的点查找开始的话)。
请注意,localeBase
不是必需的概念,它取决于您的偏好。
在View
render
方法中,您将视图作为template context
传递:
var html = myTemplateRenderer_Function(this);
this.el.html(html);
然后,您的模板文件可以访问l
方法,以便您可以执行以下操作:
<button value="<%= l('buttons.ok') %>" />