1

私は Zend Framework 2 プロジェクトで作業しており、ビュー ヘルパー (ブレッドクラム) を使用して、このナビゲーション コンポーネントをビューに挿入しています。

パンくずリストをレンダリングするには、次のコードを使用します。

<?php echo $this->navigation('Navigation')
                ->breadcrumbs()
                ->setLinkLast(false)               // link last page
                ->setMaxDepth(7)                   // stop at level 7
                ->setMinDepth(0)                   // start at level 0
                ->setSeparator(' »' . PHP_EOL);    // separator with newline
?>

プロジェクトのコンテンツのほとんどを次のコードで翻訳してきました

<?php echo $this->translate("Text to translate here", $textDomain); ?>

したがって、同じロジックを既存のコードに適用します。

<?php echo $this->translate($this->navigation('Navigation')
        ->breadcrumbs()
        ->setLinkLast(false)               // link last page
        ->setMaxDepth(7)                   // stop at level 7
        ->setMinDepth(0)                   // start at level 0
        ->setSeparator(' »' . PHP_EOL), "navigation");    // separator with newline
?> 

これは、パンくずリストを翻訳する最も効率的かつ/または正しい方法ですか? ここで「ナビゲーション」として設定されたテキスト ドメインは、この翻訳が存在する場所です。設定されていない場合、デフォルトで値「デフォルト」になります。

4

2 に答える 2

1

あなたは本当にこのようにすることはできません.HTMLを翻訳者に渡しています. ビューヘルパーでこれらのメソッドを使用するだけです。

$navHelper->setTranslator($yourTranslator);
$navHelper->setTranslatorTextDomain('de_DE');
$navHelper->setTranslatorEnabled(true); // (default)
$navHelper->setInjectTranslator(true); // to pass the translator down to menu/breadcrumbs etc. (default)
于 2012-10-22T21:47:25.350 に答える
1

ブレッドクラムの翻訳を修正するために、私はこれを行いました: すべてのトランスレーター構成を新しいファイルにカット/ペーストします: config/autoload/translator.global.php モジュールごとではなく、アプリケーション全体で 1 つの翻訳ファイルのみを使用します.. . ただし、モジュールごとに 1 つの翻訳ファイルがある場合は、ナビゲーション用に 1 つを選択してください ;) base_dir オプションを module/application/language に変更します。

<?php
return array(
    'translator' => array(
        'locale' => 'fr_FR',
        'translation_file_patterns' => array(
            array(
                'type'     => 'gettext',
                'base_dir' => __DIR__ . '/../../module/Application/language',
                'pattern'  => '%s.mo',
            ),
        ),
    ),
);

また、ナビゲーション構成配列を 1 つの autoload ファイルに入れました: config/autoload/navigation.global.php => 自動検出のために、ナビゲーション (私にとっては唯一のもの) を変換するために使用される poedit ファイルに新しいパスを追加します;)

このファイルでは、トランスレータのファクトリ メソッドを使用して特定のトランスレータをインスタンス化し、translate() メソッドを呼び出すだけです :) :

<?php
$config = require 'translator.global.php';
$options = (array)$config['translator'];
$translator = \Zend\I18n\Translator\Translator::factory($options);

return array(
    'navigation' => array(
        'default' => array(
            array(
                'label' => $translator->translate('Home'),
                'route' => 'home',
            ),
       [...]

そして、すべてがうまく機能するようになりました(ブレッドクラムも):)

私は自分のフォームで同じ翻訳の問題を抱えていましたが、最初に見つけたトリックは、フォームごとに新しいトランスレーターを作成しなくてもうまく機能します。唯一の問題は poedit 自動検出でした:

public/index.php にアンダースコア関数を作成します (zend では使用されませんが、poedit では認識されます)。

function _($str){
    return $str;
}

そして、そのようなフォームラベルを宣言するだけです:

'label' => _('My Label'),

poedit はそれを検出し、これらすべての新しい単語に対して poedit で少しの翻訳が機能する以外に何もせずにラベルを翻訳します;)

編集: 私は自分の beadcrumb 部分 phtml ファイルにバグがありました: 変換ビューヘルパーを呼び出しませんでした... (zend チュートリアルからコピーしただけで忘れてしまいました... ばかですよね? :D)

それが修正され、アンダースコア機能はフォームラベルやナビゲーションにも機能します...ブレッドクラムでさえも! 私の重いものはすべて、ナビゲーション構成配列でそれを呼び出す新しいトランスレーターを作成するのは役に立ちません:)

私はこのトリックをどこで手に入れたかを見つけました: => Zend Framework 2 でフォームラベルを変換するには? (最後のコメントで...実際の0よりも多く投票する必要があります;))

于 2013-12-22T02:03:12.287 に答える