다음을 통해 공유


Android 지역화

이 문서에서는 Android SDK의 지역화 기능과 Xamarin을 사용하여 액세스하는 방법을 소개합니다.

Android 플랫폼 기능

이 섹션에서는 Android의 주요 지역화 기능에 대해 설명합니다. 특정 코드 및 예제를 보려면 다음 섹션 으로 건너뜁니다.

Locale

사용자는 설정 > 언어 및 입력에서 해당 언어를 선택합니다. 이 선택 영역은 표시되는 언어와 사용된 국가별 설정(예: 날짜 및 숫자 서식 지정)을 모두 제어합니다.

현재 로캘은 현재 컨텍스트의 Resources다음을 통해 쿼리할 수 있습니다.

var lang = Resources.Configuration.Locale; // eg. "es_ES"

이 값은 밑줄로 구분된 언어 코드와 로캘 코드를 모두 포함하는 로캘 식별자가 됩니다. 참고로, StackOverflow통한 Java 로캘 및 Android 지원 로캘 목록은 다음과 같습니다.

일반적인 예는 다음과 같습니다.

  • en_US영어(미국)
  • es_ES 스페인어(스페인)
  • ja_JP 일본어(일본)
  • zh_CN 중국어(중국)
  • zh_TW 중국어(대만)
  • pt_PT 포르투갈어(포르투갈)
  • pt_BR 포르투갈어(브라질)

LOCALE_CHANGED

Android는 android.intent.action.LOCALE_CHANGED 사용자가 언어 선택을 변경할 때 생성합니다.

활동은 다음과 같이 활동의 특성을 설정 android:configChanges 하여 이 작업을 처리하도록 선택할 수 있습니다.

[Activity (Label = "@string/app_name", MainLauncher = true, Icon="@drawable/launcher",
    ConfigurationChanges = ConfigChanges.Locale | ConfigChanges.ScreenSize | ConfigChanges.Orientation)]

Android의 국제화 기본 사항

Android의 지역화 전략에는 다음과 같은 주요 부분이 있습니다.

  • 지역화된 문자열, 이미지 및 기타 리소스를 포함할 리소스 폴더입니다.

  • GetText 메서드: 코드에서 지역화된 문자열을 검색하는 데 사용됩니다.

  • @string/id AXML 파일에서 지역화된 문자열을 레이아웃에 자동으로 배치합니다.

리소스 폴더

Android 애플리케이션은 리소스 폴더에서 다음과 같은 대부분의 콘텐츠를 관리합니다.

  • layout - AXML 레이아웃 파일을 포함합니다.
  • drawable - 이미지 및 기타 그리기 가능한 리소스를 포함합니다.
  • values - 문자열을 포함합니다.
  • raw - 데이터 파일을 포함합니다.

대부분의 개발자는 드로어블 디렉터리에서 dpi 접미사를 사용하여 여러 버전의 이미지를 제공하므로 Android가 각 디바이스에 대해 올바른 버전을 선택할 수 있습니다. 동일한 메커니즘은 리소스 디렉터리에 언어 및 문화권 식별자를 접미사로 추가하여 여러 언어 번역을 제공하는 데 사용됩니다.

여러 문화권 식별자에 대한 Resources/drawable 및 Resources/values 폴더의 스크린샷

참고 항목

두 문자와 같은 es 최상위 언어를 지정해야 하지만 전체 로캘을 지정할 때 디렉터리 이름 형식에는 pt-rBR 또는 zh-rCN과 같은 두 부분을 구분하기 위해 대시 및 소문자 r이 필요합니다. 밑줄(예 pt_BR: )이 있는 코드에서 반환된 값과 비교합니다. 둘 다 .NET CultureInfo 클래스에서 사용하는 값과 다르며 대시만 있습니다(예: pt-BR). Xamarin 플랫폼에서 작업할 때는 이러한 차이점을 염두에 두어야 합니다.

Strings.xml 파일 형식

