プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle WebCenter Sitesでの開発
12c (12.2.1.1)
E77292-01
目次へ移動
目次

前
次

25 多言語サポートのサイトの構成

多言語サポートのサイトを構成すると、そのサイトのユーザーはロケール(言語バージョン)の指定をアセットに割り当て、アセットの翻訳を作成できるようになります。多言語コンテンツ用のサイト固有の配信ルールを作成するオプションもあり、そのルールによって、どの言語バージョンのアセットをオンライン・サイトで表示するか、訪問者のリクエストがそのコンテンツでまだ用意できていない言語バージョンの場合はどう対処するかが決まります。

サイトの多言語サポートの構成の詳細は、次の項を参照してください。

25.1 多言語サポートのサイトの構成について

この項では、サイトの設計の計画作成および実装する場合に考慮する必要のあるトピックについて、多言語サポートの観点から説明します。

この項には次のトピックが含まれます:

25.1.1 ディメンション

WebCenter Sitesのロケール指定は、ディメンションの概念によって実装されます。ディメンションとは、別の点では意味的に同一であるアセットを区別する識別子のことです。ロケール(例: アメリカ英語はen_US)は、同一のコンテンツに対する2つの翻訳を区別するディメンションの1タイプです。

ディメンションは、タイプ「ディメンション」のアセットで表されます。このアセット・タイプは、ユーザーが「ディメンション」アセット(サブタイプ「ロケール」)を作成できるよう、またコンテンツ・プロバイダがロケール指定を翻訳対象のアセットに割り当てることができるように、開発者がサイト単位で有効にする必要があります。

注意:

ユーザーは、ロケール指定が割り当てられていないアセットの翻訳を作成できません。

各「ディメンション」アセットは、サイトでロケールを表示します。たとえば、en_US「ディメンション」アセットはアメリカ英語、fr_CA「ディメンション」アセットはカナダ仏語を表します。コンテンツ・アセットにロケールが割り当てられると、その割当ては対応するアセット・タイプのassetType_Dim表に記録されます。

指定されたロケールでのコンテンツの公開では、オンライン・サイトのロケールを有効にする必要があります。つまり、ロケールを示すディメンション・アセットを配信システムに公開し、サイトのディメンション・セットにそのロケールを加える必要があります。 「ディメンション・セット」を参照してください。

25.1.2 ディメンション・セット

ロケールをすでに作成してある場合には、少なくとも1つのディメンション・セットを作成することをお薦めします。ディメンション・セットとはディメンション・アセット(ロケール)のグループ化のことで、サイト訪問者へのコンテンツの配信に次のような影響を与えます。

  • ディメンション・セットは、オンライン・サイトで有効にするロケールの指定を定義します。つまり、ディメンション・セットはコンテンツが訪問者に表示される際の言語を指定します。たとえば、あるディメンション・セットにはヨーロッパ言語が含まれ、他のセットにはアジア言語が含まれるなどです。

  • ディメンション・セットは、ロケールに基づくコンテンツのフィルタリング方法を定義します。たとえば、訪問者がリクエストした時点でコンテンツが訪問者の希望言語で存在しない場合の処理方法などです。ディメンション・セットを配信システムに公開しない場合には、ロケールのフィルタリングは機能しません。ロケール・フィルタリングの詳細は、「ロケール・フィルタリングでの作業」を参照してください。

    注意:

    ディメンション・セットは、WebCenter Sitesのユーザー・インタフェースの操作には影響を与えません。

オンライン・サイトの機能に対するロケール・フィルタリングでは、各ディメンション・セットで参照されている「ディメンション・セット」アセットと「ディメンション」アセットの両方を承認して配信システムに公開する必要があります。(参照されている「ディメンション」アセットは、それを参照する「ディメンション・セット」アセットに依存しているため、どちらもそれぞれの「ディメンション・セット」アセットで承認されている必要があります。)

25.1.3 サイト間の多言語サポート

複数のサイトで多言語サポートを設定している場合、次のいずれかのシナリオの実装を選択できます。

  • ロケールは作成するが、ディメンション・セットは作成しない

    このオプションを選択すると、コンテンツ・プロバイダは複数の言語でコンテンツを管理できますが、レンダリング時のロケール・フィルタリングは有効になりません。すべての必須言語での翻訳が最初から各アセットに存在している場合にのみ、このオプションを使用します。

  • ロケールとディメンション・セットを作成し、それらをサイト間で共有する

    このオプションには、複数のサイトで多言語サポートを有効にする最も簡単な方法が用意されています。この方法で設定したサイトでは、ディメンション・セットに格納されたプロパティ(オンライン・サイト上で表示が有効化されたロケール、ロケール・フィルタリング・メソッド、および該当する場合はレンダリング時のアセット翻訳を検索する際における階層フィルタのトラバース経路であるフォールバック階層)を共有します。詳細は、「階層フィルタ」を参照してください。複数のターゲット・サイトにレプリケートする基本となるサイトを作成する場合には、ロケールのターゲット・サイトへの共有が最善の方法です。

  • 各サイトに個別のロケールとディメンション・セットを作成する

    このオプションでは、構成の複雑さが増加する分だけ、最高の柔軟性を得ることができます。サイトでこの方法を設定すると、ロケール・フィルタ・タイプやフォールバック階層などのプロパティを各サイトに合うよう調整できるというメリットがあります。

    注意:

    複数サイトで同一の言語を表すために「ディメンション」アセットの複製を作成できますが、不要な複雑さを招くため、お薦めしません。

  • 最後の2つのオプションの混在

    このオプションは、柔軟性と構成の複雑さのバランスが程よく取れています。可能なベスト・プラクティスとして、一意のロケールのプールを作成し、そのプールから各サイトで必要なロケールを共有し、必要に応じて各サイトでディメンション・セットを共有または作成するという方法があります。

25.1.4 マスター・アセット、翻訳および多言語セット

アセットを初めてロケールに割り当てる際には、アセットはマスター・ステータスまたはディメンションの親ステータスを取得します。マスター・ステータスを使用すると、多言語セット(コンテンツが意味的に同一であっても異なった言語で存在する一連のアセット)を構成できます。(これは、ディメンション・セットとは同一でない点に注意してください。ディメンション・セットはオンライン・サイトとアセットがレンダリングされる方法にのみ影響を及ぼします。)

注意:

マスター・アセットとディメンションの親は同じものです。マスター・アセットはWebCenter Sitesのユーザー・インタフェースに表示され、ディメンションの親はOracle WebCenter Sitesタグ・リファレンス、データベース表の名前(assetType_DimPなど)およびエレメント・コードで使用されます。

たとえば、「記事」アセットをアメリカ英語(en_US)として指定し、いずれかのロケールがサイトで有効になっている翻訳を作成した場合(フランス語(fr_CA)やドイツ語(de_DE)など)、翻訳はそれらのディメンションの親(アメリカ英語のアセット)を指し、それらのロケールとマスターが相互に同等な意味であることを示します。

マスター・ステータスでアセットの翻訳を作成すると、WebCenter Sitesによってアセットがコピーされ、選択したロケールがコピーに割り当てられます。次に、翻訳済のコンテンツを入力して新しいアセットとしてその翻訳を保存します。

この時点で、ソース・アセットとその翻訳は多言語セットにリンクされ、翻訳にそのマスターとしてソース・アセットまたはディメンションの親が採用されます。マスターではないセットのメンバーにマスター・ステータスを指定できますが、マスターになることができるのは一度に1つのセット・メンバーのみです。

リンク付けは、アセット・タイプに対してassetType_DimP表を介して実現されます。この表には次の情報が格納されています。

  • マスター(ディメンションの親)アセットのID

  • 翻訳アセットのID

  • その翻訳に割り当てられたロケール・ディメンション・アセットのID

