نظرة عامة على تحليل اللغة

بدءًا من الإصدار 7.0 من نظام التشغيل Android (المستوى 24 من واجهة برمجة التطبيقات)، ويوفّر Android دعمًا متقدّمًا للمستخدمين المتعددي اللغات مما يسمح لهم بتحديد لغات متعددة في الإعدادات. جهاز Android هذه الإمكانية عبر زيادة كبيرة في عدد اللغات المتاحة وتغيير طريقة حل النظام للموارد.

يبدأ هذا المستند بشرح استراتيجية تحليل الموارد في إصدارات Android الأقدم من 7.0 (المستوى 24 لواجهة برمجة التطبيقات) بعد ذلك، يصف الإستراتيجية المحسَّنة لحل مشكلات الموارد في الإصدار Android 7.0. أخيرًا، يشرح كيفية الاستفادة من زيادة عدد اللغات لاستيعاب المزيد من المستخدمين متعددي اللغات.

التحديات التي تواجه حل الموارد اللغوية

قبل استخدام الإصدار Android 7.0، لم يكن من الممكن أحيانًا تحقيق النجاح من Android. تطابق لغات التطبيق والنظام.

على سبيل المثال، افترض أن لديك الموقف التالي:

  • اللغة التلقائية لتطبيقك هي en_US (الإنجليزية الأمريكية)، ويحتوي أيضًا على سلاسل باللغة الإسبانية مترجَمة إلى es_ES ملفات الموارد.
  • تم ضبط أحد الأجهزة على "es_MX".

عندما يشير رمز Java إلى السلاسل، سيقوم النظام بتحميل سلاسل من ملف المورد التلقائي (en_US)، حتى إذا كان التطبيق يحتوي على الموارد باللغة الإسبانية مترجَمة ضمن es_ES. هذا لأنه عندما لا يتمكن النظام لا يمكنه العثور على تطابق تام، فإنه يستمر في البحث عن الموارد من خلال تجريد رمز البلد خارج اللغة. وفي النهاية، إذا لم يتم العثور على أي مطابقة، فسيعطل النظام نعود إلى الإعداد التلقائي، وهو en_US.

سيستخدم النظام أيضًا en_US تلقائيًا إذا اختار المستخدم لغة التطبيق لا يدعمه على الإطلاق، مثل الفرنسية. مثلاً:

الجدول 1. دقة الموارد بدون مطابقة لغة تامّة.

إعدادات المستخدم موارد التطبيقات دقة الموارد
fr_CH التلقائية (ar)
de_DE
es_ES
fr_FR
أنها_إيطاليا
جرب fr_CH => إخفاق
جرِّب fr => إخفاق
استخدام اللغة التلقائية (ar)

في هذا المثال، يعرض النظام سلاسل إنجليزية بدون ومعرفة ما إذا كان المستخدم يمكنه فهم اللغة الإنجليزية. هذا السلوك شائع جدًا اليوم.

تحسينات على استراتيجية حلّ المشاكل

يوفّر الإصدار Android 7.0 (مستوى واجهة برمجة التطبيقات 24) درجة دقة أعلى للموارد على خيارات احتياطية أفضل تلقائيًا. ومع ذلك، يمكن لتسريع الحل وتحسين قابلية الصيانة، يجب تخزين الموارد باللهجة الرئيسية الأكثر شيوعًا. على سبيل المثال، إذا كنت تخزن موارد بالإسبانية في دليل values-es-rUS من قبل، انقلها إلى الدليل values-b+es+419، والتي تضم الإسبانية (أمريكا اللاتينية). وبالمثل، إذا كانت لديك سلاسل موارد في دليل باسم values-en-rGB، إعادة تسمية الدليل إلى values-b+en+001 (دولي الإنجليزية)، لأن الأكثر شيوعًا العنصر الرئيسي لسلاسل en-GB هو en-001. توضّح الأمثلة التالية سبب تحسين هذه الممارسات للأداء موثوقية دقة الموارد.

أمثلة على تحليل الموارد

وفي إصدارات Android الأحدث من 7.0، يتم وصف الحالة في يتم التعامل مع الجدول 1 بطريقة مختلفة:

الجدول 2. استراتيجية محسنة للدقة في حالة عدم وجود مطابقة تامة للغة.

إعدادات المستخدم موارد التطبيقات دقة الموارد
  1. fr_CH
التلقائية (ar)
de_DE
es_ES
fr_FR
أنها_إيطاليا
جرب fr_CH => إخفاق
جرِّب fr => إخفاق
تجربة الأطفال من fr => fr_FR
استخدام fr_FR

الآن يحصل المستخدم على الموارد الفرنسية بدلاً من الإنجليزية. يوضح هذا المثال أيضًا لمَ يجب تخزين السلاسل الفرنسية في fr بدلاً من fr_FR للإصدار 7.0 من نظام التشغيل Android أو الإصدارات الأحدث. هنا مسار العمل لمطابقة أقرب لهجة رئيسية، جعل الحل أسرع وأكثر قابلية للتنبؤ.

