gpt4 book ai didi

angularjs - 如何在 Angular 翻译中最好地组织翻译字符串?

转载 作者:行者123 更新时间:2023-12-03 11:20:57 24 4
gpt4 key购买 nike

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

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

使用 Angular 翻译,有没有办法在不覆盖的情况下为每个模块加载字符串,或者父模块是否必须从单个 en.json 加载所有字符串?

这是我如何加载翻译字符串的示例(在 CoffeeScript 中):

my_module.config(['$translateProvider', ($translateProvider) ->
$translateProvider.useStaticFilesLoader
prefix: '/json/localization/A/'
suffix: '.json'

$translateProvider.preferredLanguage 'en'
])

最佳答案

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

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

$translateProvider.useLoader('$translatePartialLoader', {  
urlTemplate: '/i18n/{part}/{lang}.json'
});

在您的 Controller 中,您可以添加语言模块并刷新数据绑定(bind),如下所示:
angular.module('contact')
.controller('ContactCtrl',
function ($scope, $translatePartialLoader, $translate) {
$translatePartialLoader.addPart('contact');
$translate.refresh();
});

当然,加载部分也可以在路由的解析阶段进行

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

这提供了一次性组合所需语言模块所需的所有灵 active 。例如。你可以这样做:
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;
};
});

关于angularjs - 如何在 Angular 翻译中最好地组织翻译字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24744774/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com