Android локалізація додатків
У статті, присвяченій ресурсів. ми вже торкалися цієї теми з теоретичної точки зору. Розберемо тепер практичну частину. Ми вже вміємо користуватися строковими ресурсами і міняли рядки, наприклад, Hello, World на Здрастуй, світ! Але насправді це не зовсім правильний підхід. Для професійно написаного додатки краще використовувати інший підхід. А саме, локалізацію.
Щоб не ускладнювати матеріал, скористаємося стандартним додатком, який ми вивчали на самому початку. Створимо новий проект "LocaleApp", але на цей раз ми не будемо чіпати файл strings.xml в каталозі res / values.
Для російської локалізації необхідно створити новий підкаталог values-ru в тому ж каталозі res. Якщо ви плануєте створювати локалізацію тільки для української мови, то назва каталогу не важко запам'ятати і ви можете створити папку вручну через res | New | Directory. Але навряд чи ви запам'ятаєте назви інших папок. Тому покажу спосіб створення за допомогою майстра студії.
Клацаємо правою кнопкою миші на папці res і вибираємо New | Android resource directory. У діалоговому вікні в лівій частині Available qualifiers: вибираємо пункт Language і переносимо його в праву частину Chosen qualifiers :. У що з'явилася третій колонці вибираємо потрібні мови, наприклад, український. Ви побачите, що в поле Directory name автоматично з'явиться потрібну назву папки.

У режимі Android ви можете не побачити створену папку, тому тимчасово переключіться в режим Project. Скопіюйте файл res / values / strings.xml і вставте його в нову папку. Можете повернутися в колишній режим. Якщо папка не порожня, то вона вже видно.
В англійській версії їм відповідають ресурси
Запустимо програму і побачимо, що текст виводиться на російській, якщо у вас на емуляторі або реальному пристрої обрані українські настройки.
Ресурси з каталогу res / values вважаються ресурсами за замовчуванням. Вони відображаються в тому випадку, коли система не знайде ресурси для поточної локалі пристрою. У нашому випадку, при виборі будь-якої мови, крім української використовуватиметься res / values. Якщо ми захочемо розділити англійців і американців, тоді доведеться створювати два каталогу: res / values-en-rUK і res / values-en-rUS. Зверніть увагу, що перед кодом другій частині ставиться буква 'r'. Іншими словами, ми визначаємо не тільки мову, але й регіон. У майстра є пункт Region. Щоб створити нову папку вибираємо Language і Region. а потім вибираємо потрібну мову, а потім і регіон.

Проведемо кілька експериментів. Видалимо з файлу res / values-ru / strings.xml строковий ресурс hello_world з текстом Здрастуй, Світ !. Збережемо зміни і запустимо проект на пристрої з українською мовою. Платформа замінила відсутній в локалізації ресурс дефолтних англійським.
Продовжимо досліди і вчинимо навпаки - видалимо тепер ресурс з файлу res / values / strings.xml. На пристрої виберемо якийсь інший мову, наприклад, італійський. В цьому випадку ви побачите щось незрозуміле, швидше за все ви отримаєте повідомлення про помилку.
Звідси можна зробити висновок, що вам необхідно стежити за ресурсами за замовчуванням. Намагайтеся проконтролювати, щоб ваше додаток завжди містило всі необхідні ресурси за замовчуванням, а вже потім можете починати локалізацію додатки. Для цього вам достатньо буде скопіювати файл в новий підкаталог і відредагувати його.
Насправді локалізувати можна не тільки рядкові ресурси. У різних країнах прийнято малювати який-небудь об'єкт відповідно до своїх традицій, наприклад, зображення поштової скриньки. В цьому випадку ви можете створити каталог / res / drawable-de. в якому будуть знаходитися зображення, призначені для німців.
До речі, вибір потрібних мов може вплинути на ваші продажу платних програм. Google проводить відмінності між країнами, в яких можна поширювати платні і безкоштовні програми. Майте це на увазі.
У коді ви звертаєтеся до потрібних ресурсів в такий спосіб:
Система сама підставить потрібний рядок. Явно вказати, що хочеться використовувати ресурс на конкретній мові, у вас не вийде.
Через тривалий час один з Новомосковсктелей підказав, як все-таки задіяти локальний ресурс. Пояснювати код не буду, самі зрозумієте, коли наберетеся досвіду.
Щоб побачити, як змінюється текст в різних локалізованих версіях вашої програми, необов'язково запускати додаток в емуляторі. Можна в студії на панелі інструментів клацнути на значку глобуса і вибрати зі списку потрібний вам пункт (він з'явиться після того, як ви створите необхідні локалізовані ресурси), і все локалізовані рядки відразу зміняться на екрані активності.

Можна відразу створити локалізований файл через зручний майстер. Там же в меню є пункт Add Translation. . який виводить діалогове вікно зі списком вже наявних строкових ресурсів з вашої програми. Вам потрібно вибрати мову для перекладу, а потім заповнити в таблиці потрібну колонку.

Після того, як ви завершите переведення всіх ресурсів, натискаєте на кнопку OK і у вас з'явиться готова папка з новим файлом strings.xml для обраної локалізації.
Неперекладна гра слів з використанням місцевих ідіоматичних виразів
Якщо ви вирішили використовувати локалізацію на різних мовах, то можете зустрітися з однією проблемою. Припустимо, ви перевели тільки кілька строкових ресурсів і в один прекрасний день вирішили викласти програму в магазин додатків. Android Studio при складанні підписаного програми може заматюкався, що ви перевели не всі рядки. Є два способи вирішити цю проблему. Ви можете використовувати атрибут translatable = "false". щоб вказати середовищі розробки, що даний рядок не вимагає перекладу:
Другий варіант - явно вказати, що всі рядки в файлі не потрібно перекладати за допомогою tools: ignore = "MissingTranslation".
Є ще один варіант, коли неперекладні рядки розміщуються не в ресурсі strings.xml. а в іншому файлі під ім'ям donottranslate.xml.
Коли ви виправите рядкові ресурси, то позбудьтеся від помилок через Project | Clean. і спробуйте зібрати додаток заново.
Підтримка письма справа наліво
Араби і деякі інші народи використовують незвичну для європейців написання текстів справа наліво. В Android 4.2 з'явилася підтримка цього режиму. У блозі (англ.) Native RTL support in Android 4.2 розказано про деякі речі по цій темі.
Тепер ви можете писати додаток для ізраїльських військкоматів. українські призовники в інтерв'ю офіцерам душевного здоров'я часто використовують поєднання хатуль мадан (חתול מדען). Тепер ви знаєте, як локалізувати рядки пушкінського вірша про кота вченого.