Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
_kda
9 / 9 / 13
Регистрация: 15.03.2016
Сообщений: 32
#1

Локализация приложения - Программирование Android

18.07.2016, 05:14. Просмотров 222. Ответов 0
Метки нет (Все метки)

Задался вопросом, как локализовать приложение из меню самого приложения. Сама техника создания ресурсов и смены локали Resources ясна:
C#
1
2
3
Configuration configuration = new Configuration(Resources.Configuration);
configuration.Locale = new Locale("en");
Resources.UpdateConfiguration(configuration, null);
Далее возникает вопрос, как обновить все элементы UI с новой локалью? Нашел два возможных варианта:
1. После смены языка вызвать
C#
1
Recreate();
. Тогда активити полностью пересоздастся полным циклом с OnCreate и т.д. Однако в этом случае происходит заметное мигание.
2. Вместо Recreate();, вызывать
C#
1
SetContentView(Resource.Layout.main);
. В этом случае сама активити не пересоздается, а создаются только элементы UI. Мигание не заметно, по крайней мере с двумя текстовыми полями и парой кнопок. В это случае получение ссылок на элементы UI переношу из OnCreate в OnContentChanged:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public override void OnContentChanged()
        {
            base.OnContentChanged();
            _rgLangs = FindViewById<RadioGroup>(Resource.Id.rgLanguages);
            _textView = FindViewById<TextView>(Resource.Id.textView2);
//_rgLangs - RadioGroup с двумя переключателями языка
            _rgLangs.Check(Resources.Configuration.Locale.Language == "ru" ? Resource.Id.rbLangRus : Resource.Id.rbLangEng);
            _rgLangs.CheckedChange += (o, e) =>
            {
                Configuration configuration = new Configuration(Resources.Configuration);
                switch (e.CheckedId)
                {
                    case Resource.Id.rbLangEng:
                        configuration.Locale = new Locale("en");
                        break;
                    case Resource.Id.rbLangRus:
                        configuration.Locale = new Locale("ru");
                        break;
                    default:
                        configuration.Locale = new Locale(Resources.Configuration.Locale.Language);
                        break;
                }
                Resources.UpdateConfiguration(configuration, null);
                SetContentView(Resource.Layout.main);
            };            
        }
Собственно вопрос к знатокам: насколько "эстетично" такое решение и возможно есть другие, более элегантные, способы смены языка приложения "на лету" (вариант с создание функции, в которой каждому элементу UI будет программно будет присваиваться значение из ресурсов не предлагать )?

Добавлено через 26 минут
Второй вопрос касается БД. Есть несколько готовых БД SQLite под разные языки. Есть некий класс, для управления БД на основе SQLiteConnection, который принимает в конструктор путь к БД:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
 public class DatabaseManager
    {
        public string DbPath { get; private set; }
        public DatabaseManager(string dbPath)
        {
            DbPath = dbPath;
            using (var connection = new SQLiteConnection(DbPath))
            {
                connection.CreateTable<Question>();
                connection.CreateTable<Answer>();
            }
        }
}
Соответственно, при смене языка надо подгрузить нужную БД. Вопрос, каким образом их добавить в решение? Добавить в Assets или raw? Можно ли получить полный путь к ним или нужно будет копировать БД во внутреннюю память устройства у потом работать с ней?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.07.2016, 05:14
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Локализация приложения (Программирование Android):

Локализация приложения
Нужно ли создавать папки типа values-en если в приложении ничего не надо...

Локализация приложения
Добрый вечер! Интересует следующий вопрос, в андроид локализация приложения...

локализация приложения
здравствуйте,возникла проблема при локализации. добавил ко всем папкам в res...

Локализация приложения
Сделать локализацию приложения на двух языках: русский и английский с...

Программная локализация приложения
Всем привет! Помогите пожалуйста программно поменять локализацию приложения....

Локализация
Доброго времени суток! Сделал приложение, частью которого является небольшая...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.07.2016, 05:14
Привет! Вот еще темы с решениями:

Локализация картинок
Добрый день ! Я написал приложения и решил локализировать картинки, 1-й...

Локализация объявлений AdMob
Здравствуйте. Хочу попробовать раскрутить свое приложение через AdMob....

Из приложения А проверить наличие установленного на устройстве приложения В
Извиняюсь за нубский вопрос. Подскажите в андроид есть возможность из...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru