• Vítejte, pokud zde hledáte překlady, všechny dostupné jsou k dispozici přes záložku Překlady. Pro stažení překladu či prohlížení fóra není potřeba se registrovat! Pokud se chcete i přes to registrovat, přečtěty si FAQ co vám registrace nabízí a jak postupovat.

Práce s textem aneb jak říct hře, udělej enter - tipy a triky

Hekimen

Vox Populi
Tým překladyher.eu
Tento článek je zaměřen převážně na problematiku formátování a zobrazování textů, obsahuje spoustu obecných a teoretických informací.

Zkoušíte zobrazit Vámi přeložený text ve hře, ale výsledek nesplňuje očekávání? Tak jste tu správně, protože si představíme pár triků a tipů, jak požadovaného zobrazení ve většině, nikoliv ve všech, případů dosáhnout.
PS: Není zde uvedeno všechno, jinak bych tu mohl popsat sto stránek a nestačilo by to, dále prosím berte na vědomí, že jsem se tento článek snažil napsat pro lidi, kteří o programování vědí akorát to, že existuje. Přesto, a nebo možná proto, budu rád za každou připomínku. Případně můžete napsat, co Vám zde chybí a proč. Pokud to bude v mích silách, rád článek upravím, či dopíši.

Vyhledávat můžete v kapitolách:
  1. Kódování (znaková sada, aneb když se místo ř zobrazuje Ĺ, atd.)
  2. Učíme se z originálu (nejrychlejší cesta k naformátování textu)
  3. Znakové entity (speciální zápis nestandardních znaků a interpunkce)
  4. Extra mezery (nedělitelná mezera, dvě a více mezer vedle sebe)
  5. Zalomení řádků (jak říct programu/hře, tady udělej enter)
  6. Cesta textu od datového souboru k výstupu ve hře


1. Kódování (znaková sada)
Co to vlastně je? Jedná se v podstatě o převodní tabulku, díky které programy pak vědí, jaký znak (obrázek) mají zobrazit.
Ukázka kódovací tabulkypic005.gif

Každý asi již koukal na nějaký film/seriál s titulky a už se asi každému stalo, že se u titulků zobrazovala chybně interpunkce.
Kód:
kódování UTF-8 (originální text - níž pak ukázka, jak se text mění v závislosti na kódování)
Na co se připravit, než začnete překládat?

kódování Windows-1250 (Standard pro MS Windows)
Na co se připravit, než začnete překládat?

kódování ISO 8859-2 (Standard pro Linux/Unix systémy)
Na co se připravit, než začnete překládat?
Na toto můžete narazit i pře překladu her. Tato chyba Vám může vzniknout, když soubor s textem uložíte v jiném kódování, než jej vyžaduje hra. Zpravidla, když pro překlad vytváříte úplně nový soubor a needitujete okopírovaný originál.

Trik: Nejjednodušší odstranění této chyby je otevřít soubor v programu, ve kterém byl vytvořen a přeuložit jej ve správném kódování, program sám zajistí správný převod znaků, zpravidla. Pokud to neumí, používáte špatný editor nebo specifiky zaměřený na určitou věc a doporučuji Vám změnu :)

Tip: Pokud se vám v textu zobrazuje znak �, znamená to zpravidla, že kódování tento znak nezná a někde je chyba, buď je znak poškozen nebo je špatně zvoleno kódování.

Tip: Pozor na hry, které podporují nativně jazyky zapisované ve znacích (japonština, čínština a další). U takových her může být kódování nastaveno na UTF-16 nebo UTF-32, tato kódování nemusí všechny editory textu ještě podporovat (neznají je).

Tip:
Dnešní trend v oblasti programování, co se kódování týče, věci značně zjednodušuje, protože se v programování stalo nepsaným standardem používat kódování UTF-8, díky tvorbě vícejazyčných programů a internetu. Proto pokud budete používat UTF-8 nebudete mít v 90% případů problém. Nepříjemnosti Vám můžou nastat až u her vydaných před rokem 1998 nebo u takových, které jsou extra dělané "na zakázku", i když to je v dnešní době spíš výsada her určených pro konzole: PlayStatio vs XBox, atd., na PC jich bude minimum.
2. Učíme se z originálu
Aneb jak co nejrychleji naformátovat text, když nám nefunguje třeba enter. Nejjednodušší je v originálním textu najít takový, který splňuje námi požadované formátování ve hře, podívat se jak se v něm zapisuje, třeba ten enter, formátování a následně podle něj upravit náš text. Tento postup je nerychlejší, protože máte jistotu, že bude vždy fungovat a nebudete muset trávit čas při hledání funkčního řešení, které je zdlouhavé a může se protáhnout i na hodiny.

