Я пытаюсь реализовать многоязычное приложение. Мне нужно получить доступ к запрашиваемому языку, добавив два параметра iso к URL-адресу перед именем контроллера. , например: http://appPath/en/home http://appPath/fr/home http://appPath/ar/homeangularJS маршрутизация в многоязычном приложении
$stateProvider
.state('home', {
url: '/home',
templateUrl: baseTemplateUrl + "home.html",
controller: 'homeController'
})
.state('login', {
url: '/login',
templateUrl: baseTemplateUrl + "login.html",
controller: 'loginController'
})
.state('customers', {
url: '/customers',
templateUrl: baseTemplateUrl + "customers.html",
controller: 'customersController'
})
.state('signup', {
url: '/signup',
templateUrl: baseTemplateUrl + "signup.html",
controller: 'signupController'
});
я использую базовый stateprovider для маршрутизации прямо сейчас. любая идея, как изменить это, чтобы эта функция работала?
Спасибо заранее,
UPDATE
Для тех, кто с той же проблемой, мое решение было:
изменил каждое состояние к следующему
.state('signup', {
url: '/:lang/signup',
templateUrl: baseTemplateUrl + "signup.html",
controller: 'signupController',
resolve: {
lang: ['$stateParams', function ($stateParams) {
document.cookie = "lang=" + $stateParams.lang;
}]
}
});
Я сохраняю значение $ stateParams lang в cookie, чтобы вы могли получить к нему доступ через app.run() и передать его моему сервису translationService, поскольку $ stateParams еще не инициализирован.
таким образом ваше приложение будет работать только с html5mode = false. что означает, что вы всегда будете видеть уродливые хэштегом в URL (http://path/#/ {языки}/{controllername} andto решить эту проблему, я настроил $ locationProvider так:
$locationProvider.html5Mode(true).hashPrefix('!');
и установить базовый URL сайта, вставив внутри тега вашего index.html файла эта строка:
<base href="/">
Благодарности
Дубликат проверка http://stackoverflow.com/questions/24281652/localize-urls-with-ui-router-and-angular-translate –