Contributte/Translation – integrace symfony translation do Nette

ali
Člen | 342
+
0
-

Na logovani chybejicich prekladu slouzi logger

https://github.com/…xtension.php#L28

translation:
   ...
   logger: true

...

services:
    - My\PsrLogger

A jestli je vhodne cely layout obalit do translator makra netusim, osobne tohle to reseni nepouzivam a vzdy pisu celou cestu pro preklad.

Editoval ali (25. 3. 2020 6:19)

johnnie
Člen | 54
+
0
-

Ahojte, ako riesite cache pri develope ? Ak pouzivam neon loader tak ide vsetko v poriadku ak pouzivam Nette Database loader tak musim vzdy zmazat zlozku temp/cache

ali
Člen | 342
+
0
-

@johnnie ono jedina moznost, jak to udelat automaticky je napsat si vlastni cache factory a nahradit tim tu symfonackou pres konfiguraci, osobne DB loadry nepouzivam, pridal jsem to do knihovny jen jako zajimavost, ze to proste jde :-)
Taky by bylo zajimave mit na to tlacitko v tracy baru

Editoval ali (14. 4. 2020 19:21)

d@rkWolf
Člen | 162
+
0
-

Existuje nějaký způsob, jak přidávat/rušit/měnit výchozí jazyky na základě tabulky v DB? Myslím tu konfiguraci, co se dělá v Neonu. Nebo to chce nějak generovat prostě ten Neon soubor?

d@rkWolf
Člen | 162
+
0
-

@ali ahoj, proč se nepřekládají options položky v Selectu? Mám nadefinované asociativní pole s pár položkama do Selectu a potřebuju je přeložit-je neměnné, je to prostě seznam variant, co je nutno vybrat. Když zadám jako hodnotu normální cestu k překladu, v Tracy se mi ukáží chybějící překlady, přeložím je, chybějící překlady zmízí, ale v tom Selectu vidím furt ty cesty k překladu. Myslel jsem, že pokud nenastavím ->setTranslator(null), tak se položky Selectu mají překladát?

ali
Člen | 342
+
0
-

@darkWolf o prekladani options v selectu se stara primo Nette/Forms, ty musis akorad nastavit formulari translator

https://github.com/…electBox.php#L96
https://github.com/…eControl.php#L395

d@rkWolf
Člen | 162
+
0
-

@ali no jo, to je teda sakra divný, proč mi to nepřekládá? translator mám nastavený ve FormFactory přes kterou vytvářím formuláře normálně takto:

<?php
$form = new Form();
$form->setTranslator($this->translator);
?>

Popisky apod. se překládají, nepřekládaj se optiony selectu, taky nefungovaly checkboxy(na front-endu jsem to vyřešil manuálním renderem a ručně přeložením v šabloně, ale tam je jeden malej formulář…v adminu mám hromady formulářů a ručně je vykreslovat nechci, to bych se z toho po…). Vykresluju formuláře přes contributte/forms-bootstrap, ale zkusil jsem je vyhodit a použít UI\Forms a žádný efekt to nepřineslo.

ali
Člen | 342
+
0
-

@darkWolf zkus tady hodit minimalisticky kod tve form tovarny, kde ti to nefunguje

d@rkWolf
Člen | 162
+
0
-

@ali takhle nějak:

formFactory.php

<?php
final class FormFactory
{
    use Nette\SmartObject;

    /** @var Translator */
    protected $translator;


    /**
     * FormFactory constructor.
     * @param  Translator          $translator
     */
    public function __construct(Translator $translator)
    {
        $this->translator = $translator;
    }


    /**
     * @return Form
     */
    public function create(): Form
    {
        /** @var BootstrapForm $form */
        $form = new BootstrapForm();
        $form->setTranslator($this->translator);
	return $form
	}
?>

filtersFormFactory.php

<?php
class GalleryFiltersFormFactory
{
    use Nette\SmartObject;

    /** @var FormFactory $factory */
    private $factory;

    /** @var GalleryFiltersRepository */
    private $galleryFiltersRepo;


    public function __construct(FormFactory $factory, GalleryFiltersRepository $galleryFiltersRepo)
    {
        $this->factory = $factory;
        $this->galleryFiltersRepo = $galleryFiltersRepo;
    }


