Глобализация нескольких форм - PullRequest
2 голосов
/ 07 февраля 2011

У нас есть большое решение с более чем 100 формами, которые имеют ярлыки, кнопки и т. Д. На английском языке.

Все формы имеют общий текст, скажем, например, есть слово «Работа» как минимум на 20 формах.

Мы стремимся перейти на другой рынок и требуем, чтобы все формы были на разных языках.Изучив методы глобализации .NET, мы обнаружили, что стандартный подход нам не подходит;Этот подход является закодированным решением.Мы хотим избежать репликации

button.Text = ResourceManager.getString("job");`

в 20+ формах и хотели бы найти более простое решение.(Мы установили культуру при запуске приложения)

Одним из идей, который у нас был, был resx (файл ресурсов), который мы можем привязать к формам, а затем выбрать значение в этом файле ресурсов для привязки к метке.или текст кнопки.Насколько мы можем судить, мы не можем найти простое решение, подобное этому.

Мы знаем, что можем создавать файлы .resx позади каждой формы, но это слишком много, если мы хотим включить больше языков вбудущее - и также есть ненужное дублирование, когда слово «Работа» находится в более чем одной форме.

Существует ли решение, в котором мы можем связать файл ресурсов (или Satellite Assembly ) с каждой формой / компонентом (без кода), а затем просто выбрать, какое значение мы хотим отобразить?Или есть альтернативные решения, которые похожи?

Ответы [ 2 ]

0 голосов
/ 21 февраля 2011

В конце концов, из-за размера проекта нам пришлось использовать закодированное решение.

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

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

job_label.Text = LanguageResources.job; //example to display "job" on a label

Поскольку Visual Studio создает строгие классы для файлов ресурсовмы можем напрямую вызвать файл ресурса LanguageResources и получить доступ к любому полю в нем.Затем мы создали LanguageResources.de-DE.resx и заполнили его теми же ключами, что и в английской версии, но с немецкими значениями.

Благодаря методам глобализации .NET мы можем установить язык в файле .config, чтобы при запуске приложения оно могло проверять, на каком языке оно должно отображаться, и получать доступ к соответствующему файлу ресурса.Если язык не распознается, по умолчанию используется английский.

0 голосов
/ 07 февраля 2011

Есть способ сделать это очень просто.Начните с создания списка Text свойств всех элементов управления на всех ваших формах, которые вы хотите перевести (чтобы у вас были «ОК», «Отмена», «Работа», «Удалить» и т. Д.).Затем попросите кого-нибудь перевести каждый термин на любой язык (языки), которые вы хотите поддерживать (и добавьте переводы в отдельном столбце для каждого поддерживаемого языка).Затем вставьте / включите этот список (в виде CSV, базы данных, XML-файла или как вам угодно) в ваше приложение.

В событии Load каждой формы вызовите метод, который выполняет итерацию для каждого элемента управления в формерекурсивно, поэтому вы также выбираете все элементы управления, которые находятся на элементах управления контейнера), ищет свойство Text элемента управления в вашем списке переводов и изменяет текст на переведенное значение (на основе текущего языка, который вы определили и /или установить в другом месте).

Я всегда использовал для этого электронную таблицу Excel, поскольку ее было легко встраивать, а также легко отсылать для добавления дополнительных терминов и / или дополнительных языков.

ИспользованиеIMHO, встроенная функция глобализации в .Net - трудная задача, и, как правило, требует, чтобы программист хорошо знал язык, который должен поддерживаться.

...