Подтвердить что ты не робот

Как динамически переключаться между языками с помощью angular -translate и angular -ui-router?

В моем приложении используется angular -translate, angular -ui-router и templates. Страницы html-приложений, за исключением index.html, упаковываются в шаблоны и подаются с Amazon CloudFront под управлением S3. То, что я хотел бы сделать, это найти способ динамического переключения языка в зависимости от двухбуквенного кода после имени домена, а также, если это возможно, выбрать язык пользователя и использовать его для переключения по умолчанию.

Причина, по которой я хотел бы сделать это, - это SEO-цели, поскольку я прочитал, что Google рекомендует ввести код страны в адрес, как показано ниже.

Вот что я до сих пор:

Файл маршрутизатора

    var home = {
        name: 'home',
        url: '/home/'
    };

    var homeAccess = {
        name: 'home.access',
        url: 'access',
        views: {
            '[email protected]': {
                templateProvider: ['$templateCache', ($templateCache) => {
                    return $templateCache.get('webapi.html');
                }],
            }
        }
    };

Как-то я хотел бы сделать так, чтобы при выборе поисковой системы:

www.example.com/de/home/webapi  or
www.example.com/en/home/webapi  or
www.example.com/fr/home/webapi

Этот маршрутизатор angular переключается на соответствующий языковой файл перед тем, как обслуживать файл webapi.html.

Любые предложения о том, как я могу это сделать, будут высоко оценены. В идеале я бы хотел увидеть простой пример с помощью переключателя языковых файлов, который помог бы мне, а также другим в сообществе сделать то, что нужно.

Обратите внимание на другой аналогичный вопрос:

Локализовать URL с помощью ui-router и angular -translate

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

4b9b3361

Ответ 1

Вам нужно создать общее абстрактное состояние ui-router и настроить там языковые настройки:

$stateProvider.state('common', {
  abstract: true,
  url: '/{lang:(?:es|en)}'
});

и после того, как ваше состояние home будет дочерним с общим:

$stateProvider.state('common.home', {
  url: '/home',
  templateUrl: 'views/home.html',
});

теперь вы можете настроить языковой переключатель на событие изменения состояния:

app.run(($rootScope) => {
  $rootScope.$on('$stateChangeSuccess', (event, toState, toParams) => {
    if(toParams.lang && $translate.use() !== toParams.lang){
      $translate.use(toParams.lang);
    }
  });
});

[19.04.2016] Я заявляю, что Google по-прежнему не в силах разобрать ваше веб-приложение умным способом. Связанный с нами вопрос - SEO: как Google index Angular приложения 2016

Поэтому я, а также @shershen, рекомендую использовать prerender.io для улучшения SEO.