30억 명의 사용자가 성별이 지정된 언어를 사용합니다. 이 언어는 이야기하는 사람과 사물의 성별에 따라 문법적 카테고리(예: 명사, 동사, 형용사, 전치사)가 영향을 받는 언어입니다. 일반적으로 성별이 지정된 많은 언어에서 남성형 문법적 성별을 기본 성별이나 일반 성별로 사용합니다.
여성을 남성형 문법적 성별로 언급하는 등 잘못된 문법적 성별로 사용자를 언급하면 사용자의 실적과 태도에 부정적인 영향을 미칠 수 있습니다. 반면 사용자의 문법적 성별을 올바르게 반영하는 언어로 된 UI는 사용자 참여를 개선하고 보다 맞춤설정되고 자연스러운 사용자 환경을 제공할 수 있습니다.
성별이 지정된 언어의 사용자 중심 UI를 빌드할 수 있도록 Android 14에서는 앱 리팩터링 없이 문법적 성별에 관한 지원을 추가할 수 있는 Grammatical Inflection API를 도입합니다.
문법적 성별의 굴절 예
성별이 지정된 언어에서는 문법적 성별을 영어와 동일한 방식으로 처리할 수 없습니다. 예를 들어 사용자가 앱의 서비스를 구독하고 있음을 알리는 메시지를 영어로 작성하려면 '...을(를) 구독하고 있습니다'라는 단일 문구를 사용할 수 있습니다.
굴절이 나타나지 않는 중성적 문구: 'Abonnement à...activé' (영어: '... 구독 사용 설정됨')
영어와 마찬가지로 처음 두 가지 옵션은 사용자를 직접 대상으로 합니다. 하지만 프랑스어의 이 문법적 기능을 수용하는 메커니즘이 없다면 세 번째 옵션만 사용할 수 있습니다. 이는 메시지의 어조를 변경하고, 사용자 인터페이스에 표시하려는 것이 아닐 수도 있습니다.
이 경우 Grammatical Inflection API를 사용하면 뷰어의 문법적 성별(즉, 말하는 대상이 아니라 UI를 보는 사용자)을 기준으로 문자열을 표시하는 노력을 줄여줍니다. 앱에서 사용자에게 맞춤 번역을 표시하려면 영향을 받는 언어의 각 문법적 성별에 맞게 굴절된 번역을 추가한 다음 GrammaticalInflectionManager API를 사용하여 각 사용자에게 표시할 번역을 조정합니다.
많은 언어에서 문법적 성별은 사람 외에 일반 명사에도 적용됩니다. 예를 들어 프랑스어에서 chaise(의자)라는 단어는 여성형이고, oiseau(새)는 남성형입니다. 사용자를 대상으로 하는 것 이외에는 기존 ICU SelectFormat API를 사용할 수 있습니다.
예를 들어 사용자의 기본 문법적 성별을 여성으로 설정하려면 사용자에게 선호하는 문법적 성별을 선택하도록 요청한 후 API를 호출합니다.
Kotlin
// Set app's grammatical gender to femininevalgIM=mContext.getSystemService(GrammaticalInflectionManager::class.java)gIM.setRequestedApplicationGrammaticalGender(Configuration.GRAMMATICAL_GENDER_FEMININE)
Java
// Set app's grammatical gender to feminineGrammaticalInflectionManagergIM=mContext.getSystemService(GrammaticalInflectionManager.class);gIM.setRequestedApplicationGrammaticalGender(Configuration.GRAMMATICAL_GENDER_FEMININE);
다음은 구성 변경사항을 직접 처리하려는 경우 앱의 매니페스트 파일에서 이를 선언하는 방법을 보여주는 예입니다.
이 페이지에 나와 있는 콘텐츠와 코드 샘플에는 콘텐츠 라이선스에서 설명하는 라이선스가 적용됩니다. 자바 및 OpenJDK는 Oracle 및 Oracle 계열사의 상표 또는 등록 상표입니다.
최종 업데이트: 2025-07-27(UTC)
[[["이해하기 쉬움","easyToUnderstand","thumb-up"],["문제가 해결됨","solvedMyProblem","thumb-up"],["기타","otherUp","thumb-up"]],[["필요한 정보가 없음","missingTheInformationINeed","thumb-down"],["너무 복잡함/단계 수가 너무 많음","tooComplicatedTooManySteps","thumb-down"],["오래됨","outOfDate","thumb-down"],["번역 문제","translationIssue","thumb-down"],["샘플/코드 문제","samplesCodeIssue","thumb-down"],["기타","otherDown","thumb-down"]],["최종 업데이트: 2025-07-27(UTC)"],[],[],null,["# Personalize your app's UI with grammatical gender\n\n3 billion people speak *gendered languages* : languages where grammatical\ncategories---such as nouns, verbs, adjectives, and prepositions---inflect according\nto the gender of people and objects you talk to or about. Traditionally, many\ngendered languages use masculine grammatical gender as the default or *generic*\ngender.\n\nAddressing users in the wrong grammatical gender, such as addressing women in\nmasculine grammatical gender, can [negatively impact](https://www.nature.com/articles/s41539-021-00087-7)\ntheir performance and attitude. In contrast, a UI with language that correctly\nreflects the user's grammatical gender can improve user engagement and provide\na more personalized and natural-sounding user experience.\n\nTo help you build a user-centric UI for gendered languages, Android 14\nintroduces the Grammatical Inflection API, which lets you add support for\ngrammatical gender without refactoring your app.\n\nExample of inflection for grammatical gender\n--------------------------------------------\n\nIn gendered languages, grammatical gender can't be worked around the same way as\nit can in English. For example, in English to write a message telling the user\nthat they are subscribed to your app's service, you could use a single phrase:\n\"You are subscribed to...\".\n\nTo provide a similar phrase in French, there are a few options:\n\n- Masculine-inflected form: \"Vous êtes abonné à...\" (English: \"You are subscribed to...\")\n- Feminine-inflected form: \"Vous êtes abonnée à...\" (English: \"You are subscribed to...\")\n- Neutral phrasing that avoids inflection: \"Abonnement à...activé\" (English: \"Subscription to ... enabled\")\n\nSimilar to English, the first two options address the user directly. However,\nwithout any mechanism to accommodate this grammatical feature of French, you\nwould only have the third option, which changes the tone of the message and\nmight not be what you want to display in your user interface.\n\nIn these cases, the Grammatical Inflection API lowers the effort to display\nstrings relative to the viewer's grammatical gender---that is, the person who's\nviewing the UI, not who's being talked about. To show users personalized\ntranslations in your app, [add translations that are inflected for each\ngrammatical gender](#add-translations) for affected languages and then use the\n[`GrammaticalInflectionManager`](/reference/android/app/GrammaticalInflectionManager) API to adjust which translations are shown\nto each user.\n| **Note:** Support for these resource qualifiers is only available in [Android\n| Studio Giraffe Canary 7](/studio/preview/features#grammatical-inflection-api) or higher.\n\nIn many languages, grammatical gender also applies to regular nouns in addition\nto people. For example, in French the word chaise (chair) is feminine, whereas\noiseau (bird) is masculine. For situations other than addressing the user, you\ncan use the existing [ICU SelectFormat](/reference/android/icu/text/SelectFormat) API.\n\nImplement the API\n-----------------\n\nAfter the user has indicated their grammatical gender (for example, either\nthrough a settings section of your app or a user setup workflow), you can use\nthe [`setRequestedApplicationGrammaticalGender(int)`](/reference/android/app/GrammaticalInflectionManager#setRequestedApplicationGrammaticalGender(int)) method to store the\nvalue in your app's resources configuration.\n\nFor example, if you want to set a user's preferred grammatical gender to\nfeminine, you would ask the user to select which grammatical gender they prefer\nand then call the API: \n\n### Kotlin\n\n```kotlin\n// Set app's grammatical gender to feminine\nval gIM = mContext.getSystemService(GrammaticalInflectionManager::class.java)\ngIM.setRequestedApplicationGrammaticalGender(\n Configuration.GRAMMATICAL_GENDER_FEMININE)\n```\n\n### Java\n\n```java\n// Set app's grammatical gender to feminine\nGrammaticalInflectionManager gIM =\n mContext.getSystemService(GrammaticalInflectionManager.class);\ngIM.setRequestedApplicationGrammaticalGender(\n Configuration.GRAMMATICAL_GENDER_FEMININE);\n```\n| **Caution:** Calling `setRequestedApplicationGrammaticalGender()` recreates your `Activity`, unless your app handles `grammaticalGender` configuration changes by itself.\n\nHere is example of how to declare [configuration changes](/guide/topics/resources/runtime-changes) in your app's\nmanifest file if you want to handle them yourself: \n\n \u003cactivity android:name=\".TestActivity\"\n android:configChanges=\"grammaticalGender\"\n android:exported=\"true\"\u003e\n \u003c/activity\u003e\n\nIf your app needs to check the grammatical gender in the current resource\nconfiguration, you can use the [`getApplicationGrammaticalGender()`](/reference/android/app/GrammaticalInflectionManager#getApplicationGrammaticalGender()) method\nto retrieve it: \n\n### Kotlin\n\n```kotlin\nval gIM = mContext.getSystemService(GrammaticalInflectionManager::class.java)\nval grammaticalGender = gIM.getApplicationGrammaticalGender()\n```\n\n### Java\n\n```java\nGrammaticalInflectionManager gIM =\n mContext.getSystemService(GrammaticalInflectionManager.class);\nint grammaticalGender = gIM.getApplicationGrammaticalGender();\n```\n\nAdd translations for languages with grammatical gender\n------------------------------------------------------\n\nTo provide localized text for languages with grammatical gender, [create an\nalternative resources file](/guide/topics/resources/providing-resources#AlternativeResources) and append the grammatical gender qualifier\nimmediately after the locale name for those languages. The following table\noutlines the possible values:\n\n| Qualifier | String value | Example (French `fr`) |\n|-----------|--------------|---------------------------------------|\n| Feminine | `feminine` | `res/values-fr-feminine/strings.xml` |\n| Masculine | `masculine` | `res/values-fr-masculine/strings.xml` |\n| Neuter | `neuter` | `res/values-fr-neuter/strings.xml` |\n\nYou should only include strings that support grammatical gender inflections in\nthese resources files. All strings must have a value in the [default resource\nfile that contains other localized strings](/guide/topics/resources/localization#creating-alternatives). This default translation is\nshown whenever a gender-inflected translation is not available.\n\nIn the [example provided for French earlier](#inflection), the neutral phrasing would be\nthe value of the string in the default resources `res/values-fr/strings.xml`\nfile. The following code snippets show how each resource file would be formatted\nto accommodate all the grammatical variations from the example in French: \n\n### Feminine\n\n\nInclude the feminine-inflected string in the `res/values-fr-feminine/strings.xml` resources file: \n\n```xml\n\u003cresources\u003e\n ...\n \u003cstring name=\"example_string\"\u003eVous êtes abonnée à...\u003c/string\u003e\n\u003c/resources\u003e\n```\n\n### Masculine\n\n\nInclude the masculine-inflected string in the `res/values-fr-masculine/strings.xml` resources file: \n\n```xml\n\u003cresources\u003e\n ...\n \u003cstring name=\"example_string\"\u003eVous êtes abonné à...\u003c/string\u003e\n\u003c/resources\u003e\n```\n\n### Neuter\n\n\nInclude the default string in the `res/values-fr/strings.xml` resources file: \n\n```xml\n\u003cresources\u003e\n ...\n \u003cstring name=\"example_string\"\u003eAbonnement à...activé\u003c/string\u003e\n\u003c/resources\u003e\n```"]]