دعم لغات وثقافات مختلفة

الإعلانات

دعم لغات وثقافات مختلفة

 

 

 

دعم لغات وثقافات مختلفة

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

يتم ترجمتها إلى اللغة الحالية. من الممارسات الجيدة الإبقاء على المصادر المخصصة للثقافة بشكلٍ منفصل عن بقية تطبيقك.

يحل الأندرويد المصادر الخاصة باللغة والثقافة بناءً على الإعدادات المحليه للنظام.

يمكنك تقديم الدعم لمختلف اللغات بإستخدام دليل المصادر في مشروع الأندرويد الخاص بك.

يمكنك تحديد المصادر المخصصة المناسبة لثقافة الأشخاص الذين يستخدمون تطبيقك. يمكنك توفير أي نوع من المصادر التي تناسب لغة وثقافة مستخدميك.

مثال، تعرض لقطة الشاشة التالية تطبيقاً يعرض سلسلة ومصادر رسوميات في الإعدادات المحلية (en_US) الإفتراضية للجهاز و الإعدادات المحليه الإسبانية (es_ES).

الشكل 1. التطبيق يستخدم مصادر مختلفة بناءً على اللغة الحالية

 

إذا قمت بإنشاء مشروعك بإستخدام أدوات الأندرويد SDK (اقرأ إنشاء مشروع الأندرويد)، ستقوم الأدوات بإنشاء دليل /res في المستوى الأعلى للمشروع.

بداخل دليل /res هذا توجد أدلة فرعية لأنواع المصادر المختلفة. هناك أيضاً بعض الملفات الإفتراضية..

مثل res/values/strings.xml ، والذي سيحمل قيم سلاسلك.

دعم اللغات المختلفة يتجاوز إستخدام المصادر الخاصة بالإعدادات المحلية. يختار بعض المستخدمين..

لغة تستخدم نصوص من اليمين إلى اليسار (RTL)، مثل اللغة العربية أو العبرية، لإعدادات واجهة المستخدم الخاصة بهم.

بينما يقوم مستخدمون آخرون بعرض أو إنشاء محتوى بلغة تستخدم نصوص من اليمين إلى اليسار RTL..

على الرغم من أنهم قاموا بتعيين لغة تستخدم نصوص من اليسار إلى اليمين LTR، مثل الإنجليزية..

كإعدادات لواجهة المستخدم الخاصة بهم. لدعم كلا النوعين من المستخدمين، يحتاج تطبيقك إلى إجراء ما يلي:

  • إستخدام مخطط لواجهة المستخدم للنصوص من اليمين إلى اليسار RTL للإعدادات..

المحلية التي تستخدم نصوص من اليمين إلى اليسار.

  • كشف وإعلان إتجاه البيانات النصية التي يتم عرضها داخل الرسائل المنسقة..

عادة، يمكنك فقط إستدعاء داله تحدد إتجاه بيانات النص من أجلك.

 

 

 

 

دعم لغات وثقافات مختلفة

 

إنشاء أدله للإعدادات المحليه وملفات للمصادر


لإضافة دعم لمزيد من اللغات، قم بإنشاء أدلة إضافية داخل /res. يجب أن يلتزم أسم كل دليل بالصيغة التاليه:

<resource type>-b+<language code>[+<country code>]

 

على سبيل المثال، القيم /values-b+es تحتوي على مصادر سلسلة للغات المحلية بإستخدام رمز اللغة es.

وبالمثل، يحتوي /mipmap-b+es+ES على أيقونات للإعدادات المحليه مع رمز اللغة es ورمز الدولة ES.

يقوم الأندرويد بتحميل المصادر المناسبة وفقاً للإعدادات المحلية للجهاز أثناء التشغيل. لمزيد من المعلومات، راجع توفير مصادر بديله.

بعد أن تقرر ماهي اللغات التي ستدعمها، قم بإنشاء أدله فرعية للمصدر والملفات. مثال:

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>

سلاسل اللغة الأسبانية (لغة محلية)، values-es/strings.xml/:

<resources>
    <string name="hello_world">¡Hola Mundo!</string>
</resources>

 

أيقونة علم الولايات المتحدة (اللغة الإفتراضية)، mipmap/country_flag.png/:

الشكل 2. الأيقونة المستخدمة للإعدادات الإفتراضية (en_US)

أيقونة علم إسبانيا (es_ES لغة محلية)، mipmap-b+es+ES/country_flag.png/:

