2015-06-30 2 views
2

Внутри моего контроллера angularjs Я инъекционные услуги по переводулокализуют строковые свойства внутри 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 который будет возвращать строку выбранного языка eng, rus, fra как я могу перевести текст вводится в свойства объекта внутри контроллера, например

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

Как может Я локализую свойство Name и Description?

Update:

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", 
} 

ответ

3

Как я могу использовать локализацию в угловом?

Вы можете использовать локализацию в угловом режиме, просто используя объект 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', 
} 

Использование в View

Копирование перевода объекта в файл переводов объекта rootscope, так что вы можете получить доступ к нему во всем мире.

Все языки в одном файле.

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

отдельный файл для каждого языка.

Если вы используете отдельные файлы, тогда вам не нужно сохранять выбранный формат Language, просто сохраняйте объект перевода в соответствии с языком.

{{translations[myObj.Name]}} 

Какой хороший подход.

Использование отдельного файла для каждого языка - хороший подход, если файлы перевода слишком большие. Это увеличивает количество обращений к серверу, но вы можете легко поддерживать переводы.

Использование одного файла для хранения всех языков значительно увеличивает потребление памяти. Но снижает количество обращений к серверу.

Here - ваш ответ.

+0

Я назначаю это myObj.Name для внутреннего контроллера $ scope.myName, связанного с представлением. Как я могу перевести это свойство в этом случае? или как вы это сделаете? – user1765862

+0

Я думаю, что вы используете первый метод. Вы отправляете все переводы только в одном файле. Просто удерживайте объект переводов в $ rootScope.translations, тогда вы можете использовать {{translations [myName] [selectedLanguage]}} –

+0

Можете ли вы показать свою схему файла перевода? –

Смежные вопросы