Страницы

Поиск по вопросам

среда, 25 декабря 2019 г.

Локализация WPF-приложения

#c_sharp #wpf #xaml #локализация


Подскажите, пожалуйста, как выполнить локализацию WPF-приложения?

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


Ответы

Ответ 1



Нормальная локализация в C# представлена одним единственным способом - resx файлы. Для небольших проектов можно просто включить ресурсы, открываем свойства проекта и пользуемся: В проекте при этом создается resx файл с локализацией по умолчанию. Чтобы добавить ещё одну - достаточно создать (Add -> New Item -> resx) ещё один файл, дополнив имя культурой (Resources.{culture}.resx) В коде просто пишем обращение к ресурсу: Console.WriteLine(Resources.Example); Для смены языка приложения принудительно достаточно поменять CurrentUICulture. Теперь по поводу дополнительных сборок. Хороших решений тут нет, простота выше описанного решения теряется, как только вы пытаетесь сделать шаг влево\вправо. Более менее рабочее решение описано тут (enSO), но оно жутко неудобное в использовании. Как можно заметить, простота использования вида Console.WriteLine(Resources.Example); теряется и обращения происходят уже вручную. Это можно автоматизировать, но тогда уже лучше вместо стандартного генератора посмотреть в сторону шаблонов (для общего представления можно глянуть MSDN). Т.е. чтобы сделать всё в одной сборке вам придётся написать замену стандартной схеме сборки ресурсов. Стоит ли оно того - решайте сами. Если интересны варианты с шаблонами - лучше изучите вопрос и задавайте вопросы отдельно, готовое решение так не видел, самописные в разных организациях - попадались. В дополнение, как совет по поводу: Планируется, что программа будет передаваться между коллегами и не хочется создавать зависимостей. Есть click-once, хоть он и очень неудачный на мой взгляд. Но, никаких заморочек по зависимостям и куче сборок не будет.

Комментариев нет:

Отправить комментарий