Lingo.dev - مجموعة أدوات i18n مفتوحة المصدر للترجمة المدعومة بنماذج اللغة الكبيرة
MCP •CLI • CI/CD •SDK • المترجم
| الأداة | حالة الاستخدام | الأمر السريع |
|---|---|---|
| MCP | إعداد i18n بمساعدة الذكاء الاصطناعي لتطبيقات React | الأمر: Set up i18n |
| CLI | ترجمة ملفات JSON وYAML وmarkdown وCSV وPO | npx lingo.dev@latest run |
| CI/CD | خط أنابيب ترجمة آلي في GitHub Actions | uses: lingodotdev/lingo.dev@main |
| SDK | ترجمة وقت التشغيل للمحتوى الديناميكي | npm install lingo.dev |
| المترجم | ترجمة React في وقت البناء بدون أغلفة i18n | إضافة withLingo() |
إعداد i18n في تطبيقات React معروف بأنه عرضة للأخطاء - حتى للمطورين ذوي الخبرة. مساعدو الترميز بالذكاء الاصطناعي يزيدون الأمر سوءًا: فهم يتوهمون واجهات برمجية غير موجودة، وينسون تكوينات الوسيط، ويكسرون التوجيه، أو ينفذون نصف حل قبل أن يضيعوا. المشكلة هي أن إعداد i18n يتطلب تسلسلًا دقيقًا من التغييرات المنسقة عبر ملفات متعددة (التوجيه، الوسيط، المكونات، التكوين)، ونماذج اللغة الكبيرة تواجه صعوبة في الحفاظ على هذا السياق.
يحل Lingo.dev MCP هذه المشكلة من خلال منح المساعدين بالذكاء الاصطناعي وصولاً منظمًا إلى معرفة i18n الخاصة بإطار العمل. بدلاً من التخمين، يتبع مساعدك أنماط التنفيذ المعتمدة لـ Next.js وReact Router وTanStack Start.
بيئات التطوير المدعومة:
- Claude Code
- Cursor
- GitHub Copilot Agents
- Codex (OpenAI)
أطر العمل المدعومة:
- Next.js (App Router وPages Router الإصدارات 13-16)
- TanStack Start (الإصدار 1)
- React Router (الإصدار 7)
الاستخدام:
بعد تكوين خادم MCP في بيئة التطوير الخاصة بك (راجع أدلة البدء السريع)، اطلب من مساعدك:
Set up i18n with the following locales: en, es, and pt-BR. The default locale is 'en'.
سيقوم المساعد بـ:
- تكوين التوجيه المعتمد على اللغة (مثل
/en،/es،/pt-BR) - إعداد مكونات تبديل اللغة
- تنفيذ الكشف التلقائي عن اللغة
- إنشاء ملفات التكوين اللازمة
ملاحظة: توليد الكود بمساعدة الذكاء الاصطناعي غير حتمي. راجع الكود المُولَّد قبل الالتزام به.
الحفاظ على تزامن الترجمات أمر ممل. تضيف نصًا جديدًا، تنسى ترجمته، تشحن واجهة مستخدم معطلة للمستخدمين الدوليين. أو ترسل ملفات JSON إلى المترجمين، تنتظر أيامًا، ثم تدمج عملهم يدويًا. التوسع إلى أكثر من 10 لغات يعني إدارة مئات الملفات التي تخرج باستمرار عن التزامن.
يقوم Lingo.dev CLI بأتمتة هذا. وجهه إلى ملفات الترجمة الخاصة بك، شغّل أمرًا واحدًا، وسيتم تحديث كل لغة. يتتبع ملف القفل ما تمت ترجمته بالفعل، لذا تدفع فقط مقابل المحتوى الجديد أو المُعدَّل. يدعم ملفات JSON وYAML وCSV وPO وmarkdown.
الإعداد:
# Initialize project
npx lingo.dev@latest init
# Run translations
npx lingo.dev@latest runكيف يعمل:
- يستخرج المحتوى القابل للترجمة من الملفات المُعدّة
- يرسل المحتوى إلى مزود LLM للترجمة
- يكتب المحتوى المترجم مرة أخرى إلى نظام الملفات
- ينشئ ملف
i18n.lockلتتبع الترجمات المكتملة (يتجنب المعالجة الزائدة)
الإعداد:
ينشئ أمر init ملف i18n.json. قم بإعداد اللغات والحاويات:
{
"$schema": "https://lingo.dev/schema/i18n.json",
"version": "1.10",
"locale": {
"source": "en",
"targets": ["es", "fr", "de"]
},
"buckets": {
"json": {
"include": ["locales/[locale].json"]
}
}
}حقل provider اختياري (افتراضيًا Lingo.dev Engine). لمزودي LLM المخصصين:
{
"provider": {
"id": "openai",
"model": "gpt-4o-mini",
"prompt": "Translate from {source} to {target}"
}
}مزودو LLM المدعومون:
- Lingo.dev Engine (موصى به)
- OpenAI
- Anthropic
- Mistral
- OpenRouter
- Ollama
الترجمات هي الميزة التي تكون دائمًا "على وشك الانتهاء". يدمج المهندسون الكود دون تحديث اللغات. يكتشف فريق ضمان الجودة الترجمات المفقودة في بيئة الاختبار - أو الأسوأ من ذلك، يكتشفها المستخدمون في الإنتاج. السبب الجذري: الترجمة خطوة يدوية يسهل تخطيها تحت ضغط المواعيد النهائية.
يجعل Lingo.dev CI/CD الترجمات تلقائية. كل دفع يُشغّل الترجمة. تُملأ النصوص المفقودة قبل وصول الكود إلى الإنتاج. لا حاجة للانضباط - خط الأنابيب يتولى الأمر.
المنصات المدعومة:
- GitHub Actions
- GitLab CI/CD
- Bitbucket Pipelines
إعداد GitHub Actions:
أنشئ .github/workflows/translate.yml:
name: Translate
on:
push:
branches: [main]
permissions:
contents: write
jobs:
translate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Lingo.dev
uses: lingodotdev/lingo.dev@main
with:
api-key: ${{ secrets.LINGODOTDEV_API_KEY }}متطلبات الإعداد:
- أضف
LINGODOTDEV_API_KEYإلى أسرار المستودع (Settings > Secrets and variables > Actions) - لسير عمل PR: فعّل "Allow GitHub Actions to create and approve pull requests" في Settings > Actions > General
خيارات سير العمل:
إيداع الترجمات مباشرة:
uses: lingodotdev/lingo.dev@main
with:
api-key: ${{ secrets.LINGODOTDEV_API_KEY }}إنشاء طلبات سحب مع الترجمات:
uses: lingodotdev/lingo.dev@main
with:
api-key: ${{ secrets.LINGODOTDEV_API_KEY }}
pull-request: true
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}المدخلات المتاحة:
| المدخل | الافتراضي | الوصف |
|---|---|---|
api-key |
(مطلوب) | مفتاح API الخاص بـ Lingo.dev |
pull-request |
false |
إنشاء طلب سحب بدلاً من الالتزام المباشر |
commit-message |
"feat: update translations via @LingoDotDev" |
رسالة التزام مخصصة |
pull-request-title |
"feat: update translations via @LingoDotDev" |
عنوان طلب السحب المخصص |
working-directory |
"." |
الدليل المراد التشغيل فيه |
parallel |
false |
تفعيل المعالجة المتوازية |
تعمل ملفات الترجمة الثابتة بشكل جيد لتسميات واجهة المستخدم، ولكن ماذا عن المحتوى الذي ينشئه المستخدمون؟ رسائل الدردشة، أوصاف المنتجات، تذاكر الدعم - المحتوى الذي لا يوجد في وقت البناء لا يمكن ترجمته مسبقاً. ستضطر إلى عرض نص غير مترجم أو بناء خط أنابيب ترجمة مخصص.
يقوم Lingo.dev SDK بترجمة المحتوى في وقت التشغيل. مرر أي نص أو كائن أو HTML واحصل على نسخة محلية. يعمل للدردشة في الوقت الفعلي، الإشعارات الديناميكية، أو أي محتوى يصل بعد النشر. متاح لـ JavaScript وPHP وPython وRuby.
التثبيت:
npm install lingo.devالاستخدام:
import { LingoDotDevEngine } from "lingo.dev/sdk";
const lingoDotDev = new LingoDotDevEngine({
apiKey: process.env.LINGODOTDEV_API_KEY,
});
// Translate objects (preserves structure)
const translated = await lingoDotDev.localizeObject(
{ greeting: "Hello", farewell: "Goodbye" },
{ sourceLocale: "en", targetLocale: "es" },
);
// { greeting: "Hola", farewell: "Adiós" }
// Translate text
const text = await lingoDotDev.localizeText("Hello!", {
sourceLocale: "en",
targetLocale: "fr",
});
// Translate to multiple languages at once
const results = await lingoDotDev.batchLocalizeText("Hello!", {
sourceLocale: "en",
targetLocales: ["es", "fr", "de"],
});
// Translate chat (preserves speaker names)
const chat = await lingoDotDev.localizeChat(
[{ name: "Alice", text: "Hello!" }],
{ sourceLocale: "en", targetLocale: "es" },
);
// Translate HTML (preserves markup)
const html = await lingoDotDev.localizeHtml("<h1>Welcome</h1>", {
sourceLocale: "en",
targetLocale: "de",
});
// Detect language
const locale = await lingoDotDev.recognizeLocale("Bonjour le monde");
// "fr"مجموعات SDK المتاحة:
- JavaScript SDK - تطبيقات الويب، Node.js
- PHP SDK - PHP، Laravel
- Python SDK - Django، Flask
- Ruby SDK - Rails
التدويل التقليدي متطفل. تقوم بتغليف كل سلسلة نصية في دوال t()، وابتكار مفاتيح ترجمة (home.hero.title.v2)، وصيانة ملفات JSON متوازية، ومشاهدة مكوناتك تنتفخ بشفرة التوطين الإضافية. إنه ممل للغاية لدرجة أن الفرق تؤجل التدويل حتى يصبح إعادة هيكلة ضخمة.
يُلغي Lingo.dev Compiler التعقيدات. اكتب مكونات React بنص إنجليزي عادي. يكتشف المُجمِّع النصوص القابلة للترجمة في وقت البناء ويُنشئ متغيرات محلية تلقائيًا. لا مفاتيح، لا ملفات JSON، لا دوال تغليف - فقط كود React يعمل بلغات متعددة.
التثبيت:
pnpm install @lingo.dev/compilerالمصادقة:
# Recommended: Sign up at lingo.dev and login
npx lingo.dev@latest login
# Alternative: Add API key to .env
LINGODOTDEV_API_KEY=your_key_here
# Or use direct LLM providers (Groq, OpenAI, Anthropic, Google)
GROQ_API_KEY=your_keyالإعداد (Next.js):
// next.config.ts
import type { NextConfig } from "next";
import { withLingo } from "@lingo.dev/compiler/next";
const nextConfig: NextConfig = {};
export default async function (): Promise<NextConfig> {
return await withLingo(nextConfig, {
sourceRoot: "./app",
sourceLocale: "en",
targetLocales: ["es", "fr", "de"],
models: "lingo.dev",
dev: { usePseudotranslator: true },
});
}الإعداد (Vite):
// vite.config.ts
import { lingoCompilerPlugin } from "@lingo.dev/compiler/vite";
export default defineConfig({
plugins: [
lingoCompilerPlugin({
sourceRoot: "src",
sourceLocale: "en",
targetLocales: ["es", "fr", "de"],
models: "lingo.dev",
dev: { usePseudotranslator: true },
}),
react(),
],
});إعداد المزود:
// app/layout.tsx (Next.js)
import { LingoProvider } from "@lingo.dev/compiler/react";
export default function RootLayout({ children }) {
return (
<LingoProvider>
<html>
<body>{children}</body>
</html>
</LingoProvider>
);
}مبدل اللغة:
import { useLocale, setLocale } from "@lingo.dev/compiler/react";
export function LanguageSwitcher() {
const locale = useLocale();
return (
<select value={locale} onChange={(e) => setLocale(e.target.value)}>
<option value="en">English</option>
<option value="es">Español</option>
</select>
);
}التطوير: npm run dev (يستخدم مترجمًا وهميًا، بدون استدعاءات API)
الإنتاج: اضبط usePseudotranslator: false، ثم next build
قم بإيداع دليل .lingo/ في نظام التحكم بالإصدارات.
الميزات الرئيسية:
- تكلفة أداء صفرية في وقت التشغيل
- لا مفاتيح ترجمة أو ملفات JSON
- لا دوال
t()أو مكونات تغليف<T> - اكتشاف تلقائي للنصوص القابلة للترجمة في JSX
- دعم TypeScript
- تنسيق ICU MessageFormat للجمع
- تجاوزات يدوية عبر خاصية
data-lingo-override - أداة محرر ترجمة مدمجة
أوضاع البناء:
pseudotranslator: وضع التطوير مع ترجمات نائبة (بدون تكاليف API)real: إنشاء ترجمات فعلية باستخدام نماذج اللغة الكبيرةcache-only: وضع الإنتاج باستخدام ترجمات مُنشأة مسبقًا من CI (بدون استدعاءات API)
الأطر المدعومة:
- Next.js (App Router مع React Server Components)
- Vite + React (SPA وSSR)
دعم أطر إضافية مخطط له.
المساهمات مرحب بها. يرجى اتباع هذه الإرشادات:
- المشكلات: الإبلاغ عن الأخطاء أو طلب ميزات
- طلبات السحب: إرسال التغييرات
- كل طلب سحب يتطلب مجموعة تغييرات:
pnpm new(أوpnpm new:emptyللتغييرات التي لا تتطلب إصداراً) - تأكد من نجاح الاختبارات قبل الإرسال
- كل طلب سحب يتطلب مجموعة تغييرات:
- التطوير: هذا مستودع أحادي من نوع pnpm + turborepo
- تثبيت التبعيات:
pnpm install - تشغيل الاختبارات:
pnpm test - البناء:
pnpm build
- تثبيت التبعيات:
الدعم: مجتمع Discord
إذا وجدت Lingo.dev مفيداً، امنحنا نجمة وساعدنا في الوصول إلى 10,000 نجمة!
[
](https://www.star-history.com/#lingodotdev/lingo.dev&Date)
الترجمات المتاحة:
English • 中文 • 日本語 • 한국어 • Español • Français • Русский • Українська • Deutsch • Italiano • العربية • עברית • हिन्दी • Português (Brasil) • বাংলা • فارسی • Polski • Türkçe • اردو • भोजपुरी • অসমীয়া • ગુજરાતી • मराठी • ଓଡ଼ିଆ • ਪੰਜਾਬੀ • සිංහල • தமிழ் • తెలుగు
إضافة لغة جديدة:
- أضف رمز اللغة إلى
i18n.jsonباستخدام تنسيق BCP-47 - أرسل طلب سحب
تنسيق لغة BCP-47: language[-Script][-REGION]
language: ISO 639-1/2/3 (أحرف صغيرة):en،zh،bhoScript: ISO 15924 (حالة العنوان):Hans،Hant،LatnREGION: ISO 3166-1 alpha-2 (أحرف كبيرة):US،CN،IN- أمثلة:
en،pt-BR،zh-Hans،sr-Cyrl-RS