cSvn-UI for SVN Repositories

cGit-UI – is a web interface for Subversion (SVN) Repositories. cSvn CGI script is writen in C and therefore it's fast enough

6 Commits   0 Branches   2 Tags
bfc1508d (kx 2023-03-24 03:55:33 +0300   1) 
bfc1508d (kx 2023-03-24 03:55:33 +0300   2) First run:
bfc1508d (kx 2023-03-24 03:55:33 +0300   3) =========
bfc1508d (kx 2023-03-24 03:55:33 +0300   4) 
bfc1508d (kx 2023-03-24 03:55:33 +0300   5) До первого запуска gettextize --force каталог po/ не должен существовать!
bfc1508d (kx 2023-03-24 03:55:33 +0300   6) При первом запуске gettextize --force создаются каталоги m4, po
bfc1508d (kx 2023-03-24 03:55:33 +0300   7)   m4
bfc1508d (kx 2023-03-24 03:55:33 +0300   8)   ├── ChangeLog
bfc1508d (kx 2023-03-24 03:55:33 +0300   9)   ├── gettext.m4
bfc1508d (kx 2023-03-24 03:55:33 +0300  10)   ├── iconv.m4
bfc1508d (kx 2023-03-24 03:55:33 +0300  11)   ├── lib-ld.m4
bfc1508d (kx 2023-03-24 03:55:33 +0300  12)   ├── lib-link.m4
bfc1508d (kx 2023-03-24 03:55:33 +0300  13)   ├── lib-prefix.m4
bfc1508d (kx 2023-03-24 03:55:33 +0300  14)   ├── nls.m4
bfc1508d (kx 2023-03-24 03:55:33 +0300  15)   ├── po.m4
bfc1508d (kx 2023-03-24 03:55:33 +0300  16)   └── progtest.m4
bfc1508d (kx 2023-03-24 03:55:33 +0300  17) 
bfc1508d (kx 2023-03-24 03:55:33 +0300  18)   po
bfc1508d (kx 2023-03-24 03:55:33 +0300  19)   ├── ChangeLog
bfc1508d (kx 2023-03-24 03:55:33 +0300  20)   ├── Makefile.in.in
bfc1508d (kx 2023-03-24 03:55:33 +0300  21)   ├── Makevars.template
bfc1508d (kx 2023-03-24 03:55:33 +0300  22)   ├── POTFILES.in
bfc1508d (kx 2023-03-24 03:55:33 +0300  23)   ├── Rules-quot
bfc1508d (kx 2023-03-24 03:55:33 +0300  24)   ├── boldquot.sed
bfc1508d (kx 2023-03-24 03:55:33 +0300  25)   ├── en@boldquot.header
bfc1508d (kx 2023-03-24 03:55:33 +0300  26)   ├── en@quot.header
bfc1508d (kx 2023-03-24 03:55:33 +0300  27)   ├── insert-header.sin
bfc1508d (kx 2023-03-24 03:55:33 +0300  28)   ├── quot.sed
bfc1508d (kx 2023-03-24 03:55:33 +0300  29)   └── remove-potcdate.sin
bfc1508d (kx 2023-03-24 03:55:33 +0300  30) 
bfc1508d (kx 2023-03-24 03:55:33 +0300  31) скрипт ./update-gettext копирует файл po/Makevars.template в po/Makevars,
bfc1508d (kx 2023-03-24 03:55:33 +0300  32) если po/Makevars не существовал, а также перезаписывает gettext.h. Кроме
bfc1508d (kx 2023-03-24 03:55:33 +0300  33) того gettextize добавляет файл config.rpath, и редактирует файлы:
bfc1508d (kx 2023-03-24 03:55:33 +0300  34) 
bfc1508d (kx 2023-03-24 03:55:33 +0300  35) Makefile.am:
bfc1508d (kx 2023-03-24 03:55:33 +0300  36) 
bfc1508d (kx 2023-03-24 03:55:33 +0300  37) --- Makefile.am~	2020-10-09 02:57:21.678843280 +0300
bfc1508d (kx 2023-03-24 03:55:33 +0300  38) +++ Makefile.am	2020-10-09 03:05:09.010316710 +0300
bfc1508d (kx 2023-03-24 03:55:33 +0300  39) @@ -5,9 +5,9 @@
bfc1508d (kx 2023-03-24 03:55:33 +0300  40)  # In build order:
bfc1508d (kx 2023-03-24 03:55:33 +0300  41)  # ==============
bfc1508d (kx 2023-03-24 03:55:33 +0300  42)  #
bfc1508d (kx 2023-03-24 03:55:33 +0300  43) -SUBDIRS = csvncgi
bfc1508d (kx 2023-03-24 03:55:33 +0300  44) +SUBDIRS = po csvncgi
bfc1508d (kx 2023-03-24 03:55:33 +0300  45)  
bfc1508d (kx 2023-03-24 03:55:33 +0300  46) -EXTRA_DIST = \
bfc1508d (kx 2023-03-24 03:55:33 +0300  47) +EXTRA_DIST = config.rpath m4/ChangeLog  \
bfc1508d (kx 2023-03-24 03:55:33 +0300  48)               doc l10n LICENSE README.md acsite.m4 bootstrap
bfc1508d (kx 2023-03-24 03:55:33 +0300  49) 
bfc1508d (kx 2023-03-24 03:55:33 +0300  50) configure.ac:
bfc1508d (kx 2023-03-24 03:55:33 +0300  51) 
bfc1508d (kx 2023-03-24 03:55:33 +0300  52) --- configure.ac~	2020-10-09 02:16:40.812940376 +0300
bfc1508d (kx 2023-03-24 03:55:33 +0300  53) +++ configure.ac	2020-10-09 03:05:09.022316594 +0300
bfc1508d (kx 2023-03-24 03:55:33 +0300  54) @@ -267,7 +267,7 @@
bfc1508d (kx 2023-03-24 03:55:33 +0300  55)  dnl ============================================================
bfc1508d (kx 2023-03-24 03:55:33 +0300  56)  AC_MSG_CFG_PART(OUTPUT)
bfc1508d (kx 2023-03-24 03:55:33 +0300  57)  
bfc1508d (kx 2023-03-24 03:55:33 +0300  58) -AC_CONFIG_FILES([
bfc1508d (kx 2023-03-24 03:55:33 +0300  59) +AC_CONFIG_FILES([ po/Makefile.in
bfc1508d (kx 2023-03-24 03:55:33 +0300  60)  csvncgi/Makefile
bfc1508d (kx 2023-03-24 03:55:33 +0300  61)  Makefile
bfc1508d (kx 2023-03-24 03:55:33 +0300  62) 
bfc1508d (kx 2023-03-24 03:55:33 +0300  63) После первого запуска update-gettext необходимо отдать следующие файлы
bfc1508d (kx 2023-03-24 03:55:33 +0300  64) под версионный контроль:
bfc1508d (kx 2023-03-24 03:55:33 +0300  65) 
bfc1508d (kx 2023-03-24 03:55:33 +0300  66)   m4
bfc1508d (kx 2023-03-24 03:55:33 +0300  67)   ├── ChangeLog
bfc1508d (kx 2023-03-24 03:55:33 +0300  68)   ├── gettext.m4
bfc1508d (kx 2023-03-24 03:55:33 +0300  69)   ├── iconv.m4
bfc1508d (kx 2023-03-24 03:55:33 +0300  70)   ├── lib-ld.m4
bfc1508d (kx 2023-03-24 03:55:33 +0300  71)   ├── lib-link.m4
bfc1508d (kx 2023-03-24 03:55:33 +0300  72)   ├── lib-prefix.m4
bfc1508d (kx 2023-03-24 03:55:33 +0300  73)   ├── nls.m4
bfc1508d (kx 2023-03-24 03:55:33 +0300  74)   ├── po.m4
bfc1508d (kx 2023-03-24 03:55:33 +0300  75)   └── progtest.m4
bfc1508d (kx 2023-03-24 03:55:33 +0300  76) 
bfc1508d (kx 2023-03-24 03:55:33 +0300  77)   po
bfc1508d (kx 2023-03-24 03:55:33 +0300  78)   ├── ChangeLog
bfc1508d (kx 2023-03-24 03:55:33 +0300  79)   ├── Makefile.in.in
bfc1508d (kx 2023-03-24 03:55:33 +0300  80)   ├── Makevars
bfc1508d (kx 2023-03-24 03:55:33 +0300  81)   ├── POTFILES.in
bfc1508d (kx 2023-03-24 03:55:33 +0300  82)   ├── Rules-quot
bfc1508d (kx 2023-03-24 03:55:33 +0300  83)   ├── boldquot.sed
bfc1508d (kx 2023-03-24 03:55:33 +0300  84)   ├── en@boldquot.header
bfc1508d (kx 2023-03-24 03:55:33 +0300  85)   ├── en@quot.header
bfc1508d (kx 2023-03-24 03:55:33 +0300  86)   ├── insert-header.sin
bfc1508d (kx 2023-03-24 03:55:33 +0300  87)   ├── quot.sed
bfc1508d (kx 2023-03-24 03:55:33 +0300  88)   └── remove-potcdate.sin
bfc1508d (kx 2023-03-24 03:55:33 +0300  89) 
bfc1508d (kx 2023-03-24 03:55:33 +0300  90)   ABOUT-NLS
bfc1508d (kx 2023-03-24 03:55:33 +0300  91)   ChangeLog
bfc1508d (kx 2023-03-24 03:55:33 +0300  92)   Makefile.am
bfc1508d (kx 2023-03-24 03:55:33 +0300  93)   config.rpath
bfc1508d (kx 2023-03-24 03:55:33 +0300  94)   configure.ac
bfc1508d (kx 2023-03-24 03:55:33 +0300  95)   gettext.h
bfc1508d (kx 2023-03-24 03:55:33 +0300  96) 
bfc1508d (kx 2023-03-24 03:55:33 +0300  97) При последующих запусках update-gettext будут обновляться файлы входящие в поставку
bfc1508d (kx 2023-03-24 03:55:33 +0300  98) gettext и, при необходимости, добавляться записи в ChangeLog файлы. Как правило,
bfc1508d (kx 2023-03-24 03:55:33 +0300  99) ChangeLog файлы будут обновляться только тогда, когда будет инсталлироваться новая
bfc1508d (kx 2023-03-24 03:55:33 +0300 100) версия gettext.
bfc1508d (kx 2023-03-24 03:55:33 +0300 101) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 102) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 103) Далее можно будет держать в каталоге po/ или копировать в каталог po/ с помощью
bfc1508d (kx 2023-03-24 03:55:33 +0300 104) скрипта bootstrap файлы LINGUAS, csvn-ui.pot, ru_RU.utf8.po, а также обновлять
bfc1508d (kx 2023-03-24 03:55:33 +0300 105) содержимое файла po/POTFILES.in.
bfc1508d (kx 2023-03-24 03:55:33 +0300 106) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 107) Для корректной работы команд make, make dist необходимо наличие файлов po/LINGUAS,
bfc1508d (kx 2023-03-24 03:55:33 +0300 108) po/csvn-ui.pot, po/ru_RU.utf8.po, кроме того время последнего изменения данных файлов
bfc1508d (kx 2023-03-24 03:55:33 +0300 109) должно удовлетворять зависимостям описанным в Make-файлах. То есть, если мы хотим
bfc1508d (kx 2023-03-24 03:55:33 +0300 110) обновить po/POTFILES.in по окончании процедуры bootstrap, то перед конфигурированием
bfc1508d (kx 2023-03-24 03:55:33 +0300 111) и сборкой необходимо обновить дату:
bfc1508d (kx 2023-03-24 03:55:33 +0300 112) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 113)   $ cd po
bfc1508d (kx 2023-03-24 03:55:33 +0300 114)   $ touch --touch --reference=Makefile.in.in LINGUAS POTFILES.in ru_RU.utf8.po
bfc1508d (kx 2023-03-24 03:55:33 +0300 115) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 116) Далее мы опишем все процедуры по созданию и обновлению файлов в каталоге po/
bfc1508d (kx 2023-03-24 03:55:33 +0300 117) для успешной локализации продукта.
bfc1508d (kx 2023-03-24 03:55:33 +0300 118) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 119) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 120) Makevars
bfc1508d (kx 2023-03-24 03:55:33 +0300 121) ========
bfc1508d (kx 2023-03-24 03:55:33 +0300 122) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 123) Прежде всего, необходимо отредактировать файл Makevars для того, чтобы при создании
bfc1508d (kx 2023-03-24 03:55:33 +0300 124) source distribution с помощью команды:
bfc1508d (kx 2023-03-24 03:55:33 +0300 125) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 126)   $ make dist
bfc1508d (kx 2023-03-24 03:55:33 +0300 127) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 128) обновление csvn-ui.pot файла, а также файлов *.po и *.gmo происходило корректно 
bfc1508d (kx 2023-03-24 03:55:33 +0300 129) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 130) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 131) Значения переменных:
bfc1508d (kx 2023-03-24 03:55:33 +0300 132) -------------------
bfc1508d (kx 2023-03-24 03:55:33 +0300 133) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 134) XGETTEXT_OPTIONS = --keyword=N_ --keyword=_ --keyword=Q_:1,2 \
bfc1508d (kx 2023-03-24 03:55:33 +0300 135)                    --language=C --add-comments --sort-output --no-wrap
bfc1508d (kx 2023-03-24 03:55:33 +0300 136) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 137) COPYRIGHT_HOLDER = Andrey V.Kosteltsev.
bfc1508d (kx 2023-03-24 03:55:33 +0300 138) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 139) PACKAGE_GNU = no
bfc1508d (kx 2023-03-24 03:55:33 +0300 140) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 141) MSGID_BUGS_ADDRESS = <support@radix.pro>
bfc1508d (kx 2023-03-24 03:55:33 +0300 142) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 143) MSGMERGE_OPTIONS = --update --no-wrap --sort-output --backup=simple
bfc1508d (kx 2023-03-24 03:55:33 +0300 144) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 145) MSGINIT_OPTIONS = --no-wrap
bfc1508d (kx 2023-03-24 03:55:33 +0300 146) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 147) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 148) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 149) Локализация:
bfc1508d (kx 2023-03-24 03:55:33 +0300 150) ===========
bfc1508d (kx 2023-03-24 03:55:33 +0300 151) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 152) Если первый запуск gettextize состоялся и все необходимые файлы были отданы
bfc1508d (kx 2023-03-24 03:55:33 +0300 153) под версионный контроль, то последующие запуски update-gettext можно осуществлять
bfc1508d (kx 2023-03-24 03:55:33 +0300 154) не беспокоясь о том, что файлы будут испорчены. Делать это нужно до вызова bootstrap
bfc1508d (kx 2023-03-24 03:55:33 +0300 155) и configure.
bfc1508d (kx 2023-03-24 03:55:33 +0300 156) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 157) Далее, можно заняться непосредственно локализацией продукта. Первое, что необходимо
bfc1508d (kx 2023-03-24 03:55:33 +0300 158) сделать, это создать файл .pot .
bfc1508d (kx 2023-03-24 03:55:33 +0300 159) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 160) В файле config.h, создаваемым скриптом configure, будет определена константа
bfc1508d (kx 2023-03-24 03:55:33 +0300 161) PACKAGE, например:
bfc1508d (kx 2023-03-24 03:55:33 +0300 162) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 163) /* Name of package */
bfc1508d (kx 2023-03-24 03:55:33 +0300 164) #define PACKAGE "csvn-ui"
bfc1508d (kx 2023-03-24 03:55:33 +0300 165) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 166) и в данном случае, доменом по умолчанию следует считать имя 'csvn-ui'. Файл csvn-ui.pot
bfc1508d (kx 2023-03-24 03:55:33 +0300 167) можно создать следующим образом:
bfc1508d (kx 2023-03-24 03:55:33 +0300 168) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 169)   $ xgettext --keyword=N_ --keyword=_ --keyword=Q_:1,2 \
bfc1508d (kx 2023-03-24 03:55:33 +0300 170)              --language=C --add-comments --sort-output --no-wrap  \
bfc1508d (kx 2023-03-24 03:55:33 +0300 171)              --copyright-holder="Andrey V.Kosteltsev." \
bfc1508d (kx 2023-03-24 03:55:33 +0300 172)              --msgid-bugs-address="<support@radix.pro>" \
bfc1508d (kx 2023-03-24 03:55:33 +0300 173)              --default-domain=csvn-ui --output=po/csvn-ui.pot \
bfc1508d (kx 2023-03-24 03:55:33 +0300 174)              `find -type f -name "*.c"`
bfc1508d (kx 2023-03-24 03:55:33 +0300 175) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 176) для удобства мы создали скрипт gen-pot-file, который выполняет команду xgettext
bfc1508d (kx 2023-03-24 03:55:33 +0300 177) с нужными параметрами. Его следует запускать сразу после обновления исходных
bfc1508d (kx 2023-03-24 03:55:33 +0300 178) кодов программы, откуда xgettext извлекает строки для последующего перевода.
bfc1508d (kx 2023-03-24 03:55:33 +0300 179) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 180) Ключевые слова N_, _, Q_:1,2 означают следующее:
bfc1508d (kx 2023-03-24 03:55:33 +0300 181) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 182)   N_     - извлекаются строки типа N_("string"), которые будут присутствовать в csvn-ui.pot
bfc1508d (kx 2023-03-24 03:55:33 +0300 183)            файле, но переводиться не будут.
bfc1508d (kx 2023-03-24 03:55:33 +0300 184) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 185)   _      - извлекаются строки типа _("string"), которые будут переводиться на другие языки.
bfc1508d (kx 2023-03-24 03:55:33 +0300 186) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 187)   Q_:1,2 - извлекается первая и вторая строка из конструкций типа:
bfc1508d (kx 2023-03-24 03:55:33 +0300 188) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 189)              Q_("%u byte", "%u bytes", (unsigned)bytes)
bfc1508d (kx 2023-03-24 03:55:33 +0300 190) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 191)            и в файле csvn-ui.pot будут создаваться записи подобные следующей:
bfc1508d (kx 2023-03-24 03:55:33 +0300 192) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 193)              #. TRANSLATORS: IEC 80000-13:2008 byte
bfc1508d (kx 2023-03-24 03:55:33 +0300 194)              #: csvncgi/strbuf.c:558
bfc1508d (kx 2023-03-24 03:55:33 +0300 195)              #, c-format
bfc1508d (kx 2023-03-24 03:55:33 +0300 196)              msgid "%u byte"
bfc1508d (kx 2023-03-24 03:55:33 +0300 197)              msgid_plural "%u bytes"
bfc1508d (kx 2023-03-24 03:55:33 +0300 198)              msgstr[0] ""
bfc1508d (kx 2023-03-24 03:55:33 +0300 199)              msgstr[1] ""
bfc1508d (kx 2023-03-24 03:55:33 +0300 200) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 201)            Таким образом с помощью ngettext() можно добиться корректного перевода числительных,
bfc1508d (kx 2023-03-24 03:55:33 +0300 202)            например, 1 байт, 10 байтов, 21 байт .
bfc1508d (kx 2023-03-24 03:55:33 +0300 203) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 204) Справка по --keywords здесь: https://www.gnu.org/software/gettext/manual/html_node/Default-Keywords.html
bfc1508d (kx 2023-03-24 03:55:33 +0300 205) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 206) Далее необходимо обновить файл POTFILES.in, записав в него список исходных файлов, в которых
bfc1508d (kx 2023-03-24 03:55:33 +0300 207) существуют строки для перевода. Сделать это можно вручную следующим образом:
bfc1508d (kx 2023-03-24 03:55:33 +0300 208) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 209) # List of source files which contain translatable strings.
bfc1508d (kx 2023-03-24 03:55:33 +0300 210) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 211) # cSvn CGI source files
bfc1508d (kx 2023-03-24 03:55:33 +0300 212) csvncgi/fatal.c
bfc1508d (kx 2023-03-24 03:55:33 +0300 213) csvncgi/strbuf.c
bfc1508d (kx 2023-03-24 03:55:33 +0300 214) . . .
bfc1508d (kx 2023-03-24 03:55:33 +0300 215) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 216) Напомним, что po/POTFILES.in находится под версионным контролем.
bfc1508d (kx 2023-03-24 03:55:33 +0300 217) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 218) Кроме того, под версионным контролем должен находиться файл po/LINGUAS, например,
bfc1508d (kx 2023-03-24 03:55:33 +0300 219) следующего содержания:
bfc1508d (kx 2023-03-24 03:55:33 +0300 220) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 221) # Set of available languages.
bfc1508d (kx 2023-03-24 03:55:33 +0300 222) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 223) ru_RU.utf8
bfc1508d (kx 2023-03-24 03:55:33 +0300 224) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 225) Поскольку в файле LINGUAS присутствует сторока 'ru_RU.utf8', в каталоге, po/
bfc1508d (kx 2023-03-24 03:55:33 +0300 226) должен находиться файл po/ru_RU.utf8.po, начальное состояние которого можно
bfc1508d (kx 2023-03-24 03:55:33 +0300 227) получить с помощью утилиты msginit:
bfc1508d (kx 2023-03-24 03:55:33 +0300 228) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 229)   $ cd po/
bfc1508d (kx 2023-03-24 03:55:33 +0300 230)   $ msginit --no-wrap --locale=ru_RU.utf8 --input=csvn-ui.pot --output=ru_RU.utf8.po
bfc1508d (kx 2023-03-24 03:55:33 +0300 231) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 232) Утилита msginit запросит подтверждение почтового адреса:
bfc1508d (kx 2023-03-24 03:55:33 +0300 233) =======================================================
bfc1508d (kx 2023-03-24 03:55:33 +0300 234) The new message catalog should contain your email address, so that users can
bfc1508d (kx 2023-03-24 03:55:33 +0300 235) give you feedback about the translations, and so that maintainers can contact
bfc1508d (kx 2023-03-24 03:55:33 +0300 236) you in case of unexpected technical problems.
bfc1508d (kx 2023-03-24 03:55:33 +0300 237) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 238) Is the following your email address?
bfc1508d (kx 2023-03-24 03:55:33 +0300 239)   kx@cardhu.radix.pro
bfc1508d (kx 2023-03-24 03:55:33 +0300 240) Please confirm by pressing Return, or enter your email address.
bfc1508d (kx 2023-03-24 03:55:33 +0300 241) kx@radix.pro
bfc1508d (kx 2023-03-24 03:55:33 +0300 242) Retrieving http://translationproject.org/team/index.html... done.
bfc1508d (kx 2023-03-24 03:55:33 +0300 243) A translation team for your language (ru) does not exist yet.
bfc1508d (kx 2023-03-24 03:55:33 +0300 244) If you want to create a new translation team for ru, please visit
bfc1508d (kx 2023-03-24 03:55:33 +0300 245)   http://www.iro.umontreal.ca/contrib/po/HTML/teams.html
bfc1508d (kx 2023-03-24 03:55:33 +0300 246)   http://www.iro.umontreal.ca/contrib/po/HTML/leaders.html
bfc1508d (kx 2023-03-24 03:55:33 +0300 247)   http://www.iro.umontreal.ca/contrib/po/HTML/index.html
bfc1508d (kx 2023-03-24 03:55:33 +0300 248) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 249) Created ru_RU.utf8.po.
bfc1508d (kx 2023-03-24 03:55:33 +0300 250) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 251) Создание файла ru_RU.utf8.po с помощью команды
bfc1508d (kx 2023-03-24 03:55:33 +0300 252) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 253)   $ msginit --no-wrap --locale=ru_RU.utf8 --input=csvn-ui.pot --output=ru_RU.utf8.po
bfc1508d (kx 2023-03-24 03:55:33 +0300 254) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 255) лучше выполнять после конфигурирования исходников для того, чтобы в заголовочном коментарии
bfc1508d (kx 2023-03-24 03:55:33 +0300 256) файла ru_RU.utf8.po имя пакета было задано корректно. То есть csvn-ui по имени PACKAGE.
bfc1508d (kx 2023-03-24 03:55:33 +0300 257) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 258) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 259) Правила перевода числительных записывается на языке С и, для русского языка:
bfc1508d (kx 2023-03-24 03:55:33 +0300 260) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 261)   "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"
bfc1508d (kx 2023-03-24 03:55:33 +0300 262) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 263) дает:
bfc1508d (kx 2023-03-24 03:55:33 +0300 264) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 265)   [0] строка
bfc1508d (kx 2023-03-24 03:55:33 +0300 266)   [1] строки
bfc1508d (kx 2023-03-24 03:55:33 +0300 267)   [2] строк
bfc1508d (kx 2023-03-24 03:55:33 +0300 268) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 269) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 270) В дальнейшем, так как файл ru_RU.utf8.po находится под версионным контролем,
bfc1508d (kx 2023-03-24 03:55:33 +0300 271) его надо будет только обновлять.
bfc1508d (kx 2023-03-24 03:55:33 +0300 272) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 273) Допустим в исходные файлы на языке С были добавлены строки, подлежащие переводу, и надо обновить
bfc1508d (kx 2023-03-24 03:55:33 +0300 274) файл ru_RU.utf8.po, чтобы в него попали новые строки. Для обновления файла ru_RU.utf8.po, сначала
bfc1508d (kx 2023-03-24 03:55:33 +0300 275) нужно обновить файл po/csvn-ui.pot с помощью скрипта gen-pot-file:
bfc1508d (kx 2023-03-24 03:55:33 +0300 276) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 277)   $ l10n/gen-pot-file
bfc1508d (kx 2023-03-24 03:55:33 +0300 278) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 279) и затем, обновить файл po/ru_RU.utf8.po:
bfc1508d (kx 2023-03-24 03:55:33 +0300 280) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 281)   $ cd po/
bfc1508d (kx 2023-03-24 03:55:33 +0300 282)   $ msgmerge --update --no-wrap --sort-output --backup=simple ru_RU.utf8.po csvn-ui.pot
bfc1508d (kx 2023-03-24 03:55:33 +0300 283) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 284) Cтарый файл будет сохранен с именем po/ru_RU.utf8.po~
bfc1508d (kx 2023-03-24 03:55:33 +0300 285) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 286) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 287) Таким образом для обновления как самой утилиты gettext, так и файлов локализации, следует
bfc1508d (kx 2023-03-24 03:55:33 +0300 288) (в корне исходного пакета программ) вызывать процедуры обновления в следующем порядке:
bfc1508d (kx 2023-03-24 03:55:33 +0300 289) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 290)   $ ./l10n/update-gettext
bfc1508d (kx 2023-03-24 03:55:33 +0300 291)   $ ./l10n/gen-pot-file
bfc1508d (kx 2023-03-24 03:55:33 +0300 292)   $ ./l10n/merge-ru_RU.utf8-messages
bfc1508d (kx 2023-03-24 03:55:33 +0300 293) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 294) Остается только не забывать добавлять новые файлы в po/POTFILES.in, а при добавлении новых
bfc1508d (kx 2023-03-24 03:55:33 +0300 295) языков (локалей), дополнять файл po/LINGUAS. И наконец еще одно замечание. В файлах *.po,
bfc1508d (kx 2023-03-24 03:55:33 +0300 296) при обновлении номера версии продукта, строку:
bfc1508d (kx 2023-03-24 03:55:33 +0300 297) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 298) "Project-Id-Version: csvn-ui 0.0.6\n"
bfc1508d (kx 2023-03-24 03:55:33 +0300 299) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 300) надо обновлять вручную (разумеется если .po файл уже существует под версионным контролем,
bfc1508d (kx 2023-03-24 03:55:33 +0300 301) а не создается вновь с помощью утилиты msginit).
bfc1508d (kx 2023-03-24 03:55:33 +0300 302) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 303) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 304) Файл nls.h обеспечивает исходный код макроопределениями на случай использования gettext,
bfc1508d (kx 2023-03-24 03:55:33 +0300 305) а также без использования GNU gettext, когда при конфигурировании выбирается опция:
bfc1508d (kx 2023-03-24 03:55:33 +0300 306) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 307)   $ ./configure --disable-nls
bfc1508d (kx 2023-03-24 03:55:33 +0300 308) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 309) Более подробную информацию об утилитах GNU gettext можно получить по адресу:
bfc1508d (kx 2023-03-24 03:55:33 +0300 310) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 311)   https://www.gnu.org/software/gettext/manual/gettext.html
bfc1508d (kx 2023-03-24 03:55:33 +0300 312) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 313) 
bfc1508d (kx 2023-03-24 03:55:33 +0300 314) Enjoy.