現在のphtmlファイルで使用されている翻訳csvファイルを知る方法


回答:


3

私はあなた$this->__('...')が明示的なヘルパーが使用されていない場所で翻訳を意味すると思います。次に、それはブロックのモジュールスコープに依存します

これは複数の要因に依存します:

  1. テンプレートのレンダリングに使用されているブロッククラス。レイアウトXMLファイルからそれを判別できるはずですが、一部のブロックはプログラムで作成されます。この場合、コードを検索する必要があります。運が良ければ、ブロッククラスは次のようにテンプレート自体に文書化されます。

    /** @var $this Mage_Catalog_Block_Product_List */

    またはこのように:

    /** @see Mage_Catalog_Block_Product_List */

    スコープは、このクラスが属するモジュールです(などMage_Catalog)。ただし、クラスの書き換えには注意してください。ブロッククラスが拡張機能によって書き換えられた場合、スコープはこの拡張機能に変更されます。

  2. プロパティmodule_nameが設定されている場合(レイアウトXMLなどを介して)、これが優先されます。
  3. 最後に、ブロックがgetModuleName()メソッドをオーバーライドすると、このメソッドから返されたスコープが使用されます。

もう着いたの?

スコープがわかったので、このモジュールので定義されているCSVファイルを検索できますconfig.xml。また、複数の場合もありますが、一般的に従う規則は、フォーム内のモジュールごとに1つのファイルを持つことですModule_Name.csv

  1. このファイルに翻訳対象の文字列が含まれている場合は、それが見つかります。ただしtranslate.csv、テーマにがある場合を除き、これはこの正確なスコープの翻訳を上書きします(例:)"Module_Name::Foo","Foo"

  2. 両方にない場合は、モジュールスコーププレフィックスなしの翻訳を探しますtranslate.csv(存在する場合)。

  3. そこにない場合は、他のすべてのモジュールCSVファイルを検索してください。最初にロードされたモジュールからのものが勝ちます(つまり、最初にコアモジュール、次に依存関係を尊重してアルファベット順)。このフォールバック、開発者モードでない場合にのみ使用されることに注意してください。


ページの特定の翻訳がどのファイルからのものかを確認したい場合は、無料の拡張機能TranslationHintsをお勧めします(免責事項私が作成しました)

ここで入手:https : //github.com/schmengler/TranslationHints

スクリーンショット: 翻訳のヒント


2

単体テストをしているのでない限り、Magentoが何かの翻訳を開始する前にそれらがすべてマージされるため、通常はどの翻訳csvが使用されているかを気にしません。

ただし、それでも解決したい場合は、まずレイアウトxmlファイルを使用して、どのブロッククラスが使用されているかを確認します。ブロッククラスが見つかると、そのモジュールのconfig.xmlが使用されます。レイアウトでブロッククラスが指定されていない場合は、親ブロッククラスとコントローラーを調べる必要がある場合があります。

知っておくべき主なことは、テンプレートは関連するブロッククラスの__変換関数を使用し、ブロッククラスはモジュールのData.phpヘルパークラスの__関数を使用することです。


1
「通常、どのcsvが使用されているかは気にしません。なぜなら、Magentoが何かの翻訳を開始する前にそれらがすべてマージされるためです。」-既存の翻訳パッケージの単体テストを除く。QAチームにする前に、英語、スペイン語、またはフランス語が欠けていると、通常、モジュールが失敗します。
ルークA.レーバー

1

翻訳を追加するときは、整理しておく必要があるようです。翻訳用の非常に多くのCSVファイルがあるのに、なぜランダムファイルを選択するのでしょうか?それを正しいCSVファイルに追加してみませんか?

これが私が取り組んでいる例です:顧客のアカウントページを編集していて、アドレス帳My Addressesに変更したとします。現在、マイアドレスにフランス語の翻訳は表示されていません。

適切なCSVファイルを見つける方法は、サイトの同じ部分で既存の翻訳を検索することです。My Orders / Mes Commandesというアイテムがサイトの同じ部分にあるため、検索を実行できます。

$ cd magento/app/
$ find . -iname '*.csv' | xargs grep -in --color 'Mes Commandes'
./locale/fr_FR/Mage_Sales.csv:73:"Back to My Orders","Retour à mes commandes"
./locale/fr_FR/Mage_Sales.csv:308:"My Orders","Mes commandes"
./locale/fr_FR/Mage_Sales.csv:309:"My Orders - Details","Mes commandes - Détails"
./locale/fr_FR/Mage_Oscommerce.csv:7:"Back to My Orders","Retour à mes commande "
./locale/fr_FR/Mage_Oscommerce.csv:51:"My Previous Orders","Mes commandes précédentes"
./locale/fr_FR/Mage_Customer.csv:215:"My Orders","Mes commandes"

したがって、少し推測してこれを見ると、変更するのに最適なファイルはlocale / fr_FR / Mage_Sales.csvです。変更を行った後、リフレッシュすることを忘れないでください翻訳を下の[システム]> [キャッシュ管理

補足:大文字と小文字を区別しないオプションに注意してください。-iname以下のためのfind、および-iのためにgrep。これらは、狩猟に費やす必要のある労力を軽減します。--colorオプションはここに反映していないが、出力はあなたがここで見るものに比べてはるかに読みやすいでしょう。


0

テンプレートで使用される__()変換メソッドは/app/code/core/Mage/Core/Block/Abstract.phpファイルにあり、正しい変換を見つけるためにモジュール名を受け取ります。これは、変換に使用される次の形式で配列を作成します。

array(1) {
    [0]=> object(Mage_Core_Model_Translate_Expr)#161 (2) {
        ["_text":protected]=> string(18) "Orders and Returns"
        ["_module":protected]=> string(10) "Mage_Sales"
    }
}

テンプレートが使用しているモジュール名を確認したい場合は、関数を呼び出すことができます。

 $this->getModuleName();

次に、この文字列に一致する翻訳ファイルがあるはずです。たとえば、カテゴリビューページでは、この関数は* Mage_Catalog *を返し、これから翻訳ファイルMage_Catalog.csvを見つけることができます


この大きなAbstract.phpファイルのどの行ですか?
Vicky Dev
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.