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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
_kda
7 / 7 / 4
Регистрация: 15.03.2016
Сообщений: 31
#1

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

18.07.2016, 05:14. Просмотров 177. Ответов 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):

локализация приложения - Программирование Android
здравствуйте,возникла проблема при локализации. добавил ко всем папкам в res приставку -ru теперь все что в strings отрабатывает...

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.07.2016, 05:14
Привет! Вот еще темы с ответами:

Локализация картинок - Программирование Android
Добрый день ! Я написал приложения и решил локализировать картинки, 1-й вариант стандартный, 2-й русский (ru), и 3-й украинский (uk) , но...

Локализация объявлений AdMob - Программирование Android
Здравствуйте. Хочу попробовать раскрутить свое приложение через AdMob. Объявление (баннер) работает, клики идут, но я не где не могу его...

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

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


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

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

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