Translations

Je kent ze vast wel, van die websites waar je kan kiezen in welke taal je ze wilt zien. Symfony kan je hier grote diensten bewijzen want dit is vaak een nogal heidens karwei. Denk er maar eens aan als er een taal bij moet worden geprogrammeerd, bij Symfony hoef je dan alleen een vertalingsbestand te maken.

Installatie:

composer require symfony/translation

Configuratie

Geef de standaard taal aan in config/packages/translation.yaml

framework:
    default_locale: en
    translator:
        default_path: '%kernel.project_dir%/translations'
        fallbacks:
            - en

Vertalingsbestand in /translations

Symfony gaat nu op zoek in /translations naar een vertalingsbestand met en in de naam. Wordt dit niet gevonden of het vertalingsbestand is leeg zal Symfony kijken naar fallbacks. Een vertalingsbestand kan je bijvoorbeeld messages.en.yaml noemen:

Dit is een Symfony testwebsite van Caspar: This is a testwebsite made by a geeky guy called Caspar
Hallo: Hello
Huidig ingestelde taal: Your language

Gebruik

Je kan nu _locale gebruiken in een Route:

@Route("/{_locale}/toevoegen",name="toevoegen")

Of je kan via een Request Object opvragen wat de huidige taal is:

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;

class SymfonyPaginaController extends AbstractController
{
    /**
     * @Route("/pagina", name="symfony_pagina")
     */
    public function index(Request $request)
    {
        //--- En hier vragen we de taal op
        $language = $request->getLocale();
        //--- En geven deze door aan Twig
        return $this->render('symfony_pagina/index.html.twig', [
            'controller_name' => 'SymfonyPaginaController',
            'language' => $language
        ]);
    }
}

Twig en het vertalingsbestand.

Twig kan de pagina netjes voor je gaan vertalen, gebaseerd op het vertalingsbestand /translations/messages.en.yaml.

{% extends 'base.html.twig' %}

{% block title %}{% trans %}Hallo{% endtrans %} Controller{% endblock %}

{% block body %}
    <h1>{% trans %}Hallo{% endtrans %} {{ controller_name }}! </h1>
    <p>{% trans %}Dit is een Symfony testwebsite van Caspar{% endtrans %}</p>
    <p>{% trans %}En helemaal herschreven via 'trans' in Twig via de 'default locale'!{% endtrans %}</p>
    <p>{% trans %}Huidig ingestelde taal{% endtrans %}: {{ language }}</p>
{% endblock %}