NetteTranslator (GettextTranslator & Nette Translation Panel)

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Tomáš Votruba
Moderator | 1114
+
0
-

Zas tolik tomu nerozumím, ani nevím kde (stáhnul jsem to před 7 měsíci ani nevím kde) a jedinou úpravu, co jsem dělal teď, jsem zvýraznil. Klidně se toho ujmi.

Jan Jakeš
Člen | 177
+
0
-

Možná to budu brzy používat, tak se kdyžtak ozvu s nějakym vylepšením. Jen pár věcí, co bys mohl teď změnit:

  1. Souboury nejsou v UTF-8.
  2. Konfigurace jde napsat pohodlně bez bootstrap.php a to takto:
	translator:
		factory: NetteTranslator\Gettext::getTranslator
		setup:
			- addFile(%appDir%/lang, front)
			- NetteTranslator\Panel::register

3. Parametr langDir je v configu uplně zbytečně, protože se nikde nepoužívá – smazat. (A parametr lang je díky poněkud zvláštnímu kódu __construct vyžadován právě v sekci parametres, ale vůbec by to tak být nemuselo. Navíc tam máš nějaké variable.lang = ..., což ani nefunguje. Když už, tak lang: cs).

Každopádně díky za funkční verzi.

Editoval Juan (11. 2. 2012 12:05)

Tomáš Votruba
Moderator | 1114
+
0
-

@Juan: Jsem rád, že je to jen v configu (včera jsem se o to pokoušel, ale nepodařilo se mi to). Vřelé díky, zapracováno a funguje.

Editoval Schmutzka (11. 2. 2012 18:06)

fak
Člen | 48
+
0
-

@Schmutzka: super práce, tleskám!

napadlo mě formální přejmenování parametru ‚lang‘ v config.neon na ‚nativeLang‘. Napřed jsem nemohl pochopit proč tam je, ale díky němu se vlastně pozná v jakém jazyku jsou řetězce aplikace natvrdo napsané..

Tomáš Votruba
Moderator | 1114
+
0
-

fak napsal(a):

@Schmutzka: super práce, tleskám!

napadlo mě formální přejmenování parametru ‚lang‘ v config.neon na ‚nativeLang‘. Napřed jsem nemohl pochopit proč tam je, ale díky němu se vlastně pozná v jakém jazyku jsou řetězce aplikace natvrdo napsané..

Přemýšlel jsem nad tím, ale zmínka postačí: https://componette.org/search/?… (jen ji třeba přečíst ;)).
V configu je obvykle vše defaultní.

Plus je na tobě, jestli budeš mít tuto hodnotu v configu, v basePresenteru, db nebo jinde. To už je na každém.

Editoval Schmutzka (18. 2. 2012 20:56)

Michal Vyšinský
Člen | 608
+
0
-

Zdravím,
nejdříve musím poděkovat za skvělou práci :) Jen jsem se chtěl zeptat, zda je nutné mít před překládáním už vytvořen soubor s překladem (.po/.mo) nebo se vytvoří sám. Někdy se mi totiž při prvním překladu soubor vytvořil automaticky. A někdy při prvním překladu do jiného souboru (mám jich více kvůli modulům a každý má jiné umístění) se mi text nepřeloží (neuloží) a vyskočí prázdné okno. V logu se objeví toto

Vím, že zřejmně Gettext nenašel ten soubor. Tak právě chci vědět, jestli jej musím vytvořit, nebo se vytvoří. Díky

2bfree
Člen | 248
+
0
-

Zdravím,

vzhledem k problémům, na které jsem při užívání NetteTranslatoru respektive jeho panelu narazil, programuji novou verzi úplně od základu. Chtěl bych v něm vyřešit následující problémy potažmo přidat následující funkce.

  • Detekce neexistence slovníkového souboru s možností jeho založení
  • Při zakládání nového slovníku možnost definovat parametry jako Autor, Jazyk, definice plurálů etc.
  • Zapnutelné / Vypnutelné generování .po souboru
  • Přidání možnosti překladu komponent, jejichž slovník se načítá až v momentě užití
  • Přidání funkce automatické překladu googlem po kliknutí na čudl

Zajímalo by mne, zda-li by byl o tento výsledek zájem i v komunitě a případně jestli vás napadá, co by takový panel mohl ještě umět „navíc“.

2bfree
Člen | 248
+
0
-

CherryBoss napsal(a):