WebCenter Sitesインタフェースでマスター・アセットまたはいずれかの既存の翻訳から翻訳の作成を開始できますが、多言語セットのすべての翻訳は常にディメンションの親(マスター)アセットを指しています。

注意:

ロケールを意識したアセットがリビジョン追跡されている場合、アセットのロケール・データへの変更(ロケール指定やマスター・ステータスなど)により新しいバージョンのアセットは生成されません。

25.1.5 翻訳およびアセット関係

アセットが翻訳される際にアセット関係を処理する方法の要約は、表25-1のとおりです。

表25-1 アセット関係

関係のタイプ 動作

アソシエーション

アソシエーションが含まれているアセットを翻訳すると、ソース・アセットに関連付けられているすべてのアセットが、自動的に翻訳と関連付けられます。その後、関連付けられたアセットを翻訳して、その翻訳済のバージョンを翻訳済の親アセットと関連付けるかどうかを選択できます。

コレクション

コレクション・アセットの翻訳を作成すると、新しいコレクション・アセットはソース・アセットのメンバー・アセットを保持します。次に、メンバー・アセットを翻訳し、翻訳済バージョンを新しいコレクション・アセットに格納して、古いコレクションから引き継いだメンバー・アセットを置き換えることができます。

静的リスト推奨

新しい言語バージョンの静的リスト推奨を作成すると、新しい推奨アセットには、ソース・アセットのメンバー・アセットが保持されます。次に、メンバー・アセットを翻訳し、翻訳済バージョンを新しい推奨アセットに格納して、古いコレクションから引き継いだメンバー・アセットを置き換えることができます。

動的リスト推奨

動的リスト推奨はエレメント・コードで移入されるため、影響を受けません。

関連アイテム推奨

関連アイテムのアソシエーションが含まれているアセットを翻訳すると、ソース・アセットに関連付けられているすべてのアセットが、自動的に翻訳と関連付けられます。その後、関連付けられたアセットを翻訳して、その翻訳済のバージョンを翻訳済の親アセットと関連付けるかどうかを選択できます。

アセット・タイプの属性

アセット・タイプの属性によるアソシエーションが含まれているアセットを翻訳すると、ソース・アセットに関連付けられているすべてのアセットが、自動的に翻訳と関連付けられます。その後、関連付けられたアセットを翻訳して、その翻訳済のバージョンを翻訳済の親アセットと関連付けるかどうかを選択できます。

埋込みリンク

埋込みリンクは影響を受けません。埋込みリンクを含むアセットが翻訳されるとは、リンク対象のコンテンツの対応する翻訳(存在する場合)を指すように、リンクを手動で更新する必要があります。

レンダリング時のアセット関係の処理の詳細は、「ロケール・フィルタリングでの作業」を参照してください。

25.1.6 承認依存性

あるアセットの編集により別の承認ステータスが変更される場合、2つのアセット間には承認依存性が存在します。ローカライズ済アセットに影響を与える承認依存性の要約は、表25-2のとおりです。

表25-2 承認依存性

依存性 アセット承認への影響

Exists依存性は、ローカライズ済アセットと割り当てられたロケールを示す「ディメンション」アセットの間に存在します。

ローカライズ済アセットの公開を承認するには、対応する「ディメンション」アセットも承認されている必要があります。

多言語セットでは、マスター・アセットとそれにリンクされている各翻訳間にExists依存性が存在します。

アセットの最初の翻訳を作成する場合には、アセットとその翻訳の両方を承認する必要があります。

翻訳を承認するには、マスター・アセットが承認済の場合を除いて、対応するマスター・アセットも承認する必要があります。

次の場合には、すべてのメンバーを再承認する必要があります。

  • 新規翻訳をセットに追加したり、既存の翻訳をセットから削除する場合。

  • セットのマスター・アセットを編集する場合。

  • セットの別のメンバーをマスターとして指定する場合。

Exists依存性は、「ディメンション・セット」アセットとそのディメンション・セットで有効化されているロケールを示す「ディメンション」アセットの間に存在します。

ディメンション・セットを承認するには、対応する「ディメンション」アセットも承認されている必要があります。

25.2 ロケール・フィルタリングでの作業

理想的には、多言語サイトは起動される前にそのコンテンツに関して全部そろっていることが望ましいです。つまり、すべてのアセットとそれらの関連事項が必要な言語ですべて存在しているのが理想です。しかし、多くの場合、そうではありません。そのような場合、ロケール・フィルタを使用して、訪問者が指定した環境と言語プリファレンスに応じて、レンダリング時にサイトに表示されるアセットの言語バージョンを決定します。たとえば、リクエストされたアセットがリクエストされた言語に存在しない場合、ビジネス・ロジックに対応を決定するように指定できます。

ロケール・フィルタリングを使用して、元のコンテンツがオンライン・サイトに公開された後に、リクエストされた翻訳の作成をコンテンツ・プロバイダに許可することで、編集作業を徐々に広げていくことができます。ロケール・フィルタリングにより、欠落した翻訳が配信システムに公開されたらただちにサイトで自動的にそれらをピックアップできます。

ロケール・フィルタリングにより配信システムで追加のロードが取り込まれる点に留意してください。追加のロードの容量は、フィルタリング・ロジックの複雑度に応じて異なります。

この項には次のトピックが含まれます:

25.2.1 ロケール・フィルタリングによるアセット関係の実装のオプション

ロケール・フィルタリングの実装を選択する方法は、サイトのアセット関係を構造化する方法に影響を与えますし、オンライン・サイトの動作の方法に応じて、その逆もあります。

次のオプションのいずれかの実装を選択できます。

  • 各ロケールに対して異なるアセット関係のツリーを保持する

    アセットのレンダリング時に、このモデルはリクエストされたアセットに関連付けられたどのようなアセットでもレンダリングします。

    たとえば、英語とフランス語のアセットが存在し、バージョンごとに関連付けられたアセットの一意のセットが存在する場合、各バージョンは関連付けられた個別のアセットにレンダリングされます。フィルタリングは、訪問者が指定した言語プリファレンスと一致するリクエスト済アセットのバージョンを検索して配信する場合のみ使用され、関連付けられたアセットは、すべての必要な言語に翻訳されていると見込まれています。

    このモデルでは、各言語に対して完全に独立したコンテンツが許可されます。このモデルをFirst Site IIサンプル・サイトで使用します。

  • 同じアセット関係ツリーをすべてのロケールに使用する

    アセットのレンダリング時に、このモデルは、訪問者が指定する言語プリファレンスとは無関係に、リクエストされたアセットのうち関連付けられたアセットを、リクエストされたアセットの特定言語バージョンと関連付けられたアセットに置換します。

    たとえば、英語とフランス語のアセットが存在し、バージョンごとに関連付けられたアセットの一意のセットが存在する場合、訪問者が言語プリファレンスでフランス語を指定すると、フィルタリングはリクエストされたアセットのフランス語バージョンを検索して配信しますが、フランス語バージョンの関連付けられたアセットのかわりに英語バージョンの関連付けられたアセットに置換されます(フィルタリングが関連付けを導出する言語バージョンは英語であるという仮定により)。

    このモデルでは、すべての言語間で確実にコンテンツが一貫しています。

  • 前述の2つのモデルの混在

    サイトに最大量の柔軟性とカスタマイズが許可されます。2つのモデル間の最適の比率は、サイトで対象とする動作に応じて異なります。

25.2.2 含まれるロケール・フィルタの理解

WebCenter Sitesでは次のロケール・フィルタが提供されています。

必要に応じて、カスタム・ロケール・フィルタ実装のオプションもあります。カスタム・フィルタの詳細は、「カスタムロケール・フィルタの使用について」を参照してください。

実装を選択したフィルタのタイプに応じて、フィルタの対象となるアセットは次の条件のうちの1つまたは両方を満たしている必要があります。

  • アセットには、割り当てられたロケールが指定されている必要があります。ロケールの指定がないアセットは、ロケール・フィルタで無視されます。

  • 相互の翻訳であるアセットは、多言語セットにリンクされている必要があります(マスター・アセットによって相互の翻訳として指定されます)。そうでない場合は、フィルタは必要な翻訳の検索を実行できません。

