3 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Как сменить язык в приложении андроид

Как сменить язык в приложении андроид

Вариант предложенный здесь хорош, но я думаю у новичков от большого текста возникает боязнь к переводу/редактированию, по логике много=сложно. Предалаю новый вариант сего действия.

Oдна просьба, не пишите мне в личку с вопросами! Прочтите пару раз шапку, после этого задавайте вопрос в теме

Нам понадобятся: Java и Apk manager
Java качаем с сайта разработчика, то есть здесь или более свежую. Apk manager же можно, и даже нужно, качать отсюда.
ApkManagerRUS.rar ( 3,77 МБ )
(Зеркало)
Новая версия: APKmanager 5.7
APKTool v1.5.2 Новый способ изменения приложений (перевода) (Пост #22030406)
Apktool для мобильных устройств.

Используешь Linux-based ОS? Тебе сюда!

Главной особенностью этой версии есть то, что она переведена на русский и теперь ей пользоваться стало ещё проще. Но я всё же покажу вам как русифицировать или изменить нужное приложение.

Забыл сказать, готовое приложение находится по адресу /place-apk-here-for-modding/signedваше_приложение.apk

Надеюсь это подтолкнёт новичков к такому благородному делу, как локализация!

——Ответы на вопросы——
В:у меня такая проблема в программе apkmanager когда открываю scrip.bat на экране крякозябры
О:Нажми на иконку командной строки в левом верхнем углу, Свойства, Шрифт, выбери Lucida Console.

В: Сделал всё как написано, но при установке ошибка, что не так?
О: Данное приложение уже было установлено? Тогда надо его удалить вместе с данными перед установкой модифицированного.

В: В какой кодировки сохранять редактируемые файлы?
О: UTF-8, если используете NotePad++ смотрите Новый способ изменения приложений (перевода) .

В: Ошибка при сборке: «No resource identifier found for attribute ‘xlargeScreens’ in package ‘android'», что не так?
О (Лучший вариант) : Обновить Apktool по ссылке: http://android-apktool.googlecode.com/file. ol1.4.1.tar.bz2
О (Простой вариант) : Удалить из AndroidManifest.xml параметр xlargeScreens
После этого выполнить команду в консоли:

Статья в тему:  Как скачать civilization 6 на андроид

Если будут предложения по поводу FAQ, то пишите в личку, за темой почти не слежу.

Кстати, в Notepad++ появился плагин перевода.
Плагины — Plugin Manager — Show plugin manager — Available
Там ищем плагин Translate.
В свойствах Change language referense меняем приоритеты языков (SOURSE — исходный язык текста, DESTINATION — желаемый язык перевода), Ctrl-S и вуаля!
Далее в тексте выделяем слово/фразу и жмём Ctrl-Alt-Z Новый способ изменения приложений (перевода) (Пост #13458534)

В теме нет куратора. Если в теме есть пользователь, желающий стать Куратором и соответствующий Требованиям для кандидатов, он может подать заявку в теме Хочу стать куратором (предварительно изучив шапку темы и все материалы для кураторов).
До назначения куратора, по вопросам наполнения шапки, обращайтесь к модераторам раздела через кнопку под сообщениями, на которые необходимо добавить ссылки.

Сообщение отредактировал vaalf — 23.11.17, 12:21

Изменение языка приложения программно в Android

можно ли программно изменить язык приложения, все еще используя ресурсы Android?

Если нет, можно ли запросить ресурс на определенном языке?

Я хотел бы позволить пользователю изменить язык приложения из приложения.

30 ответов

это возможно. Вы можете установить локаль. Однако я бы не рекомендовал этого делать. Мы пробовали это на ранних стадиях, это в основном борьба с системой.

У нас есть то же самое требование для изменения языка, но мы решили согласиться с тем, что UI должен быть таким же, как UI телефона. Он работал через настройку locale, но был слишком глючным. И вы должны устанавливать его каждый раз, когда вы входите в действие (каждое действие) из моего опыта. вот код, если вам все еще нужно это (опять же, я не рекомендую)

Статья в тему:  Как разрешить приложению доступ в интернет андроид

Если у вас есть языковое содержимое-вы можете изменить эту базу на настройке.

Это действительно работает:

введите код языка в languageToLoad переменной:

Вы можете найти пример здесь

Я искал способ изменить системный язык программно. Хотя я полностью понимаю, что нормальное приложение никогда не должно этого делать, а вместо этого:

  • пользователь должен быть указан (через намерение) в настройках системы, чтобы изменить его вручную
  • приложение должно обрабатывать свою локализацию самостоятельно, как описано в ответе Alex

необходимо менять язык системы programmtically.

это недокументированный API и, следовательно, не должен использоваться для приложений рынка/конечного пользователя!

в любом случае, вот решение я нашел:

Если вы хотите сохранить язык, измененный по всему вашему приложению, вам нужно сделать две вещи.

во-первых, создайте базовое действие и сделайте все ваши действия простирающимися от этого:

обратите внимание, что я сохраняю новый язык в sharedPreference.

во-вторых, создайте расширение приложения следующим образом:

обратите внимание, что getLocale() это то же самое, что и выше.

вот и все! Надеюсь, это кому-то поможет.

Я изменен на немецкий язык для моего запуска приложения.

вот мой правильный код. Кто-то хочет использовать это же для меня.. (Как изменить язык в android программно)

просто добавляю лишний кусок, который меня споткнулся.

в то время как другие ответы отлично работают с «de», например

Статья в тему:  Где андроид

выше не будет работать, например «fr_BE» locale, поэтому он будет использовать values-fr-rBE папка или аналогичная.

необходимо следующее небольшое изменение для работы с «fr_BE»

Я знаю, что уже поздно отвечать, но я нашел вот эту статью . Что очень хорошо объясняет весь процесс и обеспечивает хорошо структурированный код.

вспомогательный класс язык:

необходимо переопределить attachBaseContext и вызвать LocaleHelper.onAttach () для инициализации параметров локали в приложении.

все, что вам нужно сделать, это добавить

везде, где вы хотите изменить язык.

создать класс Extends Application и создайте статический метод. Затем вы можете вызвать этот метод во всех действиях до setContentView() .

использование в деятельности:

для Android 7.0 Нуга (и ниже) следуйте этой статье:

ответ
Это включает поддержку RTL / LTR:

в каждом действии, чем нет необходимости устанавливать его каждый раз, когда вы вводите activity

единственное решение, которое полностью работает для меня, — это комбинация кода Алекса Волового с механизмом перезапуска приложения:

важные обновления:

обратите внимание, что на SDK >= 21 вам нужно позвонить ‘.updateConfiguration ()’, в противном случае ресурс не будет обновляться.

я столкнулся с такой же проблемой. На GitHub я нашел Android-библиотека LocalizationActivity.

эта библиотека упрощает изменение языка вашего приложения во время выполнения, как вы можете видеть в примере кода ниже. Пример проекта, включающий приведенный ниже пример кода и дополнительную информацию, можно найти на странице github.

Статья в тему:  Как пройти case animatronics на андроид

LocalizationActivity расширяет AppCompatActivity, поэтому вы также можете использовать его при использовании фрагментов.

по данным в этой статье

  1. создать MyApplication класс, который расширяет Application
  2. переопределить attachBaseContext() обновить язык.

зарегистрировать этот класс в манифесте.

создать BaseActivity и переопределить onAttach() обновить язык. необходимо для Android 6+

сделайте на ваше приложение простирается от BaseActivity .

Locale configuration должно быть установлено в каждом activity перед установкой контент — this.setContentView(R.layout.main);

сначала создайте несколько строк.xml для разных языков; затем используйте этот блок кода в onCreate() способ:

Алекс Воловой ответ работает только для меня, если он находится в onCreate методе деятельности.

ответ, который работает во всех методах, находится в другом потоке

вот адаптация кода

надеюсь, что это помогает.

обратите внимание, что это решение, используя updateConfiguration больше не будет работать с Android M релиз через несколько недель. Новый способ сделать это теперь с помощью applyOverrideConfiguration метод ContextThemeWrapper см. API doc

вы можете найти мое полное решение здесь, так как я сам столкнулся с проблемой: https://stackoverflow.com/a/31787201/2776572

время для должного обновления.

во-первых, устаревший список с API, в котором он был устаревшим:

  • configuration.locale (API 17)
  • updateConfiguration(configuration, displaymetrics) (API 17)

вещь, на которую недавно не ответил ни один вопрос, — это использование нового метода.

createConfigurationContext-это новый метод updateConfiguration.

некоторые использовали его как самостоятельный это:

. но это не работает. Почему? Метод возвращает контекст, который затем используется для обработки строк.переводы xml и другие локализованные ресурсы (изображения, макеты, что угодно).

правильное использование таково:

если вы просто скопировали это в свою IDE, вы можете увидеть предупреждение о том, что API требует от вас таргетинга API 17 или выше. Это можно обойти, поместив его в метод и добавив аннотацию @TargetApi(17)

Но подождите. Как насчет старых API?

вам нужно создать другой метод, используя updateConfiguration без аннотации TargetApi.

вам не нужно возвращать контекст здесь.

теперь управлять ими может быть сложно. В API 17+ Вам нужен созданный контекст (или ресурсы из созданного контекста), чтобы получить соответствующие ресурсы на основе локализации. Как ты справляешься с этим?

хорошо, вот как я это делаю:—12—>

этот код работает, имея один метод, который делает вызовы соответствующего метода на основе какого API. Это то, что я сделал с большим количеством различных устаревших вызовов (включая Html.fromHtml). У вас есть один метод, который принимает необходимые аргументы, который затем разбивает его на один из двух (или трех или более) методов и возвращает соответствующий результат на основе уровня API. Он гибок, поскольку вам не нужно проверять несколько раз, » запись» метод делает это за вас. Метод ввода здесь setLanguage

ПОЖАЛУЙСТА, ПРОЧИТАЙТЕ ЭТО ПЕРЕД ИСПОЛЬЗОВАНИЕМ ЕГО

вам нужно использовать контекст, возвращаемый при получении ресурсов. Почему? Я видел здесь другие ответы, которые используют createConfigurationContext и не используют контекст, который он возвращает. Чтобы заставить его работать так, необходимо вызвать updateConfiguration. Что является устаревшим. Используйте контекст, возвращаемый методом, чтобы получить ресурсы.

пример использования:

конструктор или что-то вроде:

и затем, где бы вы ни хотели получить ресурсы, вы делаете:

использование любого другого контекста (теоретически) нарушит это.

AFAIK вам все равно придется использовать контекст действия для отображения диалогов или тостов. для этого вы можете использовать экземпляр действия (если вы находитесь снаружи)

и, наконец, использовать recreate() о деятельности по обновлению содержимого. Ярлык, чтобы не создавать намерение обновить.

Переключение языка в Android-приложении

Есть простой способ реализовать переключение языка в Single-Activity приложении. Стек экранов при этом подходе не сбрасывается, пользователь остается там, где переключил язык. Когда пользователь переходит на предыдущие экраны, они сразу отображаются переведенными. А результат локализации чисел, денежных сумм и процентов может удивить дизайнеров.

О чем пойдет речь, а о чем не пойдет?

Далее не будет ничего о:

  • Теории, которая лежит в основе форматированного вывода строк, и деталях реализации библиотек, которые этим занимаются. То есть того, что помогло бы вам написать свою библиотеку.
  • Ресурсах строковых, векторных и прочих. О том, какие квалификаторы ресурсов использовать, какие картинки на арабском должны отображаться справа налево, а какие нет, и других тонкостях.
  • Процессе централизованного перевода ресурсов для всех платформ. Как его организовать, чтобы всем жилось хорошо, даже iOS-никам.

А пойдет речь о:

  • Практике. Рассмотрим задачу, ее ограничения и решение с диаграммами, примерами и фрагментами кода.
  • API SDK, которое было использовано для этого решения.
  • Особенностях форматирования числовых значений для разных региональных стандартов, о которых стоит знать дизайнерам.

Что мы хотим сделать?

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

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

Архитектурное решение

Представим, что наше приложение написано в соответствии с Single-Activity подходом. Тогда механизм переключения языка может быть реализован следующим образом.

SettingsInteractor является источником текущего значения языка. Он позволяет подписаться на это значение, получить его синхронно и подписаться только на обновления. В случае необходимости можно ввести дополнительную абстракцию над SettingsInteractor по принципу разделения интерфейса. На диаграмме несущественные детали опущены.

AppActivity при создании заменяет контекст на новый, чтобы приложение использовало ресурсы для выбранного языка.

AppPresenter в свою очередь подписывается на обновления языка и уведомляет View об изменениях.

AppActivity при получении уведомления о смене языка пересоздается.

AppActivity является единственной в приложении. Все остальные экраны реализованы фрагментами. Поэтому при пересоздании активити стек экранов сохраняется системой. При возврате на предыдущие экраны они будут переинициализированы и отображаться переведенными. Пользователь останется на списке выбора языка и увидит результат своего выбора мгновенно.

Форматирование чисел, денежных сумм и процентов

Кроме замены контекста необходимо форматировать данные – числа, денежные суммы, проценты. Пусть эту задачу каждая View делегирует отдельному компоненту, назовем его UiLocalizer .

Для преобразования числа в строку UiLocalizer использует соответствующие инстансы NumberFormat .

Обратите внимание, что валюту необходимо устанавливать отдельно.

Если вы экономите такты CPU и биты памяти, а переключение валюты и языка – основная и часто используемая функция вашего приложения, то здесь, конечно, необходим кэш.

Представление языков и валют

Экземпляры класса Locale создаются по языковому тегу, который состоит из двухбуквенного кода языка и двухбуквенного кода региона. А экземпляры класса Currency – по трехбуквенному ISO коду. В этом виде язык и валюта должны сериализовываться для сохранения на диск или передачи по сети, и тогда будет хорошо. Приведем примеры.

Особенности форматирования числовых значений

Результат форматирования чисел в соответствии с региональными стандартами может разойтись с ожидаемым. Символ валюты или ее трехбуквенный код на разных языках будет выводиться по-разному. Знак минуса у отрицательных денежных значений будет появляться в неожиданных местах, а кое-где вместо него будут выводиться скобки. Знак процента может оказаться не совсем тем знаком, к которому мы привыкли.

Дело в том, что с точки зрения региональных шаблонов итоговая строка состоит из префикса и суффикса для положительных и отрицательных чисел, разделителя тысячных и десятичного разделителя, а они разные для разных локалей.

Числа

LanguageNegative PrefixNegative SuffixPositive PrefixPositive SuffixGrouping SeparatorDecimal Separator
ru-RU«-«» ««,»
en-US«-««,»«.»
iw-IL«-««,»«.»
ar-AE«-««٬»«٫»
fr-FR«-«» ««,»
de-DE«-««.»«,»
de-CH«-««‘»«.»
da-DK«-««.»«,»

Валюты

LanguageNegative PrefixNegative SuffixPositive PrefixPositive SuffixGrouping SeparatorDecimal Separator
ru-RU«-«» ₽»» ₽»» ««,»
en-US«-$»«$»«,»«.»
iw-IL«-«» ₪»» ₪»«,»«.»
ar-AE«-«» د.إ.‏»» د.إ.‏»«٬»«٫»
fr-FR«-«» €»» €»» ««,»
de-DE«-«» €»» €»«.»«,»
de-CH«CHF-««CHF ««‘»«.»
da-DK«-«» kr.»» kr.»«.»«,»

Проценты

LanguageNegative PrefixNegative SuffixPositive PrefixPositive SuffixGrouping SeparatorDecimal Separator
ru-RU«-««%»«%»» ««,»
en-US«-««%»«%»«,»«.»
iw-IL«-««%»«%»«,»«.»
ar-AE«-«» ٪»» ٪»«٬»«٫»
fr-FR«-«» %»» %»» ««,»
de-DE«-«» %»» %»«.»«,»
de-CH«-««%»«%»«‘»«.»
da-DK«-«» %»» %»«.»«,»

Более того, результаты форматирования для Android SDK и JDK могут быть разными. При этом все варианты правильные, каждый из них используется в определенных контекстах.

DecimalFormat

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

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

В итоге

Общая схема решения выглядит следующим образом.

Жизненный цикл AppActivity является жизненным циклом всего приложения. Поэтому достаточно пересоздать ее, чтобы перезапустить все приложение и применить выбранный язык. А поскольку активити одна, подписку на изменение языка достаточно держать в одном месте – в AppPresenter .

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

Как проще тестировать? (бонус)

Для экономии времени можно воспользоваться следующим флагом.

Выбрать необходимую псевдолокаль в настройках телефона.

И наблюдать, как едет верстка из-за длинного текста, а некоторые элементы UI упорно не хотят отображаться справа налево.

Более подробную информацию можно прочитать в документации.

Стоит отметить, что псевдолокали не будут работать, если вы подменяете контекст, как в решении выше. Вы ведь подменяете контекст. Поэтому необходимо добавить en-XA и ar-XB в список выбора языка внутри приложения.

На этом все. Хорошей вам локализации и хорошего настроения!

Изменение языка интерфейса в Android

Устанавливаем русский язык в девайсе на Android

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

Способ 1: Системные настройки

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

    Зайдите в настройки девайса. Если в вашем аппарате по умолчанию включен, допустим, китайский, то ориентируйтесь по иконкам – например, «Настройки» («Settings»)в меню приложений выглядит как шестерня.

    Еще проще – зайти в «Настройки» через строку состояния.

  • В списке найдите «Русский» и тапните по нему для добавления. Чтобы русифицировать интерфейс смартфона, просто нажмите на нужный уже в списке активных языков.
  • Как видите – все довольно просто. Однако может быть ситуация, когда среди доступных языков русского нет. Такое случается, когда на аппарате установлена прошивка, не предназначенная для СНГ или РФ в частности. Её можно русифицировать с помощью следующего способа.

    Способ 2: MoreLocale2

    Комбинация из приложения и ADB-консоли позволяет добавить к неподдерживаемой прошивке русский язык.

    1. Установите приложение. Если у вас есть root-доступ — переходите сразу к шагу 7. Если нет — читайте дальше.
    2. Включите режим отладки по USB — сделать это можно способами, описанными в статье ниже.

    Теперь переходите к ПК. Распакуйте архив с ADB в любом месте и перенесите получившуюся папку в корневой каталог диска C.

    Запустите командную строку (способы для Windows 7, Windows 8, Windows 10) и введите команду cd c:adb .

    Введите последовательно следующие команды:

    pm list packages morelocale
    pm grant jp.co.c_lis.ccl.morelocale android.permission.CHANGE_CONFIGURATION

    Окно командной строки при этой должно выглядеть так:

    Теперь можно отключать аппарат от ПК.
    Откройте на девайсе MoreLocale2 и найдите в списке «Русский» («Russian»), тапните по нему для выбора.

    Готово — отныне ваш девайс русифицирован.

    Способ довольно сложный, однако и он не гарантирует результата — если пакет не заблокирован программно, а отсутствует вообще, то вы получите либо частичную русификацию, либо метод вообще не сработает. Если метод с ADB и MoreLocale2 не помог, то единственным решением этой проблемы будет установка русифицированной «из коробки» прошивки или посещение сервисного центра: как правило, его работники охотно помогут вам за небольшую сумму.

    Мы рассмотрели все доступные варианты установки русского языка в телефон. Если вы знаете еще какие-нибудь хитрые методы, поделитесь ими в комментариях.

    Помимо этой статьи, на сайте еще 12360 инструкций.
    Добавьте сайт Lumpics.ru в закладки (CTRL+D) и мы точно еще пригодимся вам.

    Отблагодарите автора, поделитесь статьей в социальных сетях.

    Локализация. חתול מדען (хатуль мадан) — кот учёный

    В статье, посвященной ресурсам, мы уже затрагивали эту тему с теоретической точки зрения. Разберем теперь практическую часть. Мы уже умеем пользоваться строковыми ресурсами и меняли строчки, например, Hello, World на Здравствуй, Мир! Но на самом деле это не совсем правильный подход. Для профессионально написанного приложения лучше использовать другой подход. А именно, локализацию.

    Что это значит? Мы не будем менять строчку Hello, World, которая будет считаться строкой по умолчанию, а создадим новый локализованный ресурс. Это даст нам дополнительное преимущество, если пользователь запустит приложение на телефоне с английской локалью, то он увидит текст на знакомом ему языке. Если приложение запустит русский пользователь, то он увидит текст на русском языке. Согласитесь — очень удобно.

    Напишем приложение, которое будет поддерживать английскую и русскую локализации. По умолчанию будет использоваться английская локализация. В этом случае, если на телефоне не будет найден нужный локализованный ресурс, то будет применяться английский вариант.

    Чтобы не усложнять материал, воспользуемся стандартным приложением, который мы изучали в самом начале. Создадим новый проект «LocaleApp», но на этот раз мы не будем трогать файл strings.xml в каталоге res/values.

    Для русской локализации необходимо создать новый подкаталог values-ru в том же каталоге res. Если вы планируете создавать локализацию только для русского языка, то название каталога не трудно запомнить и вы можете создать папку вручную через res | New | Directory. Но вряд ли вы запомните названия других папок. Поэтому покажу способ создания с помощью мастера студии.

    Щёлкаем правой кнопкой мыши на папке res и выбираем New | Android resource directory. В диалоговом окне в левой части Available qualifiers: выбираем пункт Locale и переносим его в правую часть Chosen qualifiers: с помощью кнопки с двумя стрелками вправо. В появившейся третьей колонке выбираем нужные языки, например, русский. Вы увидите, что в поле Directory name автоматически появится нужное название папки. Дополнительно вы можете указать и регион в колонке Specific Region Only

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

    Изменим его содержание.

    В английской версии им соответствуют ресурсы

    Запустим приложение и увидим, что текст выводится на русском, если у вас на эмуляторе или реальном устройстве выбраны русские настройки.

    Как перейти на американскую локаль? Идём в Настройки→Язык и клавиатура→Выбрать язык. Выбираем английский язык English (United States). Снова запускаем приложение в эмуляторе или на телефоне. Теперь наше приложение будет выглядеть так:

    Ресурсы из каталога res/values считаются ресурсами по умолчанию. Они отображаются в том случае, когда система не найдёт ресурсы для текущей локали устройства. В нашем случае, при выборе любого языка, кроме русского будет использоваться res/values. Если мы захотим разделить англичан и американцев, тогда придётся создавать два каталога: res/values-en-rUK и res/values-en-rUS. Обратите внимание, что перед кодом второй части ставится буква ‘r’. Иными словами, мы определяем не только язык, но и регион.

    Проведем несколько экспериментов. Удалим из файла res/values-ru/strings.xml строковый ресурс hello_world с текстом Здравствуй, Мир!. Сохраним изменения и запустим проект на устройстве с русским языком. Платформа заменила отсутствующий в локализации ресурс дефолтным английским.

    Продолжим опыты и поступим наоборот — удалим теперь ресурс из файла res/values/strings.xml. На устройстве выберем какой-нибудь другой язык, например, итальянский. В этом случае вы увидите что-то непонятное, скорее всего вы получите сообщение об ошибке.

    Отсюда можно сделать вывод, что вам необходимо следить за ресурсами по умолчанию. Старайтесь проконтролировать, чтобы ваше приложение всегда содержало все необходимые ресурсы по умолчанию, а уже потом можете начинать локализацию приложения. Для этого вам достаточно будет скопировать файл в новый подкаталог и отредактировать его.

    На самом деле локализовать можно не только строковые ресурсы. В разных странах принято рисовать какой-нибудь объект в соответствии со своими традициями, например, изображение почтового ящика. В этом случае вы можете создать каталог /res/drawable-de, в котором будут находиться изображения, предназначенные для немцев.

    В коде вы обращаетесь к нужным ресурсам следующим образом:

    Система сама подставит нужную строку. Явно указать, что хочется использовать ресурс на конкретном языке, у вас не получится.

    Спустя продолжительное время один из читателей подсказал, как всё-таки задействовать локальный ресурс. Объяснять код не буду, сами поймёте, когда наберётесь опыта.

    Просмотр и создание локализованных строк в режиме дизайна

    Чтобы увидеть, как меняется текст в различных локализованных версиях вашего приложения, необязательно запускать приложение в эмуляторе. Можно в студии на панели инструментов щёлкнуть на значке глобуса и выбрать из выпадающего списка нужный вам пункт (он появится после того, как вы создадите необходимые локализованные ресурсы), и все локализованные строчки сразу поменяются на экране активности.

    Можно сразу создать локализованный файл через удобный мастер. Там же в меню есть пункт Edit Translations. , который выводит диалоговое окно со списком уже имеющихся строковых ресурсов из вашей программы (раньше). Вам нужно выбрать язык для перевода, а затем заполнить в таблице нужную колонку.

    После того, как вы завершите перевод всех ресурсов, нажимаете на кнопку OK и у вас появится готовая папка с новым файлом strings.xml для выбранной локализации.

    Сейчас в студии вместо диалогового окна выводится окно редактора, в котором можно редактировать текст.

    Непереводимая игра слов с использованием местных идиоматических выражений

    Если вы решили использовать локализацию на разных языках, то можете встретиться с одной проблемой. Предположим, вы перевели только несколько строковых ресурсов и в один прекрасный день решили выложить программу в магазин приложений. Android Studio при сборке подписанного приложения может заругаться, что вы перевели не все строки. Есть два способа обхода проблемы. Вы можете использовать атрибут translatable=»false», чтобы указать среде разработке, что данная строка не требует перевода:

    В окне редактора это сделать проще через флажки в столбце Untranslatable.

    Второй вариант — явно указать, что все строки в файле не нужно переводить с помощью tools:ignore=»MissingTranslation».

    Есть ещё один вариант, когда непереводимые строки размещаются не в ресурсе strings.xml, а в другом файле под именем donottranslate.xml.

    Когда вы исправите строковые ресурсы, то избавьтесь от ошибок через Project | Clean. и попытайтесь собрать приложение заново.

    Поддержка письма справа налево

    Арабы и некоторые другие народы используют непривычную для европейцев схему написания текстов справа налево. В Android 4.2 появилась поддержка данного режима. В блоге (англ.) Native RTL support in Android 4.2 рассказано о некоторых вещах по этой теме.

    Теперь вы можете писать приложение для израильских военкоматов. Русские призывники в интервью офицерам душевного здоровья часто используют сочетание хатуль мадан (חתול מדען). Теперь вы знаете, как локализовать строки пушкинского стихотворения про кота учёного.

    Несколько локалей

    В Android 7.0 (API 24) пользователь может установить несколько локалей. В этом случае, если не будут найдены ресурсы для первой локали, то будут искаться ресурсы для второй локали. Таким образом, если француз знает два языка, например, французский и испанский, а в приложение не поддерживает французского, но поддерживает испанский, то пользователь увидит текст на испанском, а не на английском.

    Смена языка интерфейса на мобильном устройстве с Android

    Изменение языка интерфейса на Андроид-девайсе выполняется в одном из разделов системных настроек, точное расположение которого зависит от версии мобильной ОС и ее оболочки.

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

    1. Запустите «Settings» («Настройки») – значок, с изображением шестеренки, ярлык которого есть в меню приложений и на главном экране. Также перейти в данный раздел ОС можно из панели с элементами быстрого доступа (шторки), вызываемой свайпом от верхней границы экрана вниз.


    Пролистайте список доступных параметров и найдите в нем «System» («Система», обычно один из последних).

    Обратите внимание! На устройствах с отличной от чистой и близкой к ней оболочкой ОС Android вместо «Системы» может потребоваться перейти к «Расширенным настройкам»«Additional Settings».


    Выберите пункт «Languages & input» («Язык и ввод», также может называться просто «Languages» и обычно обозначен изображением планеты).

    Совет: Значительно более быстро перейти к данному разделу можно, если в поиске по настройкам ввести его название, а затем перейти к соответствующей подсказке в результатах выдачи, ориентируясь в том числе на значок.


    Далее перейдите к «Languages» («Языки», обычно обозначен иконкой по типу той, что используется многими переводчиками, в том числе Google и Яндекс).


    Если в списке доступных локализаций есть та, которую вы хотите использовать в качестве основной, переместите ее на первое место. В противном случае воспользуйтесь пунктом «Add a language» («Добавить язык», может обозначаться «+»).

    Примечание: На сторонних оболочках при выполнении предыдущего шага инструкции может сразу открыться показанный в следующем пункте раздел со списком всех поддерживаемых локализаций.

    Совет: Если на клавиатуре еще нет нужной вам раскладки, например, русской, и требуется указать запрос на ней, просто вводите его на латинице – «Russian».


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

    На сторонних же оболочках может быть достаточно банального подтверждения выбора во всплывающем окне.

    После выполнения вышеописанных действий выбранный вами язык будет установлен в качестве основного для всей ОС Андроид и используемых в ее рамках приложений.

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

    Примечание: Если тот или иной вариант локализации потребуется удалить из списка доступных к использованию на мобильном девайсе, повторите действия из пунктов №1-4 инструкции выше, затем вызовите меню, выберите в нем «Удалить», отметьте более ненужный язык галочкой, тапните по значку с изображением мусорной корзины и подтвердите свое намерение во всплывающем окне.

    голоса
    Рейтинг статьи
    Ссылка на основную публикацию
    Статьи c упоминанием слов: