Překlady
Wiki TheWoodcraft.org je multijazyčná. Obsahuje texty nejenom v češtině, ale také v angličtině a polštině. Technicky v tomhle směru limitována není. Omezena je pouze jazykovými znalostmi editorů.
Upravit obsah stránky, tak aby se dal překládat, může každý editor ale vyžaduje to alespoň základní znalosti a zkušenosti s editací wiki kódu.
Překlad a korekturu překladu lze udělat i bez toho, protože wiki disponuje překladatelským rozhraním, přes které může obsah jednotlivých textových zpráv překladatelné stránky překládat každý přihlášený uživatel, pokud má ke stránce přístup.
Nepřekládají se všechny stránky. Některé to nepotřebují, protože nejsou veřejně přístupné a k jiným mají přístup pouze vybraní uživatelé, co si je překládat nepotřebují.
Strojový překlad
U veřejně přístupné stránky, u které nezáleží na kvalitě překladu lze využít šablonu {{GT}}
, která do jejího záhlaví vkládá Widget:GoogleTranslate. Javascriptový kód, který generuje URL, přes který se zavolá automatický překladač fy. Google, co rovnou natáhne stránku ke zpracování do aktuálně zvoleného jazyka rozhraní, resp. jazyka webového prohlížeče uživatele, co si tu stránku chce přečíst a výchozímu jazyku nerozumí.
Překladatelná stránka
Automatický strojový překlad však má své limity. On-line překladače využívají tzv. umělou inteligenci (AI), která velice manipulativním způsobem podsouvá texty, které nenápadně mění smysl původního sdělení. Nemusí to být cílená manipulace. Ale je to a proto mu nelze mu důvěřovat.
Obsah napsaný ve výchozím jazyce rozdělí na textové jednotky (TU - translation units) a
Ke zpracování výchozího, plain textového souboru se používají tři skripty:
trans.sh
- Zajišťuje automatický strojový překlad textových řetězců přes API aktuálně dostupného on-line překladače, přímo na příkazové řádce. Je to shellový skript, který obaluje [ https://cs.wikibooks.org/wiki/Awk awk], veřejně dostupný na adrese https://github.com/soimort/translate-shell – stažený, nebo sestavený soubor
trans
je potřeba nastavit jako spustitelný a nakopírovat do stejného adresáře kde jsou stažené následující dva soubory pod názvemtrans.sh
prelozit.sh
- Načítá jednotlivé řádky, na přidává před ně parametry pro skript
trans.sh
. Výsledek vypisuje na standardní výstup. pofile.sh
- Pomocný skript, který zpracovává výstup skriptu
prelozit.sh
do PO souboru, jehož korekturu lze udělat off-line v aplikaci poedit
Překlad z prostředí linuxové konzole
K překladu se využívá skript trans
, který volá přes API aktuálně dostupný on-line překladač (např. od fy. Google). Ten je potřeba nakopírovat ke skriptu prelozit.sh
a přejmenovat na trans.sh
, aby nedošlo k jeho neúmyslnému přepsání.
Následující ukázkový záznam demonstruje jakým způsobem se používá. A demonstruje i kód a použití zbylých dvou skriptů.
Překlad do jazyka XX
Pro zjednodušení uvádím aplikaci překladu na soubor dopis, jehož obsah chci přeložit například do polštiny:
for i in dopis ; do while read line ; do ./prelozit.sh cs:pl $line ; done < ./$i ; done
Výsledek se bude vypisovat na terminál.
Pokud z něj budu chtít rovnou udělat polskou verzi, mohu za tím použít rouru:
… | grep ^msgstr | sed -e 's/msgstr/echo/' | xargs -n2 sh -c '$0 $1'
A výsledek zapsat do souboru.
Více souborů i více jazyků
Na vstupu je vždy plaintextový soubor.
Pokud je potřeba přeložit souborů více, je potřeba v názvu použít společný řetězec, např. 'orig', a výstup nezapisovat na konzoli, ale do souboru, kde tenhle společný řetězec nahradíme např. jazykovými kódy cílových jazyků.
Skript prelozit.sh totiž dovoluje vytvoření multijazyčného souboru, který umožňuje porovnávat automatické překlady textových jednotek do různých jazyků a překladatel, který jim rozumí, tak získá lepší přehled o kontextu.
Takto lze vytvořit multijazyčný soubor s překladem anglického textu do češtiny a polštiny
for i in $(ls -1 epilog_orig.rst) ; do while read line ; do ./prelozit.sh en:cs:pl $line ; done < ./$i >> ./${i/orig/en-cs-pl} done
A je-li těch souborů více...
for i in $(ls -1 *_orig.rst) ; do while read line ; do ./prelozit.sh en:cs:pl $line ; done < ./$i >> ./${i/orig/en-cs-pl} done
Překlad textových řetězců do jiného jazyka, založený na gettextu, pracuje na jednoduchém principu.
Soubor, s příponou .po
obsahuje hlavičku, která určuje cílový jazyk a parametry s nimiž se při překladu pracovat.
ID překládané textové jednotky (v souboru na řádku začínajícím řetězcem msgid) představuje celá překládaná zpráva.
A překlad je na následujícím řádku začínajícím řetězcem msgstr.
Některé překladatelské nástroje pracují také s kontextem, který je umístěn před ID, na řádku co začíná řetězcem msgctx.
Bohužel tenhle formát nepodporuje multijazyčný obsah, proto skriptem prelozit.sh přidává za řetězec msgstr ještě kód příslušného jazyka.
Takový soubor pochopitelně v nástroji specializovaném na překlad textu, který pracuje s PO soubory otevřít nelze. Ale je možné z něj získat PO soubor pomocí skriptu pofile.sh
pofile.sh
Je pomocný skript, který vytáhne z multijazyčného souboru zprávy, které následně sestaví tak, aby vznikl validní PO soubor.
Stejně jako skript prelozit.sh vyžaduje jako první parametr řetězec.
- Je-li uveden pouze jeden jazykový kód, vytvoří tzv. POT soubor, který obsahuje nepřeložené textové zprávy a jazykový kód by měl odpovídat tomu, v jakém jsou jazyce
- Jsou-li uvedeny dva kódy, oddělené dvojtečkou, bere se jako výchozí jazyk, jehož kód je uveden jako první a druhý je cílový.
- V případě, že jde o soubor multijazyčný, generovaný skriptem prelozit.sh, je potřeba uvést ještě třetí kód, který jenom řekne, že se má při kuchání přeložených zprávy použít také jazykový kód cílového jazyka.
Text s pomínkami pro získání čin 4O4 se překládá na stránce svitek-4O1-2
PO soubor, vyexportovaný přes Special:ExportTranslations, který se bude jmenovat page_svitek-4O1-2_en.po
, bude mít následující obsah:
# Translation of svitek-4O1-2 to English (English)
# Exported from thewoodcraft.org
#
msgid ""
msgstr ""
""
"PO-Revision-Date: 2024-09-02 13:01:11+0000\n"
"POT-Creation-Date: 2024-09-02 13:01:11+0000\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: en\n"
"X-Generator: MediaWiki 1.39.3 (9eb5c12); Translate 2022-07-28\n"
"X-Language-Code: en\n"
"X-Message-Group: page-svitek-4O1-2\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#
msgctxt "svitek-4O1-2/1"
msgid "Napiš$concept-17 studii v rozsahu 5 stran$concept-39, v níž popíšeš historii woodcraftu u nás (LLM, Psohlavci, Děti živěny, ISAW, … ), nebo o tom přednášej $1$2 skupině osob$concept-35."
msgstr ""
#
msgctxt "svitek-4O1-2/2"
msgid "U člena Malé lóže stačí, když o československé woodcrafterské historii dokáže pohovořit alespoň $1."
msgstr ""
Obsahuje pouze dvě TU, která vykucháme a rovnou přeložíme příkazem
grep ^msgid ~/Stažené/page-svitek-4O1-2_en.po | sed -e 's/msgid/echo/' | xargs -n2 sh -c './prelozit.sh cs:en $($0 $1)' >> 4O1-2_en
Abychom mohli přeložený text naimportovat zpět do wiki, zapsali jsme ho do souboru 4O1-2_en
, který přežvýkneme přes pofile.sh a přidáme příponu .po
./pofile.sh cs:en ./4O1-2_en > ./4O1-2_en.po
Přes aplikaci meld, se můžeme podívat, jak se soubor, vyexportovaný z wiki liší od toho co jsme právě vyrobili:
[screenshot meld]
A rovnou můžeme přes aplikaci poedit přeložený text upravit
[screenshot poedit]
Pro import je ale potřeba editovat vyexportovaný soubor! Nicméně když ho otevřeme k editaci, nabídne poedit již upravené zprávy, takže je můžeme rovnou vložit, doplněný soubor uložit a následně přes Special:ImportTranslations naimportovat zpět do wiki
A o výsledku se můžeme přesvědčit, když zavoláme stránku činu s parametrem ?uselang=en
, protože jazyk činu se řídí aktuální volbou jazyka. [1]
CSV formát
Import a export lze realizovat také prostřednictvím CSV formátu. Z něj je dobře patrné, že pro wiki je velmi důležitá položka "Translation message title", kterou v rámci PO souboru určuje kontext msgctxt
, protože obsahuje název jazykové podstránky, s překládaným obsahem TU.
"Translation message title","Message definition",en Translations:svitek-4O1-2/1/cs,"Napiš$concept-17 studii v rozsahu 5 stran$concept-39, v níž popíšeš historii woodcraftu u nás (LLM, Psohlavci, Děti živěny, ISAW, … ), nebo o tom přednášej $1$2 skupině osob$concept-35.","Write$concept-17 a 5-page study$concept-39 which describe the history of the woodcraft movement in your country (Wolne Harcerstwo is theme of the Polish woodcraft movement), or give a lecture$1$2 about to a group of listeners$concept-35." Translations:svitek-4O1-2/2/cs,"U člena Malé lóže stačí, když o československé woodcrafterské historii dokáže pohovořit alespoň $1.","For a members of the Little Lodge enoughs if talks about the woodcraft history at least $1."