У меня есть страницы с несколькими языками ... что-то вроде этого: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()
но это не работает, только дома он работает прекрасный
если я не хватает какой-либо информации, пожалуйста предупредите меня. благодаря
Пожалуйста, добавьте свой ответ как реальный ответ и принять его. Не просто добавьте его как часть своего вопроса. –