首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在angular-translate中最好地组织翻译字符串?

如何在angular-translate中最好地组织翻译字符串?
EN

Stack Overflow用户
提问于 2014-07-15 03:53:54
回答 1查看 23.7K关注 0票数 24

我在一个相当大的Angular项目中使用angular-translate。我正在将项目拆分成多个模块,以使其更易于管理,但我无法按模块拆分我的翻译字符串。

例如,我有模块A和B,其中B是A的子模块。有一些字符串与模块A所涵盖的HTML有关,它们放在'/json/localization/A/en.json‘中。同样,我将B的字符串放在'/json/localization/B/en.json‘中。首先,我使用angular-translate的$translationProvider将B的en.json加载到模块B中。然后,我也使用$translationProvider加载模块A的en.json。问题是,加载A的字符串覆盖了B的字符串,它们就会丢失。

使用angular-translate,有没有一种方法可以在不覆盖的情况下加载每个模块的字符串,或者父模块必须从单个en.json加载所有字符串?

下面是我如何加载翻译字符串的示例(用coffeescript编写):

代码语言:javascript
复制
my_module.config(['$translateProvider', ($translateProvider) ->
  $translateProvider.useStaticFilesLoader
    prefix: '/json/localization/A/'
    suffix: '.json'

  $translateProvider.preferredLanguage 'en'
])
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-17 10:41:30

angular-translate支持异步加载部分语言文件。每种语言的所有分词都合并到一个字典中。官方文档可以在这里找到:http://angular-translate.github.io/docs/#/guide/12_asynchronous-loading

它支持为指向模块化语言文件的url模板应用模板:

代码语言:javascript
复制
$translateProvider.useLoader('$translatePartialLoader', {  
  urlTemplate: '/i18n/{part}/{lang}.json'
});

在您的控制器中,您可以添加语言模块并刷新数据绑定,如下所示:

代码语言:javascript
复制
angular.module('contact')
  .controller('ContactCtrl',
    function ($scope, $translatePartialLoader, $translate) {  
      $translatePartialLoader.addPart('contact');
      $translate.refresh();
    });

当然,加载部分也可以在路径的解析阶段中涵盖

或者,您也可以考虑构建自己的自定义加载器函数。http://angular-translate.github.io/docs/#/guide/13_custom-loaders

这为您提供了在一次操作中组合所需语言模块所需的所有灵活性。例如,你可以这样做:

代码语言:javascript
复制
app.factory('customLoader', function ($http, $q) {
  // return loaderFn
  return function (options) {
    var deferred = $q.defer(); 
    var data = {
      'TEXT': 'Fooooo'
    };
    $http.get('nls/moduleA/en.json').success(function(moduleA){
      angular.extend(data, moduleA);
      $http.get('nls/moduleB/en.json').success(function(moduleB){
        angular.extend(data, moduleB);
        deferred.resolve(data);
      });
    });
    return deferred.promise;  
  };
});
票数 33
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24744774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档