Я искал приложения, подходящие для нескольких языков на C #, так как мне нужно работать над небольшим проектом, где это так. Я нашел в основном два способа сделать это:
Установите для свойства Localizable формы значение true, установите свойство Language, заполните все метки и тому подобное, и все готово. Главный недостаток, который я вижу в этом: как сделать другие вещи, не являющиеся частью формы, готовыми для нескольких языков (например, всплывающие окна, файлы журналов или окна и т. Д.).
Создайте файл ресурсов, например «Lang.en-us.resx» и по одному для каждого языка, например «Lang.nl-nl.resx», и заполните его строками. Кажется, что среда IDE автоматически генерирует для меня класс, поэтому в коде я могу просто использовать Lang.SomeText. Самый большой недостаток, который я вижу в этом, заключается в том, что для каждой формы мне нужно самому установить все метки и другие подписи в коде (и, похоже, привязка данных не работает с этими ресурсами).
Я уверен, однако, что есть и другие способы сделать это.
Итак, что лучше всего? Что проще всего для небольших приложений (несколько форм, подключение к базе данных и т. Д.) И что лучше всего масштабируется для более крупных приложений?
источник
Ответы:
Я всегда использовал файлы ресурсов для многоязычных приложений.
В Интернете есть много статей, объясняющих, как их использовать.
Я использовал два разных способа:
Файл / форму ресурсов легче реализовать, вам нужно только ввести значения в файл ресурсов, но я считаю, что этот подход сложнее поддерживать, поскольку метки разбросаны по всему приложению.
Глобальный файл ресурсов позволяет централизовать все метки (изображения и т. Д.) В одном файле (для каждого языка), но это означает ручную настройку меток в загрузке формы. Этот файл также можно использовать для сообщений об ошибках и т. Д.
Вопрос вкуса ...
И последнее: я пишу программы на английском и французском языках, я использую «en» и «fr», а не «en-US» и «fr-FR». Не усложняйте ситуацию, разные диалекты английского языка (американский, английский, австралийский и т. Д.) Имеют достаточно мало различий, чтобы использовать только один (то же самое и для французского).
источник
Недавно я написал программу с поддержкой немецкого и английского языков. Я был удивлен, обнаружив, что если я просто назвал свои английские ресурсы LanguageResources.resx и мои немецкие ресурсы LanguageResources.de.resx, он автоматически выбрал правильный язык. ResXFileCodeGenerator позаботился обо всем за меня.
Обратите внимание, что поля в двух файлах были одинаковыми, и любые еще не введенные поля для немецкого языка будут отображаться в приложении как английские, поскольку файл по умолчанию является наиболее нестандартным языком. При поиске строки она идет от наиболее конкретной (например, .de-DE.resx) к наименее конкретной (например, .resx).
Чтобы добраться до ваших строк, используйте вызовы ResourceManager.GetString или ResourceManager.GetObject. Приложение должно предоставить вам ResourceManager бесплатно.
источник
Для тех, кто может столкнуться с этим (спустя 1+ лет после последней публикации), я являюсь автором профессионального продукта локализации, который упрощает весь процесс перевода. Это надстройка Visual Studio, которая извлекает все строки «.resx» из любого произвольного решения и загружает их в один файл, который можно перевести с помощью бесплатного автономного приложения (переводчики могут загрузить это с моего сайта). Затем та же надстройка импортирует переведенные строки обратно в ваше решение. Чрезвычайно прост в использовании с множеством встроенных средств защиты, множеством наворотов и онлайн-справкой (она вам не понадобится). См. Http://www.hexadigm.com
источник