# 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