Lepší podpora vícejazyčnosti
- jiriknesl
- Člen | 56
Doporučuju zaintegrovat do Nette https://forum.nette.org/…extractor-v2 (v ostatních frameworcích si to nemůžu vynachválit).
- Patrik Votoček
- Člen | 2221
+1
Ale pokud tam bude tohle tak by to chtělo i https://componette.org/search/?…
Editoval vrtak-cz (29. 10. 2009 16:36)
- HonzaMac
- Člen | 40
Jen tak mimochodem… také jsem řešil vícejazyčnost.
Otravovalo mě, že bych musel hledat všechny texty a překládat je. Nakonec
mě napadlo, jak by se daly extrahovat poloautomaticky a s minimální prací.
(možná objevuji kolo, jsem začátečník s Nette)
Všechny texty jsem označil:
{_'Toto chci přeložit'}
A udělal jsem si vlastní Translator, který když nezná tento přeložitelný text, tak je vloží do DB s aktuální zvoleným jazykem.
CREATE TABLE `preklad` (
`original` varchar(255) NOT NULL COMMENT 'originální text',
`lang` char(3) NOT NULL default 'cs' COMMENT 'jazyk překladu',
`preklad` varchar(255) default NULL COMMENT 'překlad do jazyku',
UNIQUE KEY `original` (`original`,`lang`),
KEY `lang` (`lang`)
);
Pak si jednoduše v DB vypíšu ty, které jsou bez překladu a přeložím.
Jednoduché, účinné.
Malý ,,problém'' je v tom, že abych získal texty k překladu, musím si
proklikat celý web v daném jazyce(ale i to by šlo usnadnit :-)).
- Patrik Votoček
- Člen | 2221
Hlavní a největší problém tvého řešení bych vyděl u chybovích hlášek. Protože vyvolání některé chyby je občas obtížné.
- Jakub Šulák
- Člen | 222
Tohle řešení má ještě jedno úskalí – v okamžiku, kdy uděláš nějakou změnu (smažeš například chybovou hlášku), nemáš možnost ji automaticky smazat z překladového slovníku.
- HonzaMac
- Člen | 40
Samozřejmě že nikomu tento návrh nebrání v klasickém ručním přidání překladů, jak se to dělá doposud. Hlavně jde o značné usnadnění při prvním pokusu o překlad. Vložení takového množství textu je potěšující.
Zatím jsem se akorát setkal s problém při snaze o překlad VisualPaginatoru. Ten v jeho šabloně značně protestoval. Zatím jsem nepřišel na to proč.
- Jakub Šulák
- Člen | 222
jestli mohu doporučit, pohrej si s gettextem – toto řešení jsem taky kdysi používal a není to ono. navíc jak řešíš plurály? 1 jablko, 2 jablka, 5 jablek?
- ic
- Člen | 430
HonzaMac napsal(a):
CREATE TABLE `preklad` ( `original` varchar(255) NOT NULL COMMENT 'originální text', `lang` char(3) NOT NULL default 'cs' COMMENT 'jazyk překladu', `preklad` varchar(255) default NULL COMMENT 'překlad do jazyku', UNIQUE KEY `original` (`original`,`lang`), KEY `lang` (`lang`) );
Takováhle struktura nutí k ukládání velkého množství duplicitních
dat v případě více jazyků do kterých bude aplikace přeložena.
Nebyla by lepší tabulka kde by byly sloupce: original – cs – en – de
… ? Vždyť i přidání sloupce / smazání sloupce se dá dobře
zautomatizovat, a dá se předpokládat že všechny klíče budou přeloženy
do všech jazyků.
- hurvajs
- Člen | 86
At mi nekdo ukaze pripad, kdy nefunguje gettext dobre. Pouzivam ho cca 5 let a nemel jsem nikdy zadny problem. Ani se samotnym gettextem ani s pluraly. Asi to mate jen spatne nastavene. Nehlede na to, ze gettext je na urovni Apache, takze je i mnonasobne rychlejsi nez jakykoliv jiny „translator“, ale to tu asi nikoho nezajima. Radeji se bude znovu vynalezat kolo… :-(
Editoval hurvajs (6. 11. 2009 10:50)
- jasir
- Člen | 746
hurvajs napsal(a):
At mi nekdo ukaze pripad, kdy nefunguje gettext dobre. Pouzivam ho cca 5 let a nemel jsem nikdy zadny problem. Ani se samotnym gettextem ani s pluraly. Asi to mate jen spatne nastavene. Nehlede na to, ze gettext je na urovni Apache, takze je i mnonasobne rychlejsi nez jakykoliv jiny „translator“, ale to tu asi nikoho nezajima. Radeji se bude znovu vynalezat kolo… :-(
Také si myslím že gettext je v pohodě. Ale jedna věc by mě zajímala, jestli náhodou neznáte odpověď – pokud se změní překladové soubory gettextu, je nutné restartovat Apache. Dá se to udělat jinak?
- hurvajs
- Člen | 86
jasir napsal(a):
Také si myslím že gettext je v pohodě. Ale jedna věc by mě zajímala, jestli náhodou neznáte odpověď – pokud se změní překladové soubory gettextu, je nutné restartovat Apache. Dá se to udělat jinak?
Nad tim jsem kdysi premyslel. Reseni je naprosto trivialni. Staci podstrcit Apachi jiny soubor a Apache se nemusi restartovat. Apache nacte novy MO, a stavajici thredy (s puvodnim MO) casem uhniji. Pouyivam to na svem CMS, kde mam udelany modul pro zpravu gettextu primo v CMS. Vlastni klice mam v DB, jednoduse opravuji preklad. Pri zmene si pregenuji z DB novy MO a zmena prekladu je videt okamzite.
- HonzaMac
- Člen | 40
Já jenom k mému řešení … všechny způsoby jsou lepší jak ten
můj.
Já jenom to sem napsal, že to je možnost. Pokud děláte jednoduchou webovou
aplikaci, tak není potřeba nasazovat obrovské řešení ve formě GetTextu.
A hlavně rychlost implementace byla pro mě, Nette začátečníka, rychlá.
Rychlejší jak ostatní návody na multijazyčnost co jsem zde našel.