25.2.2.1 簡易フィルタ

簡易フィルタは、コンテンツが複数の言語で存在しているサイトで、1つの言語のみでレンダリングされる場合に選択できます。フィルタでは次がチェックされます。

  • 要求されたアセットが訪問者によって指定された言語のものであるかどうか

  • アセットのロケールがサイトのディメンション・セットにリストされているかどうか

両方の条件に一致していると、フィルタはレンダリング用のテンプレートにアセットを渡します。そうでない場合にはレンダリングされません。

簡易フィルタでは、配信システムのパフォーマンスへの影響は最小になりますが、アセットは必要な言語バージョンで存在する必要があり、そうでないとオンライン・サイトに表示されないため、作業する必要のある編集作業量が増加します。

25.2.2.2 簡易参照フィルタ

簡易参照フィルタは、1言語でのみレンダリングする必要のあるサイトで、複数言語でコンテンツが存在している可能性があっても、レンダリング時にすべての必要な翻訳が存在している保証のないサイトで理想的です。フィルタでは次がチェックされます。

  • 要求されたアセットが訪問者によって指定された言語のものであるかどうか

  • アセットのロケールがサイトのディメンション・セットにリストされているかどうか

リクエストされたアセットが訪問者の希望した言語で存在しない場合には、フィルタはアセットの翻訳をチェックして適切な代替アセットを検索します。フィルタが一致する翻訳を検出した場合には、それをテンプレートに渡します。そうでない場合には、レンダリングされません。(翻訳のロケールがサイトのディメンション・セットに存在しない場合にも、フィルタは何も返しません。)

このフィルタでは、パフォーマンスと機能性の間の合理的なバランスが提供されます。検索の問合せにより配信システムへの負荷は多少増加しますが、アセット作成のための編集作業の量は軽減されます。必要な翻訳は、元のコンテンツがオンライン・サイトに公開された後で作成できるためです。欠落した翻訳が配信システムに公開されると、検索メカニズムがただちにそれらをピックアップします。

25.2.2.3 階層フィルタ

階層フィルタは、リクエストされたアセットのロケールが訪問者によりリクエストされたロケールと一致しているかどうかをチェックします。ロケールが一致しない場合、フィルタはアセットの翻訳をチェックして、適切な代替の翻訳が存在しないか確認します。フィルタが一致する翻訳を検出した場合、それをテンプレートに渡します。検出しない場合には、サイトのディメンション・セットを構成する際に設定したフォールバック階層に従って、リクエストされたアセットの翻訳に置換します。フォールバック階層では、フィルタがリクエストされたアセット用に置換する必要のある言語バージョンとその順番が指定されます。

たとえば、次の階層について見てみましょう。

  • en_US (アメリカ英語)

  • de_DE (独語)

    • de_CH (スイス独語)

    • de_AT (オーストリア独語)

  • fr_FR (仏語)

    • fr_BE (ベルギー仏語)

    • fr_CA (カナダ仏語)

  • en_UK (イギリス英語)

この例では、訪問者がスイス独語(de_CH)のアセットをリクエストした場合、フィルタはアセットの翻訳を検索してアセットのスイス独語バージョンを検出すると、そのバージョンをテンプレートに渡します。フィルタがスイス独語バージョンを検出できない場合、階層パス内でその次に最適なロケールの独語(de_DE)にフォールバックします。同様に独語の翻訳が存在しない場合、フィルタはツリーの最上階に達するまで指定されたパスを階層内で追跡します。そのプロセスで一致が検出されない場合は、何もレンダリングされません。

前述の例では、訪問者が単一の希望言語を指定する場合について説明しました。ユーザーが複数の希望言語を指定する場合(通常、順序付けられたリストのフォームで)、フィルタは訪問者の最も希望する言語に対するフォールバック階層で一致する検索を試行します。一致が検出されない場合には、フィルタはフォールバック階層で一致が検出されるまで、訪問者のリストで次の言語をチェックします。その場合、前述のように、フィルタは一致するロケールからフォールバック・ツリーの最上位までパスを追跡して、リクエストされたアセットの翻訳の置換を試行します。

たとえば、ユーザーの希望する言語が日本語、仏語、英語(その順番で希望)だとすると、フィルタはフォールバック階層で日本語の検出を試行します。日本語が階層に存在しない場合には、次に仏語の検出が試行されます。仏語は階層に存在するので、仏語からツリーのルート・ノードへのパスが追跡され、この項で前述した例のように、そのパスに従って置換が施行されます。

階層フィルタは強力で便利ですが、次のような欠点があります。

  • 追加のデータベース問合せは、フィルタの負担が配信システムのパフォーマンスにかかります。パフォーマンス・ヒットを最小限にするには、できるだけ多くの必要な言語がコンテンツに存在するように編集して、フィルタのアクティビティを最小限にする必要があります。(別のフィルタの使用を選択することも可能です。)

  • オンライン・サイトに表示するアセットに対するコントロールは、もっぱらサイト開発者や管理者の手にゆだねられます。これは、フィルタが、サイトへの訪問者が指定するプリファレンスの順ではなく(各訪問者からの複数言語のプリファレンスを受け入れるようにサイトが設定されていると仮定して)、ディメンション・セットで構成されたフォールバック・ツリーを追跡するためです。

25.2.3 カスタム・ロケール・フィルタの使用について

サイトの設計に応じて、カスタム・フィルタの作成を決定できます。たとえば、サイトの設計により、ディメンション・セットで定義されたフィルタではなく、訪問者が指定するロケールの優先度を優先的に選択する階層(フォールバック)フィルタがコールされるとします。そのような場合は、「ディメンション・セット」アセットの「編集」フォームのフィールドで、カスタム・フィルタ・クラスを指定できます。

25.2.4 構成依存性の説明

サイトにロケール・フィルタリングを組み込むことを決定した場合、結果として導入される追加の構成の依存性を説明する必要があります。構成の依存性によって、ページが配信システムでキャッシュされる方法が指定されます。

この項には次のトピックが含まれます:

25.2.4.1 アセットの検索連鎖

ロケール・フィルタリングを使用してアセットの翻訳を検索する場合、検索プロセス時にロードされるアセットに基づいて、次のファクタがページのキャッシュ方法を指定します。

  • 採用されるフィルタリング・ロジック

  • 検索リクエスト元からのページとアセット

  • 訪問者が指定する言語プリファレンス

リクエストされたアセットを含むキャッシュ済ページは、検索プロセス時にロードされたすべてのアセットに依存します。したがって、検索プロセス時にロードされたアセットが変更されると、影響を受けたページがキャッシュからフラッシュされます。

たとえば、簡易参照フィルタと次の多言語セットについて見てみましょう。

  • en_US (マスター)

  • fr_FR (翻訳)

  • de_DE (翻訳)

訪問者が仏語バージョンを含むページをリクエストしているが、その訪問者の言語プリファレンスが独語の場合、検索連鎖は次のようになります。

fr_FR > en_US > de_DE

この例では、フィルタはまず仏語バージョンにリンクされたマスター・アセットをロードし、次にそのマスター・アセットを使用して独語バージョンを検索するため、3つのアセットがすべてロードされます。したがって、これら3通のアセットのいずれかが変更されると、影響を受けたページがキャッシュからフラッシュされます。

他方、ユーザーがセットのマスター・アセットであるアメリカ英語バージョンをリクエストすると、検索連鎖はもっと短くなります。

fr_FR > en_US

この場合、仏語バージョンとアメリカ英語バージョンがロードされますが、独語バージョンはロードされません。したがって、独語バージョンを変更すると、対応するページがキャッシュからフラッシュされますが、仏語バージョンやアメリカ英語バージョンを変更してもフラッシュされません。

