Localization (التوطين، l10n) — تكييف محتوى التطبيق المحمول مع اللغة والمنطقة والخصائص الثقافية للجمهور المستهدف. على عكس التدويل (i18n)، حيث يتم إعداد الكود للترجمة، فإن التوطين هو العملية الفعلية لترجمة النصوص وتنسيق التواريخ والأرقام والعملات واختيار الصور ومراعاة المعايير المحلية. في iOS، تُخزَّن الترجمات في Localizable.strings (مجلدات .lproj لكل لغة)، وفي Android — في values-ru وvalues-de وأدلة الموارد الأخرى. اعرف المزيد في دليل توطين Android.
النقاط الرئيسية
التوطين (اختصاراً l10n — 10 أحرف بين «l» و «n») هو عملية تكييف التطبيق مع لغة ومنطقة محددتين. إذا كان i18n هو الأساس المعماري، فإن l10n هو المحتوى. i18n يجعل الترجمة ممكنة، وl10n ينفذها. يشمل التوطين: ترجمة جميع نصوص الواجهة، تكييف تنسيقات التواريخ والأرقام، استبدال الصور الحساسة ثقافياً، تعديل النصوص القانونية (سياسة الخصوصية، EULA)، تكييف أنظمة الدفع حسب المنطقة، والاختبار على الأجهزة المستهدفة.
العائد على الاستثمار — يؤثر التوطين مباشرة على معدل التحويل. وفقاً لـ CSA Research (2023)، يفضل 76% من المستخدمين الشراء في التطبيقات بلغتهم الأم، و40% لا يشترون أبداً بلغة أجنبية. يزيد التوطين إلى اليابانية لتطبيق تجزئة التحويل بمتوسط 150% (Google, 2022). تحصل التطبيقات المترجمة على ضعف إلى ثلاثة أضعاف التنزيلات العضوية في App Store وGoogle Play الإقليميين بفضل ASO الإقليمي (الكلمات المفتاحية باللغة المستهدفة).
i18n مقابل l10n — وجهان لعملة واحدة. i18n: استخراج النصوص إلى موارد، دعم RTL، تنسيق الأرقام. يُنفذ مرة واحدة من قبل المطورين. l10n: ترجمة النصوص، تكييف المحتوى، الاختبار المحلي. يُنفذ مراراً من قبل المترجمين وQA لكل لغة. في IT Sectr، نخصص 20–30% من وقت السباق للتوطين لكل لغة جديدة — ويشمل ذلك الترجمة والمراجعة والاختبار على الأجهزة وإصلاح الأخطاء.
Localizable.strings — الملف الرئيسي لتخزين الترجمات في iOS. كل لغة لها مجلد .lproj الخاص بها: en.lproj/Localizable.strings، ru.lproj/Localizable.strings، de.lproj/Localizable.strings. التنسيق: «مفتاح» = «قيمة»; (مع فاصلة منقوطة). تستخدم Apple Base Internationalization: يتم إنشاء Storyboard وXIB مرة واحدة (Base.lproj)، ويتم تصدير نصوص الواجهة إلى Localizable.strings لكل لغة. هذا يلغي الحاجة إلى إنشاء نسخ من XIB لكل لغة.
// en.lproj/Localizable.strings
// "settings.title" = "الإعدادات";
// "profile.greeting" = "مرحباً، %@!";
// "items.count" = "%d عنصر(عناصر)";
// ru.lproj/Localizable.strings
// "settings.title" = "الإعدادات";
// "profile.greeting" = "مرحباً، %@!";
// "items.count" = "%d عنصر(عناصر)";
// تحميل النص بالمفتاح
navigationItem.title = NSLocalizedString(
"settings.title",
comment: "عنوان شاشة الإعدادات"
)
// نص مع معامل
let name = "آنا"
greetingLabel.text = String.localizedStringWithFormat(
NSLocalizedString("profile.greeting", comment: ""), name
)
// استيراد XLIFF (Xcode → Editor → Import Localizations)
// يحدّث تلقائياً ملفات .lproj بعد عمل المترجم
Base Internationalization — نهج Apple حيث يتم إنشاء الواجهة (Storyboard، XIB) مرة واحدة في Base.lproj. عند إضافة لغة، يقوم Xcode بتصدير النصوص من Base إلى ملف XLIFF. يترجم المترجم ملف XLIFF. بعد الاستيراد، ينشئ Xcode .lproj مع النصوص المترجمة. الميزة: لا حاجة لتكرار XIB لكل لغة. القيد: للغات RTL (العربية، العبرية)، قد يكون من الضروري وجود XIB منفصل بتخطيط معكوس.
InfoPlist.strings — ملف لتوطين اسم التطبيق (CFBundleDisplayName)، أذونات الكاميرا/الميكروفون (NSCameraUsageDescription) وقيم أخرى من Info.plist. يُنشأ في .lproj: ru.lproj/InfoPlist.strings. التنسيق: CFBundleDisplayName = «تطبيقي»; NSCameraUsageDescription = «يحتاج التطبيق إلى الوصول إلى الكاميرا لالتقاط الصور»;. بدون توطين InfoPlist.strings، ستكون حوارات النظام باللغة الإنجليزية.
موارد Android للترجمة منظمة من خلال المؤهلات في أسماء الدلائل. للروسية — res/values-ru/، للألمانية — res/values-de/، للبرتغالية البرازيلية — res/values-pt-rBR/. يدعم Android أكثر من 160 لغة. يختار النظام تلقائياً الموارد بناءً على لغة الجهاز (Locale.getDefault()). إذا لم يتم العثور على لغة محددة، يتم استخدام موارد values/ (اللغة الأساسية، عادة الإنجليزية).
// res/values/strings.xml (أساسي — إنجليزي)
<string name="settings_title">Settings</string>
<string name="greeting">Hello, %s!</string>
// res/values-ru/strings.xml (روسي)
<string name="settings_title">الإعدادات</string>
<string name="greeting">مرحباً، %s!</string>
// res/values-de/strings.xml (ألماني)
<string name="settings_title">Einstellungen</string>
<string name="greeting">Hallo, %s!</string>
// Kotlin — كود موحد لجميع اللغات
textView.text = getString(R.string.settings_title)
// نص مع معامل
val greeting = getString(R.string.greeting, userName)
// صور مترجمة
// res/drawable-ru/flag.png — علم للنسخة الروسية
// res/drawable/flag.png — العلم الافتراضي
// توطين التخطيطات (للغات RTL)
// res/layout-ar/activity_main.xml — نسخة عربية
التوطين أبعد من النصوص — يتيح Android توطين الصور (res/drawable-ru/)، الألوان (res/values-ru/colors.xml)، الأبعاد (res/values-ru/dimens.xml)، الرسوم المتحركة، القوائم، وحتى التخطيطات الكاملة. للغات ذات أطوال كلمات مختلفة (الألمانية أطول بنسبة 30–40% من الإنجليزية)، استخدم dimens.xml المترجمة مع عرض أزرار متزايد. للمناطق ذات الرمزية اللونية المختلفة (الأبيض حداد في الصين)، استخدم colors.xml المترجمة.
الاختبار — قم بتبديل لغة الجهاز إلى اللغة المستهدفة عبر الإعدادات → النظام → اللغة. تحقق من: ترجمة جميع النصوص، تنسيق التواريخ بشكل صحيح، عرض الأرقام مع الفاصل المناسب، مطابقة الصور للمنطقة، عدم انهيار التخطيط مع النصوص الطويلة. للأتمتة، استخدم Espresso مع LocaleTestRule (Android Testing Library) — يتيح تشغيل الاختبارات بلغات مختلفة دون تغيير اللغة يدوياً.
الخصائص الثقافية — لا يقتصر التوطين على ترجمة النصوص. تختلف الرمزية اللونية: الأحمر حظ في الصين، خطر في الولايات المتحدة، حداد في جنوب إفريقيا. الأبيض نقاء في أوروبا، حداد في الصين. أيقونات الإيماءات: الإبهام لأعلى إيجابي في الولايات المتحدة، إهانة في الشرق الأوسط. صور الأشخاص: في الدول العربية، صور النساء بملابس السباحة غير مقبولة. الرموز الدينية: الصليب والهلال ونجمة داود يجب استخدامها فقط في السياق المناسب.
المتطلبات القانونية — لكل دولة قوانينها الخاصة بالمنتجات الرقمية. GDPR (الاتحاد الأوروبي) — موافقة إلزامية على ملفات تعريف الارتباط ومعالجة البيانات. CCPA (كاليفورنيا) — الحق في حذف البيانات. قانون البيانات الشخصية (روسيا، 152-FZ) — تخزين البيانات على خوادم روسية. LGPD (البرازيل) — مكافئ GDPR. المدفوعات: في الصين، يلزم Alipay/WeChat Pay، في الهند — UPI، في البرازيل — Boleto وPIX. قم بتكوين بوابة الدفع حسب المنطقة قبل إطلاق التوطين.
| الجانب | الولايات المتحدة | الصين | الإمارات | ألمانيا |
|---|---|---|---|---|
| نظام الدفع | Apple Pay، بطاقات | Alipay، WeChat Pay | بطاقات، Apple Pay | PayPal، Giropay |
| ألوان العلامة التجارية | أي | أحمر — حظ | أخضر — الإسلام | أسود/أصفر |
| الشبكات الاجتماعية | Instagram، X | WeChat، Douyin | WhatsApp، X | WhatsApp، X |
| التاريخ | MM/dd/yyyy | yyyy/MM/dd | dd/MM/yyyy | dd.MM.yyyy |
| قانون البيانات | CCPA | PIPL | PDPL | GDPR |
الأمثلة والمحتوى — كيّف الأمثلة حسب المنطقة. للترجمة الألمانية، استخدم النظام المتري (كغم، كم)، للأمريكية — الإمبراطوري (رطل، ميل). أرقام الهواتف والرموز البريدية والعناوين — كلها تُنسق بشكل مختلف. أمثلة العملات: ¥1000 في اليابان، $9.99 في الولايات المتحدة، 999 ₽ في روسيا. يجب أن تتوافق صور الطعام والملابس والديكورات الداخلية مع المعايير الإقليمية. في IT Sectr، نوصي بتعيين مستشارين محليين للتحقق من التكييف الثقافي.
أدوات التوطين — منصات احترافية تؤتمت العملية: Lokalise، Crowdin، POEditor، Smartling، Phrase. تتكامل مع المستودع، وتستورد تلقائياً النصوص الجديدة، وتتتبع التغييرات (التحديثات التفاضلية — تُترجم فقط النصوص المتغيرة)، وتوفر ذاكرة الترجمة (TM — تخزين العبارات المترجمة سابقاً) والمسرد. متوسط تكلفة الترجمة الاحترافية: 0.08–0.15 دولار لكل كلمة (حسب اللغة).
العملية — (1) يضيف المطور مفاتيح i18n إلى الكود، ويدفع إلى المستودع. (2) CI/CD (GitHub Actions / GitLab CI) يرسل تلقائياً المفاتيح الجديدة إلى منصة التوطين. (3) يتلقى المترجمون إشعاراً، يترجمون ويحفظون. (4) تنشئ الملفات المترجمة تلقائياً PR في المستودع. (5) يتحقق QA من التوطين على الأجهزة. (6) الإصدار. دورة للغة واحدة: 2–5 أيام عمل (حسب الحجم). لـ 10 لغات: 5–15 يوماً مع العمل المتوازي للمترجمين.
الترجمة الآلية + المراجعة البشرية — المعيار الحديث. توفر الترجمة بالشبكات العصبية (DeepL، Google Translate، GPT-4) جودة 80–90% لأزواج اللغات الشائعة. يتحقق المترجم البشري من: المصطلحات، السياق (الكلمات قد يكون لها معانٍ مختلفة في شاشات مختلفة)، التكييف الثقافي. في IT Sectr، نستخدم نهجاً هجيناً: ترجمة آلية + مراجعة بواسطة متحدث أصلي. للنصوص الحرجة (القانونية، المدفوعات) — ترجمة احترافية فقط. التوفير: حتى 60% من التكلفة مع الحفاظ على الجودة.
الأسئلة الشائعة
التدويل — إعداد الكود للترجمة (استخراج النصوص، RTL، التنسيق). التوطين — الترجمة الفعلية والتكييف الثقافي. i18n يقوم به المطور مرة واحدة، l10n — المترجمون لكل لغة. i18n بدون l10n — التطبيق جاهز للترجمة ولكن غير مترجم. l10n بدون i18n — يجب إعادة كتابة الكود لكل لغة.
في ملفات Localizable.strings داخل مجلدات .lproj. لكل لغة: en.lproj (الإنجليزية)، ru.lproj (الروسية)، de.lproj (الألمانية). التنسيق: «مفتاح» = «قيمة»;. للجموع — Localizable.stringsdict. إعدادات التطبيق (CFBundleDisplayName) — في InfoPlist.strings. يدير Xcode مجلدات .lproj عبر Base Internationalization.
values-ru — دليل موارد Android للغة الروسية. يحتوي على strings.xml مع الترجمات. وبالمثل للغات الأخرى: values-de (الألمانية)، values-fr (الفرنسية). يختار Android الموارد بناءً على لغة النظام. إذا لم يتم العثور على values-ru، يستخدم values/ (اللغة الأساسية، عادة الإنجليزية).
استخدم دائماً Locale API. iOS: DateFormatter.locale = Locale(identifier: locale). Android: DateFormat.getDateInstance(DateFormat.SHORT, locale). روسيا: 31.12.2024. الولايات المتحدة: 12/31/2024. اليابان: 2024/12/31. لا تحدّد تنسيقاً ثابتاً أبداً — لكل دولة معاييرها الخاصة. لإدخال التواريخ، استخدم UIDatePicker / DatePicker.
للوصول العالمي، 10–15 لغة كافية: الإنجليزية، الإسبانية، الفرنسية، الألمانية، اليابانية، الصينية، الكورية، البرتغالية، الروسية، الإيطالية، العربية. للإقليمي — 1–2 لغات. كل لغة إضافية تزيد التنزيلات العضوية بنسبة 5–15% في المنطقة المقابلة. يتطلب App Store توطيناً إنجليزياً على الأقل.
الخلاصة
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.