問題
- 以下のような断片がある。
<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つの回避策が考えられます。
テンプレートを使ったウェブコンテンツ
正しいロケールのテキストは、テンプレートで呼び出されたコードから得られる。
- テキストフィールドでウェブコンテンツ記事を作成する
 - 
 
${languageUtil.get(locale,'user')}をコピーペーストしてテンプレートを作成する。 - ページにフラグメントを追加する
 - ウェブ・コンテンツ・テンプレートをフィールドにマッピングする
 - ページを公開する
 - 別の言語(ドイツ語など)に変更する。
 
現在のロケールがフラグメントに表示されるはずです。
 
さて、この方法ですが、フラグメントにマップされたフィールドがある場合、通常は手動で編集することはできません。 しかし、ユーザーはウェブコンテンツの記事のテキストフィールドを使って翻訳を入力することができます。そして、次のロジックを追加するためにテンプレートを修正することができます: 現在のロケールに既存の翻訳があれば、それを表示します; そうでなければ、デフォルトの翻訳を表示します (キーに保存され、 ${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ファイルを新しいサイトに自由にインポートしてください。
追加情報