أقلمة تطبيقك

يعمل نظام Android على العديد من الأجهزة في العديد من المناطق. للوصول إلى أكبر عدد من المستخدمين، تأكَّد من أنّ تطبيقك يتعامل مع النصوص والملفات الصوتية والأرقام والعملات والرسومات بطرق مناسبة للمناطق التي يُستخدم فيها تطبيقك.

توضّح هذه الصفحة أفضل الممارسات لأقلمة تطبيقات Android.

يجب أن تكون لديك معرفة عملية بلغة Kotlin وأن تكون على دراية بتحميل موارد Android واعتبارات التطوير مثل مراحل النشاط والمبادئ العامة للتدويل والترجمة.

من الممارسات الجيدة استخدام إطار عمل موارد Android لفصل الجوانب المترجَمة في تطبيقك قدر الإمكان عن وظائف التطبيق الأساسية.

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

يتناول هذا الدليل نظام الأقلمة الأساسي في Android والمستخدَم في جميع تطبيقات Android. للتعرّف على كيفية تحميل هذه الموارد المترجَمة في واجهة مستخدم Jetpack Compose، يُرجى الاطّلاع على الموارد في Compose.

للحصول على دليل موجز حول أقلمة السلاسل في تطبيقك، يُرجى الاطّلاع على إتاحة لغات وثقافات مختلفة.

نظرة عامة: تبديل الموارد في Android

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

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

عند كتابة تطبيقك، يمكنك إنشاء موارد تلقائية وموارد بديلة ليستخدمها تطبيقك. عندما يشغّل المستخدمون تطبيقك، يختار نظام Android الموارد التي سيتم تحميلها استنادًا إلى لغة الجهاز. لإنشاء الموارد، يمكنك وضع الملفات داخل أدلة فرعية بأسماء خاصة ضمن دليل res/ الخاص بالمشروع.

أهمية الموارد التلقائية

عند تشغيل التطبيق في أي لغة لم توفّر لها نصًا خاصًا بها، يحمّل Android السلاسل التلقائية من res/values/strings.xml. إذا كان هذا الملف الافتراضي غير موجود، أو إذا كان يفتقد إلى سلسلة يحتاجها تطبيقك، فلن يتم تشغيل تطبيقك ويظهر خطأ. يوضّح المثال التالي ما يمكن أن يحدث عندما يكون الملف النصي التلقائي غير مكتمل.

مثال:

يشير الرمز البرمجي المستند إلى Kotlin في أحد التطبيقات إلى سلسلتين فقط، هما text_a وtext_b. يتضمّن التطبيق ملف موارد مترجَمًا (res/values-en/strings.xml) يحدّد text_a وtext_b باللغة الإنجليزية. يتضمّن التطبيق أيضًا ملف موارد تلقائي (res/values/strings.xml) يحتوي على تعريف لـ text_a، ولكن ليس لـ text_b.

  • عند تشغيل هذا التطبيق على جهاز تم ضبط لغته على الإنجليزية، قد يعمل التطبيق بدون مشكلة، لأنّ res/values-en/strings.xml يحتوي على كلتا السلسلتَين النصيتَين المطلوبتَين.
  • ومع ذلك، عند تشغيل هذا التطبيق على جهاز تم ضبطه على لغة أخرى غير الإنجليزية، يرى المستخدم رسالة خطأ وزر فرض الإغلاق. لا يتم تحميل التطبيق.

لتجنُّب هذا الموقف، تأكَّد من توفُّر ملف res/values/strings.xml وأنّه يحدّد كل سلسلة مطلوبة. ينطبق هذا الموقف على جميع أنواع الموارد، وليس فقط السلاسل: تحتاج إلى إنشاء مجموعة من ملفات الموارد التلقائية التي تحتوي على جميع الموارد التي يستدعيها تطبيقك، مثل العناصر القابلة للرسم أو الخطوط أو الألوان. للحصول على معلومات حول الاختبار، يُرجى الاطّلاع على قسم اختبار الموارد التلقائية.

استخدام الموارد للترجمة

يتناول هذا القسم كيفية إنشاء الموارد التلقائية والموارد البديلة. ويشرح أيضًا كيفية تحديد أولوية الموارد وكيفية الإشارة إلى مواردك في الرمز البرمجي.

إنشاء موارد تلقائية

ضَع النص التلقائي للتطبيق في res/values/strings.xml. بالنسبة إلى هذه السلاسل، استخدِم اللغة التلقائية، وهي اللغة التي تتوقّع أن يتحدث بها معظم مستخدمي تطبيقك.

تتضمّن مجموعة الموارد التلقائية أيضًا أي عناصر قابلة للرسم تلقائية ويمكن أن تتضمّن أنواعًا أخرى من الموارد، مثل الرموز أو السلاسل. تنتقل هذه الموارد إلى الأدلة التالية:

  • ‫res/drawable/: دليل مطلوب يحتوي على ملف رسومات واحد على الأقل، لرمز التطبيق على Google Play
  • ‫res/xml/: مطلوب إذا كان لديك أي مجلدات من النوع res/xml-<qualifiers>
  • res/raw/: مطلوب إذا كان لديك أي مجلدات من النوع res/raw-<qualifiers>

إنشاء موارد بديلة

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

يمكن للتطبيق تحديد العديد من أدلة res/<qualifiers>/، ولكل منها مؤهلات مختلفة. لإنشاء مورد بديل لإعدادات محلية مختلفة، يمكنك استخدام مؤهِّل يحدّد لغة أو مجموعة من اللغة والمنطقة. يجب أن يتوافق اسم دليل الموارد مع نظام التسمية الموضّح في توفير موارد بديلة، وإلا لن يتمكّن تطبيقك من التجميع.

مثال:

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

  1. res/values/strings.xml
    يحتوي على نص باللغة الإنجليزية لجميع السلاسل التي يستخدمها التطبيق، بما في ذلك نص لسلسلة باسم title.
  2. res/values-fr/strings.xml
    يحتوي على نص فرنسي لجميع السلاسل، بما في ذلك title.
  3. res/values-ja/strings.xml
    تحتوي على نص ياباني لجميع السلاسل باستثناء title.

إذا كان الرمز البرمجي المستند إلى Kotlin يشير إلى R.string.title، إليك ما يحدث في وقت التشغيل:

  • إذا تم ضبط الجهاز على أي لغة أخرى غير الفرنسية، يحمّل Android السلسلة title من الملف res/values/strings.xml.
  • إذا تم ضبط الجهاز على اللغة الفرنسية، يحمّل Android السلسلة title من ملف res/values-fr/strings.xml.

إذا تم ضبط الجهاز على اللغة اليابانية، يبحث Android عن title في ملف res/values-ja/strings.xml. ولكن نظرًا لعدم تضمين هذه السلسلة في هذا الملف، يعود Android إلى الإعداد التلقائي، ويحمّل title باللغة الإنجليزية من ملف res/values/strings.xml.

ما هي الموارد التي لها الأولوية؟

إذا تطابقت ملفات موارد متعددة مع إعدادات الجهاز، يتّبع Android مجموعة من القواعد لتحديد الملف الذي سيتم استخدامه. من بين المؤهلات التي يمكن تحديدها في اسم دليل الموارد، تكون الأولوية دائمًا للإعدادات المحلية.

مثال:

لنفترض أنّ أحد التطبيقات يتضمّن مجموعة تلقائية من الرسومات ومجموعتَين أخريَين من الرسومات، تم تحسين كل منهما لإعدادات جهاز مختلفة:

  • res/drawable/
    يحتوي على رسومات تلقائية.
  • res/drawable-small-land-stylus/
    يحتوي على رسومات محسَّنة للاستخدام مع جهاز يتلقّى الإدخال من قلم الشاشة ويحتوي على شاشة QVGA بدقة منخفضة في الاتجاه الأفقي.
  • res/drawable-ja/
    يحتوي على رسومات محسَّنة للاستخدام مع اللغة اليابانية.

إذا كان التطبيق يعمل على جهاز تم ضبطه لاستخدام اللغة اليابانية، سيحمّل Android الرسومات من res/drawable-ja/، حتى إذا كان الجهاز يتوقّع إدخالاً من قلم شاشة ويحتوي على شاشة QVGA بدقة منخفضة في الوضع الأفقي.

استثناء: المحدّدات الوحيدة التي لها الأولوية على اللغة في عملية الاختيار هي رمز البلد حيث يتم تشغيل شبكة الجوّال (MCC) ورمز شبكة الجوّال (MNC).

