Android локализацииAndroid Localization

В этом документе представлены возможности локализации пакета SDK для Android и как получить доступ к их с помощью Xamarin.This document introduces the localization features of the Android SDK and how to access them with Xamarin.

Возможности на платформе AndroidAndroid Platform Features

В этом разделе описываются возможности локализации основной Android.This section describes the main localization features of Android. Перейдите к разделу разделу определенный код и примеры.Skip to the next section to see specific code and examples.

Языковой стандартLocale

Пользователям выбрать язык в параметры > язык & ввода.Users choose their language in Settings > Language & input. Этот выбор определяет, отображается язык и региональные параметры, используемые (например)This selection controls both the language displayed and regional settings used (eg. для даты и форматирование чисел).for date and number formatting).

Текущий языковой стандарт можно запрашивать через контекст текущего Resources:The current locale can be queried via the current context's Resources:

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

Это значение будет идентификатор языкового стандарта, который содержит код языка и код языкового стандарта, отделенный символом подчеркивания.This value will be a locale identifier that contains both a language code and a locale code, separated by an underscore. Для справки ниже приведен список языковых стандартов Java и Android поддерживается языковых стандартов с помощью StackOverflow.For reference, here is a list of Java locales and Android-supported locales via StackOverflow.

Вот наиболее распространенные примеры.Common examples include:

  • en_US для английского языка (США)en_US for English (United States)
  • es_ES испанский (Испания)es_ES for Spanish (Spain)
  • ja_JP для японского (Япония)ja_JP for Japanese (Japan)
  • zh_CN для китайского (Китай)zh_CN for Chinese (China)
  • zh_TW для китайского (Тайвань)zh_TW for Chinese (Taiwan)
  • pt_PT Португальский (Португалия)pt_PT for Portuguese (Portugal)
  • pt_BR Португальский (Бразилия)pt_BR for Portuguese (Brazil)

LOCALE_CHANGEDLOCALE_CHANGED

Создает Android android.intent.action.LOCALE_CHANGED когда пользователь изменяет их выбор языка.Android generates android.intent.action.LOCALE_CHANGED when the user changes their language selection.

Действия можно выбрать для обработки это, задав android:configChanges атрибут в действии, следующим образом:Activities can opt to handle this by setting the android:configChanges attribute on the activity, like this:

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

Основные сведения о интернационализации в AndroidInternationalization Basics in Android

Стратегия локализации Android состоит из следующих ключевых частей:Android's localization strategy has the following key parts:

  • Папки ресурсов, которые содержат локализованные строки, изображения и другие ресурсы.Resource folders to contain localized strings, images, and other resources.

  • GetText метод, который используется для получения локализованных строк в кодеGetText method, which is used to retrieve localized strings in code

  • @string/id в файлах AXML для автоматического размещения локализованных строк в макете.@string/id in AXML files, to automatically place localized strings in layouts.

Папки ресурсовResource Folders

Большая часть содержимого в папки ресурсов управления приложений Android, например:Android applications manage most content in resource folders, such as:

  • макет -содержит файлы макета AXML.layout - contains AXML layout files.
  • drawable -содержит изображения и другие прорисовываемые ресурсы.drawable - contains images and other drawable resources.
  • значения -содержит строки.values - contains strings.
  • необработанные -файлами данных.raw - contains data files.

Большинство разработчиков уже знакомы с использованием dpi суффиксы на drawable directory, чтобы выполнить несколько версий образа, позволяя выбрать правильную версию для каждого устройства Android.Most developers are already familiar with the use of dpi suffixes on the drawable directory to provide multiple versions of an image, letting Android choose the correct version for each device. Тот же механизм используется для предоставления нескольких язык переводы, добавив к каталогов ресурсов с идентификаторами языка и региональных параметров.The same mechanism is used to provide multiple language translations by suffixing resource directories with language and culture identifiers.

Снимок экрана drawable/ресурсы и ресурсы и значения, которые папок для нескольких идентификаторов культуры

Примечание

При указании верхнего уровня языка, например es только два знака являются обязательными; Однако при указании полного языкового стандарта, формат имени каталога требуется dash и строчные r для разделения двух частей, например pt rBR или zh-rCN.When specifying a top-level language like es only two characters are required; however when specifying a full locale, the directory name format requires a dash and lowercase r to separate the two parts, for example pt-rBR or zh-rCN. Сравните это значение, возвращаемое в коде, который содержит символ подчеркивания (например)Compare this to the value returned in code, which has an underscore (eg. pt_BR).pt_BR). Обе эти функции отличается от значения .NET CultureInfo классом, который имеет тире только (например)Both of these are different to the value .NET CultureInfo class uses, which has a dash only (eg. pt-BR).pt-BR). Сохраните эти различия в виду при работе на платформах Xamarin.Keep these differences in mind when working across Xamarin platforms.