WebCenter Sitesに含まれるロケール・フィルタで採用される検索メカニズムの詳細は、「含まれるロケール・フィルタの理解」を参照してください。

「キャッシング・ルール」では、多言語アセットに適用されるキャッシング・ルールについて説明します。

25.2.4.2 キャッシング・ルール

翻訳が検索されて影響を受けるページがキャッシュされると、次のいずれかが発生するたびにページがキャッシュからフラッシュされます。

  • 新しい言語が多言語セットに追加された

  • ページのレンダリング時に検索連鎖の一部だった翻訳が編集された

  • 多言語セットのメンバーの翻訳が削除された

  • セットのマスター・アセットが編集された

  • セットの別のメンバーがマスターとして指定された

25.2.5 サイトへのフィルタリング・サポートの追加について

ロケール・フィルタリングのサポートをサイトに追加するには、サイトで使用するテンプレートとエレメント・コードを変更する必要があります。

テンプレート・コードがアセットのc/cid値を介してアセットをフェッチすると、ロケール・フィルタは受信c/cid値でのフィルタのビジネス・ロジックを実行し、結果のc/cid値(またはなし)をレンダリング対象のテンプレートに返します。

サイトの構造は、テンプレートへのロケール・フィルタリングの実装方法に影響を及ぼしますし、その逆の場合もあります。また、異なるシナリオで、サイトの動作を指定します。

たとえば、5つの記事があり、それぞれに2つの言語en(英語)とfr(仏語)のバージョンが存在するとします。その記事は、a1ena1fra2ena2frなどになります。これらの記事をコレクションに配置し、次のいずれかの方法でロケール・フィルタリングを実装します。

  • 英語コレクションc1enを作成して、それに英語の記事のすべてを割り当てます。この方法では、コレクションをレンダリングする前に、c1enアセットのc/cidに簡易フィルタを実行し、c/cid値をフィルタリングせずにその子をレンダリングします。c1enコレクションが単一言語であることを信頼しているためです。

  • 多言語コレクションを作成し(それにロケールを割り当てないで)、その記事を任意の言語に追加します。次に、各記事をレンダリングする際に、記事のc/cid値をフィルタリングして、記事が訪問者に指定されたロケールでレンダリングされるようにします。

この項の残りの部分では、FirstSiteIIサンプル・サイトに基づいてコードの例を示します。多言語サポートの方法を把握するために、FirstSiteIIのコードを調べることをお薦めします。

この項には次のトピックが含まれます:

25.2.5.1 テンプレートへのフィルタリングの追加について

通常、フィルタリング・コードをユーティリティのエレメントに配置して、そのエレメントをテンプレートの最上部でコールしてc/cid値を処理します。

次の例では、FSIILayoutテンプレートがrender:lookupタグを介してFSIICommon/Multilingual/Filterエレメントのアセットに格納されたフィルタ・コードをコールする方法を示しています。

<%-- Execute the Dimension filter to look up the translated asset that corresponds to the locale that the visitor requested. --%>
<render:lookup site='<%=ics.GetVar("site")%>' varname="Filter" key="Filter" match=":x" tid='<%=ics.GetVar("tid")%>' />
<render:callelement elementname='<%=ics.GetVar("Filter")%>' scoped="global"/>

25.2.5.2 訪問者のロケール・プリファレンスの取得と保持について

フィルタリングを稼働するには、訪問者に希望の言語(ロケール)の指定を許可する必要があります。このプリファレンスは、サイト全体に伝搬される必要があります(すべてのテンプレートに渡される)。

次の例では、これをFSIIWrapperエレメントで実現する方法を示します。この例の最後のセクションでは、セッション変数(例の初めの部分で、セッション変数が存在することを確認します)から値を取得してロケール変数を設定する方法を示しています。

<%-- The session variable locale refers to the id of the dimension with the 
subtype of Locale that specifies which language the site is to be rendered in. 
Users can select the locale of their choice from a menu on every page of the 
site, and once selected, it is stored in session. A default locale is mapped to 
this CSElement and is set if it has not already been set. --%>
<ics:if condition='<%=ics.GetSSVar("preferred_locale") == null%>'>
<ics:then>
<render:lookup site='<%=ics.GetVar("site")%>' varname="default:locale:name" key='DefaultLocale' ttype="CSElement" tid='<%=ics.GetVar("eid")%>' match=":x"/>
<asset:load name="defaultLocale" type="Dimension" field="name" value='<%=ics.GetVar("default:locale:name")%>'/>
<asset:get name="defaultLocale" field="id" output="default:locale:id"/>
<ics:setssvar name="preferred_locale" value='<%=ics.GetVar("default:locale:id")%>'/>
</ics:then>
</ics:if>
<%-- Call the wrapped child page. There is no need to look up the template or to enable any special PageBuilder functionality, so we can use the render:satellitepage tag in this situation. --%>
<render:satellitepage pagename='<%=ics.GetVar("childpagename")%>' packedargs='<%=ics.GetVar("packedargs")%>'>
<render:argument name='c' value='<%=ics.GetVar("c")%>'/>
<render:argument name='cid' value='<%=ics.GetVar("cid")%>'/>
<render:argument name='p' value='<%=ics.GetVar("p")%>' />
<render:argument name="locale" value='<%=ics.GetSSVar("preferred_locale")%>'/>
</render:satellitepage>

25.2.5.3 検索結果のフィルタ処理について

オンライン・サイトに検索機能が備わっている場合、訪問者へ返された検索結果を、訪問者の言語プリファレンスに基づいてフィルタリングするように選択できます。

次の例は、Page/SearchDetailViewテンプレートが検索結果のIListをフィルタリングして、問合せがすべての言語に対して実行され、定義した結果のみが返されるようにする方法を示しています。

<%-- look up the dimension set and filter the ProductList results --%>
<asset:load name="GlobalDimSet" type="DimensionSet" field="name" value='<%=ics.GetVar("GlobalDimSet")%>' />
<dimensionset:filter name="GlobalDimSet" tofilter="ProductList" list="ProductList">
<dimensionset:asset assettype="Dimension" assetid='<%=ics.GetVar("locale")%>'/>
</dimensionset:filter>

詳細は、Oracle WebCenter Sitesタグ・リファレンスを参照してください。さらに、FirstSiteIIサンプル・サイトのコードを調べて、多言語サポートを実装する方法を確認してください。

25.3 サイトに対する多言語サポートの計画

多言語サポートのサイトの構成を開始する前に、次の前提条件が満たされているか確認します。これらの決定事項についてサイト管理者と合意しておくことがベストです。

  1. 所属する組織のコンテンツ管理のニーズに基づいて、最初にサイト(複数可)に実装する言語の数を決定します。次のいずれかを実行できます。

    • サイト(複数可)を作成して最初に単一言語をサポートし、必要に応じてその他の言語のサポートを追加する。

    • 前もってすべてのサイトで取り込む言語すべてを計画し、適切なロケールを作成しておく。

  2. 既存のロケールとディメンション・セットを新しいサイト(複数可)で共有するか、個別のものを作成するかを決定します。詳細は、「サイト間の多言語サポート」を参照してください。

  3. アセット関係をロケールの観点でレンダリング時に処理する方法を決定し、その決定に合ったロケール・フィルタリング・メソッドを選択します。この選択事項は、オートメーションのレベル、配信システムのパフォーマンスおよび編集の作業負荷の間のバランスをうまくとる必要があるため、サイトの管理者と合意しておくことがベストです。詳細は、「ロケール・フィルタリングでの作業」を参照してください。次の点に注意してください。

    • 別のフィルタリング・メソッドには、配信システムへのパフォーマンス・ヒットを犠牲にした異なったレベルのオートメーションが用意されています。フィルタが複雑になればなるほど、パフォーマンス・ヒットは高くなります。たとえば、簡易参照フィルタには階層フィルタより高いパフォーマンスが備わっています。

    • 実装するフィルタリング・メソッドに応じて、サイト・コンテンツへの編集作業は徐々に広げていくことができます。オリジナル・コンテンツが作成されてライブ・サイトに公表された後で、翻訳を作成できます。実装するフィルタリング・ロジックは、必要とされる言語バージョンで存在していないコンテンツに対して実行する手順を決定します。

  4. 単一言語サイトを多言語サイトに変換する場合には、デフォルト・ロケールをサイトのアセットに割り当てる際に使用するエレメント・コードを取得します。FirstSiteIIサンプル・サイトに基づいたサンプル・コードは、「デフォルト・ロケールの一括割当て用サンプル・エレメント・コード」に記載されています。

    注意:

    多言語セットを備えたサイトをレプリケートする場合、マスター・アセットがターゲット・サイトで(共有またはコピーのいずれかにより)使用できることを確認してください。使用できない場合は、セット・メンバーはターゲット・サイトの相互の翻訳にリンクされなくなります。

