Skip to content

A Traditional Chinese fix version of John Howell's incredible KFX Output Calibre plugin. 用於修復繁體中文(台灣)的Calibre擴充,源於John Howells的KFX Output。

Notifications You must be signed in to change notification settings

lcandy2/calibre-kfx-output-fix-traditional-chinese

Repository files navigation

支援繁體中文(台灣)之 Calibre KFX Output plugin

由 @lcandy2 修改自 John Howells

最新版本2.12.0,點此「下載」,或在「Release」頁面中了解歷史版本。

效果預覽

橫排 直排
橫排效果展示(《少年來了》段落節選) 直排效果展示(《被討厭的勇氣 二部曲完結篇:人生幸福的行動指南》節選)

已測試支援格式

  • EPUB

特別注意

  • 原始EPUB檔中包裝文件(*.opf)dc:language標籤中的語言代碼需為zh-hantzh,請勿使用zh-TWzh-CN`。

  • 原始EPUB檔中存放文字的htmlxhtml檔案頭部需包含xml:lang="zh-TW" lang="zh-TW",全部檔案中至少應有半數以上的檔案符合此條件,請勿使用zh-hantzh-CNzh

    正確的範例如下:

    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-TW" lang="zh-TW">

    或如下形式:

    <html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="zh-TW" lang="zh-TW">

    確定xml:langlang屬性值皆為zh-TW,且位於文件中。

  • 若原檔為直排,須確定原始EPUB檔的包裝文件(*.opf)存在下列內容

    <metadata>
      <meta name="primary-writing-mode" content="vertical-rl"/>
      <!-- ...其他內容 -->
    </metadata>

故障排除

  • 通過calibre之Send to Kindle方式傳送的書籍檔案,可能會因為calibre導致檔案不能被Kindle辨識為繁體中文。若遇到此問題,請在Send to Kindle後,再次將原始kfx檔拷貝至Kindle設備中,替換calibre之kfx檔案。

變更之程式碼

/kfxlib/original_source_epub.py 第 628 行(在 2.11.0 版本中),加入以下程式碼:

if FIX_LANGUAGE_SUFFIX and "-" not in lang.text:
    current_language_pattern = re.compile(re.escape(lang.text) + "(-.+)?$", re.IGNORECASE)
    best_language_variant, best_language_count = lang.text, 0

    for language, count in self.content_languages.items():
        if count > best_language_count and re.match(current_language_pattern, language):
            best_language_variant, best_language_count = language, count

    if best_language_variant != lang.text:

        # 新增程式碼從此開始 #
        if best_language_variant.lower() == "zh-tw":
            best_language_variant = "zh-hant"
            log.info("Optimize language from zh-TW to zh-hant")
        # 新增程式碼從此結束 #
        
        log.info("Changed EPUB language from '%s' to '%s'" % (lang.text, best_language_variant))
        lang.text = best_language_variant
        fixed = True

將語言代碼轉化為zh-hant以獲得Kindle內建繁體中文支援,包括標點符號置中,繁體字體選擇。

以上所有變更

許可 LICENSE

本方法撰寫於GitHub之「lcandy2/calibre-kfx-output-fix-traditional-chinese」存儲庫,該README.md檔遵循「CC BY 4.0」許可,除該檔案之外其他位於存儲庫中的程式碼檔案,遵循原作者「John Howell」之「GPL v3」許可。

特別感謝

@mgrn於PTT分享的「[討論] Kindle 顯示繁體中文