LINUX.ORG.RU

Своя локализация KDE - как сделать и сопровождать?

 , , , ,


0

2

Я утром попробовал сменить локаль в своей Manjaro KDE на RU впервые за много лет, и просто охренел от того, как разбомбило и перекосило интерфейс. Допустим, я хочу исправить локализацию (конкретно переводы) на свой вариант. Два вопроса:

1) Опишите хотя бы приблизительно механику переводов - т.е. что-то вроде «стягиваешь исходники, открываешь файлы А в проге В, делаешь C и D...»

2) Как я могу это распространять, если не рассматривать вариант «шли патчи в апстрим и жди примут ли их»? Переводы лежат в каких-то mo-файлах, причём каждая прога тащит свой mo-файл, и все они скидывают эти файлы в /usr/share/locale/ru. Получается, мне надо будет затирать оригинальные файлы и заменять их своими? Как это будет выглядеть при обновлениях пакетов и системы?

Deleted

Последнее исправление: Deleted (всего исправлений: 1)

Скриншот выложи

anonymous
()

Шли патчи в апстрим и жди. Ты уверен что твой надмозг будет лучше? Или возьмёшь надмозг из венды?

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

Ты уверен что твой надмозг будет лучше?

Не уверен, но хочу попробовать.

Deleted
()

1) Опишите хотя бы приблизительно механику переводов - т.е. что-то вроде «стягиваешь исходники, открываешь файлы А в проге В, делаешь C и D...»

Переведешь с эльфийского гентушного?

# Get sources
$ cd tmp
$ tar xvf /usr/portage/distfiles/dolphin-18.08.3.tar.xz # Source code location in Gentoo
$ cp -r dolphin-18.08.3 dolphin-18.08.3-r1

# Edit
$ vi dolphin-18.08.3-r1/po/ru/dolphin.po

# Apply changes in Gentoo
$ diff -Naur dolphin-18.08.3 dolphin-18.08.3-r1 > translation_fix_ru.patch
$ mkdir -p /etc/portage/patches/kde-apps/dolphin
$ cp translation_fix_ru.patch /etc/portage/patches/kde-apps/dolphin
$ emerge -v1  kde-apps/dolphin # Reinstall dolphin

2) Как я могу это распространять, если не рассматривать вариант «шли патчи в апстрим и жди примут ли их»?

Не понимаю, почему «шли патчи в апстрим» плохой вариант? Поначалу разобраться, забирать исходники с помощью одной команды git pull, а вконце делать git commit && git push , возможно merge request. Правда до тебя твой же перевод дойдет только когда мейнтейнер дистрибутива решит обновить версию (в Gentoo можно сразу ставить live пакет, но я бы не рекомендовал, лучше локальный патч как показано вверху).

В Gentoo патчи распространяются вместе с пакетами, так что чтобы донести до других, можно отослать патч мейнтейнеру. Ждать апдейта пакета не обязательно, так как твой патч уже есть у тебя в /etc/portage/patches/.

Как это будет выглядеть при обновлениях пакетов и системы?

Не знаю как в других дистрах, а в Gentoo при установке пакета автоматом применяются твои кастомные патчи из /etc/portage/patches/. Если кладешь в каталог без версии (как показано вверху), то и при обновлении будет сделана попытка применить твой патч к новой версии, и, если он подойдет, никаких доп. телодвижений не потребуется. Если в новом пакете изменится оригинальный файл, тогда твой патч не применится, установка прервется с ошибкой, тебе нужно будет проапдейтить патч (ну, или временно исключить его).

Наверное можно как-то руками компилить .po файлы, но, как ты правильно заметил, тогда при переустановке пакета нужно будет опять руками парекомпиливать .po файл и опять его подменять.

P. S. Знаю что ты Генту-хейтер, но надеюсь хоть что-то полезного из моего поста ты для себя вынесешь.

Kroz ★★★★★
()

Я специально не интересовался но помнится что локализация в *.po файлах хранится. И вроде у кед была своя утилита для упрощения их редактирования. https://l10n.kde.org/ тут посмотри может что полезного найдешь. Быстрый просмотр показал что там как куча старья так и вроде более актуальное есть.

Behem0th ★★★★★
()
Ответ на: комментарий от Kroz

Мне нужно собрать все модифицированные mo-файлы в один свой пакет, и как-то устанавливать его в систему.

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

Я делал переводы к KDE.

Все элементарно.

Скачиваешь po файл. Устанавливаешь и запускаешь https://userbase.kde.org/Lokalize/ru

