AbstraktKódování utf8 umožňuje použít znaky z různých národních abeced současně (např. Němčina - latin1 a Čeština -latin2) a bez omezení. Odpadají tak problémy jednobajtových znakových sad, jako jsou latin1, latin2, windows-1250 apod. Následující postup
slouží k vyzkoušení jak moc je ve hře podporována čeština a kódování utf8. popisuje, jak převést jazykové soubory kódované v latin2 do utf8. Postup je funkční jak pro češtinu tak pro jakýkoliv jiný jazyk. Platí i pro jazyky kódované v latin1. Tímto postupem si nepokazíte stávající soubory s překladem.
Abstract:
Utf8 uncoding enables to use symbols from different national alphabeths (e.g. German - latin1 and Czech - latin2) concurrently without difficulties. Using uft8 avoid difficulties caused by different code pages like latin1, latin2, windows-1250 etc. Following text describes transformation of language files from latin2 encoding to utf8 encoding. This algorithm works for Czech language files as well as for any other language files. For language files in latin1 too. This approch does not destroy or damage language translation you already have.
úvodKódování utf8 je v simutrans již běžně používáno i v jazycích píšících latinkou - v litevštině a maďarštině. Dále je stejného souboru s fontem, jako u předchozích dvou, užito pro běloruštinu, ruštinu, a řečtinu. Proto neznám důvod, proč by utf8 nemělo být použito pro češtinu nebo jiný jazyk, který je nyní v latin1 nebo latin2.
Současný stav způsobuje občasné ( - stačí i jednou) rozbití překladů u jazyků v latin2, pokud jsou do translatoru importovány jako latin1. Pokud by byly všechny překlady v utf8, problém by odpadl.
Pokud budete postupovat podle tohoto návodu, přidáte si ke stávající češtině v programu (je v latin2) ještě "druhou češtinu" v utf8.
Nebudete-li s češtinou v utf8 spokojeni, snadno se můžete vrátit ke stávajícímu funkčnímu překlad v latin2 - pouze si přepnete zpět jazyk na "cestina".
Stávající čeština má zkratku "cz", u té v utf8 jsem použil "cs", aby se nepřepsala stávající verze. Nové označení jazyka musí být dvoupísmenné. Může to být například dosud nepoužitý kód státu, ve kterém se mluví stejným jazykem - at pro němčinu nebo us pro angličtinu. Stejně tak může posloužit použití následujícího písmena: "fr" --> "fs"
K rozchození češtiny v utf8 potřebujete:
* soubor s fonty ve formátu bdf
patří do adresáře "simutrans/font/"
* soubor s překlady textů programu
"simutrans/text/cs.tab"
* překlady nápověd k jednotlivým dialogům programu
"simutrans/text/cs/*.txt"
Dále jsou třeba překlady textů pro jednotlivé paky a seznam měst. Například pro pak64 jsou to soubory:
"simutrans/pak/text/cs.tab"
"simutrans/pak/text/citylist_cs.txt"
"simutrans/pak/text/streetlist_cs.txt" (bonus, není nutný)
Pod násludujícím odkazem se skrývá archiv s výše uvedenými soubory. Obsahuje
nový (testovací) původní font (má však navíc znak "tvrdá mezera", který chyběl), překlady pro program a pro pak64 a pak128.
http://simutrans-germany.com/files/upload/utf8_text_20130101.zip
V případě smazání výše uvedeného souboru použijte texty přímo z githubu. (Zde je budu možná občas aktualizovat)
Stáhněte celý repozitář z adresy:
https://github.com/jk271/simutrans/tree/texts_in_utf8 (https://github.com/jk271/simutrans/tree/texts_in_utf8)
kliknutím na ikonku s nápisem zip (je vlevom, asi 10 cm odshora)
A pak si z toho vyberte jen texty s nápovědou.
Postup:
1) Archiv stáhnete a rozbalíte soubory do příslušných adresářů.
2) Spustíte hru a vyberete jazyk "Cestina_utf8".
3) Vytvoříte novou hru a hrajete tak jak jste zvyklí.
Poznámka k fontu: Je použit jiný font, protože pro mě bylo jednodušší (méně časově náročné) vytvořit nový, než upravovat stávající font.Není nutné používat nový font. Po rozbalení souborů změňte hodnotu na 3. řádku v souboru simutrans/text/cs.tab na "cyr.bdf". Použije se čeština v utf8 a stávající font.Chcete-li převést do utf8 i jiné paky může vám posloužit program enca. Nebo ve vašem textovém editoru pro 21. století zvolte uložit jako a nastavte kódování "utf8". Nezapomeňte pak
přidat na začátek souboru znak
§ - ať simutrans pozná, že je to v utf8.
Známé bugy - co nefunguje a proč:
Dialog stanice: Nejsou zobrazeny smajlíky.
důvod: Nejsou obsaženy v testovacím fontu. Až zjistím jejich čísla, přidám je do fontu. Nejedná se o chybu v utf8.
Použijete-li původní font ze souboru "cyr.bdf" (ne ten nový DejavuSansMono10.bdf) vše se zobrazí tak, jak má být.
Diakritika u objektů z pak64: Rozbitá diakritika u některých objektů.
Diakritika u objektů z pak64 je rozbita už ve stávající verzi (v latin2) souborů z translatoru. Musel bych projít překladový soubor a ručně to opravovat položku po položce. To je přesně ten důvod, proč chtít utf8 všude (u všech jazyků včetně Angličtiny): Ubude případů s rozbitou diakritikou když někdo (člověk i program) myslel, že je to latin1 a ono to bylo latin2 apod.
Edit: Zrovna nedávno (31.12.2012) jsem opravoval nápovědu k železničním mostům naimportovanou do translatoru jako latin1 místo latin2.
Postup byl vyzkoušen v operačním systému Linux (Debian) - kde funguje. Budete-li to někdo zkoušet pod Windows, napište do tohoto vlákna v jakých Win a jak jste dopadli. Přidám to sem.
Edit 18.2.2012:
změna stávající hry v latin2 na utf8Stávající hra na utf8 změnit jde, chce to jenom mít nějaký program, co umí překódovat soubor z latin2 do utf8. Postup je následující:
1) Otevřít soubor "config/simuconf.tab"
2) Změnit způsob ukládání hry na "xml", tj. zakomentovat stávající řádek
# saveformat = bzip2
a přidat nový řádek
saveformat = xml
3) Načíst uloženou hru a uložit ji pod novým jménem (do xml). Nepřepisuju původní hru, co kdyby se to nepovedlo.
4) Ukončit simutrans
5) Překonvertovat hru (v xml) z latin2 do utf8
V Linuxu to jde příkazem
recode iso-8859-2..utf8 128_test_utf8.sve
Jak je to ve windows nevím. Ale určitě i tam existuje nějaký program na změnu kódování z latin2 do utf8.
V nejdorším případě to jde oteřít v nějakém textovém editoru (který to zvládne načíst jako latin2) a pak dát "uložit jako" a nastavit kódování na utf8.
Jenom předem upozorňuju, že krok 5 bude chvíli trvat, zvlášť s tím editorem. Taky to zabere spoustu operační paměti (pokud se editor).
6) V souboru "config/simuconf.tab" změnit způsob ukládání hry na původní hodnotu. (Ukládání jako XML trvá déle a zabírá hodně místa.)
7) Spustit simutrans a otevřít zkonvertovaný soubor s uloženou hrou.
8. Změnit jazyk na Cestina_utf8 (nebo cokoliv jiného v utf8).
9) Mělo by to být hotové.
introductionEncoding utf8 in simutrans is currently being used with two languages using latin alphabet: Hungarian and Lithuanian. The same font file now uses Belarussian, Greek and Russia translation as well. So I do not know any reason for not using of utf8 in Czech or any latin1- or latin2- language translation. Current state causes accidental (and very rare) breaking up of language translations encoded in latin2 (e.g. symbols as ěščž in Czech) by misinterpretation latin2 as latin1. Having all translation files woult avoid/anticipate such a nuissance.
For conversion language texts and making it work is needed:
- font file in bdf format - this is file ${SIMUTRANS}/font/cyr.bdf
- translation of program strings - ${SIMUTRANS}text/cz.tab
- translation of help files ${SIMUTRANS}/text/cz/*
You need also language files of your's favourite pak:
- translation of objects from pak - ${SIMUTRANS}/pak/text/cz.tab [/s]
- citylist - ${SIMUTRANS}/pak/text/citylist_cz.tab
- streetlist - ${SIMUTRANS}/pak/text/streetlist_cz.tab - this is optional
And you
need latin1 to utf8 or latin2 to utf8
converter. I have used programs
enca/enconv or
recode on my Debian GNU/Linux.
You can use any text editor, that can read files in latin1 or latin2 correctly and save it as utf8-encoded files. However this approch is much more slower than previous one with command line tools.Algorithm
As there are no pre-prepared language files in utf8 for your's language, you have to make it yourselves. As we do not desire to change current translations, we will make a copy. Instead of "cz" use code of your's language.
- Make a copy of files ${SIMUTRANS}/text/cz.tab, ${SIMUTRANS}/text/cz/*
cp ${SIMUTRANS}/text/cz.tab ${SIMUTRANS}/text/cs.tab
cp -r ${SIMUTRANS}/text/cz ${SIMUTRANS}/text/cs - Convert new files to utf8
recode latin1..utf8 ${SIMUTRANS}/text/cs.tab
recode latin1..utf8 ${SIMUTRANS}/text/cs/*
- Edit file ${SIMUTRANS}/text/cs.tab
Change first three lines to for Czech:
§Cestina_utf8
PROP_FONT_FILE
cyr.bdf
For french it would be like this:
§Francais_utf8
PROP_FONT_FILE
cyr.bdf
Notice sign § at the beginning of the line is necessary.
- Now you have to process texts in pak file in the same way as in step 1 and 2:
cp ${PAK}/text/cz.tab ${PAK}/text/cs.tab
cp ${PAK}/text/citylist_cz.txt ${PAK}/text/citylist_cs.tab
cp ${PAK}/text/streetlist_cz.tab ${PAK}/text/streetlist_cs.tab
recode latin1..utf8 ${PAK}/text/cs.tab ${PAK}/text/citylist_cs.tab ${PAK}/text/streetlist_cs.tab - Start a program.
- Choose your_language_utf8
- Start a new game
Poznámka: Tento text bude editován (upřesňován, odstaňovány přelkepy).
Edit: Přidán obrázek s ukázkami více jazyků najednou.
Důkaz použití utf8 - toto v latin2 nejde.
Edit 18.2.2012: Přidán postup pro úpravu stávající hry v latin2 do utf8.
Edit 8.5.2012: Úpravy a částečný překlad do angličtiny. Čím víc jazyků bude v utf8, tím líp.
Partial English translation. It is my way how to boost utf8 in simutrans.
Edit: 1.1.2013: opraven odkaz, přidán odkaz na github; Zbláznil se mi editor :(
No, ne že by to nevypadalo dobře. To vypadá - i ten font je celkem slušný - otázka je rozlišení velkých a malých písmen opatřených interpunkčními znaménky. To je v základní češtině (s výchozím fontem) trochu problém (protože některá z těchto písmen vypadají téměř stejně) - a proto nerad používám města, jejichž názvy takovými písmeny začínají.
A je škoda, že je nutné kvůli tomu začít úplně novou hru. Zrovna mám jednu hru docela slušně rozjetou.
Pokud chceš mít původní font, změň si v souboru "simutrans/text/cs.tab" na třetím řádku "DejavuSansMono10.bdf" na "cyr.bdf". Původně jsem nevěděl, že je tom nějaký font pro utf8 (obsahující znaky pro češtinu), tak jsem vygeneroval nový. Ten ale není nutný, jde si vystačit se stávajícím "cyr.bdf".
Doplnil jsem do návodu jak změnit stávající hru z latin2 do utf8.
Ahoj lidičky, pokud můžete, zkuste prosím stáhnout z translátoru texty pro jazyk "xx" pro program a vyzkoušet ve hře?
Vzal jsem původní češtinu (tedy jenom pro program), vytvořil nový jazyk se stejnými parametry jako současná čeština, naimportoval to tam zpátky, přehodil kóodování a stáhnul. Vypadá to, že konverze byla úspěšná. Teď ještě jestli to bude platit i jinde?
Pokud to bude fungovat i u vás, zřejmě stačí přehodit čudlík v translátoru a basta.
Stáhl jsem jazyk xx a zatím jsem neobjevil v základních textech něco, co by nefungovalo. Zkoušeno s pak64 a pak128.
Pokud to tahle půjde dál, je to skvělé.
Je potom možné s verzí SDL psát znaky jako háček plus písmeno? Třeba ť by tím bylo úplně vyřízené...
Používám verzi se SDL v Linuxu. Se znaky s háčky ve hře nemám problémy ani se zobrazováním ani s psaním.
Pokud použiju verzi SDL_mixer tak mi to funguje taky.
V allegru se mi nezobrazuje kurzor myši, takže to nemohu vyzkoušet.
Chtělo by to ještě někoho kdo používá SDL ve Windows.
P.S. Znaky ď ť ň fungují taky, jen jsem na ně pozapomněl.
UTF 8 jsem ještě nezkoušel. Vím ale, že v původním fungovaly. Jen u některých znaků, které není možné psát rovnou z horního řádku klávesnice, se před nimi objevovaly blbosti. Pokud by tohle odpadlo, bylo by to skvělé.
Odhalil jsem jeden bug, který se při použití latin2 neprojevoval - u názvů zastávek vytvářených ze jména továrny se objevoval na konci názvu obdélník. Pátral jsem v debuggeru, trasoval program a pořád nic. Pak jsem nakonec zjistil, že je chyba v překladu.
V souboru simutrans/text/cz.tab Jsou následující 2 rádky:
%s factory %s %s
%s - %s %s
Pokud na druhém z nich smažete poslední tři znaky - " %s", tak se obdélník už nebude objevovat.
%s factory %s %s
%s - %s
Inspiroval jsem se anglickou a německou verzí překladu. Tam je %s taky jen dvakrát.
Obdélníčky v názvech zastávek jsou způsobeny chybějícím znakem "tvrdá mezera" (160) v souboru s fontem (cyr.bdf).
Proč k tomu dochází?
V současné podobě překladu se u železničních stanic k názvu přidává text "stanice" (např. Zdiby, východní předměstí stanice) , u zastávek (silniční dopravy) se nic nepřidává. Jenže v souborech ze simutranslatoru je u zastávek přidávána tvrdá mezera. A ta chybí ve fontu, takže vznikne obdélník.
Je to nahlášené, možná se to podaří opravit přímo u zdroje.
http://forum.simutrans.com/index.php?topic=11197.msg109065;topicseen#msg109065 (http://forum.simutrans.com/index.php?topic=11197.msg109065;topicseen#msg109065)
Pokud se vám nechce čekat, vložte si do souboru cyr.bdf toto:
STARTCHAR char160
ENCODING 160
SWIDTH 389 0
DWIDTH 5 0
BBX 5 0 0 0
BITMAP
ENDCHAR
Nejlépe mezi řádky
"ENDCHAR"
a
"STARTCHAR char161"
Díky za upozornění. :) Nejpíše se to bylo smazáno.
Nahrál jsem texty na gitbub. Měly by tam vydržet déle a je to pro mě jednodušší na nahrávání. Je to ve větvi texts_in_utf8. v adresáři simutrans/text/
Označené je to jako jazyk cs (aby se to nepletlo se stávajícím překladem).
Je několik možností, jak to stáhonout
1) pomocí gitu:
git clone https://github.com/jk271/simutrans.git (https://github.com/jk271/simutrans.git)
přepnout se do větve texts_in_utf8
git checkout origin/texts_in_utf8
a pak použít jen soubory s nápovědou z adresáře simutrans/text/
2) Stáhnout celý repozitář z adresy
https://github.com/jk271/simutrans/tree/texts_in_utf8 (https://github.com/jk271/simutrans/tree/texts_in_utf8)
kliknutím na ikonku s nápisem zip (je vlevom, asi 10 cm odshora)
A pak si z toho vybrat jen texty s nápovědou.
3)
Stahovat to po jednom souboru z https://github.com/jk271/simutrans/tree/texts_in_utf8/simutrans/text (https://github.com/jk271/simutrans/tree/texts_in_utf8/simutrans/text)
4) Stáhnout to z opraveného linku. (Až to tam znova nahraju). Nahráno
Doporučuju použít postup 2.
Edit: