Flask
If you haven't read the setup instruction, please do so first.
import re
from flask import Flask, request
from doti18n import LocaleData
app = Flask(__name__)
i18n = LocaleData("locales")
pattern = re.compile(r"[a-z]{2}")
def get_language_code() -> str:
accept_language = request.headers.get("Accept-Language")
if not accept_language:
return i18n.default_locale
for match in re.finditer(pattern, accept_language):
language_code = match.group()
if language_code in i18n.loaded_locales:
return language_code
return i18n.default_locale
@app.route("/")
def main():
language_code = get_language_code()
t = i18n[language_code].main
return {"message": t.hello}
if __name__ == "__main__":
app.run(host="localhost", port=8000)
import re
from typing import Optional
from flask import Flask, request, g
from doti18n import LocaleData
app = Flask(__name__)
i18n = LocaleData("locales")
pattern = re.compile(r"[a-z]{2}")
def _get_best_match_language(accept_language: Optional[str]) -> str:
if not accept_language:
return i18n.default_locale
for match in re.finditer(pattern, accept_language):
language_code = match.group()
if language_code in i18n.loaded_locales:
return language_code
return i18n.default_locale
@app.before_request
def detect_language():
accept_language = request.headers.get('Accept-Language')
language = _get_best_match_language(accept_language)
g.locale = language
@app.route("/")
def main():
t = i18n[g.locale].main
return {"message": t.hello}
if __name__ == "__main__":
app.run(host="localhost", port=8000)
Warning
Don't use that method of language detection in production as it is quite basic. That's only for demonstration purposes.