News:

Simutrans Sites
Know our official sites. Find tools and resources for Simutrans.

Návod - test češtiny a utf8 v simutrans - jak na to

Started by jk271, February 13, 2012, 09:15:34 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

jk271

Abstrakt
Kó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.





úvod
Kó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
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 utf8

Stá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é.





introduction
Encoding 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 :(

Václav

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.

Chybami se člověk učí - ale někteří lidé jsou nepoučitelní

jk271

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.

VS

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.

My projects... Tools for messing with Simutrans graphics. Graphic archive - templates and some other stuff for painters. Development logs for most recent information on what is going on. And of course pak128!

jk271

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é.

VS

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é...

My projects... Tools for messing with Simutrans graphics. Graphic archive - templates and some other stuff for painters. Development logs for most recent information on what is going on. And of course pak128!

jk271

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.

Václav

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é.

Chybami se člověk učí - ale někteří lidé jsou nepoučitelní

jk271

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.

jk271

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

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"


jk271

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

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
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

4) Stáhnout to z opraveného linku. (Až to tam znova nahraju). Nahráno


Doporučuju použít postup 2.

Edit:

meme

Díky, konečně  nativní znaková sada pro můj OS ;) 


Edit: Věci v toolbaru jsou v rozsypaném čaji a nejsou přeložené popisky u vozů :(


jk271

Kdyby bylo na mě, tak je český překlad v utf8 rovnou z translatoru
Znakové sady latin1, latin2 apod. ve mě vyvolávají představu 90. let minulého století. :)

Rozsypaný čaj by snad už mohl být opraven. Poslední úpravu jsem na překladech dělal ještě někdy okolo 20:00.
Chyběl mi tam znak § na začátku souboru. To pak simutrans myslí, že to není utf8.

Každopádně dík za hlášení chyb. Čím víc nás bude hrát a mít popisky v utf8, tím dřív se odstraní případné chyby.

Kdyby byla poptávka po popiskách ještě k nějakému paku, můžu je taky převést do utf8. Ale tak nejvýš jeden pak. Chtěl bych se věnovat radši tvorbě nápovědy :)

Nejspíš to bude pak128.cz

meme


Díky - Já upřímně nesnáším třeba titulky v CP1250 (Handbrake je neumí ) - Naštěstí na Unix-like systémech máme   iconv -f "muzeální sada z roku 123" -t UTF-8 (takže si myslím, že by na převod celých paků stačilo  iconv -f "muzeální sada z roku 123" -t UTF-8 <soubor.txt >nový_soubor.txt ;)
Nevím, proč se vůbec používá v západním světě jakákoli sada kromě UTF-8 -- Nevidím důvod, proč ji nepoužívat :)
--------
Edit: Funguje, díky!  :police: