以下のプロジェクトの画像をアップロードしました:'Discovery Service'
  1. Discovery Service
  2. DISCOVERY-71

ブラウザの言語設定より優先させて特定の言語で表示する方法

    詳細

    • タイプ: 改善
    • ステータス: オープン
    • 優先度:
    • 解決状況: 未解決
    • 影響バージョン: なし
    • 修正バージョン: なし
    • ラベル:
      なし

      説明

      GakuNin mAP
      https://map.gakunin.nii.ac.jp/
      など、ブラウザの使用言語を上書きして特定の言語で表示するものがあります。(mAPでは右上に言語選択リンクがあります)
      現状では、他の文はともかくEmbedded DS内は固定の言語(ブラウザの使用言語)になってしまうので、言語を切り替える方法がほしいかなと思います。

      ひとまず、SP側でcookie名を指定して、ブラウザの言語設定よりまずそちらを見るというのが良いかと思いますがいかがでしょうか。cookieの中身は

      fr,en,ja

      とかなっていて、左から見てマッチする言語があればそれを使うというのでいかがでしょうか。

      さらに言うと、JavaScriptの変数で言語を指定したり、ページ読み込み後にメソッド呼び出しで動的に変えられると嬉しいなと思うところもあります。

        アクティビティ

        非表示
        takeshi@gakunin.nii.ac.jp Takeshi Nishimura がコメントを追加 - - 編集済み

        ふと見つけましたが、
        https://ds.gakunin.nii.ac.jp/WAYF/en/embedded-wayf.js
        のように言語名をパスに入れればその言語で表示されるようです。
        https://ds.gakunin.nii.ac.jp/WAYF/embedded-wayf.js?lang=en
        のようにquery stringに入れても反映されます。(情報提供感謝)

        cookieやJavaScriptの変数で受け渡すのと比べて柔軟ではない感じですがひとまずやりたいことは実現できそうです。

        なお、EmbeddedだけでなくCentral DSも
        https://ds.gakunin.nii.ac.jp/WAYF/en/
        と指定することで言語を指定できますが、これは通常shibboleth2.xmlに静的に書いておくものなのであまり良い用途が思い浮かびません。

        (追記)
        本家SWITCHのページにも書いてありました。
        http://www.switch.ch/aai/support/serviceproviders/sp-embedded-wayf.html

        Language to be used:
        By default, the Embedded WAYF analyzes the web browser's Accept-Languages headers in order to determine what locale shall be used for the texts that are displayed. However, it is also possible to force the WAYF to use a specific language by changing the WAYF's URL. Say you want to use German as default language. In this case you would change the WAYF URL path from /SWITCHaai/WAYF to /SWITCHaai/WAYF/de/. The same can be done for French (/fr), Italian (/it) and English (/en).

        表示
        takeshi@gakunin.nii.ac.jp Takeshi Nishimura がコメントを追加 - - 編集済み ふと見つけましたが、 https://ds.gakunin.nii.ac.jp/WAYF/en/embedded-wayf.js のように言語名をパスに入れればその言語で表示されるようです。 https://ds.gakunin.nii.ac.jp/WAYF/embedded-wayf.js?lang=en のようにquery stringに入れても反映されます。(情報提供感謝) cookieやJavaScriptの変数で受け渡すのと比べて柔軟ではない感じですがひとまずやりたいことは実現できそうです。 なお、EmbeddedだけでなくCentral DSも https://ds.gakunin.nii.ac.jp/WAYF/en/ と指定することで言語を指定できますが、これは通常shibboleth2.xmlに静的に書いておくものなのであまり良い用途が思い浮かびません。 (追記) 本家SWITCHのページにも書いてありました。 http://www.switch.ch/aai/support/serviceproviders/sp-embedded-wayf.html Language to be used: By default, the Embedded WAYF analyzes the web browser's Accept-Languages headers in order to determine what locale shall be used for the texts that are displayed. However, it is also possible to force the WAYF to use a specific language by changing the WAYF's URL. Say you want to use German as default language. In this case you would change the WAYF URL path from /SWITCHaai/WAYF to /SWITCHaai/WAYF/de/. The same can be done for French (/fr), Italian (/it) and English (/en).
        非表示
        takeshi@gakunin.nii.ac.jp Takeshi Nishimura がコメントを追加 - - 編集済み

        現状Central DSを使っている場合は上記の通り直接的な方法がありません。
        1)
        discoveryTemplate.htmlを使うなどでEmbedded DSに移行した上で言語を指定することが考えられます。

        2)
        なお、Central DSを使いつつ言語を強制する方法として、query stringに lang=ja のように指定してシボレス認証強制のURLにアクセスする場合(例:https://sp.example.org/secure/?lang=ja)、shibboleth2.xmlに以下の記述を挿入することで実現できるようです。(挿入位置は <ApplicationDefaults> の直上です)

        <RequestMapper type="Native">
            <RequestMap>
                <Host name="sp.example.org">
                    <Query name="lang" regex="^ja$" discoveryURL="https://ds.gakunin.nii.ac.jp/WAYF/ja/"/>
                    <Query name="lang" regex="^en$" discoveryURL="https://ds.gakunin.nii.ac.jp/WAYF/en/"/>
                </Host>
            </RequestMap>
        </RequestMapper>
        

        ※RequestMapperを使う場合は UseCanonicalName On であることを今一度確認してください。

        3)
        もちろん、言語毎のSessionInitiatorを用意しておけば、/Shibboleth.sso/DSja?target=%2Fsecure%2F のようなURLにアクセスさせることで、指定言語のCentral DSを経由しIdPで認証した後 /secure/ に遷移させることが可能です。
        追加するSessionInitiatorの例:

        <SessionInitiator type="Chaining" Location="/DSja" id="DSja">
            <SessionInitiator type="SAML2" template="bindingTemplate.html"/>
            <SessionInitiator type="Shib1"/>
            <SessionInitiator type="SAMLDS" URL="https://ds.gakunin.nii.ac.jp/WAYF/ja/"/>
        </SessionInitiator>
        

        関連: DSを経由せず強制的に特定のIdPに遷移する方法 - 設定・運用・カスタマイズ - GakuNinShare - meatwiki

        表示
        takeshi@gakunin.nii.ac.jp Takeshi Nishimura がコメントを追加 - - 編集済み 現状Central DSを使っている場合は上記の通り直接的な方法がありません。 1) discoveryTemplate.htmlを使う などでEmbedded DSに移行した上で言語を指定することが考えられます。 2) なお、Central DSを使いつつ言語を強制する方法として、query stringに lang=ja のように指定してシボレス認証強制のURLにアクセスする場合(例: https://sp.example.org/secure/?lang=ja )、shibboleth2.xmlに以下の記述を挿入することで実現できるようです。(挿入位置は <ApplicationDefaults> の直上です) <RequestMapper type= "Native" > <RequestMap> <Host name= "sp.example.org" > <Query name= "lang" regex= "^ja$" discoveryURL= "https://ds.gakunin.nii.ac.jp/WAYF/ja/" /> <Query name= "lang" regex= "^en$" discoveryURL= "https://ds.gakunin.nii.ac.jp/WAYF/en/" /> </Host> </RequestMap> </RequestMapper> ※RequestMapperを使う場合は UseCanonicalName On であることを今一度確認してください。 3) もちろん、言語毎のSessionInitiatorを用意しておけば、 /Shibboleth.sso/DSja?target=%2Fsecure%2F のようなURLにアクセスさせることで、指定言語のCentral DSを経由しIdPで認証した後 /secure/ に遷移させることが可能です。 追加するSessionInitiatorの例: <SessionInitiator type= "Chaining" Location= "/DSja" id= "DSja" > <SessionInitiator type= "SAML2" template= "bindingTemplate.html" /> <SessionInitiator type= "Shib1" /> <SessionInitiator type= "SAMLDS" URL= "https://ds.gakunin.nii.ac.jp/WAYF/ja/" /> </SessionInitiator> 関連: DSを経由せず強制的に特定のIdPに遷移する方法 - 設定・運用・カスタマイズ - GakuNinShare - meatwiki

          ピープル

          • 担当者:
            takeshi@gakunin.nii.ac.jp Takeshi Nishimura
            報告者:
            takeshi@gakunin.nii.ac.jp Takeshi Nishimura
          • 投票:
            0 この課題に投票する
            ウォッチャー:
            0 この課題のウォッチを開始する

            日付

            • 作成日:
              更新日: