Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
1

Способ определения языка текущего пользователя.

16.10.2011, 16:41. Показов 1784. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private void Window_Loaded(object sender, RoutedEventArgs e)
{
    bool languageSearched = false;
    for (int i = 0; i < LocalizationManager.LocResDictsList.Count; i++)
    {
        CultureInfo cultInf = new CultureInfo(LocalizationManager.LocResDictsList[i]);
        if (cultInf.LCID == Thread.CurrentThread.CurrentUICulture.Parent.LCID)
        {
            LocalizationManager.SelectLanguage(i);
            languageSearched = true;
            break;
        }
    }
    if (!languageSearched)
        LocalizationManager.SelectDefaultLanguage();
}
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
    static class LocalizationManager
    {
        static List<string> _locResDictsList;
        static readonly string _uriPathOfResDictsPrefix;
        static readonly string _uriPathOfResDictsPostfix;
        static ObservableCollection<ComboBoxItem> _obsCollLanguageComboBoxItems;
        static ComboBox _comboBoxLang;
 
        static LocalizationManager()
        {
            _uriPathOfResDictsPrefix = "/BlaBla;component/Localization/Languages/LanguageResource.";
            _uriPathOfResDictsPostfix = ".xaml";
 
            _locResDictsList = new List<string>()
            {
                "RU", "UK", "EN"
            };
            //------------
        }
 
        public static List<string> LocResDictsList
        {
            get { return _locResDictsList; }
        }
    //------------
    }
Как видно из кода, я получаю язык не по полному его названию en-US, ru-RU, а по EN, RU и т.д. Поэтому я и сравниваю по LCID. Я как понял, что бы не стояло после en- LCID будет одинаков для всех en-...

Я прав? Могут ли быть проблемы с определением языка скажем у канадского пользователя? У него же по идее винда на английском, но после en-... стоит вроде бы не EN, а что-то другое. Я что-то вообще толком инфы не нашёл по этой теме. На мсдн вообще есть немного инфы по этой теме, но на вопрос статьи на мсдн не отвечают. Больше интересует можно ли использовать такое определение? Я просто не хочу для каждой культуры делать свою локализацию, пусть для всех англоговорящих будет одна локализация, вот я и использую EN, RU и т.д.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.10.2011, 16:41
Ответы с готовыми решениями:

Самый простой способ определения языка пользователя
Добрый день! Подскажите, пожалуйста, какой самый простой из качественных способов определить язык...

способ определения текущего режима втавки/замены для редактирования текстового поля
Может кто-нибудь подскажет способ определения текущего режима втавки/замены для редактирования...

Смена текущего языка в RichTextBox
На формочке поставил 4 компонента RichTextBox. И у некоторых пользователей получается что при...

Кроссплатформенный вариант определения текущего времени
Привет, подскажите пожалуйста варианты платформонезависимого определения времени в данный момент....

3
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
16.10.2011, 16:46  [ТС] 2
Если кому не совсем понятно, что там за _uriPathOfResDictsPrefix и постфикс, то смотрите скриншот, это я строю пути до каждого ресурсного файла.

Не по теме:

Не переносите только тему в раздел WPF, к которому она никак не относится. Тот раздел помоему читают редко, тут больше вероятности получить ответ. Просто мало ли, увидите ".xaml" и т.д. :)

Изображения
 
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
18.10.2011, 05:25  [ТС] 3
Народ, подскажите где можно глянуть на все эти названия en-EN, en-.., fr-FR и прочее (гуглил, толку ноль). Что я спрашивал выше зная эти названия можно программно затестить за пару минут.

Добавлено через 9 часов 46 минут
Оказалось всё просто, нужно было лишь попробовать:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
        private void Method()
        {
            CultureInfo[] cultures = CultureInfo.GetCultures(CultureTypes.AllCultures);
            StringBuilder sb = new StringBuilder(100); //ну вот просто 100 и всё =)
 
            foreach (var culture in cultures)
            {
                if (culture.Parent.LCID == 9)
                    sb.AppendLine(culture.Name);
            }
 
            Clipboard.SetText(sb.ToString());
        }
В итоге имеем:
en-US
en-GB
en-AU
en-CA
en-NZ
en-IE
en-ZA
en-JM
en-029
en-BZ
en-TT
en-ZW
en-PH
en-IN
en-MY
en-SG
Откуда я взял цифру 9? Просто получил все культуры и в режиме отладки поискал, что совпадает у всех начинающихся на en например. Оказалось у всех родительский язык английский под LCID 9. Но этот способ не во всех случаях подходит, короче надо думать...

Не по теме:

Очередная тема где я общаюсь сам с собой. Прикольно 8-).

0
nio
18.10.2011, 09:49     Способ определения языка текущего пользователя.
  #4

Не по теме:

Цитата Сообщение от Casper-SC Посмотреть сообщение
Очередная тема где я общаюсь сам с собой. Прикольно
ну а чего бы и не побщаться с образованным человеком? ;) Можно даже поспорить - в споре рождается истина :jokingly:

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.10.2011, 09:49

API для определения текущего разрешения монитора
Подскажите какая функция API показует текущее разрешение монитора и как ею пользоваться? Или может...

SQL запрос для определения текущего остатка
Не могу чуть разобраться как написать SQL запрос для определения текущего остатка в подразделении...

Определение текущего пользователя
Как определить текущего пользователя у win

Определение текущего пользователя
var i:string; begin i:= Application.ExecutablePath; // получаем путь до нашей программы и...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru