在 angularjs 控制器中本地化字符串属性

Localize string properties inside angularjs controller

本文关键字:字符串 属性 本地化 angularjs 控制器      更新时间:2023-09-26
在我的

angularjs控制器中,我正在注入翻译服务

(function () {
    "use strict";
    app.controller('homeController', ['$scope', translationService) {
    //Run translation if selected language changes
    $scope.translate = function () {            
        translationService.getTranslation($scope, $scope.selectedLanguage);
    };       
    $scope.translate();
}

和内部视图我正在翻译这样的文本

{{ translation.HelloWorld }}

其中 HelloWorld 是语言 json 文件中的字符串。

由于我能够使用 $scope.selectedLanguage 检测当前选定的语言,这将返回所选语言engrus 的字符串,fra如何翻译注入在控制器内对象属性中的文本,例如

var myObj = { Id: 1, Name: "Default", Description: "Default" };

如何本地化"名称和说明"属性?

更新:

app.service('translationService', function ($resource) {    
    this.getTranslation = function ($scope, language) {
        var languageFilePath = '../app/locStrings/translation_' + language + '.json';
        $resource(languageFilePath).get(function (data) {
            $scope.translation = data;
        });
    };
});

其中每个文件都有前缀translation_类似

translation_eng.json 

translation_fra.json 有内容

{
    "HELLO_WORLD": "Hello world en",
}

如何在 Angular 中使用本地化?

您可以通过简单地使用 rootScope 对象在角度中使用本地化。它的工作原理与.net本地化概念非常相似。

本地化架构。

它与.net本地化非常相似,在.net中,您可以放置一个本地化文件,其中所有语言翻译都以表格格式存储。在这里,您可以根据自己的方便使用两个文件或一个文件。(我更喜欢每种语言的单独文件(

所有语言都在一个文件中。

{
  translationkey1:{
      en:'translationValue_english1',
      hi:'translationValue_hindi1',
      fr:'translationValue_french1',
  },
  translationkey2:{
      en:'translationValue_english2',
      hi:'translationValue_hindi2',
      fr:'translationValue_french2',
  },
  translationkey3:{
      en:'translationValue_english2',
      hi:'translationValue_hindi2',
      fr:'translationValue_french2',
  }
}

每种语言的单独文件。

{
  translationkey1:'translationValue1',
  translationkey2:'translationValue2',
  translationkey3:'translationValue3',
}

视图中的使用情况

在 rootscope 的翻译对象中复制翻译文件对象,以便您可以在任何地方访问它。

所有语言都在一个文件中。

{{translations[myObj.Name][selectedLanguage]}} // It will return English value for specific value from translation object.

每种语言的单独文件。

如果您使用的是单独的文件,则无需存储选定的语言格式,只需根据语言保留翻译对象即可。

{{translations[myObj.Name]}}

这是个好办法。

如果翻译文件太大,则对每种语言使用单独的文件是一种好方法。它增加了服务器点击率,但您可以轻松维护翻译。

使用单个文件存储所有语言会增加内存消耗。但减少了服务器命中率。

这是你的答案。