Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
_kda
7 / 7 / 4
Регистрация: 15.03.2016
Сообщений: 29
18.07.2016, 05:14     Локализация приложения #1
Задался вопросом, как локализовать приложение из меню самого приложения. Сама техника создания ресурсов и смены локали 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? Можно ли получить полный путь к ним или нужно будет копировать БД во внутреннюю память устройства у потом работать с ней?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.07.2016, 05:14     Локализация приложения
Посмотрите здесь:

Android локализация приложения
Локализация объявлений AdMob Android
Android Приложения - клиенты
Монетизация приложения Android
Android Меню приложения
Локализация Android
Локализация картинок Android
Android Локализация приложения
Android Автозапуск приложения
Архитектура приложения Android
Android Локализация приложения
Программная локализация приложения Android

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

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

Текущее время: 10:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru