수색…


소개

국제화 (i18n) 및 현지화 (L10n)는 언어, 지역 차이 및 대상 고객의 차이에 따라 소프트웨어를 적용하는 데 사용됩니다.

국제화 (Internationalization) : 미래의 로컬라이제이션을 계획하는 과정. 즉, 향후 현지화 작업에 적응하고 적응할 수있는 정도까지 유연하게 소프트웨어를 설계하는 과정입니다.

Localization (지역화) : 특정 지역 / 국가 / 시장 (로켈)에 소프트웨어를 적용하는 프로세스입니다.

비고

지역화를 위해 장치를 테스트하려면 다음과 같이 adb 를 사용하여 장치 또는 에뮬레이터를 특정 로켈에서 재부팅 할 수 있습니다.

  1. 다음 명령을 사용하여 adb를 실행하십시오. adb shell
  2. setprop persist.sys.locale [BCP-47 language tag];stop;sleep 5;start 명령 프롬프트에서 다음 명령을 실행하십시오. setprop persist.sys.locale [BCP-47 language tag];stop;sleep 5;start 여기에서 [BCP-47 language tag]는 여기에 설명 된 언어 특정 코드입니다. BCP47 코드

예를 들어 앱에서 일본어 지역화를 확인하려면 다음 명령을 사용합니다. setprop persist.sys.locale ja-JP;stop;sleep 5;start

현지화 계획 : 매니페스트에서 RTL 지원 사용

RTL (Right-to-Left) 지원은 i18n 및 L10n을 계획 할 때 필수적인 부분입니다. 왼쪽에서 오른쪽으로 작성된 영어와 달리 아랍어, 일본어, 히브리어 등의 많은 언어가 오른쪽에서 왼쪽으로 쓰여집니다. 보다 많은 고객에게 호소력을 발휘하려면 프로젝트 초기부터 이러한 언어를 지원하도록 레이아웃을 계획하는 것이 좋습니다. 그러면 나중에 현지화를 추가하는 것이 쉬워집니다.

RTL 지원은 AndroidManifest supportsRtl 태그를 추가하여 Android 앱에서 사용할 수 있습니다.

<application
    ...
    android:supportsRtl="true"
    ...>
...
</application>

현지화 계획 : 레이아웃에서 RTL 지원 추가

SDK 17 (Android 4.2)을 시작하면 RTL 지원이 Android 레이아웃에 추가되었으며 현지화의 필수 요소입니다. 앞으로 레이아웃의 left/right 표기법을 start/end 표기법으로 대체해야합니다. 그러나 프로젝트의 minSdk 값이 17 보다 작 으면 레이아웃에서 left/rightstart/end 표기법을 모두 사용해야합니다.

상대 레이아웃의 경우 alignParentStartalignParentEnd 사용해야합니다.

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"/>
</RelativeLayout>

중력 및 레이아웃 중력을 지정하려면 다음과 같이 유사한 표기법을 사용해야합니다.

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="left|start"
        android:gravity="left|start"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right|end"
        android:gravity="right|end"/>

여백과 여백도 다음과 같이 지정해야합니다.

<include layout="@layout/notification"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="12dp"
    android:layout_marginStart="12dp"
    android:paddingLeft="128dp"
    android:paddingStart="128dp"
    android:layout_toLeftOf="@id/cancel_action"
    android:layout_toStartOf="@id/cancel_action"/>
<include layout="@layout/notification2"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginRight="12dp"
    android:layout_marginEnd="12dp"
    android:paddingRight="128dp"
    android:paddingEnd="128dp"
    android:layout_toRightOf="@id/cancel_action"
    android:layout_toEndOf="@id/cancel_action"/>

현지화 계획 : RTL 레이아웃 테스트

작성된 레이아웃이 RTL과 호환되는지 테스트하려면 다음을 수행하십시오.

설정 -> 개발자 옵션 -> 그리기 -> RTL 레이아웃 방향 강제 설정으로 이동하십시오.

이 옵션을 사용하면 기기에서 RTL 로캘을 사용하게되며 RTL 지원을 위해 앱의 모든 부분을 쉽게 확인할 수 있습니다. 이 시점까지 새로운 로케일 / 언어 지원을 실제로 추가 할 필요는 없습니다.

