NetteTranslator (GettextTranslator & Nette Translation Panel)
- Aurielle
- Člen | 1281
Před tím, než se začne překládat, je potřeba přidat soubory:
$translator = Nette\Environment::getService('Nette\ITranslator');
$translator->addFile('%appDir%/models/lang', 'model'); // Složka %appDir%/models/lang, jazyk se vybere podle aktuálního a jednoznačný identifikátor tohoto souboru je 'model'.
$translator->addFile('%libsDir%/somelib/Translator', 'core');
// Dál se překládá normálně
dump(__('This is translation text'));
Přidané jazykové soubory se načítají všechny naráz při jakémkoliv požadavku na přístup k translatoru, v panelu se přepíná soubor, do něhož se budou stringy ukládat. Udělat per-layer překladač nebylo mým cílem a proto to ani můj fork nepodporuje.
- Lopo
- Člen | 277
prave som doportoval Translator do mojho BailIff-u …
oproti povodnemu som ho rozsiril:
- automaticke doplnenie plural pravidla podla jazyka pri vytvarani PO suboru
- viacere adresare/subory pre preklady uz v configu (minimalizuje potrebu addFile())
- ic
- Člen | 430
Nějak to teď nespolupracuje s novou verzí nette zkoušel jsem (různé
verze NetteTranslator-u, včetně té která mi krásně funguje na starším
nette version 2.0-dev 3f959be released on 2010-10-27
) nasadit na
verzi 2.0-dev 9f535f9 released on 2011-01-10
a celá aplikace se
zasekne… prohlížeč načítání po určité době zastaví, ale když
zkusím vypsat zdrojový kód tak ani ten nedostanu, jen nekonečné
načítání, takže chyba bude asi na straně serveru. Tohle se špatně
hledá, když nedostanu ani chybu. I pokus nasadit NetteTranslator na nějakou
‚demo‘ ukázku z nové verze nette bohužel končí stejně. Prekérní
situace.
- Nox
- Člen | 378
Aplikovals na to tools\Code-Migration\class_update.php? (https://phpfashion.com/…tory-v-nette)
- Patrik Votoček
- Člen | 2221
nemám v plánu upravovat tuhle verzi pro nové Nette… Protože do PoSobota chci vydat verzi novou
- ic
- Člen | 430
Nox napsal(a):
Ne Nette, ale aplikaci toho nástroje na NetteTranslator, nevim jestli využívá nějakou změněnou cestu…ale jestli jo tak by bylo třeba to na to aplikovat
Zatím jsem nezkoušel překlad, ale minimálně panel se mi zobrazuje
To už jsi dál než já XD … mě to aplikace funguje jen do té doby než zobrazím panel, pak to celé zatuhne.
- iguana007
- Člen | 970
Nepodařilo se pls někomu vyřešit to nekonečné načítání nového okna
po submitu překladu?
Panel mi normálně najede, zadám překlad/y odešlu to a otevře se mi nové
okno, které se donekonečna načítá a v původním okně se mi ve Firebugu
zobrazí chyba 500: InvalidStateException: Language file(s) must be
defined.
Zkoumal jsem zdrojáky a myslím, že soubory mám vytvořené správně – ostatně by mi to asi nenabídlo fráze k překladu.
Do BasePresenteru jsem si dal:
$translator = Nette\Environment::getService('Nette\ITranslator');
$translator->addFile('%appDir%/lang/', 'frontend');
a soubory ve složce lang se mi jmenují: en.frontend.mo a en.frontend.po
Nette používám verzi: 2.0-dev 3b038ac released on 2011–02–17
Díky za jakoukoli radu.
- Aurielle
- Člen | 1281
Není BasePresenter na tohle už pozdě? Protože volání téhle funkce se spouští v aplikaci jako jedno z prvních (hned při načtení DebugBaru) a tím pádem se to k BasePresenteru nedostane. Řešením je registrovat soubory v $app->onStartup;
- maikoo
- Člen | 21
zdravím, potřeboval bych pomoct, ..dnes jsem si
- stáhl 2alfa verzi nette
- nahrál do libs knihovnu z prvního příspěvku/github
- přidal do config.ini
variable.langDir = %appDir%/lang ; složka s překlady
variable.lang = cs_CZ ; výchozí jazyk
service.Nette-ITranslator.factory =
„NetteTranslator\\Gettext::getTranslator“
service.Nette-ITranslator.run = TRUE
- stáhl poedit a vygeneroval dva čisté soubory default.po/mo ..nahrál do ../lang
- refresh …
Cannot instantiate service ‚Nette\ITranslator‘, handler ‚NetteTranslator\Gettext::getTranslator‘ is not callable.
Jak to celé „rozchodím“?
Udělal jsem někde chybu?
děkuji za všechny připomínky
- maikoo
- Člen | 21
5.3 hele změná už není chyba)) .. udělal jsem následující zaměnil jsem pořadí v configu z
service.Nette-ITranslator.factory = "NetteTranslator\\Gettext::getTranslator"
service.Nette-ITranslator.run = TRUE
service.Nette-Application-Application.option.class = BootApplication
;service.Nette-Security-IAuthenticator = UsersModel
service.Nette-Loaders-RobotLoader.option.directory[] = %appDir%
service.Nette-Loaders-RobotLoader.option.directory[] = %libsDir%
service.Nette-Loaders-RobotLoader.run = TRUE
na
service.Nette-Application-Application.option.class = BootApplication
;service.Nette-Security-IAuthenticator = UsersModel
service.Nette-Loaders-RobotLoader.option.directory[] = %appDir%
service.Nette-Loaders-RobotLoader.option.directory[] = %libsDir%
service.Nette-Loaders-RobotLoader.run = TRUE
service.Nette-ITranslator.factory = "NetteTranslator\\Gettext::getTranslator"
service.Nette-ITranslator.run = TRUE
…chyba není ale jak to ted otestovat? ..
dal jsem do
- layoutu {_"This is translation text"}
- basePresenteru
protected function createTemplate()
{
$template = parent::createTemplate();
$template->setTranslator(\Nette\Environment::getService('Nette\ITranslator'));
return $template;
}
vypíše to .. This is translation text
- což je OK? .. jak to přeložim? .. v toolbaru nemám „translations“
- nebo něco mi ještě chybí?)
..díky
Editoval maikoo (11. 5. 2011 13:21)
- samuel
- Člen | 3
Ahoj.
Chtěl jsem to ozkoušet ale nejde to stáhnout … hází to 404 … mohl by mi to někdo poslat na email samuel.czeko@seznam.cz?
Díky
Edit Vrtak-CZ: co to kua bylo za ulet?
- Filip Procházka
- Moderator | 4668
Nikdo ti nic posílat na email nebude. A je od tebe velice sobecké takové žádosti vůbec vypouštět do světa. Nechtěl bys to na stříbrném podnose naservírovat třeba? Tohle mě fakt dokáže vytočit… Prej „pošlete mi to na mail, díky“ … Ještěže nejsem moderátor, za takové věci bych dával ban
Kdyby jsi si s tím dal jenom minimum práce, tak zjistíš že Patrik dělá na Nella Framework a ten panel jde najít zde: https://github.com/Nella/framework
Editoval HosipLan (25. 6. 2011 12:23)
- samuel
- Člen | 3
Omlouvám se. Jsem tu novej a ještě se tu úplně neorientuju .....
HosipLan napsal(a):
Nikdo ti nic posílat na email nebude. A je od tebe velice sobecké takové žádosti vůbec vypouštět do světa. Nechtěl bys to na stříbrném podnose naservírovat třeba? Tohle mě fakt dokáže vytočit… Prej „pošlete mi to na mail, díky“ … Ještěže nejsem moderátor, za takové věci bych dával ban
Kdyby jsi si s tím dal jenom minimum práce, tak zjistíš že Patrik dělá na Nella Framework a ten panel jde najít zde: https://github.com/Nella/framework
- MarekP
- Člen | 3
Zdravím, používáte někdo translator z nella fw? Chtěl jsem ho použít na stránkách ale nějak nefunguje translator panel. Překlad funguje, ale výrazy pro překlad, ze šablon a php skriptů se nenačtou do panelu. (tlačítko extract jsem použil).
Translator a translator panel jsem zaragistroval v configu:
translator:
class: Nella\Localization\Translator
translatorPanel:
class: Nella\Localization\Panel
arguments: ['@myContext']
run: true
V bootstrapu mám přidaný slovník:
$container->translator->addDictionary('front', APP_DIR);
a v basePresenteru mám zaregistrovaný překladač pro šablony:
$this->template->setTranslator($this->context->translator);
v šablonách překládám pomocí makra: {_'Nějaké slovo'}
Když už takové slovo mám přeložené ve slovníku tak se normálně
zobrazí jeho překlad, ale pokud je nové tak se zobrazí originál, ale
v translator panelu se nezobrazí, abych ho mohl přeložit. Nevíte někdo
jestli jsem na něco zapomněl nebo něco dělám špatně?
PS: zkusil jsem použít nella-sandbox, přidal jsem do toho slovník pro
složku app.
Do template jsem pak přidal nejaký výraz pro překlad. Ten se ale taky
nezobrazil v translator panelu, zobrazily se tam enom výrazy z formulářů
co jsou ve složce nella. Tak nevím jestli je chyba u mně nebo
někde jinde.
- janci
- Člen | 5
Takže akurát sa mi podarilo prísť na to, že kde je problém v Nella
Translatore (resp. v Paneli). Prečo nenájde žiadne slová. Problém je
v súbore Filters/Latte.php v metode process:
Momentálne sa parser vytvára ako nový objekt LatteParsera, ale keď to takto
vytvoríme, tak nám chýbajú v parseri Nette makra.
$parser = new \Nette\Latte\Parser;
$macros = LatteMacros::install($parser);
Preto správne vytvorenie by malo byť:
$latte = new \Nette\Latte\Engine;
$parser = $latte->parser;
$macros = LatteMacros::install($parser);
Tento fix som robil vo verzií Location z 1.jula 2011
- tany
- Člen | 31
Zkouším toto aplikovat na testovací projekt (== Psací sandbox na práci s nette), postupoval jsem podle návodu, do config.neon jsem přidal:
translator:
factory: NetteTranslator\Gettext::getTranslator
a do bootstrapu:
Nette\Environment::getService('translator')->addFile('%appDir%/lang', 'model');
NetteTranslator\Panel::register($container, $container->translator);
script fungoval do chvíle, než jsem v panelu přeložil první řetězec (soubory s překladem jsem nevytvářel), po přeložení (a vytvoření souborů) mi gettext hlasí tuto chybu:
Undefined offset: 1
výstup z laděnky:
File: ...\app\plugins\Gettext.php Line: 248
248:$this->metadata[$identifier][trim($tmp[0])] = count($tmp) > 2 ? ltrim(strstr($metadata, $pattern), $pattern) : $tmp[1];
Call stack:
Call stack ▼
...\app\plugins\Gettext.php:222 source ► NetteTranslator\Gettext-> parseMetadata (arguments ►)
...\app\plugins\Gettext.php:152 source ► NetteTranslator\Gettext-> parseFile (arguments ►)
...\app\plugins\Gettext.php:261 source ► NetteTranslator\Gettext-> loadDictonary ()
inner-code NetteTranslator\Gettext-> translate (arguments ►)
...\libs\Nette\common\Callback.php:98 source ► call_user_func_array (arguments ►)
...\libs\Nette\Templating\Template.php:253 source ► Nette\Callback-> invokeArgs (arguments ►)
...\temp\cache\_Nette.FileTemplate\_Admin.login.latte-f53cb41fcc95820410aea201cb992ab1.php:11 source ► Nette\Templating\Template-> __call (arguments ►)
...\temp\cache\_Nette.FileTemplate\_Admin.login.latte-f53cb41fcc95820410aea201cb992ab1.php:11 source ► Nette\Templating\FileTemplate-> translate (arguments ►)
...\libs\Nette\Latte\Macros\UIMacros.php:459 source ► _lb05e8e96558_content (arguments ►)
...\temp\cache\_Nette.FileTemplate\_templates._admin.latte-370755053bc3ea694e443d2e2d2e505c.php:22 source ► Nette\Latte\Macros\UIMacros:: callBlock (arguments ►)
...\libs\Nette\Utils\LimitedScope.php:70 source ► include (arguments ►)
...\libs\Nette\Templating\FileTemplate.php:120 source ► Nette\Utils\LimitedScope:: load (arguments ►)
...\temp\cache\_Nette.FileTemplate\_Admin.login.latte-f53cb41fcc95820410aea201cb992ab1.php:41 source ► Nette\Templating\FileTemplate-> render ()
...\libs\Nette\Utils\LimitedScope.php:70 source ► include (arguments ►)
...\libs\Nette\Templating\FileTemplate.php:120 source ► Nette\Utils\LimitedScope:: load (arguments ►)
...\libs\Nette\Application\Responses\TextResponse.php:57 source ► Nette\Templating\FileTemplate-> render ()
...\libs\Nette\Application\Application.php:144 source ► Nette\Application\Responses\TextResponse-> send (arguments ►)
...\app\bootstrap.php:55 source ► Nette\Application\Application-> run ()
...\www\index.php:15 source ► require (arguments ►)
Nevíte někdo kde jsem udělal chybu ? Díky za odpověď
(přeloženy jsou české znaky, žádné speciální)
- tany
- Člen | 31
@voda: dík za help, už to funguje. Akorát mám problém, že mi to při použití v šabloně
{_'preloz si me'}
automaticky používá 2nd formu. Pro jistotu zde dávám i zdroj .po souboru
# Gettext keys exported by GettextTranslator and Translation Panel
# Created: 2011-10-23 02:50:35
msgid ""
msgstr ""
"Project-Id-Version: st\n"
"POT-Creation-Date: 2011-10-23 02:49+0100\n"
"PO-Revision-Date: 2011-10-23 02:50+0200\n"
"Language-Team: 3m\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n>=2 && n<=4 ? 1 : 2;\n"
"X-Poedit-Language: Czech\n"
"X-Poedit-Country: CZECH REPUBLIC\n"
"X-Poedit-KeywordsList: _;gettext;gettext_noop\n"
msgid "Title"
msgstr[0] "Název"
msgstr[1] "Názvy"
msgstr[2] "Názvů"
Editoval tany (23. 10. 2011 2:56)
- awsickness
- Člen | 98
EDIT jsem idiot :D
stacilo odmaznout locale
nejak jsem prehledl co vlastne ma delat ten dir.
Editoval awsickness (26. 10. 2011 14:01)
- jeremy13
- Člen | 18
Tak mám podobný problém, jako měl tany.
Jakmile pomocí translation panelu něco přeložím, tak po refreshi se mi
vyhodí chyba:
Undefined offset: 1
Navíc, když se pokusím změnit Plural-Forms v .po souboru, tak se znova text v panelu tváří jako nepřeložen a po přeložení opět přepíše komplet .po soubor s nenastaveným Plural-Forms. používám aktuální stable verzi nette a rovněž mám stáhnutý aktuální NetteTranslator a už mě bohužel nenapadá, v čem by mohla být chyba. Jakoukoliv radu uvítám …
- awsickness
- Člen | 98
zdravim chtel bych se zeptat jak je to s podporou formularu. navesil jsem
translator na formular a ted nevim zda tento translator umi pridavat dane
stringy automaticky do po / mo souboru pripadne do panelu k prekladu nebo se
musi preklad definovat sam.
nyni je situace u me takova ze z formulare mi do metody translate chodi
vsechny message ale nikam se bohuzel neukladaji.
predem dik za pomoc / postrceni.
- green_user
- Člen | 12
chtěl bych se také zeptat na samotné vytvoření
souborů z PoEditu. Postupuju podle
http://charlie.cz/…t-extractor/ ale vrátí mi to prázdný
slovník, nebo jak to nazvat, respektive asi nenajde ty dané soubory :(
http://charlie.cz/…it_cesty.png ty cesty odkazují
o adresář výše, ale odkud? co tam znamená ta tečka u „Základní
cesta“?
Používám poslední verzi nette a souhlasí dále v tom odkazu http://charlie.cz/…t-extractor/ ten další postup nebo tam některé metody nebo třídy jsou upravy/nejsou?
díky moc za pomoc
- 2bfree
- Člen | 248
Po dlouhých bojích s Nella\Localization staženém přímo ze stránek Nella frameworku, kdy jsem prosil Patrika Votočka osobně do mailu a žádného výsledku jsem se po 14 denním boji nedohrabal jsem seznal, že je asi nepoužitelný v čistém Nette Frameworku.
Po dlouhých hodinách googlení jsem narazil na odkaz, obsahující „původní podobu translátoru“ předělanou pro novou verzi Nette. Myslím si, že by zde měl být odkaz, aby se ostatní netrápili zbytečně jako já:
https://github.com/…teTranslator
Potvrzuji funkčnost.
- Patrik Votoček
- Člen | 2221
green_user napsal(a):
chtěl bych se také zeptat na samotné vytvoření …
Ahoj to na co se ptáš moc nesouvisí s tímto tématem. To správné vlákno je tady: https://forum.nette.org/…extractor-v2
2bfree napsal(a):
Po dlouhých bojích s Nella\Localization staženém přímo ze stránek Nella frameworku, kdy jsem prosil Patrika Votočka osobně do mailu a žádného výsledku jsem se po 14 denním boji nedohrabal jsem seznal, že je asi nepoužitelný v čistém Nette Frameworku.
Ahoj sorry ale fakt na e-maily s prosbou o pomoc neodpovídám (Protože to bych pak nedělal nic jiného). Proto se máš ptát tady nebo tady: http://forum.nella-project.org/.
Důvod proč tady nereaguju a nepíšu vám jak řešit ten či onen prolém je ten že už nějaký pátek používám novou zcela přepracovanou verzi (která by ale měla zachovat kompatabilní API). Nicméně tato nová verze ještě není úplně 100% vychytaná a tak na Gihubu / v balíku na stažení není ale měla by se tam objevit už brzo.
- 2bfree
- Člen | 248
@Patrik Votoček Nebyl jsem si jistý tím, zda-li tvé Nella\Localization je již hotové nebo nikoliv, jelikož ne a ne fungovat.
Chápu že toho máš hodně a že tě za to nikdo neplatí, ale napsat že to momentálně není použitelné si mohl ;) Nicméně na GitHubu je: https://github.com/…Localization proto jsem se s ní trápil.
- rixi
- Člen | 109
2bfree wrote:
https://github.com/…teTranslator
Potvrzuji funkčnost.
Taktiez pouzivam tuto funkcnu verziu k uplnej spokojnosti. Dnes som sa
s tym bafkal to spojazdnit po vyraznejsich
zmenach na verzii 74b3870 released on 2011-12-14
. Funguje, bolo
treba len mensie upravy v GetText classu v riadku 100:
$container->parameters
a 583: @return
(prepis pre
PHP5.2 bez prefixov).
Editoval rixi (15. 12. 2011 10:06)
- Tomáš Votruba
- Moderator | 1114
Pokud byste měl někdo neutálé problémy s implementací, můžete využít možnost vhledu do funkčního řešení – http://nette.schmutzka.eu/
- rixi
- Člen | 109
Schmutzka wrote:
Pokud byste měl někdo neutálé problémy s implementací, můžete využít možnost vhledu do funkčního řešení – http://nette.schmutzka.eu/
Pekne, tiez si take robim :) Najvacsie ovocie Nette prinasa, pokial si kazdy sam pripravi svoje pieskovisko, ktore moze bleskovo nasadit na nove projekty.
- Tomáš Votruba
- Moderator | 1114
Pro další jsem sepsal návod do Kuchařky pro přidání
Translatoru do nového Nette (z 2012–02–03).
Teď to zvládnete za 15 minut :)
Editoval Schmutzka (11. 2. 2012 0:02)
- Jan Jakeš
- Člen | 177
Schmutzka napsal(a):
Pro další jsem sepsal návod do Kuchařky pro přidání Translatoru do nového Nette (z 2012–02–03).
Teď to zvládnete za 15 minut :)
Proč jsi to neudělal na Githubu jako fork? Takhle se nemůžu podívat, co se změnilo, nelze mergovat vývoj obou verzí, atd.