Gettext.pliki po pod kontrolą wersji
Obecnie używa Gettext w projekcie ipliki po są ładnie przechowywane pod kontrolą wersji.
Pliki PO oczywiście zawierają tłumaczenia, ale oprócz tego zawierają również pewne metadane - informacje o dokładnych plikach i numery linii, w których znajdują się tłumaczenia ciągów.
Problem polega na tym, że przy każdej aktualizacji plików PO metadane zmienia się o wiele bardziej niż rzeczywiste tłumaczenia. To sprawia, że naprawdę trudno później zobaczyć z wersji control diff co faktycznie było changed-po prostu widzisz mnóstwo zmian w nazwach plików i linii liczby. Tak:
- #: somefile.js:43
- #: somefile.js:45
- #: somefile.js:118
+ #: somefile.js:203
+ #: somefile.js:215
msgid "Translate me please"
msgstr "Tõlgi mind palun"
- #: somefile.js:23
- #: somefile.js:135
+ #: otherfile.js:23
+ #: otherfile.js:135
msgid "Note"
msgstr "Märkus"
- #: andThatFile.js:18
#: orThisFile.js:131
- msgid "Before I was like this"
- msgstr "Selline olin ma enne"
+ msgid "I happen to be changed"
+ msgstr "Paistab, et mind muudeti"
Oczywiście prostą poprawką byłoby wyłączenie generowania komentarze o nazwach plików/numerach linii w wyjściu xgettext. Ale w rzeczywistości znajduję te nazwy plików są bardzo przydatne wskazówki podczas tłumaczenia.
Na pewno nie mogę być jedynym, który nie lubi różnic w jego plikach PO. Sugestie?
4 answers
Prostą poprawką byłoby zastosowanie filtra grep w celu usunięcia metadanych komentarzy z przeglądanych różnic. Możesz to zrobić na wyjściu narzędzia kontroli wersji diff:
myVersionControl diff REV1 REV2 filea | grep -v '^..#'
Lub możesz polecić narzędzie kontroli wersji diff, aby zignorowało je przed dokonaniem porównania, co prawdopodobnie spowoduje bardziej niezawodne i ładniejsze wyjście: {]}
Nie wiem jakiego systemu kontroli wersji używasz, ale git (na przykład) pozwala na preproces wejście do diff i usunięcie linii komentarza dla niektórych typów plików (dzięki VonC), Zobacz man gitattributes
i wyszukaj wykonując różnice tekstowe plików binarnych. Oto treść przykładowego skryptu do zapisania jako /usr/local/bin/strippocomments
, który to zrobi:
grep -v '^#:' $1
Możesz następnie powiedzieć gitowi, aby użył tego skryptu do preprocesowania plików po, dodając do pliku .git/info/attributes
w Twoim repozytorium:
*.po diff=podiff
I do pliku .git/config
w Twoim repozytorium:
[diff "podiff"]
textconv = /usr/local/bin/strippocomments
Używanie git diff powinno następnie nie dołączaj żadnych linii zaczynających się od #:
.
Zauważ, że różnice wygenerowane z git diff
przy użyciu tego podejścia nie powinny być używane do łatania - ale git format-patch
nadal będą używać domyślnego różnicowania, więc łaty wygenerowane do wysyłania e-maili nadal będą w porządku.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-08 14:10:06
The gitattributes
/textconv
podejście to właściwa droga. Chciałbym zaoferować lepsze rozwiązanie dotyczące narzędzi do wstępnego przetwarzania.
W .gitattributes
:
*.po diff=po
W .gitconfig
:
[diff "po"]
textconv=msgcat --no-location --no-wrap --sort-output
msgcat
z pakietu gettext jest tam użytecznym narzędziem. Ma wiele opcji, z którymi możesz grać. Opcja --no-location
jest szczególnie tym, co chcesz odfiltrować różnice numerów linii. Inne opcje mogą być przydatne, jeśli xgettext
i / lub msgmerge
i / lub edytor nadal formatuje struny w denerwujący sposób. (W takim przypadku dobrze byłoby również przekazać te same opcje do tych narzędzi i ponownie skonfigurować edytor.)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-02 09:27:33
Pakiet GNU gettext posiada wiele przydatnych narzędzi do wykonywania różnych zadań z plikami PO. Msgcmp porównuje dwa pliki PO, msgcomm wybiera wspólne / unikalne wiadomości, msgattrib wybiera/filtruje / przekształca istniejące pliki PO. Zależy od tego, czego potrzebujesz od Diffa pliku PO, myślę, że musisz użyć msgattrib lub msgcomm.
JeĹ " li potrzebujesz po prostu porăłwnaä ‡ dwa pliki PO Bez komentarza na temat pliku / linii, to prosty skrypt do grepa i zapisanie w katalogu temp Twojego starego i Nowego PO pliki byłyby wystarczające.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-07 16:56:37
Możesz spojrzeć na różne opcje oferowane przez custom diff a .plik gitattribute , np. określanie specjalnych różnic dla plików po
[diff "mypodiff"]
command = mypodiff
*.po diff=mypodiff
With mypodiff
A script calling any diff
tool able to filter out the line that you wa wnt
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-08 07:21:15