الشكل 3. الأيقونة المستخدمة للإعدادات المحليه اللغة الإسبانيه es_ES

 

ملاحظة: يمكنك إستخدام مؤهل الإعدادات المحلية (أو أي مؤهل للتكوين) على أي نوع من أنواع المصادر، مثلاً لو أردت توفير نسخ مترجمة من رسوميات الصور النقطية. لمزيد من المعلومات، راجع الإعدادات المحليه.

 

 

 

إستخدم المصادر في تطبيقك


يمكنك الإشارة إلى المصادر الموجودة في الكود وملفات XML الأخرى بإستخدام سمة الاسم لكل مصدر.

في الكود، يمكنك الإشارة إلى أحد المصادر بإستخدام بناء الجملة

<R.<resource type>.<resource name .

هناك مجموعة متنوعة من الدوال التي تقبل مصدر بهذه الطريقة.
مثال:

KOTLIN

// Get a string resource from your app's Resources
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 from your app's Resources
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" />

 

 

 

 

تنسيق النص في الرسائل


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

لسوء الحظ، عند التعامل مع واجهات مستخدم تستخدم نصوص من اليمين إلى اليسار أو بيانات تستخدم نصوص من اليمين إلى اليسار..

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

يتم كتابة اللغات مثل العربية، العبرية، الفارسية، والأردية بشكلٍ عام من اليمين إلى اليسار.

ومع ذلك، تتم كتابة بعض عناصرها، مثل الأرقام و النص المضمّن من اليسار إلى اليمين، تكتب في بالإتجاه..

من اليسار إلى اليمين بداخل النص من اليمين إلى اليسار. تكون اللغات التي تستخدم النصوص من اليسار إلى اليمين..

بما في ذلك الإنجليزية، أيضاً ثنائية الإتجاه لأنها يمكن أن تحتوي على نصوص مضمنه من اليمين إلى اليسار..

والتي يجب عرضها في الإتجاه من اليمين إلى اليسار.

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

وهي تدرج بيانات نصية بلغة عشوائيه – وإتجاه نص عشوائي – بداخل الرسائل المحليه. غالباً لا يتضمن هذا المزيج من الإتجاهات..

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

 

على الرغم من أن معالجة النظام بشكل إفتراضي للنصوص ثنائية الإتجاه عادة ما تعرض النص كما هو متوقع..

فمن المحتمل ألا يتم عرض النص بشكل صحيح عندما يدرجه تطبيقك في رسالة محليه.

تعرض الحالات التالية أمثلة للحالات التي يُرجح ألا يظهر فيها النص بشكلٍ صحيح:

  • تم إدراجه في بداية الرسالة:

اسم_ الشخص ثم يتصل بك

  • يبدأ برقم، كما هو الحال في العناوين أو أرقام الهواتف:

987 654-3210

  • يبدأ بعلامات ترقيم، كما في رقم الهاتف:

19876543210+

  • ينتهي بعلامات ترقيم مثل:

هل أنت متأكد؟

  • يحتوي على كلا الإتجاهين بالفعل مثل:

كلمة banana هي كلمة إنجليزيه تعني موز.

 

مـثـال

افترض أن التطبيق يحتاج في بعض الأحيان إلى عرض الرسالة “هل تقصد s% ؟”، مع إدراج عنوان بدلاً من الرمز s% أثناء التشغيل.

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

عندما تكون لغة تستخدم هذا الإتجاه قيد الإستخدام. بالنسبة إلى واجهة المستخدم الإنجليزيه..

يجب أن تظهر الرساله على النحو التالي:

“Did you mean %s?”

ومع ذلك، قد يأتي الإقتراح من قاعدة بيانات لا تحتوي على نص بلغة الإعدادات المحلية.

مثال، إذا كان العنوان المعني يتعلق بمكان في كاليفورنيا، فسيظهر في قاعدة البيانات بإستخدام النص الإنجليزي.

إذا قمت بإدخال العنوان “15 Bay Street، Laurel، CA” في رسالة ذات نص بإتجاه من اليمين إلى اليسار دون تقديم أية تلميحات بخصوص إتجاه النص..

فإن النتيجة ستكون غير متوقعة أو غير صحيحة:

“15 شارع الخليج، Bay Street, Laurel, CA”