Zdravím,
nejdříve musím poděkovat za skvělou práci :) Jen jsem se chtěl zeptat, zda je nutné mít před překládáním už vytvořen soubor s překladem (.po/.mo) nebo se vytvoří sám. Někdy se mi totiž při prvním překladu soubor vytvořil automaticky. A někdy při prvním překladu do jiného souboru (mám jich více kvůli modulům a každý má jiné umístění) se mi text nepřeloží (neuloží) a vyskočí prázdné okno. V logu se objeví toto

Vím, že zřejmně Gettext nenašel ten soubor. Tak právě chci vědět, jestli jej musím vytvořit, nebo se vytvoří. Díky

Co mám zkušenost s Martenovo translatorem, tak se sice vygeneruje soubor .po i .mo, ale chybně, takže po reloadu to vyhazuje různé errory. Navíc není možnost definice počtu plurálů, takže třeba soubor pro český jazyk takhle nevygeneruješ.

Aurielle
Člen | 1281
+
0
-

CherryBoss napsal(a):

Zdravím,
nejdříve musím poděkovat za skvělou práci :) Jen jsem se chtěl zeptat, zda je nutné mít před překládáním už vytvořen soubor s překladem (.po/.mo) nebo se vytvoří sám. Někdy se mi totiž při prvním překladu soubor vytvořil automaticky. A někdy při prvním překladu do jiného souboru (mám jich více kvůli modulům a každý má jiné umístění) se mi text nepřeloží (neuloží) a vyskočí prázdné okno. V logu se objeví toto

Vím, že zřejmně Gettext nenašel ten soubor. Tak právě chci vědět, jestli jej musím vytvořit, nebo se vytvoří. Díky

Netuším, kterou verzi používáš, můj fork NetteTranslatoru vytváření souborů nepodporuje, resp. podporuje chybně, jak bylo napsáno. Věnovat pár vteřin vytvoření katalogů v PoEditu není zas tak náročné…

Michal Vyšinský
Člen | 608
+
0
-

Díky za odpovědi. Mohl bych poprosit o nějaký postup, jak takový katalog vytvořit tak aby to s tímto translatorem fungovalo? Děkuji.

Tomáš Votruba
Moderator | 1114
+
0
-

CherryBoss napsal(a):

Zdravím,
nejdříve musím poděkovat za skvělou práci :) Jen jsem se chtěl zeptat, zda je nutné mít před překládáním už vytvořen soubor s překladem (.po/.mo) nebo se vytvoří sám. Někdy se mi totiž při prvním překladu soubor vytvořil automaticky. A někdy při prvním překladu do jiného souboru (mám jich více kvůli modulům a každý má jiné umístění) se mi text nepřeloží (neuloží) a vyskočí prázdné okno. V logu se objeví toto

Vím, že zřejmně Gettext nenašel ten soubor. Tak právě chci vědět, jestli jej musím vytvořit, nebo se vytvoří. Díky

Verze využitá v kuchařce sama soubory zakládá, viz hned 1. bod, právě kvůli těmto problémům.

Jestli ti to blbne, popiš, jak ses k tomu dopracoval, možná zkusím fixnout.

Michal Vyšinský
Člen | 608
+
0
-

Tak chyba zřejmě byla u mě. Dal jsem – addFile() do config.neon (hlavní conf soubor) tak jak je to v návodu. Předtím jsem tam měl addFile 2* (jeden pro front a druhý pro admina). Konfiguraci aplikace skládám tak, že jako první vložím ten hlavní soubor. A pak jdu přes všechny moduly a skládám tak konfiguraci. Je to sice OT ale už se zeptám tu: Jak mám tedy složit konf soubor tak jak to mám teď, aby to fungovalo (to addFile). Nyní mám v hlavním konfigu toto:

services:
		translator:
			factory: NetteTranslator\Gettext::getTranslator
			setup:
				- addFile(%wwwDir%/translations, homepage)
				- addFile(%wwwDir%/translations, admin)
				- NetteTranslator\Panel::register

a v konfigu zatím jediného modulu toto:

services:
		translator:
			setup:
				- addFile(%wwwDir%/modules/PagesModule/translations, pagesmodule)

Myslel jsem, že se to bez problému složí, ale asi jsem vedle :-|

