Archived
1
0
Fork 0

i18n (not yet working, need debugging)

This commit is contained in:
Dianliang233 2021-08-02 15:32:16 +08:00
parent ee48e5ed33
commit 3e25ad1cde
No known key found for this signature in database
GPG key ID: 6C56F399D872F19C
5 changed files with 76 additions and 1 deletions

48
core/i18n/__init__.py Normal file
View 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}')

View file

@ -0,0 +1,3 @@
{
"en": "1"
}

View file

@ -0,0 +1,3 @@
{
"en" : "0"
}

View file

@ -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
View 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)