我正在使用Backbone和jQuery开发一个应用程序,我有一个问题,比如表单字段、页面标题、按钮文本等的标签应该放在哪里。
我猜测这些应该被外部化到某种属性文件中,特别是为了支持i18n,但我找不到任何关于这方面最佳实践的好文档。
在过去使用Java应用程序和JSP时,我们将类似的内容存储在.properties文件中。我是否应该使用相同的概念,将这些东西放在JSON文件中,然后发出XHR请求来获取文件并以这种方式插入它们?
基本上,在使用客户端/UI框架开发应用程序时,我正在寻找这类事情的最佳实践。
如果您使用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') %>" />