React
استخدم @better-translate/react عندما تحتاج مكونات React إلى الترجمة وتبديل اللغة.
1. تثبيت الحزم
npm install @better-translate/core @better-translate/react2. إنشاء المترجم المشترك
أنشئ src/i18n.ts:
1import { configureTranslations } from "@better-translate/core";23const en = {4 home: {5 title: "Hello",6 },7} as const;89const es = {10 home: {11 title: "Hola",12 },13} as const;1415export const translator = await configureTranslations({16 availableLocales: ["en", "es"] as const,17 defaultLocale: "en",18 fallbackLocale: "en",19 messages: { en, es },20});3. تغليف تطبيقك
أنشئ أو حدّث src/main.tsx:
1import React from "react";2import ReactDOM from "react-dom/client";34import { BetterTranslateProvider } from "@better-translate/react";56import { App } from "./app";7import { translator } from "./i18n";89ReactDOM.createRoot(document.getElementById("root")!).render(10 <React.StrictMode>11 <BetterTranslateProvider translator={translator}>12 <App />13 </BetterTranslateProvider>14 </React.StrictMode>,15);4. قراءة الترجمات داخل مكون
أنشئ src/header.tsx:
1import { useTranslations } from "@better-translate/react";23import { translator } from "./i18n";45export function Header() {6 const { locale, setLocale, t } = useTranslations<typeof translator>();78 return (9 <header>10 <h1>{t("home.title")}</h1>11 <button onClick={() => setLocale("en")} disabled={locale === "en"}>12 English13 </button>14 <button onClick={() => setLocale("es")} disabled={locale === "es"}>15 Español16 </button>17 </header>18 );19}اختياري: تعيين نوع useTranslations() مرة واحدة للتطبيق كله
إذا أردت أن يُكمل useTranslations() تلقائيًا مفاتيح الترجمة دون
تكرار <typeof translator> في كل مكون، أضف ملف إعلان واحد:
أنشئ src/better-translate.d.ts:
1import { translator } from "./i18n";23declare module "@better-translate/react" {4 interface BetterTranslateReactTypes {5 translator: typeof translator;6 }7}ثم يمكن لمكوناتك استدعاء الـ hook بدون generic:
1import { useTranslations } from "@better-translate/react";23export function Header() {4 const { locale, setLocale, t } = useTranslations();56 return (7 <header>8 <h1>{t("home.title")}</h1>9 <button onClick={() => setLocale("en")} disabled={locale === "en"}>10 English11 </button>12 <button onClick={() => setLocale("es")} disabled={locale === "es"}>13 Español14 </button>15 </header>16 );17}المعاملات العامة الصريحة لا تزال تعمل، لذا يمكنك الاستمرار في استخدام useTranslations<typeof translator>()
حيثما يناسب قاعدة الشيفرة الخاصة بك أكثر.
متى تستخدم React فقط
استخدم @better-translate/core + @better-translate/react فقط عندما:
- يكون تطبيقك React SPA
- يكون تطبيقك تطبيق Expo
- تحدث تغييرات اللغة في مكونات العميل
إذا كنت في Next.js App Router، احتفظ بهذه الحزمة لـ hooks العميل وأضف محول Next.js للتوجيه ومساعدي الخادم.
توليد ملفات اللغة تلقائيًا
بدلاً من كتابة كل ترجمة يدويًا، استخدم CLI لاستخراج النصوص وتوليد ملفات اللغة: دليل CLI