Tip: Je lepší věnovat i půl hodiny hledání požadovaného formátování v originálních textech, než začít zkoušet vlastní řešení.
3. Znakové entity
Jedná se laicky řečeno o složitější zápis znaků. Asi si říkáte k čemu to je dobré. Tak já vám to prozradím:), díky tomuhle nemusíte řešit kódování a u opravdu malého procenta her, se pomocí entit dají "obejít" některé vnitřní systémy - ty jenž by vám zmařili interpunkci. Vskutku mocný nástroj, a proto má i svoji jednu obrovskou nevýhodu, výstup textu ve hře musí podporovat SGML, HTML nebo XML, jinak entity nefungují. Pomocí entit můžete zapsat jakýkoliv znak, který je součástí tabulky Unicode (100 000+ znaků). Tolik k teorii a teď k praxi.

Zápis entit lze provádět třemi způsoby - pomocí jména znaku a decimální nebo hexadecimální konstantou. Decimální a hexadecimální konstantou lze zapsat jakýkoliv znak, jménem lze zapsat jen některé.
Decimální zápis:
Kód:
&#<číslo>; 0 až 9
&#64; = @
&#65; = A
Hexadecimální zápis:
Kód:
&#x<hex číslo>; 0 až F
&#x40; = @
&#x41; = A
Zápis pomocí pojmenování (doporučeno):
Kód:
&<jméno>;
&commat; = @

&<Znak><jméno>;
&Atilde; = Ã

Trik: Když uvidíte tento znak ⏢ (obdélník s hex čísly uvnitř nebo i bez nich - pro ty, kterým se znak zobrazil), znamená to, že použitý font nemá znak nadefinovaný (kódování je v pořádku), toto se dá odstranit změnou fontu na takový, který znak obsahuje nebo úpravou stávajícího - přidáním znaku.
(Použitý znak pro příkladwhite_trapezium.png )

Tip: Pojmenované entity naleznete zde: http://dev.w3.org/html5/html-author/charref

Tip: Pomocí decimálního zápisu lze psát znaky i v MS Windows systému, stačí zmáčknout a držet levý ALT a na numerické klávesnici napsat číslo znaku - LALT+64 = @

Tip: U starých/prehistorických her, které jsou založeny na 8bitovém systému, nebudou entity fungovat a Unicode znaky taktéž, protože využívají 16bitový formát zápisu (hra by se musela naprogramovat od znovu).
4. Extra mezery
Ve spoustě her, je nějakým způsobem automaticky řešeno zalomení řádků. Co ale dělat, když se text zalomí na špatném místě? V ten moment máte v podstatě jen 3 možnosti
1. Upravit slovosled, text - hledat synonyma, změnit překlad.
2. Nechat text jak je, s tím, že není prostě vše dokonalé...
3. Zkusit použít nedělitelnou mezeru, a na tu se teď podíváme.

Říká se jí také Nezlomitelná mezera nebo Tvrdá mezera. Textové procesory s ní pracují jako s písmenem, a proto v jejím místě nezalomí text, za normálních okolností. V praxi ji normálně poznáte jen, když je zapsaná:
1. pomocí entity
Kód:
&nbsp; - no-break space
ekvivalenty:
&#160;
&#xa0;
2. pokud je text zarovnán do bloku (justify) - standardní mezery se rozšíří, tato mezera si zachová svoji šířku

Příklad použití:
Kód:
Nějaký dlouhý text se zkratkou na konci řádku S. P. E.
C. I. A. L. - která se tam už celá nevejde.
Rozdělit zkratku není zrovna pěkné a zároveň to je chyba. Takže pro tenhle případ se nám perfektně nedělitelná mezera hodí.
Takhle bude text vypadat, pokud se ve zkratce místo obyčejných mezer použijí nedělitelné:
Kód:
Nějaký dlouhý text se zkratkou na konci řádku
S. P. E. C. I. A. L. - která se tam už celá nevejde.

Další využití: Pokud chceme zapsat více mezer vedle sebe, máme normálním způsobem smůlu. Jedná se totiž o typografickou chybu a textové procesory zachovají pouze jednu mezeru a ostatní odstraní, to ovšem neplatí pro nedělitelnou mezeru, protože se jedná písmeno.

Trik: Této mezery se dá využít i tam, kde jsou u textů odstraněny z obou stran netisknutelné znaky, ale mi potřebujeme, aby text začínal, končil mezerou nebo ji chceme z obou stran. Pěkným příklad jsou ve hrách třeba přívlastky objektů: Rozbitá, Zamčená, Prázdná, atd. Truhla. V jazykovém souboru můžou být tyto texty rozděleny třeba nějak takto:
Kód:
<text=0>Plná</text>
<text=1>Rozbitá</text>
<text=2>Zamčená</text>
<text=3>Prázdná</text>
<text=4>Truhla</text>
Pokud bychom použili obyčejnou mezeru <text=4> Truhla</text>, bude tato mezera ve většině případů odstraněna a ve hře by nám pak vznikaly typografické chyby: PrázdnáTruhla. Pokud se ovšem použije nedělitelná mezera <text=4>&nbsp;Truhla</text> nejedná se už o netisknutelný znak, ale o písmeno a tato mezera odstraněna nebude.