지역화된 디렉터리(예: values-es 또는 values-pt-rBR)에는 해당 로캘에 대한 번역된 텍스트를 포함하는 Strings.xml 파일이 포함되어야 합니다.

변환 가능한 각 문자열은 리소스 ID가 특성으로 name 지정되고 변환된 문자열이 값으로 지정된 XML 요소입니다.

<string name="app_name">TaskyL10n</string>

일반 XML 규칙에 따라 이스케이프해야 하며 name 유효한 Android 리소스 ID(공백 또는 대시 없음)여야 합니다. 다음은 예제에 대한 기본(영어) 문자열 파일의 예입니다.

values/Strings.xml

<resources>
    <string name="app_name">TaskyL10n</string>
    <string name="taskadd">Add Task</string>
    <string name="taskname">Name</string>
    <string name="tasknotes">Notes</string>
    <string name="taskdone">Done</string>
    <string name="taskcancel">Cancel</string>
</resources>

스페인어 디렉터리 values-es 에는 번역이 포함된 이름이 같은 파일(Strings.xml)이 포함되어 있습니다.

values-es/Strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">TaskyLeon</string>
    <string name="taskadd">agregar tarea</string>
    <string name="taskname">Nombre</string>
    <string name="tasknotes">Notas</string>
    <string name="taskdone">Completo</string>
    <string name="taskcancel">Cancelar</string>
</resources>

Strings.xml 파일이 포함된 여러 값 폴더의 스크린샷

문자열 파일을 설정하면 변환된 값을 레이아웃과 코드 모두에서 참조할 수 있습니다.

AXML 레이아웃 파일

레이아웃 파일에서 지역화된 문자열을 참조하려면 구문을 사용합니다 @string/id . 샘플의 이 XML 코드 조각은 지역화된 리소스 ID로 설정되는 속성을 보여 text 줍니다(일부 다른 특성은 생략됨).

<TextView
    android:id="@+id/NameLabel"
    android:text="@string/taskname"
    ... />
<CheckBox
    android:id="@+id/chkDone"
    android:text="@string/taskdone"
    ... />

GetText 메서드

코드에서 번역된 문자열을 검색하려면 메서드를 GetText 사용하고 리소스 ID를 전달합니다.

var cancelText = Resources.GetText (Resource.String.taskcancel);

수량 문자열

Android 문자열 리소스를 사용하면 번역자가 다음과 같은 다양한 수량에 대해 서로 다른 번역을 제공할 수 있는 수량 문자열을 만들 수도 있습니다.

  • "남은 작업은 1가지입니다."
  • "아직 해야 할 작업이 2개 있습니다."

(제네릭 "n 작업이 남아 있습니다"가 아닌).

Strings.xml

<plurals name="numberOfTasks">
   <!--
      As a developer, you should always supply "one" and "other"
      strings. Your translators will know which strings are actually
      needed for their language.
    -->
   <item quantity="one">There is %d task left.</item>
   <item quantity="other">There are %d tasks still to do.</item>
 </plurals>

전체 문자열을 렌더링하려면 메서드를 GetQuantityString 사용하여 표시할 리소스 ID와 값을 전달합니다(두 번 전달됨). 두 번째 매개 변수는 Android에서 사용할 문자열을 결정하는 quantity 데 사용되며, 세 번째 매개 변수는 실제로 문자열로 대체되는 값입니다(둘 다 필요).

