Прозрачный API интернационализации с Python EVE

Нам нужен i18n API, который поддерживает множество языков в своих запросах. Как лучше всего использовать ключ заголовка «Accept-Languages»? Я думаю о том, чтобы иметь коллекцию для каждого языка и сделать прозрачный запрос для соответствующей коллекции. Или вы думаете, что лучше жестко закодировать язык в uri?


eve
person Luis Miguel Morillas    schedule 15.11.2016    source источник


Ответы (1)


Вы можете попробовать этот фрагмент фляги: http://flask.pocoo.org/snippets/128/ В любом случае использование заголовка Accept-Language не подходит для этого и лучше использовать cookie, но вы можете сделать запасной вариант к информации этого заголовка, если cookie не существует, чтобы получить содержимое заголовка, вы можете использовать flask.request.headers.get('Accept-Language'), но имейте в виду, что этот заголовок может содержать не один язык, а например что-то вроде этого: da, en-gb;q=0.8, en;q=0.7

Вы можете использовать декоратор before_request для распознавания языка перед запросом. Что-то вроде этого:

@app.before_request
def before_request():
    flask.request.lang = flask.request.cookies.get('lang')
    if lang is None:
        flask.request.lang = flask.request.headers.get('Accept-Language', 'en').split(' ')[0]

И тогда вы можете использовать flask.request.lang везде, где вам это нужно.

person Eugene Tsakh    schedule 16.11.2016
comment
Спасибо, Юджин. Почему печенье лучше? Я знаю, как определить язык, но проблема в том, что я думаю, что нам нужны разные коллекции (одна для языка, чтобы я мог использовать текстовые индексы), поэтому, если клиент принимает «en», действие должно перейти к английской коллекции, и если он принимает «es», он должен, например, перейти в испанскую коллекцию. Если нет, клиент должен явно указать английскую, испанскую, французскую коллекцию. - person Luis Miguel Morillas; 16.11.2016