تتضمن التطبيقات موارد يمكن أن تكون خاصة بثقافة معينة. على سبيل المثال، يمكن أن يتضمن التطبيق سلاسل خاصة بثقافة معينة تتم ترجمتها إلى لغة المنطقة المحلية الحالية.
إنها ممارسة جيدة أن تضع موارد خاصة بثقافة محدّدة منفصلة عن بقية تطبيقك. التعامل مع Android الموارد الخاصة باللغة والثقافات استنادًا إلى إعداد اللغة على النظام. إِنْتَ تقديم الدعم للغات مختلفة باستخدام دليل الموارد في لمشروع Android الخاص بك.
يمكنك تحديد موارد مصممة خصيصًا لثقافات الأشخاص الذين يستخدمون
التطبيق. يمكنك توفير أي نوع موارد يكون
يتناسب مع لغة وثقافات المستخدمين. على سبيل المثال،
تُظهر لقطات الشاشة التالية تطبيقًا يعرض سلسلة وموارد قابلة للرسم
اللغة التلقائية en_US
على الجهاز واللغة الإسبانية
اللغة es_ES
.
![يعرض التطبيق
نص ورمز مختلفان اعتمادًا على اللغة الحالية](https://developer.android.com/static/images/training/languages_01.png?authuser=19&hl=ar)
الشكل 1. يستخدم التطبيق موارد مختلفة بناءً على اللغة الحالية.
عند إنشاء مشروع باستخدام حزمة تطوير البرامج (SDK) لنظام التشغيل Android
تنشئ الأدوات الدليل res/
في المستوى الأعلى من
للمشروع. تتوفّر أدلة فرعية لموارد متنوعة داخل دليل res/
هذا.
الأنواع. هناك أيضًا بعض الملفات التلقائية، مثل res/values/strings.xml
ملف، والذي يحتوي على قيم السلسلة.
لا يقتصر دعم اللغات المختلفة على استخدام الموارد الخاصة بها. يختار بعض المستخدمين لغة تستخدم النصوص البرمجية من اليمين إلى اليسار (RTL)، مثل العربية أو العبرية، للغة واجهة المستخدم. المستخدمون الآخرون الذين يضبطون لغة واجهة المستخدم على لغة تستخدم يمكن أن تعرض النصوص البرمجية من LTR، مثل الإنجليزية، المحتوى أو تُنشئه. بلغة تستخدم النصوص البرمجية من اليمين إلى اليسار. لدعم كلا النوعين من المستخدمين، على تطبيقك إجراء ما يلي:
- استخدام تنسيق واجهة مستخدم من اليمين إلى اليسار للّغات التي تستخدم التنسيق من اليمين إلى اليسار
- اكتشاف وتعريف اتجاه البيانات النصية التي يتم عرضها بالداخل الرسائل المنسَّقة. عادةً، يمكنك استدعاء طريقة، كما هو موضح في هذا الدليل، الذي يحدد اتجاه البيانات النصية لك.
إنشاء أدلة اللغة وملفات الموارد
لإتاحة مزيد من اللغات، أنشئ أدلة إضافية داخلها
res/
يجب أن يتقيد اسم كل دليل بالتنسيق التالي:
<resource type>-b+<language code>[+<country code>]
على سبيل المثال، يحتوي الحقل values-b+es/
على سلسلة
موارد للغات التي تستخدم رمز اللغة es
. وبالمثل،
يحتوي mipmap-b+es+ES/
على رموز للغات مع es
رمز اللغة ورمز البلد ES
.
يحمّل Android الموارد المناسبة وفقًا لإعدادات اللغة الجهاز في وقت التشغيل. لمزيد من المعلومات، يُرجى مراجعة توفير موارد بديلة
بعد أن تقرر اللغات التي تريد دعمها، أنشئ الأدلة الفرعية للموارد الملفات. مثلاً:
MyProject/ res/ values/ strings.xml values-b+es/ strings.xml mipmap/ country_flag.png mipmap-b+es+ES/ country_flag.png
تعبئة ملفات الموارد بالموارد المترجَمة في ما يلي أمثلة على ملفات موارد الصور والسلاسل المترجَمة:
سلاسل إنجليزية (اللغة التلقائية) باللغة /values/strings.xml
:
<resources> <string name="hello_world">Hello World!</string> </resources>
سلاسل إسبانية (لغة محلية es
) باللغة /values-b+es/strings.xml
:
<resources> <string name="hello_world">¡Hola Mundo!</string> </resources>
رمز العلم الأمريكي (اللغة التلقائية) في
/mipmap/country_flag.png
:
![تمثل رمز علم
الولايات المتحدة](https://developer.android.com/static/images/training/languages_us_flag.png?authuser=19&hl=ar)
الشكل 2. رمز يُستخدَم للّغة التلقائية (en_US).
رمز العلم الإسباني (لغة واحدة (es_ES
)) في
/mipmap-b+es+ES/country_flag.png
:
![رمز علم
أسبانيا](https://developer.android.com/static/images/training/languages_es_flag.png?authuser=19&hl=ar)
الشكل 3. الرمز المستخدَم للّغة es_ES
ملاحظة: يمكنك استخدام مؤهِّلات الضبط، مثل مؤهل اللغة، في أي نوع من أنواع الموارد. على سبيل المثال، قد ترغب في توفير إصدارات مترجمة من عناصر الصور النقطية القابلة للرسم. لمزيد من المعلومات، راجِع ترجمة تطبيقك.
استخدام الموارد في تطبيقك
ارجع إلى الموارد في رمز المصدر وملفات XML الأخرى باستخدام
سمة name
لكل مورد:
R.<resource type>.<resource name>
هناك مجموعة متنوعة
الطرق التي تقبل موردًا بهذه الطريقة، كما هو موضح في الأمثلة التالية:
Kotlin
// Get a string resource val hello = resources.getString(R.string.hello_world) // Or supply a string resource to a method that requires a string TextView(this).apply { setText(R.string.hello_world) }
Java
// Get a string resource String hello = getResources().getString(R.string.hello_world); // Or supply a string resource to a method that requires a string TextView textView = new TextView(this); textView.setText(R.string.hello_world);
في ملفات XML، يمكنك الرجوع إلى مورد يحتوي على بنية
@<resource type>/<resource name>
عند إدخال XML
قيمة متوافقة، كما هو موضح في المثال التالي:
<ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@mipmap/country_flag" />
ملاحظة: لضمان منح الأولوية لإعدادات لغة المستخدم
بشكل صحيح، يجب تحديد اللغات التي يتوافق معها تطبيقك باستخدام السمة resConfigs
. بالنسبة
مزيد من المعلومات، راجع
حدِّد اللغات التي يتوافق معها تطبيقك.
تنسيق النص في الرسائل
واحدة من المهام الأكثر شيوعًا في التطبيق هي تنسيق النص. الرسائل المترجَمة عن طريق إدراج بيانات نصية ورقمية في المواضع المناسبة. لكن للأسف، عند التعامل مع بيانات واجهة مستخدم من RTL أو RTL، يمكن أن تعرض إخراجًا نصيًا غير صحيح أو حتى غير قابل للقراءة.
تتم كتابة اللغات مثل العربية والعبرية والفارسية والأوردية بتنسيق RTL. ومع ذلك، هناك بعض العناصر، مثل الأرقام والعناصر المضمّنة يتم كتابة نص LTR ضمن نص RTL بخلاف ذلك. اللغات التي تستخدم نصوص LTR، بما في ذلك الإنجليزية، تكون ثنائية الاتجاه أيضًا، لأنّها قد تحتوي على نصوص برمجية من اليمين إلى اليسار وتحتاج إلى عرضها بتنسيق من اليمين إلى اليسار
وغالبًا ما تنشئ التطبيقات مثيلات من هذا النوع من النصوص المعاكسة المضمّنة، مثلاً عن طريق إدراج بيانات نصية عشوائية اللغة واتجاه النص العشوائي في الرسائل المترجمة. غالبًا ما لا يتضمن هذا المزيج من الاتجاهات إشارة واضحة للمكان بداية النص المعاكس ونهايته، لذا فإن الخطوات التي يتم إنشاؤها يمكن أن يتسبب النص في تجربة مستخدم سيئة.
على الرغم من أن معالجة النظام الافتراضية للنص ثنائي الاتجاه تعرض عادةً النص كما هو متوقع، فقد لا يظهر النص بشكل صحيح عندما يكون تطبيقك يُدرجها في رسالة مترجمة. فيما يلي أمثلة على المواقف التي يحتمل أن يظهر فيها النص بشكل غير صحيح:
-
تم إدراج النص في بداية الرسالة:
يتصل بك "PERSON_NAME"
-
نص يبدأ برقم، مثل العنوان أو رقم الهاتف:
987 654-3210
-
النص الذي يبدأ بعلامات ترقيم، مثل رقم هاتف:
+19876543210
-
النص الذي ينتهي بعلامة ترقيم:
هل أنت متأكّد؟
-
النص الذي يحتوي على كلا الاتجاهين حاليًا:
وكلمة نسبة مئوية هي كلمة باللغة العبرية عن الموز.
مثال
لنفترض أن أحد التطبيقات يحتاج أحيانًا إلى عرض الرسالة "تم تعني %s?"، مع إدراج عنوان بدلاً من %s في وقت التشغيل. يتوافق التطبيق مع لغات واجهة المستخدم المختلفة، لذلك تأتي الرسالة من لغة خاصة بلغة المورد وتستخدم اتجاه من اليمين إلى اليسار عند ضبط الجهاز على لغة من اليمين إلى اليسار. على سبيل المثال، بالنسبة للغة العبرية في واجهة المستخدم، تظهر الرسالة على النحو التالي:
هي هَا هُوَهَا كَامِلْ طَرِيقْ %s؟
ومع ذلك، قد يأتي العنوان المقترَح من قاعدة بيانات لا تتضمّن نصًا. بلغة المنطقة المحلية. على سبيل المثال: إذا كان العنوان يشير إلى مكان في كاليفورنيا، فإنها تظهر في قاعدة البيانات باستخدام النص الإنجليزي. إذا قمت بإدراج العنوان "15 شارع السلام، القاهرة" في رسالة من اليمين إلى اليسار بدون تقديم تلميحات بشأن اتجاه النص، فإن النتيجة ليست متوقعة أو صحيحة:
א 䏕ו تعرَّف على منطقة إل 15 باي ستريت، لوريل، كاليفورنيا؟
يظهر رقم المنزل على يمين العنوان، وليس اليسار كما هو مطلوب. هذا يجعل رقم المنزل يبدو أشبه بالبريد الغريب الرمز. يمكن أن تحدث المشكلة نفسها في حالة تضمين نص من اليمين إلى اليسار في رسالة يستخدم اتجاه النص LTR.
الشرح والحل
تحدث المشكلة في هذا المثال لأن أداة تنسيق النص لا تحديد أن "15" جزءًا من العنوان، لذلك لا يمكن للنظام تحديد ما إذا كان "15" هو جزء من نص RTL يأتي قبله أو نص LTR الذي يأتي بعده.
لحلّ هذه المسألة، استخدِم الطريقة unicodeWrap()
من BidiFormatter
.
الصف. تكتشف هذه الطريقة اتجاه السلسلة وتلتفها في يونيكود
أحرف التنسيق التي تعلن عن هذا الاتجاه.
يوضح مقتطف الرمز التالي كيفية استخدام
unicodeWrap()
:
Kotlin
val mySuggestion = "15 Bay Street, Laurel, CA" val myBidiFormatter: BidiFormatter = BidiFormatter.getInstance() // The "did_you_mean" localized string resource includes // a "%s" placeholder for the suggestion. String.format(getString(R.string.did_you_mean), myBidiFormatter.unicodeWrap(mySuggestion))
Java
String mySuggestion = "15 Bay Street, Laurel, CA"; BidiFormatter myBidiFormatter = BidiFormatter.getInstance(); // The "did_you_mean" localized string resource includes // a "%s" placeholder for the suggestion. String.format(getString(R.string.did_you_mean), myBidiFormatter.unicodeWrap(mySuggestion));
نظرًا لأن "15" يظهر الآن داخل النص تم تعريفه على أنه LTR، يتم عرضه في الموضع الصحيح:
صدأ الحديد 2: 15 شارع باي، لوريل، كاليفورنيا?
استخدِم الطريقة unicodeWrap()
في
كل جزء من النص الذي تدرجه في رسالة مترجمة إلا عندما ينطبق أحد الشروط التالية:
- يتم إدراج النص في سلسلة يمكن للجهاز قراءتها، مثل معرف موارد منتظم (URI) أو استعلام SQL.
- أنت تعلم أن جزء النص ملتف بالفعل بشكل صحيح.
ملاحظة: إذا كان تطبيقك يستهدف الإصدار 4.3 من نظام التشغيل Android (المستوى 18 من واجهة برمجة التطبيقات) أو
أعلى، يُرجى استخدام إصدار BidiFormatter
الموجود في
إطار عمل Android. وإلا، فاستخدم إصدار
تم العثور على BidiFormatter
في "مكتبة الدعم".
تنسيق الأرقام
استخدام التنسيق السلاسل، وليس طلبات الطريقة، لتحويل الأرقام إلى سلاسل في ملف المنطق:
Kotlin
var myIntAsString = "$myInt"
Java
String myIntAsString = String.format("%d", myInt);
يعمل هذا على تنسيق الأرقام بشكل مناسب للغتك، مما قد تضمين استخدام مجموعة مختلفة من الأرقام.
عند استخدام
String.format()
لإنشاء
استعلام SQL (لغة الاستعلام البنيوية) على جهاز تم تعيينه على لغة تستخدم مجموعة الأرقام الخاصة بها، مثل الفارسية
ومعظم اللغات العربية، تحدث مشكلات إذا كان هناك أي من معاملات طلب البحث
أرقامًا. وذلك لأن الرقم يتم تنسيقه بأرقام اللغة،
هذه الأرقام غير صالحة في SQL.
للحفاظ على الأرقام بتنسيق ASCII وإبقاء استعلام SQL صالحًا، عليك بدلاً من ذلك استخدام
الإصدار المثقل من
String.format()
الذي
على اللغة كمعلمة أولى. استخدام وسيطة اللغة
Locale.US
دعم تنسيق النسخ المطابق
يفضل الأشخاص الذين يستخدمون النصوص البرمجية من اليمين إلى اليسار واجهة مستخدم من اليمين إلى اليسار، والتي تشمل القوائم التي تمت محاذاتها إلى اليمين، والنص الذي تمت محاذاته لليمين، والأسهم للأمام التي تشير إلى غادر.
يوضح الشكل 4 التباين بين إصدار LTR للشاشة داخل تطبيق "الإعدادات" ونظيره من اليمين إلى اليسار:
![تتم محاذاة منطقة الإشعارات إلى اليمين بالقرب من الزاوية العلوية اليمنى،
يكون زر القائمة في شريط التطبيقات بالقرب من أعلى الجانب الأيمن،
تتم محاذاة المحتوى في الجزء الرئيسي من الشاشة إلى اليسار ويظهر
LTR وزر الرجوع بالقرب من الزاوية السفلية اليسرى
يشير إلى اليسار.](https://developer.android.com/static/images/training/basics/ltr-display.png?authuser=19&hl=ar)
![محاذاة منطقة الإشعارات لليسار بالقرب من أعلى الجانب الأيسر،
زر القائمة في شريط التطبيق بالقرب من أعلى الجانب الأيسر، سيتم عرض
في الجزء الرئيسي من الشاشة تتم محاذاة اليمين
ويظهر بدلاً من ذلك،
يكون زر الرجوع بالقرب من أسفل الجانب الأيمن ويشير إلى
اليمين](https://developer.android.com/static/images/training/basics/rtl-display.png?authuser=19&hl=ar)
عند إضافة دعم من اليمين إلى اليسار (RTL) إلى تطبيقك، احرِص على النقاط التالية في الاعتبار:
- لا تتوفّر ميزة "النسخ المطابق للنص من اليمين إلى اليسار" إلا في التطبيقات عند استخدامها على الأجهزة التي تعمل بنظام التشغيل Android. Android 4.2 (المستوى 17 من واجهة برمجة التطبيقات) أو الإصدارات الأحدث للتعرّف على كيفية استخدام النسخ المطابق للنص على الأجهزة الأقدم، راجِع تقديم الدعم للتطبيقات القديمة في هذا الدليل.
- لاختبار ما إذا كان تطبيقك يتيح استخدام اتجاه النص من اليمين إلى اليسار، إجراء اختبار باستخدام خيارات المطوّرين كما هو موضّح في هذا الدليل ودعوة المستخدمين الذين يستخدمون النصوص البرمجية من اليمين إلى اليسار لاستخدام تطبيقك
ملاحظة: لعرض إرشادات التصميم الإضافية المتعلقة النسخ المطابق للتخطيط، بما في ذلك قائمة بالعناصر غير المناسبة وغير المناسبة على الجهاز وفي السحابة الإلكترونية الاتجاه الثنائي إرشادات التصميم المتعدد الأبعاد.
لمحاكاة تنسيق واجهة المستخدم في تطبيقك بحيث يظهر من اليمين إلى اليسار بلغة من اليمين إلى اليسار، لإكمال الخطوات الواردة في الأقسام التالية.
تعديل الإصدار وملفات البيان
يمكنك تعديل ملف build.gradle
وملف بيان التطبيق الخاصَين بوحدة تطبيقك.
على النحو التالي:
build.gradle (Module: app)
Groovy
android { ... defaultConfig { targetSdkVersion 17 // Or higher ... } }
Kotlin
android { ... defaultConfig { targetSdkVersion(17) // Or higher ... } }
AndroidManifest.xml
<manifest ... > ... <application ... android:supportsRtl="true"> </application> </manifest>
ملاحظة: إذا كان تطبيقك يستهدف الإصدار 4.1.1 من نظام التشغيل Android (المستوى 16 من واجهة برمجة التطبيقات) أو
الأقل، يتم تجاهل السمة android:supportsRtl
إلى جانب أي
قيم السمتين start
وend
التي تظهر في
ملفات تخطيط التطبيق. في هذه الحالة، لا يحدث النسخ المطابق لتخطيط RTL
تلقائيًا في تطبيقك.
تعديل الموارد الحالية
تحويل left
وright
إلى start
و
end
، على التوالي، في ملفات موارد التنسيق الحالية.
يتيح ذلك لإطار العمل مواءمة عناصر واجهة المستخدم في تطبيقك استنادًا إلى
إعدادات اللغة لدى المستخدم.
ملاحظة: قبل تعديل الموارد، تعرَّف على كيفية توفير الدعم للتطبيقات القديمة، أو التطبيقات التي تستهدف الإصدار 4.1.1 من نظام التشغيل Android (المستوى 16 من واجهة برمجة التطبيقات) والإصدارات الأقدم.
لاستخدام إمكانيات محاذاة النص من اليمين إلى اليسار في إطار العمل، عليك تغيير السمات في ملفات التخطيط التي تظهر في الجدول 1.
الجدول 1. تتسم السمات إلى الاستخدام عندما يتيح تطبيقك عدة اتجاهات نصية
يوضح الجدول 2 كيفية تعامل النظام مع سمات محاذاة واجهة المستخدم بناءً على
إصدار حزمة تطوير البرامج (SDK) المستهدَف، سواء كان السمتَين left
وright
وما إذا كانت السمتين start
وend
محددة.
الجدول 2. الاستناد إلى سلوك محاذاة عناصر واجهة المستخدم في إصدار حزمة تطوير البرامج (SDK) المستهدَف والسمات المحدَّدة
|
هل تم تحديد المسار الأيمن والأيسر؟ | هل تم تحديد البداية والنهاية؟ | النتيجة |
---|---|---|---|
نعم | نعم | نعم |
يتم استخدام start وend ، ويتم إلغاء
left وright
|
نعم | نعم | لا | يتم استخدام left وright . |
نعم | لا | نعم | يتم استخدام start وend . |
لا | نعم | نعم |
يتم استخدام left وright (start
يتم تجاهل end )
|
لا | نعم | لا | يتم استخدام left وright . |
لا | لا | نعم |
يتم تحويل start وend إلى left و
right
|
إضافة مراجع متعلّقة بالتوجيهات واللغات
تتضمن هذه الخطوة إضافة إصدارات معينة من التخطيط والعناصر القابلة للرسم قيم موارد تحتوي على قيم مخصصة للغات مختلفة والاتجاهات النصية.
في Android 4.2 (المستوى 17 من واجهة برمجة التطبيقات) والإصدارات الأحدث، يمكنك استخدام واجهة برمجة التطبيقات -ldrtl
.
(layout-direction-right-to-left) و-ldltr
مؤهلات الموارد (layout-direction-left-to-right). للرجوع إلى الخلف
التوافق مع الموارد الحالية، تستخدم إصدارات Android القديمة
مؤهلات اللغة للمورد لاستنتاج اتجاه النص الصحيح.
لنفترض أنك تريد إضافة ملف تخطيط معين لدعم النصوص البرمجية من اليمين إلى اليسار،
مثل العبرية والعربية والفارسية. للقيام بذلك، أضف
دليل layout-ldrtl/
في دليل res/
، باسم
كما هو موضح في المثال التالي:
res/ layout/ main.xml This layout file is loaded by default. layout-ldrtl/ main.xml This layout file is loaded for languages using an RTL text direction, including Arabic, Persian, and Hebrew.
إذا كنت ترغب في إضافة إصدار معين من التخطيط تم تصميمه فقط بنص عربي، تبدو بنية الدليل كما يلي:
res/ layout/ main.xml This layout file is loaded by default. layout-ar/ main.xml This layout file is loaded for Arabic text. layout-ldrtl/ main.xml This layout file is loaded only for non-Arabic languages that use an RTL text direction.
ملاحظة: تكون للموارد الخاصة بلغات معيّنة الأولوية على موارد خاصة بتوجيه التنسيق، والتي لها الأولوية على الموارد التلقائية الموارد.
استخدام التطبيقات المصغّرة المتوافقة
بدءًا من Android 4.2 (المستوى 17 من واجهة برمجة التطبيقات)، أصبحت معظم عناصر واجهة المستخدم في إطار العمل متوافقة مع التنسيق من اليمين إلى اليسار.
اتجاه النص تلقائيًا. ومع ذلك، هناك العديد من عناصر إطار العمل، مثل
ViewPager
، لا يتيح استخدام النص من اليمين إلى اليسار.
اتجاهك.
وتتوافق أدوات الشاشة الرئيسية مع اتجاه النص من اليمين إلى اليسار طالما
وتتضمن ملفات البيان المقابلة تعيين السمة
android:supportsRtl="true"
توفير الدعم للتطبيقات القديمة
إذا كان تطبيقك يستهدف الإصدار 4.1.1 (المستوى 16 من واجهة برمجة التطبيقات) أو الإصدارات الأقدم، يجب تضمين
left
وright
بالإضافة إلى
start
وend
للتحقق مما إذا كان التخطيط يحتاج إلى استخدام اتجاه النص من اليمين إلى اليسار، استخدم المنطق التالي:
Kotlin
private fun shouldUseLayoutRtl(): Boolean { return if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) { View.LAYOUT_DIRECTION_RTL == layoutDirection } else { false } }
Java
private boolean shouldUseLayoutRtl() { if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) { return View.LAYOUT_DIRECTION_RTL == getLayoutDirection(); } else { return false; } }
ملاحظة: لتجنّب مشاكل التوافق، استخدِم الإصدار 23.0.1. أو أعلى من أجهزة Android أدوات إنشاء حِزم SDK:
الاختبار باستخدام ميزة "خيارات المطوّرين"
بالنسبة إلى الأجهزة التي تعمل بالإصدار 4.4 من نظام التشغيل Android (المستوى 19 من واجهة برمجة التطبيقات) أو الإصدارات الأحدث، يمكنك تفعيل فرض اتجاه التنسيق من اليمين إلى اليسار في خيارات المطوّرين على الجهاز فقط هذا الإعداد تتيح لك الاطّلاع على النص الذي يستخدم نصوص LTR، مثل النص الإنجليزي، باللغتَين من اليمين إلى اليسار. الحالي.
تعديل منطق التطبيق
يصف هذا القسم جوانب معيّنة من منطق تطبيقك يتم تحديثه عند تكييف تطبيقك للتعامل مع اتجاهات متعددة للنص.
تغييرات المواقع
لمعالجة تغيير في أي خاصية ذات صلة بـ RTL، مثل التنسيق
الاتجاه أو معلمات التنسيق أو المساحة المتروكة أو اتجاه النص أو محاذاة النص أو
موضع قابل للرسم - استخدم
onRtlPropertiesChanged()
معاودة الاتصال. تتيح لك معاودة الاتصال هذه الحصول على اتجاه التنسيق الحالي
تعديل كائنات View
في النشاط وفقًا لذلك
المشاهدات
إذا كنت تقوم بإنشاء أداة واجهة مستخدم ليست جزءًا مباشرًا من عرض التسلسل الهرمي، مثل مربع الحوار أو عنصر واجهة المستخدم الشبيهة بشرائح الخبز، اضبط اتجاه التخطيط اعتمادًا على السياق. مقتطف الرمز التالي يوضح كيفية إكمال هذه العملية:
Kotlin
val config: Configuration = context.resources.configuration view.layoutDirection = config.layoutDirection
Java
final Configuration config = getContext().getResources().getConfiguration(); view.setLayoutDirection(config.getLayoutDirection());
تتطلب عدة طرق لفئة View
سمة إضافية
الاعتبار:
onMeasure()
- قد تختلف قياسات عدد المشاهدات حسب اتجاه النص.
onLayout()
- إذا أنشأتَ تنفيذ التنسيق الخاص بك، عليك طلب
super()
في إصدارonLayout()
والتكيف منطقك المخصص لدعم النصوص البرمجية من اليمين إلى اليسار. onDraw()
- في حالة تنفيذ طريقة عرض مخصّصة أو إضافة وظائف متقدمة إلى
للرسم، يجب تحديث التعليمات البرمجية
لتوافق النصوص البرمجية من اليمين إلى اليسار. يمكنك استخدام
الرمز التالي لتحديد ما إذا كان التطبيق المصغر في وضع من اليمين إلى اليسار:
Kotlin
// On devices running Android 4.1.1 (API level 16) and lower, // you can call the isLayoutRtl() system method directly. fun isLayoutRtl(): Boolean = layoutDirection == LAYOUT_DIRECTION_RTL
Java
// On devices running Android 4.1.1 (API level 16) and lower, // you can call the isLayoutRtl() system method directly. public boolean isLayoutRtl() { return (getLayoutDirection() == LAYOUT_DIRECTION_RTL); }
قابل للرسم
إذا كان لديك عنصر قابل للرسم تحتاج إلى النسخ المطابق لتخطيط من اليمين إلى اليسار، أكمل استنادًا إلى إصدار Android الذي يعمل على الجهاز، اتّبِع إحدى هذه الخطوات:
-
بالنسبة إلى الأجهزة التي تعمل بنظام التشغيل Android 4.3 (المستوى 18 لواجهة برمجة التطبيقات) والإصدارات الأقدم،
لإضافة وتحديد ملفات موارد
-ldrtl
. -
في الإصدار 4.4 من نظام التشغيل Android (المستوى 19 لواجهة برمجة التطبيقات) والإصدارات الأحدث، استخدم
android:autoMirrored="true"
عند تحديد النص القابل للرسم، التي تتيح للنظام معالجة النسخ المطابق لتخطيط RTL نيابةً عنك.ملاحظة: تعمل
android:autoMirrored
لا تعمل إلا مع العناصر البسيطة القابلة للرسم التي يكون فيها النسخ المطابق ثنائي الاتجاه هي مجرد انعكاس رسومي للعناصر القابلة للرسم بالكامل. إذا كان تصميمك ويحتوي على عناصر متعددة، أو إذا كان يعكس تغييرات قابلة للرسم التفسير، يمكنك إجراء النسخ المطابق بنفسك. في كل مرة راجع مع خبير ثنائي الاتجاه لتحديد ما إذا كان تكون العناصر القابلة للرسم المعكوسة منطقية للمستخدمين.
الجاذبية
إذا كان رمز تنسيق التطبيق يستخدم Gravity.LEFT
أو
Gravity.RIGHT
، تغيير هذه الخيارات
القيم إلى Gravity.START
Gravity.END
على التوالي.
إذا كان لديك رمز Kotlin أو Java، فإن هذا يعتمد على
مواقع Gravity.LEFT
أو Gravity.RIGHT
،
يمكنك تكييفه ليعمل مع هذا التغيير من خلال تعيين absoluteGravity
لمطابقة
layoutDirection
على سبيل المثال، إذا كنت تستخدم الرمز التالي:
Kotlin
when (gravity and Gravity.HORIZONTAL_GRAVITY_MASK) { Gravity.LEFT -> { // Handle objects that are left-aligned. } Gravity.RIGHT -> { // Handle objects that are right-aligned. } }
Java
switch (gravity & Gravity.HORIZONTAL_GRAVITY_MASK) { case Gravity.LEFT: // Handle objects that are left-aligned. break; case Gravity.RIGHT: // Handle objects that are right-aligned. break; }
قم بتغييره إلى ما يلي:
Kotlin
val absoluteGravity: Int = Gravity.getAbsoluteGravity(gravity, layoutDirection) when (absoluteGravity and Gravity.HORIZONTAL_GRAVITY_MASK) { Gravity.LEFT -> { // Handle objects that are left-aligned. } Gravity.RIGHT -> { // Handle objects that are right-aligned. } }
Java
final int layoutDirection = getLayoutDirection(); final int absoluteGravity = Gravity.getAbsoluteGravity(gravity, layoutDirection); switch (absoluteGravity & Gravity.HORIZONTAL_GRAVITY_MASK) { case Gravity.LEFT: // Handle objects that are left-aligned. break; case Gravity.RIGHT: // Handle objects that are right-aligned. break; }
هذا يعني أنه يمكنك الاحتفاظ بالتعليمات البرمجية الحالية التي تعالج المحاذاة لليسار
المحاذاة إلى اليمين، حتى إذا كنت تستخدم start
end
لقيم الجاذبية.
ملاحظة: عند تطبيق إعدادات الجاذبية، استخدِم
إصدار تم تحميله بشكل زائد من Gravity.apply()
ويتضمن
الوسيطة layoutDirection
.
الهوامش والمساحة المتروكة
لدعم النصوص البرمجية من اليمين إلى اليسار في تطبيقك، اتّبِع أفضل الممارسات التالية ذات الصلة قيم الهامش والمساحة المتروكة:
-
استخدام
getMarginStart()
وgetMarginEnd()
بدلاً من السمة الخاصة بالاتجاه تعادلleftMargin
rightMargin
-
عند استخدام
setMargins()
، استبدِل قيمleft
بـright
وسيطة إذا رصد تطبيقك نصوصًا برمجية من اليمين إلى اليسار. -
إذا كان تطبيقك يتضمّن منطقًا مخصّصًا للمساحة المتروكة، عليك إلغاء
setPadding()
وsetPaddingRelative()
إتاحة إعدادات اللغة المخصّصة حسب التطبيقات
في كثير من الحالات، يضبط المستخدمون متعددو اللغات لغة النظام على لغة واحدة - مثل الإنجليزية - ولكن ويريد تحديد لغات أخرى لتطبيقات معينة، مثل الهولندية أو الصينية أو الهندية. للمساعدة التطبيقات تجربة أفضل لهؤلاء المستخدمين، يقدّم Android 13 الميزات التالية التطبيقات التي تتيح لغات متعددة:
-
إعدادات النظام: موقع مركزي يمكن للمستخدمين من خلاله اختيار اللغة المفضلة في كل تطبيق.
يجب أن يفصح تطبيقك عن سمة
android:localeConfig
في لإخبار النظام بأنه يدعم لغات متعددة. لمزيد من المعلومات، يُرجى مراجعة تعليمات إنشاء مورد والإقرار بذلك في ملف البيان لتطبيقك. -
واجهات برمجة التطبيقات الإضافية: واجهات برمجة التطبيقات العامة هذه، مثل
setApplicationLocales()
أوgetApplicationLocales()
الطرق فيLocaleManager
، السماح للتطبيقات بضبط لغة مختلفة عن لغة النظام في وقت التشغيل.يمكن للتطبيقات التي تستخدم أدوات اختيار اللغة المخصّصة داخل التطبيق استخدام واجهات برمجة التطبيقات هذه لمنح المستخدمين تجربة مستخدم متسقة بغض النظر عن المكان الذي يختارون اللغة فيه والتفضيلات. كما تساعدك واجهات برمجة التطبيقات العامة في تقليل مقدار الرموز النموذجية، فهي تدعم حِزم APK المجزّأة. كما تتيح أيضًا ميزة التحميل التلقائي للتطبيقات لتخزين إعدادات لغة المستخدم على مستوى التطبيق.
تتوفّر أيضًا واجهات برمجة تطبيقات مكافئة للتوافق مع الأنظمة القديمة مع إصدارات Android السابقة. في AndroidX. ننصح باستخدام Appcompat 1.6.0-beta01 أو أعلى.
لمزيد من المعلومات، يُرجى الاطّلاع على تعليمات بدء تنفيذ API.
انظر أيضًا
مصادر إضافية
لمزيد من المعلومات حول التوافق مع الأجهزة القديمة، يمكنك الاطّلاع على المراجع التالية: