v0.26.0خادم MCP لوكلاء الترميز

أطلق تطبيقك في every language.

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

$npx localize-dev تشغيل
import { useTranslation } from 'react-i18next';

export function Inbox({ user, unread }) {
  const { t } = useTranslation();
  return (
    <section>
      <h1>{t('inbox.welcome_heading', { name: user.name })}</h1>
      <p>{t('inbox.unread_summary', { unread })}</p>
      <input placeholder={t('inbox.search_placeholder')} />
      <button>{unread ? t('inbox.mark_all_read') : t('inbox.refresh')}</button>
    </section>
  );
}

19 إطار عمل، من React و Flutter إلى Rails و Android و iOS، بالإضافة إلى الأدوات المحيطة بهم

لماذا localize.dev؟

خمس خطوات يدوية، تنفذ في مرة واحدة

العمل الذي تكرره في كل إصدار، يتم تنفيذه في مراجعة واحدة مثل أي تغيير في الكود.

  1. ابحث

    عادة:ابحث في قاعدة الشيفرة عن السلاسل، ملفًا بملف

    الآن:كل سلسلة موجودة على AST، بما في ذلك السمات، والعبارات الثلاثية، والعبارات النصية النموذجية

  2. الاسم

    عادة:اختر مفتاحًا لكل واحد وتأمل أن يظل ثابتًا

    الآن:مفاتيح دلالية من سياق المكون؛ النسخة المتماثلة تعيد استخدام مفتاحها

  3. ترجم

    عادة:تصدير جدول بيانات، الانتظار للمترجمين، ثم لصقه مرة أخرى

    الآن:كل لغة هدف تُترجم في تمريرة واحدة

  4. تحقق

    عادة:اكتشف {placeholder} المعطل في الإنتاج

    الآن:تم فحص العناصر النائبة قبل كتابة أي شيء

  5. أطلق

    عادة:افعلها مرة أخرى في الإصدار التالي

    الآن:طلب سحب على كل دفع، بحيث لا يُطلق أي نص جديد دون ترجمة

5 تحويلات بالطريقة المعتادة

طلب سحب واحد مع localize.dev

جربه على الكود الخاص بك

كيف يعمل

من النسخة المكتوبة بالكامل إلى طلب سحب مترجم

أربع خطوات حتمية، مع النموذج فقط حيث يساعد الحكم: تسمية المفاتيح والترجمة. قم بالتمرير لتتبع مكون واحد عبر الخطوات الأربع.

01 / 04

فحص شجرة بناء الجملة المجردة

يتم تحليل كل مكون وصفحة: JSX، قوالب Vue و Svelte، أو HTML. يتم استخراج النص والسمات التي يواجهها المستخدم والسلاسل النصية التي يعرضها الكود الخاص بك. يتم تخطي عناوين URL وأسماء الفئات وعينات التعليمات البرمجية.

src/checkout/Summary.tsx
4<aside className="ملخص">class · تم تجاهلها
5 <h2>ملخص الطلب</h2>
6

مرحبا {user.name}، لديك {count} أشياء</p>
7 placeholder="رمز الخصم" />
8 <button>تأكيد الطلب</button>
9 <Link href="/cart/edit">تعديل السلة</Link>URL · تم تجاهلها
10</aside>

5

قوائم النص المكتشفة

2

تم تجاهله بواسطة القاعدة

1

مكون

ترجمة واعية بالسياق

مترجمة للمكان الذي توجد فيه كل سلسلة نصية

الترجمة كلمة بكلمة تنكسر في اللحظة التي تعني فيها كلمة شيئين. يقوم localize.dev بترجمة كل سلسلة نصية بما يقوله مشروعك عنها وما تتوقعه اللغة المستهدفة منها.

يقرأ مشروعك

تتم ترجمة السلسلة مع مكان وجودها: الملف، والمكون، والعنصر الذي تستقر فيه، لذا يحصل كل من تسمية الزر والعنوان والم عنصر نائب على المعنى الصحيح. تحتفظ مسردك وملاحظاتك الأسلوبية بمصطلحات المنتج والنبرة كما هي في كل ملف.

  • مسار الملف
  • مكون
  • عنصر وسمة
  • مصطلحات المسرد
  • أسماء لا تترجم
  • النبرة وشكل الخطاب

"Post" → de

src/feed/Composer.tsx · داخل <Button>Veröffentlichen
src/feed/PostCard.tsx · داخل <CardTitle>Beitrag

تكتب لكل لغة

