Skip to content

Commit

Permalink
feat(bot): add internationalization support and locale property
Browse files Browse the repository at this point in the history
  • Loading branch information
HsiangNianian committed Nov 9, 2024
1 parent 9bb3d15 commit 5387a14
Show file tree
Hide file tree
Showing 7 changed files with 126 additions and 72 deletions.
123 changes: 76 additions & 47 deletions iamai/bot.py

Large diffs are not rendered by default.

16 changes: 2 additions & 14 deletions iamai/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
iamai uses `pydantic <https://pydantic-docs.helpmanual.io/>`_ to read configuration.
"""

from typing import Set, Union
from typing import Optional, Set, Union

from pydantic import BaseModel, ConfigDict, DirectoryPath, Field

Expand Down Expand Up @@ -40,18 +40,6 @@ class LogConfig(ConfigModel):
level: Union[str, int] = "DEBUG"
verbose_exception: bool = False


class LanguageConfig(ConfigModel):
"""Language configuration.
Attributes:
language: The language of the bot.
"""
all: Set[str] = Field(default_factory=set)
shell: Set[str] = Field(default_factory=set)
reply: Set[str] = Field(default_factory=set)


class BotConfig(ConfigModel):
"""Bot configuration.
Expand All @@ -65,8 +53,8 @@ class BotConfig(ConfigModel):
plugins: Set[str] = Field(default_factory=set)
plugin_dirs: Set[DirectoryPath] = Field(default_factory=set)
adapters: Set[str] = Field(default_factory=set)
locale: Set[str] = Field(default_factory=set)
log: LogConfig = LogConfig()
language: LanguageConfig = LanguageConfig()


class PluginConfig(ConfigModel):
Expand Down
3 changes: 2 additions & 1 deletion iamai/const.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import pathlib
from importlib.metadata import version


APPNAME = "iamai"
LOCALE_DIR = pathlib.Path(__file__).parent / "locale"

__version__ = version(APPNAME)
__version__ = version(APPNAME)
16 changes: 8 additions & 8 deletions iamai/i18n.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
import os
import polib
import gettext
from typing import Set
from typing import List
from gettext import GNUTranslations

localedir = os.path.join(os.path.dirname(__file__), "locale")

def setup_gettext(
domain: str = os.path.basename(__file__).strip(".py"),
localedir: str = localedir,
languages: Set[str] = {"en"},
languages: List[str] = ["en"],
) -> GNUTranslations:
"""Setup gettext
Expand All @@ -23,17 +23,17 @@ def setup_gettext(
"""
try:
# Try to bind the specified domain
translation = gettext.translation(domain, localedir, languages=languages)
compile_mo_files(localedir, domain)
print("translation found.")
translation = gettext.translation(domain, localedir, languages=languages)
# print("translation found.")
except FileNotFoundError:
# Fallback to the default domain 'messages' if the specified domain is not found
_domain = "messages"
compile_mo_files(localedir, _domain)
translation = gettext.translation(
_domain, localedir, languages=languages, fallback=True
)
compile_mo_files(localedir, _domain)
print("translation not found, fallback to default domain 'messages'")
# print("translation not found, fallback to default domain 'messages'")

# Install the translation object globally
translation.install()
Expand Down Expand Up @@ -62,5 +62,5 @@ def compile_mo_files(localedir: str, domain: str) -> None:


if __name__ == "__main__":
_ = setup_gettext(domain="1", languages={"zh"})
print(_("hello {name}").format(name="baka"))
_ = setup_gettext(languages=["zh"])
print(_("Version: {version}").format(version="baka"))
32 changes: 32 additions & 0 deletions iamai/locale/zh/LC_MESSAGES/bot.po
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Chinese translations for iamai package
# Copyright (C) 2024 ORGANIZATION
# This file is distributed under the same license as the iamai package.
msgid ""
msgstr ""
"Project-Id-Version: iamai\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-03-21 12:00+0800\n"
"PO-Revision-Date: 2024-03-21 12:00+0800\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: zh <[email protected]>\n"
"Language: zh\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: manual\n"


msgid "Restarting iamai..."
msgstr "正在重启 iamai..."

msgid "Running iamai..."
msgstr "正在运行 iamai..."

msgid "Version: {version}"
msgstr "版本: {version}"

msgid "Startup adapter {_adapter!r} failed: {error}"
msgstr "启动适配器 {_adapter!r} 失败: {error}"

msgid "Load adapter \"{adapter_}\" failed:"
msgstr "加载适配器 \"{adapter_}\" 失败:"
3 changes: 2 additions & 1 deletion iamai/locale/zh/LC_MESSAGES/i18n.po
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,5 @@ msgid "hello world"
msgstr "你好世界"

msgid "hello {name}"
msgstr "你好 {name}"
msgstr "你好 {name}"

5 changes: 4 additions & 1 deletion iamai/locale/zh/LC_MESSAGES/messages.po
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,7 @@ msgstr "当前版本:{version}"


msgid "hello {name}"
msgstr "你好 {name}"
msgstr "你好 {name}"

msgid "Running iamai..."
msgstr "正在运行 iamai..."

0 comments on commit 5387a14

Please sign in to comment.