eiqd_g
Last Updated: February 25, 2016
·
13.75K
· emgiezet
736212 10200976756252420 836055407 o

Symfony2 - The translation miracle

Many times when project is almost ready customer brings you a change request and say:

"We forget about language versions so there will be 4 of them for the entire site"

Budget is burned. It's late at night. You need a miracle.

The miracle tutorial begins here:

Install:
http://jmsyst.com/bundles/JMSI18nRoutingBundle

and

http://jmsyst.com/bundles/JMSTranslationBundle

Simply add those two to your composer.json file:

#composer.json
"require": {
    "jms/i18n-routing-bundle": "dev-master",
    "jms/translation-bundle": "1.1.*"
}

run the:

$php composer.phar update

Enable the bunldes in your AppKernel.php

$bundles = array (
    ...
    new JMS\I18nRoutingBundle\JMSI18nRoutingBundle(),
    new JMS\TranslationBundle\JMSTranslationBundle(),
);

Edit your config.yml:

jms_i18n_routing:
    default_locale: pl
    locales: [de, en, pl]
    strategy: prefix_except_default

Poof!

So right now you got 3 languages enabled on your site. Check it just by entiering your project with acmedemoapp.com/en prefix :)

look at the:

php app/console router:debug

Poof!

So many localized routes! YAY!

Ok but i still got only one messages translation.

Extract string to translations from your code!

ekhm... I can't gettext dude.

Poof!

Use the symfony command luke!
~ Master Yoda

Just like that:

$php app/console translation:extract pl --bundle=AcmeDemoBundle --enable-extractor=jms_i18n_routing --output-format=yml --exclude-dir=Tests

It don't go I'm using behat and throws an error.

add this:

--exclude-dir=Features

Repeat this for all your bundles.

Poof!

You can send the translations file to the customer. They will take care of the rest!

Say Thanks
Respond

10 Responses
Add your response

7389

but do not understand where I can then enter the translations

over 1 year ago ·
7390
736212 10200976756252420 836055407 o

@ramondevesag You got all the translations exported per bundle to files in Resources/translations
in one of selected formats( xliff, gettext, yaml )

over 1 year ago ·
7391

but if for example I introduce the data using a form to a database and then I collect the data from the database? For I understand that the file is not static?

over 1 year ago ·
7392
736212 10200976756252420 836055407 o
over 1 year ago ·
11645
3378f67912b715db99660b5a97378268 normal

Hello! Great tutorial, I've followed it and now I have the translation files of my routes, the problem is I'm only getting the language prefix in all the routes like:

  • en/hello
  • es/hello

What I want is:

  • en/hello
  • es/hola

I've changed the generated translation files, but doesn't seems to work, any help?

Thanks a lot!

over 1 year ago ·
11751
736212 10200976756252420 836055407 o

@polsola did you cleared the cache?

over 1 year ago ·
13536
Main pic google nexus prime logo transformers optimus magic

Did you also manage the security component (login check route path) for logging in user ?

over 1 year ago ·
13542
736212 10200976756252420 836055407 o

@ardianys: You can give to the security paths the route names. So for ex:

security:
    firewalls:
        main:
            switch_user:        false
            context:            user
            pattern:            .*
            form_login:
                provider:       fos_userbundle
                login_path:     fos_user_security_login
                use_forward:    false
                check_path:     fos_user_security_check
                failure_path:   null
            logout:             true
            anonymous:          true
over 1 year ago ·
15912

Thank you Max, you saved my day!

over 1 year ago ·
15920
736212 10200976756252420 836055407 o

@gpaton you're welcome!

over 1 year ago ·