localize.dev

الوثائق / React

ترجمة React، آلية

انقل النصوص الثابتة في تطبيق React إلى استدعاءات t() الخاصة بـ react-i18next، مع مفاتيح دلالية وترجمات وإعداد i18next، في أمر واحد أو طلب سحب واحد.

كيف يعمل

يقرأ localize.dev كل ملف .tsx و .jsx، ويعثر على النصوص التي يراها الأشخاص (النص، السمات مثل placeholder و aria-label، السلاسل النصية المعروضة من العوامل الثلاثية) ويعيد كتابتها إلى استدعاءات t() بمفاتيح مسماة بناءً على ما يفعله النص.

تصبح الجمعيات رسالة واحدة بكل شكل تحتاجه كل لغة، وتبقى الجمل حول الروابط كاملة مع <Trans>. تحصل جملة تحتوي على عددين ("3 ملفات في مجلدين") على صيغة جمع لكل عدد، وتصبح الترتيبية (ordinal(place) → "الأول"، "الثاني") صيغ جمع ترتيبية لـ i18next بكل لغة بأشكالها الخاصة.

تتم إعادة كتابة التواريخ والأرقام والأسعار المكتوبة بشكل ثابت لغة واحدة (toLocaleDateString('en-US')، ` $${price} `) لتتبع لغة التطبيق أيضًا.

قبل وبعد

المخرجات الحقيقية للمحرك لهذا الملف. في تشغيل حقيقي، يقوم النموذج المستضاف بتسمية المفاتيح من السياق.

src/components/Inbox.tsx · قبل
export function Inbox({ user, count }) {
  return (
    <section>
      <h1>Welcome back, {user.name}</h1>
      <p>{count} {count === 1 ? 'message' : 'messages'} waiting</p>
      <input placeholder="Search messages" />
      <p>Read the <a href="/help">help center</a> first.</p>
    </section>
  );
}
src/components/Inbox.tsx · بعد
import { useTranslation, Trans } from 'react-i18next';

export function Inbox({ user, count }) {
  const { t } = useTranslation();
  return (
    <section>
      <h1>{t('inbox.welcome_back', { name: user.name })}</h1>
      <p>{t('inbox.messages_waiting', { count })}</p>
      <input placeholder={t('inbox.search_messages')} />
      <p><Trans i18nKey="inbox.read_the_help_center_first" components={{ a: <a href="/help" /> }} /></p>
    </section>
  );
}
locales/en.json
{
  "inbox": {
    "welcome_back": "Welcome back, {{name}}",
    "messages_waiting_one": "{{count}} message waiting",
    "messages_waiting_other": "{{count}} messages waiting",
    "search_messages": "Search messages",
    "read_the_help_center_first": "Read the <a>help center</a> first."
  }
}

ما يضيفه الإعداد

الإعداد الأول يقوم بإعداد react-i18next إذا لم يكن المشروع يحتوي عليه بعد:

  • تمت إضافة i18next و react-i18next إلى package.json (يقوم GitHub Action بتحديث ملف القفل أيضًا)
  • src/i18n.ts، والتي تقوم بتحميل كل ملف لغة وتختار اللغة من خيار محفوظ، ثم المتصفح
  • استيراد لها في ملف الإدخال الخاص بك، و <LanguageSwitcher /> يمكنك وضعه في رأس الصفحة

قم بتشغيله

يتطلب CLI إصدار Node.js 22 أو أحدث.

npm install --save-dev localize-dev
npx localize-dev login

# Preview, then write the changes
npx localize-dev run --dry-run -l es,fr,de
npx localize-dev run -l es,fr,de

# Or open a pull request instead
npx localize-dev pr -l es,fr,de

أو أضف إجراء GitHub واحصل على طلب سحب عند كل دفعة. جربه على الكود الخاص بك أولاً في ملعب.