25.4 サイトに対する多言語サポートの構成

次の各項では、多言語サポートのサイトを構成する際に必要な手順を説明します。

25.4.1 構成のクイック・リファレンス

この項では、サイトの多言語サポートの構成に必要な手順の概要を述べます。構成プロセスの際には、このリストをクイック・リファレンスとして使用してください。

  1. 「サイトに対する多言語サポートの計画」の説明に従い、必要な決定と準備を行います。
  2. 「ディメンション」アセット・タイプおよび「ディメンション・セット」アセット・タイプをサイトで有効にします。手順は、「「ディメンション」アセット・タイプおよび「ディメンション・セット」アセット・タイプの有効化」を参照してください。
  3. 「ディメンション」アセット・タイプの「ロケール」サブタイプをサイトで有効にします。手順は、「「ディメンション」アセット・タイプの「ロケール」サブタイプの有効化」を参照してください。
  4. ロケールを作成または共有します。手順は、次の各項を参照してください。

    ロケールの作成か既存ロケールの共有のいずれかを決定する際のヘルプは、「サイト間の多言語サポート」を参照してください。

  5. ディメンション・セットを作成または共有します。手順は、次の各項を参照してください。

    新規ディメンション・セットの作成か既存ディメンション・セットの共有のいずれかを決定する際のヘルプは、「サイト間の多言語サポート」を参照してください。

  6. (オプション)既存の単一言語サイトを多言語サイトに変換する場合、デフォルトのロケールをサイトの各アセットに割り当てるエレメント・コードを実行します。手順は、「デフォルト・ロケールのサイト内アセットへの一括割当て方法」を参照してください。この項では、サイト用にカスタマイズ可能なサンプル・コードについて説明します。
  7. サイトで使用するテンプレートを変更して、ディメンション・セットの構成時に選択したロケール・フィルタのサポートを追加します。このプロセスの概要は、「サイトへのフィルタリング・サポートの追加について」を参照してください。

    注意:

    ロケール・フィルタリング以外にも、次のサイト機能を実装する必要があります。

    • 訪問者の言語プリファレンスの指定を許可する

    • 訪問者の言語プリファレンスをサイト全体に伝搬する(サイトのすべてのテンプレートに渡す)

    • セッションの間、訪問者の言語プリファレンスを維持する

25.4.2 「ディメンション」アセット・タイプおよび「ディメンション・セット」アセット・タイプの有効化

サイトで「ディメンション」アセットと「ディメンション・セット」アセットを作成する前に、対応するアセット・タイプとサブタイプを有効化する必要があります。この手順では、「ディメンション」アセット・タイプと「ディメンション・セット」アセット・タイプをサイトで有効にする方法を説明します。次の手順では、サイトで「ディメンション」アセット・タイプの「ロケール」サブタイプを有効にする方法を説明します。

  1. Adminインタフェースを開きます。

  2. 「一般的な管理」ツリーで、「管理」ノードを開きます。

  3. 「管理」ノードで、次の階層をドリル・ダウンします。

    1. 「サイト」ノードを開きます。

    2. 「サイト」ノードで、サイトに対応するノードを開きます。

    3. サイト・ノードで、「アセット・タイプ」ノードを開きます。

    4. 「アセット・タイプ」ノードで、「有効化」ノードをダブルクリックします。

    WebCenter Sitesに「アセット・タイプの有効化」フォームが表示されます。

  4. 「アセット・タイプの有効化」フォームで、「ディメンション」アセット・タイプと「ディメンション・セット」アセット・タイプの隣にあるチェック・ボックスを選択します。

  5. 「アセット・タイプの有効化」をクリックします。

    WebCenter Sites「スタート・メニューの選択」フォームが表示されます。

  6. 「スタート・メニューの選択」フォームで、すべてのチェック・ボックスを選択し、「アセット・タイプの有効化」をクリックします。

    WebCenter Sitesに、アセット・タイプがサイトで有効化されたことを確認するメッセージが表示されます。

25.4.3 「ディメンション」アセット・タイプの「ロケール」サブタイプの有効化

ロケールをサイトのアセットに割り当てる前に、サイトで「ディメンション」アセット・タイプの「ロケール」サブタイプを有効化する必要があります。

  1. Adminインタフェースを開きます。

  2. 「一般的な管理」ツリーで、「管理」ノードを開きます。

  3. 「管理」ノードで、次の階層をドリル・ダウンします。

    1. 「アセット・タイプ」ノードを開きます。

    2. 「アセット・タイプ」ノードで、「ディメンション」ノードを開きます。

    3. 「ディメンション」ノードで、「サブタイプ」ノードをダブルクリックします。

    WebCenter Sitesに「アセット・タイプのサブタイプ: ディメンション」フォームが表示されます。

  4. フォームで、「ロケール」サブタイプの隣にある「編集」(鉛筆)アイコンをクリックします。

    WebCenter Sitesに「ディメンション・サブタイプの編集: ロケール」フォームが表示されます。

  5. 「サイト」フィールドで、「ロケール」サブタイプを有効にするサイトを、[Ctrl]キーを押しながらクリックします。

    注意:

    既存のサイトの選択をそのままにするには、サイト名を[Ctrl]キーを押しながらクリックする必要があり、単にサイト名をクリックした場合は、他の選択済サイト(ある場合)の選択が解除されます。

  6. 「保存」をクリックします。

25.4.4 ロケールの作成方法

注意:

作成するロケールがWebCenter Sitesシステムの別のサイトにある「ディメンション」アセットで示されている言語を指定する場合、その言語を示す既存の「ディメンション」アセットを現在のサイトで共有して冗長性を回避します。

新規ロケールをサイトに追加するには、次の手順を実行して、ロケールを示す「ロケール」サブタイプの「ディメンション」アセットを作成します。

  1. ボタン・バーで、「新規」をクリックします。
  2. アセット・タイプのリストで、「新規ディメンション」をクリックします。
  3. WebCenter Sitesに、新規ディメンション・フォームが表示されます。
  4. 「新規ディメンション」フォームで、次の手順を実行します。

    「名前」フィールドに、そのロケールの説明的な名前を入力します。ベスト・プラクティスとして、次の表記規則を使用することをお薦めします。

    xx_YY

    ここで:

    • xxは2文字のISO 639-1言語コード(仏語の場合はfr)

    • YYは2文字のISO国コード(カナダの場合はCA)

    前述の例をまとめると、名前fr_CAはカナダ仏語を示します。

  5. 「説明」フィールドに、このロケールが表す言語の説明を入力します。
  6. 「サブタイプ」ドロップダウン・リストで、「ロケール」を選択します。
  7. 「保存」をクリックします。

25.4.5 別のサイトでのロケールの共有方法

