2017-07-03 12 views
0

私はcakephp(3.2)用にContentManagerプラグインを作っています。基本翻訳ファイルは/plugins/ContentManager/src/Locale/ru/content_manager.poです。CakePHPプラグインの異なるファイルへのローカライゼーション

今、アプリケーションレベルでいくつかの追加翻訳を追加したいと思います。だから私はプラグインのためのいくつかの追加のファイルpoが必要です。もう1つcontent_manager.poファイルをapp\src\Locale\ruフォルダに置くと、ベースファイルが上書きされます。

content_manager.0.po, content_manager.base.poなどのファイルを追加してwhemを連携させることはできますか?とにかく私は何とかプラグインの推移を拡張する必要があります。

ベースファイルはようにこれらの

msgid "tab_MenuItems" 
msgid "content.type.News" 
msgid "users.role.admin" 

などの文字列が含まれています。

{foreach $registered_types as $ct} 
<li>{__d("content_manager", "content.type.$ct")}</li> 
{/foreach} 

答えて

1

あなたはアプリでruロケールをdefault.poファイルを追加することができます。

msgid "content.type.Products" 
msgid "content.type.Orders" 
msgid "users.role.manager" 

プラグイン自体は、この(smarty)などの翻訳を使用しています。
追加のファイルは次のようにアプリケーション固有の文字列が含まれていますこのファイルは、要求されたメッセージIDがプライマリドメインで見つからない場合に使用される、いわゆる "フォールバックローダー"によって、つまりcontent_manager.poでデフォルトで使用されます。場合

あなたは、あなたは常に、カスタムローダー/パッケージを構築することができますより多くの制御を必要とするような例:

use Cake\I18n\I18n; 
use Cake\I18n\MessagesFileLoader; 

I18n::config('content_manager', function ($name, $locale) { 
    $fileLoader = new MessagesFileLoader('content_manager', $locale, 'po'); 

    /* @var $package \Aura\Intl\Package */ 
    $package = $fileLoader(); 
    $package->setFallback('content_manager.base'); 

    return $package; 
}); 

これは、内部でプリロードローダーのデフォルトcontent_managerドメインのメッセージを作成し、設定しますフォールバックローダードメインをcontent_manager.baseに変更すると、デフォルトのドメインに翻訳が存在しない場合に備えて、content_manager.base.poファイルからメッセージをロードしようとします。

翻訳/ローダーの追加/変更後にキャッシュ(tmp/cache/persistent)をクリアすることを忘れないでください。

も参照してください

+0

はい、私は 'default.po'を使用できることを確認し、それは良い解決策ではありません私の場合は、他の翻訳に使用されているので私はそれらをミックスしたくありません。私はフォールバックについて少しお読みになりましたが、まだそれを使用しようとしていません。ありがとう、私は明日それをチェックします – teran

+0

hm、このコードを使用して、ローダーは 'src/Locale'フォルダに' base'ファイルを見つけようとします、そしてプラグインフォルダで検索しません。 – teran

+0

私は 'base'翻訳ドメインに独自の' MessagesFileLoad'クラスを実装し、 'translationsFolders'メソッドをオーバーライドする必要があります。 – teran