유사 언어(pseudolocale)로 앱 테스트
컬렉션을 사용해 정리하기
내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.
유사 언어(pseudolocale)는 앱을 번역할 때 UI, 레이아웃 및 기타 번역 관련 문제를 일으키는 언어의 특성을 시뮬레이션하기 위해 설계된 언어입니다. 유사 언어는 현지화가 가능한 모든 메시지를 영어로 읽을 수 있도록 하는 즉각적인 자동 번역에 의해 생성됩니다.
현지화로 위장되지 않은 텍스트는 소스 코드에서 번역이 불가능한 메시지를 가리킵니다.
유사 언어는 나중에 번역할 메시지를 소스 저장소에 커밋하기 전에 UI 텍스트와 레이아웃을 조정할 수 있으므로 시간과 비용을 절약해줍니다. 잠재적인 번역 문제의 목록은 현지화 문제 발견 섹션을 참고하세요.
그림 1. 영어(XA) 유사 언어
Android의 유사 언어 이름은 표준 언어 이름 지정 규칙을 따르며 언어 ID는 BCP 47 규격 프로그래밍 언어로 파싱될 수 있습니다.
이러한 의미에서 유사 언어는 프랑스어, 중국어, 러시아어 등 다른 언어와 비슷합니다.
Android 플랫폼은 왼쪽에서 오른쪽으로 쓰는 언어(LTR)와 오른쪽에서 왼쪽으로 쓰는 언어(RTL)를 표현하는 다음 두 가지 유사 언어를 제공합니다.
그림 2. AR(XB) 유사 언어
영어(XA): 기본 영어 UI 텍스트에 라틴 악센트를 추가하고, 악센트가 없는 텍스트를 추가하여 원본 텍스트를 확장하며, 각 메시지 단위를 대괄호로 묶어서 확장된 텍스트에서 잠재적인 문제를 노출합니다. 잠재적인 문제는 한 문장을 여러 개의 대괄호로 묶어 여러 부분으로 나누어 표시하는 것과 같이 레이아웃이 손상되고 메시지 문법이 잘못 구성되는 것입니다. 그림 1은 영어(XA) 유사 언어를 보여줍니다.
AR(XB): 왼쪽에서 오른쪽으로 쓰는 원본 메시지의 텍스트 방향을 오른쪽에서 왼쪽으로 설정하며 이 방향은 원본 메시지의 문자 순서를 반대로 바꿉니다. 그림 2는 AR(XB) 유사 언어를 보여줍니다.
유사 언어는 RTL 언어를 쓰거나 말하지 않아도 앱의 RTL 버전을 만들 수 있도록 도와줍니다.
유사 언어 사용 설정
유사 언어는 일반적으로 개발자 지향 빌드에 추가됩니다. 기기에서 유사 언어를 선택하면 설정 앱 및 빠른 설정 패널과 같은 모든 시스템 앱을 포함하여 유사 언어를 지원하는 모든 앱에서 선택된 유사 언어의 특성을 사용합니다.
Android 유사 언어를 사용하려면 기기에서 Android 4.3 (API 수준 18) 이상을 실행하고 개발자 옵션을 사용 설정해야 합니다. 개발자 옵션을 사용 설정한 후에는 기기를 재부팅해야 합니다.
다음 절차는 유사 언어를 사용 설정하는 방법에 관해 설명합니다.
Android 스튜디오에서 build.gradle
파일에 다음 구성을 추가하여 특정 앱에 유사 언어를 사용 설정합니다.
Kotlin
android {
...
buildTypes.getByName("debug") {
isPseudoLocalesEnabled = true
}
}
앱을 빌드하고 실행합니다.
그림 3. 유사 언어 선택
설정 앱을 사용하여 유사 언어를 선택합니다. 이 단계는 다음과 같이 Android 버전에 따라 다릅니다.
Android 5.0(API 수준 21) 이상
- 기기에서 설정 앱을 열고 언어 및 입력 > 언어 환경설정을 탭합니다.
- 언어 환경설정 목록에서 탭을 드래그하여 유사 언어를 목록 맨 위로 이동하여 활성 언어로 만듭니다. 그림 3을 참고하세요.
Android 4.4.4(API 수준 19) 이하
- 기기에서 설정 앱을 열고 언어 및 입력 > 언어 환경설정 > 언어 추가를 탭합니다.
- 유사 언어를 탭하여 언어 환경설정 목록에 추가합니다.
- 언어 환경설정 목록에서 탭을 드래그하여 유사 언어를 목록 맨 위로 이동하여 활성 언어로 만듭니다. 그림 3을 참고하세요.
현지화 문제 발견
유사 언어를 사용하면 다음 영역에서 문제를 파악하여 UI의 잠재적인 현지화 문제를 더욱 빨리 효과적으로 발견할 수 있습니다.
- 번역에 전송할 수 없는 하드코딩된 문자열입니다. 이 문자열은 알아보기 쉽게 유사 언어에 악센트가 없는 텍스트로 표시됩니다.
- 텍스트 길이 때문에 UI가 손상될 수 있는 곳에 나타나는 텍스트 확장으로 인한 UI 레이아웃 문제입니다.
둘 이상의 대괄호로 분할된 하나의 메시지로 표시되는 문자열 연결입니다. 번역자가 각 부분이 서로 관련된 것을 모르고 독립적으로 번역해야 하므로 정확한 번역이 어려울 수 있습니다. 또한 문자열 연결은 여러 언어에서 각 부분의 순서 또는 문장 구조가 완전히 다를 수 있으므로 정확한 번역을 불가능하게 할 수 있습니다. 예를 들어, 일본어, 한국어, 타밀어 등 일부 언어는 동사를 문장 끝에 배치합니다. 따라서 문장이 연결된 경우 번역자는 필요에 따라 단어 순서를 변경할 수 없습니다.
한 텍스트 방향의 콘텐츠가 반대 텍스트 방향의 인라인 구문을 포함하여 문자열을 읽기 어렵게 만드는 경우와 같은 양방향(BIDI) 텍스트 문제입니다.
미러링되지 않는 요소와 같이 오른쪽에서 왼쪽(RTL)으로 쓰는 방향 문제입니다. 예를 들어, UI 요소가 왼쪽으로 이동하지 않았고 텍스트가 반대로 바뀌지 않고 왼쪽으로 이동하지 않았거나 'pseudolocales rule!'이 '!elur selacoloduesp'이어야 하는데 'eulr selacoloduesp!'로 바뀐 것과 같이 구두점을 잘못 배치한 경우입니다.
이 페이지에 나와 있는 콘텐츠와 코드 샘플에는 콘텐츠 라이선스에서 설명하는 라이선스가 적용됩니다. 자바 및 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,["# Test your app with pseudolocales\n\nA pseudolocale is a locale that is designed to simulate characteristics of\nlanguages that cause UI, layout, and other translation-related problems when an\napp\nis translated. Pseudolocales are created by instant and automatic translations\nthat are readable in English for all *localizable* messages.\nUn-pseudolocalized text points to untranslatable messages in your source code.\n\nPseudolocales save time\nand money because you can make adjustments to the UI text and its layout before\nyou commit your messages to the source repository to be sent for translation\nlater. For a list of potential translation problems, see the\n[Spot localization issues](#spot_localization_issues) section. \n\n**Figure 1.** English (XA) pseudolocale.\n\nThe Android pseudolocale names follow standard locale naming conventions, and\ntheir locale IDs can be parsed by any BCP 47 compliant programming language.\nIn this sense, pseudolocales are just like any other locales, such as French,\nChinese, or Russian.\n\nThe Android platform provides the following two pseudolocales to represent\nleft-to-right (LTR) and right-to-left (RTL) languages: \n\n**Figure 2.** AR (XB) pseudolocale.\n\n**English (XA):** adds Latin accents to the base English UI text, expands the\noriginal text by adding non-accented text, and brackets each message unit to\nexpose potential issues from expanded text. Potential issues can be layout\nbreakage and badly formed message syntax, such as a sentence split\ninto multiple parts displaying as multiple bracketed messages. The English (XA)\npseudolocale is shown in figure 1.\n\n**AR (XB):** sets the text direction of the original left-to-right messages to\nthe right-to-left direction, which reverses the order of the characters in the\noriginal message. The AR (XB) pseudolocale is shown in figure 2.\n\nPseudolocales can help you make an RTL version of your app, even if you don't\nwrite or speak any RTL languages.\n\nEnable pseudolocales\n--------------------\n\nPseudolocales are usually added to developer-oriented builds. When you choose a\npseudolocale on your device, all the apps that support pseudolocales take on\nthe characteristics of the selected pseudolocale, including all the system apps\nsuch as the Settings app and Quick Settings panel.\n\n\u003cbr /\u003e\n\n\nTo use the Android pseudolocales, you must be running\nAndroid 4.3 (API level 18) or higher and have\n[developer options](/studio/debug/dev-options) enabled\non your device. You must also reboot your device after enabling\ndeveloper options.\n\nThe following procedure explains how to enable pseudolocales:\n\n1. In Android Studio, enable pseudolocales for a specific app by adding the\n following configuration to your `build.gradle` file:\n\n ### Groovy\n\n ```groovy\n android {\n ...\n buildTypes {\n debug {\n pseudoLocalesEnabled true\n }\n }\n }\n ```\n\n ### Kotlin\n\n ```kotlin\n android {\n ...\n buildTypes.getByName(\"debug\") {\n isPseudoLocalesEnabled = true\n }\n }\n ```\n2. [Build and run your app](/studio/run).\n\n **Figure 3.** Select a pseudolocale.\n3. Use the Settings app to select a pseudolocale. This step varies based on your\n Android version, as follows:\n\n **Android 5.0 (API level 21) or higher**\n 1. On the device, open the Settings app and tap **Languages and input \\\u003e\n Language preferences**.\n 2. In the **Language preferences** list, drag the tab to move a pseudolocale to the top of the list and make it the active language. See figure 3.\n\n **Android 4.4.4 (API level 19) or lower**\n 1. On the device, open the Settings app and tap **Languages and input \\\u003e\n Language preferences \\\u003e Add a language**.\n 2. Tap a pseudolocale to add it to the **Language preferences** list.\n 3. In the **Language preferences** list, drag the tab to move a pseudolocale to the top of the list and make it the active language See figure 3.\n\nSpot localization issues\n------------------------\n\nPseudolocales provide a time-saving and effective way to spot potential\nlocalizability issues in the UI by helping you identify problems in the\nfollowing areas:\n\n- Hardcoded strings, which can't be sent to translation, display as unaccented text in the pseudolocale to make them noticeable.\n- UI layout issues caused by text expansion, showing where the UI can break due to text length.\n- String concatenation, which displays as one message split across two or\n more brackets. This can make correct translation difficult, because translators\n have to translate each part independently without knowing that the parts\n are related. String concatenation can also make correct translation impossible,\n because different\n languages might require a different order of parts or a completely different\n sentence structure. For example, languages such as Japanese, Korean, and\n Tamil place the verb at the end of a sentence. When a sentence is concatenated,\n translators can't change the word order as needed.\n\n- Bidirectional (BIDI) text problems, such as when content in one text\n direction\n includes an inline phrase in the opposite text direction, making the string\n difficult to read.\n\n- Right-to-left (RTL) problems, such as elements not being mirrored. Some examples are\n a UI element not moving to the left, text not reversing and moving to the\n left, or misplaced punctuation, such as \"pseudolocales rule!\" changing to\n \"elur selacoloduesp!\" instead of \"!elur selacoloduesp\"."]]