# python: Détection du paramètre régional et middleware
URL: https://generaltranslation.com/fr/docs/python/guides/middleware.mdx
---
title: Détection du paramètre régional et middleware
description: Fonctionnement de la détection du paramètre régional dans Flask et FastAPI, et comment la personnaliser
---
Le middleware Python de GT détecte automatiquement le paramètre régional de l’utilisateur à chaque requête et le met à disposition de [`t()`](/docs/python/api/t) et [`get_locale()`](/docs/python/api/get-locale). Ce guide explique son fonctionnement et présente des approches avancées pour la personnaliser.
Pour une introduction à la détection personnalisée du paramètre régional, consultez le [tutoriel sur la détection personnalisée du paramètre régional](/docs/python/tutorials/custom-locale-detection). Ce guide approfondit ces approches.
## Comportement par défaut
Lorsqu’aucune fonction de rappel `get_locale` n’est fournie, GT analyse l’en-tête `Accept-Language`, le compare aux `locales` que vous avez configurés, puis utilise `default_locale` par défaut :
```python
from flask import Flask
from gt_flask import initialize_gt
app = Flask(__name__)
initialize_gt(app, default_locale='en', locales=['es', 'fr'])
```
```python
from fastapi import FastAPI
from gt_fastapi import initialize_gt
app = FastAPI()
initialize_gt(app, default_locale='en', locales=['es', 'fr'])
```
## Combiner les stratégies de détection
En production, vous voudrez généralement essayer plusieurs sources par ordre de priorité. Passez une fonction de rappel `get_locale` à `initialize_gt` :
```python
from flask import Flask
from gt_flask import initialize_gt
app = Flask(__name__)
def get_locale(request) -> str:
# 1. Paramètre de requête explicite
lang = request.args.get('lang')
if lang:
return lang
# 2. Cookie (préférence enregistrée de l'utilisateur)
locale = request.cookies.get('locale')
if locale:
return locale
# 3. Préfixe du chemin d'URL (/es/about)
parts = request.path.strip('/').split('/')
if parts and parts[0] in ('es', 'fr', 'de'):
return parts[0]
# 4. En-tête Accept-Language
accept = request.headers.get('Accept-Language', '')
if accept:
return accept.split(',')[0].split(';')[0].strip()
return 'en'
initialize_gt(app, default_locale='en', locales=['es', 'fr', 'de'], get_locale=get_locale)
```
```python
from fastapi import FastAPI, Request
from gt_fastapi import initialize_gt
app = FastAPI()
def get_locale(request: Request) -> str:
# 1. Paramètre de requête explicite
lang = request.query_params.get('lang')
if lang:
return lang
# 2. Cookie (préférence enregistrée de l'utilisateur)
locale = request.cookies.get('locale')
if locale:
return locale
# 3. Préfixe du chemin d'URL (/es/about)
parts = request.url.path.strip('/').split('/')
if parts and parts[0] in ('es', 'fr', 'de'):
return parts[0]
# 4. En-tête Accept-Language
accept = request.headers.get('accept-language', '')
if accept:
return accept.split(',')[0].split(';')[0].strip()
return 'en'
initialize_gt(app, default_locale='en', locales=['es', 'fr', 'de'], get_locale=get_locale)
```
## Mémoriser le paramètre régional avec des cookies
Permettez aux utilisateurs de choisir leur langue et de la mémoriser :
```python
from flask import request, make_response, jsonify
@app.route('/api/set-language', methods=['POST'])
def set_language():
locale = request.json.get('locale', 'en')
response = make_response(jsonify({'ok': True}))
response.set_cookie('locale', locale, max_age=365 * 24 * 60 * 60)
return response
```
```python
from fastapi import Request
from fastapi.responses import JSONResponse
@app.post('/api/set-language')
async def set_language(request: Request):
body = await request.json()
locale = body.get('locale', 'en')
response = JSONResponse({'ok': True})
response.set_cookie('locale', locale, max_age=365 * 24 * 60 * 60)
return response
```
## Détection basée sur le profil utilisateur
Pour les applications authentifiées, récupérez le paramètre régional dans les préférences de l’utilisateur :
```python
def get_locale(request) -> str:
user = get_current_user(request) # votre logique d'authentification
if user and user.preferred_locale:
return user.preferred_locale
# Repli sur le cookie ou l'en-tête
return request.cookies.get('locale') or 'en'
```
## Lire le paramètre régional résolu
Utilisez [`get_locale()`](/docs/python/api/get-locale) à n’importe quel moment du traitement de la requête pour obtenir le paramètre régional résolu :
```python
from gt_flask import get_locale # ou gt_fastapi
@app.route('/api/info')
def info():
return { 'locale': get_locale() }
```
## Étapes suivantes
* [Tutoriel sur la détection personnalisée du paramètre régional](/docs/python/tutorials/custom-locale-detection) — introduction
* [Référence de l’API `get_locale()`](/docs/python/api/get-locale)
* [Approches de traduction de chaînes](/docs/python/guides/strings) — comment traduire du contenu