【问题标题】:Symfony 1.4 compatible I18N translation system?Symfony 1.4 兼容I18N 翻译系统?
【发布时间】:2014-03-29 21:32:31
【问题描述】:

我正在将一个小应用程序从 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>
    

    不幸的是,&lt;note&gt; 元素导致了错误消息,所以我 删除它。

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

【问题讨论】:

    标签: php internationalization symfony1 symfony-1.4 xliff


    【解决方案1】:

    资源文件格式的名称是 XLIFF。您可能会发现 XLIFF 处理 php 包,以及 xliff2(您最喜欢的 i18n 格式)转换器。

    即使你在新项目中没有使用 Symfony,你也可以使用 Symfony Components Translation。 Composer 和 autoload 将使它在您的常规 php 项目中可用。我推荐它。

    【讨论】:

    • 我尝试了 Symfony 翻译组件,并跟进了 another question,因为我无法让它工作。
    • 查看我的更新答案。使用 Symfony 2 的翻译组件有点工作,但我不得不删除 &lt;note&gt; 标签。
    • 您更新中的 composer.json 似乎有一些多余的行。如果您是包用户,您通常只需要“需要”部分。其他行可能适用于您制作并向他人提供作曲家包时。
    • 我遇到了composer install 不遵循依赖项的问题。这就是为什么我添加了额外的字段,让composer validate 开心。最终,我手动添加了symfony/config,这是symfony/translation 所需要的。它没有作为依赖项自动安装。
    猜你喜欢
    • 1970-01-01
    • 2011-08-23
    • 2011-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-12
    • 1970-01-01
    • 2011-04-02
    相关资源
    最近更新 更多