Поддержка различных языков

Это всегда хорошая практика, извлечь строки пользовательского интерфейса из кода приложения и держать их во внешнем файле. Android позволяет это легко сделать с помощью каталога ресурсов в каждом Android проекте.

Если вы создали свой проект с помощью инструментов Android SDK (читайте Создание Android проекта), инструменты создают res/ каталог, в верхнем уровне проекта. Внутри этого res/ каталога есть подкаталоги для различных типов ресурсов. Есть также несколько файлов по умолчанию, таких как res/values/strings.xml, который содержит значения ваших строк.

Создайте региональные каталоги и строковые файлы

Чтобы добавить поддержку большего количества языков, создайте дополнительные values каталоги внутри res/ , которые включают дефис и ISO код языка в конце имени каталога. Например, values-es/ является каталогом, содержащим простые ресурсы для региона с кодом языка "es". Android загружает соответствующие ресурсы в соответствии с региональными настройками устройства во время выполнения. Для получения дополнительной информации см. Предоставление альтернативных ресурсов.

Как только вы решили, какие языки вы будете поддерживать, создайте подкаталоги ресурсов и файлы строковых ресурсов. Например:

MyProject/
    res/
       values/
           strings.xml
       values-es/
           strings.xml
       values-fr/
           strings.xml

Добавьте строковые значения для каждого региона в соответствующий файл.

Во время выполнения, Android система использует соответствующий набор строковых ресурсов на основе региона, выбранного в настоящее время для устройства пользователем.

Например, ниже приводятся некоторые различные ресурсы строковых файлов для различных языков.

Английский (по умолчанию), /values/strings.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="title">My Application</string>
    <string name="hello_world">Hello World!</string>
</resources>

Испанский, /values-es/strings.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="title">Mi Aplicación</string>
    <string name="hello_world">Hola Mundo!</string>
</resources>

Французский, /values-fr/strings.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="title">Mon Application</string>
    <string name="hello_world">Bonjour le monde !</string>
</resources>

Примечание: Вы можете использовать языковый спецификатор (или любой конфигурационный спецификатор) для любого типа ресурсов, как например, если вы хотите обеспечить локализованные версии растровых изображений. Для получения дополнительной информации см. Локализация.

Используйте строковые ресурсы

Вы можете ссылаться на свои ресурсы строк в исходном коде и других XML файлах, используя имя ресурса, определенное в <string> элементе в name атрибуте.

В исходном коде, вы можете обратиться к строке ресурса, используя синтаксис R.string.<string_name>. Есть множество методов, которые принимают строку ресурса таким образом.

Например:

// Get a string resource from your app's Resources
String hello = getResources().getString(R.string.hello_world);

// Or supply a string resource to a method that requires a string
TextView textView = new TextView(this);
textView.setText(R.string.hello_world);

В других XML файлах, вы можете обратиться к строке ресурса, используя синтаксис @string/<string_name> всякий раз, когда атрибут XML принимает строковое значение.

Например:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_world" />