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

  • В Android 13 появилась встроенная функция, позволяющая выбирать определенный язык для каждого приложения в настройках, при условии, что приложение совместимо с этим языком.
  • Приложения должны указывать языки с помощью LocaleConfig (автоматически или вручную) и могут использовать такие API, как LocaleManager или AndroidX, для синхронизации внутренних селекторов.
  • В более старых версиях Android или в сильно модифицированных системах возможности ограничены изменением глобального системного языка или использованием сторонних решений.
  • Правильное управление языковыми ресурсами улучшает взаимодействие с многоязычными пользователями и требует применения передовых методов как в настройке системы, так и в ее разработке.

Как назначить разные языки одному приложению

Вы владеете несколькими языками и хотели бы, чтобы каждое приложение на вашем Android-смартфоне говорило на нужном вам языке, без необходимости менять всю систему? Всё больше пользователей этого хотят. назначить другой язык для конкретного приложенияБудь то для практики языка, лучшего понимания сложного интерфейса или просто потому, что система не на предпочитаемом ими языке.

В последних версиях Android, особенно начиная с Android 13 и с учетом региональных настроек в Android 14, Google внедрила официальную функцию для выберите язык для каждого приложения отдельноОднако есть важные нюансы: не все приложения совместимы, путь к меню различается в зависимости от производителя, а на старых версиях Android приходится прибегать к обходным путям или сторонним приложениям. Кроме того, если вы разработчик, система теперь предлагает API для централизованного управления языком вашего приложения.

Что представляет собой функция выбора языка для каждого приложения в Android?

В Android 13 появилась ключевая новая функция, неофициально называемая... «язык для каждого приложения»Вместо того чтобы все приложения слепо следовали системному языку, пользователь может вручную выбрать, какой язык будет использовать каждое совместимое приложение.

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

Есть несколько важных моментов, касающихся поведения этих приложений при включенной этой функции:

  • Когда приложение настроено следующим образом «использовать системный язык»Android использует первый поддерживаемый язык из списка системных языков в качестве эталонного.
  • В разделе «Все языки» в настройках приложения отображаются только следующие языки: языки, которые фактически поддерживает приложениеЕсли нужного языка нет, вы не сможете его принудительно установить.
  • Android 14 и более поздние версии добавляют расширенные региональные настройки (формат даты, единицы измерения и т. д.), но это отдельные параметры, не связанные с языковой функцией каждого приложения.

Как изменить язык конкретного приложения на Android 13 и более поздних версиях?

На телефоне с «чистым» Android 13 (например, на линейке Pixel) процесс смены языка приложения довольно прост. Названия некоторых пунктов меню могут немного отличаться в зависимости от оболочки производителя, но суть та же: вы попадаете на экран, где перечислены совместимые приложения, и выберите конкретный язык для каждого из них.

В Android 13 общие шаги будут выглядеть примерно так:

  1. Откройте приложение Настройки с вашего Android-устройства.
  2. Прокрутите вниз до раздела система и введите его (на некоторых мобильных устройствах это может находиться в разделе «Дополнительные настройки» или аналогичном).
  3. Доступ к Языки и ввод текста (или «Языки и записи»).
  4. Нажмите на Языки приложенийВы увидите список приложений, которые позволяют выбрать язык.
  5. Выберите конкретное приложение, язык которого вы хотите настроить.
  6. выбирать язык, который вы хотите, чтобы это приложение использовало Среди доступных вариантов: вы можете выбрать конкретный язык или оставить язык системы по умолчанию.

После этого при следующем открытии приложения оно должно появиться непосредственно в списке приложений. выбранный вами языкпри условии, что приложение содержит перевод на этот язык. Если вы вернетесь в Настройки > Система > Языки приложений, вы сможете увидеть статус каждого приложения (использует системный язык или определенный).

Альтернативные маршруты из настроек приложения

Помимо основного пути через меню «Система», на многих устройствах с Android 13 и выше можно также изменить язык приложения, перейдя непосредственно в меню «Система». из настроек приложенияЭто полезно, если вы уже управляете разрешениями, уведомлениями или другими параметрами конкретного приложения.

Типичный путь будет следующим:

  • открытый Настройки > Приложения.
  • Выберите приложение, которое вас интересует.
  • Среди предложенных вариантов обратите внимание на следующее: Язык (если приложение поддерживает отдельные языки и производитель сохраняет этот раздел).
  • Выберите нужный язык для этого приложения.

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

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

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

