我正在使用angular-translate来翻译我的Angular应用程序。 到目前为止,这种方法运作良好。
现在我要求用另一种语言翻译页面的某些部分而不是页面的其他部分。
具体来说:
页面的外壳(导航,标题等)应翻译成
根据我用`$ translate.use(lang)设置的语言。
某些内容仅以特定语言提供。因此
显示该内容的页面部分应为
翻译成与内容相匹配的语言。
示例:
<!--v this should be English -->
<div class="alert alert-info alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
<strong translate>ALERT</strong>
</div>
<!--^ this should be English -->
<div class="panel panel-default">
<!--v this should be English -->
<div class="panel-heading">
<h3 class="panel-title" translate>TITLE</h3>
</div>
<!--^ this should be English -->
<!--v this should be German-->
<div class="panel-body">
<label class="control-label" translate="DESCRIPTION" translate-values="{ p0: someParameter }"></label>
[...]
</div>
<!--^ this should be German-->
</div>
我在翻译机制中也需要variable replacement,因为到目前为止它正在使用angular-translate
到目前为止,我找不到满足这一要求的优雅解决方案。 感谢您提供任何帮助,提示或替代解决方案。
答案 0 :(得分:1)
您可以使用描述here构建自定义异步加载程序。
您可以通过组合语言设置下面的data
。
var app = angular.module('myModule', []);
app.config(function ($translateProvider) {
$translateProvider.useLoader('customLoader', {
// if you have some custom properties, go for it!
});
});
app.factory('customLoader', function ($http, $q) {
// return loaderFn
return function (options) {
var deferred = $q.defer();
// do something with $http, $q and key to load localization files
var data = {
'TEXT': 'Fooooo'
};
return deferred.resolve(data);
// or
return deferred.reject(options.key);
};
});
答案 1 :(得分:1)
您可以使用$ translatePartialLoader和自定义模板网址提供功能:
$translateProvider.useLoader('$translatePartialLoader', {
urlTemplate: function(part, lang) {
if (part.indexOf('json') > -1) {
return 'translations/' + part;
}
return 'translations/' + part + '_' + lang + '.json';
}
});
使用
加载需要根据$ translate.use翻译的内容$translatePartialLoaderProvider.addPart('content');
这样将根据用户语言首选项加载content_lang.json。对于具有固定语言的内容加载确切文件
$translatePartialLoaderProvider.addPart('fixed_de.json');
加载此文件时始终忽略用户语言选择。