Ansel gebruikt Gettext om alle onderdelen van het project te vertalen:
- De softwareapplicatie (geschreven in C),
- De website (Hugo-templates en Markdown-inhoud),
- De documentatie/gebruikershandleiding, als module in de website ingevoegd (ook Hugo-templates en Markdown-inhoud).
Dit zorgt ervoor dat dezelfde workflow kan worden gebruikt om alle bestanden te vertalen, maar ook dat sommige vertaalde tekenreeksen kunnen worden gedeeld (bijvoorbeeld kunnen de vertaalde GUI-besturingselementen uit de applicaties direct in de documentatie worden ingevoegd).
Organisatie van vertaalbestanden
De broncode van de website, documentatie en software bevat telkens een directe po/-submap, die het volgende bevat:
- één
.pot-bestand dat alle beschikbare, vertaalbare tekenreeksen in hun oorspronkelijke taal (in het Engels) bevat, - veel
.po-bestanden die vertaalbare tekenreeksen in hun oorspronkelijke taal koppelen aan hun vertaling (één taal per bestand).
Vertaalbestanden worden allemaal genoemd volgens de conventie language-code.po. Bijvoorbeeld:
- voor Duits,
- is de softwarevertaling
de.po, - is de websitevertaling
content.de.po, - is de documentatievertaling
content.de.po,
- is de softwarevertaling
- voor Braziliaans Portugees,
- is de softwarevertaling
pt_BR.po, - is de websitevertaling
content.pt_br.po, - is de documentatievertaling
content.pt_br.po.
- is de softwarevertaling
Vertalen wanneer je geen CLI/Git kunt gebruiken
Je moet het relevante .po-bestand voor jouw taal opzoeken voor het onderdeel van het project dat je wilt vertalen:
- de software : https://github.com/aurelienpierreeng/ansel/tree/master/po
- de website : https://github.com/aurelienpierreeng/ansel-website/tree/master/po
- de documentatie : https://github.com/aurelienpierreeng/ansel-doc/tree/master/po
- Download dit bestand en open het met Poedit ,
- Breng de correcties en bewerkingen aan die je nodig hebt,
- Voeg je naam toe in een commentaar bij de tekenreeksen die je vertaalt als je op de pagina vermeld wilt worden :
- Automatisch vertaalde tekenreeksen bevatten daar
TRANSLATOR ChatGPT; zodra je die tekenreeksen hebt geverifieerd, verwijder je deze regel, - Voeg vervolgens op een nieuwe regel een commentaar toe met
TRANSLATOR Your Name. Behoud eventuele andere (niet-ChatGPT) bijdragers.
- Automatisch vertaalde tekenreeksen bevatten daar
- Sla het bestand op en:
- Alternatief 1 (makkelijker voor bijdrager, meer stappen voor beheerder): zet het op mijn privécloud ,
- Alternatief 2 (meer stappen voor bijdrager, makkelijker voor beheerder): commit het met Git en open een pull request tegen de juiste Github-repository.
Vertalen voor gevorderde gebruikers
Dit werkt het .pot-bestand bij met behulp van de broncode van het project. Je moet Git geïnstalleerd hebben en Hugo 0.146 op je computer geïnstalleerd hebben.
- Kloon de broncode van het relevante project:
- de software :
- de website :
- de documentatie :
1$ git pull - de software :
- Werk het
.pot-bestand en alle.po-bestanden bij vanuit de broncode (deze stap werkt hetzelfde voor alle 3 de projecten):1$ sh tools/update-translations.sh - Vertaal het relevante
.po-bestand met Poedit of rechtstreeks in een teksteditor (zie Vertalen wanneer je geen CLI/Git kunt gebruiken), - Test & controleer je vertaling :
- Voor de software moet je Ansel bouwen op je besturingssysteem. Zie de documentatie.
- Voor de website en de documentatie kun je uitvoeren :
\n-tekens, en op fouten van Hugo, vooral wat betreft de syntaxis van shortcodes. - Ruim voor de website en documentatie de vertaalde Markdown-bestanden op (automatisch gegenereerd door po4a met behulp van het
.po-bestand) voordat je commit, met :1sh tools/build-translations.sh --remove - Commit alle
.pot- en.po-bestanden en open een pull request tegen de relevante Github-repository. Commit nooit vertaalde.md-bestanden (Markdown).
Afbeeldingen vertalen
Het volgende geldt alleen voor de website en documentatie.
Afbeeldingen kunnen ook worden vertaald, bijvoorbeeld schermafbeeldingen van de applicatie. Afbeeldingen worden opgeslagen in de map assets/ als ze op meerdere pagina’s worden hergebruikt (globale assets), anders worden ze opgeslagen in dezelfde map als het Markdown-bestand dat ze gebruikt (lokale assets). Of het nu globaal of lokaal is, het vertaalproces is hetzelfde, alleen de basismap verandert.
Als je bijvoorbeeld de assets/screenshot.jpg wilt vertalen voor de taal LANG (wat de ISO-code van de taal is, zoals de, nl, pt_br, zn_cn, enz.):
- voeg een nieuw afbeeldingsbestand
assets/screenshot.LANG.jpgtoe aan de documentatie- of website-Git-repository en commit het, - zoek in de
content.LANG.pode vermelding met de Markdown-tag voor de oorspronkelijke afbeelding, die er ongeveer zo uitziet:, - vertaal de Markdown-tag door de URL van de afbeelding te vervangen, zoals
. Hiervoor is een Python-interpreter en het regex-pakket nodig (installeer met pip install -U regex). Vanuit de broncode van de documentatie kun je aanroepen :
1$ python tools/merge-translations.py path/to/software path/to/docDocumentatie en website automatisch vertalen met ChatGPT
ChatGPT-4o doet het redelijk goed bij het vertalen van Markdown-opgemaakte tekst uit het Engels, hoewel niet in elke taal. Je hebt een privé-API-sleutel nodig die je in de map van de documentatie of website opslaat in een .chatgpt.api_key-bestand. Bovendien zijn aanroepen naar de ChatGPT API niet gratis, en met de minimale betaling van 5 US$ krijg je de website ongeveer volledig vertaald in 4 talen.
Het alles-in-één-script kan worden aangeroepen met :
1$ sh auto-translate.sh LANGwaarbij LANG de doeltaalcode is (de, fr, pt_br, enz.). Dit verwerkt de vertaling in batches van 90 tot 120 tekenreeksen om te voldoen aan de beperkingen en drempelwaarden van de ChatGPT API. Dit zal :
- het oorspronkelijke
po/content.LANG.po-bestand parseren en de te vertalen batch exporteren naar een tijdelijkpo/content.LANG.txt-bestand, - het
po/content.LANG.txt-bestand naar ChatGPT sturen en het antwoord ontvangen inpo/content.LANG.generated.txt - de meest voorkomende opmaakinconsistenties die ChatGPT kan introduceren corrigeren en de vertalingen terug in
po/content.LANG.poinjecteren, - vertaalde Markdown-bestanden bouwen (volgens de naamconventie
page.LANG.md), - de website bouwen met Hugo.
Als al deze stappen zonder fouten worden voltooid, kun je het script opnieuw uitvoeren om de volgende batch te verwerken totdat het klaar is. Als er fouten worden getoond, moet je ze corrigeren. We voeren bij elke aanroep slechts één batch uit om de gebruiker de gelegenheid te geven fouten te vinden zolang er niet te veel wijzigingen te inspecteren zijn.
Veelvoorkomende fouten:
- er wordt niets vertaald : controleer het antwoord van ChatGPT in
po/content.LANG.generated.txt; soms is het niet in staat zijn opdracht te begrijpen. Je kunt het opnieuw proberen; soms werkt het bij de 3e aanroep. Maar vaak valt er niets te doen en kunnen sommige talen/tekenreeksen helemaal niet worden vertaald. - bij het bouwen van de website met Hugo kan een shortcode niet worden gevonden. Dit komt doordat shortcodes als volgt worden gedeclareerd :
{{< shortcode_name >}}. Soms probeert ChatGPTshortcode_namete vertalen en werkt de shortcode niet meer. De oplossing is de Engelse naam voor de shortcode en zijn attributen terug te zetten, - hetzelfde geldt voor Mermaid -grafieken: ChatGPT kan proberen commando’s en eigenschappen te vertalen die niet vertaald mogen worden,
- oorspronkelijke tekenreeksen eindigen met het newline-teken
\nen de vertaalde tekenreeksen niet (of andersom). Het script probeert dat op te schonen, maar sommige uitzonderingsgevallen worden niet afgehandeld. Oorspronkelijke tekenreeksenmsgiden hun vertalingmsgstrin het.po-bestand moeten hetzelfde aantal\n-tekens op dezelfde plaats hebben, - onjuist ge-escapete dubbele aanhalingstekens : de Gettext-tekenreeksen
msgidenmsgstrmoeten aan elk uiteinde van de tekenreeks worden begrensd door niet-ge-escapete dubbele aanhalingstekens". Elk ander dubbel aanhalingsteken binnen de Gettext-tekenreeks moet worden ge-escaped met\".
De beste manier om fouten te corrigeren is het relevante .po-bestand in een teksteditor te openen. Als je de fout niet kunt vinden en oplossen, kun je proberen het bestand in Poedit te openen, maar bij het opslaan wist het meestal de foutieve tekenreeksen volledig zonder ze te corrigeren, zodat de vertaling helemaal opnieuw moet worden begonnen.
Vertaalde Markdown-bestanden bouwen
Voor de website en documentatie verzorgt Hugo de vertalingen van een gegeven pagina new_page.md met de naamconventie new_page.LANG.md, waarbij LANG de taalcode is. Hugo ondersteunt van nature het handmatig schrijven van deze vertaalde bestanden in dezelfde map als hun origineel, maar hier genereren we ze met behulp van het .po-vertaalbestand en het programma po4a. De scripts build-modules.sh en tools/auto-translate.sh handelen dit intern af, maar mogelijk wil je die bestanden handmatig genereren :
- Werk de
.pot- en.po-bestanden bij met de broncode :1$ sh tools/update-translations.sh - Maak de vertaalde
.md-bestanden aan :1$ sh tools/build-translations.sh --add - Ruim de vertaalde
.md-bestanden op :1$ sh tools/build-translations.sh --remove
Het is belangrijk om de vertaalde .md-bestanden nooit met Git te committen, omdat ze alleen door dat script opnieuw worden gegenereerd bij het bouwen van de website. Dit is alleen voor de netheid van de repository, er is geen technisch nadeel. Het opschonen van de vertaalde .md-bestanden voor het committen voorkomt fouten.
Verdwaald in de vertaling ?
Als je problemen of vragen hebt, stel ze gerust in het speciale Matrix-kanaal voor vertalers .
Opmerkingen voor vertalers
Beleid ten aanzien van hoofdletters
Het darktable-project maakte er een prioriteit van om alles in kleine letters te zetten, wat de GUI moeilijk leesbaar maakt, vooral voor tooltips met meerdere zinnen. Hoofdletters verankeren visueel het begin van zinnen en andere belangrijke tekst, zoals knoppen, besturingselementen enz. Het is geen toeval dat alle talen zijn geconvergeerd naar het gebruik ervan (al heeft het Duits zijn eigen manier om ze overal te plaatsen); ze bevorderen de leesbaarheid, of je hun esthetiek nu mooi vindt of niet.
De broncode van Ansel hergebruikt de meeste labels van darktable en voegt op de meeste plaatsen waar ze nodig zijn een beginhoofdletter toe (moduleheaders, knoppen). Dit gebeurt met een stukje code dat de C-functie g_unichar_toupper() uit Gtk Glib gebruikt, zodat de oorspronkelijke Engelse tekst in kleine letters blijft om compatibiliteit met vertalingen te behouden.
Deze programmatische oplossing werkt voor niet-geaccentueerde tekens, ongeacht de gebruikte taal (standaardtekenreeksen in het Engels, of vertalingen). Ze werkt echter niet voor geaccentueerde begintekens, die geen hoofdletter krijgen. In dat geval wordt vertalers gevraagd hun vertaling te forceren om geaccentueerde beginhoofdletters te gebruiken wanneer die grammaticaal correct zijn in hun taal.
Nieuwe labels of onlangs gewijzigde oude labels (die vertalingen toch zouden breken) krijgen voortaan beginhoofdletters in de broncode (Engelse versie), dus dit zou geleidelijk verholpen moeten worden.
Technische termen vertalen
Technische termen met betrekking tot kleurtheorie en colorimetrie moeten exact vanuit het Engels worden vertaald, met extra zorg omdat deze termen ook in de omgangstaal (oftewel niet-technisch) kunnen bestaan, maar met een andere betekenis. De International Electrotechnical Commission biedt een zoekmachine waarmee je de Engelse technische termen kunt opzoeken en de accurate vertalingen in verschillende talen kunt krijgen, waaronder de belangrijkste Europese talen, evenals Arabisch en Chinees.
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.