Pregunta

Estoy migrando una pequeña aplicación de Symfony a un proyecto separado, y el único componente Symfony del que depende es la traducción de cadenas I18N.Por ejemplo:

  • 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 un sistema similar, preferiblemente compatible, disponible como paquete PHP?

Estoy interesado en mantener el xml Archivo con traducciones, pero también podría vivir con un formato diferente.

Actualizar

Lo que tengo ahora, inspirado en la respuesta 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>
    

    Desafortunadamente, el <note> El elemento causó mensajes de error, por lo que lo eliminé.

  • 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>
    
¿Fue útil?

Solución

El nombre del formato del archivo de recursos es XLIFF.Puede encontrar XLIFF manejando paquetes php, así como convertidores xliff2 (su formato i18n favorito).

Puedes utilizar Traducción de componentes Symfony incluso si no estás usando Symfony en el nuevo proyecto.Composer y la carga automática lo harán disponible en su proyecto PHP habitual.Lo recomiendo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top