Symfony 1.4兼容I18N翻译系统?
问题描述:
我正在将Symfony中的一个小应用程序迁移到单独的项目中,并且它唯一依赖的 Symfony组件是I18N字符串转换。由例如:Symfony 1.4兼容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 Components Translation。作曲家和自动加载将在您的常规php项目中提供。我推荐它。
我尝试了Symfony翻译组件,并跟进[另一个问题](http://*.com/questions/22063982),因为我无法让它工作。 – feklee
查看我更新的答案。使用Symfony 2的翻译组件排序工作,但我不得不删除''标签。 –
feklee
您的更新中的composer.json似乎有一些冗余行。如果您是包用户,通常只需要“需要”部分。当你制作并向其他人提供作曲家套装时,可能会有其他行。 – akky