1

我正在使用 Backbone 和 jQuery 开发一个应用程序,并且我有一个关于在哪里放置表单字段标签、页面标题、按钮文本等内容的问题。

我猜这些应该被外部化到某种属性文件中,特别是为了支持 i18n,但我找不到任何关于什么是最佳实践的好的文档。

在过去的 Java 应用程序和 JSP 中,我们将此类内容存储在 .properties 文件中。我是否应该使用相同的概念并将这些内容放入 JSON 文件中,然后发出 XHR 请求以获取文件并以这种方式插入它们?

基本上,在使用客户端/UI 框架开发应用程序时,我正在寻找此类事情的最佳实践。

4

1 回答 1

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"

然后,如果字符串以 a 开头.

".prompts.quit"

它将相对于localeBase(如果它不是从 AKA 绝对查找开始的点查找开始)进行查找。

请注意,这localeBase不是一个必要的概念,它取决于您的偏好。

在您的View render方法中,您将视图传递为template context

var html = myTemplateRenderer_Function(this);
this.el.html(html);

然后,您的模板文件可以访问该l方法,以便您可以执行以下操作:

<button value="<%= l('buttons.ok') %>" />
于 2013-06-28T19:45:40.267 回答