Trik: Někdy může být problém nedělitelnou mezeru, zapsanou pomocí entity, zobrazit, pokud je na začátku nebo konci - program ji rozpozná jako prázdný znak a odstraní ji, přičemž vlastně odstraní jen & a nám by pak, ve hře z příkladu výše, vzniklo tohle: Prázdnánbsp;Truhla. V takovém případě lze někdy využít této konstrukce
Kód:
&amp;nbsp;
kde &amp; = &
V případě že se jedná XML, lze využít i sekci CDATA, do které se text celý obalí, poté není zpravidla ani třeba využívat entit:
Kód:
<![CDATA[ Nějaký text]]>
Tip: Pokud není možnost zápisu pomocí entity, dá se tato mezera na MS Windows zapsat pomocí klávesové zkratky LATL+0160.

Tip: Další informace naleznete zde: http:confused:/cs.wikipedia.org/wiki/Nezlomitelná_mezera
5. Zalomení řádků
Občas budete potřebovat zalomit řádek, ale hra Vám bude klasický enter ignorovat a chovat se, jako by tam nebyl. Zde máme hned několik možností, jak ji donutit do výstupu nový řádek vložit.

1. Pokud má výstup podporu HTML, lze použít tag <br> (pro XHTML pak <br />)
Kód:
Za tímhle textem chci nový řádek<br>a tenhle text je na novým řádku. :)

2. Když chybí podpora HTML tagů, lze zkusit entity:
Kód:
&#xD;&#xA;

3. Pokud není podpora ani entit, můžete zkusit jednu sekvenci znaků z následujícího seznamu
Kód:
\n
\r
\r\n

Trik: zápis enteru pomocí HTML tagu <br> nebude fungovat v XML souborech, XML procesor si bude myslet, že jde o XML tag, nikoliv o HTML. Pak se může stát, že hra bude padat nebo se texty za tímto tagem nezobrazí, v nejlepším případě se nic nestale, ale ani se v textu enter neudělá. Toto se dá obejít vložením takovéhoto textu do již zmiňované sekce CDATA nebo zapsat znaky <> pomocí entit
Kód:
&lt; = <
&gt; = >
&lt;br&gt;
Tip: Pokud hodláte udělat enter na jiném systému než MS Windows, doporučuji vám text vyzkoušet na všech ostatních systémech, opačně by to nemělo vadit. Toto je způsobeno tím, že Linux dělá entery pomocí \n, Apple používá \r, MS Windows jako jediný používá a vyžaduje oba znaky \r\n.
\r = carriage return, entita - &#xD;
\n = line feed, entita - &#xA;

Tip: Doporučuji přečíst článek na wiki: http:confused:/cs.wikipedia.org/wiki/Nový_řádek

Tip: U novějších her jsou obvykle používané takové metody, aby nevadilo jaký ze standardních znaků pro enter je použit - systém rozpozná enter nezávisle na tom, v jakém OS byl napsán, přesto je lepší si to otestovat.
6. Cesta textu od datového souboru k výstupu ve hře
V první řadě napíšu, že tato část je hodně teoretická, není totiž obecně možné říct a popsat, jak hry zpracovávají textové dokumenty s překlady - neexistuje žádný standard, každý programátor, tvůrce hry, si může vytvořit vlastní postup, vlastní metody, jak bude s textovým vstupem pracovat. Přesto se dají, alespoň částečně, některé metody vysledovat a odhadnout, podle toho co hře podkládáte a co následně zobrazuje. Takto se dá postupným zkoušením vysledovat, co hra vlastně podporuje - HTML, entity, řídící znaky, atd., jak se chová - odstraňuje prázdné znaky na krajích textu(?), nahrazuje klasické entery za mezery(?), atd. Takovým to postupným sledováním, jste schopni následně vydedukovat, kolika parsery Váš text vlastně prochází a podle toho pak následně upravit formátovací značky.

Tip: Ve většině případů budete mít pravděpodobně štěstí a nebudete muset hledal složité řešení, protože text z datového souboru poputuje přímo na výstup obrazovky.

Tip: I když se v textu nachází herní kód, algoritmy, který jej zpracovávají, si zpravidla formátování nevšímají.

Tip: O tom, jaké metody formátování hra bude podporovat, většinou rozhoduje už způsob, v jakém formátu a souboru jsou texty uloženy. Obecně se ale nedá říct, že jednoduchý čitelný formát uložených textů, který otevřete v poznámkovém bloku, bude snazší naformátovat, než nějaký složitý zašifrovaný binární soubor, ze kterého texty budete dostávat týden, abyste si je aspoň mohli přečíst.
 
Naposledy upraveno:
Top