[2024-feb-29] Sad news: Eric Layton aka Nocturnal Slacker aka vtel57 passed away on Feb 26th, shortly after hospitalization. He was one of our Wiki's most prominent admins. He will be missed.

Welcome to the Slackware Documentation Project

Verschillen

Dit geeft de verschillen weer tussen de geselecteerde revisie en de huidige revisie van de pagina.

Link naar deze vergelijking

Beide kanten vorige revisieVorige revisie
Volgende revisie
Vorige revisie
nl:howtos:misc:internationalization_and_localization_of_shell_scripts [2014/12/29 15:38 (UTC)] – [Internationalisatie proces] vertaald. alienbobnl:howtos:misc:internationalization_and_localization_of_shell_scripts [2015/06/22 11:33 (UTC)] (huidige) – [Practische aanbevelingen voor vertalers] vertaald. alienbob
Regel 27: Regel 27:
 Een berichten sjabloon-catalogus wordt gewoonlijk een "Portable Object Template" of POT bestand genoemd. Een berichten sjabloon-catalogus wordt gewoonlijk een "Portable Object Template" of POT bestand genoemd.
  
-Een POT bestand, leesbare platte tekst, bestaat voornamelijk uit de geëxtraheerde tekst-reeksen, vooraf gegaan door "msgid" wat zoveel betekent als "message identifier", waatbij elk weer wordt gevolgd door een vertaling van dat bericht, dat wordt vooraf gegaan door de tekst "msgstr".+Een POT bestand, leesbare platte tekst, bestaat voornamelijk uit de geëxtraheerde tekst-reeksen, vooraf gegaan door "msgid" wat zoveel betekent als "message identifier". Bij elke "msgid" tekst behoort een vertaling van dat bericht, en deze tekst-reeks wordt vooraf gegaan door het woord "msgstr" wat staat voor "message string".
  
 Het **Localisatie** proces (verkort tot L10N) bestaat uit: Het **Localisatie** proces (verkort tot L10N) bestaat uit:
Regel 33: Regel 33:
   * alle "msgstr" teksten voorzien van vertalingen in ieder PO bestand,   * alle "msgstr" teksten voorzien van vertalingen in ieder PO bestand,
   * deze PO bestanden controleren/verifiëren na de vertaalslag,   * deze PO bestanden controleren/verifiëren na de vertaalslag,
-  * ieder PO bestand individueel compileren tot een "Machine Objet" of MO bestand.+  * ieder PO bestand individueel compileren tot een "Machine Object" of MO bestand.
    
