يعمل نظام التشغيل 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، كل منها
مخزّن في دليل موارد خاص بلغة معيّنة:
res/values/strings.xml
يحتوي على نص باللغة الإنجليزية لجميع السلاسل التي يستخدمها التطبيق، بما في ذلك النص الخاص بسلسلة تحمل الاسمtitle.res/values-fr/strings.xml
يجب أن تحتوي جميع السلاسل على نص باللغة الفرنسية، بما في ذلكtitle.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 يفضّل تطابق رمز البلد (MCC) على تطابق اللغة في عملية اختيار الموارد.
لا تكون عملية الاختيار دائمًا بسيطة كما توحي هذه الأمثلة. للحصول على وصف أكثر دقة للعملية، يُرجى الاطّلاع على مقالة كيفية عثور 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>
ننصحك بتقديم معلومات السياق التالية:
- ما الغرض من هذه السلسلة؟ متى وأين يتم عرضها للمستخدم؟
- أين يمكنني العثور على هذا الخيار في واجهة المستخدم؟ على سبيل المثال، تكون الترجمات أقل مرونة في الأزرار مقارنةً بمربّعات النص.
وضع علامة على أجزاء الرسالة التي لا يجب ترجمتها
في كثير من الأحيان، تحتوي السلاسل على نص غير مخصّص للترجمة إلى لغات أخرى. وتشمل الأمثلة الشائعة على ذلك مقتطفًا من الرمز أو عنصرًا نائبًا للقيمة أو رمزًا خاصًا أو اسمًا. أثناء إعداد السلاسل للترجمة، ابحث عن النصوص التي يجب أن تظل كما هي بدون ترجمة، وحدِّدها حتى لا يغيّرها المترجم.
لوضع علامة على نص لا يجب ترجمته، استخدِم علامة عنصر نائب <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. يتيح لك هذا التطبيق الحصول على عرض أسعار فوري وتقديم طلب إلى شركة ترجمة. يمكنك طلب ترجمات إلى لغة واحدة أو أكثر لسلاسل واجهة مستخدم التطبيق ونص بطاقة بيانات المتجر على Play وأسماء المنتجات داخل التطبيق ونص الحملة الإعلانية.
استخدام Gemini لترجمة نصوص التطبيق
يمكنك استخدام "Gemini في استوديو Android" لترجمة موارد السلاسل في تطبيقك مباشرةً في مشروعك. لمزيد من المعلومات، اطّلِع على مقالة ترجمة تطبيقك وأقلَمته.
اختبار التطبيقات المعدَّلة بما يناسب المنطقة المحلية
اختبِر تطبيقك المترجَم على جهاز أو باستخدام "محاكي Android". على وجه الخصوص، اختبِر تطبيقك للتأكّد من تضمين جميع موارد الإعدادات التلقائية اللازمة.
الاختبار على جهاز
يُرجى العِلم أنّ الجهاز الذي تجري الاختبار عليه قد يختلف بشكل كبير عن الأجهزة المتاحة للمستهلكين في أماكن أخرى. قد تختلف اللغات المتوفرة على جهازك عن تلك المتوفرة على أجهزة أخرى. بالإضافة إلى ذلك، قد تختلف دقة الشاشة وكثافتها على الجهاز، ما قد يؤثر في عرض السلاسل والرسومات القابلة للرسم في واجهة المستخدم.
لتغيير اللغة أو المنطقة على جهاز، استخدِم تطبيق "الإعدادات".
الاختبار باستخدام المعاينات القابلة للإنشاء
قبل إجراء الاختبار على جهاز، يمكنك استخدام معاينات قابلة للإنشاء في استوديو Android لاختبار واجهات المستخدم المترجمة بدون تفعيلها على محاكي. لمعاينة واجهة المستخدم بلغات مختلفة، استخدِم التعليق التوضيحي @Preview (مثل @Preview(locale = "fr")). يمكنك أيضًا اختبار التنسيقات من اليمين إلى اليسار (RTL) من خلال تحديد منطقة محلية مكتوبة من اليمين إلى اليسار، مثل @Preview(locale = "ar").
الاختبار على محاكي
للحصول على تفاصيل حول استخدام المحاكي، يُرجى الاطّلاع على تشغيل التطبيقات على "محاكي Android".
إنشاء لغة محلية مخصّصة واستخدامها
اللغة المحلية "المخصّصة" هي مجموعة من اللغات أو المناطق لا تتوافق صراحةً مع صورة نظام Android. يمكنك اختبار طريقة تشغيل تطبيقك في لغة مخصّصة من خلال إنشاء لغة مخصّصة في المحاكي. هناك طريقتان لإجراء ذلك:
- استخدِم تطبيق Custom Locale الذي يمكن الوصول إليه من علامة تبويب التطبيق. بعد إنشاء لغة مخصّصة، يمكنك التبديل إليها من خلال لمس اسم اللغة مع الاستمرار.
- غيِّر إلى لغة مخصّصة من شاشة
adb، كما هو موضّح في القسم التالي.
عند ضبط المحاكي على لغة غير متوفّرة في صورة نظام Android، سيتم عرض النظام نفسه بلغته التلقائية. مع ذلك، يوفّر تطبيقك ترجمة مناسبة للغة المحلية.
تغيير لغة المحاكي من adb shell
لتغيير اللغة في المحاكي باستخدام adb shell، اتّبِع الخطوات التالية:
- اختَر اللغة التي تريد اختبارها وحدِّد رمز اللغة BCP-47 الخاص بها، مثل
fr-CAللغة الفرنسية الكندية. - شغِّل محاكيًا.
- من واجهة سطر الأوامر على الكمبيوتر المضيف، شغِّل الأمر التالي:
adb shell
أو، إذا كان لديك جهاز متصل، حدِّد أنّك تريد المحاكي من خلال إضافة الخيار-e:
adb -e shell - في موجه الأوامر
adb(#)، شغِّل الأمر التالي:
setprop persist.sys.locale [BCP-47 language tag];stop;sleep 5;start
استبدِل الأقسام بين الأقواس بالرموز المناسبة من الخطوة 1.
على سبيل المثال، لاختبار اللغة الفرنسية الكندية:
setprop persist.sys.locale fr-CA;stop;sleep 5;start
يؤدي ذلك إلى إعادة تشغيل المحاكي. بعد ظهور الشاشة الرئيسية مرة أخرى، أعِد تشغيل تطبيقك، وسيتم تشغيله باللغة الجديدة.
اختبار الموارد التلقائية
لاختبار ما إذا كان التطبيق يتضمّن كل موارد السلاسل التي يحتاجها، اتّبِع الخطوات التالية:
- اضبط المحاكي أو الجهاز على لغة لا يتيحها تطبيقك. على سبيل المثال، إذا كان التطبيق يتضمّن سلاسل باللغة الفرنسية في
res/values-fr/ولكن لا يتضمّن أي سلاسل باللغة الإسبانية فيres/values-es/، اضبط لغة المحاكي على الإسبانية. يمكنك استخدام تطبيق Custom Locale لضبط المحاكي على لغة غير متوافقة. - شغِّل التطبيق.
- إذا كان التطبيق يعرض رسالة خطأ وزر "إغلاق إجباري"، قد يكون التطبيق يبحث عن سلسلة غير متاحة. تأكَّد من أنّ ملف
res/values/strings.xmlيتضمّن تعريفًا لكل سلسلة نصية يستخدمها التطبيق.
في حال نجاح الاختبار، كرِّره لأنواع أخرى من الإعدادات. على سبيل المثال، إذا كان التطبيق يتضمّن ملف سلسلة نصية باسم res/values-land/strings.xml ولكنّه لا يتضمّن ملفًا باسم res/values-port/strings.xml، اضبط المحاكي أو الجهاز على الوضع العمودي واطّلِع على ما إذا كان التطبيق يعمل.
مصادر إضافية
لمزيد من المعلومات حول الأقلمة، يُرجى الاطّلاع على المراجع الإضافية التالية: