Nette Documentation Preview

syntax
Překládání formulářů a šablon
*****************************

.[perex]
Pokud programujete vícejazyčnou aplikaci, budete nejspíš potřebovat stejnou stránku nebo formulář vykreslit v různých jazykových mutacích.

Nette Framework k tomuto účelu definuje rozhraní pro překlad [api:Nette\Localization\Translator], které má jedinou metodu `translate()`. Ta přijímá zprávu `$message`, což zpravidla bývá řetězec, a libovolné další parametry. Úkolem je vrátit přeložený řetězec.

V Nette není žádná výchozí implementace, můžete si vybrat podle svých potřeb z několika hotových řešeních, které najdete na [Componette |https://componette.org/search/localization]. V jejich dokumentaci se dozvíte, jak translator konfigurovat.

K objektu translatoru se potom ve svém kódu dostanete tak, že si jej necháte předat pomocí [dependency injection |/dependency-injection/passing-dependencies].

Od nette/utils verze 3.2 je název rozhraní `Nette\Localization\Translator`, tedy bez prefixu `I`.


Překlad formulářů
-----------------

[Formuláře|/forms/@home] podporují vypisování textů přes translator. Předáme jim ho pomocí metody `setTranslator()`:

```php
$form->setTranslator($translator);
```

Od této chvíle se nejen všechny popisky, ale i všechny chybové hlášky nebo položky select boxů přeloží do jiného jazyka.

U jednotlivých formulářových prvků je přitom možné nastavit jiný překladač nebo překládání úplně vypnout hodnotou `null`:

```php
$form->addSelect('carModel', 'Model:', $cars)
	->setTranslator(null);
```

U [validačních pravidel|/forms/validation] se translatoru předávají i specifické parametry, například u pravidla:

```php
$form->addPassword('password', 'Heslo:')
	->addCondition($form::MIN_LENGTH, 'Heslo musí mít alespoň %d znaků', 8);
```

se volá translator s těmito parametry:

```php
$translator->translate('Heslo musí mít alespoň %d znaků', 8);
```

a tedy může zvolit správný tvar plurálu u slova `znaky` podle počtu.


Překlad šablon
--------------

Šablonám [Latte|latte:] lze nastavit překladač metodou `setTranslator()`:

```php
protected function beforeRender(): void
{
	// ...
	$this->template->setTranslator($translator);
}
```

Poté lze překladač používat jako filtr `|translate`:

```latte
<a href="basket">{='Košík'|translate}</a>
<span>{$item|translate}</span>
```

Je k dispozici podtržítková značka:

```latte
<a href="basket">{_'Košík'}</a>
<span>{_$item}</span>
```

Pro překlad části šablony existuje párová značka `{translate}` (od Latte 2.11, dříve se používala značka `{_}`):

```latte
<a href="order">{translate}Objednávka{/translate}</a>
```

{{priority: -1}}
{{sitename: Best Practices}}

Překládání formulářů a šablon

Pokud programujete vícejazyčnou aplikaci, budete nejspíš potřebovat stejnou stránku nebo formulář vykreslit v různých jazykových mutacích.

Nette Framework k tomuto účelu definuje rozhraní pro překlad Nette\Localization\Translator, které má jedinou metodu translate(). Ta přijímá zprávu $message, což zpravidla bývá řetězec, a libovolné další parametry. Úkolem je vrátit přeložený řetězec.

V Nette není žádná výchozí implementace, můžete si vybrat podle svých potřeb z několika hotových řešeních, které najdete na Componette. V jejich dokumentaci se dozvíte, jak translator konfigurovat.

K objektu translatoru se potom ve svém kódu dostanete tak, že si jej necháte předat pomocí dependency injection.

Od nette/utils verze 3.2 je název rozhraní Nette\Localization\Translator, tedy bez prefixu I.

Překlad formulářů

Formuláře podporují vypisování textů přes translator. Předáme jim ho pomocí metody setTranslator():

$form->setTranslator($translator);

Od této chvíle se nejen všechny popisky, ale i všechny chybové hlášky nebo položky select boxů přeloží do jiného jazyka.

U jednotlivých formulářových prvků je přitom možné nastavit jiný překladač nebo překládání úplně vypnout hodnotou null:

$form->addSelect('carModel', 'Model:', $cars)
	->setTranslator(null);

validačních pravidel se translatoru předávají i specifické parametry, například u pravidla:

$form->addPassword('password', 'Heslo:')
	->addCondition($form::MIN_LENGTH, 'Heslo musí mít alespoň %d znaků', 8);

se volá translator s těmito parametry:

$translator->translate('Heslo musí mít alespoň %d znaků', 8);

a tedy může zvolit správný tvar plurálu u slova znaky podle počtu.

Překlad šablon

Šablonám Latte lze nastavit překladač metodou setTranslator():

protected function beforeRender(): void
{
	// ...
	$this->template->setTranslator($translator);
}

Poté lze překladač používat jako filtr |translate:

<a href="basket">{='Košík'|translate}</a>
<span>{$item|translate}</span>

Je k dispozici podtržítková značka:

<a href="basket">{_'Košík'}</a>
<span>{_$item}</span>

Pro překlad části šablony existuje párová značka {translate} (od Latte 2.11, dříve se používala značka {_}):

<a href="order">{translate}Objednávka{/translate}</a>