Если вы не нашли своё приложение в списке, следует помнить о нескольких моментах:

  • Только приложения, разработчики которых указаны в списке. объявлены поддерживаемые языки и включили поддержку языков для каждого приложения в своем манифесте (через android:localeConfig или автоматической системы).
  • В некоторых приложениях язык можно изменить только с помощью внутренняя конфигурация самого приложения или из параметров учетной записи (например, из онлайн-сервисов, которые связывают язык с профилем пользователя).
  • Если приложение «зависло» на языке, который не соответствует настройкам вашей системы (например, оно остается на китайском языке, хотя в системе установлены испанский и английский языки), иногда может помочь следующее: удалить данные приложения Чтобы сбросить выбранный язык. Примечание: это может привести к удалению учетных данных, сохраненных данных, настроек и т. д.

На устройствах с высокой степенью кастомизации, таких как некоторые ТВ-приставки или модифицированные версии Android, например YunOS, может даже отсутствовать официальный раздел выбора языка для каждого приложения, поэтому Вы не сможете использовать механизм, представленный в Android 13.В таких случаях варианты сводятся к использованию сторонних приложений, изменению системного языка или более сложным решениям (получение root-прав, модификация прошивки и т. д.), со всеми вытекающими отсюда рисками.

Распространенные проблемы при смене языка приложения и способы их решения.

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

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

  • Перезапустите приложение: Полностью закройте приложение (при необходимости принудительно остановите его) и откройте снова, чтобы перезагрузить языковые ресурсы.
  • Проверь это У вас есть сетевое подключение.При смене языка некоторые приложения загружают языковые ресурсы или дополнительные пакеты с сервера. Если соединение отсутствует, изменения могут не вступить в силу.
  • Добавьте язык в общие системные настройки и попробуйте снова:
    1. Откройте «Настройки» на вашем Android-устройстве.
    2. Перейти к Система > Языки и ввод текста > Языки.
    3. Добавьте этот язык в список как дополнительный (он не обязательно должен быть основным).
    4. Подождите несколько минут и вернитесь к экрану. Языки приложений.
    5. Снова откройте приложение и выберите нужный язык.

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

Обратная совместимость с Android и особые случаи.

Функция выбора родного языка для каждого приложения предназначена для того, чтобы Android 13 (уровень API 33) и более поздние версииВ Android 11, Android 12 или сильно модифицированных системах (например, в некоторых китайских форках или с темами оформления от определенных производителей) этот раздел настроек либо отсутствует, либо очень ограничен.

На более старых устройствах или устройствах с модифицированными системами могут возникать подобные ситуации:

  • Приложение автоматически меняет язык в зависимости от глобальный системный язык, без возможности выбрать другой вариант специально для неё.
  • Система поддерживает лишь несколько языков (например, только китайский и английский), хотя базовая прошивка теоретически поддерживает гораздо больше языков, как это бывает в некоторых ТВ-приставках или устройствах под управлением YunOS.
  • Приложение всегда отображает системный язык мобильного телефона, с которым оно синхронизировано, как это бывает с некоторыми другими приложениями. умные браслеты или носимые устройства Это зависит от языка приложения на вашем подключенном мобильном устройстве.

В таких случаях выбор вариантов более ограничен.

  • Использование сторонних приложений для принудительного изменения языка (Language Enabler, App Locale и т. д.), которые пытаются заставить приложение использовать определенный языкИх эффективность зависит от версии Android, и во многих случаях для их работы требуется root-доступ.
  • Измените общий язык системы на язык, совместимый с приложением или носимым устройством, при условии, что остальные приложения и меню совместимы. Они также изменят язык..
  • На устройствах с очень закрытой прошивкой (например, на некоторых китайских ТВ-приставках или кастомных устройствах YunOS) зачастую единственным реальным способом изменить язык всей среды является... установить альтернативную прошивку Или поищите прошивку на другом языке, это вариант для опытных пользователей, сопряженный с риском поломки устройства.

Например, если у вас есть ТВ-приставка на YunOS, которая отображает системный интерфейс только на китайском языке, но вы знаете, что приложение KOGameBox TV показывает английский интерфейс, когда система работает на английском языке, вы не сможете указать приложению использовать английский язык, если система остается на китайском языке и нет настроек языка для каждого приложения. А на телефоне с Android 11, таком как Xiaomi Redmi Note 8T, который по умолчанию не включает настройки языка для каждого приложения, вы также не сможете указать, чтобы определенное приложение использовало английский язык, в то время как остальная часть системы работает на испанском, если только вы не используете сторонние методы и, очень часто, root-доступ.

Как изменить общий системный язык на Android?

Как назначить разные языки одному приложению

Если то, что вы хотите, это Язык на всем мобильном устройстве изменился. (включая все приложения, использующие системный язык), классический процесс настройки системного языка остается в силе в Android 13 и многих более ранних версиях.

Обычно поступают следующим образом:

  • Открыть приложение конфигурация или в настройках вашего мобильного устройства.
  • входит система или, в некоторых моделях, в Дополнительные настройки.
  • Доступ к Языки и ввод (или «Языки и ввод текста»).
  • Нажмите на языки.
  • Добавьте или выберите язык, который хотите использовать в качестве основного, и поместите его на первую позицию в списке.

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

Языковые возможности для каждого приложения для разработчиков в Android 13

С точки зрения разработки, Android 13 делает важный шаг вперед, позволяя пользователям... Настройте язык каждого приложения в разделе «Настройки». без необходимости изобретать велосипед, создавая собственную логику. Для достижения этой цели используются два основных элемента: централизованный раздел конфигурации системы и набор общедоступных API, синхронизирующихся с этой конфигурацией.

Основные новые функции:

  • Системные языковые настройки для каждого приложения: единый экран Android, на котором отображаются все языки, поддерживаемые каждым приложением, чтобы пользователь мог выбрать предпочитаемый им язык.
  • API LocaleManagerтакие методы, как setApplicationLocales() y getApplicationLocales() Они позволяют приложению устанавливать или проверять свой язык во время выполнения, согласовывая это с тем, что пользователь выбрал в настройках.
  • Поддержка обратной совместимости в AndroidXЭквивалентные API в AndroidX (например, в AppCompat 1.6.0 или выше) упрощают внедрение этого поведения и в более ранние версии Android, хотя и с некоторыми различиями в контексте (они работают с AppCompatActivity (для Android 12 и более ранних версий).

Эти API помогают сократить дублирование кода, эффективно управлять разделенными APK-файлами, интегрироваться с системой резервного копирования и поддерживать единообразный пользовательский опытНеважно, меняет ли пользователь язык в настройках или во встроенном селекторе приложения, результат отобразится в обоих местах.

Включить автоматическую поддержку языков для приложений (AGP 8.1 и Android Studio Giraffe)

Google рекомендует разработчикам включать эту функцию при любой возможности. «Автоматическая языковая совместимость приложений»Эта функция позволяет самой системе сборки генерировать файл конфигурации языка.LocaleConfig) на основе существующих ресурсов, без необходимости создавать и поддерживать этот XML-файл вручную.

Ключевые особенности этой автоматизированной системы:

  • Это работает из Android Studio Giraffe и Android Gradle Plugin 8.1при условии, что у кого-либо есть compileSdkVersion 33 или выше.
  • AGP проверяет ресурсы проекта (папки). res/values-* (как из модуля приложения, так и из зависимых библиотек) и генерирует архив LocaleConfig со всеми поддерживаемыми региональными конфигурациями.
  • В окончательный вариант манифеста автоматически добавляется ссылка на это. localeConfigСледовательно, нет необходимости включать этот атрибут. android:localeConfig вручную.
  • Если вы добавляете в свое приложение новые языковые ресурсы, они автоматически включаются в сгенерированный файл LocaleConfig, и вам не нужно ничего дополнительно менять.

Для обеспечения автоматической совместимости разработчик должен:

  1. Включите эту функцию, добавив соответствующую опцию. generateLocaleConfig внутри блока androidResources {} файла build.gradle.kts (o build.gradle с использованием Groovy) на уровне модуля.
  2. Укажите локаль по умолчанию используя файл resources.properties в папке res в модуле приложения, установка свойства unqualifiedResLocale с допустимым названием региона (например, unqualifiedResLocale=en-US).

