2013-03-30 186 views
1

我有多种语言的网页,设置国际化......是这样的:金字塔,由

  • /- >恩,我们,PT,ES,默认是美国
  • /富 - > PT,EN和默认为PT
  • /酒吧 - > 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

它看起来像你对我在request.matchdict给你的路线'/{page}'搜索'entity'当在现实中你应该寻找'page'

+0

对不起,修正了我的语言= [u'pt]和deflang ='pt'on“/ bar”,但是如果我的语言是美国,我去/ bar我仍然使用美国语言 – Joaolvcm