8
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

NRI OpenStandia (IAM編)Advent Calendar 2024

Day 24

Keycloakの多言語対応の最新状況

Last updated at Posted at 2024-12-23

NRI OpenStandia (IAM編) Advent Calendar 2024の24日目は、Keycloakの多言語対応の最新状況について紹介します。

Keycloakの多言語対応

Keycloakはデフォルトでは英語のみの表示モードになっています。例えば、Keycloakを新規にインストールして起動し、管理コンソールにログインしようとすると、ログイン画面は必ず英語です。

image.png

これは、管理コンソールの「master」レルム内の「Realm settings > Localization」にて、デフォルトDisabledが設定されているためです。

image.png

これをEnabledに変更することで、「Supported locales」と「Default locale」の設定が可能になります。

image.png

例えば、上記のようにJapaneseを「Supported locales」に追加して保存し、再度管理コンソールへのログイン画面を開くと以下のように日本語表示となります(ブラウザの言語設定に応じて送信されるAccept-Languageヘッダーを参照して、自動的に日本語となります1)。

image.png

「master」レルムにて多言語を有効化すると、管理コンソールも設定した言語で表示されます。

image.png

「master」レルム用のアカウントコンソールも同様です。

image.png

その他のレルムは、レルム単位で多言語を有効化することで、そのレルムのログイン画面やアカウントコンソールが多言語表示になります。

しかしお気付きでしょうか・・・? 日本語表示としたときに、部分的に翻訳されていない箇所があちこちにありますよね・・? 多言語対応の状況は言語ごとにバラバラであり、2024年12月時点では日本語もまだ対応しきれていない箇所があるのです。

なお、未翻訳や誤訳、自分たちの使い方にフィットしない訳の場合に、Keycloak利用者側でメッセージを差し替えることも可能です。大きく以下の2つの方法があります。

  • テーマを作成してメッセージを差し替える
  • 管理コンソールからメッセージを差し替える

後者の方法は、テーマを作らなくてもよいので本当に文言だけ調整したい場合は非常に便利です。「Realm settings > Localization > Realm overrides」から言語とメッセージごとに設定可能です。

image.png

例えばログイン画面の「ユーザー名またはメールアドレス」を差し替える場合は、usernameOrEmailキーに値を設定します。

image.png

そうするとKeycloakの再起動なしに即反映されます。

image.png

※メッセージのキーは、「Realm settings > Localization > Effective message bundles」から検索可能です。

image.png

多言語化の歴史

KeycloakはUIのメッセージを言語ごとのプロパティファイル形式で管理しています。例えば、 https://github.com/keycloak/keycloak/tree/8525be6b33f5d81d18f626cca706c9d2adb74b60/themes/src/main/resources-community/theme/base/login/messages ではログイン画面のメッセージが管理されています。

image.png

長らく、各言語対応に興味のある方が時折プルリクエストを送り、このプロパティファイルの新規追加(言語追加)や更新を行っていました。例えば、日本語対応は2016年に筆者が以下のプルリクエストを作成して対応を開始しました。

そして継続的にプロパティファイルを最新化するプルリクエストがあり、メンテンナンスが行われています(OpenStandiaの@k-tamuraさんが積極的に対応してくれています)。

多言語対応に関するディスカッション

2021年12月21日に、以下のディスカッションが作成されました。現状の多言語対応の作業を楽にするために、専用のプラットフォームを使ったらどうか?という提案です。

長らくこのディスカッションは放置されていましたが、2023年7月に突如Keycloakメンテナーからコメントがあり、 Weblate を使った方式にしようぜ!という流れに一気になりました。

image.png

そしてWeblateを使ったワークフローへと徐々に変更されていきます。そこで日本語のWeblateによる翻訳対応も、日立製作所の@y-tabataさんと一緒に進めることになりました。

image.png

Weblateによる多言語対応

以下に、Weblateを使った多言語対応のガイドが整備されています。

ここに書かれているように、翻訳に協力して頂ける方はWeblateでアカウント作成し、Keycloakの翻訳チームに参加します。

後は、Weblate上でひたすら翻訳をするだけです!:writing_hand::writing_hand::writing_hand:

以前のプロパティファイルベースの翻訳のように、GitHubにプルリクエストを出す必要はありません。エンジニアではない方でも翻訳のコントリビューションが非常にしやすくなったと思います。

なお、このサイトにアクセスすると、言語ごとの現在の翻訳状況を見ることができます。この記事を執筆している時点だと、日本語はWeblate対応している言語の中でも一番翻訳率は低く、これから頑張っていく所存です・・・!

image.png

Weblateを使った日本語翻訳作業

実際にどんな感じで日本語への翻訳作業ができるのか軽く紹介します。

概要ページ

日本語翻訳の概要ページです。ここで全体の状況を確認できます。

image.png

コンポーネントごとのimage.pngなどをクリックすると、翻訳ページを開くことができます。

翻訳ページ

開いた翻訳ページで実際に翻訳作業を行います。

画面上部に以下のメッセージが出ている場合は「貢献者同意条項への同意」が必要です。

image.png

「貢献者同意条項の表示」をクリックすると同意画面が開きます。内容を読んで同意して頂ける場合は進めてください。

image.png

未翻訳のものは「日本語」のテキストエリアが空になっているので、ここに翻訳を入力して「保存して次へ」または「保存のみ」ボタンをクリックして保存するだけです!

image.png

検索ページ

検索ページです。ここで原文メッセージや翻訳メッセージなどで対象を検索することができます。

image.png

試しに「翻訳文」で「アクセストークン」を検索してみました(「フィルター」にtarget:アクセストークンと入力します)。

image.png

20件ヒットした模様です。Keycloakを使っていて、翻訳が間違っているんじゃないか!?と思った時にはこれで検索してサクッと修正提案していただけると、非常に助かります:bow:

image.png

おわりに

本記事では、Keycloakの多言語対応の最新状況として、翻訳プラットフォームであるWeblateを使ったワークフローに変更されていることを紹介しました。Weblateを使うことで、翻訳のためにGitやGitHubを使う必要もなくなりましたので、エンジニア以外の方でも参加しやすくなったのではないかと思います。 「OSSに何かコントリビューションしてみたい・・・」 と考えている方にとって、翻訳は非常に取り組みやすい最初の一歩になるでしょう。興味を持たれた方は是非ご協力をお願いします!

  1. Accept-Languageヘッダーが利用できない場合は、レルムの「Default locale」設定が利用されます。また、他の要素でも表示言語は決まります。詳細な決定ロジックは、公式ドキュメント(https://www.keycloak.org/docs/26.0.7/server_admin/index.html#_user_locale_selection )を参照してください。

8
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?