AutoTranslation.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import requests
  2. import re
  3. from homepagebuilder.interfaces import require
  4. from homepagebuilder.interfaces import Logger
  5. logger= Logger('AutoTranslation')
  6. parsers_module = require('markdown_parsers')
  7. handles = parsers_module.handles
  8. Text = parsers_module.Text
  9. PATTERN = re.compile(r"<td>([a-zA-Z\d\s\-]+)</td>\s*<td>([^\(<]+)\s*</td>\s*(?:<td>(?:[^<]+)\s*</td>)?</tr>")
  10. EXTRA_TRANSLATIONS ={
  11. "data value": "数据值",
  12. "block state": "方块状态",
  13. "argument": "参数",
  14. "parameter": "参数",
  15. "sprite": "精灵图",
  16. "variant": "变种",
  17. "job site": "工作站点",
  18. "workplace": "工作站点"
  19. }
  20. content = requests.get('https://zh.minecraft.wiki/w/Minecraft_Wiki:译名标准化').content.decode("utf-8")
  21. TRANSLATIONS = {}
  22. for en,zh in re.findall(PATTERN,content):
  23. en = en.lower()
  24. zh = zh.replace("\n","")
  25. if zh == '-':
  26. TRANSLATIONS[en] = en
  27. else:
  28. TRANSLATIONS[en] = zh
  29. logger.info(f"译名标准化已载入 {len(TRANSLATIONS)} 条标准译名。")
  30. TRANSLATIONS.update(EXTRA_TRANSLATIONS)
  31. @handles('n')
  32. class AutoText(Text):
  33. def convert(self):
  34. name = self.content
  35. if translation := TRANSLATIONS.get(name):
  36. return translation
  37. else:
  38. return f'<Italic>{name}</Italic>'