AGP объединяет этот регион по умолчанию со всеми остальными папками языковых ресурсов (values-es, values-frи т. д.) и генерирует согласованный файл LocaleConfig. Однако, если разработчик уже создал файл LocaleConfig вручную, он должен удалить его перед активацией этой системы, потому что Если они существуют одновременно, компиляция завершится неудачей..

Укажите языки, поддерживаемые вручную, с помощью android:localeConfig

Если по какой-либо причине вы не хотите или не можете использовать автоматическую генерацию, вы можете вручную определить поддерживаемые языки с помощью XML-файла. locales_config.xml и атрибут android:localeConfig в манифесте.

Процедура, выполняемая вручную, включает в себя:

  1. Создайте файл res/xml/locales_config.xml список всех языков, поддерживаемых приложением (включая резервную языковую версию, которая обычно соответствует...). res/values/strings.xml основы). Например:
    <?xml version="1.0" encoding="utf-8"?>
    <locale-config xmlns:android="http://schemas.android.com/apk/res/android">
    <locale android:name="en-US" />
    <locale android:name="en-GB" />
    <locale android:name="fr" />
    <locale android:name="ja" />
    <locale android:name="zh-Hans-MO" />
    <locale android:name="zh-Hant-MO" />
    </locale-config>
  2. В AndroidManifest.xmlвнутри этикетки <application>добавьте атрибут android:localeConfig="@xml/locales_config" чтобы указать системе, где находятся языковые настройки:

<manifest>
...
<application
android:localeConfig="@xml/locales_config"
... >
</application>
</manifest>

Кроме того, данная структура предоставляет возможность динамически обновлять этот параметр c LocaleManager.setOverrideLocaleConfigТаким образом, можно будет настраивать доступные языки в зависимости от региона, проводить A/B-тестирование или интегрировать локализацию на стороне сервера.

Как правильно формировать названия локали?

Для того чтобы всё это работало, необходимо использовать правильные названия языковых локалейВ Android используется соглашение об объединении кода языка, необязательной последовательности скриптов и кода региона, разделённых дефисами:

  • Язык: двухбуквенный код ISO 639-1 (или, в некоторых случаях, трехбуквенный код ISO 639-2).
  • Сценарий (необязательно): код ISO 15924 (например, «Hans» для упрощенного китайского, «Hant» для традиционного китайского).
  • Регион (необязательно): двухбуквенный код ISO 3166-1-alpha-2 или трехзначный код UN M.49.

Вот несколько распространенных примеров допустимых тегов:

  • EN-US – Английский (США).
  • ан-ГБ – Английский (Великобритания).
  • es – Испанский, без указания страны.
  • PT-BR – Бразильский португальский.
  • ж-Ханс – Упрощенный китайский.
  • ж-Хант – Традиционный китайский.

Google предоставляет множество примеров в файлах. locale_config.xml Пример, включающий длинные списки языков, таких как af (африкаанс), ar (арабский), de (немецкий), es-US (испанский язык США), fil (филиппинский), fr-CA (французский язык Канады), hi (хинди), ja (японский), ru (русский), vi (вьетнамский). до охвата десятков стандартных мест.

Укажите языки в Gradle с помощью resourceConfigurations.

Ещё одним важным аспектом в сфере развития является право собственности. resourceConfigurations в build.gradle Этот параметр позволяет указать, какие языки должны быть включены в APK или AAB-файл, избегая включения неиспользуемых переводов и уменьшая размер приложения.

Типичная конфигурация будет выглядеть примерно так:

android {
...
defaultConfig {
resourceConfigurations += [
"en",
"en-rGB",
"fr",
"ja",
"b+zh+Hans+MO",
"b+zh+Hant+MO"
]
}
}

Если это свойство задано, система сборки упаковывает только файлы. ресурсы перечисленных языковЭто предотвратит включение переводов из библиотек, которые ваше приложение не хочет предоставлять. Рекомендуется указывать языки только в [соответствующем разделе/программе/и т. д./приложении...]. resourceConfigurations с теми, которые определены в locales_config.xml или сгенерированный файл LocaleConfig, чтобы избежать несоответствий.

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

В приложение интегрированы языковые селекторы и используется AndroidX.

У многих приложений такая функция существовала ещё до Android 13. выбор пользовательского языка в его настройкахВ связи с появлением новых API, Google рекомендует использовать для внутренних селекторов общедоступные языковые API для каждого приложения, чтобы избежать дублирования логики и обеспечить синхронизацию конфигурации с системой.