لاحظ أن رقم المنزل يظهر على يمين العنوان، وليس إلى اليسار كما هو محدد، ويجعل رقم المنزل يبدو وكأنه رمز بريدي غريب.

قد تحدث نفس المشكلة إذا قمت بتضمين نص ذو إتجاه من اليمين إلى اليسار بداخل رسالة تستخدم إتجاه نص من اليسار إلى اليمين.

 

 

 

 

الشرح والحل


تحدث المشكلة في المثال السابق لأن مُنسق النص لا يحدد أن الـ “15” هي جزء من العنوان، لذا لا يستطيع النظام ..

تحديد ما إذا كانت الـ “15” جزءاً من النص ذو الإتجاه من اليمين إلى اليسار والذي تأتي قبله أو جزء من النص ذو الإتجاه من اليسار إلى اليمين والذي تأتي بعده.

لحل هذه المشكلة، إستخدم الداله ()unicodeWrap ، الموجوده في فئة تنسيق النص ثنائي الإتجاه BidiFormatter..

في كل جزء من النص قمت بإدراجه في رسالة محليه. الأوقات الوحيدة التي لا يجب عليك فيها إستخدام الداله ()unicodeWrap تتضمن ما يلي:

  • يتم إدراج النص في سلسلة قابلة للقراءة آلياً، مثل إستعلامات URI أو SQL.
  • تعرف بالفعل أن قطعة النص ملتفه بشكلٍ صحيح.

تكشف دالة ()unicodeWrap إتجاه السلسلة و تقوم بلفها بتنسيق اليونيكود Unicode الذي يعلن هذا الإتجاه.

لأن الـ “15” تظهر الآن بداخل النص المُعلن كنص ذو إتجاه من اليسار إلى اليمين، يتم عرضه في الموضع الصحيح:

شارع الخليج 15 Bay Street، Laurel، CA؟

يوضح جزء الكود التالي كيفية إستخدام دالة ()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));

 

 

ملاحظة: إذا كان تطبيقك يستهدف الأندرويد 4.3 (مستوى واجهة برمجة التطبيقات 18) أو أعلى، فإستخدم نسخة “تنسيق النص ثنائي الإتجاه” BidiFormatter الموجوده في إطار عمل الأندرويد. وغير ذلك، إستخدم نسخة “تنسيق النص ثنائي الإتجاه” BidiFormatter الموجوده في مكتبة الدعم.

 

 

 

تنسيق الأرقام


إستخدم سلاسل التنسيق، وليس إستدعاءات الدوال، لتحويل الأرقام إلى سلاسل في منطق تطبيقك:

KOTLIN

var myIntAsString = "$myInt"

JAVA

String myIntAsString = String.format("%d", myInt);

 

سيؤدي ذلك إلى تنسيق الأرقام بشكلٍ مناسب مع الإعدادات المحلية، والتي قد تتضمن إستخدام مجموعة مختلفة من الأرقام.

عند إستخدامك للداله ()String.format لإنشاء إستعلام قاعدة بيانات SQL على جهاز يحتوي على الإعدادات المحليه الخاصة به..

و يستخدم مجموعة من الأرقام الخاصة به، مثل اللغة الفارسية ومعظم اللغات العربية، تحدث مشكلات..

إذا كانت أي من المعاملات “الباراميترات” للإستعلام عبارة عن أرقام. وهذا لأن الأرقام تم تنسيقها بصيغ الأرقام المحليه..

وهذه الصيغ غير صالحة في قاعدة البيانات SQL.

للحفاظ على الأرقام بتنسيق “آسكي” ASCII والحفاظ على إستعلام قاعدة بيانات SQL صالح، بدلاً من ذلك يجب إستخدام الإصدار المحمل إضافياً..

بتنسيق السلسله ()String.format والذي يتضمن الإعدادات المحلية كمعامل أول. يجب أن تكون وسيطة الإعدادات المحلية، اللغة المحليه.

الولايات المتحدة Locale.US.

 

 

 

دعم إنعكاس المخطط

 

الأشخاص الذين يستخدمون النصوص ذات الإتجاه من اليمين إلى اليسار يفضلون واجهة مستخدم من اليمين إلى اليسار..

والتي تتضمن قوائم على الجانب الأيمن، ونص بمحاذاة إلى اليمين، وسهم أمامي يشير إلى اليسار.

الشكل 4 يوضح التباين بين إصدار شاشة من اليسار إلى اليمين داخل الإعدادات ونظيرتها ذات الإتجاه من اليمين إلى اليسار:

 

 

 

 

 

 

 

 

 

 

 

 

 

الرقم 4. متغيرات من اليسار إلى اليمين و من اليمين إلى اليسار من الشاشة.

 

 

عند إضافة دعم النص من اليمين إلى اليسار إلى تطبيقك، من المهم تحديد النقاط التالية:

  • إنعكاس النص من اليمين إلى اليسار مدعوم في التطبيقات فقط عندما تستخدم على الأجهزة التي تعمل بنظام التشغيل أندرويد 4.2..

(مستوى واجهة برمجة التطبيقات 17) أو أعلى. لمعرفة كيفية دعم إنعكاس النص على الأجهزة القديمة..

راجع توفير الدعم للتطبيقات القديمة.

و قم بدعوة الأشخاص الذين يستخدمون نصوص ذات إتجاه من اليمين إلى اليسار لإستخدام تطبيقك.

 

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

لإنعكاس مخطط واجهة المستخدم في تطبيقك بحيث يظهر من اليمين إلى اليسار في لغة ذات إتجاه من اليمين إلى اليسار..

أكمل الخطوات الواردة في الأقسام التالية.

 

 

 

قم بتعديل ملفات البناء والإيضاح


قم تعديل نموذج ملف البناء build.ragdle لتطبيقك وملف إيضاح التطبيق كما يلي:

build.gradle (مسار النموذج: التطبيق) (Module: app):

android {
    ...
    defaultConfig {
        targetSdkVersion 17 // Or higher
        ...
    }
}

AndroidManifest.xml

<manifest ... >
    ...
    <application ...
        android:supportsRtl="true">
    </application>
</manifest>

 

 

ملاحظة: إذا كان تطبيقك يستهدف أندرويد 4.1.1 (مستوى API 16) أو أقل، سيتم تجاهل السمه android:supportsRtl..

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

 

 

 

دعم لغات وثقافات مختلفة

تحديث المصادر الحالية


قم بتحويل اليسار واليمين إلى البدايه والنهاية، على التوالي، في كل ملف من ملفات مصادر المخطط الموجودة لديك.

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

ملاحظة: قبل تحديث مصادرك، تعلم كيفية توفير الدعم للتطبيقات القديمة، أو التطبيقات التي تستهدف أندرويد 4.1.1 (مستوى واجهة برمجة التطبيقات 16) وأقل.

لإستخدام قدرات المحاذاة من اليمين إلى اليسار لإطار العمل، قم بتغيير السمات في ملفات مخططك إلى السمات التي تظهر في الجدول 1.

 

جدول 1. السمات التي يجب عليك إستخدامها عندما يدعم تطبيقك عدة اتجاهات نصية

سمة تدعم النصوص من اليسار إلى اليمين فقط سمة تدعم النصوص من اليسار إلى اليمين ومن اليمين إلى اليسار
android:gravity=”left” android:gravity=”start”
android:gravity=”right” android:gravity=”end”
android:layout_gravity=”left” android:layout_gravity=”start”
android:layout_gravity=”right” android:layout_gravity=”end”
android:paddingLeft android:paddingStart
android:paddingRight android:paddingEnd
android:drawableLeft android:drawableStart
android:drawableRight android:drawableEnd
android:layout_alignLeft android:layout_alignStart
android:layout_alignRight android:layout_alignEnd
android:layout_marginLeft android:layout_marginStart
android:layout_marginRight android:layout_marginEnd
android:layout_alignParentLeft android:layout_alignParentStart
android:layout_alignParentRight android:layout_alignParentEnd
android:layout_toLeftOf android:layout_toStartOf
android:layout_toRightOf android:layout_toEndOf

 

يوضح الجدول 2 كيفية معالجة النظام لسمات محاذاة واجهة المستخدم بناءً على نسخة SDK المستهدفه..

سواء كانت السمات اليمنى واليسرى محدده، و سواء كانت سمات البدايه والنهايه محددة.

 

جدول 2. سلوك محاذاة عناصر واجهة المستخدم بناءً على نسخة SDK المستهدفه والسمات المحددة

