OpenAM ログイン画面の日本語化

# はじめに
#### 本記事は、[OpenAM/OpenIGを使用したシングルサインオン環境の構築](http://qiita.com/gzock/items/af6f820b5e872366e853)という記事から続く関連記事の一部です

OpenAMのログイン画面はデフォルトでは英語表記になっている。
ただの検証ならこれでも全く問題ないのだけど、実際のSSO導入案件だと日本語化してくれという要望が当然のようにある。
さほど難しいものではないのだけれど、メモ程度に本記事にまとめます。

# 前提
* OpenAMがインストールされているサーバはCentOS7.3を想定
* OpenAMは無料で手に入るv13.0を使用
* XUIを有効化していること

# 環境
* OpenAM
  * サーバOS: CentOS7.3
  * ホスト名: sso.test.local
  * IPアドレス: 172.16.1.130
  * JDK Ver: 1.8.0_111
  * Tomcat Ver: 8.0.39
  * OpenAM Ver: 13.0.0

# 目標
OpenAMログイン画面の日本語化

# 概要
OpenAMのログイン画面あるいはログイン後のポータル画面などの文言は特定のフォルダ配下にjsonファイルにてまとめられている。
なので、HTMLを修正するだとかではなく、jsonの中身を修正するだけで簡単に画面の文言を修正できる。
ただし、一部HTML修正しないといけない部分はある。
さすがに全部は説明しきれないし、私としても全て日本語化したことあるわけじゃないので、サンプル的に以下2つの画面の変更をやってみます。
ちなみに以下2つはIE11で表示させています。

* ログイン画面
![2017-04-03-10-19-16.png](https://qiita-image-store.s3.amazonaws.com/0/80163/69b4fd1c-0e12-1682-ba74-507b36f5d05e.png)

* ログアウト後画面
![2017-04-03-10-36-23.png](https://qiita-image-store.s3.amazonaws.com/0/80163/09f8b95a-1ce6-3c93-68f2-4b7ce1d177ed.png)


# サンプル1: ログイン画面
ログイン画面は最初から大半が日本語化されている。この画面の実ファイルは以下。
`/opt/tomcat/webapps/openam/config/auth/default_ja/DataStore.xml`
画面上のフォームのユーザー名やパスワード、OPENAMへのサインインという文言を変更したい場合は、上記ファイルを直接変更する必要がある。

ロゴ画面の変更やフッターの変更の際は下記ファイルを修正する。
`/opt/tomcat/webapps/openam/XUI/config/ThemeConfiguration.js`

例えば以下はThemeConfiguration.jsの抜粋だが、内容としては非常に簡単。
フッターの内容を変えたいなら、footer => mailtoやphoneの値を変更すれば良い。
ロゴ画面はloginLogoのsrcでパスの指定になるのだが、私が試した限り、別のファイルに指定しても設定が効いてくれない。何故だろう・・・
というわけで私の場合は、オリジナルのlogin-logo.pngをバックアップしておいて、変更したい画像で同名上書き保存した。
これでばっちりロゴが変更される。
大きさを変えたいなら、heightやwidthを弄る。もちろんtitleやaltも変更したほうが良い。

```
抜粋
                loginLogo: {
                    // The URL of the image.
                    src: "images/login-logo.png",
                    // The title attribute used on <img> tags.
                    title: "ForgeRock",
                    // The alt attribute used on <img> tags.
                    alt: "ForgeRock",
                    // The height of the logo as a CSS length.
                    height: "104px",
                    // The width of the logo as a CSS length.
                    width: "210px"
                },
                // The footer is displayed on every page.
                footer: {
                    // A contact email address.
                    mailto: "info@forgerock.com",
                    // A contact phone number. If empty, it will not be displayed.
                    phone: ""
                }
            }
        },
```


# サンプル2: ログアウト後画面
ログアウト後画面だけではないのだが、様々な画面の文言は以下のファイルにまとめられている。
`/opt/tomcat/webapps/openam/XUI/locales/en/translation.json`
フォルダ名を見てわかるかと思うが、言語別にjsonファイルがわかれていて、アクセスする環境によって適切なファイルがその都度適用されるらしい。
ただし、日本語環境用のjaフォルダは最初からは存在しないので(DataStore.xmlはあるのに・・・)、こちら側で作成する必要がある。
もし対象言語のファイルがない場合は、enが採用されるみたい。そのため、何もしない状態では、英語表記になっている。
つまり、/opt/tomcat/webapps/openam/XUI/locales/en/translation.json を直接修正して文言を書き換えてしまえば、それでも変更自体はされる。
とはいえ、健康的なのは日本語ファイルを作ることなので、やってみる。

```
[root@sso openam]# pwd
/opt/tomcat/webapps/openam
[root@sso openam]# mkdir XUI/locales/ja
[root@sso openam]# cp -a XUI/locales/en/translation.json XUI/locales/ja/translation.json
```

あとは好きなように/opt/tomcat/webapps/openam/XUI/locales/ja/translation.jsonを修正すれば良い。
とはいえ、画面の特定の文言がファイル内のどこにあたるのかなかなかわからないと思う。
そのときは単純にファイル内検索で画面の文言を検索すれば良い。必ず見つかるはず。あとは日本語用に書き換えてしまう。
例としては、YOU HAVE BEEN LOGGED OUT. という文字の場合は、まずは小文字でloggedで検索すると24行目でloggedOutというkeyでバッチリな文言が見つかる。あとはこれをお好きな文言に書き換える。
この例のように場所にもよるが、画面上は大文字でもファイル内の文字は小文字で記述されている場合があるので、検索するときは大文字小文字問わない設定で行ったほうがよいと思う。

基本的にはこの繰り返しなのだが・・・どうもIE11の場合、XUI/locales/ja/translation.jsonが適用されないようで・・・
私の場合はen側もjaと同じように変更しています。Chrome v56やFirefox v52では、ja側がばっちり使われる。


# 動作確認
設定反映させるにはhtmlを変更した場合はOpenAMの再起動が必要。jsonの変更の場合は特に必要ない。
動作確認するときは、Webブラウザのキャッシュが効いている可能性があるので、Webブラウザのプライベートウィンドウやシークレットウィンドウ機能を利用して試したほうが良い。


# 小ネタ
ログイン画面とログアウト後画面でサンプルを2つ示して、変更するファイルもいくつか示したのだが、一部それらのファイル以外を弄らないと行けない部分もある。
そういったものを探す場合は、`grep -ir [string]`といった感じで全文検索してしまうのが手っ取り早くて良いと思う。

```
[root@sso openam]# grep -ir "return to loginpage" ./
./XUI/locales/en/translation.json:            "returnToLoginPage": "Return to LoginPage",
```