بالإضافة إلى منطق الدقة المحسّن هذا، يوفِّر Android الآن لغات المستخدم للاختيار من بينها. لنجرب المثال أعلاه مرة أخرى بالإيطالية محددة كلغة إضافية للمستخدم، ولكن دون أن يتيح التطبيق استخدام اللغة الفرنسية.

الجدول 3. دقة المورد عندما يتطابق التطبيق فقط مع هو إعداد اللغة المفضل الثاني للمستخدم.

إعدادات المستخدم موارد التطبيقات دقة الموارد
  1. fr_CH
  2. it_CH
التلقائية (ar)
de_DE
es_ES
أنها_إيطاليا
جرب fr_CH => إخفاق
جرِّب fr => إخفاق
تجربة الأطفال من fr => إخفاق
جرّبها_CH => إخفاق
جرِّبها => إخفاق
جرب الأطفال منها => أنها_إيطاليا
استخدامها_تكنولوجيا

لا يزال المستخدم يحصل على لغة يفهمها، على الرغم من أن التطبيق لا يفهمها باللغة الفرنسية.

تصميم تطبيقك ليتوافق مع لغات إضافية

يوفّر Android أدوات تسهِّل أقلمة محتوى التطبيق وجذب المستخدمين إلى اللغات المفضلة. نقترح استخدام الأساليب التالية لضبط تطبيقك حتى يتمكّن من تنفيذ ما يلي: لتلائم لغات واصطلاحات تنسيق مختلفة، بطريقة قابلة للتوسع.

تحديد اللغات التي يتوافق معها تطبيقك

لضمان ترجمة هذه اللغات بشكل صحيح، يجب تحديد اللغات التي يتوافق معها تطبيقك باستخدام السمة resConfigs في ملف build.gradle على مستوى الوحدة.

يعرض نموذج الرمز البرمجي التالي كيفية استخدام resConfigs للإشارة إلى اللغات المتاحة. في هذا المثال، يتيح التطبيق استخدام اللغتَين الإنجليزية والإسبانية.

Groovy

android {
    defaultConfig {
        ...
        resConfigs "en", "es"
    }
}

Kotlin

android {
    defaultConfig {
        ...
        resConfigs("en", "es")
    }
}
بسبب الطريقة التي يدمج بها نظام الإصدار الموارد من تطبيقك وتبعياته، يجب: تحديد اللغات المتاحة بهذه الطريقة لضمان تلقّي إعدادات لغة المستخدم بشكل صحيح.

واجهة برمجة التطبيقات LocaleList

بدءًا من Android 7.0 (مستوى واجهة برمجة التطبيقات 24)، يكشف Android عن واجهة برمجة تطبيقات LocaleList.getDefault() تتيح للتطبيقات طلب البحث مباشرةً عن قائمة اللغات التي حدّدها المستخدم. واجهة برمجة التطبيقات هذه إنشاء نماذج أكثر تطورًا سلوك التطبيق وتحسين عرض المحتوى بشكل أفضل. على سبيل المثال، البحث يمكن أن تعرض النتائج بلغات متعددة استنادًا إلى إعدادات المستخدم. تطبيقات المتصفّح تجنب عرض ترجمة الصفحات بلغة يعرفها المستخدم بالفعل، وتطبيقات لوحة المفاتيح يمكنها تمكين جميع التنسيقات المناسبة تلقائيًا.

أدوات التنسيق

حتى الإصدار Android 6.0 (المستوى 23 لواجهة برمجة التطبيقات)، لا يتوافق Android إلا مع إصدار واحد أو لغتان للعديد من اللغات الشائعة (en وes وar وfr وru). ونظرًا لوجود عدد قليل فقط من المتغيرات من كل لغة، يمكن أن تتجنب التطبيقات تخزين بعض الأرقام والتواريخ كسلاسل برمجية ثابتة في ملفات الموارد. ومع ذلك، فمع مجموعة واسعة من الميزات المحلية، فيمكن أن يكون هناك الاختلافات المهمة في التنسيقات الخاصة بالتواريخ والأوقات والعملات المعلومات حتى داخل لغة واحدة. الترميز الثابت الذي يمكن أن ينتجه التنسيقات تجربة مربكة للمستخدمين النهائيين. وبالتالي، عند تطوير التطبيقات إلى الإصدار 7.0 من Android أو الإصدارات الأحدث، تأكد من استخدام أدوات التنسيق بدلاً من أرقام الترميز الثابت وسلاسل التاريخ.

على سبيل المثال، يدعم الإصدار Android 7.0 والإصدارات الأحدث دعمًا 27 لغة عربية. يمكن لهذه اللغات مشاركة معظم الموارد، ولكن البعض يفضل أرقام ASCII، بينما يفضل البعض الآخر الأرقام الأصلية. على سبيل المثال: عندما تريد إنشاء جملة بمتغير رقمي، مثل "اختَر رقم تعريف شخصي مكوَّن من 4 أرقام"، واستخدِم أدوات التنسيق على النحو الموضّح أدناه:

 format(locale, "Choose a %d-digit PIN", 4)