Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Многоязыковый интерфейс Win-приложения на C# ?


Автор: IApple 21.1.2008, 14:03
Как реализовать интерфейс приложения на нескольких языках (через ресурсные файлы или что другое) и как это увязать с визуальным проектированием VS ?

Автор: mr.DUDA 21.1.2008, 14:33
Очень просто.

1. Делаем интерфейс на английском. Теперь, когда всё готово, в свойствах формы ставим Language = Russian (или какой там нужен). Редактируем надписи на форме и кнопках и т.п., заменяя всё на русский. Аналогичным образом делаем для остальных языков
2. Перед показом формы выставляем текущий язык:
Код
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("ru");


Ресурсы добавляются автоматически (в solution explorer-е они под формой). Подробная информация о локализации приложений есть в MSDN.

Автор: IApple 21.1.2008, 15:21
1. Почему есть два выбора и чем они отличаются?

Russian
Russian (Russia)

Автор: CYBERDREAM 21.1.2008, 18:17
Приветствую IApple
Может тоже пригодится: http://rsdn.ru/article/devtools/ResourceOnly.xml  smile 

Автор: bogys 21.1.2008, 18:40
http://www.intuit.ru/department/pl/visualcsharp/8/6.html

Автор: IApple 21.1.2008, 19:52
Во-первых, спасибо всем, кто откликнулся.

1. Делаем интерфейс на английском. Теперь, когда всё готово, в свойствах формы ставим Language = Russian (или какой там нужен). Редактируем надписи на форме и кнопках и т.п., заменяя всё на русский. Аналогичным образом делаем для остальных языков

- действительно работает... но не дай Бог зацепить свойство Localizable - кат только показать в нем false, куда-то всё кропотливо заполненое пропадает :(
- если нужно что-то изменить (добавить пункт меню, например), то необходимо перейти снова на язык (default), потом добавить пункт меню, записать и только потом делать для руского и других, иначе в каком-то языке будет этот пункт меню, а в другом он просто отсутствует!!!

2. Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("ru");

- работает, только чтоб изменить интерфейс главной формы, нужно записать свои установки в которых прописан новый язык, выйти из програмы и зайти наново... Если чесно, у меня снова проблема возникла - еще не умею сохранить свои настройки и при запуске програмы их считать. Попробовал так:

            if (CultureInfo.Equals(Thread.CurrentThread.CurrentUICulture, CultureInfo.GetCultureInfo("ru")))
            {
                Properties.Settings.Default["Language"] = "en";
            }
            else
            {
                Properties.Settings.Default["Language"] = "ru";
            }
            Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(Properties.Settings.Default["Language"].ToString());

            Properties.Settings.Default.Save();
            
а вот здесь где-то "грабли" меня настигли - Save() не пишет...

Properties.Settings для таких нужд используется, или уж совсем не в ту степь полез?

По линку http://rsdn.ru/article/devtools/ResourceOnly.xml 
прекрасно они прогу закатали и я рад (за них), что они разобрались... проблема, что и я хотел разобраться в вопросе, а не найти "черный ящик".

Автор: mr.DUDA 22.1.2008, 18:01
Russian и Russian (Russia) соответствуют "ru" и "ru-RU", если я не ошибаюсь. Подробнее читайте в мсдн.

Автор: jonie 23.1.2008, 00:15
почитайте книгу вроде "C#2005 Для Профессионалов" WroxPrexx
более того глава про локализацию доступна всем нахаляву
http://rsdn.ru/article/dotnet/csprof2005_localization.xml

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)