header
Informatique

Problème de traduction d'interface avec Symfony 1.1 ?

parArkenle 11.Feb.2009

Objectif du jour : rendre mon site savedgames.net multilingue (enfin tout du moins bilingue dans un premier temps, à savoir Anglais par défaut, et Français).

Je me précipite évidemment sur la doc et je fais les choses suivantes :

dans mon settings.yml :

all:
  .settings:
     default_culture: en
     i18n: on
     standard_helpers: [I18n, Partial, Cache, Form]
     charset: utf-8

Je créé un fichier XLIFF messages.fr.xml contenant toutes mes traductions :

<?xml version="1.0" ?>
<xliff version="1.0">
  <file original="global" source-language="en" datatype="plaintext">
    <body>
      <trans-unit id="1">
        <source>Game version</source>
        <target>Version du jeu</target>
      </trans-unit>
      <trans-unit id="2">
        <source>Language</source>
        <target>Langue</target>
      </trans-unit>
    </body>
  </file>
</xliff>

...que je sauvegarde bien en UTF-8 (c'est important) et place soigneusement dans le répertoire i18n de mon application frontend.

Super, ça à l'air trop simple - me dis-je...

Premier constat : malgré mon standard_helpers: [I18n, Partial, Cache, Form], je me prend un erreur comme quoi les helpers i18n restent introuvables...bon, je me paluche donc un <?php use_helper('I18N') ?> dans chacun de mes template faisant appel aux helpers en question.

Deuxième constat : rien n'est traduit !

Là, je tords ma configuration dans tous les sens, renomme mon fichier XLIFF en messages.fr_FR.xml, change le source-language à l'interieur en en_US, bref, j'essaye à peut près tout et n'importe quoi pendant à peu près 1h30...moment où mes nerfs commencent un peu à lâcher...jusqu'à ce post miraculeux.

La solution est en fait simple : c'est visiblement un bug de Symfony, le i18n: on dans le all, n'a aucun effet, il faut le spécifier pour chaque environnement :

prod:
  .settings:
    i18n: on
    no_script_name:         on
    logging_enabled:        off

dev:
  .settings:
    i18n: on
    error_reporting:        <?php echo (E_ALL | E_STRICT)."\n" ?>
    web_debug:              on
    cache:                  off
    no_script_name:         off
    etag:                   off

test:
  .settings:
    i18n: on
    error_reporting:        <?php echo ((E_ALL | E_STRICT) ^ E_NOTICE)."\n" ?>
    cache:                  off
    web_debug:              off
    no_script_name:         off
    etag:                   off
   

...et comme par miracle, tout fonctionne.


Tags : symfony  interface  translation  problem  traduction  i18n 
commentaires
Anonyme
19.12.2011  16:56
Merci tu me sauves la vie ;)


Code de confirmation
Confirmer

Les cigares, vous les aimez comment ?
23%
70%
7%