مثال:

لنفترض أنّ لديك الحالة التالية:

  • يطلب رمز التطبيق R.string.text_a.
  • يتوفّر ملفان مرجعيان ذوا صلة:
    • res/values-mcc404/strings.xml، والذي يتضمن text_a باللغة الافتراضية للتطبيق، في هذه الحالة الإنجليزية.
    • res/values-hi/strings.xml، والذي يتضمّن text_a باللغة الهندية.
  • يعمل التطبيق على جهاز يتضمّن الإعدادات التالية:
    • شريحة SIM متصلة بشبكة جوّال في الهند (رمز البلد الجوّال 404).
    • تم ضبط اللغة على الهندية (hi).

يحمّل Android السلسلة text_a من المجلد res/values-mcc404/strings.xml (باللغة الإنجليزية)، حتى إذا تم ضبط الجهاز على اللغة الهندية. ويرجع ذلك إلى أنّه في عملية اختيار الموارد، يفضّل Android مطابقة رمز البلد الجوّال على مطابقة اللغة.

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

الإشارة إلى الموارد في الرمز البرمجي

في رمز تطبيقك المستنِد إلى Kotlin، يمكنك الإشارة إلى الموارد باستخدام البنية R.resource_type.resource_name أو android.R.resource_type.resource_name. لمزيد من المعلومات، يُرجى الاطّلاع على مقالة الوصول إلى موارد تطبيقك.

إدارة السلاسل للأقلمة

يصف هذا القسم أفضل الممارسات لإدارة السلاسل المتعلقة بالأقلمة.

نقل كل السلاسل إلى ملف strings.xml

أثناء إنشاء تطبيقاتك، لا تضع أي سلاسل في الرموز البرمجية. بدلاً من ذلك، يمكنك تعريف جميع السلاسل كموارد في ملف strings.xml تلقائي، ما يسهّل تحديثها وترجمتها. يمكن بسهولة استخراج السلاسل في ملف strings.xml وترجمتها ودمجها مرة أخرى في تطبيقك، باستخدام المؤهلات المناسبة، بدون إجراء أي تغييرات على الرمز المجمّع.

على سبيل المثال، باستخدام Compose، يمكنك تحميل سلسلة مثل هذه:

// In the res/values/strings.xml file
// <string name="compose">Jetpack Compose</string>

// In your Compose code
Text(
    text = stringResource(R.string.compose)
)

إذا كنت تنشئ صورًا تحتوي على نصوص، يمكنك وضع هذه السلاسل في strings.xml أيضًا، وإعادة إنشاء الصور بعد الترجمة.

اتّباع إرشادات Android لسلاسل واجهة المستخدم

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

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

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

توفير سياق كافٍ للسلاسل المُعلَن عنها

عند تعريف السلاسل في ملف strings.xml، تأكَّد من وصف السياق الذي يتم فيه استخدام السلسلة. هذه المعلومات لا تقدر بثمن بالنسبة للمترجم وتؤدي إلى ترجمة ذات جودة أفضل. ويساعدك أيضًا في إدارة سلاسل النصوص بشكل أكثر فعالية.

يُرجى الاطّلاع على المثال أدناه:

<!-- The action for submitting a form. This text is on a button that can fit 30 chars -->
<string name="login_submit_button">Sign in</string>

ننصحك بتقديم معلومات سياقية مثل ما يلي:

  • ما الغرض من هذه السلسلة؟ متى وأين يتم عرضه للمستخدم؟
  • Where is this in the UI? على سبيل المثال، تكون الترجمات أقل مرونة في الأزرار مقارنة بمربعات النص.

وضع علامة على أجزاء الرسالة التي لا يجب ترجمتها

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

لتمييز النص الذي لا تريد ترجمته، استخدِم علامة العنصر النائب <xliff:g>. في ما يلي مثال على علامة تشير إلى أنّه يجب عدم تغيير النص "%1$s" أثناء الترجمة لتجنُّب تغيير معنى الرسالة:

<string name="countdown">
  <xliff:g id="time" example="5 days">%1$s</xliff:g> until holiday
</string>

عند الإعلان عن علامة عنصر نائب، أضِف سمة معرّف توضّح الغرض من العنصر النائب. إذا كان تطبيقك يستبدل قيمة العنصر النائب لاحقًا، تأكَّد من تقديم سمة مثال لتوضيح الاستخدام المتوقّع.

