# python: Detección personalizada de configuración regional URL: https://generaltranslation.com/es/docs/python/tutorials/custom-locale-detection.mdx --- title: Detección personalizada de configuración regional description: Cómo personalizar la detección de la configuración regional con get_locale y cómo funciona el comportamiento predeterminado --- ## Comportamiento predeterminado Cuando no se proporciona una función callback `get_locale` a [`initialize_gt`](/docs/python/api/initialize-gt), GT detecta automáticamente la configuración regional del usuario a partir del encabezado HTTP `Accept-Language` en cada solicitud: 1. Lee el encabezado `Accept-Language` (p. ej., `en-US,en;q=0.9,es;q=0.8`) 2. Lo analiza y lo convierte en una lista de configuraciones regionales ordenadas por valor de calidad (de mayor a menor) 3. Lo compara con tus `locales` configurados para encontrar la mejor coincidencia 4. Usa `default_locale` como alternativa si no encuentra ninguna coincidencia Esto significa que, desde el primer momento, los usuarios reciben contenido en el idioma que solicite su navegador, siempre que tengas traducciones para ese idioma. ```python from flask import Flask from gt_flask import initialize_gt app = Flask(__name__) # Sin get_locale: por defecto se analiza Accept-Language initialize_gt( app, default_locale="en", locales=["es", "fr"], ) ``` ```python from fastapi import FastAPI from gt_fastapi import initialize_gt app = FastAPI() # Sin get_locale: por defecto se analiza Accept-Language initialize_gt( app, default_locale="en", locales=["es", "fr"], ) ``` *** ## `get_locale` personalizado Para sobrescribir el valor predeterminado, pasa una función de callback `get_locale` a `initialize_gt`. Recibe el objeto de solicitud y debe devolver una cadena de configuración regional. ```python from flask import Flask from gt_flask import initialize_gt app = Flask(__name__) def get_locale(request) -> str: # Comprueba primero el parámetro de consulta locale = request.args.get("lang") if locale: return locale # Después, comprueba una cookie locale = request.cookies.get("locale") if locale: return locale # Usa el valor predeterminado 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: # Comprueba primero el parámetro de consulta locale = request.query_params.get("lang") if locale: return locale # Después, comprueba una cookie locale = request.cookies.get("locale") if locale: return locale # Usa el valor predeterminado return "en" initialize_gt( app, default_locale="en", locales=["es", "fr"], get_locale=get_locale, ) ``` *** ## Cómo funciona internamente * **FastAPI**: `initialize_gt` registra un middleware HTTP que se ejecuta en cada solicitud. Si se proporciona `get_locale`, llama a `get_locale(request)`. De lo contrario, analiza `Accept-Language`. La configuración regional resuelta se establece en `I18nManager`, que [`t()`](/docs/python/api/t) usa para leerla. * **Flask**: `initialize_gt` registra un hook `before_request` con la misma lógica. *** ## Patrones comunes ### Prefijo de ruta de URL Extrae la configuración regional de la ruta de la URL (p. ej., `/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" ``` ### Perfil de usuario Busca la configuración regional en las preferencias de un usuario autenticado: ```python def get_locale(request) -> str: user = get_current_user(request) # tu lógica de autenticación if user and user.preferred_locale: return user.preferred_locale return "en" ``` ### Subdominio Detecta la configuración regional a partir de un subdominio como `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" ``` *** ## Notas * Tu función `get_locale` siempre debe devolver una cadena de configuración regional válida * Si devuelve una configuración regional para la que no tienes traducciones, `t()` usará como alternativa el contenido original de `default_locale` * La función recibe el objeto de solicitud sin procesar del framework: `Request` para FastAPI y `request` de Flask para Flask * Puedes usar [`get_locale()`](/docs/python/api/get-locale) en otras partes de tu código para recuperar la configuración regional resuelta