Как я могу динамически переключать языки с помощью angular-translate и angular-ui-router?
мое приложение использует angular-translate, angular-ui-router и шаблоны. Приложение html страницы за исключением индекса.html упаковываются в шаблоны и подаются из Amazon CloudFront при поддержке S3. Что я хотел бы сделать, так это найти способ динамически переключать язык в зависимости от двухбуквенного кода после доменного имени, а также, если возможно, выбрать языковой стандарт пользователя и использовать его для переключения по умолчанию.
причина, по которой я хотел бы сделать это SEO цели, как я читал, что Google рекомендует ввести код страны в адрес, как показано ниже.
вот что у меня пока есть:
роутер файл
var home = {
name: 'home',
url: '/home/'
};
var homeAccess = {
name: 'home.access',
url: 'access',
views: {
'home@': {
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
этот угловой маршрутизатор переключается на соответствующий языковой файл перед обслуживанием webapi.HTML-файл.
любые предложения о том, как я мог бы это сделать, были бы очень признательны. В идеале Я хотел бы увидеть простой пример с переключателем языковых файлов, который поможет мне, а также другим членам сообщества сделать то, что нужно.
обратите внимание, что есть еще один аналогичный вопрос:
локализовать URL-адреса с помощью ui-router и angular-translate
ответы там хорошие, но я также надеюсь, что, открыв этот вопрос, я могу получить еще лучший и более обновленный ответ, возможно, с некоторыми советами по интернационализации SEO в. Я просто думаю, что это такая важная вещь, что чем больше ответов, чтобы помочь людям на этом форуме, тем лучше.
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 индексирует угловые приложения 2016
поэтому я так же, как @shershen я рекомендую использовать прерандер.Ио сервис для лучшего SEO.