في ما يلي بعض الأمثلة الإضافية على علامات العناصر النائبة:

<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<!-- Example placeholder for a special Unicode symbol -->
<string name="star_rating">Check out our 5
    <xliff:g id="star">\u2605</xliff:g>
</string>
<!-- Example placeholder for a URL -->
<string name="app_homeurl">
    Visit us at <xliff:g
    id="application_homepage">http://my/app/home.html</xliff:g>
</string>
<!-- Example placeholder for a name -->
<string name="prod_name">
    Learn more at <xliff:g id="prod_gamegroup">Game Group</xliff:g>
</string>
<!-- Example placeholder for a literal -->
<string name="promo_message">
    Please use the "<xliff:g id="promotion_code">ABCDEFG</xliff:g>" to get a discount.
</string>
...
</resources>

قائمة التحقق الخاصة بالترجمة

للحصول على نظرة عامة شاملة على عملية أقلمة تطبيق Android وتوزيعه، يُرجى الاطّلاع على مقالة ترجمة تطبيقك وأقلمته.

نصائح حول الأقلمة

اتّبِع هذه النصائح أثناء أقلمة تطبيقك.

تصميم تطبيقك ليعمل في أي لغة

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

ملاحظة مهمة: تأكَّد من أنّ تطبيقك يتضمّن مجموعة كاملة من الموارد التلقائية: أدرِج مجلدَي res/drawable/ وres/values/ بدون أي معدِّلات إضافية في أسماء المجلدات التي تحتوي على جميع الصور والنصوص التي يحتاجها تطبيقك.

إذا كان التطبيق يفتقد إلى مورد تلقائي واحد، لن يعمل على جهاز تم ضبطه على لغة غير متوافقة. على سبيل المثال، إذا كان ملف res/values/strings.xml التلقائي يفتقر إلى سلسلة واحدة يحتاجها التطبيق، فعندما يعمل التطبيق في لغة غير معتمَدة ويحاول تحميل res/values/strings.xml، ستظهر للمستخدم رسالة خطأ وزر "فرض الإغلاق".

لمزيد من المعلومات، يُرجى الاطّلاع على قسم اختبار الموارد التلقائية.

تجنُّب إنشاء ملفات موارد وسلاسل نصية أكثر من اللازم

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

أيضًا، قد لا تحتاج إلى إنشاء نص بديل لكل سلسلة. على سبيل المثال، افترض ما يلي:

  • اللغة التلقائية لتطبيقك هي الإنجليزية الأمريكية. يتم تحديد كل سلسلة يستخدمها التطبيق، باستخدام تهجئة اللغة الإنجليزية الأمريكية، في res/values/strings.xml.
  • بالنسبة إلى بعض العبارات المهمة، تريد تقديم تهجئة باللغة الإنجليزية البريطانية. وتريد استخدام هذه السلاسل البديلة عندما يعمل تطبيقك على جهاز في المملكة المتحدة.

لإجراء ذلك، أنشئ ملفًا صغيرًا باسم res/values-en-rGB/strings.xml يتضمّن فقط السلاسل المختلفة عند تشغيل التطبيق في المملكة المتحدة. وبالنسبة إلى بقية السلاسل، يعود التطبيق إلى الإعدادات التلقائية ويستخدم ما تم تحديده في res/values/strings.xml.

استخدام LocalConfiguration للبحث اليدوي عن اللغة

يمكنك البحث عن اللغة باستخدام LocalConfiguration التي يوفّرها Android، كما هو موضّح في المثال التالي:

val locale = LocalConfiguration.current.locales[0]

استخدم خدمة ترجمة التطبيقات

تم دمج خدمة ترجمة التطبيقات في Play Console. تتيح لك هذه الخدمة الحصول على عرض أسعار فوري وتقديم طلب إلى شركة ترجمة. يمكنك طلب ترجمات إلى لغة واحدة أو أكثر لسلاسل واجهة مستخدم التطبيق ونص بطاقة بيانات المتجر على متجر Google Play وأسماء عمليات الشراء داخل التطبيق ونص الحملة الإعلانية.

استخدام Gemini لترجمة نصوص التطبيق

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

اختبار التطبيقات المترجَمة

