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>
    
Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top