1

私はZFCUserドイツのプロジェクトを使用しており、開発する必要があります。

残念ながら、ログイン フォームは英語であり、フォーム フィールドや特にエラー メッセージを英語に翻訳する方法が見つかりませんでした。

モジュールがメッセージを上書きするか、言語を切り替えるためのグローバルな方法はありますか?

ありがとう!

編集:

これは私のブートストラップでの翻訳者の呼び出しです:

$translator = new Translator();
    $translator->addTranslationFile(
        'phpArray',
        'vendor/zendframework/zendframework/resources/languages/de/Zend_Validate.php',
        'default',
        'de_DE'
    );
    AbstractValidator::setDefaultTranslator($translator);

編集 II:

私のカスタム翻訳ファイル:

<?php

return array(

    // ZFCUser
    "Authentication failed. Please try again." => "test"

);

私の工場:

<?php

class CustomTranslatorFactory implements FactoryInterface
{
    public function createService(ServiceLocatorInterface $sl)
    {
        $translator = new Translator();
        $translator->addTranslationFile(
            'phpArray',
            'vendor/.../TranslationTable.php',
            'default',
            'de_DE'
        );
        return $translator;
    }
}

私の User モジュールからの Module.php:

public function getServiceConfig()
{
    return array(
        'factories' => array(
            'translator' => 'Path\To\Translator\CustomTranslatorFactory',
        ),
    );
}

編集 III:

私の翻訳者はこんな感じです。配列の代わりに PHP ファイルを使用しても、何も起こりません。エラーなし、翻訳なし。私が間違っていることはありますか?

    $custom_translations = array(
        "Authentication failed. Please try again." => "test",

    );

    $translator = new Translator();
    $translator->addTranslationFile(
        'phpArray',
        'vendor/zendframework/zendframework/resources/languages/de/Zend_Validate.php',
        'default',
        'de_DE'
    );
    $translator->addTranslationFile(
        'phpArray',
        $custom_translations
    );
    return $translator;
4

2 に答える 2

1

参考までに - 昨日からモジュール式の de_DE 変換が利用可能になりました (pl_PL と ja_JP も利用可能です)。メッセージのみをカバーしてZfcUserいるため、すべてのバリデータではなく、フォーム ラベルなどをカバーしています。 https://github.com/websafe/zf-mod-zfc-user-i18n-de-de

于 2013-11-12T15:39:52.203 に答える
1

コメント セクションでは複雑になりすぎているため、その回答を作成しています。

バリデータ ライブラリは、独自にメッセージの翻訳を行います。翻訳者を割り当てたので、検証メッセージは問題ありません。

ただし、フォーム ラベルの翻訳は別のライブラリに属しています。したがって、彼らには翻訳者が割り当てられている必要があります。上記のコメントで述べたように、手動で ( を呼び出して$viewHelper->setTranslator($translator)) 実行するか、ViewHelperManager に実行させることができます。

2 番目のケースをサポートするようにコードを簡単にリファクタリングできます。

  1. トランスレータのファクトリ クラスを作成します。
  2. その工場を SM に登録します。「翻訳者」キーを使用します。
  3. 必要な場合は$translation、今後 SM から変数を取得してください。

例 (useはスキップ):

/** One of your modules, should be a base module that's always loaded */
class Module
{

    // ...

    public function getServiceConfig()
    {
        return array(
            'factories' => array(
                'translator' => 'Your\Translator\Factory', // could also be a closure (anonymous function)
            )
        );
    }
}

-

class YourTranslatorFactory implements FactoryInterface
{
    public function createService(ServiceLocatorInterface $sl)
    {
        $translator = new Translator();
        $translator->addTranslationFile(
            'phpArray',
            'vendor/zendframework/zendframework/resources/languages/de/Zend_Validate.php',
            'default',
            'de_DE'
        );
        return $translator;
    }
}

アクセスする必要がある場合は、慣れているように SM から簡単に取得できます ( $translator = $sm->get('translator');)。

注: バリデータはTranslatorAwareInterface. これは、translatorSM にキーを登録した場合、それらも自動的にバリデーターに挿入される必要があることを意味します。したがって、静的メソッドの呼び出しをスキップすることもできます。

また、注意: これは、あまり変更せずに実行できる方法の単なる例です。構成だけでこの目標を達成することもできます。

于 2013-01-10T10:41:18.393 に答える