0Pricing
Swift Academy · درس

كتالوجات السلاسل النصية والسلاسل المترجمة

ترجم النصوص باستخدام String Catalog الحديثة.

كتالوجات السلاسل النصية والسلاسل المترجمة درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 4 دروس في المجموع.

لماذا نُوطّن التطبيق أصلًا

يعني التوطين (l10n) تقديم نص التطبيق بلغة المستخدم، بينما يعني التدويل (i18n) تنظيم التعليمات البرمجية بحيث يصبح التوطين ممكنًا. والخطوة الأولى هي التوقف عن ترميز السلاسل النصية التي يراها المستخدم مباشرةً، وسحبها بدلًا من ذلك من كتالوج موارد.

// Hardcoded — bad for localization
// let title = "Welcome"

// Localized — looked up by key
let title = String(localized: "Welcome")

كتالوجات السلاسل النصية

تستخدم مشاريع Xcode الحديثة String Catalog (ملف .xcstrings). وهو ملف واحد مدعوم ببنية JSON، يسرد كل مفتاح قابل للتوطين وترجماته لكل لغة وبياناته الوصفية، مثل التعليقات والتعددية. ويمكن لـ Xcode استخراج المفاتيح من تعليماتكم البرمجية تلقائيًا.

// Localizable.xcstrings holds entries like:
// key: "Welcome"
//   en: "Welcome"
//   tr: "Hos geldiniz"
//   ja: "Yokoso"

String(localized:)

تحل String(localized:) في التعليمات البرمجية مفتاحًا أثناء التشغيل إلى الترجمة الموافقة للإعداد المحلي الحالي. وتؤدي القيمة الحرفية التي تمررونها دور المفتاح وقيمة الرجوع إلى لغة التطوير في آن واحد.

let greeting = String(localized: "Welcome back")
let cancel = String(localized: "Cancel")
print(greeting)

إضافة تعليقات للمترجمين

قد تعني كلمة مجردة مثل Run التنفيذ أو الركض. توفر المعلمة comment: سياقًا للمترجمين ليساعدهم على اختيار الصياغة الصحيحة. وتنتقل التعليقات إلى String Catalog تلقائيًا.

let runLabel = String(
    localized: "Run",
    comment: "Button that executes the user's code")

استيفاء القيم

يمكنكم تضمين قيم وقت التشغيل في سلسلة نصية موطّنة. وتحول Swift كل عملية استيفاء إلى عنصر نائب للتنسيق، بحيث يستطيع المترجمون إعادة ترتيبها. فكل لغة تضع الفاعل والعدد في مواضع مختلفة.

let name = "Mira"
let count = 3
let msg = String(localized: "\(name) has \(count) new messages")
print(msg)

LocalizedStringKey في SwiftUI

نادرًا ما تستدعون String(localized:) مباشرةً في SwiftUI. تقبل معظم العروض التي تستقبل نصًا قيمة LocalizedStringKey، ولذلك تُوطّن السلسلة النصية الحرفية تلقائيًا.

// In SwiftUI — the literal is a LocalizedStringKey
// Text("Welcome back")        // auto-localized
// Button("Save") { save() }   // auto-localized
let key: LocalizedStringKey = "Welcome back"
_ = key

تجنب التوطين غير المقصود

بما أن SwiftUI تتعامل مع القيم الحرفية على أنها مفاتيح، فإن متغير String ديناميكي لا يُوطّن. وإذا أنشأتم نصًا باستخدام الدمج، فلن يرى الكتالوج المفتاح الحقيقي. مرروا قيمة حرفية واحدة كلما أردتم التوطين، واستخدموا verbatim: عندما لا تريدون التوطين صراحةً.

let userInput = "hello"
// Text(userInput)            // NOT a localization key
// Text(verbatim: userInput)  // explicitly raw, never localized
let verbatimKey = userInput
_ = verbatimKey

تحديد جدول

تقسّم التطبيقات الكبيرة السلاسل النصية بين كتالوجات متعددة (جداول). ويمكنكم استهداف جدول وحزمة محددين، وهو أمر أساسي عند شحن السلاسل النصية داخل إطار عمل أو حزمة Swift.

let onboardingTitle = String(
    localized: "Get Started",
    table: "Onboarding",
    bundle: .main)

LocalizedStringResource

يمثل LocalizedStringResource سلسلة نصية قابلة للتوطين على هيئة قيمة يمكنكم تخزينها وحلّها لاحقًا، حتى عبر العمليات المختلفة، وهو مفيد لـ App Intents والعناصر المصغرة. ويؤجل البحث الفعلي حتى وقت العرض.

let resource = LocalizedStringResource("Order shipped")
// Resolve later, possibly in another locale context
let resolved = String(localized: resource)
print(resolved)

التوطين الافتراضي

توفر لغة التطوير للمشروع قيمة الرجوع عند فقدان ترجمة. وتُعامل السلسلة النصية الحرفية التي تكتبونها في التعليمات البرمجية على أنها القيمة بلغة المصدر، ولذلك تظل التعليمات البرمجية مقروءة ولا ترسلون أبدًا مفتاحًا خامًا مثل welcome_screen_title إلى المستخدمين.

// If only 'en' is translated and device is set to 'fr',
// the development-language value is shown as fallback.
let fallback = String(localized: "Settings")
print(fallback)

بحث واقعي

عند جمع العناصر معًا، تحصلون على دالة تعيد رسالة موطّنة بالكامل، ومزوّدة بسياق، وتتضمن قيمًا مستوفاة، وجاهزة لأي واجهة مستخدم.

func welcomeMessage(for user: String) -> String {
    return String(
        localized: "Welcome, \(user)!",
        comment: "Greeting shown after sign-in")
}
print(welcomeMessage(for: "Ada"))

اختبار سريع

تذكروا كيف تحدد SwiftUI ما إذا كان ينبغي توطين النص.

مراجعة

أعددتم أساسيات النصوص الموطّنة:

  • خزّنوا الترجمات في String Catalog (.xcstrings).
  • ابحثوا عن السلاسل النصية باستخدام String(localized:)، مع إضافة comment: للمترجمين.
  • في SwiftUI، تتحول القيم الحرفية إلى LocalizedStringKey وتُوطّن تلقائيًا، أما المتغيرات فلا تُوطّن.
  • استخدموا table:/bundle: مع أطر العمل، وLocalizedStringResource للحل المؤجل.

الأسئلة الشائعة

هل درس «كتالوجات السلاسل النصية والسلاسل المترجمة» مجاني؟

نعم — نص درس «كتالوجات السلاسل النصية والسلاسل المترجمة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 4 دروس في المجموع.

ماذا ستتعلم في «كتالوجات السلاسل النصية والسلاسل المترجمة»؟

ترجم النصوص باستخدام String Catalog الحديثة. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟

لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «كتالوجات السلاسل النصية والسلاسل المترجمة»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟

نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. كتالوجات السلاسل النصية والسلاسل المترجمة
  2. التثنية وStringsdict
  3. التنسيق المراعي للمحلية
  4. من اليمين إلى اليسار واتجاه التخطيط
← العودة إلى Swift Academy