Domanda

Sto migrando una piccola applicazione da Symfony in un progetto separato, e l'unico Il componente di Symfony da cui dipende è la traduzione di stringhe I18N.Per esempio:

  • 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>
    

Esiste un sistema simile, preferibilmente compatibile, disponibile come pacchetto PHP?

Sono interessato a mantenere il xml file con le traduzioni, ma potrei anche vivere con un formato diverso.

Aggiornamento

Quello che ho adesso, ispirato dalla risposta di @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>
    

    Sfortunatamente, il <note> L'elemento ha causato messaggi di errore e così l'ho rimosso.

  • 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>
    
È stato utile?

Soluzione

Il nome del formato del file di risorse è XLIFF.Potresti trovare XLIFF che gestisce pacchetti php, nonché convertitori xliff2 (il tuo formato i18n preferito).

Puoi usare Traduzione dei componenti Symfony anche se non stai usando Symfony nel nuovo progetto.Il compositore e il caricamento automatico lo renderanno disponibile sul tuo normale progetto php.Lo consiglio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top