EDIT: Podotýkám, že cesty jsou správně a když řádek addFile() z modulu přesunu to hlavního konfigu tak vše funguje. Ale to je pro moje potřeby bohužel nepoužitelné :-(

Editoval CherryBoss (21. 2. 2012 20:40)

Tomáš Votruba
Moderator | 1114
+
0
-

Možná je to registrací panelu, kterou lze pustit za posledním addFile. To už je ale otázka na kompozici configů, která bohužel není příliš ideální.

Napadá mne, že řešením by mohla být nějaká autoregistrace po přidání posledního addFile, ale to fakt hádám.

Oggy
Člen | 306
+
0
-

Narazil jsem na jednu zvláštnost..

tohle nevypíš plurál ..

<?php
{_"Nalezen",$products->count('*')}
?>

tohle ano

<?php
{_"Nalezen",20}
?>

netuší někdo, kde by mohla být chyba? Pokud vkládám proměnou špatně ji vyhodnotí.

Oggy
Člen | 306
+
0
-

Nemá někdo podobný problém s plurály? Nějak tomu nemohu přijít na kloub

Tomáš Votruba
Moderator | 1114
+
0
-

Oggy napsal(a):

Narazil jsem na jednu zvláštnost..

tohle nevypíš plurál ..

<?php
{_"Nalezen",$products->count('*')}
?>

tohle ano

<?php
{_"Nalezen",20}
?>

netuší někdo, kde by mohla být chyba? Pokud vkládám proměnou špatně ji vyhodnotí.

Nevím, co používáš, ale testnul jsem to pro NotORM (NotORM_Result) a vše v pořádku (výše zmíněná verze):

{_"test", $testCount->count("*")}

Opravdu ti $products->count("*") vrací číslo? Zkusil bych:

{dump $products->count("*")}
{dump $products->count()}
{dump count($products)}

{_"Nalezen", count($products)}

Případně rozepiš, co znamená špatně ji vyhodnotí.

Editoval Schmutzka (29. 3. 2012 1:26)

Oggy
Člen | 306
+
0
-

Děkuju, pomohlo..

rozdíl mezi $products->count("*") a $products->count() ..je že první vrací "3" a druhé 3.

Editoval Oggy (4. 4. 2012 9:05)

Oggy
Člen | 306
+
0
-

Lze si nechat vygenerovat všechny texty k překladu na celém webu k přeložení, ne přes panel?
Zdá se mi, že se mi do .po soubory neustále přepisuje podle aktuální stránky.

iguana007
Člen | 970
+
0
-

Schmutzka:

Taky se mi zdá, že dokud se aplikace k textu nějak nedostane, tak se text v panelu nezobrazí. Jak lze tedy dostat/proskenovat všechny texty v aplikaci?

  • by mne zajímalo, jak se správně pracuje se „slovníky“? Tj. třeba rozdělení na Frontend a Backend – když si zadám do configu 2× addFile tak když potom mezi nimi přepínám v panelu, tak mi to pořád zobrazuje to samé (tj. všechny texty z aplikace).
awsickness
Člen | 98
+
0
-

narazil jsem na zajimavy problem.
pokud translator bych chtel vyuzivat pri spousteni z console tak mi gettext vyhodi chybu na

$storage->newStrings = array();

error

./Send.php

PHP Fatal error:  Uncaught exception 'ErrorException' with message 'session_start(): Cannot send session cache limiter - headers already sent (output started at /var/www/test/send.php /Nette/Http/Session.php:98
Stack trace:
#0 [internal function]: Nette\Diagnostics\Debugger::_errorHandler(2, 'session_start()...', '/var/www/test...', 98, Array)
#1 /var/www/test/libs/Nette/Http/Session.php(98): session_start()
#2 /var/www/test/libs/Nette/Http/SessionSection.php(63): Nette\Http\Session->start()
#3 /var/www/test/libs/Nette/Http/SessionSection.php(95): Nette\Http\SessionSection->start()
#4 /var/www/test/libs/Nella/Localization/Gettext.php(111): Nette\Http\SessionSection->__set('newStrings', Array)
#5 /var/www/test/libs/Nella/Localization/Gettext.php(601): NetteTranslator\Gettext->__construct(Object(SystemContainer), NULL)
#6 /var/www/test/temp/_Nette.Configurator/_-b45a42e081b09a6d in /var/www/test/libs/Nette/Http/Session.php on line 101

tudiz se poslou headers

Editoval awsickness (20. 4. 2012 8:05)

jspetrak
Člen | 15
+
0
-

V tutoriálu jsem nenašel, jak elegantně přeložit ve formulářích následující:

V presenteru vytvářím formulář a přikládám mu translator

protected function createComponentSignInForm() {
  $form = new SignInForm();
  $form->setTranslator($this->context->translator);
  $form->onSuccess[] = callback($this, 'signInFormSubmitted');
  return $form;
}

Ve formu se přeloží automaticky label, required message, ale pokud přidávám HTML5 atribut placeholder, který se zobrazuje jako zašedlý text v nevyplněném políčku, ten se automaticky nepřekládá a musím přistupovat přes globální funkci __() jde to lépe?

class SignInForm extends Form {
  public function __construct(IContainer $parent = NULL, $name = NULL) {
    parent::__construct($parent, $name);

    ...
    $this->addText('login')
      ->setAttribute('placeholder', __('Email or Personal ID'))
      ->setRequired('Fill in email or Personal ID');

Protože ve formu se setTranslator() zavolá až po vykonání konstruktoru, nemůžu v konstruktoru zavolat $this->getTranslator()->translate().

Edit ex post

Ani řešení s __() nefunguje, proč funkce z NetteTranslator/shortcuts.php nejsou dostupné.

Call to undefined function __()

Editoval jspetrak (22. 4. 2012 20:10)

Oggy
Člen | 306
+
0
-

Přesouváte .po a hlavně .mo soubory?

Narazil jsem na problém, při přehrání souborů s překlady se sice translation panel tváří, že překlad uložil, stejně tak hlásí sucessfuly saved, ale nepřepisuje .mo a .po soubory. Práva na zápis jsou nastavena.

JaroslavRamba
Člen | 20
+
0
-

Jakým způsobme překládáte továrničky, které jsou mimo presentery a ve vlastním templatu mají věci, které je potřeba přeložit?

Aktuálně řeším překlad VisualPaginatoru.

Díky moc

Tomáš Votruba
Moderator | 1114
+
0
-

@JaroslavRamba: Předáním podobné struktury createTemplate() jako v presenteru do BaseControl, od které další komponenty dědí.

frances
Člen | 24
+
0
-

Zdravím snažím se využít tento super Translator ale po definici v config.neon mi laděnka zahlásí:

Service 'translator': Unknown key '0', '1' in definition of service

Může být problém v tom že nemám zatím vytvořeny žádné překlady? Popřípadě jak si tyto překlady můžu vytvořit? Myslel jsem že právě panel mi pomůže v interaktivním překládání sám…
Díky za odpověď.

frances
Člen | 24
+
0
-

Zdravim netusite nikdo? vypada to na problemy na radcich setup kde se nastavuje sluzba..

castamir
Člen | 629
+
0
-

Hoď sem to, co máš v configu

castamir
Člen | 629
+
0
-

Jinak tento nástroj je v celku fajn, ale asi si taky napíšu svůj vlastní a to zejména kvůli náročnému luštění současného kódu a přidání funkcionalit jako

  • zobrazování nezkráceného, vhodně umístěného textu k přeložení
  • automatické generování textů defaultního jazyka do .po/.mo souborů
  • s pomocí druhého bodu umožnit překlad všech textů nezávisle na textech aktuální stránky
  • přidání metadat autor, datum změny či předešlá verze přeloženého textu
  • pokusit se umožnit kontextový překlad (např. textu obsahující odkaz či jiný rozumný html prvek)
frances
Člen | 24
+
0
-
translator:
			factory: NetteTranslator\Gettext::getTranslator
			setup:
			- addFile(%appDir%/lang, front)
			- NetteTranslator\Panel::register

presne podle navodu, problem je na radcich setup…
Diky za info

Tomáš Votruba
Moderator | 1114
+
0
-

Jsi si jistý, že to máš správně odsazené?

frances
Člen | 24
+
0
-

Schmutzka napsal(a):

Jsi si jistý, že to máš správně odsazené?

jsem pokud to dám jakkoliv jinak tak to neprojde a zahlásí to tu standardní chybu s odsazením. Takto to zahlásí chybu že je problém v jednotlivých setup parametrech…

iguana007
Člen | 970
+
0
-

dej na poslední dva řádky ještě jeden tab
EDIT: jak se na to dívám, tak i ten zbytek máš nějak divně odsazený…

Editoval iguana007 (15. 7. 2012 10:12)

frances
Člen | 24
+
0
-

Tak problém byl opravdu v odstazení ne 1 tab ale 2 taby a šlape to! Díky

castamir
Člen | 629
+
0
-

Reportuju divné chování tohoto nástroje:
projdu si několik stránek a nashromáždím tím větší počet textů k překladu. Po přeložení prvního se vytvoří nový soubor s překladem do daného jazyka (pokud dřív neexistoval) a v něm jsou všechny doposud nepřeložené texty a ten jeden přeložený. Po uložení dalšího textu či textů se mi ale ty nepřeložené z toho souboru ztratí a zůstanou tam jen ty přeložené – proboha proč? Díky tomu musí člověk znova procházet některé stránky a načítat ty texty znova!!

Felix
Nette Core | 1196
+
0
-

Zkousel jsem tedka translator od schmutzky a narazil na tento problem. Kdyz pouzivam defaultni hlasky u formularu, tak mi translator vyhazuje vsprintf(): Too few arguments.

Zkoumal jsem to a opravil jsem si radek https://github.com/…/Gettext.php#L308 na

if (count($args) > 0 && $args != NULL) {
	$message = vsprintf($message, $args);
}

A zacalo to fungovat.

frees
Člen | 25
+
0
-

Dik za super translator, mam len jeden problem. Neviem ako prepinat medzi jazykovymi verziami.
Priklad: som na cz.domena.cz/produkt/1 a po kliknuti na tlacitko pre zmenu jazyku sa mi nacita stranka sk.domena.cz/produkt/1

+tiez by ma zaujimalo ako prekladat placeholder u formularov.

Tomáš Votruba
Moderator | 1114
+
0
-

@frees: Rozšířil jsem návod o podrobnější popis změny jazyka. Pokud ti stále nebude něco jasné, ptej se.

Ad placeholder

Editoval Schmutzka (17. 8. 2012 18:02)

frees
Člen | 25
+
0
-

genialne, dik moc

.:M@rt!n:.
Člen | 201
+
0
-

Ahoj, nahodil jsem si na localu na web Nette translator a podle kuchařky nastavil… Vše jde tak jak má a translator vidím v debug baru. Ale už nevím jak přeložit jednotlivé popisky u formulářů, tak aby se mě měnili podle zvoleného jazyku? Zkouším to psát, jak v debug baru, tak i ve vytvořených souborech, ale když si pak proklikám jednotlivé jazyky, je všude jen jeden jazyk. A jak se pak dostanu k defaultníu jazyku zase?

frees
Člen | 25
+
0
-

Zdravim, nefunguje mi preklad 300+ znakovych stringov. Normalne sa objavia v Nette Translator panely, prelozim ich ulozim, ale dany subor sa nezmeni. Preklad stringov do 20 znakov funguje bez problemu. Ine dlzky som neskusal. Neviete niekto preco to robi?

besir
Člen | 170
+
0
-

Ahoj,
vim, že se to tu řešilo, ale třeba na to mezi tím někdo přišel. Mám aktuální translator a chtěl jsem už kvuli rychlosti vytvářet jednotlivé slovníky až v presenteru, tak mám v presenteru

$this->context->translator->addFile($langDir, 'Slovnik');

V panelu se zobrazi, ale kdyz chci ulozit preklad tak mi console vrati chybu

TypeError: list is null
(223 out of range 117)

Edit: Este dodam ze po pridani slovniku v presenteru a dumpnuti

$this->context->translator->getFiles()

mi to vrati cesty k souborum spravne.

Ukládání do defaultního souboru z config.neon funguje.

@2bfree: Eventuelně jak to vypadá s tvou verzí prosím?
Všem díky.

Editoval besir (10. 9. 2012 10:26)

Tomáš Votruba
Moderator | 1114
+
0
-

@.:M@rt!n:.: Ahoj, i s tímto?

Editoval Schmutzka (14. 11. 2012 2:31)

.:M@rt!n:.
Člen | 201
+
0
-

Ano i s tím. Podle toho jsem to nastavil. Translator se zobrazil v debugbaru tak jak je na obrázku. Ale nevím jak přeložit jednotlivé labely a jak překlad uložit?

besir
Člen | 170
+
0
-

Ahoj, rozchodil sem translator v komponentach, ale nezda se mi jako best practise predavat si tam container s contextem. Jak to udelat bez toho aniz bych si musel predavat container do komponenty?

Navíc tohle mi jde jen do každé konkrétní komponenty, rád bych translator implementoval pro všechny front Controly které by dědili třeba od FrontControl a až ten teprve od \Nette\Application\UI\Control

Díky za nápady a rady.

Editoval besir (10. 9. 2012 21:28)

.:M@rt!n:.
Člen | 201
+
0
-

.:M@rt!n:. napsal(a):

Ahoj, nahodil jsem si na localu na web Nette translator a podle kuchařky nastavil… Vše jde tak jak má a translator vidím v debug baru. Ale už nevím jak přeložit jednotlivé popisky u formulářů, tak aby se mě měnili podle zvoleného jazyku? Zkouším to psát, jak v debug baru, tak i ve vytvořených souborech, ale když si pak proklikám jednotlivé jazyky, je všude jen jeden jazyk. A jak se pak dostanu k defaultníu jazyku zase?

Nikdo neporadí?

besir
Člen | 170
+
0
-

.:M@rt!n:. napsal(a):

.:M@rt!n:. napsal(a):

Ahoj, nahodil jsem si …>

Nikdo neporadí?

Hola,
no pokud Ti to fungnuje a vytvori se Ti potrebne soubory tak se to preklada prave v debugbaru a je to vzdy pro konkretni jazyk na ktery jsi preply. Tzn. pokud mas v kodu v EN tak si prepnes na CZ, otevres translations bar a v levem sloupci vidis prelozene / neprelozene retezce. Zajímají Tě žluté, ty jsou nepřeložené. Klikneš na něj a pak ho v pravem sloupci prekladas (singular = jednotne cislo, plural = mnozne). No a v pravem dolnim rohu mas save ;-)

iguana007
Člen | 970
+
0
-

.:M@rt!n:. napsal(a):
Nikdo neporadí?

Aby mi začaly chodit překlady ve formulářích, musel jsem je upravit takto (přidat definici translatoru):

<?php

use Nette\Application\UI\Form;

class DemoForm extends Form {

	public function __construct($parent, $name) {

		parent::__construct($parent, $name);

		$translator = $this->presenter->getContext()->getService('translator');
		$this->setTranslator(new \Antee\i18n\NetteTranslator($translator));

		$this->addHidden('id');
		$this->addText('sometext','Text to translate')
			->addRule(Form::FILLED,'%label must be filled!');
		//...
		$this->addSubmit('save', 'Save');
		$this->onSuccess[] = callback($this, 'correctSubmit');
		$this->onError[] = callback($this, 'invalidSubmit');
		return $this;
	}
frees
Člen | 25
+
0
-

frees napsal(a):

Zdravim, nefunguje mi preklad 300+ znakovych stringov. Normalne sa objavia v Nette Translator panely, prelozim ich ulozim, ale dany subor sa nezmeni. Preklad stringov do 20 znakov funguje bez problemu. Ine dlzky som neskusal. Neviete niekto preco to robi?

Naozaj s tym nikto nemate problem?

Tomáš Votruba
Moderator | 1114
+
0
-

@frees: Zkus otestovat tuto pasáž, jinak mě nic nenapadá.

.:M@rt!n:.
Člen | 201
+
0
-

besir napsal(a):

.:M@rt!n:. napsal(a):

.:M@rt!n:. napsal(a):

Ahoj, nahodil jsem si …>

Nikdo neporadí?

Hola,
no pokud Ti to fungnuje a vytvori se Ti potrebne soubory tak se to preklada prave v debugbaru a je to vzdy pro konkretni jazyk na ktery jsi preply. Tzn. pokud mas v kodu v EN tak si prepnes na CZ, otevres translations bar a v levem sloupci vidis prelozene / neprelozene retezce. Zajímají Tě žluté, ty jsou nepřeložené. Klikneš na něj a pak ho v pravem sloupci prekladas (singular = jednotne cislo, plural = mnozne). No a v pravem dolnim rohu mas save ;-)

Tak už nevím, co dělám špatně :)

Mám nastavený defaultní jazyk němčinu. V hlavičce mám přepínání na češtinu a angličtinu. Po kliknutí na češtinu si otevřu translator v debugbaru, v levém sloupci vyberu popisek textfieldu, který chci přeložit. Vpravo do singular napíšu překlad a dole dám save → německý název v levém sloupci se přepíše na český a zezelená.
Následně se mě vytvoří soubor „de.admin.po“, kde jsou překlady. Jenže když se přepnu na angličtinu nebo zpátky na defaultní jazyk, tak tam není němčina, ale stále český popisek…