اختبِر تطبيقك المترجَم على جهاز أو باستخدام Android Emulator. وعلى وجه الخصوص، اختبِر تطبيقك للتأكّد من تضمين جميع الموارد التلقائية اللازمة.

الاختبار على جهاز

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

لتغيير اللغة أو اللغة المحلية على جهاز، استخدِم تطبيق "الإعدادات".

الاختبار باستخدام المعاينات القابلة للإنشاء

قبل الاختبار على جهاز، يمكنك استخدام المعاينات القابلة للإنشاء في استوديو Android لاختبار واجهات المستخدم المترجَمة بدون نشرها في محاكي. لمعاينة واجهة المستخدم بلغات مختلفة، استخدِم التعليق التوضيحي @Preview (مثل @Preview(locale = "fr")). يمكنك أيضًا اختبار تنسيقات العرض من اليمين إلى اليسار (RTL) من خلال تحديد لغة مكتوبة من اليمين إلى اليسار مثل @Preview(locale = "ar").

الاختبار على محاكي

لمعرفة التفاصيل حول استخدام المحاكي، يُرجى الاطّلاع على مقالة تشغيل التطبيقات على Android Emulator.

إنشاء لغة مخصّصة واستخدامها

اللغة "المخصّصة" هي مجموعة من اللغات أو المناطق التي لا تتوافق معها صورة نظام Android بشكل صريح. يمكنك اختبار كيفية تشغيل تطبيقك في لغة مخصصة عن طريق إنشاء لغة مخصصة في المحاكي. هناك طريقتان لإجراء ذلك:

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

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

تغيير لغة المحاكي من واجهة adb

لتغيير اللغة في المحاكي باستخدام واجهة أوامر adb، اتّبِع الخطوات التالية:

  1. اختَر اللغة التي تريد اختبارها وحدِّد علامة لغة BCP-47 الخاصة بها، مثل fr-CA للغة الفرنسية الكندية.
  2. شغِّل محاكيًا.
  3. من واجهة سطر الأوامر على الكمبيوتر المضيف، شغِّل الأمر التالي:
    adb shell
    أو إذا كان لديك جهاز متصل، حدِّد أنّك تريد المحاكي من خلال إضافة الخيار -e:
    adb -e shell
  4. في موجّه أوامر adb (#)، شغِّل الأمر التالي:
    setprop persist.sys.locale [BCP-47 language tag];stop;sleep 5;start
    استبدِل الأقسام بين قوسين بالرموز المناسبة من الخطوة 1.

    على سبيل المثال، لاختبار اللغة الفرنسية الكندية:
    setprop persist.sys.locale fr-CA;stop;sleep 5;start

يؤدي ذلك إلى إعادة تشغيل المحاكي. بعد ظهور الشاشة الرئيسية مرة أخرى، أعِد تشغيل تطبيقك، وسيتم تشغيل التطبيق بالإعدادات المحلية الجديدة.

اختبار المراجع التلقائية

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

  1. اضبط المحاكي أو الجهاز على لغة لا يتيحها تطبيقك. على سبيل المثال، إذا كان التطبيق يحتوي على سلاسل باللغة الفرنسية في res/values-fr/ ولكن لا يحتوي على أي سلاسل باللغة الإسبانية في res/values-es/، اضبط لغة المحاكي على الإسبانية. يمكنك استخدام تطبيق "اللغة المخصّصة" (Custom Locale) لضبط المحاكي على لغة غير متوافقة.
  2. شغِّل التطبيق.
  3. إذا عرض التطبيق رسالة خطأ وزر "فرض الإغلاق"، قد يكون يبحث عن سلسلة غير متاحة. تأكَّد من أنّ ملف res/values/strings.xml يتضمّن تعريفًا لكل سلسلة يستخدمها التطبيق.

إذا نجح الاختبار، كرِّره لأنواع أخرى من الإعدادات. على سبيل المثال، إذا كان التطبيق يحتوي على ملف سلسلة باسم res/values-land/strings.xml ولكنّه لا يحتوي على ملف باسم res/values-port/strings.xml، اضبط المحاكي أو الجهاز على الوضع العمودي وتحقّق مما إذا كان التطبيق يعمل.

مراجع إضافية

لمزيد من المعلومات حول الأقلمة، راجِع المراجع الإضافية التالية:

الوثائق

محتوى المشاهدات