Saltar al contenido principal
Todas las guías
Guía

Actualizaciones de traducciones over-the-air en React Native

En una app de React Native, los cambios de texto suelen esperar a la siguiente build y a la revisión de la tienda. Esta guía mantiene i18next y react-i18next y añade una función que carga tu última publicación de litei18n al iniciar.

Pasos de configuración

  1. Crea una publicación

    En litei18n, confirma tus traducciones y crea una publicación en la página Releases (plan Starter o superior). Copia el ID de tu proyecto de la URL de la publicación que aparece allí. Exporta también tus traducciones en JSON y añádelas a tu app como copia incluida.

  2. Carga la publicación al iniciar la app

    Instala i18next y react-i18next. El archivo en inglés incluido es el respaldo, y loadLatest descarga un idioma y lo añade a i18next. keySeparator está desactivado porque las claves de litei18n son nombres planos como home.title.

    src/i18n.ts
    import i18n from 'i18next';
    import { initReactI18next } from 'react-i18next';
    import en from './locales/en.json';
    
    const PROJECT_ID = 'YOUR_PROJECT_ID';
    const RELEASES =
      'https://ttksowxkfdohtprtfarf.supabase.co/storage/v1/object/public/releases/locales';
    
    i18n.use(initReactI18next).init({
      lng: 'en',
      fallbackLng: 'en',
      resources: { en: { translation: en } },
      keySeparator: false, // litei18n keys are flat: "home.title"
      interpolation: { escapeValue: false },
    });
    
    export async function loadLatest(locale: string) {
      try {
        const res = await fetch(`${RELEASES}/${PROJECT_ID}/latest/${locale}.json`);
        if (res.ok) {
          i18n.addResourceBundle(locale, 'translation', await res.json(), true, true);
        }
      } catch {
        // Offline: the bundled strings stay in place.
      }
      await i18n.changeLanguage(locale);
    }
    
    export default i18n;
  3. Usa los textos

    Usa el hook useTranslation como siempre y llama a loadLatest una vez al iniciar con el idioma del usuario.

    src/App.tsx
    import { useEffect } from 'react';
    import { Text } from 'react-native';
    import { useTranslation } from 'react-i18next';
    import { loadLatest } from './i18n';
    
    function Home() {
      const { t } = useTranslation();
      return <Text>{t('home.title')}</Text>;
    }
    
    export default function App() {
      useEffect(() => {
        loadLatest('es');
      }, []);
      return <Home />;
    }
  4. Cambia textos sin una nueva build

    Edita una traducción, confírmala y crea una nueva publicación. La URL latest ya sirve el texto nuevo y tu app lo recoge la próxima vez que cargue las traducciones. Sin nueva build ni revisión en la tienda.

Conviene saber

  • Los archivos de las publicaciones se guardan en caché en una CDN, así que una nueva publicación puede tardar unos minutos en verse en todas partes.
  • Para fijar una versión de la app a una publicación concreta, usa la URL con versión (…/v3/es.json) en lugar de …/latest/es.json.
  • Para conservar el texto descargado sin conexión, guárdalo con AsyncStorage y añádelo a i18next antes de que termine la petición de red.

Empieza a enviar globalmente en 5 minutos

Únete a los desarrolladores que envían sus apps en todos los idiomas con litei18n.

Plan gratuito disponible · Sin tarjeta de crédito · Configuración en menos de 5 minutos