NetteTranslator (GettextTranslator & Nette Translation Panel)
- kuty.cz
- Člen | 33
Jedna otázka, jakým způsobem vytváříte překlady pro formuláře? To co mam v šabloně se mi krásně vytáhne do translation panel, ale existuje trik jak tam dostat i formulářový labely?
Samožejmě si můžu labely jednou ručně vypsat do šablony, ale formuláře se mění a je to takový řešení „přes ruku“.
- castamir
- Člen | 629
Musíš tam vložit jako parametr instanci translatoru. Translator získáš z DIc do presenteru / komponenty pomocí metody inject* nebo konstruktorem
$form->setTranslator($translator);
kompletní příklad
/** var \GettextTranslator\Gettext */
public $translator;
public final function injectTranslator(\GettextTranslator\Gettext $translator)
{
$this->translator = $translator;
}
public function createComponentFoo()
{
$form = new Form;
$form->setTranslator($this->translator);
// ...
}
- kuty.cz
- Člen | 33
Jak dat formulari translator vim a nastaveny ho mam (kdyz uz nejaky text prelozeny je, tak se ve formulari spravne prelozi), jen se mi ty fraze nedostanou do panelu, abych je z nej prelozil. Netusil jsem, ze by mel umet vytahnout fraze i z formulare, takze jdu hledat problem, proc to neleze do panelu.
- JL
- Člen | 24
Ahoj,
používal jsem původní verzi translatoru a před časem jsem přešel na verzi 2 (nyní 2.0.2).
V ní se mi líbí že lze snadno oddělit moduly. Teď ale potřebuji toto rozdělení v jednom projektu odstranit a mám s tím trochu problém.
Smazal jsem v configu umístění soborů pro admin module a smazal obsah složky lang.
Na frontendu vše funguje, ale v backendu to je poněkud zvláštní. Některé překlady se vůbec nenaštou do translation panelu (může být ale s tím nesouvisející problém), ale hlavně překlady které patří do admin modulu nejdou v translation panelu přeložit. Nejde jej v panelu vybrat kliknutím.
Nesetkali jse se s tím někdo, prosím? Zkoušel jsem v configu dát místo front: → universal: a pak nejdou překlady ani na frontendu. Možná není možné překládat texty jiného modulu pokud nemá svůj vlastní language soubor?
Druhá otázka je – lze ještě jiným způsobem oddělit některé překlady do jiného souboru, než modulem?
Díky moc.
Editoval JL (11. 5. 2013 2:10)
- SontoEremo
- Člen | 341
Zdravím…
Prosím mohol by mi niekto pomocť s prekladom v Šablóne konkrétne s
{control $form errors} ?
skúšal som už všeličo ale stále to skončilo s chybou
Moje pokusi:
{_("control $form errors")} <-- Chyba
{control _("$form errors")} <-- Chyba
_("{control $form errors}") <-- Chyba
{control $form _("errors")} <-- Chyba
Potrebujem preložiť konrétne toto
$userRepository = $this->users;
$Rform = new Form;
$Rform->setTranslator($this->translator);
$Rform->addText('email', $this->translator->translate('Email adress'))
->setAttribute('class', 'm-wrap span12')
->setRequired($this->translator->translate('Please enter your email address'))
->addRule(Form::EMAIL, $this->translator->translate('The entered email is not valid! Check it please.'))
->addRule(function($input) use($userRepository )
{
return !$userRepository->emailExists($input->value);
TOTO-->> }, $this->translator->translate('The specified email address is already registered! Please choose another one.'));
Mám Jazyky SK CS a EN všetko mi preloži perfektne okrem
$this->translator->translate('The specified email address is already registered! Please choose another one.')
Toto jedno je stále v SK či už mám nastavený CS alebo EN jazyk
ďakujem vopred.
- dada-amater
- Bronze Partner | 52
@SontoEremo: Pokud nastavis formulari translator
<?php
$Rform->setTranslator($this->translator);
?>
Automaticky se pak prekladaji vsechny popisky i hodnoty v inputech, takze se nemusi pouzivat (jinak se to preklada 2x)
<?php
$this->translator->translate('Email adress'));
?>
Veta ‚The specified email address is already registered! Please choose another one.‘ se ti neprelozi proto, protoze $this->translator neni translator, $this uvnitr anonymni funkce odkazuje na neco jineho. Zalezi na verzi php ktere pouzivas. Nicmene to resit nemusis, protoze jak jsem rikal, metody tranlate() za tebe uz zavola formular.
Editoval dada-amater (20. 5. 2013 10:03)
- SontoEremo
- Člen | 341
@dada-amater:
Vďaka pomohlo :)
Ešte sa ta chcem spýtať…
Preložil som komplet stránku do EN premazal temp zmazal preklady (zložku lang
ponechal :) )
Aktualizoval ale stále sa mi tam ukazujú veci ešte v SK jazyku napr. zadajte
váš email ale 3× som všetko prešiel popremazal atď… no nič nepomáha.
Nevieš náhodou kde môže byť chyba? ďakujem za odpoveď.
Tie sk veci mám tym na mysli, že sa mi to ukazuje v paneli.
- HappyFace
- Člen | 162
Ahojte,
nastavil som si tento doplnok do nette podla navodu, vsetko pekne nabehne, v panely sa zobrazi oznamenie ze mam neprelozene nejake texty, takze si otvorim polozku ale tlacitko SAVE mam sede a ked kliknem na nejaky text aby som ho vybral, tak sami v JS konzoly objavi hlasenie
„Uncaught TypeError: Cannot read property ‚This is translation text‘ of undefined“
pouzivam NETTE 2.0.10
za pomoc vopred dakujem
- SinyaWeo
- Člen | 6
Zdravím,
nikde se mi nedaří najít jak překládat throw zprávy, například
throw new Security\AuthenticationException(_('THE_USERNAME_IS_INCORRECT.'), self::IDENTITY_NOT_FOUND);
V DebugBaru se mi tento řetězec vůbec nezobrazí, zatímco všechny ostatní překlady fungují.
Prosím o nakopnutí správným směrem.
Díky Milan.
- h4kuna
- Backer | 740
SinyaWeo napsal(a):
throw new Security\AuthenticationException(_('THE_USERNAME_IS_INCORRECT.'), self::IDENTITY_NOT_FOUND);
Ač doplněk má v názvu gettext tak pro překlad gettext nepoužívá, proto ti takto překlad nebude fungovat, to by jsi musel použít jiný překladač. Proto překlady musíš obalit viz:
kudlajz napsal(a):
try { .. } catch (Security\AuthenticationException $e) { $this->flashMessage($this->template->translate('TVUJ_TEXT')); }
- dada-amater
- Bronze Partner | 52
Nebo si odinstaluj gettext a vytvor si alias _("") a mas to bez prace.
- SinyaWeo
- Člen | 6
Zdravím,
já myslel, že musím překládat když házím a ono až při chytání :-)
Problém je možná taky v tom, že zpráva se nezobrazuje jako flashMessage, ale takhle:
public function signInFormSucceeded($form)
{
$values = $form->getValues();
if ($values->remember) {
$this->getUser()->setExpiration('+ 14 days', FALSE);
} else {
$this->getUser()->setExpiration('+ 20 minutes', TRUE);
}
try {
$this->getUser()->login($values->username, $values->password);
} catch (Nette\Security\AuthenticationException $e) {
$form->addError($e->getMessage());
return;
}
$this->redirect('Homepage:');
}
Zprávy vznikají takhle:
public function authenticate(array $credentials)
{
list($username, $password) = $credentials;
$row = $this->users->findUserByName($username);
if (!$row) {
throw new Security\AuthenticationException('THE_USERNAME_IS_INCORRECT.', self::IDENTITY_NOT_FOUND);
}
if ($row->password !== $this->calculateHash($password, $row->password)) {
throw new Security\AuthenticationException('THE_PASSWORD_IS_INCORRECT.', self::INVALID_CREDENTIAL);
}
unset($row->password);
return new Security\Identity($row->id, NULL, $row->toArray());
}
Je to quickstartu – Úkolníček.
- jiri.pudil
- Nette Blogger | 1029
Mělo by se to přeložit automaticky, pokud má formulář nastavený translator (typicky v továrničce):
$form->setTranslator($this->translator);
EDIT: $ŧhis → $this
Editoval jiri.pudil (19. 6. 2013 10:59)
- SinyaWeo
- Člen | 6
To je právě to, že se to nepřeloží. Formulář má přitom translator nastavený (všechny ostatní texty se mi přeloží/zobrazí v DebugBaru k přeložení):
protected function createComponentSignInForm()
{
$form = new UI\Form;
$form->setTranslator($this->translator);
$form->addText('username', 'USER_NAME:')
->setRequired('PLEASE_ENTER_YOUR_USERNAME.');
$form->addPassword('password', 'PASSWORD:')
->setRequired('PLEASE_ENTER_YOUR_PASSWORD.');
$form->addCheckbox('remember', 'KEEP_ME_SIGNED_IN');
$form->addSubmit('send', 'SIGN_IN');
// call method signInFormSucceeded() on success
$form->onSuccess[] = $this->signInFormSucceeded;
return $form;
}
- h4kuna
- Backer | 740
To jsem taky dělal jednoho krásného dne zjistíš že se v těch textech nevyznáš a horko těžko budeš generovat soubor pro překlad aby jsi ho poslal a nechal někde přeložit (fr, it, ge). Pokud budeš chtít upravit originální text aniž by jsi ovlivnil ostatní slovníky tak právě pak měníš výchozí slovník a jednou za čas udělat revizi slovníků. Lepší je rovnou to upravovat ve všech slovnících. Klient si takto upravuje texty v české verzi a jednou za čas synchronizuju s ostatními slovníky.
- dada-amater
- Bronze Partner | 52
Mam jeden problem: drive jsem pouzival klasicky gettext, cili kdyz jsem chtel vygenerovat soubory pro preklad, bylo to jednoduche a mel jsem to kompletni. Tady s tim mam problem. Za prve nevim jak vygenerovat vsechny texty, aniz bych prochazel cely web a ukladal je. Navic je nutne to delat pro kazdy jazyk, aby se to tam doplnilo. Mozna jsem jen neprisel na spravne workflow. Podle me by bylo zadouci:
- pokud se nejaky text nenajde ve slovniku, automaticky ho pridat. Nejen ho zobrazit v debugbar komponente, ale rovnou zapsat i do .po souboru.
- tyto zmeny mergovat do vsech jazykovych mutaci, aby se to nemuselo prochazet vsude
- v debug baru zobrazit uplne vsechny texty co nejsou v .po souboru prelozene
- kdyz zakladam novy jazyk pro preklad, melo by se to automaticky naplnit neprelozenyma hlaskama. Navic by bylo dobre, kdyby se pro standardni jazyky automaticky generovali hlavicky pro plural, se to pak nemusi menit rucne ;-).
Mozna je spousta techto vlastnost implementovana, jen jsem na to neprisel. Tak mi prosim poradte. Moc dekuju.
- iguana007
- Člen | 970
dada-amater napsal(a):
… nevim jak vygenerovat vsechny texty, aniz bych prochazel cely web a ukladal je …
Já na to používám GettextExtractor (https://github.com/…xt-extractor) … jednoduše si napoprvé vygeneruju překlady do jednoho souboru a updaty pak řeším via .pot v Poeditu nebo přes debug bar (pokud tam nový překlad naskočí).
- burisk
- Člen | 6
Čaute, pred nejakým tým mesiacom som sa hral s GettextTranslator, a parádne to fungovalo, ale ako som si stiahol (dnes) najnovšie Nette a do toho GettextTranslator (ktorý som si všimol, že sa mierne zmenil) tak to na mňa vybaflo túto chybu: OBRÁZOK
Postupoval som presne podľa postupu, a som to prezeral z každej strany, ale ani za nič neviem prísť veci na chybu. (používam moduly). Neviete čo s tým je? :) Ďakujem zatiaľ.
- burisk
- Člen | 6
Šaman napsal(a):
Předpokládám, že se změnil namespace pro Extension. Teď by měla být tady
Díky, už to funguje :)
Takže stačilo zmeniť iba
class Extension extends \Nette\DI\CompilerExtension { // ...
na
class Extension extends \Nette\Config\CompilerExtension { // ...
Editoval burisk (9. 7. 2013 11:14)
- iguana007
- Člen | 970
Ahoj,
dneska jsem si stáhnul poslední verzi z Githubu a překlady mi fungují.
Problém mám akorát s formuláři, které se mi nepřekládájí a o panelu
ani nemluvě (ten mi sice jde otevřít, ale nejsem schopen žádné akce
v něm – tj. ať klikám, jak chci, tak nemůžu nic přeložit).
Formulář mám jako samostatnou třídu a kód u mě vypadá takto:
production < common:
services:
translator:
create: NetteTranslator\Gettext::getTranslator
setup:
- addFile(%appDir%/FrontModule/lang/, frontend)
- NetteTranslator\Panel::register
//bootstrap.php
$configurator->onCompile[] = function ($configurator, $compiler) {
$compiler->addExtension('gettextTranslator', new \GettextTranslator\DI\Extension);
};
//BasePresenter
public $translator;
public final function injectTranslator(\NetteTranslator\Gettext $translator)
{
$this->translator = $translator;
}
public function createTemplate($class = NULL)
{
$template = parent::createTemplate($class);
if (!isset($this->language)) {
$this->language = $this->translator->getLang();
} else {
$this->translator->setLang($this->language);
}
$template->setTranslator($this->translator);
return $template;
}
//Formular
class SomeForm extends Nette\Application\UI\Form
{
public function __construct($parent, $name)
{
parent::__construct($parent, $name);
$this->setTranslator($this->presenter->translator);
$this->addPassword('heslo', 'Password', NULL, 255);
//...atd...
Problém je v tom, že když si zkontroluju překladové slovníky v POEditu, tak slovo Password tam je přeložené, ale v rámci toho formu se mi prostě nepřeloží (ostatní elementy na stránce/šabloně přeložené jsou) a už nevím, co dělám špatně …
- zool
- Člen | 144
Ahoj stáhl jsem si poslední verzi tohoto translátoru vše funguje bez
problému, ale problém nastane když to chci dát na produkční verzi
vypíše to chybu Call to a member function addPanel() on a non-object
public static function register(Nette\Application\Application $application, Gettext $translator, Nette\Http\Session $session, Nette\Http\Request $httpRequest, $layout, $height)
{
Nette\Diagnostics\Debugger::$bar->addPanel(new static($application, $translator, $session, $httpRequest, $layout, $height));
}
Ono to funguje když mám spuštěný panel, ale když jej vypnu, tak to
napíše tuto chybu, mám nette 2.1
Děkuji
- saimons
- Člen | 293
Zdravim, mam problem s modulem. Vse se zda, ze funguje, ale tlacitko „Save“ je zasedle a nelze ho pouzit. Pokud chci oznacit naky nacteny retezec pro preklad v JS mi nastane chyba: this.fillIn(this.strings[this.currentFile][string]); this.strings[this.currentFile][string] is undefined. Zkousel jsem vsemozne debugovat, ale vse se zda v poradku. Pouzivam Nette 2.0.11 a doplnek z Githubu. Nevimte nekdo kde muze byt chyba?
EDIT: Jak jsem dopsal, tak jsem objevil v cem je problem. Ve configu jsem si nadefinoval pouze jeden file a to lyout, ale byl jsem najety v modulu intro, takze se to snazilo najit definici pro intro v this.strings, ale nenaslo, protoze tato pole neexistovalo. Mohlo by to vyhodit nakou hlasku :)
Editoval saimons (23. 7. 2013 18:03)
- masterr
- Začátečník | 141
Postupoval jsem podle "":https://componette.org/search/?…
Všechno v pohodě až do kroku kdy přidám překlad do šablony. Když
přidám překlad a přeložím ho v okne translations, následně refreshnu
stránku tak to hodí následující error:
Notice
Undefined index: front
File: …/libs/GettextTranslator/Gettext.php Line: 295
294: if (!empty($message) && isset($this->dictionary[$message])) {
295: ** $tmp = preg_replace('/([a-z]+)/', '$$1', "n=$form;" . $this->metadata[$files[0]]['Plural-Forms']);**
296: eval($tmp);
Proč? Překlady se vytvořili v té složce…
- iguana007
- Člen | 970
masterr napsal(a):
Postupoval jsem podle "":https://componette.org/search/?…
Všechno v pohodě až do kroku kdy přidám překlad do šablony. Když přidám překlad a přeložím ho v okne translations, následně refreshnu stránku tak to hodí následující error:Notice
Undefined index: front
File: …/libs/GettextTranslator/Gettext.php Line: 295
294: if (!empty($message) && isset($this->dictionary[$message])) { 295: ** $tmp = preg_replace('/([a-z]+)/', '$$1', "n=$form;" . $this->metadata[$files[0]]['Plural-Forms']);** 296: eval($tmp);
Proč? Překlady se vytvořili v té složce…
Vypadá to, že v .PO souboru nemáš definované pluraly
"Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4 ? 1 : 2));\n"
Editoval iguana007 (25. 7. 2013 19:07)
- masterr
- Začátečník | 141
mám:
# Gettext keys exported by GettextTranslator and Translation Panel
# Created: 2013-07-25 12:48:53
msgid ""
msgstr ""
"PO-Revision-Date: 2013-07-25 12:48+0200\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"
msgid "Odhlásit se"
msgstr "Logout"
Edit:
Co tam dělá tohle na začátku?
msgid ""
msgstr ""
Editoval masterr (25. 7. 2013 14:10)
- dada-amater
- Bronze Partner | 52
Ahoj, vim ze tam je bug, kdyz se pouziva cachovani. Mam v planu pull request. Problem je, ze se cachuji jen preklady a ne metadata, tudiz pole je pak prazdne. Zkusim to stihnout pres vikend.
- HappyFace
- Člen | 162
Prosim Vas je mozne nejako do toho PO dostat naraz vsetky prekladane slova? .. lebo som dostal za ukol spravit lokalizacie uz na existujucom projekte, ktory je velky a drobeckovo dopatravat vsetky slova je sprepacenim o hubu ..alebo islo by nastavit nejako POedit nastavit aby si vyhladal slova, ktore su v {_"orginal"} atd
- aRagornol
- Člen | 17
edit : Po nainstalovani 2.0.2 funguje OK. Chyba bude v 2.0.10
Mohol by som poprosit o pomoc. Rozsirenie som nainstaloval, v debug panel
sa mi zobrazuje. Po otvoreni kliknem na label zo sablony, ktory chcem prelozit.
Kliknem SAVE a vypise – Successfuly saved, preklad zozelena. Nie su vsak
vytvorene ziadne subory v zlozke %app%/lang
(adresar vytvoreny /app/lang/, prava 777). Po refresh stranky panel opet oznami,
ze su dostupne label na preklad.
Nette : 2.0.12
PHP : 5.3.20
GettextTranslator : 2.0.10 / master (instalovane z GIT)
Pre spojazdnenie GettextTranslatora som musel pridat nasledovne
session:
autoStart: yes
inak pouzivam skoro defaultny sandbox
config.neon
gettextTranslator:
lang: en
files:
web: %appDir%/lang # for module Front and other non-specified modules
# optional with defaults
layout: horizontal # or: vertical
height: 350
router
$router[] = new Route('<lang=en (sk|en|fr)>', 'Page:default');
default.latte
<li id="current"><a href=""><span>{_"News"}</span></a></li>
PagePresenter
/**
* @param GettextTranslator\Gettext
*/
public function injectTranslator(GettextTranslator\Gettext $translator)
{
$this->translator = $translator;
}
public function startup()
{
parent::startup();
if ($this->lang == NULL) {
$this->lang = $this->translator->getLang();
}
$this->translator->setLang($this->lang);
}
public function createTemplate($class = NULL)
{
$template = parent::createTemplate($class);
$template->setTranslator($this->translator);
return $template;
}
Editoval aRagornol (22. 9. 2013 12:24)
- Sense
- Člen | 1
Edit: Tak už jsem to vyřešil stažením verze 2.0.6 z adresy (https://addons2.nette.org/…tor/versions). Teď to funguje skvěle bez jakýkoliv úprav.
Potřeboval bych maličko popostrčit. Používám Nette 2.0.12, PHP verze 5.4.11 a GettextTranslator 2.0.12 (dnes stažený z GITu). Moje soubory vypadají takto:
1. config.neon
common:
gettextTranslator:
lang: cs
files:
application: %appDir%/i18n
2. bootstrap.php
<?php
$configurator->onCompile[] = function ($configurator, $compiler) {
$compiler->addExtension('gettextTranslator', new GettextTranslator\DI\Extension);
};
?>
3. SecuredPresenter
<?php
abstract class SecuredPresenter extends BasePresenter {
public $lang;
public $translator;
public function injectTranslator(GettextTranslator\Gettext $translator) {
$this->translator = $translator;
}
protected function startup() {
parent::startup();
$user = $this->getUser();
if (!$user->isLoggedIn()) {
$this->redirect('Sign:in');
}
if (!$user->identity->lang) $user->identity->lang = $this->translator->getLang();
$this->lang = $user->identity->lang;
$this->translator->setLang($this->lang);
}
}
?>
4. formulář:
<?php
protected function createComponentUserProfileForm() {
$form = new Form;
$form->setTranslator($this->translator);
...
?>
Po načtení presenteru na mě nejdříve vyskočila první chybová hláška, stejná, jako zde řešil uživatel zool. Nicméně u mě to bylo naopak, místo:
<?php
Nette\Diagnostics\Debugger::getBar()->addPanel(...)
?>
jsem použil:
<?php
Nette\Diagnostics\Debugger::$bar->addPanel(...)
?>
a problém zmizel.
Teď se mi v debug baru objevuje vlaječka a načtou se mi všechny texty ve formuláři. Když ale udělám jakoukoliv úpravu a kliknu na Save, tak se mi objeví Unexpected error a vyskočí pop-up okno s chybou:
Fatal error: Call to a member function generateMetadata() on a non-object in C:\Dev\www1\libs\GettextTranslator\Gettext.php on line 314
což je řádek:
<?php
$metadata = $this->fileManager->generateMetadata($file, $this->metadata);
?>
Nevíte, kde by mohla být chyba? Děkuji za pomoc.
Editoval Sense (7. 10. 2013 17:30)
- hejdav
- Člen | 50
Ahoj ahoj!
GettextTranslator
jsem implementoval a funguje SKVĚLE!
Jedna maličkost mě deprimuje – uložim si překlady na stránce a pak zjistim, že bych chtěl nějakej implicitní text v šabloně přepsat. Tak to udělám, jenže překlad už mám uloženej. Translation panel mi přepsaný text nabídne k překladu, takže je vše OK. Jen mě štve, že původní překlad zůstane v *.po, *.mo souborech natrvalo a nevím jak se ho zbavit (resp. nevím jak se ho zbavit z *.mo souboru). Ničemu to nepřekáží ale chtěl bych to mít ťip ťop.
Bych i udělal nějakej pull request, kde by šly překlady mazat, ale chtěl bych nejdřív znát názor ostatních :)
- 2bfree
- Člen | 248
Pro práci s .po a .mo soubory slouží programy jako PoEdit V něm načteš .po soubor a vyexportuješ .mo
hejdav napsal(a):
Ahoj ahoj!
GettextTranslator jsem implementoval a funguje SKVĚLE!Jedna maličkost mě deprimuje – uložim si překlady na stránce a pak zjistim, že bych chtěl nějakej implicitní text v šabloně přepsat. Tak to udělám, jenže překlad už mám uloženej. Translation panel mi přepsaný text nabídne k překladu, takže je vše OK. Jen mě štve, že původní překlad zůstane v *.po, *.mo souborech natrvalo a nevím jak se ho zbavit (resp. nevím jak se ho zbavit z *.mo souboru). Ničemu to nepřekáží ale chtěl bych to mít ťip ťop.
Bych i udělal nějakej pull request, kde by šly překlady mazat, ale chtěl bych nejdřív znát názor ostatních :)
- sKopheK
- Člen | 207
Ahoj,
nemůžu zprovoznit Nette tester pro mou aplikaci, kde využívám rozšíření GettextTranslator. Zkouším jednoduché Velestručné testování presenterů v Nette
Adresářová struktura projektu:
- app
-- lang
- libs
-- schmutzka
--- gettexttranslator
---- GettextTranslator
- tests
Aby to nehlásilo neexistující jazykový adresář (appDir je namísto
app
adresář tests
) v boostrapu načtu další
config pro testování, kde přepíšu adresář pro jazykové soubory:
gettextTranslator:
files:
front: %appDir%/../app/lang
Pak ale dostanu chybu
Undefined index: front
in gettexttranslator\GettextTranslator\Gettext.php(156)
Nemáte někdo s testy a GettextTranslatorem zkušenosti?
EDIT: Nette 2.1dev, v adresáři lang jsou soubor cs.front.mo a cs.front.po vytvořené přes Nette Translation Panel. Ve webové aplikaci to funguje bez problémů, jen tester přes CLI hlásí chybu.
Editoval sKopheK (25. 10. 2013 11:55)
- ic
- Člen | 430
sKopheK napsal(a):
A ještě jeden dotaz: Jak nejlépe udělám překlad částí url? Samozřejmě zachovám parametr lang, ale pak bych podle něj chtěl mít „uzivatel“ namisto „user“ apod.
Kdysi dávno se tohle dělalo v bootstrapu → https://github.com/…ootstrap.php#L57
dneska možná v .noen
confugu kdoví.
- michal.hudecek
- Člen | 1
Plugin jsem úspěšně nainstaloval. Zobrazuje se mi i translate panel, ale ani po zdánlivě úspěšném uložení překladu se v adresáři nevytvoří příslušné soubory. Žádnou chybu to nehlásí. Naopak to píše „Sucessfuly saved“. Po reloadu je to zase tam kde to bylo a FTP adresář lang je prázdný. Můžete mě prosím nějak nasměrovat (práva na zápis jsem kontroloval)? Díky!
Editoval michal.hudecek (25. 10. 2013 17:13)
- HappyFace
- Člen | 162
michal.hudecek napsal(a):
Plugin jsem úspěšně nainstaloval. Zobrazuje se mi i translate panel, ale ani po zdánlivě úspěšném uložení překladu se v adresáři nevytvoří příslušné soubory. Žádnou chybu to nehlásí. Naopak to píše „Sucessfuly saved“. Po reloadu je to zase tam kde to bylo a FTP adresář lang je prázdný. Můžete mě prosím nějak nasměrovat (práva na zápis jsem kontroloval)? Díky!
neviem kde to mas ulozene ak ide o linux server musis nastavit priecinok lang aby mohla snim pracovat grupa apache .. dalej ukladanie prekladu do suboru nieje doriesene/osetrene, ano ak nemas prava v UI sa ti napise ze vsetko je v poriadku ale v skutocnosti to skoncilo vnutornou tichou chybou. Odporucam si to fixnut a to nasledovne:
otvor si GettextTranslator\FileManager a na riadku cca 127 metoda buildPOFile, najdes
file_put_contents($file, $po);
a uprav to napr:
var_dump(file_put_contents($file, $po));
teraz ked nieco ulozis tak v networku uvidis v odpovedy nejaky integer ak
sa to ulozilo alebo FALSE ak nieco zlihalo.
Je to len taka pomocka, problem to nevyriesi najlepse by bolo nastavit aby
header odpovede nebol 200 ale napr 500-ka ak ten file_put_content skonci ako
false, inak vracia velkost ulozeneho file
u .mo filu je to tiez ale tam je to zbytocne nejako ontrolovat lebo ak neprejde toto beriem to tak ze nepreslo ani to druhe
mne to osobne stacilo takto mat osetrene a aj staci, nez nedopisem do toho ukladanie/nacitavanie z DB a cache
Editoval HappyFace (29. 10. 2013 16:28)