sanmusen214 / BAAH

Help you automatically finish daily tasks in Blue Archive (global/Japan/CN/CN bilibili server). 碧蓝档案国际服/日服/蔚蓝档案国服官服/国服B服每日任务脚本
MIT License
312 stars 11 forks source link

Add i18n in the terminal #43

Closed sanmusen214 closed 2 weeks ago

sanmusen214 commented 3 weeks ago

Feat English in the BAAH terminal logs.

sanmusen214 commented 2 weeks ago

f1bc0c5 just add some English messages of warning and error. Too many messages of logging.info. Maybe someone could look at this.

sanmusen214 commented 2 weeks ago

Who are interested in it can just

  1. Fork the dev branch
  2. Search globally logging.info and paste {"zh_CN": , "en_US": } in the brackets as the param of logging.info.
  3. Move the original Chinese message into it.
  4. Write the English message in it.
  5. Make an PR tp dev

Thanks a lot : )

ly5519 commented 2 weeks ago

maybe we can create a string resource to manage the information, like android, then you can do better for internationalization hard-code....that's not a good idea

ly5519 commented 2 weeks ago

see branch English_locallization, I'm doing it and maybe this will help you:

import re
import pyperclip

def get_level(input_str: str) -> str:
    out = re.search(r'info|warn|error', input_str)
    if out:
        return out.group()
    else:
        return ""

while True:
    input("Press Enter to continue...")
    clip_str = pyperclip.paste().strip()
    sear_re = re.search(r'(?<=\(").+(?="\))', clip_str)
    if sear_re:
        out_str = f'logging.{get_level(clip_str)}({{"zh_CN": "{sear_re.group()}", "en_US": ""}})\n'
        print(f"the string is in your clipboard: {out_str}")
        pyperclip.copy(out_str)
        print("===============================")
    else:
        print("no search found")
sanmusen214 commented 2 weeks ago

开摆

ly5519 commented 2 weeks ago

开摆 ba99e41e9c5ed48dccc2fdf417e46a2a

ly5519 commented 2 weeks ago

真别搞字符串硬编码,要死人。。。。。。 留一个python脚本在这里,是完成本次问题的好手,但还是干的很痛苦 ee4b2205f4612feed9fbecbcaa83f5dc

import re
import sys

import pyperclip
from translate import Translator

def search_level(input_str: str):
    out = re.search(r'logging\.info|warn|error', input_str)
    return out

def search_bracket(input_str: str) -> str:
    sear_re = re.search(r'(?<=\().+(?=\))', input_str)
    if sear_re:
        return sear_re.group()
    else:
        return ""

def get_translate_tuple(need_translate: str):
    out_res = ["", ""]
    res = re.findall(r'[a-zA-Z]', need_translate)
    is_english: bool
    if len(need_translate) == 0:
        is_english = False
    else:
        rate = len(res) / len(need_translate)
        is_english = True if rate > 0.7 else False
    if is_english:
        out_res[1] = need_translate
        out_res[0] = Translator(from_lang='en', to_lang='zh').translate(need_translate)
    else:
        out_res[0] = need_translate
        out_res[1] = Translator(from_lang='zh', to_lang='en').translate(need_translate)

    print(out_res)
    return out_res

def log_to_translate(line_str: str):
    level = search_level(line_str)
    if level:
        content = search_bracket(line_str)
        translate_list = get_translate_tuple(content)
        if translate_list is None:
            return None
        out = line_str[:level.span()[0]] + level.group() + (f'({{"zh_CN": {translate_list[0]}, '
                                                            f'"en_US": {translate_list[1]}}})\n')
        return out

def get_file_all_lines(file_path: str):
    with open(file_path, 'r', encoding="utf-8") as f:
        lines = f.readlines()
        return lines

def need_to_translate(one_line: str) -> bool:
    if re.search(r'zh_CN', one_line):
        return False
    return bool(re.search(r'logging\.info|warn|error\("', one_line))

if __name__ == '__main__':
    print("start")
    arg_file_path = sys.argv[1]
    line_list = get_file_all_lines(arg_file_path)
    out_file = open("./output.py", "w", encoding="utf-8")

    for idx, line in enumerate(line_list):
        line = line
        if need_to_translate(line):
            print(idx + 1, line.strip())
            new_line = log_to_translate(line)
            if new_line is not None:
                out_file.write(new_line)
            else:
                out_file.write(line)
        else:
            out_file.write(line)

    out_file.close()
ly5519 commented 2 weeks ago

大部分翻译是来自于pip包translate, 小部分翻译是来自于youdao.com, 极小一部分来自本人的乱翻,确认一下没问题就可以关issue了

ly5519 commented 2 weeks ago

贴PR里了没有直接合dev,森哥检查一下

sanmusen214 commented 2 weeks ago

辛苦了,我待会看下哈

sanmusen214 commented 2 weeks ago

真别搞字符串硬编码,要死人。。。。。。

如果搞语言包的话也得定位到每一个logging去修改,复杂程度也差不多,而且这个日志涉及到模板字符串,写成语言包不好搞变量模板。

sanmusen214 commented 2 weeks ago

Thanks to ly5519, BAAH now can be 99% English.

ly5519 commented 1 week ago

真别搞字符串硬编码,要死人。。。。。。

如果搞语言包的话也得定位到每一个logging去修改,复杂程度也差不多,而且这个日志涉及到模板字符串,写成语言包不好搞变量模板。

这个可以用占位符解决,只要插入的变量个数相同就行

ly5519 commented 1 week ago

如果之后还想适配新的一门语言本地化的话就建议重构了

sanmusen214 commented 1 week ago

如果之后还想适配新的一门语言本地化的话就建议重构了

之后再看吧,logging能打英语已经差不多了