Интернационализация моего отдельного приложения - PullRequest
2 голосов
/ 03 апреля 2012

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

Есть идеи?

Ответы [ 4 ]

1 голос
/ 25 июня 2012

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

//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);
}

Если вы хотите более полный примерпроверьте мой блог

1 голос
/ 03 апреля 2012

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

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

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

Сполосните и повторите для каждого языка.

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

1 голос
/ 03 апреля 2012

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

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

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

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

0 голосов
/ 03 апреля 2012

Вы можете использовать Локализуемое свойство Winforms.

CodeProject приятно прогуливается.

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

...