Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Applicazioni Multilingua con Symfony2

Come realizzare applicazioni multilingua con Symfony2 e il servizio Translator, impariamo a definire il linguaggio di default e a tradurre stringhe sia nei controller che nei template
Come realizzare applicazioni multilingua con Symfony2 e il servizio Translator, impariamo a definire il linguaggio di default e a tradurre stringhe sia nei controller che nei template
Link copiato negli appunti

Il successo di un'applicazione è dato anche dalla sua capacità di raggiungere un numero elevato di utenti, spesso in tutto il Mondo. Diventa quindi essenziale sviluppare applicazioni che supportano il multingua. In questa lezione vedremo come gestire applicazioni multilingua attraverso il servizio Translator.

Configurare il servizio Translator

Per abilitare il servizio, apriamo il file app/config.yml e decommentiamo la riga:

framework:
    translator:      { fallback: "%locale%" }

L'impostazione fallback definisce il linguaggio di default delle stringhe quando non ci sono traduzioni disponibili. Nel nostro caso abbiamo definito in app/parameters.yml il valore en.

Il servizio Translator può essere usato sia all'interno del Controller che nelle singole viste. Prima di analizzare il funzionamento però, dobbiamo creare i file di traduzione.

All'interno del nostro bundle, nella cartella Resources andiamo a creare una sottocartella translations e creiamo il file Resources/translations/messages.it.xliff. Al suo interno andremo ad inserire il seguente contenuto:

<?xml version="1.0"?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
    <file source-language="en" datatype="plaintext" original="file.ext">
        <body>
            <trans-unit id="1">
                <source>Test Translation</source>
                <target>Test di Traduzione</target>
            </trans-unit>
        </body>
    </file>
</xliff>

Il file, in formato XLIFF, contiene una serie di coppie source-target attraverso le quali Symfony converte automaticamente il source nel target corrispondente.

Definire la lingua corrente

Symfony di default tenta di definire la lingua utilizzata dall'utente e quindi di fornire le opportune stringhe tradotte. All'interno di un controller vediamo come utilizzare il servizio Translator:

public function testAction()
{
    $translated = $this->get('translator')->trans('Test Translation');
    return new Response($translated);
}

Prima di aprire il nostro browser, però, dobbiamo svuotare la cache per far rilevare le nuove risorse di traduzione a Symfony:

$ php app/console cache:clear

A questo punto, aprendo il nostro browser dovremo avere a schermo la stringa tradotta in italiano. Nel caso in cui Symfony non sia in grado di rilevare automaticamente la lingua, possiamo forzarla noi all'interno del controllore:

use Symfony\Component\HttpFoundation\Request;
public function testAction(Request $request)
{
    $request->setLocale('it');
    $translated = $this->get('translator')->trans('Test Translation');
    return new Response($translated);
}

Una piccola nota sul controller appena visto: possiamo notare che è stato aggiunto come parametro un oggetto di tipo Request. Attraverso il Dependency Injection di Symfony visto nella lezione precedente, possiamo passare automaticamente la request al nostro controller senza la necessità di configurazioni ulteriori.

A questo punto settiamo il locale sull'italiano o comunque sulla lingua che vogliamo utilizzare e Symfony automaticamente forzerà le stringhe.

Tradurre stringhe nei template

Oltre che nei controller, è possibile tradurre le singole stringhe all'interno delle viste. Disponiamo di diverse modalità per tradurre una stringa:

{{ 'Test Translation'|trans }}
{% trans %}Test Translation{% endtrans %}

Abbiamo visto come sia semplice gestire le traduzioni delle stringhe utilizzando Symfony. Per approfondire l'argomento si può fare riferimento alla documentazione ufficiale. Nella prossima lezione, invece, vedremo come sfruttare la cache per velocizzare il caricamento delle pagine.

Ti consigliamo anche