Формат файла strings.XMLStrings.xml file format

Локализованный значения каталог (например)A localized values directory (eg. значения es или значения pt-rBR) должен содержать файл с именем Strings.xml , содержащий переведенный текст для данного языкового стандарта.values-es or values-pt-rBR) should contain a file called Strings.xml that will contain the translated text for that locale.

Каждой доступной для перевода строке представляет собой элемент XML с ресурсом, как указан идентификатор name атрибут и переведенную строку как значение:Each translatable string is an XML element with the resource ID specified as the name attribute and the translated string as the value:

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

Необходимо экранировать согласно обычным правилам XML и name должен быть допустимым Android идентификатора ресурса (без пробелов и дефисов).You need to escape according to normal XML rules, and the name must be a valid Android resource ID (no spaces or dashes). Ниже приведен пример файла строки (на английском языке), используемом по умолчанию, например:Here is an example of the default (English) strings file for the example:

values/Strings.xmlvalues/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>

Испанский directory значения es содержит файл с тем же именем (Strings.xml), содержащий переводы:The Spanish directory values-es contains a file with the same name (Strings.xml) that contains the translations:

values-es/Strings.xmlvalues-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

С помощью файлов настройки строк переведенные значения можно ссылаться в макеты и кода.With the strings files set-up, the translated values can be referenced in both layouts and code.

Файлы макета AXMLAXML Layout Files

Для локализованных строк в файлы макета следует использовать @string/id синтаксис.To reference localized strings in layout files, use the @string/id syntax. Этот фрагмент кода XML из в образце показано text свойства задаются с помощью локализованных ресурсов идентификаторы (некоторые другие атрибуты опущены):This XML snippet from the sample shows text properties being set with localized resource IDs (some other attributes have been omitted):

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

GetText-методGetText Method

Для получения переведенных строк в коде, используйте GetText метод и передать идентификатор ресурса:To retrieve translated strings in code, use the GetText method and pass the resource ID:

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

Количество строкQuantity Strings

Android строковых ресурсов также позволяют создавать количество строк которого переводчикам предоставляют различным переводам такой фразы для различных значений, таких как:Android string resources also let you create quantity strings which allow translators to provide different translations for different quantities, such as:

  • «Есть 1 задача влево»."There is 1 task left."
  • «Есть 2 задачи еще предстоит сделать.»"There are 2 tasks still to do."

(а не универсального «имеются n задач слева»).(rather than a generic "There are n task(s) left").

В Strings.xmlIn the 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 , передавая идентификатор ресурса и значение для отображения (которое будет передано дважды).To render the complete string use the GetQuantityString method, passing the resource ID and the value to be displayed (which is passed twice). Второй параметр используется с Android для определения которой quantity строка для использования, третий параметр является значением, фактически подстановки в строке (необходимо указать оба значения).The second parameter is used by Android to determine which quantity string to use, the third parameter is the value actually substituted into the string (both are required).

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

Допустимые quantity переключатели следующие:Valid quantity switches are:

  • нульzero
  • oneone
  • Дваtwo
  • несколькоfew
  • manymany
  • другиеother

Они описаны более подробно в Android документация. Если для данного языка не требуется «дополнительно» обработка, с помощью тех quantity строки будут пропущены (например, на английском языке использует только one и other; каждое следующее указание zero строки не окажет никакого воздействия, оно не будет использоваться).They're described in more detail in the Android docs. If a given language does not require 'special' handling, those quantity strings will be ignored (for example, English only uses one and other; specifying a zero string will have no effect, it will not be used).

ИзображенийImages

Локализованных изображений следуют тем же правилам, что файлы строки: все образы, на которые ссылается приложение должны находиться в drawable каталоги, поэтому переход на резервный ресурс.Localized images follow the same rules as strings files: all images referenced in the application should be placed in drawable directories so there is a fallback.

Изображения для определенного языкового стандарта должен быть помещен в папки рисунков и полное например drawable es или drawable Япония (точек на дюйм спецификаторы также могут добавляться).Locale-specific images should then be placed in qualified drawable folders such as drawable-es or drawable-ja (dpi specifiers can also be added).

На этом снимке экрана четыре изображения сохраняются в drawable каталога, но только один, flag.png, локализованными копии в других каталогах.In this screenshot, four images are saved in the drawable directory, but only one, flag.png, has localized copies in other directories.

