- PVSM.RU - https://www.pvsm.ru -
Создавая новый проект, мне приходилось использовать либо *.resx для WinForms, либо I2Localization для Unity, либо другие решения для локализации приложений. Все эти решения похожи тем, что приходится придумывать ключ-локализации, вставлять его в код и в словарь. Поначалу все хорошо, но со временем этот процесс начинает раздражать. Вместе с тем, смотря на ключ в коде не всегда понятно о чем речь.
О ситуации когда нужно добавить локализацию в большой проект где её вообще не было, я даже говорить не буду как это сложно.
Не знаю почему, но оказывается существует уже давно такое готовое решение как gnu/gettext. Расспрашивая своих знакомых и коллег (тех кто работает с .NET), большинство даже и не слышал о таком. Поэтому решил поделиться с этим удобным инструментом.
Принцип прост. Вы пишите код со строками на английском языке, запускаете утилиту, которая сканирует исходники и предоставляет вам возможность перевода. Никаких ключей придумывать не надо. Текст на английском и есть ключ.
1) Устанавливаем пакет NGettext через Nu-get:
PM> Install-Package NGettext
NGettext [1] – кроссплатформенная реализация GNU/Gettext для .NET.
2) Добавляем в свой проект дополнительный файл, который немного упростит синтаксис:
https://github.com/neris/NGettext/blob/master/doc/examples/T.cs [2]
Также добавляем директорию в проект, где будут хранится переводы:
MyProjLocru-RULC_Messages
В моем случае получается такая картина:
3) Добавляем пути в файл T.cs:
static T()
{
var localesDir = Path.Combine(Directory.GetCurrentDirectory(), "Loc");
_Catalog = new Catalog("Test", localesDir, new CultureInfo("ru-RU"));
}
Упрощено. Для примера только русский. (Есть возможность считывать словари из самой сборки)
4) Пишем свой код с использованием локализации. Вместо “text” пишем T._(“text”)
namespace TestCode
{
static class Program
{
public static void Main(string[] args)
{
Console.WriteLine(T._("Hello, World!"));
Console.WriteLine(T._("Cat"));
Console.ReadKey();
}
}
}
5) Теперь нам необходимо перевести весь наш текст. Качаем PoEdit [3]. Создаем файл перевода:
Файл → Создать → папка LC_MESSAGES → Test.po
Указываем папку, в которой находятся наши исходники. Их программа будет сканировать:
Так же необходимо указать ключевое слово, которое будет искать poEdit для перевода:
Добавляем нужный нам перевод и сохраняем.
Добавляем файлы перевода в проект. Делаем их Copy always:
(Есть возможность встраивать их в саму сборку)
Готово. Запускаем:
Также можно найти готовые библиотеки для локализации интерфейсов:
→ WPF [4]
→ Дополнительная информация об использовании NGettext [1]
→ Информация о GNU/Gettext [5]
Автор: GLeBaTi
Источник [6]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/c-2/301879
Ссылки в тексте:
[1] NGettext: https://github.com/neris/NGettext
[2] https://github.com/neris/NGettext/blob/master/doc/examples/T.cs: https://github.com/neris/NGettext/blob/master/doc/examples/T.cs
[3] PoEdit: https://poedit.net
[4] WPF: https://github.com/robert-j-engdahl/ngettext-wpf
[5] Информация о GNU/Gettext: https://en.wikipedia.org/wiki/Gettext
[6] Источник: https://habr.com/post/432786/?utm_campaign=432786
Нажмите здесь для печати.