Advanced Installer (AIL)
ترجمة بالذكاء الاصطناعي لملفات توطين Advanced Installer باستخدام Lingo.dev CLI
ما هو Advanced Installer AIL؟
Advanced Installer هو أداة لإنشاء برامج التثبيت لنظام Windows تساعد المطورين على إنشاء حزم MSI (Microsoft Installer). AIL (Advanced Installer Localization) هو تنسيق قاموس متعدد اللغات يعتمد على XML يُستخدم لتوطين مربعات حوار المثبت والأزرار والرسائل والخصائص. يتم تخزين جميع الترجمات للغات متعددة في ملف AIL واحد.
ما هو Lingo.dev CLI؟
Lingo.dev CLI هو واجهة سطر أوامر مجانية ومفتوحة المصدر لترجمة التطبيقات والمحتوى باستخدام الذكاء الاصطناعي. تم تصميمه ليحل محل برامج إدارة الترجمة التقليدية مع التكامل مع خطوط الأنابيب الحالية.
لمعرفة المزيد، راجع نظرة عامة.
حول هذا الدليل
يشرح هذا الدليل كيفية ترجمة ملفات Advanced Installer AIL باستخدام 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. إنشاء المحتوى المصدر
إذا لم تكن قد قمت بذلك بالفعل، قم بإنشاء ملف AIL يحتوي على المحتوى المراد ترجمته. تستخدم ملفات AIL بنية XML حيث يتم تخزين جميع الترجمات اللغوية في ملف واحد.
بنية الملف:
<?xml version="1.0" encoding="UTF-8"?>
<DICTIONARY type="multilanguage">
<ENTRY id="Control.Text.WelcomeDlg#Title">
<STRING lang="en" value="Welcome to the Setup Wizard"/>
</ENTRY>
<ENTRY id="Control.Button.Next">
<STRING lang="en" value="Next"/>
</ENTRY>
</DICTIONARY>
المحتوى القابل للترجمة:
- يمثل كل عنصر
ENTRYنصاً قابلاً للترجمة بسمةidفريدة - تحتوي عناصر
STRINGداخل كلENTRYعلى ترجمات للغات محددة - تحدد سمة
langرمز اللغة - تحتوي سمة
valueعلى النص القابل للترجمة
اصطلاحات معرّف الإدخال:
تستخدم ملفات AIL معرّفات منظمة لتنظيم محتوى المثبّت:
- نص عنصر التحكم:
Control.Text.DialogName#ElementName - أزرار عنصر التحكم:
Control.Button.ButtonName - الخصائص:
Property.PropertyName
على سبيل المثال:
Control.Text.WelcomeDlg#Title- نص العنوان لمربع حوار الترحيبControl.Button.Next- نص زر التاليProperty.ProductName- خاصية اسم المنتج
متغيرات Advanced Installer:
تدعم ملفات AIL متغيرات Advanced Installer التي يتم استبدالها في وقت التشغيل:
[ProductName]- يتم استبداله باسم المنتج[ProductVersion]- يتم استبداله بإصدار المنتج[Manufacturer]- يتم استبداله باسم الشركة المصنعة
يتم الحفاظ على هذه المتغيرات أثناء الترجمة:
<ENTRY id="Control.Text.WelcomeDlg#Title">
<STRING lang="en" value="Welcome to [ProductName] Setup"/>
</ENTRY>
وضع الإخراج:
يقوم bucket AIL بتعديل الملف الأصلي بدلاً من إنشاء ملفات منفصلة لكل لغة. عند تشغيل الترجمات، يضيف CLI أو يحدّث عناصر STRING للغات المستهدفة داخل ملف AIL الموجود. وذلك لأن ملفات AIL مصممة لتخزين جميع الترجمات اللغوية في ملف واحد.
الخطوة 5. إنشاء حاوية
-
في ملف
i18n.json، أضف كائن"ail"إلى كائنbuckets:{ "$schema": "https://lingo.dev/schema/i18n.json", "version": "1.10", "locale": { "source": "en", "targets": ["es"] }, "buckets": { "ail": {} } } -
في كائن
"ail"، حدد مصفوفة من نمطincludeواحد أو أكثر:{ "$schema": "https://lingo.dev/schema/i18n.json", "version": "1.10", "locale": { "source": "en", "targets": ["es"] }, "buckets": { "ail": { "include": ["./*.ail"] } } }تحدد هذه الأنماط الملفات المراد ترجمتها.
الأنماط نفسها:
- يمكن أن تشير إلى مسارات الملفات (مثل
"./installer.ail") - يمكن أن تستخدم النجوم كعناصر نائبة بديلة (مثل
"./*.ail") - لا تستخدم العنصر النائب
[locale](نظرًا لأن جميع اللغات موجودة في نفس الملف)
أنماط glob العودية (مثل
**/*.ail) غير مدعومة. - يمكن أن تشير إلى مسارات الملفات (مثل
الخطوة 6. تكوين نموذج لغوي كبير
يستخدم Lingo.dev CLI نماذج لغوية كبيرة (LLMs) لترجمة المحتوى باستخدام الذكاء الاصطناعي. لاستخدام أحد هذه النماذج، تحتاج إلى مفتاح API من مزود مدعوم.
للبدء بأسرع ما يمكن، نوصي باستخدام Lingo.dev Engine:
-
قم بتشغيل الأمر التالي:
npx lingo.dev@latest loginسيؤدي هذا إلى فتح متصفحك الافتراضي ويطلب منك المصادقة.
-
اتبع التعليمات.
الخطوة 7. إنشاء الترجمات
في الدليل الذي يحتوي على ملف i18n.json، قم بتشغيل الأمر التالي:
npx lingo.dev@latest run
يقوم هذا الأمر بـ:
- قراءة ملف
i18n.json. - العثور على الملفات التي تحتاج إلى ترجمة.
- استخراج المحتوى القابل للترجمة من الملفات.
- استخدام نموذج اللغة الكبير المكوّن لترجمة المحتوى المستخرج.
- كتابة المحتوى المترجم مرة أخرى إلى نظام الملفات.
في المرة الأولى التي يتم فيها إنشاء الترجمات، يتم إنشاء ملف i18n.lock. يتتبع هذا الملف المحتوى الذي تمت ترجمته، مما يمنع إعادة الترجمة غير الضرورية في عمليات التشغيل اللاحقة.
مثال
قبل الترجمة (example.ail)
<?xml version="1.0" encoding="UTF-8"?>
<DICTIONARY type="multilanguage">
<ENTRY id="Control.Text.WelcomeDlg#Title">
<STRING lang="en" value="Welcome to the [ProductName] Setup Wizard"/>
</ENTRY>
<ENTRY id="Control.Text.WelcomeDlg#Description">
<STRING lang="en" value="The Setup Wizard will install [ProductName] on your computer. Click Next to continue or Cancel to exit the Setup Wizard."/>
</ENTRY>
<ENTRY id="Control.Text.LicenseAgreementDlg#Title">
<STRING lang="en" value="End-User License Agreement"/>
</ENTRY>
<ENTRY id="Control.Text.LicenseAgreementDlg#AcceptCheckbox">
<STRING lang="en" value="I accept the terms in the License Agreement"/>
</ENTRY>
<ENTRY id="Control.Button.Next">
<STRING lang="en" value="Next"/>
</ENTRY>
<ENTRY id="Control.Button.Cancel">
<STRING lang="en" value="Cancel"/>
</ENTRY>
<ENTRY id="Property.ProductName">
<STRING lang="en" value="My Application"/>
</ENTRY>
</DICTIONARY>
بعد الترجمة (example.ail)
<?xml version="1.0" encoding="UTF-8"?>
<DICTIONARY type="multilanguage">
<ENTRY id="Control.Text.WelcomeDlg#Title">
<STRING lang="en" value="Welcome to the [ProductName] Setup Wizard"/>
<STRING lang="es" value="Bienvenido al asistente de instalación de [ProductName]"/>
</ENTRY>
<ENTRY id="Control.Text.WelcomeDlg#Description">
<STRING lang="en" value="The Setup Wizard will install [ProductName] on your computer. Click Next to continue or Cancel to exit the Setup Wizard."/>
<STRING lang="es" value="El asistente de instalación instalará [ProductName] en su ordenador. Haga clic en Siguiente para continuar o en Cancelar para salir del asistente de instalación."/>
</ENTRY>
<ENTRY id="Control.Text.LicenseAgreementDlg#Title">
<STRING lang="en" value="End-User License Agreement"/>
<STRING lang="es" value="Acuerdo de licencia para el usuario final"/>
</ENTRY>
<ENTRY id="Control.Text.LicenseAgreementDlg#AcceptCheckbox">
<STRING lang="en" value="I accept the terms in the License Agreement"/>
<STRING lang="es" value="Acepto los términos del acuerdo de licencia"/>
</ENTRY>
<ENTRY id="Control.Button.Next">
<STRING lang="en" value="Next"/>
<STRING lang="es" value="Siguiente"/>
</ENTRY>
<ENTRY id="Control.Button.Cancel">
<STRING lang="en" value="Cancel"/>
<STRING lang="es" value="Cancelar"/>
</ENTRY>
<ENTRY id="Property.ProductName">
<STRING lang="en" value="My Application"/>
<STRING lang="es" value="My Application"/>
</ENTRY>
</DICTIONARY>
i18n.json
{
"$schema": "https://lingo.dev/schema/i18n.json",
"version": "1.10",
"locale": {
"source": "en",
"targets": ["es"]
},
"buckets": {
"ail": {
"include": ["./*.ail"]
}
}
}
i18n.lock
version: 1
checksums:
f84d41a1c3ad7e70e25c84811ef9baef:
Control.Text.WelcomeDlg%23Title: 93af4b47a8c0a84ce9fb82d2ee2bca13
Control.Text.WelcomeDlg%23Description: 9cbc6500217ae2a7b3ffd74a3c723493
Control.Text.LicenseAgreementDlg%23Title: 3fe6d3757d7129ede78b41dd06042bf2
Control.Text.LicenseAgreementDlg%23AcceptCheckbox: 768d9d11db014facbc1b65af8e39e260
Control.Button.Next: 4c49d903308e8e3f5c866cfd78ef0e89
Control.Button.Cancel: a149e8d5b349f68b3cfc9fbe6b23cbb4
Property.ProductName: c215a8d46c95f00089c5ea0d17eef742