Загрузить все ресурсы локализации при запуске - PullRequest
6 голосов
/ 09 января 2012

Я нашел несколько похожих тем, но не получил ответ, который искал.

Я просто пробую интернационализацию, прежде чем начать "более серьезную" (WinForms)проект.Итак, в настоящее время в моем небольшом тестовом приложении я решил локализацию с помощью сателлитных сборок (языковые dll-файлы) и заполнил текстовые поля элементов управления с помощью ResourceManager, а изменение языка было решено с помощью Thread.CurrentThread.CurrentCulture & Thread.CurrentThread.Методы CurrentUICulture.

CultureInfo ci = new CultureInfo(lang);
Thread.CurrentThread.CurrentCulture = ci;
Thread.CurrentThread.CurrentUICulture = ci;

this.button1.Text = Resources.LocTest.String1;

Я хотел бы загрузить все тексты из ресурсов при первом запуске программы, не только основную форму, но и все они (также в тех формах, которые еще не созданы)!Как я мог реализовать это?Является ли эта процедура вообще выполнимой?

Я получил несколько советов о том, что мне следует упростить весь процесс локализации, установив для свойства localizable значение true и сделать переводы выполненными.И большинство учебных пособий следуют этому пути.

Кто-нибудь знает, какой метод мне использовать?

Заранее спасибо!

Я очень запутался слокализация ...

1 Ответ

2 голосов
/ 10 февраля 2012

пожалуйста, используйте второй метод, который вы упомянули.

Я получил несколько советов о том, что мне следует упростить весь процесс локализации, установив для свойства «localizable» значение true и выполнить переводы.И большинство руководств следуют этому пути.

Потому что именно так Microsoft думает, что локализация должна выполняться в приложении winforms.http://msdn.microsoft.com/en-us/library/y99d1cd3%28v=vs.90%29.aspx

Одна проблема с вашим первым решением: Как вы утверждаете, что текст на другом языке будет отображаться правильно?
Это одна из возникающих проблем, Microsoft былав курсе.С помощью небольшого инструмента, найденного в SDK, называемого: WINRES.exe, вы можете просмотреть разработанные формы и написать для них перевод.http://msdn.microsoft.com/en-us/library/8bxdx003%28v=vs.90%29.aspx

Если вы хотите изменить язык во время выполнения и обновить все формы, эта статья может оказаться для вас подсказкой: http://msdn.microsoft.com/en-us/magazine/cc163609.aspx#S9
В следующих строках дается объяснение, как обновить пользовательский интерфейс:

Dim crm As ComponentResourceManager  
crm = New ComponentResourceManager(GetType(Main))   
crm.ApplyResources(cmdAddCustomer, cmdAddCustomer.Name)   
crm.ApplyResources(mnuFile, mnuFile.Name)   
crm.ApplyResources(mnuFileAddCustomer, mnuFileAddCustomer.Name)   

Последние 3 строки этого кода можно найти в каждой форме (localizable = true) в файле конструктора.
Таким образом, вы можете указать интерфейс для метода обновления, который должна реализовывать каждая форма, реализовыватьинтерфейс и после смены языка переберите все формы и вызовите эти методы.

Надеюсь, это поможет вам ...

...