如何使用Angular-Translate显示翻译?

And*_*dre 23 javascript json angularjs

与部分加载器结合使用的Angular-translate仅显示键而不是实际的翻译.我已经尝试了一切,但似乎无法找到错误.没有记录错误.

这是我的代码:

app.js

var app = angular.module('myapp', [
  'ngRoute',
  'appRoutes', 
  'pascalprecht.translate',
  'angularTranslate',
  'HomeCtrl'
]); 

angular.module('angularTranslate', ['pascalprecht.translate'])
  .config(function($translateProvider, $translatePartialLoaderProvider ) {
    $translateProvider.useLoader('$translatePartialLoader', {
      urlTemplate: '/languages/{lang}/{part}.json'
    });

  $translateProvider.preferredLanguage('nl');

});
Run Code Online (Sandbox Code Playgroud)

因此模板从/languages/{lang}/{part}.json加载

HomeCtrl.js

angular.module('HomeCtrl', []).controller('HomeController', 
  function($scope, $translate, $translatePartialLoader) {

    $translatePartialLoader.addPart('home');
    $translate.refresh();

});
Run Code Online (Sandbox Code Playgroud)

在Express中我有这个路由来确保实际返回文件而不是路由到Angular:

app.get('/languages/:lang/:part', function(req, res) {
 res.sendFile(req.params.lang + '/' + req.params.part, { root: '././languages' });
});
Run Code Online (Sandbox Code Playgroud)

home.json

{
    "HOMETITLE" : "Geweldige Whatsapp gesprekken.",
}
Run Code Online (Sandbox Code Playgroud)

home.html的

{{ "HOMETITLE" || translate }}
Run Code Online (Sandbox Code Playgroud)

最后我使用此顺序链接了index.html中的所有内容:

<script src="../libs/angular/angular.js"></script>
<script src="../libs/angular-route/angular-route.js"></script>
<script src="../libs/angular-resource/angular-resource.js"></script>
<script src="../libs/angular-translate/angular-translate.js"></script>
<script src="../libs/angular-translate-loader-partial/angular-translate-loader-partial.js"></script>

<script src="../js/controllers/HomeCtrl.js"></script>
<script src="../js/appRoutes.js"></script>
<script src="../js/index.js"></script>
Run Code Online (Sandbox Code Playgroud)

所以要重申我的问题:只显示HOMETITLE而不是正确的翻译.任何帮助是极大的赞赏!

mpr*_*net 14

正如所描述的角度,翻译文件应更换 |||在HTML文件中:

{{ "HOMETITLE" | translate }}
Run Code Online (Sandbox Code Playgroud)

此后是一个独立的片段,包括json翻译:

var app = angular.module('myapp', [
  'pascalprecht.translate',
  'angularTranslate',
]); 

angular.module('angularTranslate', ['pascalprecht.translate'])
  .config(function($translateProvider, $translatePartialLoaderProvider ) {
    $translateProvider.translations('nl', {
      "HOMETITLE" : "Geweldige Whatsapp gesprekken.",
    });
    $translateProvider.preferredLanguage('nl');
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.3/angular.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-translate/2.7.2/angular-translate.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-translate-loader-partial/2.7.2/angular-translate-loader-partial.min.js"></script>
<html ng-app="myapp">
<body>
{{ "HOMETITLE" | translate }}
</body>
</html>
Run Code Online (Sandbox Code Playgroud)


Jam*_*mes 6

从我对角度翻译的经验来看,这里可能会发生一些不同的问题很难确定,因为你的环境对此有影响,如果你有一个github repo我可以克隆我可以肯定.

  1. 你的翻译就像其他人所说的一样,{{"HOMETITLE"| 您可以在此处查看格式化翻译的其他可能方式.我使用带有部分和外部文件加载的过滤器转换遇到了问题,我强烈建议您是否要使用部分加载然后只使用属性来设置翻译,例如

    http://angular-translate.github.io/docs/#/guide/05_using-translate-directive

  2. 您的部分文件加载器正在进入竞争状态,它正在解析{{"HOMETITLE"| 在你真正得到翻译之前翻译}}.由于您可以使用部分加载的默认翻译,我建议您在翻译提供程序配置中输入默认翻译,以确保不是这种情况.像一些其他用户所描述的那样简单

    $translateProvider.translations('nl', {
      "HOMETITLE" : "Geweldige Whatsapp gesprekken.",
    });
    
    $translateProvider.preferredLanguage('nl');
    $translateProvider.forceAsyncReload(true);
    
    Run Code Online (Sandbox Code Playgroud)

添加translateProvider.forceAsyncReload(true); 在配置结束时将强制刷新.但是我建议您使翻译与json文件略有不同,这样您就可以在添加强制重新加载之前查看是否属于这种情况.