التدويل (i18n) في Swift لنظامي iOS وmacOS

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

التدويل (i18n) في Swift: دليل كامل لنظامي iOS وmacOS



التدويل (اختصاراً i18n) هو عملية تصميم التطبيق بحيث يمكن تكييفه مع لغات ومناطق مختلفة دون تغيير الكود المصدري. لمطوري منصات Apple (iOS، macOS، watchOS، tvOS) يقدم Swift مجموعة أدوات قوية وأنيقة في نفس الوقت. في هذه المقالة، سنشرح بالتفصيل كيفية إعداد i18n في مشروع Swift الخاص بك باستخدام الآليات المدمجة من Apple.



لماذا يعتبر i18n أمراً بالغ الأهمية؟

حتى لو كان تطبيقك مبنياً في البداية بلغة واحدة، يجب أن يتم تضمين التدويل في مرحلة الهندسة المعمارية. هذا يسمح بـ:

  • توسيع الجمهور: يفضل المستخدمون من مختلف البلدان التطبيقات بلغتهم الأم.
  • تبسيط الترجمة: التدويل الصحيح يحول إضافة لغة جديدة إلى عملية بسيطة مع الملفات.
  • تجنب الترميز الثابت: يتم نقل جميع السلاسل النصية إلى موارد منفصلة، مما يحسن قابلية القراءة وصيانة الكود.


الأداة الأساسية: NSLocalizedString

قلب التدويل في Swift هو الماكرو NSLocalizedString. يبحث عن سلسلة نصية في ملفات الترجمة (.strings) ويعيد النسخة المترجمة. إذا لم يتم العثور على الترجمة، يتم استخدام المفتاح (عادةً السلسلة الإنجليزية).



// مثال على الاستخدام في Swiftlet welcomeMessage = NSLocalizedString("welcome_message", comment: "تحية على الشاشة الرئيسية")label.text = welcomeMessage


يوصى دائماً بتحديد comment - فهو يساعد المترجمين على فهم السياق.



هيكل ملفات الترجمة

في Xcode، تتم إضافة اللغات من خلال Project Settings > Info > Localizations. بعد ذلك، يتم إنشاء مجلدات xx.lproj (مثل en.lproj، ar.lproj). داخلها يتم تخزين:

  • Localizable.strings - الملف الرئيسي بأزواج "مفتاح" = "قيمة"؛
  • InfoPlist.strings - لترجمة اسم التطبيق والسلاسل النظامية؛
  • Storyboard.strings - ملف يتم إنشاؤه تلقائياً للواجهات التي تم إنشاؤها في القصص المصورة.


تنسيق Localizable.strings

الملف له بناء جملة بسيط:

// English (en.lproj/Localizable.strings)"welcome_message" = "Welcome to our app!";"login_button" = "Log In";

// العربية (ar.lproj/Localizable.strings)"welcome_message" = "مرحباً بك في تطبيقنا!";"login_button" = "تسجيل الدخول";


هام: تنتهي السلاسل بفاصلة منقوطة. يجب أن يكون ترميز الملف UTF-8 أو UTF-16.



تنسيق السلاسل مع المعاملات

غالباً ما يكون من الضروري إدراج بيانات ديناميكية في السلسلة النصية (اسم المستخدم، عدد العناصر). لهذا، يتم استخدام String(format:):



// في Localizable.strings:"items_count" = "لديك %d عناصر.";"user_greeting" = "مرحباً، %@!";

// في كود Swift:let count = 5let itemsText = String(format: NSLocalizedString("items_count", comment: "عدد العناصر"), count)

let userName = "أحمد"let greeting = String(format: NSLocalizedString("user_greeting", comment: "تحية المستخدم"), userName)


لدعم صيغ الجمع (تفاحة واحدة، تفاحتان، 5 تفاحات) استخدم StringDict (ملفات .stringsdict).



العمل مع XLIFF للمترجمين

تدعم Apple تنسيق XLIFF (XML Localisation Interchange File). هذا هو المعيار الصناعي لتبادل الترجمات. في Xcode، يمكنك تصدير جميع السلاسل النصية إلى ملف XLIFF، وإعطائه للمترجم، ثم استيراده مرة أخرى.



// الأمر في الطرفية للتصدير:xcodebuild -exportLocalizations -localizationPath ./translations -project YourProject.xcodeproj

// استيراد الترجمات الجاهزة:

توصيات