Symfony - Internazionalizzazione

Internationalization (i18n) e Localization (l10n)contribuire ad aumentare la copertura del cliente di un'applicazione web. Symfony fornisce un eccellente componente di traduzione per questo scopo. Impariamo come utilizzare il componente Translation in questo capitolo.

Abilita traduzione

Per impostazione predefinita, il framework web Symfony disabilita il componente Translation. Per abilitarlo, aggiungi la sezione traduttore nel file di configurazione, app / config / config.yml.

framework: translator: { fallbacks: [en] }

File di traduzione

Il componente Translation traduce il testo utilizzando il file di risorse di traduzione. Il file di risorse può essere scritto in PHP, XML e YAML. La posizione predefinita del file di risorse èapp/Resources/translations. Ha bisogno di un file di risorse per lingua. Scriviamo un file di risorse,messages.fr.yml per la lingua francese.

I love Symfony: J'aime Symfony 
I love %name%: J'aime %name%

Il testo a sinistra è in inglese e il testo a destra è in francese. La seconda riga mostra l'uso di un segnaposto. Le informazioni segnaposto possono essere aggiunte dinamicamente durante l'utilizzo della traduzione.

Utilizzo

Per impostazione predefinita, il locale predefinito del sistema dell'utente sarà impostato dal framework web di Symfony. Se l'impostazione internazionale predefinita non è configurata nell'applicazione Web, verrà eseguito il fallback in inglese. La locale può essere impostata anche nell'URL della pagina web.

http://www.somedomain.com/en/index 
http://www.somedomain.com/fr/index

Usiamo la localizzazione basata su URL nel nostro esempio per comprendere facilmente il concetto di traduzione. Crea una nuova funzione,translationSample con percorso /{_locale}/translation/samplein DefaultController (src / AppBundle / Controller / DefaultController.php). {_locale} è una parola chiave speciale in Symfony per specificare il locale predefinito.

/** 
   * @Route("/{_locale}/translation/sample", name="translation_sample") 
*/ 
public function translationSample() { 
   $translated = $this->get('translator')->trans('I love Symfony'); 
   return new Response($translated); 
}

Qui abbiamo utilizzato il metodo di traduzione, trans, che traduce il contenuto nella lingua corrente. In questo caso, la locale corrente è la prima parte dell'URL. Ora, esegui l'applicazione e carica la pagina,http://localhost:8000/en/translation/sample nel browser.

Il risultato sarà "I love Symfony" in lingua inglese. Ora carica la paginahttp://localhost:8000/fr/translation/samplenel browser. Ora il testo sarà tradotto in francese come segue.

Allo stesso modo, il modello di ramoscello ha {% trans %}blocca per abilitare anche la funzione di traduzione nelle viste. Per verificarlo, aggiungi una nuova funzione,translationTwigSample e la vista corrispondente in app/Resources/views/translate/index.html.twig.

/** 
   * @Route("/{_locale}/translation/twigsample", name="translation_twig_sample") 
*/ 
public function translationTwigSample() { 
   return $this->render('translate/index.html.twig'); 
}

Visualizza

{% extends 'base.html.twig' %}  
{% block body %} 
   {% trans with {'%name%': 'Symfony'} from "app" into "fr" %}I love %name% {% endtrans %} 
{% endblock %}

Qui, il blocco trans specifica anche il segnaposto. Il risultato della pagina è il seguente.