Jak rychle udělat vícejazyčný web s contributte/translation (Návod)
- ludek
- Člen | 83
Návod – rychlovka v češtině, jak udělat jednoduše multijazyčný web s použitím contributte/translation.
1. stáhnout do projektu:
composer require contributte/translation
2. konfigurace:
→ app/config/local.neon
# zaregistrovat rozšíření
extensions:
translation: Contributte\Translation\DI\TranslationExtension
# nastavit
translation:
locales:
whitelist: [en, fr, cs]
default: en
fallback: [en]
dirs:
- %appDir%/lang # kde budou překlady: → /app/lang/*.neon
returnOriginalMessage: true # to not translate undefined messages, default is true
# z čeho se pozná, jaká jazyková verze se má zobrazit:
localeResolvers:
- Contributte\Translation\LocalesResolvers\Router # z routeru
3. router:
→ app/Router/RouterFactory.php
public static function createRouter(): RouteList
{
$router = new RouteList;
// $router->addRoute('<presenter>/<action>[/<id>]', 'Homepage:default'); /* původní */
$router->addRoute('[<locale=fr en|fr|cs>/]<presenter>/<action>[/<id>]', 'Homepage:default'); /* upravený */
return $router;
}
4. BasePresenter:
→ app/presenters/BasePresenter.php
/** @persistent */
public $locale; // informace o jazykové verzi v persistentní proměnné
protected function startup() {
$this->template->locale = $this->locale; // poslat do šablony
parent::startup();
}
5. přepínání jazyků:
→ templates/@layout.latte
{* přepínání jazyků *}
<a n:href="this, locale:cs">Česky</a> |
<a n:href="this, locale:en">English</a> |
<a n:href="this, locale:fr">Français</a>
6. překlady:
→ soubory v adresáři app/lang/
soubor ui.cs.neon
welcome: Vítejte!
soubor ui.en.neon
welcome: Welcome!
soubor ui.fr.neon
welcome: Bienvenue!
7. šablona:
→ templates/Homepage.default.latte
<div class="row">
<div class="col">
<h1>
{_ ui.welcome} {* <--- tady to je, použije se řetězec welcome ze souboru s názvem ui.[jazyk].neon *}
</h1>
{* obsah podle jazykové verze: *}
{if $locale =='fr'}
{include file 'sablona1.latte'}
{elseif $locale =='cs'}
{include file 'sablona2.latte'}
{else}
{include file 'ostatni.latte'}
{/if}
</div>
</div>
- Další možnosti použití v dokumentaci.
- Pokud to nějak „blbne“, smažte pracovní soubory v
temp/cache/translation
. - Všimněte si ikonky na TRACY debug baru.
- Vyzkoušeno na Nette 3.1, PHP 8.1.