Jak rychle udělat vícejazyčný web s contributte/translation (Návod)

ludek
Člen | 83
+
+6
-

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.