パネルの「新しいカスタムコンテンツ」を翻訳するには?


7

Panelsモジュールの「New custom content」オプションを使用してテキスト/ HTMLのビットを追加したパネルがたくさんあります。

デフォルトでは、このようなテキストは[翻訳インターフェイス]画面に表示されません。それらを翻訳するにはどうすればよいですか?

私が見つけた2つのアプローチは次のとおりです。

  • カスタムコンテンツのテキスト形式をに変更し、PHP codet()を使用してテキストの文字列を印刷します。これにより、[翻訳インターフェイス]画面で文字列を翻訳することができますが、このようなPHPコードを挿入するのは悪い前例であると心配しています。
  • 私は2つの言語しかないため、他の言語にローカライズされた2番目のカスタムコンテンツを追加できます。次に、パネルのカスタムコンテンツの各部分に表示ルールを追加し、ユーザーの言語がコンテンツの言語と一致する場合にのみ表示するように各部分を設定できます。これは機能しますが、バックエンドでは時間がかかり、醜いです。将来、サイトに言語を追加することを決定した場合、それはさらに悪くなります。

そのようなカスタムコンテンツを翻訳するためのより効率的で保守可能な方法はありますか?

回答:


4

まず、これが「うまく機能しない」理由を説明したいと思います。そのため、新しい問題を与える前に、公平な警告が与えられます。:)次のようなカスタムコンテンツペインのコンテンツを検討してください。

Welcome %user:name, you have %field_num_messages new messages waiting.

ここのテキストはt()渡されるに置き換えられます。つまり、ユーザーとメッセージの数のバリエーションごとに、まったく新しい文字列が翻訳されます。このようなペインの場合は、2つの個別のペインを用意します。

長期的な解決策はゆっくりとここで取り組んでいます:翻訳可能なパネルタイトル:i18n_stringsを実装しますが、最初はペインタイトルに焦点を当てています。

一般的に言えば、解決策はカスタムコンテンツペインを回避することですが、それらを使用すると便利な場合があることも理解しています。

最後に、ペインのタイトルを強制的に翻訳可能にするために使用したコードの一部を次に示します。私は後でそれをあなたの状況により良く修正しようと試みます、しかし私有用な答えを持つことはそうでないよりはましであると思いました。:)これが$ paneを使用して、これがカスタムペインであるかどうかを判断し、t()を介してテキストを渡すことができるはずです。

/**
 * Implements hook_panels_pane_content_alter().
 */
function HOOK_panels_pane_content_alter($content, $pane, $args, $context) {
  if ($content->title) {
    $content->title = t($content->title);
  }
  return $content;
}

わかりました、ありがとう!この場合、コンテキストを使用するカスタムコンテンツはないので、少なくとも、最初に言及した問題は発生しません。
Patrick Kenny、

これはもう必要ありません。drupal.stackexchange.com/ a / 108970/10086
Pere

@Pereこれはphpモジュールを使用しています。
Letharion 14

@Letharionいいえ、Panels翻訳モジュールはPanelsの一部になり、PHPモジュールを使用しません
Pere

@Pereその通りです、お詫び申し上げます。どういうわけか私の電話でリンクは私にあなたの答えの上に示したので、私は誤解しました。
Letharion

3

私は常に基本的なページを使用しています(既存のノードとカスタムコンテンツ)。このようにして、エンティティの翻訳を通じて、言語とフォールバックに対処する機会を得ます。SEOの重複コンテンツの問題を回避するには、Rabbitホールモジュールをインストールし、それらのノードのパネルページへのリダイレクトを使用します。


2

目的がカスタム "ブロック"(より適切な用語がないため)をコードにエクスポートして変換することである場合は、i18n_boxesでボックスモジュールを使用することを検討してください。これにより、UIでボックスを変換できます(たとえばl10n_clientを使用) )、デフォルトの言語バージョンをコードにエクスポートします。その後、パネルのボックスを使用できます。


それは良い考えですが、残念ながら現在のBoxesにはバグがあり、Contextモジュールも使用しない限り設定を保存できません。ボックス+コンテキストは、これにはオーバーヘッドが多すぎます。 drupal.org/node/1444544
Patrick Kenny

パネルを表示に使用していませんか?(コアからの)ボックスまたはブロックの可視性設定は、それ自体が独自の表示エンジンであるパネルでは使用されないため、この場合はコンテキストが必要とは思われません。
JamesWilson 2012

ああ、そうです。ただし、このルートを使用すると、2つのインターフェース(パネル+ボックス)を処理する必要があるため、特に翻訳者にとって、管理が困難になる多数のボックスを作成することになります。でもアイデアはありがたいです。
Patrick Kenny

参考:i18n_boxesは、ボックスのコンテンツとタイトルをi18n_strings互換の翻訳可能な文字列として公開します。次に、l10n_clientモジュールの画面上の翻訳ツールバー(すべてのページの下部にある崇高な青いバー)を使用して、翻訳を翻訳者にとって非常に簡単にできます。残りのパネルのカスタムコンテンツペインがi18n_stringsとどの程度統合されているのかはわかりませんが、OPで述べられているように、壊れていると思います。
JamesWilson
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.