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

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

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

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

قبل الإصدار 7.0 من نظام التشغيل Android، لم يكن بإمكان نظام 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
it_IT
جرِّب 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
it_IT
جرِّب fr_CH => إخفاق
جرِّب fr => إخفاق
جرِّب fr => fr_FR
استخدام fr_FR

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

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

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

إعدادات المستخدم موارد التطبيق تحليل الموارد
  1. fr_CH
  2. CH
التلقائي (ar)
de_DE
es_ES
it_IT
جرّب fr_CH => إخفاق
جرِّب fr => افشل
جرِّب الأطفال من fr => إخفاق
Try it_CH => Fail
Try it => Fail
جرِّب child of it => it_IT
Use it_IT

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

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

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

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

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

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

رائع

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

Kotlin

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

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

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

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

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

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

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