【问题标题】:How to load JSON array to translate AngularJS webpage with Angular-Translate如何加载 JSON 数组以使用 Angular-Translate 翻译 AngularJS 网页
【发布时间】:2016-04-26 11:53:26
【问题描述】:

我仍在大量学习 AngularJS,所以请原谅我所有质量差的代码/缺乏知识。

我想做的事

我想将我的网页翻译成 2 种语言。它目前在我使用 index.html 中的 Angular-Translate 翻译静态内容时有效。像这样

function translateConfiguration($translateProvider) {

    $translateProvider.useSanitizeValueStrategy(null);

    $translateProvider.useStaticFilesLoader({
      files: [{
        prefix: '../JSON/locale-',
        suffix: '.json'
      }]
});

$translateProvider.preferredLanguage('en');
$translateProvider.fallbackLanguage('en');

};

我为 EN 和 RU 语言环境加载了我的简单 JSON 文件,结构如下

{
 "HEADING" : "Lorem",
 "TEXT" : "Ipsum"
}

然后我通过 Angular-translate 指令访问变量

<h1 class="z-logo header-text md-display-1" translate="HEADING">
</h1>

一切正常。

我希望能够对我的自定义指令和 ng-repeat 做同样的事情。

问题

我的 AngularJS 网站中有多个自定义指令。比如

<about-card flex="33" flex-xs="100" flex-sm="100" class="center-content" ng-repeat="data in aboutCardCtrl.info">
</about-card>

这是通过自定义指令加载并从 JSON 文件中检索信息的模板代码

<md-card class="card-bg card-height">
  <md-card-title layout="column" class="about-card">
    <md-card-title-media class="center-elements">
      <img class="md-media-lg" ng-src="{{data.image}}" alt="{{data.imageAlt}}"/>
    </md-card-title-media>
    <md-card-title-text>
      <div class="md-headline card-title-padding">{{data.heading}}</div>
    </md-card-title-text>
  </md-card-title>
  <md-card-content>
    {{data.content | translate}}
  </md-card-content>
</md-card>

这是指令

(function() {
  'use strict'

  angular
    .module('webApp')
    .directive('aboutCard', aboutCard);

  function aboutCard() {
    return {
      restrict: 'EA',
      priority: 1001,
      templateUrl: '../TEMPLATES/about.html',
      controller: 'aboutCardController',
      controllerAs: 'aboutCardCtrl'
    };
  };
})();

这是控制器

(function() {
  'use strict'

  angular
    .module('webApp')
    .controller('aboutCardController', aboutCardController);

  aboutCardController.$inject = ['JsonData', '$translate'];

  function aboutCardController(JsonData, $translate) {
    var vm = this;

    vm.pathToJson = '../JSON/about-en.json';
    vm.info = [];

    JsonData.all(vm.pathToJson).then(function(response) {
      vm.info = response.data.information;
    });
  };
})();

这是 JSON 文件

  {
      "information": [{
        "heading": "Reliability",
        "content": "Our partners have been working on the market for over 10 years",
        "image": "../IMG/shield.svg",
        "imageAlt": "Reliability Image"
      }, {
        "heading": "Professionalism",
        "content": "We are ready to provide profesional opinion for our clients to ensure the right choice",
        "image": "../IMG/people.svg",
        "imageAlt": "Professionalism Image"
      }, {
        "heading": "Development",
        "content": "Organization of educational programs in collaboration with our partners",
        "image": "../IMG/cogwheel.svg",
        "imageAlt": "Development Image"
      }]
    }

在这里,我想我缺乏理解如何加载我的 JSON 文件并在带有 ng-repeat 的自定义指令中在它们之间切换的脑力。由于 JSON 的格式不同。

我一直在浏览 Angular-Translate wiki 页面,但所有示例都只有 index.html 和主要 app.js 文件,我似乎几乎无法做到查找/理解这些在谷歌搜索中找到的示例

https://technpol.wordpress.com/2013/11/02/adding-translation-using-angular-translate-to-an-angularjs-app/

https://github.com/angular-translate/angular-translate/issues/1154

【问题讨论】:

    标签: javascript angularjs json angular-translate


    【解决方案1】:

    您可以使用动态加载器而不是静态加载器。

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

    然后像这样加载您需要的 JSON:

    $translatePartialLoader.addPart('about');
    

    语言前缀会自动添加到路径中。

    【讨论】:

    • 我假设我使用它而不是 $http 来获取 json 文件对吗?之后访问json怎么样?我只是添加翻译指令就可以了吗?
    • 是的。添加部分后,在您的视图中只需使用翻译指令或过滤器即可。并且您可以随时添加零件,然后使用它。
    • 好的,谢谢。一个小时后我回家后会试试这个。
    • 好吧,我让加载器工作了,但是如何在 $translatePartialLoader.addPart('about'); 之后从 JSON 中获取数组数据?像这样或 vm.info = $translatePartialLoader.addPart('about'); ?
    猜你喜欢
    • 2015-08-31
    • 2015-11-24
    • 2019-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    相关资源
    最近更新 更多