Перевод расширений на разные локали

Ответить
turik02
Сообщения: 538
Зарегистрирован: 01 июн 2022, 13:47
Operating system: ROSA FRESH GNOME 13 64-bit

Перевод расширений на разные локали

Сообщение turik02 »

Расширения Gnome-shell: переведите ваше расширение на разные локали

Чтобы переименовать имя и описание, открываем, например, /home/$USER/.local/share/gnome-shell/extensions/gjsosk@vishram1123.com/metadata.json и меняем name и description.
Снимок экрана от 2025-05-01 15-46-06.png
Создать новый перевод
Проверьте установлен ли:

Код: Выделить всё

sudo dnf install gettex
Открываем корневой каталог с расширением, например /home/$USER/.local/share/gnome-shell/extensions/gjsosk@vishram1123.com/ и создаём папку po, в которой будут храниться файлы перевода (вы также можете хранить их в корневой папке расширения):

Код: Выделить всё

mkdir po
xgettext -k_ -kN_ -o po/messages.pot extension.js file1.js prefs.js
Или короткая версия, чтобы не перечислять все файлы с расширением .js:

Код: Выделить всё

mkdir po
xgettext -k_ -kN_ -o po/messages.pot *.js
Эта команда ссылается на все переводимые строки из файлов extension.js, file1.js и prefs.js в файле messages.pot.
Теперь создадим файл локали для первого перевода. Открываем папку po и выполняем:

Код: Выделить всё

LANG=ru_RU msginit
Он спросит address, можно просто нажать на enter.
Он создаёт файл ru.po, содержащий ключи и значения переводимых строк. Теперь открываем ru.po и приступаем к переводу своего расширения. Также необходимо изменить кодировку в строке “Content-Type: text/plain; charset=ISO-8859-5\n” на “Content-Type: text/plain; charset=UTF-8\n”
Снимок экрана от 2025-05-01 23-06-41.png
Следующий шаг — убедиться, что ваше приложение использует ваши переводы. В корневом каталоге вашей папки с расширением выполните следующую команду, чтобы создать папку, в которой будет находиться файл, который наше расширение сможет интерпретировать на основе предыдущих переводов:

Код: Выделить всё

mkdir -p locale/ru/LC_MESSAGES
А теперь приступаем к созданию файла машинного перевода:

Код: Выделить всё

msgfmt po/ru.po -o locale/ru/LC_MESSAGES/gjsosk@vishram1123.com.mo
Обратите внимание: gjsosk@vishram1123.com это gettext-domain. Его можно найти в файле metadata.json.
Готово! Перезапустите Gnome-shell, и ваш перевод должен заработать.

Для конвертации файлов с расширениями .mo в .po в Linux можно использовать программы msgfmt и msgunfmt, которые входят в состав пакета gettext.
Чтобы сконвертировать файл с расширением .mo в текстовый файл с расширением .po, нужно выполнить команду в консоли:

Код: Выделить всё

msgunfmt gjsosk@vishram1123.com.mo -o gjsosk@vishram1123.com.po
Чтобы наоборот, сконвертировать текстовый файл с расширением .po в бинарный файл с расширением .mo, необходимо выполнить команду:

Код: Выделить всё

msgfmt gjsosk@vishram1123.com.po -o gjsosk@vishram1123.com.mo
Если при выполнении команды xgettext -k_ -kN_ -o po/messages.pot *.js возникает следующая ошибка:
xgettext: Не ASCII-строка у prefs.js:862.
Укажите входную кодировку с помощью параметра --from-code
То нужно писать:

Код: Выделить всё

xgettext -k_ -kN_ -o po/messages.pot *.js --from-code UTF-8
Если в файле ru.po нету нужной строки для перевода, то её можно создать самому дописав в конце.
Ответить

Вернуться в «РОСА с рабочей средой GNOME»