Ansel używa Gettext do tłumaczenia wszystkich części projektu:
- Aplikacji (napisanej w C),
- Strony internetowej (szablony Hugo i treść w Markdown),
- Dokumentacji/podręcznika użytkownika, dołączonego do strony jako moduł (również szablony Hugo i treść w Markdown).
Dzięki temu ten sam przepływ pracy może służyć do tłumaczenia wszystkich plików, a niektóre przetłumaczone ciągi znaków można współdzielić (na przykład przetłumaczone elementy interfejsu z aplikacji można wstawić bezpośrednio do dokumentacji).
Organizacja plików tłumaczeń
Kod źródłowy strony internetowej, dokumentacji i oprogramowania zawiera bezpośredni podfolder po/, który zawiera:
- jeden plik
.pot, który przechowuje wszystkie dostępne, przetłumaczalne ciągi znaków w ich oryginalnym języku (po angielsku), - wiele plików
.po, które łączą przetłumaczalne ciągi znaków w ich oryginalnym języku z ich tłumaczeniem (jeden język na plik).
Wszystkie pliki tłumaczeń są nazywane zgodnie z konwencją language-code.po. Na przykład:
- dla niemieckiego,
- tłumaczenie oprogramowania to
de.po, - tłumaczenie strony to
content.de.po, - tłumaczenie dokumentacji to
content.de.po,
- tłumaczenie oprogramowania to
- dla portugalskiego brazylijskiego,
- tłumaczenie oprogramowania to
pt_BR.po, - tłumaczenie strony to
content.pt_br.po, - tłumaczenie dokumentacji to
content.pt_br.po.
- tłumaczenie oprogramowania to
Tłumaczenie, gdy nie możesz używać CLI/Git
Musisz odnaleźć odpowiedni plik .po dla swojego języka, dla tej części projektu, którą chcesz przetłumaczyć:
- oprogramowanie: https://github.com/aurelienpierreeng/ansel/tree/master/po
- strona internetowa: https://github.com/aurelienpierreeng/ansel-website/tree/master/po
- dokumentacja: https://github.com/aurelienpierreeng/ansel-doc/tree/master/po
- Pobierz ten plik i otwórz go w Poedit ,
- Wprowadź potrzebne poprawki i zmiany,
- Dodaj swoje imię w komentarzu przy ciągach, które tłumaczysz, jeśli chcesz zostać wymieniony na stronie:
- Ciągi przetłumaczone automatycznie będą tam miały
TRANSLATOR ChatGPT; po zweryfikowaniu tych ciągów usuń tę linię, - Następnie dodaj w nowej linii komentarz zawierający
TRANSLATOR Twoje Imię. Zachowaj innych współtwórców (spoza ChatGPT), jeśli tacy są.
- Ciągi przetłumaczone automatycznie będą tam miały
- Zapisz plik i:
- Alternatywa 1 (łatwiejsza dla współtwórcy, więcej kroków dla opiekuna): umieść go na moim prywatnym cloudzie ,
- Alternatywa 2 (więcej kroków dla współtwórcy, łatwiejsza dla opiekuna): zatwierdź go za pomocą Git i otwórz pull request w odpowiednim repozytorium Github.
Tłumaczenie dla zaawansowanych użytkowników
Spowoduje to aktualizację pliku .pot na podstawie kodu źródłowego projektu. Musisz mieć zainstalowany Git oraz Hugo 0.146 na swoim komputerze.
- Sklonuj kod źródłowy odpowiedniego projektu:
- oprogramowanie:
- strona internetowa:
- dokumentacja:
1$ git pull - oprogramowanie:
- Zaktualizuj plik
.poti wszystkie pliki.pona podstawie kodu źródłowego (ten krok działa tak samo dla wszystkich 3 projektów):1$ sh tools/update-translations.sh - Przetłumacz odpowiedni plik
.poza pomocą Poedit lub bezpośrednio w edytorze tekstu (zobacz Tłumaczenie, gdy nie możesz używać CLI/Git), - Przetestuj i sprawdź swoje tłumaczenie:
- W przypadku oprogramowania musisz zbudować Ansel na swoim systemie operacyjnym. Zobacz dokumentację.
- W przypadku strony i dokumentacji możesz uruchomić:
\n, oraz błędy z Hugo, zwłaszcza dotyczące składni shortcode’ów. - W przypadku strony i dokumentacji przed zatwierdzeniem wyczyść przetłumaczone pliki Markdown (generowane automatycznie przez po4a na podstawie pliku
.po), używając:1sh tools/build-translations.sh --remove - Zatwierdź wszystkie pliki
.poti.pooraz otwórz pull request w odpowiednim repozytorium Github. Nigdy nie zatwierdzaj przetłumaczonych plików.md(Markdown).
Tłumaczenie obrazów
Poniższe dotyczy wyłącznie strony internetowej i dokumentacji.
Obrazy również można tłumaczyć, na przykład zrzuty ekranu aplikacji. Obrazy są przechowywane w folderze assets/, jeśli są używane ponownie na kilku stronach (zasoby globalne); w przeciwnym razie są przechowywane w tym samym folderze co plik Markdown, który ich używa (zasoby lokalne). Niezależnie od tego, czy są globalne, czy lokalne, proces tłumaczenia jest taki sam, zmienia się tylko folder bazowy.
Jeśli na przykład chcesz przetłumaczyć assets/screenshot.jpg dla języka LANG (który jest kodem ISO języka, jak de, nl, pt_br, zn_cn itd.):
- dodaj i zatwierdź nowy plik obrazu
assets/screenshot.LANG.jpgw repozytorium Git dokumentacji lub strony, - w pliku
content.LANG.poodnajdź wpis zawierający znacznik Markdown dla oryginalnego obrazu, który będzie wyglądał mniej więcej tak:, - przetłumacz znacznik Markdown, zastępując adres URL obrazu, np.
. Wymaga to interpretera Pythona oraz pakietu regex (instalacja przez pip install -U regex). Z poziomu kodu źródłowego dokumentacji możesz wywołać:
1$ python tools/merge-translations.py path/to/software path/to/docAutomatyczne tłumaczenie dokumentacji i strony za pomocą ChatGPT
ChatGPT-4o całkiem dobrze radzi sobie z tłumaczeniem tekstu sformatowanego w Markdown z angielskiego, choć nie w każdym języku. Będziesz potrzebować prywatnego klucza API, który należy zapisać w folderze dokumentacji lub strony w pliku .chatgpt.api_key. Ponadto wywołania API ChatGPT nie są darmowe, a minimalna płatność 5 US$ pozwoli mniej więcej na pełne przetłumaczenie strony na 4 języki.
Skrypt wszystko-w-jednym można wywołać za pomocą:
1$ sh auto-translate.sh LANGgdzie LANG to kod języka docelowego (de, fr, pt_br itd.). Spowoduje to przetworzenie tłumaczenia w partiach po 90 do 120 ciągów znaków, aby dostosować się do ograniczeń i limitów API ChatGPT. Spowoduje to:
- przeanalizuje oryginalny plik
po/content.LANG.poi wyeksportuje partię do przetłumaczenia do tymczasowego plikupo/content.LANG.txt, - wyśle plik
po/content.LANG.txtdo ChatGPT i otrzyma odpowiedź wpo/content.LANG.generated.txt - naprawi najczęstsze niespójności formatowania, które ChatGPT może wprowadzić, i wstrzyknie tłumaczenia z powrotem do
po/content.LANG.po, - zbuduje przetłumaczone pliki Markdown (zgodnie z konwencją nazewnictwa
page.LANG.md), - zbuduje stronę za pomocą Hugo.
Jeśli wszystkie te kroki zakończą się bez błędów, możesz uruchomić skrypt ponownie, aby przetworzyć kolejną partię, aż do ukończenia. Jeśli pojawią się błędy, musisz je naprawić. Uruchamiamy tylko jedną partię przy każdym wywołaniu, aby dać użytkownikowi możliwość znalezienia błędów, gdy nie ma jeszcze zbyt wielu zmian do sprawdzenia.
Częste błędy:
- nic nie zostanie przetłumaczone: sprawdź odpowiedź ChatGPT w
po/content.LANG.generated.txt, czasami nie jest w stanie zrozumieć swojego zadania. Możesz spróbować ponownie, czasami udaje się za 3. razem. Ale często nie da się nic zrobić i niektórych języków/ciągów w ogóle nie da się przetłumaczyć. - podczas budowania strony za pomocą Hugo nie można znaleźć jakiegoś shortcode’a. Dzieje się tak, ponieważ shortcode’y są deklarowane w ten sposób:
{{< shortcode_name >}}. Czasami ChatGPT próbuje przetłumaczyćshortcode_namei shortcode znowu nie działa. Rozwiązaniem jest przywrócenie angielskiej nazwy shortcode’a i jego atrybutów, - to samo dotyczy wykresów Mermaid , ChatGPT może próbować tłumaczyć polecenia i właściwości, których nie należy tłumaczyć,
- oryginalne ciągi kończą się znakiem nowej linii
\n, a przetłumaczone nie (lub odwrotnie). Skrypt próbuje to naprawić, ale niektóre przypadki brzegowe nie są obsługiwane. Oryginalne ciągimsgidi ich tłumaczeniemsgstrw pliku.popowinny mieć taką samą liczbę znaków\nw tym samym miejscu, - nieprawidłowo zabezpieczone cudzysłowy: ciągi Gettext
msgidimsgstrpowinny być ograniczone niezabezpieczonym cudzysłowem"na każdym końcu ciągu. Każdy inny cudzysłów wewnątrz ciągu Gettext powinien być zabezpieczony za pomocą\".
Najlepszym sposobem na naprawienie błędów jest otwarcie odpowiedniego pliku .po w edytorze tekstu. Jeśli nie możesz znaleźć błędu i go rozwiązać, możesz spróbować otworzyć plik w Poedit, ale podczas zapisywania zwykle całkowicie usunie on wadliwe ciągi bez ich naprawy, więc tłumaczenie trzeba będzie zacząć od nowa.
Budowanie przetłumaczonych plików Markdown
W przypadku strony i dokumentacji Hugo obsługuje tłumaczenia danej strony new_page.md przy użyciu konwencji nazewnictwa new_page.LANG.md, gdzie LANG to kod języka. Hugo natywnie obsługuje ręczne zapisywanie tych przetłumaczonych plików w tym samym folderze co ich oryginał, jednak tutaj generujemy je za pomocą pliku tłumaczeń .po i programu po4a. Skrypty build-modules.sh i tools/auto-translate.sh obsługują to wewnętrznie, ale możesz chcieć wygenerować te pliki ręcznie:
- Zaktualizuj pliki
.poti.pona podstawie kodu źródłowego:1$ sh tools/update-translations.sh - Utwórz przetłumaczone pliki
.md:1$ sh tools/build-translations.sh --add - Wyczyść przetłumaczone pliki
.md:1$ sh tools/build-translations.sh --remove
Ważne, aby nigdy nie zatwierdzać przetłumaczonych plików .md za pomocą Git, ponieważ są one regenerowane wyłącznie przez ten skrypt podczas budowania strony. Służy to jedynie porządkowi w repozytorium, nie ma żadnej technicznej wady. Wyczyszczenie przetłumaczonych plików .md przed zatwierdzeniem zapobiega pomyłkom.
Zagubieni w tłumaczeniu?
Jeśli masz problemy lub pytania, śmiało zapytaj na dedykowanym kanale tłumaczy na Matrix .
Uwagi dla tłumaczy
Zasady dotyczące wielkich liter
Projekt darktable postawił sobie za priorytet zapisywanie wszystkiego małymi literami, co utrudnia czytanie interfejsu, zwłaszcza w przypadku podpowiedzi składających się z kilku zdań. Wielkie litery wizualnie zakotwiczają początek zdań oraz inny ważny tekst, jak przyciski, elementy sterujące itd. To nie przypadek, że wszystkie języki zbiegły się do ich używania (choć niemiecki ma swój szczególny sposób umieszczania ich wszędzie) — poprawiają one czytelność, niezależnie od tego, czy podoba ci się ich estetyka, czy nie.
Kod źródłowy Ansel wykorzystuje ponownie większość etykiet z darktable i dodaje początkową wielką literę w większości miejsc, gdzie jest ona potrzebna (nagłówki modułów, przyciski). Odbywa się to za pomocą fragmentu kodu wykorzystującego funkcję C g_unichar_toupper() z Gtk Glib, tak że oryginalny angielski tekst pozostaje zapisany małymi literami, aby zachować zgodność z tłumaczeniami.
Ta programowa poprawka działa dla znaków bez akcentów, niezależnie od używanego języka (domyślne ciągi po angielsku lub tłumaczenia). Nie działa jednak dla początkowych znaków z akcentami, które nie zostaną zapisane wielką literą. W takim przypadku prosimy tłumaczy o wymuszenie w tłumaczeniu używania początkowych wielkich liter z akcentami, o ile jest to poprawne gramatycznie w ich języku.
Nowe etykiety lub stare etykiety niedawno zmienione (co i tak zepsułoby tłumaczenia) będą odtąd otrzymywać początkowe wielkie litery w kodzie źródłowym (wersji angielskiej), więc powinno to być stopniowo naprawiane.
Tłumaczenie terminów technicznych
Terminy techniczne związane z teorią barw i kolorymetrią należy tłumaczyć dokładnie z angielskiego, ze szczególną ostrożnością, ponieważ terminy te mogą występować również w języku potocznym (czyli nietechnicznym), ale z innym znaczeniem. Międzynarodowa Komisja Elektrotechniczna udostępnia wyszukiwarkę, w której możesz wyszukać angielskie terminy techniczne i uzyskać dokładne tłumaczenia w różnych językach, w tym w głównych językach europejskich, a także arabskim i chińskim.
Notes aux traducteurs francophones
La traduction de darktable comporte des bizarreries incompréhensibles pour quiconque utilise un ordinateur de bureau depuis plus de 10 ans. Voici une liste rapide des erreurs à corriger:
- “set” est traduit “positionné” mais sa traduction correcte est “réglé”. C’est illogique car “settings” est correctement traduit “réglages”. Dans Ansel, on ne positionne que des masques (ou leurs nœuds de contrôle) dans le plan 2D. Le reste, ce sont des réglages.
- “reset” est traduit “repositionné” mais sa traduction correcte est “réinitialiser”.
- En anglais, un grand nombre de verbes ont la même graphie pour leur infinitif et leur participe-passé, voire même existent comme substantif (“set”, dans l’exemple ci-dessus, peut être traduit “réglé” ou “régler” ou comme “ensemble” sous sa forme substantivée). Si une action (pas encore effectuée) est requise, l’infinitif doit être utilisé en français. Si une action est déjà effectuée, c’est le participe-passé qui doit être employé. Les choses se corsent pour les substantifs car l’anglais ne requiert pas toujours de déterminant devant, il faut donc le déduire du contexte. À surveiller : “click” (cliquer ou clic), “type” (type ou entrer/taper), etc.
Translated from English by : Claude. In case of conflict, inconsistency or error, the English version shall prevail.