2012-04-03 5 views
2

Я хочу, чтобы приложение WinForms было доступно на трех разных языках, а именно на арабском, английском и французском языках. То, как я это делаю сейчас, - это использовать файлы ресурсов (таблицы перевода) и рекурсивную процедуру, которая пересекает иерархию элементов управления (root - это самая верхняя форма) и присваивает переведенную версию текущего каждого элемента управления свойству Text. Проблема в том, что это не работает для меню (и других элементов управления).Интернационализация моего автономного приложения

Любые идеи?

+0

Является ли это для WinForms? –

+0

@AdamHouldsworth Да – saadtaame

+1

Да. Пожалуйста, следуйте [Руководствам Microsoft I18n] (http://msdn.microsoft.com/en-us/goglobal/bb688110). На арабском языке у вас есть больше работы (правильная обработка направления, правильная перегрузка для MessageBox.Show() ', обеспечение правильных шрифтов и т. Д.). Посмотрите на [этот вопрос] (http://programmers.stackexchange.com/q/98358/2554). –

ответ

1

Можно локализовать System.Windows.Forms.Form экземпляров, используя Localizable. Затем это позволяет использовать свойство Language, позволяющее вам изменить локаль по мере необходимости для внесения изменений в форму. Эти поправки затем сохраняются в файлах ресурсов, суффиксах которых соответствует локаль (точно так же, как и стандартные файлы ресурсов). Затем они собираются в спутниковые сборки, а остальные обрабатываются CLR.

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

http://msdn.microsoft.com/en-us/library/y99d1cd3(v=vs.100).aspx

Есть преимущества прокатки самостоятельно - однако пользовательский интерфейс часто всегда основное препятствие для этого маршрута.

0

Свойство Winforms Localizable.

CodeProject имеет хорошую прогулку.

Мы разбили ресурсы в нескольких файлах ресурсов, некоторые локализованные и некоторые из них были стандартными (не отображаемые строки). Затем мы использовали Resourcemanager для управления строками.

1

Я думаю, что вы должны использовать другой подход.

Для каждой формы, которую вы хотите локализовать, перейдите к свойствам формы и установите для свойства Localizable значение true.

Затем от Язык свойство droplist, выберите язык, который вы хотите поддержать, и введите соответствующий текст.

Промыть и повторить для каждого языка.

Для таблицы строки, вы можете добавить новый файл Resources.??.resx для каждого языка (например Resources.de.resx для немецкого)

1

Если вы хотите изменить язык на лету без перезапустив приложение, вам нужно использовать такую ​​функцию в сочетании с тем, что сказали вам ребята.

//refresh all the controls e sub-controls of the form 
private void RefreshResources(Control ctrl, ComponentResourceManager res) 
{ 
    ctrl.SuspendLayout(); 

    res.ApplyResources(ctrl, ctrl.Name, CurrentLocale); 

    foreach (Control control in ctrl.Controls) 

    RefreshResources(control, res); // recursion 
    ctrl.ResumeLayout(false); 
} 

Если вы хотите более полный пример проверки my blog

Смежные вопросы