تخصيص واجهة مستخدم تطبيقك حسب الجنس النحوي

يتحدّث 3 مليارات شخص لغات جنسانية: وهي لغات تتغيّر فيها فئاتها النحوية، مثل الأسماء والأفعال والصفات وحروف الجر، وفقًا للجنس الذي يحدّده الشخص أو الشيء الذي تتحدث عنه. في العادة، تستخدم العديد من اللغات التي تراعي الجنس النوع النحوي الذكوري كجنس تلقائي أو عام.

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

لمساعدتك في إنشاء واجهة مستخدم تركِّز على المستخدم للغات التي تراعي نوع الجنس، يمكنك استخدام نظام Android 14 تقدم واجهة برمجة التطبيقات Grammatical Inflection API، والتي تتيح لك إمكانية إضافة دعم معرفة الجنس بدون إعادة ضبط تطبيقك.

مثال على التحوّل إلى الجنس النحوي

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

لتقديم عبارة مماثلة باللغة الفرنسية، هناك بضعة خيارات:

  • صيغة مخاطبة مذكّرة: "Vous êtes abonné à..." (الإنجليزية: "أنت مشترك في...")
  • صيغة معبِّرة بصيغة نسائية: "Vous êtes abonnée à..." (الإنجليزية: "أنت مشترك في...")
  • صياغة محايدة تتجنّب الالتباس: "Abonnement à...activé" (الإنجليزية: "الاشتراك في ... مفعّل")

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

وفي هذه الحالات، تقلّل واجهة برمجة التطبيقات Grammatical Inflection API من الجهد المبذول لعرض تناسب الجنس النحوي للمشاهد - أي الشخص الذي عرض واجهة المستخدم، وليس مع من يتم التحدث عنه. لعرض معلومات مخصَّصة للمستخدمين الترجمات في تطبيقك، وإضافة ترجمات معكوسة لكل الجنس النحوي للغات المتأثرة ثم استخدم GrammaticalInflectionManager واجهة برمجة التطبيقات لتعديل الترجمات التي تظهر لكل مستخدم.

وفي العديد من اللغات، ينطبق الجنس النحوي أيضًا على الأسماء العادية بالإضافة إلى للأشخاص. على سبيل المثال، كلمة "كرسي" باللغة الفرنسية هي "مؤنث"، في حين أن كلمة "كرسي" باللغة الفرنسية كلمة oiseau (طائر) مذكرة. في المواقف الأخرى بخلاف مخاطبة المستخدم، يجب عليك استخدام واجهة برمجة تطبيقات ICU SelectFormat الحالية.

تنفيذ واجهة برمجة التطبيقات

بعد أن يذكر المستخدم جنسه النحوي (على سبيل المثال، إما من خلال قسم الإعدادات في التطبيق أو سير عمل إعداد المستخدم)، يمكنك استخدام طريقة setRequestedApplicationGrammaticalGender(int) لتخزين القيمة في إعدادات الموارد بتطبيقك.

على سبيل المثال، إذا كنت تريد تعيين الجنس النحوي المفضل للمستخدم على مؤنث، قد تطلب من المستخدم تحديد الجنس النحوي الذي يفضله ثم تستدعي واجهة برمجة التطبيقات:

Kotlin

// Set app's grammatical gender to feminine
val gIM = mContext.getSystemService(GrammaticalInflectionManager::class.java)
gIM.setRequestedApplicationGrammaticalGender(
    Configuration.GRAMMATICAL_GENDER_FEMININE)

Java

// Set app's grammatical gender to feminine
GrammaticalInflectionManager gIM =
    mContext.getSystemService(GrammaticalInflectionManager.class);
gIM.setRequestedApplicationGrammaticalGender(
    Configuration.GRAMMATICAL_GENDER_FEMININE);

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

<activity android:name=".TestActivity"
              android:configChanges="grammaticalGender"
              android:exported="true">
</activity>

إذا كان تطبيقك بحاجة إلى التحقّق من الجنس النحوي في المورد الحالي من الإعدادات، يمكنك استخدام الطريقة getApplicationGrammaticalGender() لاستردادها:

Kotlin

val gIM = mContext.getSystemService(GrammaticalInflectionManager::class.java)
val grammaticalGender = gIM.getApplicationGrammaticalGender()

Java

GrammaticalInflectionManager gIM =
    mContext.getSystemService(GrammaticalInflectionManager.class);
int grammaticalGender = gIM.getApplicationGrammaticalGender();

إضافة ترجمات للغات ذات الجنس النحوي

لتوفير نص مترجم للّغات ذات الجنس النحوي، أنشئ الموارد البديلة وإلحاق المؤهِّل النحوي للجنس بعد اسم اللغة مباشرةً لتلك اللغات. يعرض الجدول التالي القيم المحتملة:

المؤهِّل قيمة السلسلة مثال (الفرنسية fr)
صيغة مخاطبة مؤنثة feminine res/values-fr-feminine/strings.xml
صيغة مخاطبة مذكّرة masculine res/values-fr-masculine/strings.xml
صيغة مخاطبة محايدة neuter res/values-fr-neuter/strings.xml

يجب عدم تضمين سوى السلاسل التي تدعم التصريف النحوي حول الجنس في ملفات الموارد هذه. يجب أن تحتوي كل السلاسل على قيمة في المورد التلقائي يحتوي على سلاسل أخرى مترجَمة. هذه الترجمة التلقائية هي تظهر في كل مرة لا تتوفر فيها ترجمة تتأثّر بالجنس.

في المثال الذي قدَّمته للفرنساوي سابقًا، ستكون الصياغة المحايدة هي قيمة السلسلة في الموارد التلقائية res/values-fr/strings.xml الملف. توضح مقتطفات الرمز التالية كيف سيتم تنسيق كل ملف مورد. لاستيعاب جميع الاختلافات النحوية من المثال باللغة الفرنسية:

صيغة مخاطبة مؤنثة

أدرِج السلسلة بتنسيق مؤنث في ملف موارد res/values-fr-feminine/strings.xml:

<resources>
    ...
    <string name="example_string">Vous êtes abonnée à...</string>
</resources>

صيغة مخاطبة مذكّرة

أدرِج السلسلة التي تحمل علامة المذكر في ملف موارد res/values-fr-masculine/strings.xml:

<resources>
    ...
    <string name="example_string">Vous êtes abonné à...</string>
</resources>

صيغة مخاطبة محايدة

ضمِّن السلسلة التلقائية في ملف موارد res/values-fr/strings.xml:

<resources>
    ...
    <string name="example_string">Abonnement à...activé</string>
</resources>