2016-09-13 3 views
0

Я использую ember-i18n Библиотека для интернационализации и хотите сохранить текущую локаль на маршруте, как:Интернационализация приложения Ember

domain.com - пусто по умолчанию en

doman.com/es, doman.com/de - еще

Для это я попытался использовать rootURL

Router.reopen({ 
    rootURL: '/' ('es' or 'de') 
}); 

Проблема: Когда rootURL не является пустым, приложение не может перенаправлять и не с ошибкой: ember.debug.js:4903 Uncaught Error: Assertion Failed: Path/does not start with the provided rootURL /es/

Вопрос: Что является лучшим решением, чтобы сделать редирект, вся логика будет держать в emebr, так что я могу» т переместить эту логику в Nginx и т.д.

Другой вариант сделать маршрут обертку, выглядит следующим образом:

this.route(
    'lang', { path: '/:lang' }, function(){..} 
); 

Это решение выглядит не очень хорошо:

  1. link-to помощник потребует lang параметров
  2. lang не может быть пустым (язык по умолчанию)

UPDATE: Я понимаю, как динамическое изменение rootURL, но не может автоматически редирект.

+0

Возможный дубликат [Как указать динамический корневой URL в ember.js?] (Http://stackoverflow.com/questions/20957895/как к уточнить-а-динамический-корень-url-в-Ember-JS) –

ответ

0

Найдено решение, описать эту логику в экземплярных инициализаторе

export function initialize(app) { 
    var router = app.lookup('router:main'); 
    var i18n = app.lookup('service:i18n'); 

    var path = window.location.pathname; 
    var currentLang = ENV.i18n.defaultLocale; 
    var newPath = ''; 

    var LangFromPath = path.match('^/([a-z]{2})(?:/|$)'); 
    if (LangFromPath && LangFromPath[1]){ 
    currentLang = (ENV.i18n.allowedLocales.indexOf(LangFromPath[1]) > -1) ? LangFromPath[1] : currentLang; 
    } 

    if (currentLang != ENV.i18n.defaultLocale) { 
    var newPath = '/' + currentLang + '/'; 
    } 

    router.rootURL = newPath; 
    i18n.set('locale', currentLang); 

    if (newPath && path.indexOf(newPath) === -1) { 
     window.location.pathname = newPath; 
    } 

} 
Смежные вопросы