현지화를위한 코딩 : 기본 문자열 및 자원 만들기

지역화 코딩의 첫 번째 단계는 기본 리소스를 만드는 것입니다. 이 단계는 너무 암시 적이어서 많은 개발자가 생각조차하지 않습니다. 그러나 장치가 지원되지 않는 로케일에서 실행되는 경우 기본 리소스에서 모든 리소스를로드하므로 기본 리소스를 만드는 것이 중요합니다. 리소스 중 하나라도 기본 폴더에 없으면 응용 프로그램이 중단됩니다.

기본 문자열 집합은 지정된 위치의 다음 폴더에 저장해야합니다.

res/values/strings.xml 

이 파일에는 앱의 다수 사용자가 말할 것으로 예상되는 언어의 문자열이 있어야합니다.

또한 앱의 기본 리소스는 다음 폴더 및 위치에 배치해야합니다.

res/drawable/
res/layout/

앱에 anim 또는 xml 과 같은 폴더가 필요한 경우 기본 리소스가 다음 폴더 및 위치에 추가되어야합니다.

res/anim/
res/xml/
res/raw/

지역화를위한 코딩 : 대체 문자열 제공

다른 언어 (로케일)로 번역을 제공하려면 다음 규칙에 따라 별도의 폴더에 strings.xml 을 만들어야합니다.

res/values-<locale>/strings.xml

같은 예가 아래에 나와 있습니다.

로케일의 예

이 예제에서는 res/values/strings.xml 파일에 기본 영어 문자열이 있고 프랑스어 번역은 res/values-fr/strings.xml 폴더에 제공되며 일본어 번역은 res/values-ja/strings.xml

다른 로케일에 대한 다른 번역도 마찬가지로 앱에 추가 할 수 있습니다.

로켈 코드의 전체 목록은 다음에서 찾을 수 있습니다. ISO 639 코드

번역 할 수없는 문자열 :

프로젝트에는 번역 할 수없는 특정 문자열이있을 수 있습니다. SharedPreferences의 키 또는 기호로 사용되는 문자열로 사용되는 문자열은이 범주에 속합니다. 이 문자열은 기본 strings.xml 에만 저장되고 translatable="false" 속성으로 표시되어야합니다. 예

<string name="pref_widget_display_label_hot">Hot News</string>
<string name="pref_widget_display_key" translatable="false">widget_display</string>
<string name="pref_widget_display_hot" translatable="false">0</string>

번역은 종종 이중 언어 전문가에 의해 수행되기 때문에이 속성은 중요합니다. 이렇게하면 번역에 관련된 사람들이 번역 대상이 아닌 문자열을 식별하여 시간과 돈을 절약 할 수 있습니다.

현지화를위한 코딩 : 대체 레이아웃 제공

앞의 예제에서 설명한대로 올바른 start/end 표기법을 지정한 경우 언어 별 레이아웃을 만드는 것이 필요하지 않을 때가 많습니다. 그러나 기본 레이아웃이 특정 언어에서 올바르게 작동하지 않을 수 있습니다. 때로는 RTL 언어의 경우 왼쪽에서 오른쪽으로 레이아웃이 번역되지 않을 수 있습니다. 이 경우 올바른 레이아웃을 제공해야합니다.

RTL 레이아웃을 완벽하게 최적화하기 위해 ldrtl 리소스 한정자를 사용하여 완전히 별도의 레이아웃 파일을 사용할 수 있습니다 ( ldrtl 은 레이아웃 방향 - 오른쪽에서 왼쪽으로}). 예를 들어 기본 레이아웃 파일을 res/layout/ 에 저장하고 RTL 최적화 레이아웃은 res/layout-ldrtl/ 있습니다.

ldrtl 한정자는 드로어 블 리소스에 적합하므로 읽기 방향에 해당하는 방향의 그래픽을 제공 할 수 있습니다.

다음은 ldrtl 레이아웃의 우선 순위를 설명하는 훌륭한 게시물입니다. 언어 별 레이아웃



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow