GoldenDict的OpenCC能提供更多的汉字转换选项吗?

我阅读了帮助文件,看来GoldenDict的OpennCC默认只使用了

s2tw.json(简体中文→台湾繁体)
s2hk.json(简体中文→港澳繁体)
t2s.json(繁体中文→简体中文)

三个文件。在查询简体中文和繁体中文的时候这是完全够用的,但是碰到中国人学日文(日本人学中文应该类似)的时候就不够用了,因为日本战后使用的「新字体」,有的字在Unicode里面和简体中文、繁体中文都不一样。
例:国铁、國鐵、国鉄。
日本新字体汉字的「国」和简体中文在Unicode里面是一个字,但是日本新字体汉字的「鉄」和简体中文的「铁」繁体中文的「鐵」都不一样。
而opencc里面是有t2jp.json和jp2t.json实现繁体汉字→日本新字体和日本新字体→繁体汉字转换的。所以说,要是GoldenDict的词典-词典来源-转写-中文转换里面增加

繁体中文→日本新字体(直接使用t2jp.json) 和 日本新字体→繁体中文(直接使用jp2t.json)
简体中文→日本新字体(先用s2t.json转一遍,再用t2jp.json转一遍) 和 日本新字体→简体中文(先用jp2t.json转一遍,再用t2s.json转一遍)

四个额外选项,那对中文或者日文的学习者来说,想必都会更加方便吧!

在AI辅助下造出了程序辞典。
中日跳转:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import sys
import urllib.parse
from opencc import OpenCC

def main():
    if len(sys.argv) < 2:
        return

    word = sys.argv[1].strip()
    if not word:
        return

    try:
        # 第一步:简体 → 标准繁体
        cc_s2t = OpenCC('s2t')
        trad = cc_s2t.convert(word)
        # 第二步:标准繁体 → 日本新字体
        cc_t2jp = OpenCC('t2jp')
        result = cc_t2jp.convert(trad)
    except Exception:
        # 转换失败,不输出任何内容
        return

    # 如果转换结果与原始输入相同,也不输出
    if result == word:
        return

    # 对结果进行 URL 编码,构造可点击的链接
    encoded = urllib.parse.quote(result)
    html = f'<meta charset="utf-8"><a href="gdlookup://localhost/{encoded}">{result}</a>'
    sys.stdout.buffer.write(html.encode('utf-8'))

if __name__ == '__main__':
    main()

日中跳转:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import sys
import urllib.parse
from opencc import OpenCC

# 手动修正字典:日文新字体转换后常见的错误映射 → 正确繁体
# 键为 jp2t 转换后的错误繁体词,值为正确的繁体词
FIX_MAP = {
    "花辨": "花瓣",
    "單辨": "單瓣",
    "旗辨": "旗瓣",
    "重辨": "重瓣",
    "離辨花": "離瓣花",
    "合辦花": "合瓣花",
    "僧帽辨": "僧帽瓣",
    "房室辨": "房室瓣",
    "三尖辨": "三尖瓣",
    "半月辨": "半月瓣",
    "辨證論": "辯證論",
    "辨證法": "辯證法",   # jp2t 会把“証”转成“證”,所以这里是“辨證”
    "辨纔": "辯才",       # jp2t 会把“弁才”转成“辨纔”
    "辨士": "辯士",
    "雄辨": "雄辯",
    "抗辨": "抗辯",
    "辨口": "辯口",
    "答辨": "答辯",
    "辨論": "辯論",
    "口辨": "口辯",
    "多辨": "多辯",
    "辨解": "辯解",
    "強辨": "強辯",
    "員辨": "員弁",
    "武辨": "武弁",
    "辨別": "辨別",       # 这个本身是对的(辨别),无需改,但作为示例保留
    # 如果你发现其他错误,可以在这里继续添加
}

def main():
    if len(sys.argv) < 2:
        return

    word = sys.argv[1].strip()
    if not word:
        return

    try:
        cc_jp2t = OpenCC('jp2t')
        trad = cc_jp2t.convert(word)

        # 🔧 手动修正:遍历修正字典,替换错误的繁体词
        for wrong, correct in FIX_MAP.items():
            if wrong in trad:
                trad = trad.replace(wrong, correct)

        cc_t2s = OpenCC('t2s')
        simp = cc_t2s.convert(trad)
    except Exception:
        return

    # 如果输入与繁体或简体相同,不输出
    if word == trad or word == simp:
        return

    # 构建 HTML 输出
    html_parts = []
    # 如果需要显示繁体链接(且与简体不同),则加一个
    if trad != simp:
        # 繁体链接
        encoded_trad = urllib.parse.quote(trad)
        html_parts.append(f'<a href="gdlookup://localhost/{encoded_trad}">繁:{trad}</a> ')
        # 简体链接
        encoded_simp = urllib.parse.quote(simp)
        html_parts.append(f'<a href="gdlookup://localhost/{encoded_simp}">简:{simp}</a>')
    else:
        # 繁简相同,只输出一个链接(但前提是它与输入不同,因为上面已经判断了)
        encoded = urllib.parse.quote(trad)
        html_parts.append(f'<a href="gdlookup://localhost/{encoded}">{trad}</a>')

    html = '<meta charset="utf-8">' + ' '.join(html_parts)  # 用空格分隔
    sys.stdout.buffer.write(html.encode('utf-8'))

if __name__ == '__main__':
    main()


建议NG添加一个针对opencc的额外配置项,这样需要什么就可以自由添加。

可以考虑使用下面的数据:

效果可以参考:

谢谢!
许多手机应用没有内置opencc也没有PC版GoldenDict的程序词典。直接用一个路由词典把简中链接到日本新字体汉字,这是个非常实用的解决方案诶。