ロケールを別のサイトで共有するには、対応する「ディメンション」アセットを共有する必要があります。

  1. Adminインタフェースを開き、共有するロケールに対する「ディメンション」アセットが存在するサイトを選択します。

  2. 「ディメンション」アセットを検索し、その「調査」フォームを開きます。

    1. ボタン・バーで、「検索」をクリックします。

    2. アセット・タイプのリストで、「ディメンションの検索」をクリックします。

    3. 検索条件を入力し(存在する場合)、「検索」をクリックします。

    4. 検索結果のリストで、アセットに移動して名前をクリックします。

      WebCenter Sitesによってアセットが「調査」フォームに表示されます。

  3. アクション・バーで、「ディメンションの共有」を選択します。

    WebCenter Sitesに、ディメンションの共有フォームが表示されます。

  4. 「ディメンションの共有」フォームで、「ディメンション」アセットを共有するサイトの隣にあるチェック・ボックスを選択します。(アセットをWebCenter Sitesシステム上のすべてのサイトで共有するには、「すべてのサイト」チェック・ボックスを選択します。)

  5. 「変更の保存」をクリックします。

    選択したサイトでアセットが使用可能になったことを示すメッセージがWebCenter Sitesに表示されます。

25.4.6 ディメンション・セットの作成と構成方法

ディメンション・セットを作成して構成する手順:

  1. 次の手順に従って、ディメンション・セットに追加する「ディメンション」アセット(ロケール)をブックマークに追加します。

    1. ボタン・バーで、「検索」をクリックします。

    2. 「検索」フォームで、「ディメンションの検索」をクリックします。

    3. 検索条件を入力し(存在する場合)、「検索」をクリックします。

    4. 検索結果のリストで、「ディメンション」アセットに移動して、チェック・ボックスを選択します。

    5. 「ブックマークに追加」をクリックします。

  2. 次の手順に従って、ディメンション・セットを作成して構成します。

    1. ボタン・バーで、「新規」をクリックします。

    2. 「新規」アセット・リストで、「新規ディメンション・セット」をクリックします。

      WebCenter Sitesに、新規ディメンション・セット・フォームが表示されます。

    3. 「名前」フィールドに、そのディメンション・セットを説明する名前を入力します。

    4. ツリーで、「ブックマーク」タブを選択します。

    5. 「ブックマーク」タブで、ディメンション・セットに追加するロケールを選択し、「選択したアイテムの追加」をクリックします。追加するロケールごとに、この手順を繰り返します。

    6. 「ディメンション・フィルタ・クラス」フィールドで、ロケール・フィルタ・タイプを選択します。「詳細」オプションを選択すると、カスタム・フィルタ・クラスを指定できます。

      ロケール・フィルタ・タイプの詳細は、「ロケール・フィルタリングでの作業」を参照してください。

    7. (オプション)手順2で「詳細」を選択した場合は、表示されたテキスト・ボックスにカスタム・フィルタ・クラスの名前を入力します。

    8. 終了したら、「変更の保存」をクリックします。

    9. (オプション)手順2で「階層」フィルタを選択した場合は、「階層フィルタのフォールバック階層の構成方法」の手順を完了して、フィルタのフォールバック階層を構成します。

25.4.7 別のサイトでのディメンション・セットの共有方法

ディメンション・セットを別のサイトへ共有させるには、対応する「ディメンション・セット」アセットを共有する必要があります。

  1. Adminインタフェースを開き、共有するロケールに対する「ディメンション・セット」アセットが存在するサイトを選択します。

  2. 「ディメンション・セット」アセットを検索し、その「調査」フォームを開きます。

    1. ボタン・バーで、「検索」をクリックします。

    2. アセット・タイプのリストで、「ディメンション・セットの検索」をクリックします。

    3. 検索条件を入力し(存在する場合)、「検索」をクリックします。

    4. 検索結果のリストで、アセットに移動して名前をクリックします。

      WebCenter Sitesに、アセットの「調査」フォームが表示されます。

  3. アクション・バーで、「ディメンション・セットの共有」を選択します。

    WebCenter Sitesに、ディメンション・セットの共有フォームが表示されます。

  4. 「ディメンション・セットの共有」フォームで、「ディメンション・セット」アセットを共有するサイトの隣にあるチェック・ボックスを選択します。(アセットをWebCenter Sitesシステム上のすべてのサイトで共有するには、「すべてのサイト」チェック・ボックスを選択します。)

  5. 「変更の保存」をクリックします。

  6. 選択したサイトでアセットが使用可能になったことを示すメッセージがWebCenter Sitesに表示されます。

25.4.8 ロケール・フィルタの構成方法

通常、サイトにディメンション・セットを作成する際にロケール・フィルタを構成します。既存のディメンション・セットのロケール・フィルタの構成を変更するには、次の手順を実行します。

  1. 構成するロケール・フィルタのディメンション・セットを検索して、「調査」フォームで開きます。

    1. ボタン・バーで、「検索」をクリックします。

    2. 「検索」フォームで、「ディメンション・セットの検索」をクリックします。

    3. 検索条件を入力し(存在する場合)、「検索」をクリックします。

    4. 検索結果のリストで、アセットに移動して名前をクリックします。

      WebCenter Sitesによってアセットが「調査」フォームに表示されます。

  2. 「ディメンション・フィルタ・クラス」フィールドで、フィルタ・タイプの隣にあるオプションを選択します。「詳細」オプションを選択すると、カスタム・フィルタ・クラスを指定できます。

    ロケール・フィルタの詳細は、「ロケール・フィルタリングでの作業」を参照してください。

  3. (オプション)手順2で「詳細」を選択した場合は、表示されたテキスト・フィールドにカスタム・フィルタ・クラスの名前を入力します。

  4. 「変更の保存」をクリックします。

  5. (オプション)手順2で「階層」フィルタを選択した場合は、「階層フィルタのフォールバック階層の構成方法」の手順を完了して、フィルタのフォールバック階層を構成します。

25.4.9 階層フィルタのフォールバック階層の構成方法

ディメンション・セットの構成時に階層(フォールバック)ロケール・フィルタを選択した場合は、次の手順を実行して、フィルタのフォールバック階層を構成します。

  1. 新規ロケールを追加したり、既存ロケールをフォールバック階層で並べ替える場合、次の手順に従って、階層に追加するロケールを表す「ディメンション」アセットをブックマークに追加します。

    1. ボタン・バーで、「検索」をクリックします。

    2. 「検索」フォームで、「ディメンションの検索」をクリックします。

    3. 検索条件を入力し(存在する場合)、「検索」をクリックします。

    4. 検索結果のリストで、「ディメンション」アセットに移動して、チェック・ボックスを選択します。

    5. 「ブックマークに追加」をクリックします。

  2. 「調査」フォームで、構成する階層フィルタが存在するディメンション・セットを検索して開きます。

    1. ボタン・バーで、「検索」をクリックします。

    2. 「検索」フォームで、「ディメンション・セットの検索」をクリックします。

    3. 検索条件を入力し(存在する場合)、「検索」をクリックします。

    4. 検索結果のリストで、「ディメンション・セット」アセットに移動して、ハイパーリンク名をクリックします。

      WebCenter Sitesに、「ディメンション・セット」アセットの「調査」フォームが表示されます。

  3. フォールバック階層を構成するときには、次の点に注意してください。

    • ロケールは、フォールバック階層に1回のみ表示できます。

    • 階層からロケールを削除する必要がある場合は、ロケール・ノードの隣にある「削除」(ゴミ箱)アイコンをクリックします。

    • 階層内のロケールの位置を変更する必要がある場合は、そのロケールを削除して、親ノードの下に追加します。

