初步的 kvmd 国际化(汉化)支持

1. 添加汉化文件
2. 添加 Lanuages().gettext 函数处理字符替换
3. 修改相关字符串调用
This commit is contained in:
mofeng-git
2024-08-06 21:45:16 +08:00
parent 6a966af5fb
commit 20927c7226
34 changed files with 999 additions and 113 deletions

View File

@@ -23,6 +23,8 @@
import secrets
import pyotp
from gettext import translation
from ...logging import get_logger
from ... import aiotools
@@ -49,26 +51,26 @@ class AuthManager:
totp_secret_path: str,
) -> None:
_ = translation(domain="message",localedir="/kvmd/i18n",languages=["zh"]).gettext
self.__enabled = enabled
if not enabled:
get_logger().warning("AUTHORIZATION IS DISABLED")
get_logger().warning(_("AUTHORIZATION IS DISABLED"))
self.__unauth_paths = frozenset(unauth_paths) # To speed up
for path in self.__unauth_paths:
get_logger().warning("Authorization is disabled for API %r", path)
get_logger().warning(_("Authorization is disabled for API %r"), path)
self.__internal_service: (BaseAuthService | None) = None
if enabled:
self.__internal_service = get_auth_service_class(internal_type)(**internal_kwargs)
get_logger().info("Using internal auth service %r", self.__internal_service.get_plugin_name())
get_logger().info(_("Using internal auth service %r"), self.__internal_service.get_plugin_name())
self.__force_internal_users = force_internal_users
self.__external_service: (BaseAuthService | None) = None
if enabled and external_type:
self.__external_service = get_auth_service_class(external_type)(**external_kwargs)
get_logger().info("Using external auth service %r", self.__external_service.get_plugin_name())
get_logger().info(_("Using external auth service %r"), self.__external_service.get_plugin_name())
self.__totp_secret_path = totp_secret_path
@@ -96,7 +98,7 @@ class AuthManager:
if secret:
code = passwd[-6:]
if not pyotp.TOTP(secret).verify(code):
get_logger().error("Got access denied for user %r by TOTP", user)
get_logger().error(_("Got access denied for user %r by TOTP"), user)
return False
passwd = passwd[:-6]
@@ -107,9 +109,9 @@ class AuthManager:
ok = (await service.authorize(user, passwd))
if ok:
get_logger().info("Authorized user %r via auth service %r", user, service.get_plugin_name())
get_logger().info(_("Authorized user %r via auth service %r"), user, service.get_plugin_name())
else:
get_logger().error("Got access denied for user %r from auth service %r", user, service.get_plugin_name())
get_logger().error(_("Got access denied for user %r from auth service %r"), user, service.get_plugin_name())
return ok
async def login(self, user: str, passwd: str) -> (str | None):
@@ -119,7 +121,7 @@ class AuthManager:
if (await self.authorize(user, passwd)):
token = self.__make_new_token()
self.__tokens[token] = user
get_logger().info("Logged in user %r", user)
get_logger().info(_("Logged in user %r"), user)
return token
else:
return None
@@ -129,7 +131,7 @@ class AuthManager:
token = secrets.token_hex(32)
if token not in self.__tokens:
return token
raise AssertionError("Can't generate new unique token")
raise AssertionError(_("Can't generate new unique token"))
def logout(self, token: str) -> None:
assert self.__enabled
@@ -140,7 +142,7 @@ class AuthManager:
if r_user == user:
count += 1
del self.__tokens[r_token]
get_logger().info("Logged out user %r (%d)", user, count)
get_logger().info(_("Logged out user %r (%d)"), user, count)
def check(self, token: str) -> (str | None):
assert self.__enabled