6

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

Andrew
  • 17,943
  • Без перезагрузки активити сделать нельзя средствами системы. Нельзя просто сделать. Вам надо, например, подменять Resources системы или, хотя бы, отлавливать изменение конфигурации при возврате на активити и пересоздавать её заново. Кажется, там метод onRecreate() нужен – ЮрийСПб May 22 '18 at 12:51
  • нет, за перезагрузку активити я не против, она пересоздается на лету, мне нужно что-бы приложение само не перезагружалось, то есть выбрали язык, и он применился на лету во всех активити а не только на одной – Andrew May 22 '18 at 13:14
  • Это невозможно в силу несуществования других активити. Т.е. одновременно всего одна живая активити может быть и всеми остальными управлять нельзя. Вам надо просто при входе/возврате к к-л активити проверять что её локаль соответствует локализации в настройках. И пересоздавать если нет – ЮрийСПб May 22 '18 at 13:22
  • то есть по факту можно на одной активити менять язык, и потом просто перекидывать значение локализации в другие активити при их активации, только нужно как-то запоминать язык и все?? – Andrew May 22 '18 at 13:25
  • Да, всё верно. Сохраните язык в виде строки в префах и во всех активити проверяйте, что язык ресурсов активити совпадает с сохраненным в префах – ЮрийСПб May 22 '18 at 13:28
  • вот сразу возникло несколько тупых вопросов, если я правильно понял то "префы" это preferencies но я ни разу не видел и не работал с таким видом ресурсов, второй вопрос если мы сохраняем наш язык в префах то как потом его проверить? обращаться к определенной строке или как? – Andrew May 22 '18 at 13:44
  • 1
    Да, префы - SharedPreferences, в данном случае полученные через PreferencesManager.getDefaultSharedPreferences(context). Там хранятся пары ключ-значение. Запишите по к-л ключу строку с кодом языка (ru, en, fr) и, получая в активити локаль из ресурсов в виде строки вычлените из неё код языка и сравните с тем, что в префах. – ЮрийСПб May 22 '18 at 14:09
  • ок, спасибо за помощь буду разбираться)) – Andrew May 22 '18 at 14:19

0 Answers0