Как поменять язык в приложении
можно ли программно изменить язык приложения, все еще используя ресурсы Android?
Если нет, можно ли запросить ресурс на определенном языке?
Я хотел бы позволить пользователю изменить язык приложения из приложения.
это возможно. Вы можете установить локаль. Однако я бы не рекомендовал этого делать. Мы пробовали это на ранних стадиях, это в основном борьба с системой.
У нас есть то же самое требование для изменения языка, но мы решили согласиться с тем, что 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.
LocalizationActivity расширяет AppCompatActivity, поэтому вы также можете использовать его при использовании фрагментов.
по данным в этой статье
- создать MyApplication класс, который расширяет Application
- переопределить attachBaseContext() обновить язык.
зарегистрировать этот класс в манифесте.
создать BaseActivity и переопределить onAttach() обновить язык. необходимо для Android 6+
сделайте на ваше приложение простирается от BaseActivity .
Locale configuration должно быть установлено в каждом activity перед установкой контент - this.setContentView(R.layout.main);
сначала создайте несколько строк.xml для разных языков; затем используйте этот блок кода в onCreate() способ:
Алекс Воловой ответ работает только для меня, если он находится в onCreate методе деятельности.
ответ, который работает во всех методах, находится в другом потоке
вот адаптация кода
надеюсь, что это помогает.
обратите внимание, что это решение, используя updateConfiguration больше не будет работать с Android M релиз через несколько недель. Новый способ сделать это теперь с помощью applyOverrideConfiguration метод ContextThemeWrapper см. API doc
время для должного обновления.
во-первых, устаревший список с 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 очень удобная для использования система локализации, достаточно создать папку и в ней файл со строками. Но в приложение сложно встроить все возможные языки, и не плохо бы предоставить пользователю выбор языка, отличного от стандартного.
Приведу пример такой ситуации:
В приложении есть 2 языка стандартный английский и русский. Это приложение решил установить украинец, у которого аппарат на украинском языке, но так же он хорошо знает русский, а английский не очень. Но вот Андроид, обнаружив, что в приложении нет украинского языка, запустит приложение со стандартным языком, который в нашей ситуации — английский, а для того, что бы приложение запустить на русском, необходимо менять язык системы, что не очень хорошо.
Вот для этой и многих подобных ситуаций есть решение, в настройки вывести пункт выбора языка, который включает автоматический выбор языка, английский, русский, etc. (смотря какие требуются).
Приступим к написанию.
1. Необходимо создать класс Application и определить его в манифесте в соответственном разделе application в параметре android:name="".
например:
(хотя у некоторых этот класс уже может быть)
2. Создать настройку с выбором языка, для этого в файле настроек добавим:
3. В файл со строками добавим нужные строки:
4. А в файл с массивами 2 текстовых массива:
5. В созданном классе в методе onCreate объявим строковую переменную «lang», чтение переменной из настроек, изменение конфигурации приложение, и метод, который вызывается при изменении конфигурации, в котором еще раз её меняем (без повторной смены язык не хотел меняться во всем приложении). В итоге получим следующий класс:
6. После для того, что бы язык применился, необходимо полностью перезапустить приложение (finish(); тут не поможет, так как перезапускает только активити), для этого использую команду System.exit();
(В примере сделал пункт перезапуска по будильнику).
7. Для того, что бы в не возникло проблем в сети советуют в манифесте к каждому активити, в котором используется локализация:
А так же, что бы приложение отображалось правильно определить поддерживаемые размеры экранов:
Вот таким нехитрым образом можно упростить пользователю жизнь.
Плюсы этого подхода:
-Пользователю дается выбор языка.
Минусы:
-Необходимость указывать в массивах добавляемые языки.
Если во время первой настройки iPhone вы выбрали русский язык, то он будет использоваться не только для интерфейса операционной системы смартфона, но и для сторонних приложений из App Store. Если приложение, которое вы ставите на своё устройство, не поддерживает русский, то оно будет использовать английский.
Если вы знаете английский на должном уровне, то это не станет для вас проблемой. Другое дело, если в своё время вы изучали немецкий, французский, итальянский или другой язык. В этом случае вам точно будет удобнее использовать приложение без поддержки русского на одном из них.
Также смена языка может быть полезна тем, кто хочет выучить иностранный язык.
До выхода iOS 13 вы не могли выбрать необходимый язык для конкретного приложения. Теперь же у вас появилась возможность как определить приоритет языков для всех новых программ и игр, так и установить любой необходимый для конкретного софта. Вот как это сделать.
Как задать предпочитаемый порядок языков в системе
Шаг 1. Откройте «Настройки».
Шаг 2. Перейдите в меню «Основные».
Шаг 3. Разверните пункт «Язык и регион».
Шаг 4. Чтобы добавить в список новый язык, используйте кнопку «Добавить язык».
Приложения будут использовать первый язык из этого списка по умолчанию. Если какое-то его не поддерживает, оно будет переходить дальше по списку сверху вниз, пока не найдёт тот, с которым работает.
Как выбрать язык для конкретной программы
Шаг 1. Откройте «Настройки».
Шаг 2. Перейдите в меню приложения, язык которого необходимо изменить.
Шаг 3. Разверните пункт «Язык» в разделе меню «Предпочитаемый язык».
Шаг 4. Выберите необходимый язык: в разделе меню «Предложенные языки» будет список из тех, которые добавлены в перечень предпочитаемых, в «Другие языки» — остальные.
В этом меню показываются только те варианты, которые поддерживаются конкретным приложениям. Язык в программе моментально меняется после выбора необходимого в «Настройках».
Вы нашли в Google Play Маркет интересное приложение, но в нем отсутствует перевод на ваш язык? Не беда: вы в любой момент сможете перевести любое Android приложение на один из 103 языков с помощью приложения Language Navi.
Интересной особенностью Language Navi, которое только что появилось в Google Play Маркет является то, что оно не вносит никаких изменений приложение которое переводит. Принцип работы Language Navi основан на том, чтобы считывать текст с экрана вашего смартфона или планшета и переводить его на лету с помощью системы автоматического перевода Google.
Выглядит работа Language Navi достаточно фантастически: все тексты в запущенном вами приложении через пару-тройку секунд переводятся на язык, который вы заранее выбрали.
Среди достоинств и возможностей приложения:
- Не требует для работы Root прав
- Автоматическое определение исходного языка
- Перевод на один из 103 языков с помощью Переводчика Google
В ближайшем будущем разработчик обещает добавить:
- Локализацию самого приложения на разные языки
- Оптическое распознавание текста
Работает приложение на устройствах с операционной системой Android версии 8.0 Oreo и выше, и так как новинка пока еще находится на стадии разработки, она пока еще не лишена отдельных недостатков: Language Navi иногда переводит не все тексты, а размеры шрифтов перевода не всегда соответствуют размерам шрифта оригинала.
Тем не менее, тем кому нужно быстро перевести Android приложение на понятный язык, чтобы оперативно разобраться с его функциями и возможностями, оно придется как нельзя кстати.
Пользоваться Language Navi очень просто:
1. При первом запуске приложения вам нужно будет включить его службу в разделе "Спец. возможности" в меню основных настроек системы:
2. В списке приложений выбрать то, которое вы хотели бы перевести
3. Выбрать (при желании) язык с которого будет производиться перевод ( Translate from ) и язык на который вы хотели бы переводить приложения (Translate To)
4. Наслаждаться результатом
При необходимости вы можете быстро вернуться к искодному языку в приложении открыв шторку уведомлений системы и нажав на кнопку «Stop»
Добавлено 02.02.2020:
Некоторое время назад Language Navi было удалено из онлайн-магазина Google. Но вы можете по-прежнему скачать его установочный APK файл по этому адресу.
В качестве замены мы могли бы порекомендовать вам воспользоваться приложением с неказистым названием "Перевести на экран" (Screen Translate), которое умеет делать то же самое, но несколько иным способом.
При его работе на экран выводится кнопка, на которую нужно нажать для выделения области экрана с текстом, который нужно перевести. Для перевода используются онлайн сервисы Google, Яндекс, Microsoft, Bing и прочие на выбор пользователя.
Вопрос заблокирован. Ответить на него невозможно.
Удалить запись? Все, что вы написали, станет недоступно. Не удалось прикрепить файл. Нажмите здесь, чтобы повторить попытку. Сейчас уведомления отключены и вы не получаете электронные письма о новых записях. Чтобы включить их, откройте свой профиль и перейдите в настройки уведомлений.Добавить или удалить ссылку
We found the following personal information in your message:
This information will be visible to anyone who visits or subscribes to notifications for this post. Are you sure you want to continue?
Сейчас уведомления отключены и вы не получаете электронные письма о новых записях. Чтобы включить их, откройте свой профиль и перейдите в настройки уведомлений . Компания Google очень серьезно относится к неправомерному использованию своих сервисов. Мы рассматриваем подобные нарушения в соответствии с законодательством вашей страны. Получив вашу жалобу, мы изучим ее и примем необходимые меры. Мы свяжемся с вами только в том случае, если потребуется дополнительная информация или появятся интересующие вас сведения.Если вам нужно, чтобы тот или иной контент был изменен согласно действующему законодательству, воспользуйтесь этим инструментом.
Запись не относится к теме, посвящена сторонним продуктам, написана в неуважительной форме или содержит персональную информацию. Запись содержит домогательства, дискриминационные высказывания, изображение наготы, вредоносный, противозаконный, сексуальный или рекламный контент или ее автор выдает себя за другое лицо. Компания Google очень серьезно относится к неправомерному использованию своих сервисов. Мы рассматриваем подобные нарушения в соответствии с законодательством вашей страны. Получив вашу жалобу, мы изучим ее и примем необходимые меры. Мы свяжемся с вами только в том случае, если потребуется дополнительная информация или появятся интересующие вас сведения.Если вам нужно, чтобы тот или иной контент был изменен согласно действующему законодательству, воспользуйтесь этим инструментом.
Читайте также: