У меня есть приложение, созданное с Angularjs с использованием Angularjs Библиотека перевода - https://angular-translate.github.io/, и я настроил его с помощью маршрутизатора пользовательского интерфейса, поскольку текущий веб-сайт уже был проиндексирован Google с языковыми версиями, такими как www.domain.com/en/us/, и мне нужно сохранить ту же структуру URL. Веб-сайт имеет более 30 языков, но это SPA (одностраничное приложение).
Ниже приведены мои Javascript для конфигурации приложения:
app.run(['$rootScope', '$translate', '$state', function ($rootScope, $translate, $state) {
$rootScope.onChangeValue = function (e) {
$rootScope.$broadcast("changeValue", e);
};
$rootScope.$on('$stateChangeSuccess', onStateChangeSuccess);
function onStateChangeSuccess(event, toState, toParams) {
var current = $translate.use();
if (!current || current !== toParams.lang)
$translate.use(toParams.lang);
}
}]);
app.config(['$translateProvider', function ($translateProvider) {
$translateProvider.useStaticFilesLoader({
prefix: '../languages/locale-',
suffix: '.json'
});
$translateProvider.fallbackLanguage('en');
$translateProvider.preferredLanguage('en');
$translateProvider.useSanitizeValueStrategy('escape');
$translateProvider.useCookieStorage();
}]);
app.config(['$stateProvider', '$locationProvider', function ($stateProvider, $locationProvider) {
$locationProvider.html5Mode(true);
$locationProvider.hashPrefix('');
$stateProvider.state('catalog', {
url: '/{lang}',
controller: "SudokuController",
params: {
lang: {
value: function ($translate) {
return $translate.use();
}
}
}
});
}]);
и в контроллере у меня есть следующие функции:
app.controller("SudokuController", ['$scope', 'Chronicle', '$timeout', '$cookies', '$translate', '$state', '$stateParams', function ($scope, Chronicle, $timeout, $cookies, $translate, $state, $stateParams) {
$scope.params = $stateParams;
$scope.changeLanguage = function (newLang) {
var params = angular.extend($stateParams, { lang: newLang });
$translate.use(newLang).then(function () {
$state.transitionTo($state.current, params, {
reload: true, inherit: false, notify: true
});
});
}
}]);
Вот HTML который генерирует навигацию с несколькими языками:
<div class="language-dropdown">
<ul class="country-list" ng-controller="navigationLanguages">
<li class="country" ng-repeat="language in languagesMenu">
<div class="country-flag" style="background-image: url('images/mk.png');"></div>
<a ng-bind="language.Language" ng-click="changeLanguage(language.Code)"></a>
</li>
</ul>
</div>
До сих пор мне удалось добавить к URL выбранный язык, например, если я нажму на Engli sh, я получу www.domain.com/en, если Я нажимаю на Spani sh, я получаю www.domain.com/es. Но когда я go прямо на www.domain.com/en, я получаю ошибку 404 - Объект не найден!
Как это сделать, когда URL-адрес вставляется вместе с языком после / для доступа к веб-сайту с этим конкретным языком вместо отображения ошибки 404.
Как сделать языки такими, как www.domain.com/en/us вместо www.domain.com/en (поэтому сначала идет код языка, а затем код страны)?
Возможно ли, чтобы эти URL / языки могли быть просмотрены Google?