it-swarm.com.ru

Лучшая практика, чтобы сделать многоязычное приложение в C # / WinForms?

Я пытался сделать приложения, подходящие для нескольких языков в C #, так как мне нужно работать над небольшим проектом, где это имеет место. Я нашел в основном два способа сделать это:

Установите для свойства Localizable формы значение true, установите свойство Language, заполните все метки и все такое, и все готово. Главный недостаток, который я вижу в этом: как сделать другие вещи, которые не являются частью формы, готовыми для нескольких языков (например, всплывающие окна, файлы журналов или окна и т.д.).

Создайте файл ресурсов, например, "Lang.en-us.resx" и по одному для каждого языка, например "Lang.nl-nl.resx", и заполните его строками. Кажется, IDE автоматически генерирует для меня класс, поэтому в коде я могу просто использовать Lang.SomeText. Самый большой недостаток, который я вижу в этом: для каждой формы мне нужно самому установить все метки и другие заголовки в коде (и не похоже, что привязка данных работает с этими ресурсами).

Я уверен, однако, что есть и другие способы сделать это.

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

92
pbean

Я всегда использовал файлы ресурсов для многоязычных приложений.
В Интернете много статей, объясняющих, как их использовать.

Я использовал два разных способа:

  • Файл ресурса для каждой формы
  • Глобальный файл ресурсов

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

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

Вопрос вкуса ...

И последнее: я пишу программы на английском и французском, я использую "en" и "fr", а не "en-US" и "fr-FR". Не усложняйте вещи, у разных фальшивок английского (американского, английского, австралийского и т.д.) Мало различий, чтобы использовать только один (то же самое относится и к французскому).

20
ThatBloke

Недавно я написал программу с поддержкой как немецкого, так и английского языков. Я был удивлен, узнав, что если я просто назвал свои английские ресурсы LanguageResources.resx и мои немецкие ресурсы LanguageResources.de.resx, он автоматически выбрал правильный язык. ResXFileCodeGenerator позаботился обо всем этом для меня.

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

Чтобы получить ваши строки, используйте вызовы ResourceManager.GetString или ResourceManager.GetObject. Приложение должно предоставить вам ResourceManager бесплатно.

9
Rick Minerich

В интересах других, кто может столкнуться с этим (через 1+ лет после последнего поста), я являюсь автором профессионального продукта локализации, который делает весь процесс перевода чрезвычайно простым. Это надстройка Visual Studio, которая извлекает все строки ".resx" из любого произвольного решения и загружает их в один файл, который можно перевести с помощью бесплатного автономного приложения (переводчики могут загрузить его с моего сайта). Затем эта же надстройка импортирует переведенные строки обратно в ваше решение. Чрезвычайно прост в использовании благодаря множеству встроенных средств защиты, множеству наворотов и онлайн-справке (вам это не понадобится). Смотрите http://www.hexadigm.com

5
Larry