Угловой перевод

в моем приложении я хотел бы добавить функциональность для перевода страницы на все языки, которые пользователь установил в браузере, и, если ни один из них недоступен, перевести на английский по умолчанию... Проблема заключается в несоответствии браузера с языковой поддержкой. Я нашел обходной путь для этого, я делаю http-вызов к некоторому веб-сервису, который возвращает пользовательские языки. Это делается в app.run

app.run(function($rootScope, UserDataService, $translate){

UserDataService.getUserBrowserLanguage().then(function(language){



    var langArr = language.split(',').map(function(el){
            return el.split(';')[0].split(/-|_/)[0];
        });


    $translate.fallbackLanguage(langArr)
    $translate.preferredLanguage(langArr[0]);
    $translate.use(langArr[0]);
});

});

и в конфигурации приложения:

app.config(function ($routeProvider, $translateProvider) {

    $translateProvider.useStaticFilesLoader({
        prefix: '/languages/',
        suffix: '.json'
    });

});

раздел, потому что я не могу сделать http-вызов в конфигурации, и он терпит неудачу... :/языки загружаются, но перевод не изменяется... Что я делаю неправильно? Вот плунжер:

http://plnkr.co/edit/41SngK2tCTeaq8IhMbcM

он ничего не отображает, никаких переводов... почему? :( Буду очень рад любой помощи.


person adi86    schedule 18.02.2015    source источник
comment
Привет, Adi86, В моем ответе вы найдете 2 части: Часть 1: исправлены ваши проблемы с angular. Часть 2: исправлены ваши проблемы с переводом. Наслаждаться!   -  person Or Guz    schedule 18.02.2015
comment
Извините или Гуз, но это все еще не решает проблему, когда вы загружаете перевод на неправильном языке, кроме того, добавление steTimeout - не очень хорошая идея :)   -  person adi86    schedule 19.02.2015
comment
Есть еще один вариант, вы можете добавить $watch для мгновенного перевода.   -  person Or Guz    schedule 19.02.2015
comment
Кроме того, это не неправильный язык, это язык, который вы настроили для использования.   -  person Or Guz    schedule 19.02.2015


Ответы (1)


Что касается вашего вопроса, представление ничего не показывает из-за следующих ошибок:

Несколько ошибок: Прежде всего, ng-app следует переместить в тег html.

<html ng-app="translateApp">

Во-вторых, если вы используете переменную из контроллера, вы должны использовать ng-controller.

<div ng-controller="mainCtrl">

Наконец, когда вы привязываете переменную из представления к контроллеру, переменная должна быть в $scope.

  $scope.translation = $translate.instant('GENERAL');

Исправлен ваш плункер с моими комментариями: плункер.

Что касается того, как работает $translate, я не совсем знаком с этим сервисом, но я попробую посмотреть.

РЕДАКТИРОВАТЬ: я изучил службу $translate, чтобы дать вам полный ответ, включая исправление того, как вы использовали Translate. причина в том, что я позволяю переводить загрузку файлов JSON в config.

Я добавил 2 кнопки, чтобы вы могли переключаться между языками и видеть, как это работает.

Наслаждаться! Вот обновленный рабочий Plunker. Вот сайт перевода документации, который я использовал.

person Or Guz    schedule 18.02.2015
comment
Да, это работает, но не так, как ожидалось ... Он переводится на английский, но сначала следует на китайский, если вы выбрали, например. Африканский, китайский, эндлиш... - person adi86; 18.02.2015
comment
Что касается того, как вы настроили свою службу перевода, я постараюсь взглянуть как можно скорее. Мой ответ был на ваш вопрос, чтобы исправить все ваши ошибки, чтобы вы могли правильно пользоваться услугой перевода. - person Or Guz; 18.02.2015
comment
Если я ответил на ваш первоначальный вопрос, вы можете отметить мой ответ :) Во всяком случае, я вас не забыл. - person Or Guz; 18.02.2015
comment
Хе-хе, нет, нет, проблема все еще открыта :) теперь это только работает, но не так, как ожидалось... - person adi86; 18.02.2015
comment
Я имел в виду отметить, что мой ответ ответил на ваш вопрос, но неважно, я постараюсь продолжать помогать вам. - person Or Guz; 18.02.2015
comment
Хммм, я вижу, что вы внесли изменения, но хммм, это все еще не работает... :( когда вы загружаете страницу, фильтр перевода по-прежнему заменяет текст на английском языке... но он должен быть на китайском языке... :/ - person adi86; 18.02.2015
comment
Почему вы говорите, что это должно быть на китайском языке? Не вижу причин, почему это должно быть сразу на китайском языке - person Or Guz; 19.02.2015
comment
Давайте продолжим обсуждение в чате. - person Or Guz; 19.02.2015