Symfony 1.4 互換の I18N 翻訳システム?
-
21-12-2019 - |
質問
私は小さなアプリを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 です。php パッケージを処理する XLIFF や、xliff2 (お気に入りの i18n 形式) コンバーターが見つかるかもしれません。
使用できます Symfony コンポーネントの翻訳 新しいプロジェクトで Symfony を使用していない場合でも。Composer と autoload を使用すると、通常の PHP プロジェクトで利用できるようになります。私はそれをお勧めします。
所属していません StackOverflow