legacy-knowledge-base
公開されました Jun. 30, 2025

フラグメントの編集可能なフィールドに対してデフォルトの翻訳を作成する方法

written-by

Rita Schaff

How To articles are not official guidelines or officially supported documentation. They are community-contributed content and may not always reflect the latest updates to Liferay DXP. We welcome your feedback to improve How To articles!

While we make every effort to ensure this Knowledge Base is accurate, it may not always reflect the most recent updates or official guidelines.We appreciate your understanding and encourage you to reach out with any feedback or concerns.

legacy-article

learn-legacy-article-disclaimer-text

問題

  • 以下のような断片がある。
    <button>
    <span data-lfr-editable-id="text1" data-lfr-editable-type="rich-text">
    ${languageUtil.get(locale,'exit')}
    </span>
    </button>
  • ${languageUtil.get(locale,'exit')} でデフォルトの翻訳を動的に設定しようとしていますが、うまくいきません。
  • 配置されたときに一度だけ翻訳されます。
    • ユーザー言語が英語に設定されている場合、ボタンは英語翻訳を表示します。
    • ユーザー言語がドイツ語に設定されている場合、ボタンはドイツ語の翻訳を表示します。
    • しかし、配置後にユーザーがロケールを変更すると、テキストは更新されない。
  • どうすればいいのか?

環境

  • DXP 7.4 u89

解像度

ご要望の内容を調査した結果、まず、基本的に編集可能なフィールド内でデフォルトの翻訳を変更したいことがわかりました。
LRDOCS-12045に記載されている理由により、私たちは一般的にこれを制限とみなします。


回避策

キーの正しいロケールは、以下のようにして取得できる:

${languageUtil.get(locale,'user')}

この行は、 user キーの正しいロケールを取得する。英語(US)ロケールでは User 、ドイツ語ロケールでは Benutzer

現在のところ、ユーザーにとって現在の動作をより良くするために、2つの回避策が考えられます。

テンプレートを使ったウェブコンテンツ

正しいロケールのテキストは、テンプレートで呼び出されたコードから得られる。

  1. テキストフィールドでウェブコンテンツ記事を作成する
  2. ${languageUtil.get(locale,'user')} をコピーペーストしてテンプレートを作成する。
  3. ページにフラグメントを追加する
  4. ウェブ・コンテンツ・テンプレートをフィールドにマッピングする
  5. ページを公開する
  6. 別の言語(ドイツ語など)に変更する。

現在のロケールがフラグメントに表示されるはずです。

さて、この方法ですが、フラグメントにマップされたフィールドがある場合、通常は手動で編集することはできません。 しかし、ユーザーはウェブコンテンツの記事のテキストフィールドを使って翻訳を入力することができます。そして、次のロジックを追加するためにテンプレートを修正することができます: 現在のロケールに既存の翻訳があれば、それを表示します; そうでなければ、デフォルトの翻訳を表示します (キーに保存され、 ${languageUtil.get(locale,'keyName')}で同様に取得されます)。

エディタビューでは、正しいロケールの翻訳結果が表示されないことがあります。

この方法が機能するのは、デフォルト値が既存のロケールを使用して計算され、フラグメントがコンテンツに追加されたときにページ上にレンダリングされるからです。
これはバックエンドで一度にレンダリングされ、リアルタイムではないため、変更をリアルタイムでレンダリングする必要があるフラグメントでは期待どおりに使用できません。

ロジックを追加したフラグメント

添付の例では、次のようなコードの断片も示している:

<button>
<span data-lfr-editable-id="text1" data-lfr-editable-type="rich-text">
${languageUtil.get(locale,'user')}
</span>
</button>

しかし、編集可能なタグはFreemarkerをサポートしていないため、これは機能しない。
それでも、この方法には利点もある:例えば、ユーザーはここでテキストを編集することができる。 そして、正しいロケールは他の方法で取得することもできるし、設定オプションを使ってそこから値を取得することもできる。

注:添付のサンプルLARファイルを新しいサイトに自由にインポートしてください。

追加情報

did-this-article-resolve-your-issue

legacy-knowledge-base