Если приложение использует библиотеку совместимости AndroidX (рекомендуется), оно может использовать такие методы, как: AppCompatDelegate.setApplicationLocales() y AppCompatDelegate.getApplicationLocales() Начиная с версии AppCompat 1.6.0. Некоторые важные подробности:

  • В Android 12 и более ранних версиях обратно совместимые API работают в контексте AppCompatActivityне в глобальном контексте применения.
  • При звонке setApplicationLocales(), Деятельность воссоздана, если только приложение не управляет изменениями региональной конфигурации самостоятельно (что требует дополнительных усилий).
  • Можно указать AndroidX на автоматическое управление хранение региональных настроек установка значения autoStoreLocales en true в AndroidManifest за службу AppLocalesMetadataHolderServiceи помечая эту службу как неактивную или неэкспортируемую.

Примером соответствующей записи в манифесте может служить:

<application ...>
<service
android:name="androidx.appcompat.app.AppLocalesMetadataHolderService"
android:enabled="false"
android:exported="false">
<meta-data
android:name="autoStoreLocales"
android:value="true" />
</service>
</application>

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

Прямое использование API фреймворка LocaleManager

Ещё один вариант для приложений, работающих на Android 13 и более поздних версиях, — использование собственных API фреймворка, в частности, класса. LocaleManagerТаким образом, приложение может изменять и считывать предпочитаемый вами язык непосредственно из системы, минуя AndroidX (хотя и ценой потери некоторой удобной обратной совместимости).

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

// 1. El usuario elige una etiqueta de idioma, por ejemplo "xx-YY".
LocaleManager lm = mContext.getSystemService(LocaleManager.class);
lm.setApplicationLocales(new LocaleList(Locale.forLanguageTag("xx-YY")));
// 2. El sistema actualiza la configuración regional y reinicia la app.
// 3. A partir de ahí, la UI se muestra en el idioma elegido.

Чтобы получить текущий язык приложения и отобразить его в селекторе:

LocaleManager lm = mContext.getSystemService(LocaleManager.class);
LocaleList currentAppLocales = lm.getApplicationLocales();
// Usar currentAppLocales para marcar la opción activa en la UI.

При таких вызовах пользователь выбирает следующий язык: идеально синхронизированы между внутренним селектором приложения и экраном «Настройки > Языки приложения».

Дополнительные рекомендации по выбору языка для каждого приложения.

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

Вот несколько важных советов:

  • Указывайте текущий язык при запуске других приложений.Если вы запускаете интенты, поведение которых зависит от языка (например, распознавание речи с EXTRA_LANGUAGEПопробуйте изменить это значение в соответствии с языком, который фактически использует приложение, а не просто с системным языком.
  • Установить заголовок Accept-Language при открытии веб-страниц из приложения (например, в пользовательских вкладках Chrome) с помощью Browser.EXTRA_HEADERS, чтобы удаленный контент отображался на языке интерфейса приложения.
  • Si VAS удаление Поддержка языков для каждого приложения в системе (удаление) android:localeConfig (из манифеста) рассмотрите возможность восстановления языка приложения до системного языка с помощью LocaleListCompat.getEmptyLocaleList() o LocaleList.getEmptyLocaleList()чтобы пользователь не «застрял» в языке, который сложно перевести в обратный режим.

Разработчикам также рекомендуется ознакомиться с официальными примерами, техническими блогами и видеороликами Google по локализации, поскольку они включают в себя следующее: Практические примеры, образцы кода и примеры конфигурационных файлов. (как обширный locale_config.xml с десятками стандартных языков AOSP).

Благодаря всей этой экосистеме Android 13 и 14 наконец-то позволяют сделать то, о чем многие пользователи давно просили: свободно настраивайте язык каждого приложения без необходимости жертвовать общим языком системы. Если приложение совместимо и устройство обновлено, просто перейдите в меню «Языки приложений», чтобы одно приложение было на английском, другое на испанском, а третье на китайском языке, в то время как остальная часть системы останется на вашем обычном языке. На более старых или сильно модифицированных устройствах решение предполагает изменение глобального языка, использование сторонних инструментов или, по возможности, привлечение самих разработчиков к использованию этих API для обеспечения более гибкого и удобного пользовательского опыта.