Многоязычные Winforms в .Net - мнения и предложения
-
08-07-2019 - |
Вопрос
Итак, у меня есть программа, которая должна быть многоязычной.Единственная разница между тем, что мне нужно, и тем, что я нашел в Интернете, заключается в том, что все компьютеры, на которых будет выполняться моя программа, настроены на локализацию EN.
У нас есть испаноговорящие сотрудники, которые будут использовать программу так же, как и англоговорящие сотрудники.Таким образом, я не смогу настроить что-то на основе локализации компьютера, все это должно быть сделано в коде.
Я подумывал о том, чтобы попытаться создать XML-файл (на самом деле просто набор данных) для каждой формы, которая у меня есть, и сделать так, чтобы каждая таблица данных была выбираемым языком.В каждой таблице у него была бы информация (имя элемента управления, свойство и текст) для установки меток / флажков / и т.д., Которые ему необходимы.Мне нужно будет создать новый элемент управления формой, чтобы у меня была общая функция для просмотра и переименования всех этих элементов управления, если это возможно.
<DataSet>
<English>
<ControlName>labelHello</ControlName>
<ControlProperty>Text</ControlProperty>
<Text>Hello</Text>
</English>
<English>
<ControlName>labelBye</ControlName>
<ControlProperty>Text</ControlProperty>
<Text>Bye</Text>
</English>
<Spanish>
<ControlName>labelHello</ControlName>
<ControlProperty>Text</ControlProperty>
<Text>Hola</Text>
</Spanish>
</DataSet>
Кроме того, я мало что знал о строках в файле ресурсов для каждой формы.Могу ли я сделать это оттуда и использовать .Сетевые функции для достижения этой цели?
Так что я готов выслушать множество предложений, потому что я действительно не хочу возвращаться к программе, которую я только что написал, и вставлять в нее это, я ненавижу возвращаться и добавлять больше функциональности, когда я уже потратил так много времени на этого лоха...
Спасибо
Решение
Вы можете задать желаемый язык программирования в коде, например:
Thread.CurrentThread.CurrentUICulture = new CultureInfo("es-ES");
Видишь эта статья MSDN для получения дополнительной информации.
Другие советы
Это больно, но это не тяжело.В конструкторе WinForm VS2008 выберите форму, просмотрите ее свойства и установите Localizable=True (если вы просмотрите файл с частичным классом / кодом, лежащий в основе, вы увидите новую строку, которая выглядит примерно так
resources.ApplyResources(this, "$this")
Затем для каждой локали, которую вы хотите поддерживать, выберите Язык и локализуйте все необходимые изменения поверх локальной по умолчанию.
Я полагаю, что Windows позволяет пользователю указывать другую локаль для указанного приложения.Последний раз я пробовал это с Windows 2000.
В Windows у вас может быть свой машинный язык EN, но для браузера отдельные пользователи ПК могут выбирать предпочтительные языки (в любом случае, IE и Firefox).Все остальное на ПК на английском языке В IE перейдите в "Инструменты", "Параметры", нажмите кнопку "Язык" на вкладке "Общие".Вы можете указать предпочтительную иерархию языков.
В противном случае соглашайтесь с ответом Джо.