Portál AbcLinuxu, 19. dubna 2024 10:47


Dotaz: Více instancí gettextu

31.7.2018 15:18 BoneFlute | skóre: 3
Více instancí gettextu
Přečteno: 2515×
Odpovědět | Admin
Zdravím.

Máme klasický gettext.

Existuje nějaký způsob, jak mět dvě instance pro dva různé jazyky? Tedy abych mohl v jednom obsahu vypsat anglicky i česky zároveň? Samozřejmě bych chtěl ty jazyky zvolit.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

1.8.2018 08:15 debian
Rozbalit Rozbalit vše Re: Více instancí gettextu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pouzi funkciu/proceduru dcgettext().
2.11.2019 21:49 BoneFlute | skóre: 3
Rozbalit Rozbalit vše Re: Více instancí gettextu
Možná to špatně chápu, ale to je hack, ne? To není možnost, jak zvolit jazyk toho překladu. Nebo mi něco uniká?
4.11.2019 01:18 debian+
Rozbalit Rozbalit vše Re: Více instancí gettextu
Co chces? Resp. aky riesis problem? V prvotnom dotaze si napisal ako to chces riesit, ale neopisal si aky mas problem a okolite prostredie.
Tedy abych mohl v jednom obsahu vypsat anglicky i česky zároveň?
Jeden obsah coho? programu? hlasky v programe (v label)? Alebo co.

gettex je robeny, ze program ma jeden jazyk (nastavuje sa to cez premennu LANG alebo cez C lokalizacnu funkciu.

Ak chces mat jeden program, ktory jedno okno bude mat v napr. anglctine a druhe v slovencine (tj. jeden C program moze vytvarat okient konko chce), tak mas ten prispevok. Citak v anglictine, je to tam vysvetlene.

Alebo spustaj 2 aplikacia, kde kazda bude v jednom okne (s jednym oknom), a Linuxove alebo GCC pridane varianty a la kill umoznuju aj preposlat data.
4.11.2019 13:08 BoneFlute | skóre: 3
Rozbalit Rozbalit vše Re: Více instancí gettextu
Mám jedno okno, a v něm jsou dva labely. Jeden je v primárním jazyce a druhej v sekundárním. Přičemž chci programově ovlivňovat které jazyky tam jsou. Takže mám slovníky pro češtinu, slovenštinu, angličtinu, a rád bych programově nastavil primárnímu češtinu, a sekundárnímu slovenštinu.

setlocale() nastavuje jeden jazyk pro celou aplikaci, ne?

A ta funkce dcgettext() přidává k těm řetězcům jakože doménu, kontext. Což bych samozřejmě mohl znásilnit tak, že bych udělal jako doménu jazyk, ale to mi přijde ošklivé (budu mět v českém slovníku české, slovenské a anglické překlady).

A nebo jsem tu funkci nepochopil?

4.11.2019 15:26 debian+
Rozbalit Rozbalit vše Re: Více instancí gettextu
dcgettext() zle si pochopil. Domenove meno je jednoznacny identifikator jazyka, ktory pouziva kniznica. Zrejme asi napr. sk_SK. To ze mi sa na to divame, ze je to subor,, je nas pohlad. On si to musi z niekadial nacita. Nie je podstatne z kadial, hlavne ze tie data dostatne, zoznam co ma na co nahradzat a ich ma. dcgettext() sluzi na striktne urcenie, kt. jazyk ma nacitat (ignoruje globalne nastavenie, ze aky je jazyk).

setlocale aj nastavuje v tom okamihu pre celu aplikaciu (nastavanie cisiel, format datumu atd). Musel by si prepinat.

Alebo si to naprogramuj sam. Zo suboru nacitas definicie pre kazdy jazyk a v programe volas ktoru potrebujes. Nie je to tazke. Mozes tak urobit, pokial len pouzivas label/string preklad (nie napr. datum format, kalendar, atd.).
4.11.2019 17:12 BoneFlute | skóre: 3
Rozbalit Rozbalit vše Re: Více instancí gettextu
OK, zkusím si s tím pohrát, díky.

Já vím, že si to můžu naprogramovat. Ale to já právě nechci. Už takhle trpím na NIH :-)
4.11.2019 19:17 debian+
Rozbalit Rozbalit vše Re: Více instancí gettextu
NIH?
4.11.2019 21:07 BoneFlute | skóre: 3
Rozbalit Rozbalit vše Re: Více instancí gettextu
https://en.wikipedia.org/wiki/Not_invented_here
4.11.2019 13:10 BoneFlute | skóre: 3
Rozbalit Rozbalit vše Re: Více instancí gettextu
Z té wikiny, citace:
C standard localization functions are criticized because ... As a result, it is very difficult to implement programs that use more than one locale.
To bude asi můj problém.
4.11.2019 18:38 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: Více instancí gettextu
Pokud chceš víc než jen hledat v katalogu zpráv jako ve slovníku, například potřebuješ naformátovat hlášku s desetinným číslem, budeš stejně potřebovat měnit locale. POSIX v roce 2008 přidal uselocale(3) pro nastavení locale pro každé vlákno programu zvlášť. Ale jestli všechno máš v jednom vlákně, tak prostě volej setlocale(3).
29.7.2020 14:49 BoneFlute | skóre: 3
Rozbalit Rozbalit vše Re: Více instancí gettextu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Opustil jsem gettext a začal používat https://www.projectfluent.org/. Vypadá to, že krom mého problému to řeší ještě mraky dalších.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.