NRI OpenStandia (IAM編) Advent Calendar 2024の24日目は、Keycloakの多言語対応の最新状況について紹介します。
Keycloakの多言語対応
Keycloakはデフォルトでは英語のみの表示モードになっています。例えば、Keycloakを新規にインストールして起動し、管理コンソールにログインしようとすると、ログイン画面は必ず英語です。
これは、管理コンソールの「master」レルム内の「Realm settings > Localization」にて、デフォルトDisabled
が設定されているためです。
これをEnabled
に変更することで、「Supported locales」と「Default locale」の設定が可能になります。
例えば、上記のようにJapanese
を「Supported locales」に追加して保存し、再度管理コンソールへのログイン画面を開くと以下のように日本語表示となります(ブラウザの言語設定に応じて送信されるAccept-Language
ヘッダーを参照して、自動的に日本語となります1)。
「master」レルムにて多言語を有効化すると、管理コンソールも設定した言語で表示されます。
「master」レルム用のアカウントコンソールも同様です。
その他のレルムは、レルム単位で多言語を有効化することで、そのレルムのログイン画面やアカウントコンソールが多言語表示になります。
しかしお気付きでしょうか・・・? 日本語表示としたときに、部分的に翻訳されていない箇所があちこちにありますよね・・? 多言語対応の状況は言語ごとにバラバラであり、2024年12月時点では日本語もまだ対応しきれていない箇所があるのです。
なお、未翻訳や誤訳、自分たちの使い方にフィットしない訳の場合に、Keycloak利用者側でメッセージを差し替えることも可能です。大きく以下の2つの方法があります。
- テーマを作成してメッセージを差し替える
- 管理コンソールからメッセージを差し替える
後者の方法は、テーマを作らなくてもよいので本当に文言だけ調整したい場合は非常に便利です。「Realm settings > Localization > Realm overrides」から言語とメッセージごとに設定可能です。
例えばログイン画面の「ユーザー名またはメールアドレス」を差し替える場合は、usernameOrEmail
キーに値を設定します。
そうするとKeycloakの再起動なしに即反映されます。
※メッセージのキーは、「Realm settings > Localization > Effective message bundles」から検索可能です。
多言語化の歴史
KeycloakはUIのメッセージを言語ごとのプロパティファイル形式で管理しています。例えば、 https://github.com/keycloak/keycloak/tree/8525be6b33f5d81d18f626cca706c9d2adb74b60/themes/src/main/resources-community/theme/base/login/messages ではログイン画面のメッセージが管理されています。
長らく、各言語対応に興味のある方が時折プルリクエストを送り、このプロパティファイルの新規追加(言語追加)や更新を行っていました。例えば、日本語対応は2016年に筆者が以下のプルリクエストを作成して対応を開始しました。
そして継続的にプロパティファイルを最新化するプルリクエストがあり、メンテンナンスが行われています(OpenStandiaの@k-tamuraさんが積極的に対応してくれています)。
多言語対応に関するディスカッション
2021年12月21日に、以下のディスカッションが作成されました。現状の多言語対応の作業を楽にするために、専用のプラットフォームを使ったらどうか?という提案です。
長らくこのディスカッションは放置されていましたが、2023年7月に突如Keycloakメンテナーからコメントがあり、 Weblate を使った方式にしようぜ!という流れに一気になりました。
そしてWeblateを使ったワークフローへと徐々に変更されていきます。そこで日本語のWeblateによる翻訳対応も、日立製作所の@y-tabataさんと一緒に進めることになりました。
Weblateによる多言語対応
以下に、Weblateを使った多言語対応のガイドが整備されています。
ここに書かれているように、翻訳に協力して頂ける方はWeblateでアカウント作成し、Keycloakの翻訳チームに参加します。
後は、Weblate上でひたすら翻訳をするだけです!
以前のプロパティファイルベースの翻訳のように、GitHubにプルリクエストを出す必要はありません。エンジニアではない方でも翻訳のコントリビューションが非常にしやすくなったと思います。
なお、このサイトにアクセスすると、言語ごとの現在の翻訳状況を見ることができます。この記事を執筆している時点だと、日本語はWeblate対応している言語の中でも一番翻訳率は低く、これから頑張っていく所存です・・・!
Weblateを使った日本語翻訳作業
実際にどんな感じで日本語への翻訳作業ができるのか軽く紹介します。
概要ページ
日本語翻訳の概要ページです。ここで全体の状況を確認できます。
コンポーネントごとのなどをクリックすると、翻訳ページを開くことができます。
翻訳ページ
開いた翻訳ページで実際に翻訳作業を行います。
未翻訳のものは「日本語」のテキストエリアが空になっているので、ここに翻訳を入力して「保存して次へ」または「保存のみ」ボタンをクリックして保存するだけです!
検索ページ
検索ページです。ここで原文メッセージや翻訳メッセージなどで対象を検索することができます。
試しに「翻訳文」で「アクセストークン」を検索してみました(「フィルター」にtarget:アクセストークン
と入力します)。
20件ヒットした模様です。Keycloakを使っていて、翻訳が間違っているんじゃないか!?と思った時にはこれで検索してサクッと修正提案していただけると、非常に助かります。
おわりに
本記事では、Keycloakの多言語対応の最新状況として、翻訳プラットフォームであるWeblateを使ったワークフローに変更されていることを紹介しました。Weblateを使うことで、翻訳のためにGitやGitHubを使う必要もなくなりましたので、エンジニア以外の方でも参加しやすくなったのではないかと思います。 「OSSに何かコントリビューションしてみたい・・・」 と考えている方にとって、翻訳は非常に取り組みやすい最初の一歩になるでしょう。興味を持たれた方は是非ご協力をお願いします!
-
Accept-Language
ヘッダーが利用できない場合は、レルムの「Default locale」設定が利用されます。また、他の要素でも表示言語は決まります。詳細な決定ロジックは、公式ドキュメント(https://www.keycloak.org/docs/26.0.7/server_admin/index.html#_user_locale_selection )を参照してください。 ↩