2

JCR に、タイトル、監督、俳優などの映画のプロパティを英語で提供するノードがあるとします。次に、同じプロパティを別の言語 (フランス語など) で格納する別のノードがあります。翻訳が必要なプロパティのみが実際に2番目のノードに格納されるように、フランス語のノードに英語のノードを参照させる方法はありますか? 元:

-englishNode プロパティ タイトル: The Sword in the Stone 監督: Wolfgang Reitherman Actor: Sebastian Cabot

-frenchNode プロパティ タイトル: Merlin L'Enchanteur

ただし、ディレクターとアクターのプロパティは、翻訳する必要がないため、英語のノードから取得されます。ただし、frenchNode.getProperty("director") を呼び出すには、englishNode からプロパティを取得する必要があります。

フランスのノードを英語のノードの子にして、そのプロパティを継承できることはわかっていますが、すべての英語の映画が英語のノードの下にあり、すべてのフランスの映画がフランス語のノードの下にある構造が必要なので、フランスの映画英語の兄弟になることはできませんが、むしろ「いとこ」になります。

4

2 に答える 2

1

このシナリオに直接対応する JCR については何も知りません。しかし、いくつかの可能なオプションを考えることができます。それぞれに独自の利点があり、あるソリューションはある状況ではうまく機能し、別の状況ではうまく機能しない場合があります.

ローカル固有の子ノード 1 つの言語を主要言語にし (たとえば、フォールバックまたはより一般的なローカルが何であれ)、そのノードの下のローカル固有の子にローカル固有のプロパティを配置します。したがって、英語が主要言語である場合、映画のプロパティは映画ノードに格納される可能性があります。フランス語のプロパティは "fr" の子に、ドイツ語のプロパティは "de" の子に格納される場合があります。利点の 1 つは、アプリケーションが使用するロケールのみをロードする必要があることです。

フォールバック参照 1 つのノードから「フォールバック」への参照プロパティを作成し、プロパティを取得するときにロジックでこれを考慮に入れます。プロパティがノードにない場合は、フォールバックから取得します。フォールバック ノードは で取得できますmovie.getProperty("fallback").getNode()。(フォールバックがフォールバックを持つ可能性がある場合、これを再帰的にするのは非常に簡単であることに注意してください。) これにより、ノードを別々の場所に格納できます。ただし、循環フォールバック参照には注意してください (英語のフォールバックはフランス語で、フランス語のフォールバックは英語です)。これは処理できますが、何らかの状態を追跡する必要があります。繰り返しますが、アプリケーションは、必要に応じてロケール固有のプロパティを持つノードのみをロードします。

ローカル固有のプロパティ 英語、フランス語、およびその他の言語のタイトルを含むすべてのプロパティをムービー ノードに格納します。プロパティ名にサフィックスまたはプレフィックスを使用して、ロケールを示します (例: en-titleand fr-title)。単一のノードをロードすると、すべてのプロパティのすべてのロケール バリエーションがロードされる傾向があります。したがって、これはより少ない言語、より少ないローカル固有のプロパティ、およびより少ない全体的なプロパティでうまく機能します。

各「プロパティ」の子ノード 各「プロパティ」(「タイトル」など) を子ノードとして配置し、各ロケール固有の値をプロパティとして格納します。繰り返しになりますが、ノードをロードするとすべてのロケールの値がロードされるため、言語とロケール固有の値の数が少ないほどうまく機能します。

于 2012-10-31T19:11:57.723 に答える
0

また、JCR がすぐに使えるものを提供するとは思いません。

Apache Slingでは、同様のメカニズムを使用して、「システム」スクリプトを「ユーザー」スクリプトでオーバーライドできるようにしています。特定のリクエストを処理するために、Sling は /libs/foo/foo.esp にあるスクリプトが適切な候補であると判断する場合がありますが、 /apps/foo/foo.esp に別のスクリプトがある場合は、代わりにそれが使用されます。

/content/books/en/title プロパティを /content/books/fr/title が存在する場合はオーバーライドすることで、同じことができます。これはアプリケーション レベルで行う必要がありますが、このような "並列パス" 構造はわかりやすく、理解と管理が簡単です。パスのどの部分がコンテンツのロケールを表すかを定義するだけで済みます。

于 2012-11-01T08:38:04.260 に答える