cGit-UI for Git Repositories

cGit-UI – is a web interface for Git Repositories. cGit CGI script is writen in C and therefore it's fast enough

12 Commits   0 Branches   1 Tag
     5         kx 
     5         kx First run:
     5         kx =========
     5         kx 
     5         kx До первого запуска gettextize --force каталог po/ не должен существовать!
     5         kx При первом запуске gettextize --force создаются каталоги m4, po
     5         kx   m4
     5         kx   ├── ChangeLog
     5         kx   ├── gettext.m4
     5         kx   ├── iconv.m4
     5         kx   ├── lib-ld.m4
     5         kx   ├── lib-link.m4
     5         kx   ├── lib-prefix.m4
     5         kx   ├── nls.m4
     5         kx   ├── po.m4
     5         kx   └── progtest.m4
     5         kx 
     5         kx   po
     5         kx   ├── ChangeLog
     5         kx   ├── Makefile.in.in
     5         kx   ├── Makevars.template
     5         kx   ├── POTFILES.in
     5         kx   ├── Rules-quot
     5         kx   ├── boldquot.sed
     5         kx   ├── en@boldquot.header
     5         kx   ├── en@quot.header
     5         kx   ├── insert-header.sin
     5         kx   ├── quot.sed
     5         kx   └── remove-potcdate.sin
     5         kx 
     5         kx скрипт ./update-gettext копирует файл po/Makevars.template в po/Makevars,
     5         kx если po/Makevars не существовал, а также перезаписывает gettext.h. Кроме
     5         kx того gettextize добавляет файл config.rpath, и редактирует файлы:
     5         kx 
     5         kx Makefile.am:
     5         kx 
     5         kx --- Makefile.am~	2020-10-09 02:57:21.678843280 +0300
     5         kx +++ Makefile.am	2020-10-09 03:05:09.010316710 +0300
     5         kx @@ -5,9 +5,9 @@
     5         kx  # In build order:
     5         kx  # ==============
     5         kx  #
     5         kx -SUBDIRS = cgitcgi
     5         kx +SUBDIRS = po cgitcgi
     5         kx  
     5         kx -EXTRA_DIST = \
     5         kx +EXTRA_DIST = config.rpath m4/ChangeLog  \
     5         kx               doc l10n LICENSE README.md acsite.m4 bootstrap
     5         kx 
     5         kx configure.ac:
     5         kx 
     5         kx --- configure.ac~	2020-10-09 02:16:40.812940376 +0300
     5         kx +++ configure.ac	2020-10-09 03:05:09.022316594 +0300
     5         kx @@ -267,7 +267,7 @@
     5         kx  dnl ============================================================
     5         kx  AC_MSG_CFG_PART(OUTPUT)
     5         kx  
     5         kx -AC_CONFIG_FILES([
     5         kx +AC_CONFIG_FILES([ po/Makefile.in
     5         kx  cgitcgi/Makefile
     5         kx  Makefile
     5         kx 
     5         kx После первого запуска update-gettext необходимо отдать следующие файлы
     5         kx под версионный контроль:
     5         kx 
     5         kx   m4
     5         kx   ├── ChangeLog
     5         kx   ├── gettext.m4
     5         kx   ├── iconv.m4
     5         kx   ├── lib-ld.m4
     5         kx   ├── lib-link.m4
     5         kx   ├── lib-prefix.m4
     5         kx   ├── nls.m4
     5         kx   ├── po.m4
     5         kx   └── progtest.m4
     5         kx 
     5         kx   po
     5         kx   ├── ChangeLog
     5         kx   ├── Makefile.in.in
     5         kx   ├── Makevars
     5         kx   ├── POTFILES.in
     5         kx   ├── Rules-quot
     5         kx   ├── boldquot.sed
     5         kx   ├── en@boldquot.header
     5         kx   ├── en@quot.header
     5         kx   ├── insert-header.sin
     5         kx   ├── quot.sed
     5         kx   └── remove-potcdate.sin
     5         kx 
     5         kx   ABOUT-NLS
     5         kx   ChangeLog
     5         kx   Makefile.am
     5         kx   config.rpath
     5         kx   configure.ac
     5         kx   gettext.h
     5         kx 
     5         kx При последующих запусках update-gettext будут обновляться файлы входящие в поставку
     5         kx gettext и, при необходимости, добавляться записи в ChangeLog файлы. Как правило,
     5         kx ChangeLog файлы будут обновляться только тогда, когда будет инсталлироваться новая
     5         kx версия gettext.
     5         kx 
     5         kx 
     5         kx Далее можно будет держать в каталоге po/ или копировать в каталог po/ с помощью
     5         kx скрипта bootstrap файлы LINGUAS, cgit-ui.pot, ru_RU.utf8.po, а также обновлять
     5         kx содержимое файла po/POTFILES.in.
     5         kx 
     5         kx Для корректной работы команд make, make dist необходимо наличие файлов po/LINGUAS,
     5         kx po/cgit-ui.pot, po/ru_RU.utf8.po, кроме того время последнего изменения данных файлов
     5         kx должно удовлетворять зависимостям описанным в Make-файлах. То есть, если мы хотим
     5         kx обновить po/POTFILES.in по окончании процедуры bootstrap, то перед конфигурированием
     5         kx и сборкой необходимо обновить дату:
     5         kx 
     5         kx   $ cd po
     5         kx   $ touch --touch --reference=Makefile.in.in LINGUAS POTFILES.in ru_RU.utf8.po
     5         kx 
     5         kx Далее мы опишем все процедуры по созданию и обновлению файлов в каталоге po/
     5         kx для успешной локализации продукта.
     5         kx 
     5         kx 
     5         kx Makevars
     5         kx ========
     5         kx 
     5         kx Прежде всего, необходимо отредактировать файл Makevars для того, чтобы при создании
     5         kx source distribution с помощью команды:
     5         kx 
     5         kx   $ make dist
     5         kx 
     5         kx обновление cgit-ui.pot файла, а также файлов *.po и *.gmo происходило корректно 
     5         kx 
     5         kx 
     5         kx Значения переменных:
     5         kx -------------------
     5         kx 
     5         kx XGETTEXT_OPTIONS = --keyword=N_ --keyword=_ --keyword=Q_:1,2 \
     5         kx                    --language=C --add-comments --sort-output --no-wrap
     5         kx 
     5         kx COPYRIGHT_HOLDER = Andrey V.Kosteltsev.
     5         kx 
     5         kx PACKAGE_GNU = no
     5         kx 
     5         kx MSGID_BUGS_ADDRESS = <support@radix.pro>
     5         kx 
     5         kx MSGMERGE_OPTIONS = --update --no-wrap --sort-output --backup=simple
     5         kx 
     5         kx MSGINIT_OPTIONS = --no-wrap
     5         kx 
     5         kx 
     5         kx 
     5         kx Локализация:
     5         kx ===========
     5         kx 
     5         kx Если первый запуск gettextize состоялся и все необходимые файлы были отданы
     5         kx под версионный контроль, то последующие запуски update-gettext можно осуществлять
     5         kx не беспокоясь о том, что файлы будут испорчены. Делать это нужно до вызова bootstrap
     5         kx и configure.
     5         kx 
     5         kx Далее, можно заняться непосредственно локализацией продукта. Первое, что необходимо
     5         kx сделать, это создать файл .pot .
     5         kx 
     5         kx В файле config.h, создаваемым скриптом configure, будет определена константа
     5         kx PACKAGE, например:
     5         kx 
     5         kx /* Name of package */
     5         kx #define PACKAGE "cgit-ui"
     5         kx 
     5         kx и в данном случае, доменом по умолчанию следует считать имя 'cgit-ui'. Файл cgit-ui.pot
     5         kx можно создать следующим образом:
     5         kx 
     5         kx   $ xgettext --keyword=N_ --keyword=_ --keyword=Q_:1,2 \
     5         kx              --language=C --add-comments --sort-output --no-wrap  \
     5         kx              --copyright-holder="Andrey V.Kosteltsev." \
     5         kx              --msgid-bugs-address="<support@radix.pro>" \
     5         kx              --default-domain=cgit-ui --output=po/cgit-ui.pot \
     5         kx              `find -type f -name "*.c"`
     5         kx 
     5         kx для удобства мы создали скрипт gen-pot-file, который выполняет команду xgettext
     5         kx с нужными параметрами. Его следует запускать сразу после обновления исходных
     5         kx кодов программы, откуда xgettext извлекает строки для последующего перевода.
     5         kx 
     5         kx Ключевые слова N_, _, Q_:1,2 означают следующее:
     5         kx 
     5         kx   N_     - извлекаются строки типа N_("string"), которые будут присутствовать в cgit-ui.pot
     5         kx            файле, но переводиться не будут.
     5         kx 
     5         kx   _      - извлекаются строки типа _("string"), которые будут переводиться на другие языки.
     5         kx 
     5         kx   Q_:1,2 - извлекается первая и вторая строка из конструкций типа:
     5         kx 
     5         kx              Q_("%u byte", "%u bytes", (unsigned)bytes)
     5         kx 
     5         kx            и в файле cgit-ui.pot будут создаваться записи подобные следующей:
     5         kx 
     5         kx              #. TRANSLATORS: IEC 80000-13:2008 byte
     5         kx              #: cgitcgi/strbuf.c:558
     5         kx              #, c-format
     5         kx              msgid "%u byte"
     5         kx              msgid_plural "%u bytes"
     5         kx              msgstr[0] ""
     5         kx              msgstr[1] ""
     5         kx 
     5         kx            Таким образом с помощью ngettext() можно добиться корректного перевода числительных,
     5         kx            например, 1 байт, 10 байтов, 21 байт .
     5         kx 
     5         kx Справка по --keywords здесь: https://www.gnu.org/software/gettext/manual/html_node/Default-Keywords.html
     5         kx 
     5         kx Далее необходимо обновить файл POTFILES.in, записав в него список исходных файлов, в которых
     5         kx существуют строки для перевода. Сделать это можно вручную следующим образом:
     5         kx 
     5         kx # List of source files which contain translatable strings.
     5         kx 
     5         kx # cGit CGI source files
     5         kx cgitcgi/fatal.c
     5         kx cgitcgi/strbuf.c
     5         kx . . .
     5         kx 
     5         kx Напомним, что po/POTFILES.in находится под версионным контролем.
     5         kx 
     5         kx Кроме того, под версионным контролем должен находиться файл po/LINGUAS, например,
     5         kx следующего содержания:
     5         kx 
     5         kx # Set of available languages.
     5         kx 
     5         kx ru_RU.utf8
     5         kx 
     5         kx Поскольку в файле LINGUAS присутствует сторока 'ru_RU.utf8', в каталоге, po/
     5         kx должен находиться файл po/ru_RU.utf8.po, начальное состояние которого можно
     5         kx получить с помощью утилиты msginit:
     5         kx 
     5         kx   $ cd po/
     5         kx   $ msginit --no-wrap --locale=ru_RU.utf8 --input=cgit-ui.pot --output=ru_RU.utf8.po
     5         kx 
     5         kx Утилита msginit запросит подтверждение почтового адреса:
     5         kx =======================================================
     5         kx The new message catalog should contain your email address, so that users can
     5         kx give you feedback about the translations, and so that maintainers can contact
     5         kx you in case of unexpected technical problems.
     5         kx 
     5         kx Is the following your email address?
     5         kx   kx@cardhu.radix.pro
     5         kx Please confirm by pressing Return, or enter your email address.
     5         kx kx@radix.pro
     5         kx Retrieving http://translationproject.org/team/index.html... done.
     5         kx A translation team for your language (ru) does not exist yet.
     5         kx If you want to create a new translation team for ru, please visit
     5         kx   http://www.iro.umontreal.ca/contrib/po/HTML/teams.html
     5         kx   http://www.iro.umontreal.ca/contrib/po/HTML/leaders.html
     5         kx   http://www.iro.umontreal.ca/contrib/po/HTML/index.html
     5         kx 
     5         kx Created ru_RU.utf8.po.
     5         kx 
     5         kx Создание файла ru_RU.utf8.po с помощью команды
     5         kx 
     5         kx   $ msginit --no-wrap --locale=ru_RU.utf8 --input=cgit-ui.pot --output=ru_RU.utf8.po
     5         kx 
     5         kx лучше выполнять после конфигурирования исходников для того, чтобы в заголовочном коментарии
     5         kx файла ru_RU.utf8.po имя пакета было задано корректно. То есть cgit-ui по имени PACKAGE.
     5         kx 
     5         kx 
     5         kx Правила перевода числительных записывается на языке С и, для русского языка:
     5         kx 
     5         kx   "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
     5         kx 
     5         kx дает:
     5         kx 
     5         kx   [0] строка
     5         kx   [1] строки
     5         kx   [2] строк
     5         kx 
     5         kx 
     5         kx В дальнейшем, так как файл ru_RU.utf8.po находится под версионным контролем,
     5         kx его надо будет только обновлять.
     5         kx 
     5         kx Допустим в исходные файлы на языке С были добавлены строки, подлежащие переводу, и надо обновить
     5         kx файл ru_RU.utf8.po, чтобы в него попали новые строки. Для обновления файла ru_RU.utf8.po, сначала
     5         kx нужно обновить файл po/cgit-ui.pot с помощью скрипта gen-pot-file:
     5         kx 
     5         kx   $ l10n/gen-pot-file
     5         kx 
     5         kx и затем, обновить файл po/ru_RU.utf8.po:
     5         kx 
     5         kx   $ cd po/
     5         kx   $ msgmerge --update --no-wrap --sort-output --backup=simple ru_RU.utf8.po cgit-ui.pot
     5         kx 
     5         kx Cтарый файл будет сохранен с именем po/ru_RU.utf8.po~
     5         kx 
     5         kx 
     5         kx Таким образом для обновления как самой утилиты gettext, так и файлов локализации, следует
     5         kx (в корне исходного пакета программ) вызывать процедуры обновления в следующем порядке:
     5         kx 
     5         kx   $ ./l10n/update-gettext
     5         kx   $ ./l10n/gen-pot-file
     5         kx   $ ./l10n/merge-ru_RU.utf8-messages
     5         kx 
     5         kx Остается только не забывать добавлять новые файлы в po/POTFILES.in, а при добавлении новых
     5         kx языков (локалей), дополнять файл po/LINGUAS. И наконец еще одно замечание. В файлах *.po,
     5         kx при обновлении номера версии продукта, строку:
     5         kx 
     5         kx "Project-Id-Version: cgit-ui 0.0.6\n"
     5         kx 
     5         kx надо обновлять вручную (разумеется если .po файл уже существует под версионным контролем,
     5         kx а не создается вновь с помощью утилиты msginit).
     5         kx 
     5         kx 
     5         kx Файл nls.h обеспечивает исходный код макроопределениями на случай использования gettext,
     5         kx а также без использования GNU gettext, когда при конфигурировании выбирается опция:
     5         kx 
     5         kx   $ ./configure --disable-nls
     5         kx 
     5         kx Более подробную информацию об утилитах GNU gettext можно получить по адресу:
     5         kx 
     5         kx   https://www.gnu.org/software/gettext/manual/gettext.html
     5         kx 
     5         kx 
     5         kx Enjoy.