2015-02-19 2 views
2

Я пытаюсь реализовать многоязычное приложение. Мне нужно получить доступ к запрашиваемому языку, добавив два параметра 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="/"> 

Благодарности

+0

Дубликат проверка http://stackoverflow.com/questions/24281652/localize-urls-with-ui-router-and-angular-translate –

ответ

2

Добавьте код языка в качестве параметра URL-адрес

$stateProvider 
    .state('home', { 
     url: '/:langcode/home', 
     templateUrl: baseTemplateUrl + "home.html", 
     controller: 'homeController' 
    }); 

И в контроллере, получить langcode значение с помощью $stateParams

$scope.language = $stateParams.langcode; 
+0

Это то, что я сделал, и закончил с недопустимым HTML на странице - дублированные представления. Чтобы получить это исправление, я отключил html5mode. но все же я не вижу никакого контента в своем представлении, Я использую в моем файле index.html ** UPDATE **: он не доходит до контроллера во время отладки. – Basilf