تخطي إلى المحتوى الرئيسي
جميع الأدلة
دليل

تحديث الترجمات عبر الهواء في React Native

عادةً ما تنتظر تغييرات النصوص في تطبيق React Native الإصدار التالي ومراجعة المتجر. يحتفظ هذا الدليل بـ i18next وreact-i18next ويضيف دالة واحدة تحمّل أحدث إصدار من litei18n عند التشغيل.

خطوات الإعداد

  1. أنشئ إصدارًا

    في litei18n، اعتمد ترجماتك وأنشئ إصدارًا من صفحة Releases (خطة Starter وما فوقها). انسخ معرّف مشروعك من رابط الإصدار الظاهر هناك. وصدّر ترجماتك أيضًا بصيغة JSON وأضفها إلى تطبيقك كنسخة مضمّنة.

  2. حمّل الإصدار عند تشغيل التطبيق

    ثبّت i18next وreact-i18next. الملف الإنجليزي المضمّن هو البديل الاحتياطي، وتحمّل loadLatest لغة وتضيفها إلى i18next. أُوقف keySeparator لأن مفاتيح litei18n أسماء مسطحة مثل 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. استخدم النصوص

    استخدم الخطاف useTranslation كالمعتاد، واستدعِ loadLatest مرة واحدة عند التشغيل بلغة المستخدم.

    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. غيّر النصوص دون إصدار جديد

    عدّل ترجمة واعتمدها وأنشئ إصدارًا جديدًا. سيقدّم رابط latest النص الجديد، ويحصل عليه تطبيقك في المرة التالية التي يحمّل فيها الترجمات. لا حاجة إلى إصدار جديد ولا إلى مراجعة من متجر التطبيقات.

من المفيد معرفته

  • تُخزَّن ملفات الإصدارات مؤقتًا على شبكة CDN، لذا قد يستغرق ظهور الإصدار الجديد في كل مكان بضع دقائق.
  • لتثبيت إصدار من التطبيق على إصدار ترجمات محدد، استخدم الرابط ذا الرقم (…/v3/es.json) بدلًا من …/latest/es.json.
  • للاحتفاظ بالنص المحمَّل دون اتصال، احفظه باستخدام AsyncStorage وأضفه إلى i18next قبل انتهاء طلب الشبكة.

ابدأ الإطلاق عالمياً في 5 دقائق

انضم إلى المطورين الذين يطلقون تطبيقاتهم بكل لغة مع litei18n.

خطة مجانية متاحة · لا حاجة لبطاقة ائتمان · إعداد في أقل من 5 دقائق