web-dev-qa-db-ja.com

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

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

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

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

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

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

7
Patrick Kenny

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

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

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

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

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

最後に、ペインのタイトルを強制的に翻訳可能にするために使用したコードの一部を次に示します。私は後でそれをあなたの状況により良く修正しようと試みますが、私はa有用な答えをすぐに持っていることはそうでないよりも優れていると考えました。 :)これが$ 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;
}
4
Letharion

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

3
pedrosp

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

2
JamesWilson