تحصل صيغ الجمع على كل شكل يحتاجه المكان، حتى مع وجود عدّين في جملة واحدة، يتبع الأول والثاني الأرقام الترتيبية الخاصة بكل لغة، وتنتقل الروابط والنص الغامق إلى حيث تضعها القواعد النحوية، ويتطابق أسلوب الخطاب مع الصوت الذي اخترته لكل سوق.

  • قواعد الجمع في CLDR
  • الترتيبية
  • ترتيب الكلمات
  • ضمير المخاطب الرسمي أو غير الرسمي
  • صياغة واجهة المستخدم المختصرة

"{count} ملفات" → pl

1 ملفone
3 ملفاتfew
5 من الملفاتmany

قم بتعيين مصطلحات المسرد والأسماء المراد الاحتفاظ بها والملاحظات الأسلوبية لكل مشروع في لوحة التحكم. يستخدم كل تشغيل على هذا المستودع هذه الإعدادات.

الترجمة المستمرة

كل دفعة تظل مترجمة

أضف GitHub Action ولن يُطلق أي نص جديد دون ترجمة. يقوم كل تشغيل بتحديث نفس الفرع وطلب السحب، لذلك لا ينتهي بك الأمر أبدًا مع كومة من طلبات السحب أو التعارضات بين التشغيلات.

  • التزام مع المكونات وكل ملف لغة
  • إعداد مكتبة الترجمة الدولية (i18n) لإطار العمل الخاص بك إذا لم تكن موجودة بعد
  • قائمة الجسم R تتضمن كل استبدال وكل نص تم تخطيه
  • تم مراجعة الترجمات من Crowdin، Phrase، Lokalise أو Transifex
  • العملية النهائية تصل إلى قسم المراجعة في المشروع
  • تحقق من طلبات السحب التي تفشل في إضافة النصوص غير المترجمة
إعداد الإجراء

التحليل: 12 سلسلة جديدة في 4 لغات

localize-dev/mainmain

إسبانيفرنسيألمانيياباني تم التحقق من العناصر النائبة
.github/workflows/localize.yml
name: Localize

on:
  push:
    branches: [main]
  pull_request:
    types: [opened, synchronize]
  workflow_dispatch: # "Run workflow" button in the Actions tab

permissions:
  contents: write # push the localize-dev/<branch> branch
  pull-requests: write # open or update the localization PR

# One run per branch at a time; a newer push supersedes the running one.
concurrency:
  group: localize-${{ github.head_ref || github.ref_name }}
  cancel-in-progress: true

jobs:
  localize:
    runs-on: ubuntu-latest
    timeout-minutes: 60
    # Skip localize.dev's own branches, and fork PRs (their token is read-only).
    if: >-
      !startsWith(github.head_ref || github.ref_name, 'localize-dev/') &&
      (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository)
    steps:
      - name: Checkout
        uses: actions/checkout@v5
        with:
          # On PRs, scan the branch itself rather than the merge commit.
          ref: ${{ github.head_ref || github.ref_name }}

      - name: Localize
        uses: ufortstephen/autolocalize-action@v1
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          api_key: ${{ secrets.LOCALIZEDEV_API_KEY }}
          target_locales: 'es,fr,de,ja'
          # src_dir: 'src' # default: your framework's (src, app/views, resources/views, lib…)
          # locales_path: 'public/locales/{locale}/common.json' # default: your framework's
          # working_directory: 'apps/web' # monorepo: localize just this app

مراجعة بشرية

يوافق المتحدثون الأصليون، وتثبت إصلاحاتهم

الترجمات الآلية هي مسودة أولى. تحصل كل لغة على مراجعها الخاص، ويتم تذكر كل تصحيح يقومون به في التشغيل التالي.

  • النموذج يعلّق على الترجمات غير المؤكدة مع سببها، بحيث يمكن للمراجعين البدء منها.
  • مراجع واحد لكل لغة، يتم إرساله بريدًا إلكترونيًا مرة واحدة لكل تشغيل.
  • تأكيد أو تعديل، بما في ذلك الأشكال الجمع، مع رابط إلى ملف المصدر.
  • المخطوطات يتم تضمينها في طلب سحب مفتوح.
  • ملاحظات للمراجع التالي، بالإضافة إلى المصطلحات المصغرة المقترحة من تصحيحات تكرارية.
كيف تعمل المراجعة

12 ترجمة إسبانية جديدة للمراجعة

تم الإرسال إلى مراجع المشروع الإسباني عند انتهاء التشغيل

