2013-03-30 1 views
1

У меня есть страницы с несколькими языками ... что-то вроде этого:Pyramid, установка i18n на странице

  • /-> еп, мы, пт, эс и по умолчанию US
  • /Foo -> пт, еп и по умолчанию PT
  • /бар -> рх и по умолчанию PT

в базе данных у меня есть:

|--URL--|-Languages-|-defLang- 
    | foo | pt,us | pt 
    | bar | pt  | pt 

на __init__.py я поставил его так:

tsf = TranslationStringFactory('myproject') 


def add_renderer_globals(event): 
    request = event['request'] 
    event['_'] = request.translate 
    event['localizer'] = request.localizer 


def add_localizer(event): 
    request = event.request 
    languages = ('en','us','es') 
    deflang = 'pt' 
    # CHECK current page 
    if 'page' in request.matchdict: 
     currentpage = DBSession.query(Pages).filter_by(url=request.matchdict['page']).first() 
     #SET pages languages 
     languages = currentpage.Languages.split(',') 
     deflang = currentpage.defLang 
    if not default_locale_negotiator(request): 
     #set language 
     request._LOCALE_ = request.accept_language.best_match(languages , deflang) 
    localizer = get_localizer(request) 
    request.lang = localizer.locale_name 
    def auto_translate(string): 
     return localizer.translate(self.tsf(string)) 
    request.localizer = localizer 
    request.translate = auto_translate 



def main(global_config, **settings): 
    """ This function returns a Pyramid WSGI application. 
    """ 
    engine = engine_from_config(settings, 'sqlalchemy.') 
    DBSession.configure(bind=engine) 
    Base.metadata.bind = engine 
    session_factory = session_factory_from_settings(settings) 
    config = Configurator(settings=settings) 
    config.include('pyramid_mailer') 
    config.set_session_factory(session_factory) 
    config.add_static_view('static', 'static', cache_max_age=3600) 
    config.add_subscriber(add_renderer_globals, BeforeRender) 
    config.add_subscriber(add_localizer, ContextFound) 
    config.add_translation_dirs('myproject:locale/') 
    config.add_route('home', '/') 
    config.add_route('page', '/{page}') 

    config.scan() 
    return config.make_wsgi_app() 

но это не работает, только дома он работает прекрасный

если я не хватает какой-либо информации, пожалуйста предупредите меня. благодаря

+0

Пожалуйста, добавьте свой ответ как реальный ответ и принять его. Не просто добавьте его как часть своего вопроса. –

ответ

1
def add_localizer(event): 
    request = event.request 
    languages = ('en','us','es') 
    deflang = 'pt' 
    # CHECK current page 
    if 'page' in request.matchdict: 
     currentpage = DBSession.query(Pages).filter_by(url=request.matchdict['page']).first() 
     #SET pages languages 
     languages = currentpage.Languages.split(',') 
     deflang = currentpage.defLang 
    #----- CHANGED ---------------------- 
    dln = default_locale_negotiator(request) 
    if not dln or dln not in languages: 
     #set the default language 
     request._LOCALE_ = deflang 
    localizer = get_localizer(request) 
    request.lang = localizer.locale_name 
    def auto_translate(string): 
     return localizer.translate(self.tsf(string)) 
    request.localizer = localizer 
    request.translate = auto_translate 

благодарит

1

Он смотрит на меня, как вы ищете 'entity' в request.matchdict, когда на самом деле вы должны искать для 'page', учитывая маршрут '/{page}'.

+0

Извините, исправлено, я получаю язык = [u'pt] и deflang = 'pt' on "/ bar", но если мой язык - США, и я иду в/bar, я все еще получаю американский язык – Joaolvcm

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