-De MO bestanden die bedoeld zijn voor de machine, niet de mensvandaar de naamworden traditioneel opgeslagen als:+De MO bestanden die bedoeld zijn voor de machine, niet de mens (vandaar de naamworden traditioneel opgeslagen als:
   /usr/share/locale/<locale>/LC_MESSAGES/<software naam>.mo   /usr/share/locale/<locale>/LC_MESSAGES/<software naam>.mo
  
Regel 44: Regel 44:
  
 Tijdens het uitvoeren van het script wordt zo 'gettext' in staat gesteld om het juiste MO bestand te vinden en iedere gemarkeerde bericht-tekst weer te geven in de voorkeurstaal zoals die door de LANG of LANGUAGE omgevings-variabele is bepaald. Tijdens het uitvoeren van het script wordt zo 'gettext' in staat gesteld om het juiste MO bestand te vinden en iedere gemarkeerde bericht-tekst weer te geven in de voorkeurstaal zoals die door de LANG of LANGUAGE omgevings-variabele is bepaald.
- 
  
 ==== Procesdiagrammen ==== ==== Procesdiagrammen ====
  
-Laten we aannemen dat een bepaalde software bestaat uit een set shell scripts die we willen internationaliseren enlocaliseren.+Laten we aannemen dat een bepaalde software bestaat uit een verzameling shell scripts die we willen internationaliseren en localiseren.
  
-De onderstaande diagrammen tonen een overzicht van ieder onderdeel van de betrokken processen: internationalisatie, localisatie, gebruik en onderhoud.+De onderstaande diagrammen tonen een overzicht van iedere fase van de betrokken processen: internationalisatie, localisatie, gebruik en onderhoud.
  
 Deze diagrammen zijn hybride, dwz ze tonen data zowel als acties. Deze diagrammen zijn hybride, dwz ze tonen data zowel als acties.
  
-Onder deze acties zijn uitvoering van een aantal programma's uit de ''gettext'' verzameling:+Onder deze acties vallen de uitvoering van een aantal programma's uit de ''gettext'' verzameling:
   * ''gettetxt'': markeert de te internationaliseren tekstreeksen, en toont later de gelocaliseerde berichten tijdens de uitvoering van het script   * ''gettetxt'': markeert de te internationaliseren tekstreeksen, en toont later de gelocaliseerde berichten tijdens de uitvoering van het script
   * ''xgettext'': extraheert de gemarkeerde tekstreeksen uit een verzameling shell scripts om er een //POT// of een //PO// bestand van op te bouwen   * ''xgettext'': extraheert de gemarkeerde tekstreeksen uit een verzameling shell scripts om er een //POT// of een //PO// bestand van op te bouwen
Regel 101: Regel 100:
 === (3) Gebruik === === (3) Gebruik ===
  
-Veronderstel dat een van de scripts, "myscript.sh" het volgende commando bevat:+Veronderstel dat een van de scripts, "''myscript.sh''" het volgende commando bevat:
    gettext "Good morning"    gettext "Good morning"
  
Regel 121: Regel 120:
 Het onderhoudsproces kan worden gestart door het creëren, wijzigen of verwijderen van een script. Het onderhoudsproces kan worden gestart door het creëren, wijzigen of verwijderen van een script.
  
-In onderstaand diagram moet het onderdeel van het proces dat begint met het ''msmerge'' commando herhaald worden voor ieder beschikbaar PO bestand.+In onderstaand diagram moet het onderdeel van het proces dat begint met het '''msmerge''' commando herhaald worden voor ieder beschikbaar PO bestand.
  
 Het is daarom aan te raden om een actuele lijst bij te houden van alle beschikbare vertalingen in de vorm van PO bestanden. Het is daarom aan te raden om een actuele lijst bij te houden van alle beschikbare vertalingen in de vorm van PO bestanden.
Regel 224: Regel 223:
 ==== Localisatie proces ==== ==== Localisatie proces ====
  
-Once the POT file is availablethe 'msginit' command writes a PO file for each target language.+Wanneer het POT bestand klaar is, genereert het '''msginit''' commando daaruit een PO bestand voor iedere doel-taal.
  
-In PO files the "msgid" strings should never be modifiedotherwise the translation won't occur at run time.+In PO bestanden mogen de "msgid" tekstreeksen nooit gewijzigd wordenomdat er anders helemaal geen vertaling zal plaatsvinden tijdens de uitvoering van het script (runtime).
  
-The 'msgcmp' command allow to checks each PO file against the POT after translationto make sure all messages are translated.+Met het '''msgcmp''' commando kun je na de vertaalslag ieder PO bestand controleren tegen het POT bestandom je te verzekeren dat alle tekstberichten vertaald zijn.
  
-The translator can use the 'msgfmt' command to check the layout of the translated text.+De vertaler kan het '''msgfmt''' commando gebruiken om de layout van de vertaalde tekst te verifiëren.
  
-The PO file should be carefully saved somewhereas it will be needed for subsequent maintenance (it is still possible to 'msgunfmt' MO file to re-create a PO file but then you would loose the context, which would make it almost useless).+Het PO bestand moet zorgvuldig bewaard wordenomdat dit opnieuw nodig is wanneer er onderhoud gepleegd wordt op de vertaling (het is mogelijk om met het '''msgunfmt''' commando uit een MO bestand een PO bestand te re-creëren maar daarbij gaat wel de context verlorenwaardoor het resultaat nagenoeg onbruikbaar is).
  
-The checked PO file is handed over to the maintainer, who runs 'msgfmt' to produce the MO file, then installs it+Het gecontroleerde PO bestand wordt overgedragen aan de maintainer, die dan '''msgfmt''' gebruikt om het MO bestand te produceren en te installeren
  
 ==== Gebruik ==== ==== Gebruik ====
  
-The only thing the user will have to take care of is set up his preferred language(s).+Het enige dat de gebruiker hoeft te doen is het instellen van zijn of haar voorkeurstaal of -talen.
  
-The primary way to do that is setting the LANG environment variable.+De standaard manier om dat voor elkaar te krijgen is door de LANG omgevingsvariabele de juiste waarde te geven.
  
-This can be done at run time, preceding the command used to run the script with LANG=<locale>, but usually the user will set it up permanently.+Dit kan tijdens de script-uitvoering (runtime) gedaan worden door het commando dat wordt gebruikt om het script uit te voeren vooraf te laten gaan door de tekst ''LANG=<locale>''maar meestal zal de gebruiker zijn voorkeurstaal liever permanent willen instellen.
  
-For instance in Slackware Linux this will be done in editing the file(s) /etc/profile.d/lang.sh and/or /etc/profile.d/lang.csh (see these files).+In Slackware Linux bijvoorbeeld, wordt dat bereikt door het aanpassen van het relevante bestand ''/etc/profile.d/lang.sh'' (voor Bash-achtige shell) en/of ''/etc/profile.d/lang.csh'' (voor csh-achtige shell). De inhoud van deze bestanden wijst zichzelf door de er in opgenomen commentaren.
  
-The changes will be effective at next reboot.+De wijzigingen in die bestanden worden pas effectief bij de eerstvolgende login (bijvoorbeeld na een reboot).
  
-I suggest to use an UTF-8 locale, as for reading this document.+Het is aan te raden om een [[wp>UTF-8]] locale te gebruiken.
  
-If the user is polyglot, another option is to set gettext's specific LANGUAGE environment variable to specify a prioritized list of languages. +Voor een meertalige gebruiker (polyglotis de gettext-specifieke LANGUAGE omgevingsvariabele een mogelijkheid om een geprioritiseerde lijst van talen te specificeren.
- +
-For instance, if LANGUAGE is set to 'de:fr' then a Deutsch translation will be used if available, else a French translation will be used if available, else messages will be displayed in the original language, usually English. See gettext's manual for details.+
  
 +Indien bijvoorbeeld LANGUAGE wordt ingesteld op 'de:fr' dan zal een duitse vertaling worden gebruikt indien aanwezig, en anders wordt een franse vertaling worden gebruikt indien aanwezig, en in het uiterste geval zullen tekstberichten worden getoond in de  originele taal, gewoonlijk engels. Zie de gettext handleiding voor details.
 ==== Onderhoud ==== ==== Onderhoud ====
  
-In most cases the maintenance process will be triggered by a script's creationmodification or deletion. +Meestal zal het onderhoudsproces worden gestart door het creërenwijzigen of verwijderen van een script.
- +
-In such a case the maintainer will generate a new POT file with 'xgettext' then hand it hover to the translators.+
  
-The translators will use the new POT file to update their respective (saved) PO files with the 'msgmerge --updatecommand.+In zo'n geval zal de maintainer een nieuw POT bestand genereren met behulp van '''xgettext''' en dat dan doorspelen naar de vertalers.
  
-Then they will edit/complete the translations, focusing on the not yet translated messages and on those marked as "fuzzy" in the PO files, using a PO editor.+De vertalers gebruiken dan het nieuwe POT bestand om hun eigen respectieve (eerder opgeslagen) PO bestanden te verversen met het '''msgmerge --update''' commando.
  
-After that the PO file will be checked against the POT file with 'msgcmp'carefully saved, handed over to the maintainer who will generate the new MO file with 'msgfmt' and install it as in the initial localization process.+Met een PO editor worden de vertalingen bijgewerkt en eventueel opnieuw compleet gemaaktmet een focus op nog onvertaalde berichten en ook diegene die als "fuzzy" (onduidelijk/vaag) worden aangemerkt in de PO bestanden.
  
-The maintenance process triggered by a needed modification of a PO file for a specific language is similaronly shorter: it will begin with the update of the relevant PO file by the translator. To minimize the workload caused by this type of maintenanceI suggest that the maintainer demand that he or she be provided only with complete and well reviewed translations.+Na afloop wordt het PO bestand gecontroleerd tegen het POT bestand met '''msgcmp'''zorgvuldig opgeslagenen overgedragen aan de maintainer. Die zal het  nieuwe MO bestand genereren met '''msgfmt''' en dit bestand installeren op de juiste plek zoals gedefinieerd in het initiële localisatie proces.
  
 +Het onderhoudsproces dat wordt gestart omdat een PO bestand van een specifieke taal een wijziging behoeft, is vergelijkbaar maar korter: het start met een wijziging van het relevante PO bestand door de vertaler. Om de werklast voor de maintainer te beperken zou deze van zijn vertalers kunnen eisen dat hij alleen maar complete en goed gecontroleerde vertalingen toegestuurd krijgt.
 ==== Practische aanbevelingen voor ontwikkelaars en maintainers ==== ==== Practische aanbevelingen voor ontwikkelaars en maintainers ====
  
Regel 304: Regel 301:
 ==== Practische aanbevelingen voor vertalers ==== ==== Practische aanbevelingen voor vertalers ====
  
-Depending on amount of work needed and available resourcesthere can be one translator or a team of translators per target language. In all cases, I recommend that at least one person be responsible for organizing the team's workchecking the translations and transmitting the checked PO file to the maintainer(s). Let's call this person the team coordinator+Afhankelijk van de hoeveelheid werk en beschikbare krachtenkan er een enkele vertaler of een groep vertalers zijn per doel-taal. In alle gevallen is het aan te bevelen dat minstens één persoon verantwoordelijk wordt voor de organisatie van het werk in het team, voor de controles van de vertalingen en het opsturen van het gecontroleerde PO bestand naar de maintainer(s). We zullen deze persoon de team coordinator noemen.
- +
-Don't feel obliged to translate verbatim. Not only is this rarely the best way to convey the meaning, but in addition this often leads to sentences too long to fit in allowed space. +
- +
-Use a specialized PO editor, 'not' a general text editor. This will not only prevent inadvertently editing 'msgid' strings but also facilitate their work and automatize additional checks, as the presence of a variable in the translation with the same spelling as in the original. +
- +
-While translating, choose a serif fixed width (or "monospaced") font, like Courier. That allow to visually distinguish characters that otherwise would look the same, and check line's length when that matters.+
  
-If possiblecheck the layout of the messages. You could do that looking at the context in the relevant source file. Even better, simply run the translated script+Voel je niet verplicht om een letterlijke vertaling op te leveren. Niet alleen is dit zelden de beste manier om de bedoelingen over te dragenmaar het leidt ook vaak tot zinnen die te lang zijn om in de toegestane ruimte te passen.
  
-This is especially important if you are translating dialog boxes. In particulartake care not to write too long sentences on one single line if it appears that the text can't flow on next one.+Gebruik een editor die toegespitst is op het werken met PO bestandenen niet een 'generieke' tekstverwerker. Dit zal enerzijds verhinderen dat er per ongeluk de 'msgidtekstreeksen zelf worden vertaald en anderzijds ook het vertaalwerk en additionele controles vergemakkelijken; zoals de aanwezigheid van een variabele in de vertaling met dezelfde spelling als in het origineel.
  
-Bear in mind that in VGA mode (used in text installers, in particular), line's width is limited theoretically to 80 charactersbut practically often to 74.+Kies tijdens het vertalen voor een font met een schreef en vaste breedte (een "monospaced" of typmachine font), zoals Courier. Met zo'n font kun je karakters van elkaar onderscheiden die anders (bijna) hetzelfde zouden lijkenen regellengtes controleren wanneer dat belangrijk is.
  
-Do not add question marks that are not present in the original message.+Houd de indeling van de tekstberichten in de gaten. Vergelijk deze met de context in het betreffende bronbestand. Wat nog beter werkt is gewoon uitvoeren van het vertaalde script en het resulterende tekst controleren. \\ Dit is vooral van belang bij het vertalen van dialoog vensters. In het bijzonder moet vermeden worden dat lange zinnen op een enkele regel blijven staan, wanneer het duidelijk is dat de tekst niet kan overvloeien naar de volgende regel.
  
-If the message refers to tags (text on the buttons) of dialog boxes, like "OK", "Yes", "NO", "Continue", "Cancel", check how theses tags are translated in your language in dialog's interface and use the same words.+Houd in gedachten dat bij het werken in VGA mode (zoals in de tekst installers in het bijzonder) de regelbreedte in principe gelimiteerd is tot 80 karakters. In praktijk echter vaak niet meer dan 74.
  
-Avoid colloquialisms and technical slang.+Voeg geen vraagtekens toe als die niet aanwezig zijn in de oorspronkelijke tekst.
  
-To "cut" (or enda line inside a "dialogbox you should type \n: pressing [Enter] will 'not' insert a "new linecharacter in the text viewed by user+Indien de tekst refereert aan labels (tekst op de knoppenvan dialoog vensters zoals "OK""Yes", "NO", "Continue", "Cancel", zul je moeten controleren hoe deze labels in de dialoog interface vertaald worden in je eigen taal. Gebruik dezelfde woorden.
  
-In addition, you will have to comply to gettext's requirements for it to work: +Vermijd informeel taalgebruik en complex technisch woordgebruik.
-  * If a word beginning with a dollar sign is included in the original text it should be present in the translation with exactly the same spelling (case matters). +
-  * The translation text should include a "new line" character (or line feed, represented by "\n") at the beginning or at the end, exactly as the original text does. Conversely, if the original text doesn’t have the character, then the translation shouldn’t have it. +
-  * A single backslash character "\" is not allowed in the translation.+
  
-To "cut" (or end) a line inside a "dialog" box you should type \n: pressing [Enter] will 'notinsert a "new linecharacter in the text viewed by user.+Om een regel af te snijden in een dialoog venster  gebruik je de eind-tekst ''\n''. Het indrukken van de <key>Enter</key> toets zal //geen// "nieuwe regelkarakter invoegen in de tekst die de lezer ziet
  
-To check your translation against gettext's requirements you could run following command+Tot slot moet aan de vereisten worden voldaan die bij het gebruik van ''gettext'' horen
-  msgfmt -c <name of the PO file>+  * Indien een woord voorkomt in de originele tekst dat begint met een dollar-teken moet het ook in de vertaalde tekst aanwezig zijn  met precies dezelfde spelling (met inbegrip van hoofd/kleine letters). 
 +  * De vertaalde tekst moet een "nieuwe regel" karakter (ook wel "line feed" genoemd, gerepresenteerd door "''\n''") aan het begin of aan het eind hebben staan als de oorspronkelijke tekst dat ook heeft. Omgekeerd, als de oorspronkelijke tekst dit karakter niet heeft, dan moet de vertaalde tekst het ook niet bevatten. 
 +  * Een enkel backslash karakter "''\''" (omgekeerde schuine streep) is niet toegestaan in de vertaling.
  
 +Om je vertaling te controleren tegen de ''gettext'' vereisten kun je het volgende commando uitvoeren:
 +  msgfmt -c <naam van het PO bestand>
 ==== Waarschuwing over vertaling van man paginas ==== ==== Waarschuwing over vertaling van man paginas ====
  
Afdrukken/exporteren
 nl:howtos:misc:internationalization_and_localization_of_shell_scripts ()