В большинстве приложений, которые имеют пользовательский интерфейс необходимо реализовать локализацию. Для работы с ней есть специальный файл ресурсов. В этой статье подробнее о реализации файла ресурсов и работы с ним.
Файл ресурcов .resx
Файл ресурсов .resx представляет из себя файл с xml разметкой, который содержит пары: ключ, значение и комментарии. При его реализации в Visual Studio создаётся этот файл и контроллер к нему. При редактирование пар происходит автоматическое добавление новых методов в контроллер.
Пример в WPF
После создания проекта, необходимо добавить главный файл ресурсов.
Файл открывается в встроенном редакторе ресурсов от Visual Studio. Первая колонка - ключ, вторая - текст, третья - комментарий. Напишем пару полей.
Для надписей/текстов на другом языке нужно создать файл с таким же именем, но с добавкой кода языка. Например: ".ru". Список кодов по ссылке: коды.
Для получения текста/надписи достаточно написать название основного файла ресурса + ключ. Вернуться данные, относительно языка системы.
Как применить в интерфейсе (XAML)
Сперва создадим контроллер ресурсов.
Далее нужно создать расширение для пользовательского интерфейса, чтобы в XAML можно было использовать данные из ресурсов.
Теперь можно перейти в файл интерфейса и использовать ресурсы.
В шапке нужно подключить расширение, у меня это: xmlns:extensions="clr-namespace:WpfResourcesApp.Extensions".
Для использования локализации достаточно в фигурных скобках указать расширение и ключ, по которому хотим вернуть строку.
После запуска приложения будут отображены данные относительно языка системы.
Локализация в Xamarin
Реализация для Xamarin такая же, как и для WPF/UWP, только нужно изменить расширение для работы с интерфейсом.
Итог
Файлы ресурсов очень удобны в реализации и редактировании, также существуют различные приложения для удобной работы с ними. Плюсом является возможность использования не только в UI, но и в любой части кода, например в диалогах.
Ссылка на репозиторий: https://github.com/CrispyPigeon/WpfResourceApp
Телеграмм канал: https://t.me/dotnetreview