# python: Détection personnalisée du paramètre régional
URL: https://generaltranslation.com/fr/docs/python/tutorials/custom-locale-detection.mdx
---
title: Détection personnalisée du paramètre régional
description: Comment personnaliser la détection du paramètre régional avec get_locale et comment fonctionne le comportement par défaut
---
## Comportement par défaut
Lorsqu'aucune fonction de rappel `get_locale` n'est fournie à [`initialize_gt`](/docs/python/api/initialize-gt), GT détecte automatiquement le paramètre régional de l'utilisateur à partir de l'en-tête HTTP `Accept-Language` à chaque requête :
1. Lit l'en-tête `Accept-Language` (par ex. `en-US,en;q=0.9,es;q=0.8`)
2. L'analyse en une liste de paramètres régionaux triés par valeur de qualité (du plus élevé au plus faible)
3. Compare cette liste à vos `locales` configurés pour trouver la meilleure correspondance
4. Revient à `default_locale` si aucune correspondance n'est trouvée
Autrement dit, sans configuration supplémentaire, les utilisateurs reçoivent le contenu dans la langue demandée par leur navigateur, à condition que vous disposiez des traductions correspondantes.
```python
from flask import Flask
from gt_flask import initialize_gt
app = Flask(__name__)
# Pas de get_locale — utilise par défaut l'analyse de Accept-Language
initialize_gt(
app,
default_locale="en",
locales=["es", "fr"],
)
```
```python
from fastapi import FastAPI
from gt_fastapi import initialize_gt
app = FastAPI()
# Pas de get_locale — utilise par défaut l'analyse de Accept-Language
initialize_gt(
app,
default_locale="en",
locales=["es", "fr"],
)
```
***
## `get_locale` personnalisé
Pour remplacer le comportement par défaut, passez une fonction de rappel `get_locale` à `initialize_gt`. Elle reçoit l'objet de requête et doit renvoyer une chaîne de paramètre régional.
```python
from flask import Flask
from gt_flask import initialize_gt
app = Flask(__name__)
def get_locale(request) -> str:
# Vérifier d'abord le paramètre de requête
locale = request.args.get("lang")
if locale:
return locale
# Puis vérifier un cookie
locale = request.cookies.get("locale")
if locale:
return locale
# Sinon, utiliser la valeur par défaut
return "en"
initialize_gt(
app,
default_locale="en",
locales=["es", "fr"],
get_locale=get_locale,
)
```
```python
from fastapi import FastAPI, Request
from gt_fastapi import initialize_gt
app = FastAPI()
def get_locale(request: Request) -> str:
# Vérifier d'abord le paramètre de requête
locale = request.query_params.get("lang")
if locale:
return locale
# Puis vérifier un cookie
locale = request.cookies.get("locale")
if locale:
return locale
# Sinon, utiliser la valeur par défaut
return "en"
initialize_gt(
app,
default_locale="en",
locales=["es", "fr"],
get_locale=get_locale,
)
```
***
## Fonctionnement interne
* **FastAPI** : `initialize_gt` enregistre un middleware HTTP qui s’exécute à chaque requête. Si `get_locale` est fourni, `get_locale(request)` est appelé. Sinon, `Accept-Language` est analysé. Le paramètre régional déterminé est défini dans `I18nManager`, d’où [`t()`](/docs/python/api/t) le lit.
* **Flask** : `initialize_gt` enregistre un hook `before_request` avec la même logique.
***
## Cas courants
### Préfixe du chemin d’URL
Extrayez le paramètre régional à partir du chemin de l’URL (par ex. `/es/about`, `/fr/home`) :
```python
def get_locale(request) -> str:
parts = request.url.path.strip("/").split("/")
supported = {"es", "fr", "de"}
if parts and parts[0] in supported:
return parts[0]
return "en"
```
### Profil utilisateur
Récupérez le paramètre régional à partir des préférences d’un utilisateur authentifié :
```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
return "en"
```
### Sous-domaine
Détectez le paramètre régional depuis un sous-domaine tel que `es.example.com` :
```python
def get_locale(request) -> str:
host = request.headers.get("host", "")
subdomain = host.split(".")[0]
if subdomain in ("es", "fr", "de"):
return subdomain
return "en"
```
***
## Remarques
* Votre fonction `get_locale` doit toujours renvoyer une chaîne de paramètre régional valide
* Si elle renvoie un paramètre régional pour lequel vous n'avez pas de traductions, `t()` utilisera le contenu d'origine de `default_locale`
* La fonction reçoit l'objet de requête brut du framework — `Request` pour FastAPI, `request` de Flask pour Flask
* Vous pouvez utiliser [`get_locale()`](/docs/python/api/get-locale) ailleurs dans votre code pour récupérer le paramètre régional résolu