# python: Rilevamento personalizzato dell'impostazione regionale URL: https://generaltranslation.com/it/docs/python/tutorials/custom-locale-detection.mdx --- title: Rilevamento personalizzato dell'impostazione regionale description: Come personalizzare il rilevamento dell'impostazione regionale con get_locale e come funziona il comportamento predefinito --- ## Comportamento predefinito Quando non viene fornito alcun callback `get_locale` a [`initialize_gt`](/docs/python/api/initialize-gt), GT rileva automaticamente l'impostazione regionale dell'utente dall'header HTTP `Accept-Language` a ogni richiesta: 1. Legge l'header `Accept-Language` (ad es. `en-US,en;q=0.9,es;q=0.8`) 2. Lo analizza in un elenco di impostazioni regionali ordinato per valore di qualità (in ordine decrescente) 3. Lo confronta con i `locales` configurati per trovare la corrispondenza migliore 4. Se non trova alcuna corrispondenza, usa `default_locale` come fallback Questo significa che, fin da subito, gli utenti ricevono i contenuti nella lingua richiesta dal browser, purché siano disponibili le relative traduzioni. ```python from flask import Flask from gt_flask import initialize_gt app = Flask(__name__) # Nessun get_locale — per impostazione predefinita viene eseguito il parsing di Accept-Language initialize_gt( app, default_locale="en", locales=["es", "fr"], ) ``` ```python from fastapi import FastAPI from gt_fastapi import initialize_gt app = FastAPI() # Nessun get_locale — per impostazione predefinita viene eseguito il parsing di Accept-Language initialize_gt( app, default_locale="en", locales=["es", "fr"], ) ``` *** ## `get_locale` personalizzato Per usare un comportamento diverso da quello predefinito, passa una callback `get_locale` a `initialize_gt`. Riceve l'oggetto della richiesta e deve restituire una stringa che rappresenta l'impostazione regionale. ```python from flask import Flask from gt_flask import initialize_gt app = Flask(__name__) def get_locale(request) -> str: # Controlla prima il parametro di query locale = request.args.get("lang") if locale: return locale # Poi controlla un cookie locale = request.cookies.get("locale") if locale: return locale # Altrimenti usa il valore predefinito 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: # Controlla prima il parametro di query locale = request.query_params.get("lang") if locale: return locale # Poi controlla un cookie locale = request.cookies.get("locale") if locale: return locale # Altrimenti usa il valore predefinito return "en" initialize_gt( app, default_locale="en", locales=["es", "fr"], get_locale=get_locale, ) ``` *** ## Come funziona internamente * **FastAPI**: `initialize_gt` registra un middleware HTTP che viene eseguito a ogni richiesta. Se viene fornito `get_locale`, chiama `get_locale(request)`. In caso contrario, analizza `Accept-Language`. L'impostazione regionale risolta viene impostata in `I18nManager`, da cui [`t()`](/docs/python/api/t) legge. * **Flask**: `initialize_gt` registra un hook `before_request` con la stessa logica. *** ## Pattern comuni ### Prefisso del percorso dell'URL Ricava l'impostazione regionale dal percorso dell'URL (ad es. `/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" ``` ### Profilo utente Ricava l'impostazione regionale dalle preferenze di un utente autenticato: ```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 return "en" ``` ### Sottodominio Rileva l'impostazione regionale da un sottodominio come `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" ``` *** ## Note * La funzione `get_locale` deve sempre restituire una stringa di impostazione regionale valida * Se restituisce un'impostazione regionale per cui non hai traduzioni, `t()` userà come fallback il contenuto originale di `default_locale` * La funzione riceve l'oggetto request grezzo del framework — `Request` per FastAPI, `request` di Flask per Flask * Puoi usare [`get_locale()`](/docs/python/api/get-locale) anche altrove nel codice per recuperare l'impostazione regionale risolta