LINUX.ORG.RU

Как переводить непереведенные проги?

 


0

1

Нашел вот эту ссылку, решил пропробовать.

Создаю script.sh с:

#!/bin/sh
export TEXTDOMAINDIR=/usr/share/locale
export TEXTDOMAIN=script
. gettext.sh
TITLE="$(gettext 'Drive Mounter')"
TITLE2="$(eval_gettext 'Drive Mounter $x')"

echo $TITLE $TITLE2

Создаю и заполняю script.po:

xgettext script.sh -o script.po

"Language-Team: Russian <LL@li.org>\n"
"Language: ru\n"
"Content-Type: text/plain; charset=UTF-8\n"

#: script.sh:5
msgid "Drive Mounter"
msgstr "Монтажник дисков"

#: script.sh:6
#, sh-format
msgid "Drive Mounter $x"
msgstr "Монтажник дисков"

Теперь конвертирую и добавляю .mo:

sudo msgfmt script.po -o /usr/share/locale/ru/LS_MESSAGES/script.mo

Но echo выводит Drive Mounter вместо монтажника. Руководство относительно свежее, но что-то не так, но что именно?


msgid «Drive Mounter $x»

Эту строку не должен был пропустить. msgfmt не компилирует, если в исходной строке плейсхолдеры не совпадают с плейсхолдерами в переведенной.

А вообще, в shell скриптах перевод не использовал.

emorozov
()
Ответ на: комментарий от Panika

Вот здесь ещё ошибка: /usr/share/locale/ru/LS_MESSAGES/script.mo

Должно быть LC_MESSAGES.

Вообще, навскидку сказать не могу. Давно не писал код с gettext, и не помню нюансы. Может быть, кто-то недавно использовал и сможет подсказать.

В принципе, оно всё простое, как две копейки. И разобраться даже по исходникам тривиально, как оно работает, и где ищет переводы.

В крайнем случае, я бы использовал strace, чтобы посмотреть, где оно ищет переводы, может быть, наведет на какие-то мысли.

emorozov
()

Заглянул в ls:

.rw------- root root 416 B Wed Sep 21 00:00:00 2022 script.mo

Тогда как у всех других стоит .rw-r--r--, поэтому меняем:

sudo chmod 644 /usr/share/locale/ru/LC_MESSAGES/script.mo

И все работает.

Panika
() автор топика