ローカル階層を構成する手順:

  1. 「ディメンション・フィルタ・クラス」フィールドで、「ロケール階層の構成」をクリックします。

    WebCenter Sitesに「ロケール階層の構成」フォームが表示されます。

  2. 「ロケール階層の構成」フォームで、「編集」をクリックします。

    WebCenter Sitesにフォームの編集可能バージョンが表示されます。

  3. ツリーで、「ブックマーク」タブを選択します。

  4. (オプション)階層が空白の場合には、「ブックマーク」タブでフォールバック階層の最上位ノードとして指定するロケールを選択し、「選択したアイテムの追加」をクリックします。

  5. 階層に追加するロケールの親ノードを選択します。

    スクラッチから階層を作成する場合は、選択できるのは、手順4で追加した最上位レベルのノードのみです。

    階層作成時には、フォールバック・プロセスが発生していく方向(最も特殊なものから最も特殊でないものへという方向、つまりツリーのルート・ノード方向)に注意してください。

  6. 「ブックマーク」タブで、手順5で選択した親ノードの下に表示するロケールを選択して、「選択したアイテムの追加」をクリックします。

  7. 階層に追加するロケールごとに、手順56を繰り返します。

  8. フォールバック階層が完了したら、「変更の保存」をクリックします。

25.4.10 デフォルト・ロケールのサイト内アセットへの一括割当て方法

単一言語サイトから多言語サイトへ変換している場合、デフォルト・ロケールをサイト内のすべてのアセットに割り当てる必要があります。これを迅速に実現させるには、デフォルト・ロケールをアセットに割り当てるエレメントを実行します。

作業を容易にするために、この手順のサンプル・エレメント・コードは、「デフォルト・ロケールの一括割当て用サンプル・エレメント・コード」に記載されています。サンプル・コードは例として記載されているため、実際のサイトではカスタマイズする必要があります。

  1. CSElementアセットを作成して、デフォルト・ロケールをアセットに割り当てるエレメント・コードを保持します。
  2. 手順1で作成したCSElementアセットを参照する、SiteEntryアセットを作成します。
  3. 手順2で作成したSiteEntryアセットを、次のURLでコールします。
    http://<host>:<port>/<context>/ContentServer?pagename=
    <siteentry_name>
    

    ここで:

    • <host>は、ご使用のWebCenter Sitesシステムのホストです

    • <port>は、WebCenter Sitesが接続をリスニングするポート番号です

    • <context>は、WebCenter Sitesアプリケーションに割り当てられたアプリケーション・コンテキストのルートです。

    • <siteentry_name>は、手順2で作成したSiteEntryアセットの名前です。

    エレメント・コードが実行を完了したら、アセットにロケールが割り当てられていることを確認してください。割り当てられていない場合は、エレメント・コードの考えられるエラーをチェックします。

25.4.10.1 デフォルト・ロケールの一括割当て用サンプル・エレメント・コード

この項には、FirstSiteIIサンプル・サイトに記述されたサンプル・エレメント・コードが記載されています。このコードは、次の操作を実行します。

  1. en_USという名前の「ディメンション」アセットを作成して、サイト内のデフォルト・ロケール指定を示します(この例ではアメリカ英語)。

  2. このデフォルト・ロケールをサイト内の「ページ」アセットに割り当てます。

    注意:

    この項のコードは、例として提供されています。これを使用すると決定したら、実際のサイトに対してカスタマイズしてください。デプロイ前にコードをテストしてください。この例には、エラー・チェック機能は含まれていません。

<%@ taglib prefix="cs" uri="futuretense_cs/ftcs1_0.tld"%>
<%@ taglib prefix="asset" uri="futuretense_cs/asset.tld"%>
<%@ taglib prefix="ics" uri="futuretense_cs/ics.tld"%>
<%@ taglib prefix="render" uri="futuretense_cs/render.tld"%>
<%@ taglib prefix="user" uri="futuretense_cs/user.tld"%>

<cs:ftcs>

<%-- Record dependencies for the SiteEntry and the CSElement --%>
<ics:if condition='<%=ics.GetVar("seid")!=null%>'>
<ics:then>
<render:logdep cid='<%=ics.GetVar("seid")%>' c="SiteEntry"/>
</ics:then>
</ics:if>

<ics:if condition='<%=ics.GetVar("eid")!=null%>'>
<ics:then>
<render:logdep cid='<%=ics.GetVar("eid")%>' c="CSElement"/>
</ics:then>
</ics:if>

<%-- log in as firstsite--%>
<user:login username="firstsite" password="firstsite"/>
<%-- create the Dimension asset (this can be done manually) --%>
<asset:create name="en_US" type="Dimension"/>
<asset:setsubtype name="en_US" value="Locale"/>
<asset:set name="en_US" field="name" value='en_US'/>
<asset:set name="en_US" field="description" value='US English'/>
<%-- enter your site's pubid below --%>
<ics:setvar name="primarypubid" value="1112198287026"/> 
<asset:save name="en_US"/>

<%-- look up the id of the Dimension asset you just created --%>
<asset:get name="en_US" field="id" output="en_US.id"/>

<%-- get a list of all Content_C assets in the site, and assign a dimension to each of them --%>
<asset:list type="Content_C" list="allContentAssets" pubid="1112198287026"/>
<ics:listloop listname="allContentAssets">
<ics:listget listname="allContentAssets" fieldname="id" output="id"/>
<asset:load type="Content_C" objectid='<%=ics.GetVar("id")%>' name="tempName" editable="true"/>
<asset:adddimension name="tempName" dimensionid='<%=ics.GetVar("en_US.id")%>'/>
<asset:save name="tempName"/>
</ics:listloop>
</cs:ftcs>

25.5 WebCenter Sites翻訳メカニズムの使用のヒント

一般的な2つのシナリオを次に示します。

  • 編集チームが最初に一次言語でコンテンツを作成およびパブリッシュしてから、必要に応じて臨機応変に翻訳し、翻訳/ローカライズ版をパブリッシュします。

  • 編集チームは、コンテンツの作成と翻訳をパッケージとして一緒に行います。完了したら、パッケージを一斉にパブリッシュします。

25.5.1 顧客が希望すること

  • マスター言語でコンテンツを作成して、関連する他のコンテンツに接続してから(マスター言語でない場合もあります)、パブリッシュして後で翻訳できるようにする

  • コンテンツと、関連する他の部分を最初に翻訳してから、全体を1つのパッケージとしてパブリッシュする。

  • レンダリングされるコンテンツに国に固有のルールを柔軟に適用する。

25.5.2 顧客の要件を効率的に満たすためのWebCenter Sites翻訳メカニズムの使用

WebCenter Sitesには、ディメンション・セットと呼ばれるアセット・タイプを使用するビルトイン翻訳メカニズムがあります。実際、翻訳済バージョン同じコンテンツはすべて、同じディメンション・セット・インスタンスに属します。この機能では、ロケールのフォールバック・ツリーの設計も可能です。翻訳されたコンテンツが現在のロケールでロケールにない場合、使用可能な別の翻訳がフォールバック・バージョンとして表示されます。1つのディメンション・セットに含めることができるロケールは、それぞれ1回のみです。国ごとに異なるシーケンスで同じロケールを使用することはできません。

複数のディメンション・セットを使用した翻訳の作成

この状況を改善するために、開発者は国ごとに異なるディメンション・セットを作成して、それぞれに独立したフォールバック・ロジックを定義できるようにします。たとえば、顧客が、フランス語のコンテンツなどのサイトに英語のコンテンツを表示したくないと考える場合があります。一方、オランダを拠点にする顧客が、オランダ語のコンテンツに加えて、英語のコンテンツを自社のサイトに掲載したいと考える場合もあります。つまり、必要となるフォールバック・メカニズムは国ごとに異なります。

そのため、サイトの対象が20か国の場合は、ディメンション・セットは20 (おそらく合計で30から40以上のロケール)になります。複数のディメンション・セットをサポートするには、レンダリングするテンプレート・コードで、使用するディメンション・セットを決定できるようにする必要があります。翻訳タグには、現在の翻訳のディメンション・セット名が必要です。次の2つのプロパティでは、複数のディメンション・セットを使用できます。

  • ディメンション・セットの名前は、国コードの値です。たとえば、ukは英国、deはドイツなどです。

  • すべてのWeb参照可能アセットには、国コードを明示的に含むURLパス(例: www.mysite.com/uk/helloworldおよびwww.mysite.com/de/helloworld)が含まれ、またはuk.mysite.com/helloworldなどの異なるサブドメインをサポートできます。

注意:

Accept-Language値またはIPジオロケーションに基づいて、ユーザーごとに同じURLの異なるコンテンツをレンダリングすることは、一般的には不適切な行為です。その理由は、Googleなどの検索エンジンが、このような戦略をおとり商法の形態と判断する場合があるため、SEOランキングが低くなる可能性があるためです。

前述の2つの機能が配置されている場合、開発者は、URLリクエストを解析して国の値を抽出し、追加の引数として国の値を渡します(この値はテンプレートで使用され、現在のアセットに使用するディメンション・セットを指定できます)。(デフォルトと想定できる国コードのないプライマリ・サイトを選択することは、一部の顧客にとって一般的です。)

別のオプションは、訪問者がブラウザに設定した可能性のある優先ロケールCookieをコードで優先することです。

他の言語が使用されるWebサイトで顧客が同じコンテンツを希望するタイミング

一部の顧客は、アセットを…/us/helloworldとしてパブリッシュ可能な仮想URLのサポートを希望しています。これらの顧客は、同じコンテンツが(翻訳する必要なく)他の英語のサイト(例: …/uk/helloworld…/ca/helloworld…/au/helloworldなど)でレンダリングされることも希望しています。後者の要件は、グローバル(またはマスター)バージョンのアセットを作成することで処理できます。そのため、ISOロケールのみをディメンション・セットに階層的に含めるのではなく、開発者は構成済のロケール必要に応じて含めることができます。次のCH (スイス)のディメンション・セットの例では、グローバルディメンション・セットの使用について説明します。

global
en_GLOBAL
en_CH
de_GLOBAL
de_CH
fr_GLOBAL
fr_CH

前述の階層ディメンション・セットは次のように機能できます。

  • エディタでロケール固有の差異が必要な場合、必要に応じてローカライズ済のアドホック翻訳を行うことができます。例: en_CHde_CHまたはfr_CH

  • 言語固有の差異を別のディメンション・セットで使用可能にする必要がある場合、開発者は、アドホック・グローバル翻訳をかわりに行うことができます。例: en_GLOBALglobal-defr_GLOBAL

前述のような固定階層では、フォールバック・ロジックの例外を含めることができません。

前述の例は、地域のフォールバックも含まれるように拡張できます(例: 中南米スペイン語es_LADおよび南アジア英語en_AS)。これにより、マーケティングで、中南米の対象者向けにローカライズされたコンテンツを作成し、en_GLOBALが使用されている場合のように、他の国際サイトに表示することなく、そのコンテンツを多くの国のサイトに配信できます。

ロケール固有のコンテンツの検索の有効化

様々なフォールバック・ロジックをすべて考慮しながら、問合せベースの検索でロケール単位アセットのリストをどのようにまとめ、レンダリングすればよいでしょうか。たとえば、訪問者がフランス語のWebサイトにいる場合、その訪問者が希望するのは、おそらくfr_FRまたはfr_GLOBALのコンテンツを閲覧することです。同じディメンション・セットで重複する翻訳は回避する必要があります。

解決策

検索可能な属性に基づいて動的リストを問合せで返すには、検索を特定のロケールに制約するのに使用可能な属性がアセットに必要です。これを有効にするには、カスタム・フレックス・フィルタを介して、各アセットの選択済ロケール(このような属性ではありません)を、SearchableLocaleという名前の複数値属性に変換する必要があります。たとえば、ほとんどのクライアントでは、fr_FRがフランス語のフォールバック階層のリーフ・ノードになるため、ロケールがfr_FRのアセットには、SearchableLocale=fr_FRの単一の値が格納されます。ただし、ロケールがfr_GLOBALのアセットには、fr_FRおよびすべてのフランス語圏の国のその他のフランス語ロケールを格納する必要があります。これにより、制約された問合せを介して、このグローバルフランス語アセットを複数のフランス語サイトに表示できます。たとえば、ヨーロッパのみのWebサイトの場合、fr_GLOBALアセットでは、そのフレックス・フィルタを介して保存時にfr_FRおよびfr_CH SearchableLocale値が作成されるため、フランス(FR)およびスイス(CH)のサイトに表示されます。

注意:

前述のアセット属性へのフォールバック値の非正規化により、実行時に少ない問合せを実行できます。マーケティングでフォールバック・ロジックの変更が必要な場合、すべてのデータ値を再計算する必要があります。ソリューションの設計時には、注意して進めてください。

特定の国のサイトでのグローバルアセットの非表示

多くの顧客は、グローバル・アセットを特定の国で非表示にしたいと考えています。したがって、翻訳可能なアセットごとに、HideFromTheseCountries属性を定義に追加する必要があります。編集インタフェース(選択したロケールに基づいて、現在のアセットの非表示が可能)に表示される国のリストを制限するには、カスタム属性エディタを作成する必要もあります。つまり、現在のロケールがfr_FRの場合、非表示にする国のリストはNULLになります。一方、選択したロケールがfr_GLOBALの場合、国のリストには、すべての国のサイトをサポートするために作成されるディメンション・セットの数に応じてFRCHなどが含まれます。

カスタムHideFromTheseCountries属性/属性エディタと、最適化されたロケールを複数値SearchableLocale属性として非正規化するカスタム・フレックス・フィルタの組合せにより、テンプレートのレンダリングの問合せでは、現在のロケールを制約として追加するだけで済みます。たとえば、ロケールがfr_FRのWebページでは、最新ニュースを右側のページレットに表示できます。このページレットでは、locale=fr_FRのNewsアセットを問い合せて、日付別にリストをソートします。fr_GLOBALアセットもfr_FRに翻訳され、それにより両方がリストに返されるため、重複する場合があります。重複を削除するには、重複を除外する制約された問合せからiListを取得する、翻訳タグ<dimensionset:filter>を使用します。

キャッシングの問題の処理

すべての翻訳を一度にパブリッシュする場合、既存の翻訳を変更すると、そのアセットに依存するページレットは、パブリッシュ時に失効します。グローバル・バージョンの言語をパブリッシュしてから、そのアセットのローカライズ済バージョンを後で作成すると、ページレットの最後のレンダリング時に依存関係が記録されないため、システムが更新を認識する方法がありません。

簡単な例として、フランス語ページの最新のプレス・リリースのリストを取り上げ、すべてのアセットがfr_GLOBALとしてレンダリングされていると想定します。さらに、リンクが名前付きアソシエーションとして明示的に定義され、すべての依存関係がレンダリング/キャッシュ時に認識されることも想定します。これらのアセットのいずれかを翻訳してパブリッシュする場合、希望する動作は、リンクがグローバル・バージョンではなく、ローカライズ済の翻訳になることです。しかし、ページレットの最後のレンダリング時に存在していないアセットへの依存関係をロギングする方法はないため、システムがそのリンクの更新を認識する方法はありません。このため、新規翻訳のパブリッシュ時に何も未キャッシュされません。

簡単な解決策は、新しい子がディメンション・セットに追加されたら常にマスター・アセットを更新することです。そのためには、既存のディメンション・セットに影響する可能性のある新規アセットがパブリッシュされたら常に、これらのタスクをバックグラウンドで実行するカスタム・パブリッシュ・リスナーを実装する必要があります。アセットの承認およびパブリッシュまでは数日から数週間かかる場合があるため、新規翻訳の作成時にマスター・セットを更新する必要はありません。

また、マスター・アセットがチェックされたか、まだ承認されていない可能性のある状況については、自動承認メカニズムで処理する必要もあることに注意してください。