var translated = Resources.GetQuantityString (
                    Resource.Plurals.numberOfTasks, taskcount, taskcount);`

유효한 quantity 스위치는 다음과 같습니다.

  • zero
  • 1
  • two
  • few
  • many
  • 기타

Android 문서에서 자세히 설명합니다. 지정된 언어에 '특수' 처리가 필요하지 않은 경우 해당 quantity 문자열은 무시됩니다(예: 영어만 사용하고 one other, 문자열을 지정해 zero 도 효과가 없으며 사용되지 않음).

이미지

지역화된 이미지는 문자열 파일과 동일한 규칙을 따릅니다. 애플리케이션에서 참조되는 모든 이미지는 대체가 되도록 그리기 가능한 디렉터리에 배치해야 합니다.

그런 다음 로캘별 이미지를 drawable-es 또는 drawable-ja와 같은 정규화된 드로블 폴더에 배치해야 합니다(dpi 지정자도 추가할 수 있습니다).

이 스크린샷에서는 4개의 이미지가 그리기 가능한 디렉터리에 저장되지만 flag.png 하나만 다른 디렉터리에 지역화된 복사본이 있습니다.

하나 이상의 지역화된 .png 파일이 포함된 여러 드로블 폴더의 스크린샷

기타 리소스 종류

레이아웃, 애니메이션 및 원시 파일을 비롯한 다른 유형의 대체 언어별 리소스를 제공할 수도 있습니다. 즉, 하나 이상의 대상 언어에 대해 특정 화면 레이아웃을 제공할 수 있습니다. 예를 들어 매우 긴 텍스트 레이블을 허용하는 독일어용 레이아웃을 만들 수 있습니다.

Android 4.2는 애플리케이션 설정을 android:supportsRtl="true"설정하는 경우 RTL(오른쪽에서 왼쪽) 언어에 대한 지원을 도입했습니다. 리소스 한정 "ldrtl" 자는 RTL 표시를 위해 설계된 사용자 지정 레이아웃을 포함하도록 디렉터리 이름에 포함될 수 있습니다.

리소스 디렉터리 명명 및 대체에 대한 자세한 내용은 대체 리소스를 제공하는 Android 문서를 참조하세요.

앱 이름

애플리케이션 이름은 작업에 대한 in을 @string/id 사용하여 쉽게 지역화할 수 MainLauncher 있습니다.

[Activity (Label = "@string/app_name", MainLauncher = true, Icon="@drawable/launcher",
    ConfigurationChanges =  ConfigChanges.Orientation | ConfigChanges.Locale)]

RTL(오른쪽에서 왼쪽) 언어

Android 4.2 이상에서는 네이티브 RTL 지원 블로그에 자세히 설명된 RTL 레이아웃에 대한 전체 지원을 제공합니다.

Android 4.2(API 수준 17) 이상을 사용하는 경우 맞춤 값은 (예android:paddingStart: ) 대신 left right 에 지정할 start end 수 있습니다. RTL 판독기를 위해 조정되는 화면을 빌드하는 데 도움이 되는 새로운 API LayoutDirectionTextDirectionTextAlignment 도 있습니다.

다음 스크린샷은 아랍어로 지역화된 Tasky 샘플을 보여줍니다.

아랍어로 된 Tasky 앱의 스크린샷

다음 스크린샷은 히브리어로 지역화된 Tasky 샘플을 보여줍니다.

히브리어의 Tasky 앱 스크린샷

RTL 텍스트는 LTR 텍스트와 동일한 방식으로 Strings.xml 파일을 사용하여 지역화됩니다.

테스트

기본 로캘을 철저히 테스트해야 합니다. 어떤 이유로 인해 기본 리소스를 로드할 수 없는 경우(즉, 누락된 경우) 애플리케이션이 충돌합니다.

에뮬레이터 테스트

ADB 셸을 사용하여 에뮬레이터를 특정 로캘로 설정하는 방법에 대한 지침은 Android Emulator 섹션에서 Google 테스트를 참조하세요.

adb shell setprop persist.sys.locale fr-CA;stop;sleep 5;start

디바이스 테스트

디바이스에서 테스트하려면 설정 앱에서 언어를 변경합니다.

언어를 원래 설정으로 되돌릴 수 있도록 메뉴 항목의 아이콘과 위치를 기록해 둡니다.

요약

이 문서에서는 기본 제공 리소스 처리를 사용하여 Android 애플리케이션을 지역화하는 기본 사항을 설명합니다. 이 플랫폼 간 가이드에서는 iOS, Android 및 플랫폼 간(Xamarin.Forms 포함) 앱용 i18n 및 L10n에 대해 자세히 알아볼 수 있습니다.