تستهدف أندرويد 4.2 (المستوى 17) أو أعلى  اليسار واليمين محدده؟ البدايه والنهايه محدده؟ النتيجه
نعم نعم نعم تحدد البدايه والنهايه، وتتجاوز اليمين واليسار.
نعم نعم لا تستخدم فقط اليمين واليسار.
نعم لا نعم تستخدم فقط البدايه والنهايه.
لا نعم نعم تستخدم اليمين واليسار (وتتجاهل البدايه والنهايه).
لا نعم لا تستخدم فقط اليمين واليسار.
لا لا نعم يتم تحديد البدايه والنهايه إلى اليمين واليسار.

 

 

 

إضافة الإتجاه و المصادر الخاصة باللغة


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

في نظام التشغيل أندرويد 4.2 (مستوى API 17) وأعلى، يمكنك إستخدام مؤهلات المصادر -ldrtl..

( وهو يعني مخطط ذو إتجاه من اليمين إلى اليسار) و-ldltr (وهو يعني مخطط ذو إتجاه من اليسار إلى اليمين).

للحفاظ على التوافق مع الإصدارات السابقة مع تحميل المصادر الحالية..

تستخدم الإصدارات الأقدم من الأندرويد مؤهلات اللغة المصدر لإستنتاج الإتجاه الصحيح للنص.

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

للقيام بذلك، تقوم بإضافة دليل مخطط – ذو إتجاه من اليمين إلى اليسار /layout-ldrtl في دليلك /res ، كما هو موضح في المثال التالي:

إذا كنت ترغب في إضافة نسخة محددة من المخطط المصمم للنص العربي فقط، فستصبح بنية الدليل كما يلي:

 

ملاحظة: تتمتع المصادر الخاصة باللغات بالأسبقية على المصادر الخاصة بإتجاه المخطط، والتي لها الأولوية على المصادر الإفتراضية.

 

 

دعم لغات وثقافات مختلفة

 

إستخدم الودجت (عناصر تحكم الواجهة الرسوميه) المدعومه

 

بدءاً من أندرويد 4.2 (مستوى واجهة برمجة التطبيقات 17)، معظم عناصر واجهة المستخدم تدعم إطارالنص من اليمين إلى اليسار تلقائياً.

ومع ذلك، فإن العديد من عناصر إطار العمل، مثل ViewPager، لا تدعم إتجاه النص من اليمين إلى اليسار.

ودجت الشاشه الرئيسيه تدعم إتجاه النص من اليمين إلى اليسار طالما أن ملفات إيضاحهم المطابقة تتضمن تعيين السمة "android:supportsRtl="true.

 

 

 

تقديم الدعم للتطبيقات القديمة

 

إذا كان تطبيقك يستهدف أندرويد 4.1.1 (مستوى واجهة برمجة التطبيقات 16) أو أقل..

قم أيضاً بتضمين السمات اليسرى واليمنى بالإضافة إلى سمات البداية والنهاية.

للتحقق ما إذا كان يجب على مخططك أن يستخدم إتجاه النص من اليمين إلى اليسار، أستخدم المنطق التالي:

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 أو الأحدث من أدوات بناء الأندرويد SDK.

 

 

إجراء إختبار بإستخدام خيارات المطورين

 

على الأجهزة التي تعمل بنظام أندرويد 4.4 (مستوى واجهة برمجة التطبيقات 19) أو أعلى، يمكنك..

تمكين “فرض المخطط بإتجاه من اليمين إلى اليسار” في خيارات المطورين على الجهاز. يسمح لك هذا الإعداد..

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

 

 

تحديث منطق التطبيق

يصف هذا القسم أماكن محددة في منطق تطبيقك والتي يجب تحديثها عند تكيف تطبيقك للتعامل مع إتجاهات النص المتعددة.

 

 

تغيير الخصائص

للتعامل مع تغيير في أي خاصية مرتبطة بالإتجاه من اليمين إلى اليسار – مثل إتجاه المخطط، معاملات “باراميترات” المخطط..

الحواشي، إتجاه النص، محاذاة النص، موضع الرسوميات – يمكنك إستدعاء ()onRtlPropertiesChanged .

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

 

 

المعاينه “Views”

إذا كنت تقوم بإنشاء عنصر تحكم واجهة مستخدم لا يمثل جزء مباشر من التسلسل الهرمي لطريقة عرض النشاط..

مثل مربع حوار أو شرائح “toast-like” عنصر واجهة مستخدم ، فقم بضبط إتجاه المخطط الصحيح وفقاً للسياق.

يوضح مقتطف الكود التالي كيفية إتمام هذه العملية:

KOTLIN

