JES: Providing language links to switch Portal Desktop language

JES: Creating multi-lingual Portal Desktop on Java ES Portal Server からの続きです。

ConditionalProperties を使えば日本語と英語のポータルデスクトップを作ることができます!と書きたかったところですがここでひとつ問題がありました。残念なことにこの ConditionalProperties での切り替えが authlessanonymous ユーザーでうまくいきませんでした。これはバグ 5059646 という既知バグなのですがこのことをす~っかり忘れていました。portal/dt のページが場合によって日本語と英語の混在したチャネルが表示されてしまいます。このページをホームページにしたかったのですがこのバグのため断念 せざるおえませんでした。

自前で作ろう

ConditionalProperties をあきらめて自前でポータルデスクトップの日/英の切り替えを作ることにしました。日本語のチャネルを日本語のタブに入れてそれをまとめた日本語のタブコンテナを作り、またそれぞれを英語のタブコンテナを作り、タブコンテナごとリンクで切り替える仕組みを入れてみましょう。ポータルデスクトップを作る方法については以 前のブログを参照してください。ほとんど同じです。

日本語と英語のチャネルを作る

ひとつのチャネルで日本語/英語を表示するチャネルはあきらめて日本語のコンテンツを表示するチャネルと英語のコンテンツを表示するチャネルを別々に作り ましょう。少し面倒なような気もしますがディスプレイプロファイルですべて設定できますので非常に簡単です。日本語のものはそのままの名前がついていま す。英語のものは後ろに EN とつけています。

    <Channel name="TGCNews1" provider="URLScraperProvider">
        <Properties>
            <String name="title" value="TGC ニュース"/>
            <String name="inputEncoding" value="EUC-JP"/>
            <ConditionalProperties condition="client" value="HTML">
                <String name="url" value="file:///var/web/ja/news1.html"/>
            </ConditionalProperties>
        </Properties>
    </Channel>

英語のは次のようになります。

    <Channel name="TGCNews1EN" provider="URLScraperProvider">
        <Properties>
            <String name="title" value="TGC News 1"/>
            <ConditionalProperties condition="client" value="HTML">
                <String name="url" value="file:///var/web/en/news1.html"/>
            </ConditionalProperties>
        </Properties>
    </Channel>

コンテナを作る

title や url の値が違うのがわかりますね。日本語用、英語用のそれぞれのチャネルを作ったらコンテナに追加します。これも英語用、日本語用で別々に作るようにします。 TGCNewsContainer に他のチャネルを追加します。(ディスプレイプロファイル内の <Available> は省略して書いています)

    <Container name="TGCNewsContainer" provider="PredefinedSamplesTabPanelContainerProvider">
        <Properties>
            <String name="title" value="ニュース"/>
        </Properties>
        <Selected>
            <Reference value="TGCNews1"/>
            <Reference value="TGCNews2"/>
            <Reference value="TGCNewsIndex"/>
        </Selected>
        <Channels>
        </Channels>
    </Container>

    <Container name="TGCNewsContainerEN" provider="PredefinedSamplesTabPanelContainerProvider">
        <Properties>
            <String name="title" value="News"/>
        </Properties>
        <Selected>
            <Reference value="TGCNews1EN"/>
            <Reference value="TGCNews2EN"/>
            <Reference value="TGCNewsIndexEN"/>
        </Selected>
        <Channels>
        </Channels>
    </Container>

タブコンテナを作る

作ったコンテナをタブコンテナに入れます。EN のタブコンテナには英語のチャネルを入れます。

    <Container name="TGCTabContainer" provider="JSPTabContainerProvider" merge="replace">
        <Properties>
        </Properties>
        <Selected>
            <Reference value="TGCTopContainer"/>
            <Reference value="TGCProjectContainer"/>
            <Reference value="TGCNewsContainer"/>
            <Reference value="TGCSharingContainer"/>
            <Reference value="TGCGallaryContainer"/>
        </Selected>
        <Channels>
        </Channels>
    </Container>

    <Container name="TGCTabContainerEN" provider="JSPTabContainerProvider" merge="replace">
        <Properties>
        </Properties>
        <Selected>
            <Reference value="TGCTopContainerEN"/>
            <Reference value="TGCProjectContainerEN"/>
            <Reference value="TGCNewsContainerEN"/>
            <Reference value="TGCSharingContainerEN"/>
            <Reference value="TGCGallaryContainerEN"/>
        </Selected>
        <Channels>
        </Channels>
    </Container>

これでチャネルの部分は出来上がりました。

ディスプレイプロファイルを変更する

これを dpadmin で追加します。authlessanonymous ユーザーの DN を指定して次のようにします。

      % /opt/SUNWps/bin/dpadmin modify -m \\
                               -u "uid=amadmin,ou=people,dc=xyz,dc=com" \\
                               -w passwd \\
                               -d "uid=authlessanonymous,ou=people,dc=xyz,dc=com" \\
                               ファイル名

特定のタブコンテナを表示するには

/etc/opt/SUNWps/desktop/anonymous_ja に TGCTabContainer と TGCTabContainerEN ディレクトリを作ります。それぞれ JSPTabContainerProvider からファイルをコピーしてカスタマイズします。次のような日本語と英語の切り替えのリンクをページのヘッダー、右上に追加します。

Japanese | English

次の URL を使うと特定のタブコンテナとその選ばれるタブを指定することができます。英語のページを表示したいのであれば次のようにします。setSelected =TGCTopContainerEN でどのタブが表示されるかを指定します。

TGCTabContainer/header.jsp:

<a href="/portal/dt?action=content&provider=TGCTabContainer&TGCTabContainer.setSelected=TGCTopContainer">
Japanese
</a>
|
<a href="/portal/dt?action=content&provider=TGCTabContainerEN&TGCTabContainerEN.setSelected=TGCTopContainerEN">
English
</a>

完成しました!

ということで無事に完成しました! header.jsp、menubar.jsp 、selectedTab.jsp、tab.jsp、tabs.jsp などを変更してルック&フィールもサンの新しいものに合わせてみました。それぞれの右上のヘッダに切り替えのリンクがあります。実際には日本語のページを見ている時には英語に切り替えるリンクしか必要ありませんから、HomeEnglish リンクがあります。英語のページを見ているときには Japanese のリンクを表示しています。






Comments:

Post a Comment:
Comments are closed for this entry.
About

NetBeans Globalization

Search

Archives
« April 2014
SunMonTueWedThuFriSat
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
   
       
Today