Système de traduction I18N compatible Symfony 1.4 ?
-
21-12-2019 - |
Question
Je migre une petite application de Symfony dans un projet séparé, et le seul composant Symfony dont il dépend est la traduction de chaîne i18n.Par exemple:
action.class.php
:$this->culture = 'pt_BR';
templates/search_box.php
:<h1><?php echo __('Destination') ?></h1>
i18n/pt_BR/messages.xml
:<?xml version="1.0" encoding="UTF-8"?> <xliff version="1.0"> <file datatype="plaintext" source-language="en" target-language="pt_BR" original="messages"> <body> <note> SEARCH BOX </note> <trans-unit id="0"> <source>Destination</source> <target>Destino</target> </trans-unit> </body> </file> </xliff>
Existe-t-il un système similaire, de préférence compatible, disponible sous forme de package PHP ?
Je suis intéressé à garder le xml
Déposer avec des traductions, mais je pourrais également vivre avec un format différent.
Mise à jour
Ce que j'ai maintenant, inspiré de la réponse de @akky :
composer.json
:{ "name": "example/layout", "description": "Provides common layout components such as header / footer.", "license": "proprietary", "require": { "symfony/translation": "2.4.*", "symfony/config": "~2.0" } }
i18n/messages.pt_BR.xliff
:<?xml version="1.0" encoding="utf-8"?> <xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2"> <file source-language="en" datatype="plaintext" original="messages"> <body> <trans-unit id="0"> <source>Destination</source> <target>Destino</target> </trans-unit> </body> </file> </xliff>
Malheureusement, le
<note>
L'élément a provoqué des messages d'erreur, et je l'ai donc supprimé.public/helper.inc.php
:<?php require_once '../vendor/autoload.php'; use Symfony\Component\Translation\Translator; use Symfony\Component\Translation\MessageSelector; use Symfony\Component\Translation\Loader\ArrayLoader; use Symfony\Component\Translation\Loader\XliffFileLoader; use Symfony\Component\Config\Resource\FileResource; $loader = new XliffFileLoader(); $catalogue = $loader->load('../i18n/messages.pt_BR.xliff', 'pt_BR'); function __($text) { global $catalogue; return $catalogue->get($text); }
public/header.php
:<?php require_once('helper.inc.php') ?> <h1><?php echo __('Destination') ?></h1>
La solution
Le nom du format de fichier de ressources est XLIFF.Vous pouvez trouver des packages PHP gérant XLIFF, ainsi que des convertisseurs xliff2 (votre format i18n préféré).
Vous pouvez utiliser Traduction des composants Symfony même si vous n'utilisez pas Symfony dans le nouveau projet.Composer et autoload le rendront disponible sur votre projet php habituel.Je le recommande.