Открываешь в нем файл, редактируешь, добавляешь себя в переводчики в самом верху файла, отправляешь файл в список рассылки.

Разумеется можно делать через git но я его тогда не знал.

sniper21 ★★★★★
()
Ответ на: комментарий от sniper21

Ок, отлично, это довольно просто. Осталось разобраться со второй частью.

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

Слушай, где ты брал po-файлы?

В кедах должны быть в исходниках kde-l10n. Правда нашлось в дереве только app-i18n/kde-l10n-scripts, но может тебе поможет.

imul ★★★★★
()
Ответ на: комментарий от Deleted

Сначала распаковываешь исходники для которых пишешь перевод

Потом:
find src -type f -name «*.c» -exec cat {} \; | xgettext --no-wrap --no-location --language=C --keyword=_ --sort-output -o po/$имяпакета.pot --from-code=utf-8 -

Расширения сам поставь какие надо, хоть *.*, язык программирования выбери из хелпа к xgettext. И самое главное посмотри что используется в качестве keyword. Кто-то делает _ а кто-то что-то другое. Строки будут в исходниках примерно так выглядеть _(""). Вот это _ надо поставить в --keyword=

Потом:
if [ -f po/ru/имяпакета.po ]; then msgmerge --update po/ru/имяпакета.po po/имяпакета.pot; else msginit --input=po/имяпакета.pot --locale=ru_RU.utf8 --output=po/ru/имяпакета.po; fi

Получаешь заготовку для переводов, пишешь что нужно в po/ru/имяпакета.po
Главное что такая команда не затрёт уже сделанные ранее переводы.

Потом:
msgfmt --output-file=po/ru/имяпакета.mo po/ru/имяпакета.po

И кладёшь свой перевод в /usr/share/locale/ru/LC_MESSAGES/ с нужным именем. Можно заскриптовать процесс. Главное не потерять ранее сделанные переводы в po/ru/имяпакета.po

imul ★★★★★
()

Со стыдом на сердце и пониманием, что разобщаешь и без того разобщенный мир.

t184256 ★★★★★
()
Ответ на: комментарий от imul

Сначала распаковываешь исходники для которых пишешь перевод

Исходники чего? В репах кдешных проектов я не нашёл файлов с переводом.

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

Исходники чего?

Исходники — это то, что в дженте скачивается из тырнета и потом компилируется. Если ты пишешь перевод для конкретного пакета, то исходный код этого пакета. Но, текстовые строки можно хранить по разному. Они могут быть непосредственно в исходных текстах программ, а можно например их хранить в базе данных и дёргать оттуда. Главное найти их.

В репах кдешных проектов я не нашёл файлов с переводом.

Своя локализация KDE - как сделать и сопровождать? (комментарий)
Внимательнее прочитай что я там написал. Первые две команды как раз и занимаются тем, что генерируют файлы переводов из текстов на языке программирования. Или нужно ещё подробнее?

Выше твой земляк дал ссылку на онлайн конвертер. Можешь в него загрузить файл .mo и получить нужный тебе .po. Поправить перевод и сконвертировать в .mo --

msgfmt --output-file=имяфайла.mo имяфайла.po

PS: что-то я погорячился с онлайн. Есть же msgunfmt для этого.
msgunfmt - uncompile message catalog from binary format

imul ★★★★★
()
Последнее исправление: imul (всего исправлений: 3)
Ответ на: комментарий от imul

Это создание новой локализации с кастомным именем?

Deleted
()

«Исходники» переводов хранятся в файлах .po.

1. Про механику: Можно опереться на шаблоны .pot (.po templates), которые ежедневно генерятся из исходников и помещаются в SVN, например: https://websvn.kde.org/trunk/l10n-kf5/templates/ Чтобы засинкать свои переводы с новыми версиями шаблонов, используй команду msgmerge. Или приспособь скрипты, которые используются на серверах KDE и запускаются там по крону: https://websvn.kde.org/trunk/l10n-kf5/scripts/ , обрати внимание на merge_all.sh и update_translations.

2. Упаковать твои .po в тарболл, аналогичный kde-l10n-ru.tar.xz. Вместо кода «ru» использовать, например, «ru@vasyapupkin», чтобы не было конфликтов при установке файлов в /usr/share/. Официально поддерживается 4 варианта сербских переводов (см. https://websvn.kde.org/trunk/l10n-kf5/ : «sr@ijekavian/», ...), а у тебя будет второй вариант русского.

aspotashev ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.