Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Локализация в WinForms - сменя языка в меню. Как? / 4 сообщений из 4, страница 1 из 1
02.08.2013, 14:53
    #38353097
M234
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Локализация в WinForms - сменя языка в меню. Как?
VS 2008, .Net 3.5
Есть проиложение у которого для каждой формы есть Resource-файлы для разных языков - EN, DE, RU и тд.
Сейчас язык выбирается автоматически в зависимости от культуры активной для системы. То есть в немецком виндовсе - автоматически загрузятся немекцкие ресурсы, а в русском - русские и тд.

Хочется дать возможность пользователю в меню выбрать язык. То есть что бы он в меню кликнул на "Английский" и ррраааз - все надписи на всех элементах поменялись.

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

Спасибо.
...
Рейтинг: 0 / 0
02.08.2013, 15:11
    #38353140
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Локализация в WinForms - сменя языка в меню. Как?
M234, в решении с ресурсами без перезагрузки приложения или хотя бы переоткрытия формы не обойтись вроде. Язык ресурсов можно поменять через Thread.CurrentThread.CurrentUICulture
...
Рейтинг: 0 / 0
02.08.2013, 15:17
    #38353159
M234
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Локализация в WinForms - сменя языка в меню. Как?
bazileM234, в решении с ресурсами без перезагрузки приложения или хотя бы переоткрытия формы не обойтись вроде. Язык ресурсов можно поменять через Thread.CurrentThread.CurrentUICulture

Ясно. Я так и предполагал.
Ну тогда остаётся "руками" после смены языка в меню менять св-ва конртолов. Нудно, но возможно.
Спасибо.
...
Рейтинг: 0 / 0
02.08.2013, 16:39
    #38353325
fortibransa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Локализация в WinForms - сменя языка в меню. Как?
Вот функция приведения к локализации открытой формы

Код: 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.
27.
28.
29.
30.
31.
        public static void localizeForm(Form someForm, System.Globalization.CultureInfo cultureInfo)
        {
            Type someFormType = someForm.GetType();
            ResourceManager res = new ResourceManager(someFormType);

            //зададим список свойств объектов, которые будем извлекать из файла ресурсов  
            string[] properties = { "Text", "HeaderText", "Size", "Location" };

            foreach (string propertyName in properties)
            {
                //выбор всех свойств класса формы, извлечение из файла ресурсов значения, и их установка  
                foreach (FieldInfo fieldInfo in someFormType.GetFields(BindingFlags.NonPublic | BindingFlags.DeclaredOnly | BindingFlags.Instance))
                {
                    PropertyInfo propertyInfo = fieldInfo.FieldType.GetProperty(propertyName);
                    if (propertyInfo == null)
                        continue;
                    object objProperty = res.GetObject(fieldInfo.Name + '.' + propertyInfo.Name, cultureInfo);
                    if (objProperty == null) continue;
                        object field = fieldInfo.GetValue(someForm);
                        if (field != null)
                            propertyInfo.SetValue(field, objProperty, null);
                }
                //код для установки свойств самих форм  
                PropertyInfo propertyInfo1 = someFormType.GetProperty(propertyName);
                if (propertyInfo1 == null)
                    continue;
                object objProperty1 = res.GetObject("$this." + propertyInfo1.Name, cultureInfo);
                if (objProperty1 == null) continue;
                propertyInfo1.SetValue(someForm, objProperty1, null);
            }
        }
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Локализация в WinForms - сменя языка в меню. Как? / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]