如何强制Keycloak使用浏览器默认语言?

问题描述 投票:0回答:1

我已经设置了一个带有我自己主题的Keycloak服务器。 Keycloak 应该支持多种语言,但我不想显示选择器。

相反,Keycloak 应该回退到默认浏览器语言。 在 Keycloak 22 中,这看起来不像是一个只需在管理控制台中配置的选项。您只能在此处启用多种语言,系统会自动显示该语言选择器。

让 Keycloak 回退到默认浏览器语言的最佳方法是什么?

internationalization keycloak freemarker
1个回答
0
投票

经过一些编程,我得到了这个解决方案:

  1. 删除template.ftl中的Selector
  2. 使用以下代码创建一个js脚本:
// Function to get the value of a query parameter from a URL
function getQueryParamValue(url, paramName) {
  const params = new URLSearchParams(new URL(url).search);
  return params.get(paramName);
}

// Function to get the user's browser language
function getUserBrowserLanguage() {
  const userLanguage = navigator.language || navigator.userLanguage;
  return userLanguage.split("-")[0]; // Extract language code (e.g., "en" from "en-US")
}

// Function to reload the page with the kc_locale query parameter added
function reloadWithLocaleQueryParam(locale) {
  const currentURL = window.location.href;
  const existingLocale = getQueryParamValue(currentURL, "ui_locales");

  // If kc_locale parameter doesn't exist or is empty, add it to the URL
  if (!existingLocale) {
    const delimiter = currentURL.includes("?") ? "&" : "?";
    const newURL = `${currentURL}${delimiter}ui_locales=${locale}`;
    window.location.href = newURL;
  }
}

// Get user's browser language and reload with kc_locale parameter if needed
const userLanguage = getUserBrowserLanguage();
reloadWithLocaleQueryParam(userLanguage);
  1. 将脚本添加到template.ftl中:
<head>
....
   <script src="${url.resourcesPath}/js/languageManager.js"></script>
</head>

请注意,该解决方案基于此: 如何通过URL传递keycloak登录页面语言

具体来说,该解决方案依赖于查询参数“ui_locales”,根据@Míra,该参数适用于 keycloak 13.0.0+ 对于钥匙斗篷 >7.0.0 & <13.0.0 use kc_locale.

© www.soinside.com 2019 - 2024. All rights reserved.