    /**
     * @param  callable $onSuccess
     * @param  callable $onException
     * @return BootstrapForm
     */
    public function create(callable $onSuccess, callable $onException): BootstrapForm
    {
        /** @var BootstrapForm $form */
        $form = $this->factory->create();
        $form->ajax = true;
        $form->renderMode = RenderMode::VERTICAL_MODE;
        $form->addSelect('type', 'admin.gallery_filters.type', $this->galleryFiltersRepo::FILTERS)
			->setPrompt('admin.select_choose')
			->setRequired('admin.field_required');
        $form->addText('name', 'admin.name')
             ->setRequired('admin.field_required')
             ->setMaxLength(100);
		...
		 $form->onSuccess[] = function (BootstrapForm $form, Nette\Utils\ArrayHash $values) use ($onSuccess, $onException): void {
		...
        return $form;
    }
?>

A pole FILTERS

<?php
    const FILTERS = [
        1 => 'admin.gallery_filters.category',
        2 => 'admin.gallery_filters.color',
        3 => 'admin.gallery_filters.finish',
    ];
?>

V selectu pole FILTERS se nepřeloží, Prompt se taky nepřeloží, vše ostatní kde sou kódy pro překladač se přeloží.

Editoval d@rkWolf (8. 5. 2020 9:20)

kralik
Člen | 230
+
0
-

Ahoj,
nějak se mi nedaří napojit se na NetteDB.
Prosím o radu.

common.neon

extensions:
	translation: Contributte\Translation\DI\TranslationExtension

translation:
	locales:
		whitelist: [en, cs, ru, de]
		default: en
		fallback: [en]
	dirs:
		- %appDir%/lang
	localeResolvers:
		- Contributte\Translation\LocalesResolvers\Router

	loaders:
		nettedatabase: Contributte\Translation\Loaders\NetteDatabase

v adresáři app/lang mám soubor lang-db

table: "languages" # if you specify table key, "messages" from file name will be ignored
id: "key" # id column name, default is "id"
locale: "locale" # locale column name, default is "locale"
message: "message" # message column name, default is "message"

Mooc díky

ali
Člen | 342
+
0
-

@kralik jak se jmenuje tvuj lang soubor i s priponou a kde ho mas umisteny?

kralik
Člen | 230
+
0
-

ali napsal(a):

@kralik jak se jmenuje tvuj lang soubor i s priponou a kde ho mas umisteny?

soubor se jmenuje lang-db, nemá příponu.

Uložený je:

projekt
  | - app
       |- lang
            |- lang-db   (měl příponu lang-db.cfg, i lang-db.neon)

Editoval kralik (16. 5. 2020 6:49)

ali
Člen | 342
+
0
-

@kralik ten soubor musi mit priponu nettedatabase, presne tak jak mas napsan klic u toho loadru

kralik
Člen | 230
+
0
-

ali napsal(a):

@kralik ten soubor musi mit priponu nettedatabase, presne tak jak mas napsan klic u toho loadru

Soubor má příponu nettedatabase a spojení na DB nefuguje.
Nevím zda tento souboru může být v níže uvedené složce?

projekt/app/lang/lang-db.nettedatabase

Editoval kralik (17. 5. 2020 18:09)

ali
Člen | 342
+
0
-

@kralik musis i ten nazev dat do akceptovatelneho formatu, viz dokumentace

kralik
Člen | 230
+
0
-

ali napsal(a):

@kralik musis i ten nazev dat do akceptovatelneho formatu, viz dokumentace

Super, už to funguje.
Škoda, že potřebná konfigurace se musí ukládát do souboru a nejde ji mít v configu (common.neon)

Mohu-li rád bych se zeptal jak šikovně vyřešit překlad celých stránek?

Díky

ali
Člen | 342
+
0
-

@kralik co myslis tim preklad celych stranek?

kralik
Člen | 230
+
0
-

ali napsal(a):

@kralik co myslis tim preklad celych stranek?

například překlad článku blogu.
Nebo stránku „O nás“ mít ve více jazycích.

Jak se toto šikovně řeší?

Díky

kralik
Člen | 230
+
0
-

Ahoj,
snažím se nainstalovat překladač pro nette v2.4. s použitím databáze.
Kdyby\Translation se mi nainstalovat nepodařilo, resp. při spuštění mi to psalo chybu, že neexistuje makro {_message.login}

composer.json

{
    "require": {
        "nette/nette": "v2.4.0",
        "mesour/datagrid": "2.0.7.1",
        "contributte/translation": "dev-nette-2.4"
    }
}

Při spuštění dostávám chybu

Error
Class 'Nette\Schema\Processor' not found

Zkoušel isnstalovat i nette/nette, tedy verzi 3.x, ale to jsem narazil na komplikace v závislostech v balíčku mesour/datagrid.

Dokázal byste mi někdo pomoci?

Předem moc díky

Petr Parolek
Člen | 455
+
0
-

@kralik obávám se, že se bez forku a refactoringu buď Contributte/Translation pro Nette 2.4 nebo mesour/datagrid pro Nette 3 po svém neobejdeš.

Nejlepší je podle mě přechod na nette 3.0 a ublaboo(contributte)/datagrid

Editoval ppar (28. 5. 2020 19:22)

ali
Člen | 342
+
0
-

Branch nette-2.4 je kompatibilni s Nette 2.4 a nemel by s nim byt zadny problem, s Nette 3.0 ho neni mozne pouzit.

Editoval ali (28. 5. 2020 22:23)

radekBrno
Člen | 61
+
+1
-

Ahoj,

do čistého Nette projektu jsem si přes composer přidal Contributte/Translation. Při konfiguraci jsem postupoval podle návodu. Při překladu mi to vyhodí vyjímku „Service of type Contributte\Translation\LocalesResolvers\Session not found.“

BasePresenter:

declare(strict_types=1);

namespace FrontModule;

use Nette;
use Contributte;

class BasePresenter extends Nette\Application\UI\Presenter
{
    /** @persistent  */
    public $locale;

    /** @var Nette\Localization\ITranslator @inject */
    public $translator;

    /** @var Contributte\Translation\LocalesResolvers\Session @inject */
    public $translatorSessionResolver;


    public function handleChangeLocale(string $locale): void
    {
        $this->translatorSessionResolver->setLocale($locale);
        $this->redirect('this');
    }

}

config:

extensions:
    translation: Contributte\Translation\DI\TranslationExtension

translation:
    locales:
        default: cs
        fallback: [cs]
        whitelist: [cs]
    dirs:
        - %appDir%/Modules/AdminModule/Langs
        - %appDir%/Modules/FrontModule/Langs
    localeResolvers:
        - Contributte\Translation\LocalesResolvers\Session

Díky moc

ali
Člen | 342
+
0
-

@radekBrno kdyz se podivas do kontejneru, mas tam servisu Contributte\Translation\LocalesResolvers\Session vytvorenou?

radekBrno
Člen | 61
+
0
-

@ali mám a ještě posílám Tracy panel.

edas229
Člen | 13
+
0
-

Ahoj bohužel mám stejný problém jako @radekBrno jde o úplně stejnou situaci. Už jste na to někdo přišel?

ali
Člen | 342
+
0
-

@radekBrno @edas229 tedka jsem si vytvoril projekt pres Composer

composer create-project nette/sanbox test

nainstaloval contributte/translation

composer require contributte/translation
{
	"name": "nette/sandbox",
	"description": "The sandbox is a pre-packaged Nette Framework project, basic configured structure for your application.",
	"homepage": "https://nette.org",
	"type": "project",
	"license": ["BSD-3-Clause", "GPL-2.0-only", "GPL-3.0-only"],
	"authors": [
		{
			"name": "David Grudl",
			"homepage": "https://davidgrudl.com"
		},
		{
			"name": "Nette Community",
			"homepage": "https://nette.org/en/contributors?lang=en"
		}
	],
	"require": {
		"php": ">=7.1",
		"nette/application": "^3.0",
		"nette/bootstrap": "^3.0",
		"nette/caching": "^3.0",
		"nette/database": "^3.0",
		"nette/di": "^3.0",
		"nette/finder": "^2.5",
		"nette/forms": "^3.0",
		"nette/http": "^3.0",
		"nette/mail": "^3.0",
		"nette/robot-loader": "^3.0",
		"nette/safe-stream": "^2.4",
		"nette/security": "^3.0",
		"nette/utils": "^3.0",
		"latte/latte": "^2.5",
		"tracy/tracy": "^2.6",
		"dg/adminer-custom": "^1.8",
		"contributte/translation": "^0.7.0"
	},
	"require-dev": {
		"nette/tester": "^2.0",
		"phpstan/phpstan-nette": "^0.12"
	},
	"autoload": {
		"psr-4": {
			"App\\": "app"
		}
	},
	"minimum-stability": "stable",
	"scripts": {
		"phpstan": "phpstan analyse --configuration phpstan.neon app bin www"
	}
}

nastavil jsem config

extensions:
    translation: Contributte\Translation\DI\TranslationExtension

translation:
    locales:
        default: cs
        fallback: [cs]
        whitelist: [cs]
    dirs:
        - %appDir%/lang
    localeResolvers:
        - Contributte\Translation\LocalesResolvers\Session

a do base presenteru dal tohle to

<?php

declare(strict_types=1);

namespace App\Presenters;

use Nette;
use Contributte;


/**
 * Base presenter for all application presenters.
 */
abstract class BasePresenter extends Nette\Application\UI\Presenter
{


    /** @var Nette\Localization\ITranslator @inject */
    public $translator;

    /** @var Contributte\Translation\LocalesResolvers\Session @inject */
    public $translatorSessionResolver;

	protected function startup(): void
	{
		parent::startup();
		bdump($this->translatorSessionResolver);
		bdump($this->translator->translate('test'));
	}

}

a Tracy mi nevyhodila zadnou chybu, delam neco jineho nez vy?

Editoval ali (23. 7. 2020 20:04)

edas229
Člen | 13
+
0
-

@ali Udělal jsem to podle tebe a vše funguje. Jediná věc, kterou jsem předtím udělal jinak a nešlo mi to, tak bylo, že jsem si z composeru nebral nette/sandbox ale nette/web-project. Mohlo to mít na to vliv? Možná to máš tak stejně @radekBrno?

radekBrno
Člen | 61
+
0
-

@ali @edas229 taky jsem použil composer create-project nette/web-project

Mistrfilda
Člen | 76
+
0
-

@edas229 @radekBrno Nedostáváte tu chybu z důvodu který jsem popsal tady https://forum.nette.org/…o-kontejneru#… ?

radekBrno
Člen | 61
+
0
-

@Mistrfilda @ali Mně to pomohlo díky.

jikki
Člen | 73
+
0
-

Ahoj lidi,

Načítání z Nette Database mi funguje. Pro každou doménu a jazyk mám vždy samostatný soubor s příponou .nettedatabase, např. messages.en_US.nettedatabase, messages.cs_CZ.nettedatabase, ublaboo_datagrid.en_US.nettedatabase, ublaboo_datagrid.cs_CZ.nettedatabase atd. Každá doména má svou databázovou tabulku.

table: "translation_messages" # if you specify table key, "messages" from file name will be ignored
id: "id" # id column name, default is "id"
locale: "locale" # locale column name, default is "locale"
message: "message" # message column name, default is "message"
table: "translation_ublaboo" # if you specify table key, "messages" from file name will be ignored
id: "id" # id column name, default is "id"
locale: "locale" # locale column name, default is "locale"
message: "message" # message column name, default is "message"

Poradí někdo jak udělat, abych mohl mít všechny překlady, všechny domény v jedné databázové tabulce?
Hádám, že vodítko je „# if you specify table key, "messages“ from file name will be ignored", ale nejsem si jistý, jestli správně chápu, co to znamená. Jak udělat, aby to ignorovalo messages v názvu souboru a vzalo si to doménu z db?

Děkuji

ali
Člen | 342
+
0
-

@jikki parametr table odkazuje na tabulku, z ktere bude nacitat a nahradi tim jmeno domeny z nazvu souboru

jikki
Člen | 73
+
0
-

Ahoj,

z nějakého důvod přestalo fungovat načítání překladů z DB. Po smazání cache NetteDatabase Loader pro načtení překladů vygeneruje dotaz:

SELECT `key` AS `id`, locale AS `locale`, message AS `message`
FROM translation
WHERE 'cs_CZ'

Za WHERE chybí ‚locale‘ = ..

Nejsem si jistý kdy problém vznikl. Configy jsem neměnil, pouze jsme provedl composer upgrade. Nyní mám contributte/translation verzi 0.8.3.
Netušíte někdo, kde by mohl být problém?

Děkuji

ali
Člen | 342
+
0
-

@jikki zkus downgradnout nette/database na 3.0

jikki
Člen | 73
+
0
-

ali napsal(a):

@jikki zkus downgradnout nette/database na 3.0

S nette/database 3.0 to funguje. Bude se dělat verze kompatibilní s 3.1?

David Grudl
Nette Core | 8082
+
0
-

Spíš zkus nette/database @dev

ali
Člen | 342
+
0
-

@jikki to ze to prestalo fungovat je docela fail a mel by se na to napsat lepsi test, aby se to priste odhalilo driv.
Osobne to nepouzivam, muzes zkusit debugnout v cem je problem?

jikki
Člen | 73
+
0
-

David Grudl napsal(a):

Spíš zkus nette/database @dev

@DavidGrudl S @dev to také funguje

Editoval jikki (12. 1. 2021 21:29)

David Grudl
Nette Core | 8082
+
+1
-

Super, tak vydám opravenou verzi.

Tomas8698
Člen | 109
+
0
-

Zdravim, som s nette zaciatocnik. Prelozil som texty na svojej stranke, len potreboval by som spravit preklad textu z db. Mam zopar nejasnosti napr. V lang/messages.cs_CZ.nettedatabase a messages.en_US.nettedatabase, je potrebne pisat preklad textu z databazy alebo to staci v databaze v subore .sql s prilozenym stlpcom locale. Pouzivam nettedatabazu. Dakujem za kazdu odpoved.

ali
Člen | 342
+
0
-

@Tomas8698 pokud pouzivas db loader, texty musis mit ulozene v databazi a v tom souboru mas pouze konfiguraci te tabulky, viz dokumentace.

Tomas8698
Člen | 109
+
0
-

@ali aha super, ano loader mam v config/common.neon a ze vlastne podla konfiguracie v tom subore my vyberie jazyk co pridam do stlpca lang v db. Dakujem velmi pekne.

Tomas8698
Člen | 109
+
0
-

Zdravim, nahodil som to podla documentacie, len po zapnuti stranky my hlasi stale tuto chybu.

Nette\DI\MissingServiceException
Service of type Contributte\Translation\LocalesResolvers\Session used in type hint at App\BasePresenter::$translatorSessionResolver not found. Did you add it to configuration file?

Mozem poslat aj obrazok ak by bolo treba.
Vyssie som nasiel ze nieco podobne s locales niekto riesil len nemoyzem sa dostat na odkaz, v ktorom to je spravene.

Takto vyzera moj Config/Common.neon :


parameters:
langs: [cs,en]

application:
errorPresenter: Error
mapping:
*: App*Module\Presenters*Presenter

session:
expiration: 14 days

extensions:
translation: Contributte\Translation\DI\TranslationExtension

translation:
locales:
default: cs
whitelist: [cs, en]
dirs:
 – %appDir%/lang
localeResolvers:
 – Contributte\Translation\LocalesResolvers\Router

services:
router: App\Router\RouterFactory::createRouter`


Takto moj Router/RouterFactory.php


<?php

declare(strict_types=1);

namespace App\Router;

use Nette;
use Nette\Application\Routers\RouteList;
use Nextras\Routing\StaticRouter;

final class RouterFactory
{
use Nette\StaticClass;

public static function createRouter(): RouteList
{
$router = new RouteList;
$router[] = new Route('', „Homepage:default“);
$router[] = new Route(‚<locale=cs cs<presenter>/<action>‘, „Homepage:default“);
$router->addRoute(‚sitemap.xml‘, ‚Homepage:sitemap‘);

$router->addRoute(‚<urlseo>‘, ‚Homepage:package‘);
return $router;
 }

}

Takto moj BasePresenter.php :


<?php declare(strict_types = 1);

namespace App;

use Nette;
use Contributte;

class BasePresenter extends Nette\Application\UI\Presenter
{

/** @var Nette\Localization\ITranslator @inject */
public $translator;

/** @var Contributte\Translation\LocalesResolvers\Session @inject */
public $translatorSessionResolver;

public function handleChangeLocale(string $locale): void
{
$this->redirect(‚this‘);
 }

public function renderDefault(): void
{
$this->translator->translate(‚domain.message‘);
$prefixedTranslator = $this->translator->createPrefixedTranslator(‚domain‘);
$prefixedTranslator->translate(‚message‘);
 }

}

Dakujem velmi pekne za kazdu pomoc

Editoval Tomas8698 (20. 1. 2021 15:43)

galab
Backer | 74
+
0
-

@Tomas8698
přidej do configu

localeResolvers:
	– Contributte\Translation\LocalesResolvers\Router
	- Contributte\Translation\LocalesResolvers\Session

Editoval galab (20. 1. 2021 15:15)

Tomas8698
Člen | 109
+
0
-

galab napsal(a):

@Tomas8698
přidej do configu

localeResolvers:
	– Contributte\Translation\LocalesResolvers\Router
	- Contributte\Translation\LocalesResolvers\Session

Dakujem za radu. Je potrebne to nejak zapisat specialne? lebo ked som to skopiroval ten druhy …/Session tak my hlasy chybu Bad indent on line … . A aj v phpstorme mam to podciarknute.

Mysteria
Člen | 797
+
0
-

Pravděpodobně problém mezery vs tabulátory pro odsazení. Musí se použít jenom jedno z nich, takže to sjednoť.

Gappa
Nette Blogger | 198
+
0
-

Tomas8698 napsal(a):

galab napsal(a):

@Tomas8698
přidej do configu

localeResolvers:
	– Contributte\Translation\LocalesResolvers\Router
	- Contributte\Translation\LocalesResolvers\Session

Dakujem za radu. Je potrebne to nejak zapisat specialne? lebo ked som to skopiroval ten druhy …/Session tak my hlasy chybu Bad indent on line … . A aj v phpstorme mam to podciarknute.

Jestli jsi to zkopíroval, tak ta první odrážka v ukázce kódu je nějaký druh pomlčky, to druhé je mínus, proto to asi řve :)

Tedy vs -.

Tomas8698
Člen | 109
+
0
-

Dakujem pekne chlapi, a ano bolo to tym minus.

Tomas8698
Člen | 109
+
0
-

Este mam jednu otazku
Pri nacitani textov z db mi nerozdeluje podla jazyka texty ale jednoducho mi ich vsetky vyhodi na stranku. Pouzivam loader a v tabulke mam locale kde si rozdelujem jazyky. Poslem priklad


Comon.neon


<?php
parameters:
    langs: [cs,en]


application:
	errorPresenter: Error
	mapping:
		*: App\*Module\Presenters\*Presenter


session:
	expiration: 14 days

extensions:
    translation: Contributte\Translation\DI\TranslationExtension

translation:
    locales:
        default: cs
        whitelist: [cs, en]
    dirs:
        - %appDir%/lang

    localeResolvers:
    		- Contributte\Translation\LocalesResolvers\Router
    		- Contributte\Translation\LocalesResolvers\Parameter
    		- Contributte\Translation\LocalesResolvers\Session
    		- Contributte\Translation\LocalesResolvers\Header
    loaders:
            nettedatabase: Contributte\Translation\Loaders\NetteDatabase
services:
    router: App\Router\RouterFactory::createRouter

?>

default.latte


<?php

{foreach $packages as $pakage}
                   	<div class="col-md-6 col-lg-4 col-xs-12 order_panel" >
						<div class="plan">
							<div class="plan-title">

								<h3>{$pakage['titleshort']}</h3>
								{*
								<small>{$pakage['price']} Kč</small>
								*}
							</div>

							{$pakage['textshort']|noescape}
							<br>
							<a n:href="Homepage:package $pakage['urlseo']" class="btn btn-warning">
								{_pricing.btn-princing}</a>
						</div>
					</div>

				{/foreach}
?>

<?php

INSERT INTO `packages` (`id`, `locale`, `urlseo`, `titlelong`, `textlong`, `titleshort`, `textshort`, `keywords`, `description`, `price`, `callaction`, `subject`, `formtitle`) VALUES
(1, 'cs_CZ', '-sr', 'GscisctLab nscasa vlcsasastscním sescrvsacesaru', 'sckbcaskcb', 'lprem ipsum', 'y nlyx'),
(2, 'en_US', '-------', 'ncsanlscnlasn', '<p>\r\nxc ns c,sc xy\r\n</p>\r\n    <p>\r\n     ......

?>

dakujem za pomoc

Editoval Tomas8698 (22. 1. 2021 9:40)

ali
Člen | 342
+
+1
-

@Tomas8698 prosimte, formatuj kod v prispevcich, to cos poslal nikdo cist nebude, viz → https://forum.nette.org/…v-tomto-foru

K prekladum, nedavno jsem napsal „realny“ test na DB preklady, cerpej inspiraci odtud → https://github.com/…atabase.phpt