أطلق تطبيقك في every language.
كل سلسلة نصية مصممة مسبقًا في تطبيقك على الويب أو الهاتف المحمول أو سطح المكتب، يتم العثور عليها وترجمتها مع سياق تطبيقك. طلب سحب واحد لمراجعة وإدماجه، من أمر CLI واحد أو في كل دفع.
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؟
خمس خطوات يدوية، تنفذ في مرة واحدة
العمل الذي تكرره في كل إصدار، يتم تنفيذه في مراجعة واحدة مثل أي تغيير في الكود.
- ابحث
عادة:ابحث في قاعدة الشيفرة عن السلاسل، ملفًا بملف
الآن:كل سلسلة موجودة على AST، بما في ذلك السمات، والعبارات الثلاثية، والعبارات النصية النموذجية
- الاسم
عادة:اختر مفتاحًا لكل واحد وتأمل أن يظل ثابتًا
الآن:مفاتيح دلالية من سياق المكون؛ النسخة المتماثلة تعيد استخدام مفتاحها
- ترجم
عادة:تصدير جدول بيانات، الانتظار للمترجمين، ثم لصقه مرة أخرى
الآن:كل لغة هدف تُترجم في تمريرة واحدة
- تحقق
عادة:اكتشف {placeholder} المعطل في الإنتاج
الآن:تم فحص العناصر النائبة قبل كتابة أي شيء
- أطلق
عادة:افعلها مرة أخرى في الإصدار التالي
الآن:طلب سحب على كل دفع، بحيث لا يُطلق أي نص جديد دون ترجمة
5 تحويلات بالطريقة المعتادة
طلب سحب واحد مع localize.dev
كيف يعمل
من النسخة المكتوبة بالكامل إلى طلب سحب مترجم
أربع خطوات حتمية، مع النموذج فقط حيث يساعد الحكم: تسمية المفاتيح والترجمة. قم بالتمرير لتتبع مكون واحد عبر الخطوات الأربع.
01 / 04
فحص شجرة بناء الجملة المجردة
يتم تحليل كل مكون وصفحة: JSX، قوالب Vue و Svelte، أو HTML. يتم استخراج النص والسمات التي يواجهها المستخدم والسلاسل النصية التي يعرضها الكود الخاص بك. يتم تخطي عناوين URL وأسماء الفئات وعينات التعليمات البرمجية.
5
قوائم النص المكتشفة
2
تم تجاهله بواسطة القاعدة
1
مكون
ترجمة واعية بالسياق
مترجمة للمكان الذي توجد فيه كل سلسلة نصية
الترجمة كلمة بكلمة تنكسر في اللحظة التي تعني فيها كلمة شيئين. يقوم localize.dev بترجمة كل سلسلة نصية بما يقوله مشروعك عنها وما تتوقعه اللغة المستهدفة منها.
يقرأ مشروعك
تتم ترجمة السلسلة مع مكان وجودها: الملف، والمكون، والعنصر الذي تستقر فيه، لذا يحصل كل من تسمية الزر والعنوان والم عنصر نائب على المعنى الصحيح. تحتفظ مسردك وملاحظاتك الأسلوبية بمصطلحات المنتج والنبرة كما هي في كل ملف.
- مسار الملف
- مكون
- عنصر وسمة
- مصطلحات المسرد
- أسماء لا تترجم
- النبرة وشكل الخطاب
"Post" → de
تكتب لكل لغة
تحصل صيغ الجمع على كل شكل يحتاجه المكان، حتى مع وجود عدّين في جملة واحدة، يتبع الأول والثاني الأرقام الترتيبية الخاصة بكل لغة، وتنتقل الروابط والنص الغامق إلى حيث تضعها القواعد النحوية، ويتطابق أسلوب الخطاب مع الصوت الذي اخترته لكل سوق.
- قواعد الجمع في CLDR
- الترتيبية
- ترتيب الكلمات
- ضمير المخاطب الرسمي أو غير الرسمي
- صياغة واجهة المستخدم المختصرة
"{count} ملفات" → pl
قم بتعيين مصطلحات المسرد والأسماء المراد الاحتفاظ بها والملاحظات الأسلوبية لكل مشروع في لوحة التحكم. يستخدم كل تشغيل على هذا المستودع هذه الإعدادات.
الترجمة المستمرة
كل دفعة تظل مترجمة
أضف GitHub Action ولن يُطلق أي نص جديد دون ترجمة. يقوم كل تشغيل بتحديث نفس الفرع وطلب السحب، لذلك لا ينتهي بك الأمر أبدًا مع كومة من طلبات السحب أو التعارضات بين التشغيلات.
- التزام مع المكونات وكل ملف لغة
- إعداد مكتبة الترجمة الدولية (i18n) لإطار العمل الخاص بك إذا لم تكن موجودة بعد
- قائمة الجسم R تتضمن كل استبدال وكل نص تم تخطيه
- تم مراجعة الترجمات من Crowdin، Phrase، Lokalise أو Transifex
- العملية النهائية تصل إلى قسم المراجعة في المشروع
- تحقق من طلبات السحب التي تفشل في إضافة النصوص غير المترجمة
التحليل: 12 سلسلة جديدة في 4 لغات
localize-dev/mainmain
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 ترجمة إسبانية جديدة للمراجعة
تم الإرسال إلى مراجع المشروع الإسباني عند انتهاء التشغيل
تأكيد الطلب
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 يكتب لغة وهمية ممتدة ومشدودة. تظهر أزرار مقطوعة، وكذلك النص الثابت. مجاني، بدون نموذج.
راجع المشكوك فيها أولاً
النموذج يحدد الترجمة التي غير متأكد منها، مع السبب. يفتح علامة التبويب المراجعة على تلك؛ وافق على الباقي بنقرة واحدة.
احجز → الحجزإسباني
تحتاج إلى نظرة: حجز أم رواية؟ تم تخمين الحجز من الزر.
تخطيطات من اليمين إلى اليسار، يتم فحصها قبل الإطلاق
مع اللغات العربية أو العبرية، تكون هوامش قوائم التحقق والمحاذاة مثبتة على جانب واحد، ويقوم 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
Free shipping on orders over $50





التكاملات
إطارك، أدواتك
كل إطار عمل يحصل على مكتبة i18n الخاصة به، جاهزة للاستخدام. تصل الترجمات إلى طلب التحديث، أو منصة الترجمة الخاصة بك، أو ملفات اللغة التي لديك بالفعل.
أطر العمل
منصات الترجمة و CI
هل تم التوطين بالفعل؟ localize-dev translate يملأ ملفات اللغة لأي مكدس. ملفات اللغة الحالية
من خط الأمر (الترمينال)
شاهد كل تغيير قبل حدوثه
قم بتشغيله محليًا أولاً. --dry-run يطبع كل استبدال وكل سلسلة تم تخطيها مع السبب، لذلك لن يفاجئك شيء في المراجعة.
localize-dev scanlocalize-dev run --dry-runlocalize-dev run --pseudolocalize-dev checklocalize-dev prlocalize-dev translate$ npx localize-dev run -l es,fr,de
🔍 مسح src/ (اللغات المستهدفة: العربية)
src/checkout/Summary.tsx
ملخص الطلب →
رمز الخصم
أرسل الطلب
تسليم مجاني فوق 50 دولار
✅ تم ترجمة 3 نصًا عبر ملف واحد (3 مفاتيح جديدة، 0 مستخدمة). تم كتابة 5 ملفات.
$
كيف يعمل المحرك
القواعد تقوم بإعادة الكتابة. النموذج يقوم فقط بتسمية المفاتيح والترجمة.
اختلافات بسيطة
يتم إدراج التعديلات في إزاحات AST دقيقة. يظل التنسيق وترتيب الاستيراد كما كانا، لذا يرى المراجعون فقط الأسطر التي تغيرت.
فقرات كاملة
النص، العبارات، الروابط والنص الغليظ يتحدون في رسالة واحدة، لذا يرى المترجمون الجملة الكاملة بدلاً من قطعها.
مرحبا {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.

