So che questo è vecchio ma, ho trovato questa domanda mentre ero alla ricerca di una risposta. Trovo anche una bella guida, link qui sotto.
Uno dei modi per farlo per creare un componente e bootstrap che, in questo modo:
Creare un file, per esempio, comuni/componenti/LanguageSelector.php
<?php
namespace common\components;
use yii\base\BootstrapInterface;
class LanguageSelector implements \yii\base\BootstrapInterface
{
public $supportedLanguages = [];
public function bootstrap($app)
{
$preferredLanguage = $app->request->getPreferredLanguage($this->supportedLanguages);
$app->language = $preferredLanguage;
}
}
Sono utilizzando il modello di app avanzato, è possibile regolare la posizione del file e lo spazio dei nomi secondo necessità.
Poi, nel file di configurazione, è necessario aggiungere questo componente, proprio come si sta aggiungendo un altro componente, come il debug, o entra componenti, in questo modo:
'components' => [
'languageSelector' => [
'class' => 'common\components\LanguageSelector',
'supportedLanguages' => ['en-US', 'tr-TR'],
],
],
Inoltre, è necessario aggiungere questo componente di componenti bootstrap nel file di configurazione:
'bootstrap' => ['languageSelector', ...]
Questo approccio non si basa su cookie tuttavia, si basa sulla lingua del browser client. Puoi anche trovare un esempio nella pagina seguente su come ottenere la selezione della lingua basata sulle preferenze. Ma in pratica quello che devi fare è, nel tuo componente languageSelector, ottenere il valore dal cookie e cambiare la lingua di conseguenza. Se non è presente un cookie nel browser dell'utente, è possibile eseguire il fallback nella lingua del browser.
https://github.com/samdark/yii2-cookbook/blob/master/book/i18n-selecting-application-language.md
Questo non funziona per il modello base YII2 - la lingua visibile del sito rimane 'en' –