Zacząłem moją aplikację PHP z całym tekstem w języku niemieckim, potem użyłem gettext, aby wyodrębnić wszystkie ciągi i przetłumaczyć je na angielski.
Tak, teraz mam plik .po ze wszystkimi msgids w języku niemieckim i msgstrs w języku angielskim. Chcę je przełączać, tak, że mój kod źródłowy zawiera angielskiego jako msgid z dwóch głównych powodów:Przełącz tekst przetłumaczony na gettext z oryginalnym językiem
- Więcej tłumacze znają angielskiego, więc jest to tylko właściwe im służyć plik z msgid po angielsku. I może zawsze przełączać plik, zanim go podaję i po otrzymaniu go, ale naaah.
- Pomoże mi napisać angielską nazwę obiektu & w nazwach funkcji i komentarzach, jeśli tekst treści był również angielski. Chciałbym to zrobić, więc projekt jest bardziej otwarty dla innych współpracowników Open Source (częściej znają angielski niż niemiecki).
mogę to zrobić ręcznie i jest to rodzaj zadania, gdzie przewidujemy zajmie mi więcej czasu na pisanie zautomatyzowaną procedurę dla niego (bo jestem bardzo złe ze skryptów powłoki) niż zrobić ręcznie. Ale przewiduję też, że każdy minutę pogardza każdą minutą ręcznego komputera pracy (czuje się jak oksymoron, prawda?) Jak zawsze.
Czy ktoś już to zrobił? Pomyślałem, że będzie to powszechny problem, ale nie mogłem nic znaleźć. Wielkie dzięki.
Sample Problem:
<title><?=_('Routinen')?></title>
#: /users/ruben/sites/v/routinen.php:43
msgid "Routinen"
msgstr "Routines"
pomyślałem, że zawężenie problemu w dół. Przełącznik w .po akt nie jest kwestia oczywiście, to jest tak proste, jak
preg_replace('/msgid "(.+)"\nmsgstr "(.+)"/', '/msgid "$2"\nmsgstr "$1"/', $str);
Problemem dla mnie jest rutynowe, że przeszukuje moje pliki folderze projektu dla _('$msgid')
i substytutów _('msgstr')
podczas parsowania .po- plik (który prawdopodobnie nie jest nawet najbardziej elegancki, po tym jak wszystkie pliki .po zawierają komentarze zawierające wszystkie ścieżki plików, w których występuje msgid).
Po fooling around z odpowiedzią akirk trochę wpadłem na kolejne problemy.
- Bo mam mieszankę
_('xxx')
i_("xxx")
połączeń, muszę być ostrożny (ONZ) ucieczkę.- Podwójne cudzysłowy "w msgid i msgstrs być Niecytowany, ale ukośniki nie mogą być usunięte, ponieważ może się okazać, że cudzysłów również uciekł w PHP
- Pojedyncze cudzysłowy muszą być uciekł, gdy "zamieniono je na PHP, ale potem trzeba je również zmienić w pliku .po. Na szczęście pojedyncze cytaty pojawiają się tylko w tekście angielskim.
- msgid i msgstrs może mieć wiele wierszy, wtedy wyglądać następująco
msgid = ""
"line 1\n"
"line 2\n"
msgstr = ""
"line 1\n"
"line 2\n"
- mnogiej są oczywiście pominąć w tej chwili, ale w moim przypadku to nie problem
- Poedit chce usunąć ciągi jako przestarzałe, które sprawiają wrażenie przełączanych i nie mam pojęcia, dlaczego tak się dzieje w (wielu) przypadkach.
Muszę przestać nad tym pracować na dziś wieczór. Wciąż wydaje się, że użycie parsera zamiast RegExps nie byłoby przesadą.
Trudno byłoby nie tylko zmienić wpisy w plikach gettext, ale również zamienić wszystkie ciągi znaków w kodzie. – markus
@tharkun: Tak, oczywiście, to jest to, co muszę zrobić, ale to nie wydaje mi się tak trudne. Myślę, że mógłbym to zrobić za pomocą łańcucha PHP, ale nie z powłoką. w najprostszy sposób wystarczy przeanalizować (lub wyszukać) plik .po dla msgids i strs, a następnie wyszukać i zamienić wszystkie pliki w folderze dla tego ciągu. Włączyłem przełącznik w słupku, aby zmniejszyć problem. – Ruben
Myślę, że jesteś na dobrej drodze. Sztuką byłoby upewnić się, że regEx, którego używasz, nieumyślnie zmienia rzeczywiste źródło. Nie zapominaj, że regEx musiałby również obsłużyć pojedyncze i podwójne cudzysłów do '_ (...)'. Powodzenia. –