# python: Rilevamento dell'impostazione regionale e middleware URL: https://generaltranslation.com/it/docs/python/guides/middleware.mdx --- title: Rilevamento dell'impostazione regionale e middleware description: Come funziona il rilevamento dell'impostazione regionale in Flask e FastAPI e come personalizzarlo --- Il middleware Python di GT rileva automaticamente l'impostazione regionale dell'utente a ogni richiesta e la rende disponibile a [`t()`](/docs/python/api/t) e [`get_locale()`](/docs/python/api/get-locale). Questa guida illustra come funziona il rilevamento e i pattern avanzati per personalizzarlo. Per un'introduzione al rilevamento personalizzato dell'impostazione regionale, consulta il [tutorial sul rilevamento personalizzato dell'impostazione regionale](/docs/python/tutorials/custom-locale-detection). Questa guida approfondisce questi pattern. ## Comportamento predefinito Se non viene fornita una callback `get_locale`, GT analizza l'header `Accept-Language`, lo confronta con le `locales` configurate e, in caso di mancata corrispondenza, usa `default_locale`: ```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']) ``` ## Combinare più strategie di rilevamento In produzione, in genere conviene provare più fonti in ordine di priorità. Passa una callback `get_locale` a `initialize_gt`: ```python from flask import Flask from gt_flask import initialize_gt app = Flask(__name__) def get_locale(request) -> str: # 1. Parametro di query esplicito lang = request.args.get('lang') if lang: return lang # 2. Cookie (preferenza salvata dell'utente) locale = request.cookies.get('locale') if locale: return locale # 3. Prefisso del percorso URL (/es/about) parts = request.path.strip('/').split('/') if parts and parts[0] in ('es', 'fr', 'de'): return parts[0] # 4. Header 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. Parametro di query esplicito lang = request.query_params.get('lang') if lang: return lang # 2. Cookie (preferenza salvata dell'utente) locale = request.cookies.get('locale') if locale: return locale # 3. Prefisso del percorso URL (/es/about) parts = request.url.path.strip('/').split('/') if parts and parts[0] in ('es', 'fr', 'de'): return parts[0] # 4. Header 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) ``` ## Salvare l'impostazione regionale tramite cookie Consenti agli utenti di scegliere la lingua e memorizza la preferenza: ```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 ``` ## Rilevamento in base al profilo utente Per le app con autenticazione, ricava l'impostazione regionale dalle preferenze dell'utente: ```python def get_locale(request) -> str: user = get_current_user(request) # la tua logica di autenticazione if user and user.preferred_locale: return user.preferred_locale # Fallback a cookie o header return request.cookies.get('locale') or 'en' ``` ## Leggere l'impostazione regionale risolta Usa [`get_locale()`](/docs/python/api/get-locale) in qualsiasi punto della gestione della richiesta per leggere l'impostazione regionale risolta: ```python from gt_flask import get_locale # o gt_fastapi @app.route('/api/info') def info(): return { 'locale': get_locale() } ``` ## Prossimi passaggi * [Tutorial sul rilevamento personalizzato dell'impostazione regionale](/docs/python/tutorials/custom-locale-detection) — introduzione di base * [Riferimento API di `get_locale()`](/docs/python/api/get-locale) * [Pattern di traduzione delle stringhe](/docs/python/guides/strings) — come tradurre i contenuti