val config: Configuration = context.resources.configuration
view.layoutDirection = config.layoutDirection

JAVA

final Configuration config =
    getContext().getResources().getConfiguration();
view.setLayoutDirection(config.getLayoutDirection());

 

 

دعم لغات وثقافات مختلفة

 

تتطلب العديد من دوال فئة المعاينه مراعاة إضافيه:

()onMeasure دالة القياس

قد تختلف قياسات المعاينه وفقاً لإتجاه النص.

()onLayout  دالة المخطط

إذا قمت بإنشاء مخطط تطبيقك، فستحتاج إلى إستدعاء الداله ()super “إضافي” في نسخة ()onLayout الخاصة بك..

وتقوم بتكييف منطقك المخصص ليدعم النصوص المكتوبة من اليمين إلى اليسار.

()onDraw دالة الرسم

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

من اليمين إلى اليسار. إستخدم الكود التالي لتحديد ما إذا كان الودجت الخاص بك في وضع الإتجاه من اليمين إلى اليسار:

KOTLIN

// على الأجهزة التي تعمل بنسخة أندرويد 4.1.1 (المستوى 16) و أقل،

// يمكنك إستدعاء دالة النظام ()isLayoutRtl مباشرة.

// 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);
}

 

 

Drawables الرسوميات

 

إذا كانت لديك رسوميات يجب أن تعكس لتلائم مخطط من اليمين إلى اليسار، فأكمل إحدى هذه الخطوات بناءً على إصدار الأندرويد الذي يعمل على الجهاز:

  • في الأجهزة التي تعمل بنظام أندرويد 4.3 (مستوى واجهة برمجة التطبيقات 18) وأقل..

تحتاج إلى إضافة وتحديد ملفات مصادر المخطط ذو الإتجاه من اليمين إلى اليسار.

  • في الأجهزة التي تعمل بنظام أندرويد 4.4 (مستوى API 19) وأحدث، يمكنك إستخدام سمة الإنعكاس التلقائي "android:autoMirrored="true ..

عند تحديد رسومياتك، مما يسمح للنظام بالتعامل مع إنعكاس مخططات من اليمين إلى اليسار RTL من أجلك.

 

ملاحظة: لا تعمل سمة الإنعكاس التلقائي android:autoMirrored إلا مع الرسوميات البسيطة والتي إنعكاسها ثنائي الإتجاه هو ببساطة إنعكاس تصويري لكامل الرسوميه.

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

كلما أمكن، تحقق مع خبير في الإتجاه الثنائي لتحديد ما إذا كانت رسومياتك ذات إنعكاس يناسب المستخدمين.

 

 

دعم لغات وثقافات مختلفة

الجاذبية

 

إذا كان كود تطبيقك يستخدم Gravity.LEFT أو Gravity.RIGHT، فستحتاج إلى تغيير هذه القيم إلى Gravity.START وGravity.END، على التوالي.

مثال، إذا كنت تستخدم الكود التالي:

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;
}

 

هذا يعني أنه يمكنك الإحتفاظ بكودك الحالي الذي يتعامل مع قيم المحاذاة إلى اليمين والمحاذاة إلى اليسار..

حتى إذا كنت تستخدم البداية والنهاية لقيم الجاذبية.

ملاحظة: عند تطبيق إعدادات الجاذبية، إستخدم نسخة مزودة من ()Gravity.apply تتضمن وسيطة إتجاه المخطط layoutDirection.

 

 

الهوامش والحواشي

 

لدعم نصوص من اليمين إلى اليسار في تطبيقك، أتبع أفضل الممارسات المتعلقة بقيم الهوامش الحواشي:

  • إستخدم ()getMarginStart  و ()getMarginEnd  بدلاً من نظيرتها السمة الخاصة بالإتجاه، leftMargin و rightMargin.
  • عند إستخدام ()setMargins ، يمكنك تبديل قيم الوسيطتين اليسرى واليمنى إذا أكتشف تطبيقك نصوص تكتب من اليمين إلى اليسار.
  • إذا كان تطبيقك يتضمن منطق حواشي مخصص، فقم بتجاوز ()setPadding  و ()setPaddingRelative .

 

راجع أيضاً 

قائمة التحقق من الإعدادات المحليه
الإعدادات المحليه مع المصادر
خدمة ترجمة التطبيقات

 


للإطلاع على المقال باللغة الإنجليزية أضغط هنا.

الإعلانات