مراجعة · إسباني1 من 3 تمت الموافقة عليها
  • تأكيد الطلب

    checkout.place_order

    تأكيد الطلب

    تمت الموافقة
  • {{count}} عنصرًا في سلتك

    checkout.items

    {{count}} عنصر في سلة التسوق

    موافقة
  • التسديد

    checkout.heading

    الدفع

    تم التحرير

يتغير المراجعون باستمرار checkout إلى pago.

إضافة إلى المسرد

قبل الإطلاق

اكشف المشاكل قبل أن يفعلها المستخدمون

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

شاهدها على الكود الخاص بك أولاً

قم بتوصيل مستودع واحصل على طلب سحب معاينة: ما يصل إلى 200 سلسلة نصية من فرعك الافتراضي، مترجمة من جانبنا. لا يوجد سير عمل أو مفتاح أو سحب.

معاينة localize.dev: 184 سلسلة نصية باللغة الإسبانية

localize-dev/previewmain

كيف تعمل المعاينة

فحص يحافظ على ذلك

يفشل فحص localize-dev في طلب سحب يضيف نصوصًا مكتوبة بشكل ثابت، أو يترك لغة خلفه، أو يغير اللغة الإنجليزية التي لم تلحق بها ترجماتها، ويشير إلى السطر. يعمل في CI بدون مفتاح API.

فشل التحقق من التدويل

src/Cart.tsx:7 "الشحن المجاني اليوم" غير مترجم
locales/de.json 3 رسائل لا تحتوي على ترجمة للألمانية
locales/en.json cart.pay تغير منذ الترجمة

إضافة الفحص

ابحث عن التصاميم التي تتعطل، قبل الترجمة

تشغيل localize-dev --pseudo يكتب لغة وهمية ممتدة ومشدودة. تظهر أزرار مقطوعة، وكذلك النص الثابت. مجاني، بدون نموذج.

تأكيد الطلب[Þļáçé öŕðéŕ one two]en-XA: أطول بنسبة ~35%، مثل الألمانية
جرب التوطين الوهمي

راجع المشكوك فيها أولاً

النموذج يحدد الترجمة التي غير متأكد منها، مع السبب. يفتح علامة التبويب المراجعة على تلك؛ وافق على الباقي بنقرة واحدة.

احجز → الحجزإسباني

تحتاج إلى نظرة: حجز أم رواية؟ تم تخمين الحجز من الزر.

كيف تعمل المراجعة

تخطيطات من اليمين إلى اليسار، يتم فحصها قبل الإطلاق

مع اللغات العربية أو العبرية، تكون هوامش قوائم التحقق والمحاذاة مثبتة على جانب واحد، ويقوم localize-dev rtl --fix بتبديل الآمنة بأخرى منطقية تنقلب تلقائيًا.

- ml-4 text-left rounded-l-lg

+ ms-4 text-start rounded-s-lg

كيف يعمل اليمين إلى اليسار

مستنداتك، بكل اللغات أيضًا

محتوى localize-dev يترجم مستندات Markdown و MDX، والمدونات والصفحات القانونية إلى نسخة لكل لغة. تبقى الشفرة والروابط والمكونات كما هي؛ فقط يتم إعادة تحرير المستندات المعدلة.

docs/intro.mdintro.es.mdintro.fr.mdintro.de.md
ترجم مستنداتك

يعمل حيث تبني

محرك واحد للويب، الهاتف المحمول، والكمبيوتر الشخصي

الصفحات الويب والتطبيقات التي يتم ترندها على الخادم، والتطبيقات الخاصة بـ iOS و Android، والتطبيقات الخاصة بالكمبيوتر الشخصي والمكتبات المكونة المشتركة بينهم. لكل منها مكتبة i18n التي يتوقعها إطارها.

01 / 04

تطبيقات الويب

React · Next.js · Angular · Vue · SvelteKit · Astro

acmegoods.com/en

Free shipping on orders over $50

Acme Goods2
The weekend editPieces for slow mornings and long trips.Shop now
Canvas Weekender
New arrivalsView all
Studio Headphones
Studio Headphones$189
Essential Tee
Essential Tee$32
Parlour Palm
Parlour Palm$38
Minimal Watch
Minimal Watch$149

التكاملات

إطارك، أدواتك

كل إطار عمل يحصل على مكتبة i18n الخاصة به، جاهزة للاستخدام. تصل الترجمات إلى طلب التحديث، أو منصة الترجمة الخاصة بك، أو ملفات اللغة التي لديك بالفعل.

من خط الأمر (الترمينال)

شاهد كل تغيير قبل حدوثه

قم بتشغيله محليًا أولاً. --dry-run يطبع كل استبدال وكل سلسلة تم تخطيها مع السبب، لذلك لن يفاجئك شيء في المراجعة.

localize-dev scanlocalize-dev run --dry-runlocalize-dev run --pseudolocalize-dev checklocalize-dev prlocalize-dev translate
مرجع سطر الأوامر
~/acme/storefront

$ npx localize-dev run -l es,fr,de

🔍 مسح src/ (اللغات المستهدفة: العربية)

src/checkout/Summary.tsx

ملخص الطلب →

رمز الخصم

أرسل الطلب

تسليم مجاني فوق 50 دولار

✅ تم ترجمة 3 نصًا عبر ملف واحد (3 مفاتيح جديدة، 0 مستخدمة). تم كتابة 5 ملفات.

$

كيف يعمل المحرك

القواعد تقوم بإعادة الكتابة. النموذج يقوم فقط بتسمية المفاتيح والترجمة.

اختلافات بسيطة

يتم إدراج التعديلات في إزاحات AST دقيقة. يظل التنسيق وترتيب الاستيراد كما كانا، لذا يرى المراجعون فقط الأسطر التي تغيرت.

- <button>تقديم الطلب</button>
+ <button>{t('checkout.place_order')}</button>
<a href="/terms">…

فقرات كاملة

النص، العبارات، الروابط والنص الغليظ يتحدون في رسالة واحدة، لذا يرى المترجمون الجملة الكاملة بدلاً من قطعها.

مرحبا {name}، لديك {count} أشياء

تخطي ما لا يمكن تعديله بأمان

تُترك السلاسل النصية التي لا يمكن للمحرك إعادة كتابتها بأمان، مثل تلك الموجودة في مكونات الفئة أو خارج Composable، كما هي ويتم الإبلاغ عنها مع السبب.

غير متغير

قم بتشغيله عند كل دفعة. تُترك السلاسل النصية المغلفة كما هي وتُعيد النسخة المتطابقة استخدام مفتاحها الحالي.

لا يوجد شيء لاستضافته

تتم الترجمة على نموذج localize.dev المستضاف في كل خطة. لا تحتاج إلى وحدات معالجة الرسومات أو المطالبات أو مفاتيح الموفر. مفتاح API يكفي.

لا يوجد تقييد

المخرج هو مكتبة i18n التي يستخدمها إطار عملك بالفعل، مع ملفات محلية عادية في مستودعك. توقف عن استخدام localize.dev غدًا وسيستمر تطبيقك في العمل، مع الترجمات وكل شيء.

  • react-i18next
  • vue-i18n
  • ngx-translate
  • svelte-i18n
  • ember-intl
  • Rails I18n
  • gettext
  • strings.xml
  • Flutter ARB

التواريخ والأرقام والمال أيضًا

toLocaleDateString('en-US') و Intl formatters و `$${{price}}` يُعاد كتابتها لمتابعة لغة التطبيق، لذا فإن 1,234.50 دولارًا تُقرأ 1.234,50 دولارًا لزائر ألماني.

الأمان والخصوصية

ما يغادر جهازك

السلاسل النصية التي تتم ترجمتها فقط هي التي تذهب إلى واجهة برمجة التطبيقات. تبقى ملفاتك المصدر على جهازك أو مشغل CI.

  • سلاسل نصية، وليس مصدرًا

    يتم إرسال السلاسل النصية المستخرجة فقط، مع مسار ملفها للسياق. الملفات بأكملها لا تغادر جهازك أبدًا.

  • محلي عندما تريد

    الفحوصات والجلسات غير المتصلة تحدث على جهازك بدون مفتاح API وبدون اتصالات بالشبكة، ولا تستهلك حصتك.

  • مفاتيح API المشفرة

    يتم تخزين فقط تجزئة كل مفتاح. تُعرض الأسرار مرة واحدة، وإلغاء تفعيل واحد منها يأخذ تأثيره فورًا.

  • كل شيء أو لا شيء

    إذا كانت العملية ستتجاوز خطتك، تتوقف قبل كتابة أي شيء، بحيث لا يُترك الكود نصف مكتوب.

التسعير

ابدأ مجانًا. قم بالترقية عندما ينمو المحتوى الخاص بك.

Free

$0للأبد

كل ما تحتاجه لترجمة مشروع جانبي أو تجربته على قاعدة تعليمات برمجية حقيقية.

  • 1,000 سلاسل / شهر
  • 3 لغات مستهدفة
  • CLI and GitHub Action
  • الوضع غير المتصل والمسح لا يستخدمان حصتك أبدًا

Pro

الأكثر شيوعًا

$100/سنة

يُفوتر سنوياً

للمنتجات المتوفرة في عدة أسواق.

  • سلاسل غير محدودة
  • 5 لغات مستهدفة
  • طلبات السحب عند كل دفعة
  • لوحة معلومات الاستخدام ومفاتيح واجهة برمجة تطبيقات متعددة

Team

$200/سنة

يُفوتر سنوياً

يشمل 3 أعضاء · +‏50 US$/سنة لكل عضو إضافي

لفرق المنتجات الموجودة في العديد من الأسواق.

  • سلاسل غير محدودة
  • لغات مستهدفة غير محدودة
  • 3 أعضاء متضمنين، ثم ‏50 US$ / سنة لكل منهم
  • مساحات عمل غير محدودة، مشاركة الخطة
  • مشاريع مشتركة ومفاتيح واستخدام
  • دعم ذو أولوية

قارن الخطط بالتفصيل

أسئلة شائعة

الأسئلة التي تطرحها الفرق أولاً

هل هو فقط لتطبيقات الويب React؟+

لا. يعمل على React و Next.js و React Native و Expo و Flutter و Angular و Vue و Nuxt و Svelte و SvelteKit و Astro و Solid و Qwik و Lit و Ember و Electron و Tauri ومواقع HTML بسيطة وقوالب Rails و Django و Laravel وتصاميم Android و Jetpack Compose و View و تطبيقات iOS و macOS في SwiftUI و UIKit. يجهز مكتبة i18n المطابقة لكل منها: react-i18next و ngx-translate و vue-i18n أو @nuxtjs/i18n و svelte-i18n و ember-intl و gen-l10n الخاص بـ Flutter و Rails I18n و gettext الخاص بـ Django و موارد سلاسل Android و Apple String Catalogs و .strings و سكربت صغير للصفحات الثابتة.

هل لا زلنا بحاجة إلى ذلك إذا كانت الترجمة الدولية معدة بالفعل؟+

نعم. يملأ localize-dev translate الترجمات المفقودة في ملفات اللغة التي لديك بالفعل، بغض النظر عن التقنية: JSON (i18next، react-intl، vue-i18n، ngx-translate)، YAML الخاص بـ Rails، ملفات gettext .po، ملفات Flutter .arb، موارد سلاسل Android.xml، كتالوجات سلاسل Apple وملفات .strings، ورسائل ملحق المتصفح. لا يتم تعديل الكود، ولا تتغير الترجمات الموجودة، وفي بيئة CI يفتح طلب سحب عند إضافة مفاتيح جديدة.

هل تترك كودك جهازك؟+

يتم إرسال فقط النصوص التي يتم ترجمتها إلى API localize.dev، مع مسار ملفها وموقعها (العنصر مثل زر أو عنوان) كسياق. لا يتم إرسال ملفات كاملة أبدًا. تتم إعادة كتابة النصوص محليًا (أو على Runner الخاص بك CI)، ولا تتصل عمليات الفحص والتنفيذ خارج الشبكة.

هل الترجمات الآلية جيدة بما يكفي لإطلاقها؟+

إنها مسودة أولى قوية مع عناصر نائبة صحيحة ومفاتيح متسقة. بالنسبة للنسخ الخاضعة للتنظيم أو المهمة للعلامة التجارية، قم بتعيين مراجع لكل لغة: يتلقون بريدًا إلكترونيًا عند اكتمال التشغيل، ويوافقون على كل ترجمة أو يصححونها في علامة التبويب "مراجعة"، وتدخل التصحيحات في طلب السحب المفتوح وكل تشغيل لاحق. تصبح التصحيحات التي تستمر في الظهور مصطلحات في المسرد بنقرة واحدة. كما يشير النموذج إلى الترجمات التي ليست متأكدًا منها، مع ذكر السبب، لذا يبدأ المراجعون بتلك الترجمات.

ماذا لو توقفنا عن استخدام localize.dev؟+

ستظل تطبيقاتك تعمل بشكل طبيعي. الناتج هو مكتبة i18n التي يستخدمها إطار عملك بالفعل (react-i18next، vue-i18n، ngx-translate، Rails I18n، gettext، موارد سلاسل Android، كتالوجات سلاسل Apple…) مع ملفات لغة بسيطة في مستودعك. لا يوجد تشغيل أو SDK أو وكيل من localize.dev لإزالته.

لصق مكون أو صفحة. انظرها بلغتين.

لا تحتاج إلى حساب. يعمل الملعب بالmotor نفسه الذي يستخدمه CLI.