موارد Android XML
ترجمة بالذكاء الاصطناعي لملفات موارد Android XML باستخدام Lingo.dev CLI
ما هي موارد Android XML؟
يستخدم Android ملفات موارد قائمة على XML لتخزين موارد النصوص للترجمة. عادةً ما يتم تخزين هذه الملفات في أدلة res/values/ مع أدلة فرعية خاصة باللغة (على سبيل المثال، res/values-es/ للإسبانية).
على سبيل المثال:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">MyApp</string>
<string name="welcome_message">Hello, world!</string>
<string-array name="color_names">
<item>Red</item>
<item>Green</item>
</string-array>
<plurals name="notification_count">
<item quantity="one">%d new message</item>
<item quantity="other">%d new messages</item>
</plurals>
</resources>
ملاحظة: النصوص المحددة بـ translatable="false" مستبعدة من الترجمة وستظهر فقط في ملفات اللغة المصدر.
ما هو Lingo.dev CLI؟
Lingo.dev CLI هو واجهة سطر أوامر مجانية ومفتوحة المصدر لترجمة التطبيقات والمحتوى باستخدام الذكاء الاصطناعي. تم تصميمه ليحل محل برامج إدارة الترجمة التقليدية مع التكامل مع خطوط الأنابيب الحالية.
لمعرفة المزيد، راجع نظرة عامة.
حول هذا الدليل
يشرح هذا الدليل كيفية ترجمة ملفات موارد Android XML باستخدام Lingo.dev CLI.
ستتعلم كيفية:
- إنشاء مشروع من الصفر
- تكوين خط أنابيب الترجمة
- إنشاء ترجمات باستخدام الذكاء الاصطناعي
المتطلبات الأساسية
لاستخدام Lingo.dev CLI، تأكد من تثبيت Node.js الإصدار 18 أو أحدث:
❯ node -v
v22.17.0
الخطوة 1. إعداد المشروع
في دليل مشروعك، أنشئ ملف i18n.json:
{
"$schema": "https://lingo.dev/schema/i18n.json",
"version": "1.10",
"locale": {
"source": "en",
"targets": ["es"]
},
"buckets": {}
}
يحدد هذا الملف سلوك خط أنابيب الترجمة، بما في ذلك اللغات المراد الترجمة بينها ومكان وجود المحتوى القابل للترجمة في نظام الملفات.
لمعرفة المزيد حول الخصائص المتاحة، راجع i18n.json.
الخطوة 2. تكوين اللغة المصدر
اللغة المصدر هي اللغة والمنطقة الأصلية التي تمت كتابة المحتوى بها. لتكوين اللغة المصدر، قم بتعيين خاصية locale.source في ملف i18n.json:
{
"$schema": "https://lingo.dev/schema/i18n.json",
"version": "1.10",
"locale": {
"source": "en",
"targets": ["es"]
},
"buckets": {}
}
يجب توفير اللغة المصدر كـ علامة لغة BCP 47.
للحصول على القائمة الكاملة لرموز اللغات التي يدعمها Lingo.dev CLI، راجع رموز اللغات المدعومة.
الخطوة 3. تكوين اللغات المستهدفة
اللغات المستهدفة هي اللغات والمناطق التي تريد ترجمة محتواك إليها. لتكوين اللغات المستهدفة، قم بتعيين خاصية locale.targets في ملف i18n.json:
{
"$schema": "https://lingo.dev/schema/i18n.json",
"version": "1.10",
"locale": {
"source": "en",
"targets": ["es"]
},
"buckets": {}
}
الخطوة 4. إنشاء المحتوى المصدر
إذا لم تكن قد قمت بذلك بالفعل، قم بإنشاء ملف أو أكثر من ملفات موارد Android XML التي تحتوي على المحتوى المراد ترجمته.
في حالة ملفات موارد Android XML، تنطبق المتطلبات التالية:
- يجب أن تكون الملفات XML صالحة مع عنصر جذر
<resources>. - يتم تعريف موارد النصوص باستخدام علامات
<string name="key">value</string>. - تستخدم مصفوفات النصوص بنية
<string-array name="key"><item>value</item></string-array>. - تستخدم صيغ الجمع بنية
<plurals name="key"><item quantity="one|other">value</item></plurals>. - العناصر المحددة بـ
translatable="false"لن تتم ترجمتها. - يدعم أنواع الموارد المنطقية (
<bool>) والصحيحة (<integer>). - يتم الحفاظ على أقسام CDATA وكيانات HTML.
الخطوة 5. إنشاء حاوية
-
في ملف
i18n.json، أضف كائن"android"إلى كائنbuckets:{ "$schema": "https://lingo.dev/schema/i18n.json", "version": "1.10", "locale": { "source": "en", "targets": ["es"] }, "buckets": { "android": {} } } -
في كائن
"android"، قم بتعريف مصفوفة من نمط أو أكثر من أنماطinclude:{ "$schema": "https://lingo.dev/schema/i18n.json", "version": "1.10", "locale": { "source": "en", "targets": ["es"] }, "buckets": { "android": { "include": ["./[locale]/example.xml"] } } }تحدد هذه الأنماط الملفات المراد ترجمتها.
الأنماط نفسها:
- يجب أن تحتوي على
[locale]كعنصر نائب للغة المكونة - يمكن أن تشير إلى مسارات الملفات (مثل
"[locale]/strings.xml") - يمكن استخدام النجوم كعناصر نائبة عامة (مثل
"[locale]/*.xml")
أنماط glob التكرارية (مثل
**/*.xml) غير مدعومة. - يجب أن تحتوي على
الخطوة 6. تكوين نموذج لغوي كبير
يستخدم Lingo.dev CLI نماذج لغوية كبيرة (LLMs) لترجمة المحتوى بالذكاء الاصطناعي. لاستخدام أحد هذه النماذج، تحتاج إلى مفتاح API من مزود مدعوم.
للبدء والتشغيل بأسرع وقت ممكن، نوصي باستخدام محرك Lingo.dev — منصتنا المستضافة الخاصة التي توفر 10,000 رمز مميز من الاستخدام المجاني الشهري:
-
قم بتشغيل الأمر التالي:
npx lingo.dev@latest loginسيؤدي هذا إلى فتح متصفحك الافتراضي ومطالبتك بالمصادقة.
-
اتبع التعليمات.
الخطوة 7. إنشاء الترجمات
في الدليل الذي يحتوي على ملف i18n.json، قم بتشغيل الأمر التالي:
npx lingo.dev@latest run
يقوم هذا الأمر بـ:
- قراءة ملف
i18n.json. - العثور على الملفات التي تحتاج إلى ترجمة.
- استخراج المحتوى القابل للترجمة من الملفات.
- استخدام نموذج اللغة الكبير المُكوَّن لترجمة المحتوى المستخرج.
- كتابة المحتوى المترجم مرة أخرى إلى نظام الملفات.
في المرة الأولى التي يتم فيها إنشاء الترجمات، يتم إنشاء ملف i18n.lock. يتتبع هذا الملف المحتوى الذي تمت ترجمته، مما يمنع إعادة الترجمة غير الضرورية في عمليات التشغيل اللاحقة.
مثال
en/example.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">MyApp</string>
<string name="welcome_message">Hello, world!</string>
<string name="button_text">Get Started</string>
<string name="api_endpoint" translatable="false">https://api.example.com</string>
<string-array name="color_names">
<item>Red</item>
<item>Green</item>
<item>Blue</item>
</string-array>
<plurals name="notification_count">
<item quantity="one">%d new message</item>
<item quantity="other">%d new messages</item>
</plurals>
</resources>
es/example.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">MyApp</string>
<string name="welcome_message">¡Hola, mundo!</string>
<string name="button_text">Comenzar</string>
<string name="api_endpoint" translatable="false">https://api.example.com</string>
<string-array name="color_names">
<item>Rojo</item>
<item>Verde</item>
<item>Azul</item>
</string-array>
<plurals name="notification_count">
<item quantity="one">%d mensaje nuevo</item>
<item quantity="other">%d mensajes nuevos</item>
</plurals>
</resources>
i18n.json
{
"$schema": "https://lingo.dev/schema/i18n.json",
"version": "1.10",
"locale": {
"source": "en",
"targets": ["es"]
},
"buckets": {
"android": {
"include": ["./[locale]/example.xml"]
}
}
}
i18n.lock
version: 1
checksums:
ec06a6ebae97ffd5f7afc99d9a8f051b:
app_name: 7dc70110429d46e3685f385bd2cc941c
welcome_message: 0468579ef2fbc83c9d520c2f2f1c5059
button_text: 1d5f030c4ec9c869e647ae060518b948
html_snippet: f060191b1af70b3848106a4df91f43cd
apostrophe_example: 997099339b144b06266f8da411de8d93
cdata_example: ba876d1379f854628eaebf67ea330ccc
color_names/0: bace0083b78cdb188523bc4abc7b55c6
color_names/1: 482ff383a4258357ba404f283682471d
color_names/2: a5cf034b2d370a976119335cd99f4217
mixed_items/0: 9278f79dfb062c6c04f6395108907816
mixed_items/1: 9823a57cbe6e6e84c1d025ce24a1eec4
notification_count/one: fe0aceb70f334c52a87937c36898a1d0
notification_count/other: 13acfd95b16962ebe1f67dcd343513e1