使用requireJS和预编译的Handlebars模板加载翻译(i18next)

 ZERO-DOEN 发布于 2023-02-12 16:02

我有一个requireJS设置,包含预编译的Handlebars模板和我在数据库中的翻译i18next.我需要按以下顺序做一些事情:

    从数据库加载我的翻译

    在Handlebars中注册一个帮助器,以便我的预编译模板中的值可以被翻译

我的requireJS配置文件如下所示:

require.config({
  deps: ["main"],   
  paths: {
    'handlebars.runtime': "../assets/js/libs/handlebars.runtime.amd.min",
    i18n: "../assets/js/libs/i18next-1.7.1",

    // Shim Plugin
    use: "../assets/js/plugins/use"
  },

  use: {
    i18n: {
      attach: "i18n"
    }
  } 
});

我的main.js文件看起来像这样,需要namespace.js:

require([
  'namespace',
  'modules/Transport'
], function (
  namespace,
  $,
  Transport
) {
  var Router = Backbone.Router.extend({
    routes: {
      '*any':                'any'
    },

namespace.js将尝试注册Handlebars助手并使用翻译初始化i18next:

define([
  "handlebars.runtime",
  "use!i18n"
], function(
  Handlebars,
  i18n
) {   
  var defaultLanguage = 'en';
  var translations;
  $.when(
      $.getJSON('/api/translations', function (result) {
        translations = result;
      })
  ).then(function () {

    i18n.init({ useCookie: false, resStore: translations, lng: defaultLanguage });

    Handlebars.default.registerHelper('t', function(i18n_key) {
      var result = i18n.t(i18n_key);

      return new Handlebars.default.SafeString(result);
    });
  });

我的modules/Transport.js模块将依赖于namespace.js并将加载预编译的模板.加载预编译模板时,它可用于Handlebars.default.templates.所以我的模块看起来像这样:

define([
  'namespace',
  'templates/compiled/transport_template'
], function(
  namespace,
) {
  i18n.t('translate something');
  var template = Handlebars.default.templates['transport_template'];

我遇到的问题是我不能让requireJS首先加载翻译,然后继续注册帮助程序并在我的模块中进行一些翻译.模块和模板在完成对我的数据库的异步调用之前加载,所以我一直都没有加载错误(或者帮助器或i18next模块)

我真的很困惑,如何在加载我的模块之前先设置requireJS来加载Handlebars和i18next?

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有