Lepší podpora vícejazyčnosti

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
jiriknesl
Člen | 56
+
0
-

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

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

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

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

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

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

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?

HonzaMac
Člen | 40
+
0
-

Toto neřeším :-) je to natolik triviální řešení, že to neřeší :-)
V mém řešení šlo o přeložení statických textů, bez plurálů.

ic
Člen | 430
+
0
-

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

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

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?

Jakub Šulák
Člen | 222
+
0
-

to hurvajs:
Já nemluvil o gettextu ale o řešení, které psal HonzaMac

hurvajs
Člen | 86
+
0
-

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.

hurvajs
Člen | 86
+
0
-

Jakub Šulák napsal(a):

to hurvajs:
Já nemluvil o gettextu ale o řešení, které psal HonzaMac

Jasne, tak jsem to i myslel. Pouzivat neco jineho nez gettext, je podle me hloupost.

HonzaMac
Člen | 40
+
0
-

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.