我正在将一个小应用从symfony迁移到一个单独的项目中,唯一的 Symfony组件,它取决于I18N字符串转换。按示例:

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

是否有类似的,优选兼容的系统,可用作PHP包装?

我有兴趣用翻译保持xml文件,但我也可以 以不同的格式生活。

更新

我现在拥有的东西,灵感来自@ 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>
    
    .

    不幸的是,<note>元素导致错误消息,所以我 删除它。

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

有帮助吗?

解决方案

资源文件格式的名称是xliff。您可以找到XLIFF处理PHP包,以及XLiff2(您最喜欢的I18N格式)转换器。

您可以使用 symfony组件翻译即使您在新项目中不使用symfony。Composer和AutoLoad将在您的常规PHP项目上提供。我推荐它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top