Снимок экрана: drawable несколько папок, каждая из которых содержит один или несколько файлов локализованных .png

Другие типы ресурсовOther Resource Types

Можно также предоставляют другие типы другой вариант — языковые ресурсы, включая макеты, анимации и необработанные файлы.You can also provide other types of alternative, language-specific resources including layouts, animations, and raw files. Это означает, что можно предоставить макет экрана для одного или нескольких из ваших целевых языков, например можно создать макет специально для немецкого языка, позволяет очень длинные текстовые метки.This means you could provide a specific screen layout for one or more of your target languages, for example you could create a layout specifically for German that allows for very long text labels.

Android 4.2 появилась поддержка справа налево (RTL) Если задать параметр приложений android:supportsRtl="true".Android 4.2 introduced support for right to left (RTL) languages if you set the application setting android:supportsRtl="true". Квалификатор ресурсов "ldrtl" может быть включено в имя каталога, содержащие пользовательские макеты, предназначенные для отображения справа НАЛЕВО.The resource qualifier "ldrtl" can be included in a directory name to contain custom layouts that are designed for RTL display.

Дополнительные сведения о resource directory именования и резервных точек, см. документы Android для обеспечении дополнительных ресурсов.For more information on resource directory naming and fallback, refer to the Android docs for providing alternative resources.

Имя приложенияApp name

Имя приложения — легко локализовать с помощью @string/id в для MainLauncher действия:The application name is easy to localize by using a @string/id in for the MainLauncher activity:

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

Языки справа налево (RTL)Right-to-Left (RTL) Languages

Android 4.2 и более поздних версий обеспечивает полную поддержку для макетов с направлением письма справа НАЛЕВО, подробно описаны в поддерживает собственный справа НАЛЕВО блог.Android 4.2 and newer provides full support for RTL layouts, described in detail in the Native RTL Support blog.

При использовании Android 4.2 (уровень API 17) и более поздних версиях выравнивание, могут указываться значения start и end вместо left и right (например android:paddingStart).When using Android 4.2 (API level 17) and newer, alignment values can be specified with start and end instead of left and right (for example android:paddingStart). Также существуют новые интерфейсы API, такие как LayoutDirection, TextDirection, и TextAlignment для создания экранов, адаптировать для модулей чтения справа НАЛЕВО.There are also new APIs like LayoutDirection, TextDirection, and TextAlignment to help build screens that adapt for RTL readers.

На следующем снимке экрана показан локализованные Tasky пример на арабском языке:The following screenshot shows the localized Tasky sample in Arabic:

Снимок экрана: Tasky приложение на арабском языкеScreenshot of Tasky app in Arabic

На следующем снимке экрана показан локализованные Tasky пример на иврите:The next screenshot shows the localized Tasky sample in Hebrew:

Снимок экрана Tasky приложения на ивритеScreenshot of Tasky app in Hebrew

Текст справа НАЛЕВО локализовать с помощью Strings.xml файлы в так же, как текст слева Направо.RTL text is localized using Strings.xml files in the same way as LTR text.

ТестированиеTesting

Убедитесь в том, что для тщательного тестирования языкового стандарта по умолчанию.Make sure to thoroughly test the default locale. Приложение аварийно, если не удается загрузить ресурсы по умолчанию для какой-либо причине (т. е. они отсутствуют).Your application will crash if the default resources cannot be loaded for some reason (i.e. they are missing).

Эмулятор тестированияEmulator Testing

Ссылаться на Google тестирование в эмуляторе Android разделе приведены инструкции по настройке для конкретного языкового стандарта с помощью оболочки ADB эмулятором.Refer to Google's Testing on an Android Emulator section for instructions on how to set an emulator to a specific locale using the ADB shell.

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

Тестирование устройствDevice Testing

Чтобы протестировать на устройстве, изменить язык в параметры приложения.To test on a device, change the language in the Settings app.

Совет

Запишите значков и расположение элементов меню, таким образом, вы можете вернуться язык исходное значение.Make a note of the icons and location of the menu items so that you can revert the language to the original setting.

СводкаSummary

В этой статье рассматриваются основные сведения о локализации приложений Android с помощью встроенных ресурсов обработки.This article covers the basics of localizing Android applications using the built-in resource handling. Дополнительные сведения о i18n и L10n для iOS, Android и приложения для нескольких платформ (включая Xamarin.Forms) в в этом руководстве кросс платформенные.You can learn more about i18n and L10n for iOS, Android and cross-platform (including Xamarin.Forms) apps in this cross-platform guide.