Magento2:言語パックでオーバーライドはどのように変換されますか?


9

app/i18n/magento2translations/language_nl_nl/はファイルnl_NL.csvで言語パックをインストールしました。
また、app/design/frontend/COMPANY/PROJECT/i18n/nl_NL.csvカスタムトランスレートと共にカスタムテーマファイルを追加しましたが、機能しません(モード:開発者、静的コンテンツ、およびキャッシュがクリーンアップされました)。
カスタム変換を言語パックのnl_NL.csvに移動すると、カスタム変換は正常に機能します。i18nが翻訳
するカスタムテーマとして、言語パックの方が優先されると思います。 言語パックでオーバーライドが正しい方法でどのように翻訳されますか?


モードをデフォルトまたは本番に切り替えて、もう一度確認してください。
自己診断

しようとrm -rf pub/static/*rm -rf var/cache/*m2のルートフォルダから。
belfort1

私は問題を書きました(モード:開発者、静的コンテンツ、およびキャッシュがクリーンアップされました)+ローカルストレージがjsonで変換しました。それも掃除されました。影響なし。
goral

回答:


11


[更新] Magento 2.2以降の翻訳の読み込み順序は次のとおりです。

  1. モジュールの翻訳を読み込みます。
  2. 翻訳パッケージ情報を読み込みます。
  3. テーマ翻訳ファイルを読み込みます。
  4. データベース変換をロードします。(インライン翻訳)

つまり、翻訳パッケージはテーマの翻訳よりも優先されます。したがって、M1でも可能だったインライン変換を使用して、迅速かつ簡単な解決策を克服できます。しかし、現在、M2があり、ボード上での柔軟性がさらに高まり、既存の翻訳パッケージをカスタムパッケージで拡張する方法があります。あなたがする必要があるのは、別の翻訳パッケージを作成することだけです。したがって、モジュールを作成します

Project \ Locale

次の内容で、registration.phpを作成します。

\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::LANGUAGE,
'project_nl_nl',
__DIR__
);

これが、モジュールが翻訳パッケージであることを定義する方法です。最後のステップとして、以下の内容のメタファイルlanguage.xmlを作成します。

<language ...>
  <code>nl_NL</code>
  <vendor>project</vendor>
  <package>nl_nl</package>
  <sort_order>10</sort_order>
  <use vendor="language" package="nl_nl" />
</language>

この方法で、拡張する親翻訳パッケージを指定します。また、プロジェクトにすでに翻訳パッケージの継承がある場合は、順序を指定します。これは、magento 自体の例のリンクです。

もう一つ。<vendor> . '_' . <code>language.xmlからの)がからのモジュール名と一致することを確認してくださいregistration.phpproject_nl_nl私の例では。


いいですね-でも、どこで翻訳を上書きすればいいですか nl_NL.csvそのモジュール内の別のものですか?
fritzmg 2018

1
@fritzmgはい、翻訳ファイルの形式/名前はまったく同じです
Sergey

1
thx、そう思いました。:私はそのための個別の質問開いたのにしかし、私はまだ、仕事にそれを得ることができないmagento.stackexchange.com/questions/238459/...
fritzmg

1
さらなる読者のために、この答えはもはや有効ではありません。昔から、Magentoはこの動作を変更しました:github.com/magento/magento2/blob/2.3-develop/lib/internal/… 現在の順序は次のとおりです:1)モジュール変換(app / code / [Vendor_Name] / i18n) 2)言語パックの翻訳(app / i18n)3)テーマの翻訳(app / design / [theme] / i18n)4)データベースの翻訳(インライン)
ManuelGarcíaSolipa

@ManuelGarcíaSolipaはい、そうです、彼らは2.2でそれを変更しました。投稿を更新
セルゲイ

4

私は同じ問題を抱えており、解決策を見つけました。\ Magento \ Framework \ Translateは最初にテーマの翻訳を読み込み、次にパックの翻訳を読み込みます。メソッドloadDataでこのクラスのプラグインを作成し、読み込み順序を修正する必要があります。


良いアイデア。どのようにしてプラグインを作成しましたか?必要な他のすべてのメソッドが保護されていたため、設定を作成できました。プラグインのようなソリューションに興味があります。
simonthesorcerer 2018年

2

今が2019年なのか、セルゲイの回答に最初からエラーがあったかはわかりませんが、vendor / magento / framework / Translate.phpファイルの実際の読み込み順序は次のとおりです。

$this->_loadModuleTranslation();
$this->_loadPackTranslation();
$this->_loadThemeTranslation();
$this->_loadDbTranslation();

後でロードされるものは、以前の翻訳を上書きします。

したがって、Daniel Sloofの回答が機能しても、テーマに翻訳を追加するだけで、言語パックよりも優先度が高くなります。


1

クリーンな静的コンテンツの場合、ローカルストレージテーマのCSVでキャッシュおよび変換は機能しますが、一部の単語では機能しません。したがって、カスタムテーマによってオーバーライドされた言語パックは翻訳されますが、すべてのフレーズが翻訳されるわけではありません。


0

Magentoは次の順序で翻訳情報を読み込んでいます

モジュールの翻訳を読み込みます。テーマ翻訳ファイルの読み込み翻訳パッケージ情報を読み込みます。db tranlationをロードします。(インライン翻訳)

モジュール、テーマ、および別のパッケージ(vendor / {name} / language-de_de)のde_deパッケージに異なる翻訳があります。私はいつもテーマから翻訳を得ているのを見ました。pub / staticとキャッシュをクリアします(Chromeのキャッシュを使用)。実際のロード翻訳の優先順位は何ですか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.