javascript - 在 Backbone 应用程序中重新加载主干 View 和 i18n 翻译文件?

标签 javascript backbone.js requirejs rails-i18n

我在 BackboneJS 应用程序中使用 i18n.js 进行文本本地化。但陷入了我需要在应用程序中更改语言时重新加载文本翻译的阶段。我在语言更改时调用设置 view render() 函数,但对我不起作用,但在重新加载 index.html 时它起作用。那么我如何重新加载翻译文件并查看以反射(reflect)更改。以下是我尝试过的--

应用程序引导.js

var locale = {};

    locale.language = "en-us";//default

    locale.setLanguage = function (language) {
        localStorage.setItem('localLanguage', '' + language);
    };

    locale.getLanguage = function () {
        return localStorage.getItem('localLanguage');
    };
    require.config({
        config: {
            i18n: {
                locale: locale.getLanguage()
            }
        }
    });

settingView.js

define(['compiled/settingTmpl','i18n!nls/setting'
], function (SettingTmpl,setting) {
    'use strict';

    var SettingView = Backbone.View.extend({

        events: {
            "change #languageSelect": "changeLocale"
        },
        initialize: function () {
            WellNation.helper.log("Setting view initialize");
            this.render();
        },
        changeLocale: function (e) {
            var locale = e.currentTarget.value;
            WellNation.locale.setLanguage(locale);
            this.render();
        },
        render: function () {
            this.$el.html(SettingTmpl({speak:setting}));
            return this;
        }
    });

    return SettingView;
});

设置Tmpl.handlebars

<div class="row">
        <label>{{speak.language}}</label>
        <select id="languageSelect">
            <option value="en-us">English (United States)</option>
            <option value="fr-fr">Francais (France)</option>
        </select>
    </div>

nls/fr-fr/setting.js

  define({
      "language" : "langue"
    });

nls/setting.js

  define({
      "root" : {
      "language" : "Language"
      },
      "fr-fr" : true // The system will accept French
    });

最佳答案

根据this所以问题和this github issue无法使用 i18n.js 在运行时更改区域设置。

从官方文档来看,并不清楚我们是否可以在运行时使用它:RequireJS 将使用浏览器的 navigator.language 或 navigator.userLanguage 属性来确定要使用的区域设置值my/nls/colors,因此您的应用程序不必更改。如果您喜欢设置区域设置,您可以使用模块配置将区域设置传递给插件"

因此,经过一些研究并遍历 i18n.js 源代码后,我发现最好的解决方案是保持相同的结构并使用 location.reload()

关于javascript - 在 Backbone 应用程序中重新加载主干 View 和 i18n 翻译文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26650501/

相关文章:

javascript - 使用 RequireJS 加载时未定义 React

javascript - Angular 和 requirejs,带有注入(inject)器的提供者

javascript - 将联系表单添加到 jQuery 模式 (fallr)

JavaScript;分隔符之间的正则表达式并用空格分隔

javascript - 主干历史推送状态到 hashtag IE9

javascript - 创建 View 的主干 View

javascript - RequireJS define() 不调用回调

javascript - PHP stdclass对象返回给ajax

javascript - 第一个点上的 Highstock 标志未呈现

javascript - backbone.js View 中的 tagName 键