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

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

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

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

مثال على تحويل النص إلى كلام بدلالة نحوية

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

لتوفير عبارة مشابهة باللغة الفرنسية، هناك بعض الخيارات:

  • صيغة معبِّرة: "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>