i18n (not yet working, need debugging)
This commit is contained in:
parent
ee48e5ed33
commit
3e25ad1cde
5 changed files with 76 additions and 1 deletions
48
core/i18n/__init__.py
Normal file
48
core/i18n/__init__.py
Normal file
|
@ -0,0 +1,48 @@
|
|||
import os
|
||||
import json
|
||||
|
||||
from core.elements import MessageSession
|
||||
from database import BotDBUtil
|
||||
|
||||
class BotI18n:
|
||||
def __init__(self, msg: MessageSession):
|
||||
self.session = msg
|
||||
files = os.listdir(os.path.abspath('./core/i18n/lang/'))
|
||||
self.storage = {}
|
||||
self.languages: list = []
|
||||
self.uselang = 'zh_cn'
|
||||
for lang in files:
|
||||
obj = json.load(open('./core/i18n/lang/' + lang, 'r'))
|
||||
name = lang.split('.')[0]
|
||||
self.languages.append(name)
|
||||
self.storage[name] = obj
|
||||
|
||||
for module in BotDBUtil.Module(msg).enable_modules_list:
|
||||
if module.startswith('_lang_'):
|
||||
self.uselang = module.strip('_lang_')
|
||||
break
|
||||
else:
|
||||
continue
|
||||
|
||||
@classmethod
|
||||
def get_string(self, key: str):
|
||||
strings = self.storage[self.uselang]
|
||||
if key in strings:
|
||||
return strings[key]
|
||||
else:
|
||||
fallbacks = strings['__metadata__']['fallback']
|
||||
for fallback in fallbacks:
|
||||
fallbacked = False
|
||||
fallback_strings = self.storage[fallback]
|
||||
if key in fallback_strings:
|
||||
fallbacked = True
|
||||
return fallback_strings[key]
|
||||
else:
|
||||
continue
|
||||
if not fallbacked:
|
||||
return key
|
||||
|
||||
@classmethod
|
||||
def set_language(self, target):
|
||||
BotDBUtil.Module.disable(f'_lang_{self.uselang}')
|
||||
BotDBUtil.Module.enable(f'_lang_{target}')
|
3
core/i18n/lang/en_us.json
Normal file
3
core/i18n/lang/en_us.json
Normal file
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"en": "1"
|
||||
}
|
3
core/i18n/lang/zh_cn.json
Normal file
3
core/i18n/lang/zh_cn.json
Normal file
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"en" : "0"
|
||||
}
|
|
@ -35,4 +35,3 @@ class CommandTriggerTime(Base):
|
|||
targetId = Column(String(512), primary_key=True)
|
||||
commandName = Column(String(512))
|
||||
timestamp = Column(TIMESTAMP, default=text('CURRENT_TIMESTAMP'))
|
||||
|
||||
|
|
22
modules/lang/__init__.py
Normal file
22
modules/lang/__init__.py
Normal file
|
@ -0,0 +1,22 @@
|
|||
import traceback
|
||||
|
||||
from core.elements import MessageSession
|
||||
from core.loader.decorator import command
|
||||
from core.i18n import BotI18n
|
||||
|
||||
@command('lang', ('i18n', 'language', 'languages'), (
|
||||
'~lang current {获取当前语言}',
|
||||
'~lang set <target> {设置群组使用语言}',
|
||||
'~lang get <string> {获取指定字符串}'),
|
||||
need_admin=True, is_base_function=True
|
||||
)
|
||||
async def lang(msg: MessageSession):
|
||||
i18n = BotI18n(msg)
|
||||
if msg.parsed_msg['set']:
|
||||
await i18n.set_language(msg.parsed_msg['<target>'])
|
||||
await msg.sendMessage('设置成功。')
|
||||
|
||||
elif msg.parsed_msg['get']:
|
||||
await msg.sendMessage(await i18n.get_string(msg.parsed_msg['<string>']))
|
||||
elif msg.parsed_msg['current']:
|
||||
await msg.sendMessage(i18n.uselang)
|
Reference in a new issue