ملفات Xcode .stringsdict
الترجمة الآلية لملفات Xcode .stringsdict باستخدام واجهة سطر أوامر Lingo.dev
ما هي ملفات Xcode .stringsdict؟
ملفات Xcode .stringsdict هي تنسيق Apple للتعامل مع قواعد الجمع وتنسيق السلاسل النصية المتغيرة في تطبيقات iOS وmacOS. تستخدم هذه الملفات بنية plist XML لتحديد اختلافات النصوص بناءً على الكمية أو المتغيرات الأخرى.
على سبيل المثال:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>welcome_message</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>Hello %#@user_count@!</string>
<key>user_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>zero</key>
<string>No users</string>
<key>one</key>
<string>1 user</string>
<key>other</key>
<string>%d users</string>
</dict>
</dict>
</dict>
</plist>
ما هي واجهة سطر أوامر Lingo.dev؟
واجهة سطر أوامر Lingo.dev هي أداة مجانية ومفتوحة المصدر لترجمة التطبيقات والمحتوى باستخدام الذكاء الاصطناعي. تم تصميمها لتحل محل برامج إدارة الترجمة التقليدية مع دمجها في خطوط الإنتاج الحالية.
لمعرفة المزيد، راجع نظرة عامة.
حول هذا الدليل
يشرح هذا الدليل كيفية ترجمة ملفات Xcode .stringsdict باستخدام واجهة سطر أوامر Lingo.dev.
ستتعلم كيفية:
- إنشاء مشروع من الصفر
- تكوين خط إنتاج الترجمة
- إنشاء ترجمات باستخدام الذكاء الاصطناعي
المتطلبات الأساسية
لاستخدام واجهة سطر أوامر Lingo.dev، تأكد من تثبيت 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، راجع رموز اللغات المدعومة.
الخطوة 3. تكوين اللغات المستهدفة
تعتبر اللغات المستهدفة هي اللغات والمناطق التي ترغب في ترجمة المحتوى الخاص بك إليها. لتكوين اللغات المستهدفة، قم بتعيين خاصية locale.targets في ملف i18n.json:
{
"$schema": "https://lingo.dev/schema/i18n.json",
"version": "1.10",
"locale": {
"source": "en",
"targets": ["es"]
},
"buckets": {}
}
الخطوة 4. إنشاء المحتوى المصدر
إذا لم تقم بذلك بالفعل، قم بإنشاء ملف أو أكثر من ملفات Xcode .stringsdict التي تحتوي على المحتوى المراد ترجمته. يجب أن تكون هذه الملفات موجودة في مسار يتضمن اللغة المصدر في مكان ما في المسار (مثلاً، كاسم دليل مثل en/ أو كجزء من اسم الملف مثل messages.en.stringsdict).
الخطوة 5. إنشاء حاوية
-
في ملف
i18n.json، أضف كائن"xcode-stringsdict"إلى كائنbuckets:{ "$schema": "https://lingo.dev/schema/i18n.json", "version": "1.10", "locale": { "source": "en", "targets": ["es"] }, "buckets": { "xcode-stringsdict": {} } } -
في كائن
"xcode-stringsdict"، قم بتعريف مصفوفة تحتوي على نمطincludeواحد أو أكثر:{ "$schema": "https://lingo.dev/schema/i18n.json", "version": "1.10", "locale": { "source": "en", "targets": ["es"] }, "buckets": { "xcode-stringsdict": { "include": ["./[locale]/example.stringsdict"] } } }تحدد هذه الأنماط الملفات التي سيتم ترجمتها.
الأنماط نفسها:
- يجب أن تحتوي على
[locale]كعنصر نائب للغة المكونة - يمكن أن تشير إلى مسارات الملفات (مثل
"[locale]/Localizable.stringsdict") - يمكن استخدام علامات النجمة كعناصر نائبة عامة (مثل
"[locale]/*.stringsdict")
أنماط glob المتكررة (مثل
**/*.stringsdict) غير مدعومة. - يجب أن تحتوي على
الخطوة 6. تكوين نموذج لغوي آلي (LLM)
تستخدم واجهة سطر أوامر Lingo.dev نماذج لغوية كبيرة (LLMs) لترجمة المحتوى باستخدام الذكاء الاصطناعي. لاستخدام أحد هذه النماذج، تحتاج إلى مفتاح API من مزود مدعوم.
للبدء بأسرع وقت ممكن، نوصي باستخدام محرك Lingo.dev — منصتنا المستضافة التي توفر 10,000 رمز من الاستخدام المجاني الشهري:
-
قم بتشغيل الأمر التالي:
npx lingo.dev@latest loginسيؤدي هذا إلى فتح متصفحك الافتراضي ويطلب منك المصادقة.
-
اتبع التعليمات.
الخطوة 7. إنشاء الترجمات
في الدليل الذي يحتوي على ملف i18n.json، قم بتشغيل الأمر التالي:
npx lingo.dev@latest run
هذا الأمر:
- يقرأ ملف
i18n.json. - يجد الملفات التي تحتاج إلى ترجمة.
- يستخرج المحتوى القابل للترجمة من الملفات.
- يستخدم نموذج اللغة الآلي (LLM) المُعد لترجمة المحتوى المستخرج.
- يكتب المحتوى المترجم مرة أخرى إلى نظام الملفات.
عند إنشاء الترجمات لأول مرة، يتم إنشاء ملف i18n.lock. يحتفظ هذا الملف بسجل للمحتوى الذي تمت ترجمته، مما يمنع إعادة الترجمة غير الضرورية في عمليات التشغيل اللاحقة.
مثال
en/example.stringsdict
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>welcome_message</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>Hello %#@user_count@!</string>
<key>user_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>zero</key>
<string>No users</string>
<key>one</key>
<string>1 user</string>
<key>other</key>
<string>%d users</string>
</dict>
</dict>
</dict>
</plist>
es/example.stringsdict
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>welcome_message</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>¡Hola %#@user_count@!</string>
<key>user_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>zero</key>
<string>Sin usuarios</string>
<key>one</key>
<string>1 usuario</string>
<key>other</key>
<string>%d usuarios</string>
</dict>
</dict>
</dict>
</plist>
i18n.json
{
"version": "1.10",
"locale": {
"source": "en",
"targets": ["es"]
},
"buckets": {
"xcode-stringsdict": {
"include": ["./[locale]/example.stringsdict"]
}
},
"$schema": "https://lingo.dev/schema/i18n.json"
}
i18n.lock
version: 1
checksums:
a96f640d0f744d993247e36ea1b33052:
welcome_message/NSStringLocalizedFormatKey: f142738692c027d95dce521e7cb29c82
welcome_message/user_count/NSStringFormatSpecTypeKey: 8cc03ef30ad5b2d8e27f3612627d932e
welcome_message/user_count/NSStringFormatValueTypeKey: fe9efa39a6fd9f10358f43f00e0ab82b
welcome_message/user_count/zero: 3d4643c483a49c2f61e17aaa8620e71e
welcome_message/user_count/one: 3b547431ab12f0fba84307e6a81109d8
welcome_message/user_count/other: cb01ae522c991a2ad651b4049339c48a
notification_count/NSStringLocalizedFormatKey: e01fd796051132b678d7574a11e9a944
notification_count/count/NSStringFormatSpecTypeKey: 8cc03ef30ad5b2d8e27f3612627d932e
notification_count/count/NSStringFormatValueTypeKey: fe9efa39a6fd9f10358f43f00e0ab82b
notification_count/count/zero: ac0137deebf6e2b972c6c714dd8658ee
notification_count/count/other: 9b350a78e1c499b9ab69eb330162c8ee