Nápověda:Rozšíření:Translate/Podpora formátu souborů
Pro překladatele (hlavní stránka nápovědy )
- Jak se překládá
- Osvědčené postupy
- Statistika a hlášení
- Záruka kvality
- Přehled o stavu překladu zpráv
- Offline překlad
- Slovníček
Pro správce překladů
- Jak připravit stránku k překladu
- Správa překladu stránky
- Překlad nestrukturovaných prvků
- Správa skupin
- Přesun překládané stránky
- Import překladů přes CSV
- Práce se svazky zpráv
Pro systémové administrátory a vývojáře
![]() | Tato stránka je zastaralá. |
FFS znamená file format support (podpora formátu souborů). Toto je obecný název pro skupinu tříd pro čtení a psaní přeložených zpráv v různých formátech souborů v rozšíření Translate.
Vývojáři softwaru mnohokrát znovu vynalezli kolo s lokalizačními technologiemi, takže existuje mnoho různých formátů pro ukládání přeložitelných softwarových zpráv. Existují dvě hlavní skupiny takových formátů.
- Formáty založené na klíčích: Každá zpráva má klíč, obvykle více či méně smysluplný řetězec. Překlad do každého jazyka je mapa klíčů ukazující na hodnoty. Většina formátů spadá do této skupiny, včetně DTD, JSON a starého formátu MediaWiki do roku 2014 (v podstatě pole PHP).
- Gettext-like: Zpráva v původním jazyce programu, obvykle angličtině, se sama používá jako klíč, který ukazuje na překlady do jiných jazyků. To vyžaduje generování inherentně nestabilních pseudoklíčů pro ukládání zpráv v jiném formátu.
Úvod do tříd FFS
Až na některé výjimky je většina tříd FFS odvozena z rozhraní FFS, které definuje základní metody, které musí každá třída implementovat:
setWritePath( $target )
- Setter pro název souboru.
getWritePath()
- Getter pro název souboru.
read( $code )
- Přečtěte si zprávy ze souboru a analyzujte je.
readFromVariable( $data )
- Přečtěte si zprávy z řetězcové proměnné, která má stejný formát jako soubor, a vraťte je jako pole AUTHORS a MESSAGES. Zde se předpokládá skutečná analýza textu souboru.
write( MessageCollection $collection )
- Napište zprávy do souboru.
writeIntoVariable( MessageCollection $collection )
- Zapište zprávy do řetězcové proměnné, která má stejný formát jako soubor. Zde se předpokládá pečlivá konstrukce výsledného souboru zpráv.
Překlady MediaWiki
Třídy pro ukládání překladů MediaWiki v současnosti nezpracovávají deriváty rozhraní FFS, ale autonomní třídy: Existují konfigurační instrukce. Vyvíjejí se nové třídy podobné FFS.
třída SimpleFFS
Třída SimpleFFS je předkem všech ostatních tříd FFS a je to také jednoduchý příklad toho, jak by měla být třída FFS napsána. Implementuje zjednodušený formát založený na klíči:
- každý soubor má dvě části oddělené "\0\0\0\0";
- jedna sekce má jména překladatelů oddělená "\0";
- druhý má překlady ve formátu "klíč=hodnota", také oddělené "\0".
Jelikož je SimpleFFS záměrně zjednodušující, ukazuje možné chyby a komplikace. Například znak "=" není uvozen, takže klíč a hodnota je nemusí obsahovat. Je zřejmé, že to není něco, co je vhodné pro programy v reálném světě. SimpleFFS také implementuje užitečné obslužné metody:
exists( $code )
- Testuje, zda soubor existuje.
writeReal( $collection )
- Implementuje interní zápisy ve formátu souborů, kromě obecnějšího writeIntoVariable.
filterAuthors
- Filtrujte některé definované autory ze souboru podle vlastní černé listiny. To je užitečné například pro filtrování uživatelských jmen robotů, vývojářů a správců překladů.
fixNewLines( $data )
- Opravte všechny konce řádků na unixový styl.
Psaní nových tříd FFS
Všechny výše uvedené metody SimpleFFS lze přepsat. Většina implementací však potřebuje implementovat pouze writeIntoVariable
a readFromVariable
.
Obecné tipy při psaní nových kurzů:
- Vyhněte se spouštění formátů spustitelných souborů. Analyzujte je.
- Nezapomeňte zkombinovat a rozbalit klíče zpráv.
- Nepředpokládejte, že klíče zpráv neobsahují problematické znaky. Budou.
- Obvykle se očekává, že výstup bude pěkný a čitelný. Někteří lidé do nich rádi šťouchají ručně.
- Většina formátů nepodporuje fuzzy značky, některé je přidávají pouze jako komentáře při exportu a při importu je ignorují.
Podporované formáty souborů
Existující třídy FFS jsou:
- AndroidXml – pro použití v aplikacích pro Android
- AppleFFS – pro iOS/Mac OS X Localizable.strings
- Dtd – pro projekty založené na DTD, jako jsou Okawix a Mozilla.
- FlatPhpFFS – pro budoucí použití v MediaWiki
- Gettext – pro projekty založené na Gettextu
- Ini – pro projekty založené na INI
- JavaScript – pro všechny soubory ve formátu JavaScript
- Vlastnosti Java – pro soubory *.properties, používané v některých projektech Java a JavaScript, často spolu s Dtd
- Json – používá se v projektech založených na jquery.i18n, jako je přenosná knihovna Universal Language Selector
- Yaml – používá se ve Waymarked Trails
- Ruby (Yaml) – používá se v OpenStreetMap a Shapado
- AMD (definice asynchronního modulu) balíček i18n
Příklady exportů Translate v těchto formátech jsou k dispozici na translatewiki.net.
![](http://upload.wikimedia.org/wikipedia/commons/thumb/3/3b/InterfaceFFS_inherit_graph.png/520px-InterfaceFFS_inherit_graph.png)
Změna klíčů zpráv pro zajištění správné manipulace s titulky
Rozšíření Translate je založeno na MediaWiki a každá zpráva je uložena jako stránka MediaWiki, takže klíčem musí být platný název stránky MediaWiki. Mangling se o to postará escapováním názvů klíčů podobným způsobem jako quoted-printable kódování, ale s některými úpravami před uložením zprávy jako wiki stránky. Před zapsáním zprávy zpět do souboru je zpráva rozbalena.
Když třída FFS přepíše funkce, které volají mandlovací rutiny, musí se ujistit, že zpáteční cesta je provedena správně – to znamená, že klíč je před zápisem do MediaWiki pozměněn a před zápisem překladu zpět do souboru rozbalen.
Mangling se provádí ve třídě StringMatcher
.
Testování tříd FFS
Pokud vytvoříte novou třídu FFS, vytvořte odpovídající testovací soubor v adresáři testy. Důležité věci k testování jsou:
- Analýza formátu: V podstatě testování, že funkce
readFromVariable
vrací správné klíče a hodnoty pro AUTORS a MESSAGES. - Roundtrip: Otestujte, zda jsou klíče a zprávy správně napsány a přečteny.
Jako příklady můžete použít existující testovací rutiny, jako je JavaFFSTest.