Mejores prácticas de i18n
Un resumen condensado de las 25 mejores prácticas más importantes extraídas de todas las páginas de esta sección.
Busca en todas las páginas de la documentación
Un resumen condensado de las 25 mejores prácticas más importantes extraídas de todas las páginas de esta sección.
Externaliza todas las copias visibles para el usuario: Los literales en JSX bloquean a los traductores, rompen reglas plurales y previenen la validación de truncamiento RTL - usa t() desde el primer día.
Una clave por frase completa: Nunca concatenes t("welcome") + name + t("exclaim") - el orden de palabras difiere en árabe, japonés y alemán.
Claves conscientes del contexto: Los homógrafos ingleses duplicados (close diálogo vs close cuenta) necesitan claves distintas - los traductores no pueden adivinar desde "close".
JSON en inglés es la configuración regional de origen: Envía cambios de en en el mismo PR que nuevas llamadas a t() - las cargas de TMS y los scripts de verificación tratan el inglés como autoritario.
Resuelve la configuración regional al inicio antes de la navegación: Cierra el diseño raíz hasta que se resuelvan el idioma predeterminado del dispositivo y la anulación de AsyncStorage - evita el destello en inglés en dispositivos árabes.
Idioma predeterminado del dispositivo desde expo-localization: Usa getLocales()[0].languageTag y recorre la lista de preferencias - no es adivinanzas Intl o en-US codificado.
La anulación del usuario vence la configuración regional del dispositivo: La persistencia de configuración en AsyncStorage (o perfil del servidor) gana sobre el idioma del SO en el próximo lanzamiento.
Asigna etiquetas BCP 47 a configuraciones regionales de aplicación compatibles: es-419 → es, pt-PT → pt - las tablas explícitas vencen el truncamiento de código de idioma desnudo.
Cadenas de alternancia al inglés: Configura fallbackLng (fr-CA → fr → en) - las claves faltantes nunca deben mostrarse en blanco en producción.
Formato con Intl en el borde de la pantalla: Almacena fechas ISO y números sin procesar en estado/API; formatea con languageTag y currencyCode desde expo-localization.
Nunca analices entrada con formato de configuración regional: Los usuarios escriben decimales con , o . - analiza con separadores conocidos o selectores estructurados, no cadenas de visualización invertidas.
Adopta i18next cuando tengas más de ~100 claves: Los espacios de nombres, plurales, paquetes perezosos y los flujos de trabajo de TMS superan los ayudantes t() personalizados.
División de espacios de nombres por característica: common, auth, billing - no un único translation.json monolítico que entra en conflicto en cada fusión.
Carga perezosa de idiomas que no son predeterminados: La importación dinámica import() por configuración regional mantiene pequeña la puesta en marcha - precarga en Wi-Fi después de que el usuario seleccione un idioma.
escapeValue: false en react-i18next: React Native Text ya escapa - escapeValue: true mutila apóstrofos y marcado ICU.
Claves plurales en JSON, no ramas JSX: Usa count con sufijos _one / _other - árabe y polaco necesitan más de dos formas.
Los mapeos de errores devuelven claves de mensaje: No cadenas de inglés literales - resuelve con t() en componentes para que la copia desconectada y de autenticación se traduzca.
RTL es diseño, no solo traducción: Habilita I18nManager, usa marginStart/paddingEnd, refleja iconos direccionales - recarga al cruzar LTR ↔ RTL.
No reflej logos, medios o mapas: Los signos de intercalación y las flechas hacia atrás se voltean; las marcas de marca y los botones de reproducción no.
Actualiza la configuración regional en Android primer plano: AppState + getLocales() cuando se devuelve activo - los usuarios cambian de idioma en Configuración sin reinicio.
Pseudolocalización antes de que lleguen configuraciones regionales largas: en-XA o cadenas acolchadas exponen el truncamiento en botones y pestañas antes de que llegue la copia en alemán.
CI de traducción en cada PR: i18next-parser extract + verify-locales parity - bloquea la fusión cuando en se desvía o las configuraciones regionales requeridas pierden claves.
TMS para escrituras que no sean en inglés: Crowdin/Lokalise descargar en git - los traductores no editan es.json en solicitudes de extracción manualmente.
testID para E2E, no afirmaciones de copia: Detox y Maestro sobreviven cambios de configuración regional cuando los selectores se desacoplan de etiquetas traducidas.
Los sabores de marca pueden alcanzar configuraciones regionales y RTL: Los inquilinos de etiqueta blanca envían diferentes listas de idiomas y reglas de dirección sin código de bifurcación - coordina con la temática del sistema de diseño.
expo-localization + i18next / react-i18next + anulación de AsyncStorage + I18nManager para RTL + i18next-parser y script de verificación en CI. Comienza con Fundamentos de i18n, gradúa a i18next / react-i18next.
Dos configuraciones regionales, menos de ~100 claves, sin plurales y sin TMS. Reemplaza antes de plurales, paquetes perezosos o flujos de trabajo de traductor - ver Fundamentos de i18n.
La elección de configuración regional es independiente del tema claro/oscuro, pero los sabores de marca pueden fijar configuraciones regionales compatibles, idioma predeterminado y política RTL por inquilino - Theming & Brand Flavors.
Los metadatos de la tienda son separados de i18n en la aplicación. Las configuraciones regionales en la aplicación provienen de paquetes JSON o actualizaciones OTA - Translation CI cierra los catálogos de producción.
I18nManager e iconos reflejadosVersiones de pila: Esta página fue escrita para React 19.2.3, React Native 0.86.0 y Expo SDK 57 (
expo~57.0.4).
Revisado por Chris St. John·Última actualización: 16 jul 2026