diff --git a/.gitignore b/.gitignore index 031afa5..df2424a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +dist_sgf + # additions KataGoData katrain/KataGo/KataGoData diff --git a/CONTRIBUTIONS.md b/CONTRIBUTIONS.md index f3a352a..ee68c50 100644 --- a/CONTRIBUTIONS.md +++ b/CONTRIBUTIONS.md @@ -62,6 +62,7 @@ Many thanks to the following contributors for translations. * Russian: Dmitry Ivankov and Alexander Kiselev * Simplified Chinese: Qing Mu with contributions from "Medwin" and Viktor Lin * Japanese: "kaorahi" +* Traditional Chinese: "Tony-Liou" ## Additional thanks to diff --git a/README.md b/README.md index 6b14c2f..a2320c0 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,8 @@ French Russian
-Chinese +Simplified Chinese +Traditional Chinese Korean Japanese diff --git a/i18n.py b/i18n.py index 9adf47b..76fe841 100644 --- a/i18n.py +++ b/i18n.py @@ -70,7 +70,7 @@ for lang in locales: po[lang].append(copied_entry) errors = True else: - print(f"MISSING IN DEFAULT AND {lang}", strings_to_langs[msgid]) + print(f"MISSING IN DEFAULT AND {lang}", msgid) errors = True for msgid, lang_entries in strings_to_langs.items(): diff --git a/katrain/__main__.py b/katrain/__main__.py index 80b60b9..6b554d8 100644 --- a/katrain/__main__.py +++ b/katrain/__main__.py @@ -292,7 +292,7 @@ class KaTrainGui(Screen, KaTrainBase): self.play_mode.switch_ui_mode() # for new game, go to play, for loaded, analyze self.board_gui.animating_pv = None self.engine.on_new_game() # clear queries - self.game = Game(self, self.engine, move_tree=move_tree, analyze_fast=analyze_fast, sgf_filename=sgf_filename) + self.game = Game(self, self.engine, move_tree=move_tree, analyze_fast=analyze_fast or not move_tree, sgf_filename=sgf_filename) if move_tree: for bw, player_info in self.players_info.items(): player_info.player_type = PLAYER_HUMAN diff --git a/katrain/gui.kv b/katrain/gui.kv index 79f9060..efa6a5f 100644 --- a/katrain/gui.kv +++ b/katrain/gui.kv @@ -1001,6 +1001,9 @@ LangButton: icon: 'flags/flag-cn.png' on_press: app.language = 'cn' + LangButton: + icon: 'flags/flag-tw.png' + on_press: app.language = 'tw' LangButton: icon: 'flags/flag-ko.png' on_press: app.language = 'ko' diff --git a/katrain/i18n/locales/cn/LC_MESSAGES/katrain.mo b/katrain/i18n/locales/cn/LC_MESSAGES/katrain.mo index 469ca4a..0fd991b 100644 Binary files a/katrain/i18n/locales/cn/LC_MESSAGES/katrain.mo and b/katrain/i18n/locales/cn/LC_MESSAGES/katrain.mo differ diff --git a/katrain/i18n/locales/cn/LC_MESSAGES/katrain.po b/katrain/i18n/locales/cn/LC_MESSAGES/katrain.po index e6e997a..7efcc10 100644 --- a/katrain/i18n/locales/cn/LC_MESSAGES/katrain.po +++ b/katrain/i18n/locales/cn/LC_MESSAGES/katrain.po @@ -322,11 +322,6 @@ msgstr "" "AI的\n" "显示选点/SGF评价" -msgid "lock ai when playing" -msgstr "" -"对局模式中\n" -"不允许最佳选点" - #. submit button msgid "update teacher" msgstr "更新指导棋设置" @@ -383,12 +378,6 @@ msgstr "" msgid "engine:time:hint" msgstr "时间单位是秒" -msgid "general:sgf_load" -msgstr "加载SGF文件路径" - -msgid "general:sgf_save" -msgstr "保存SGF文件路径" - msgid "general:anim_pv_time" msgstr "动画中两手棋时间间隔" diff --git a/katrain/i18n/locales/de/LC_MESSAGES/katrain.mo b/katrain/i18n/locales/de/LC_MESSAGES/katrain.mo index 240981d..7f49482 100644 Binary files a/katrain/i18n/locales/de/LC_MESSAGES/katrain.mo and b/katrain/i18n/locales/de/LC_MESSAGES/katrain.mo differ diff --git a/katrain/i18n/locales/de/LC_MESSAGES/katrain.po b/katrain/i18n/locales/de/LC_MESSAGES/katrain.po index cd7890c..a5f6760 100644 --- a/katrain/i18n/locales/de/LC_MESSAGES/katrain.po +++ b/katrain/i18n/locales/de/LC_MESSAGES/katrain.po @@ -329,11 +329,6 @@ msgstr "" "Dots/SGF-Kommentare \n" " für AI Spieler zeigen" -msgid "lock ai when playing" -msgstr "" -"Beste Züge während \n" -" Spiel deaktivieren" - #. submit button msgid "update teacher" msgstr "Feedbackeinstellungen aktualisieren" @@ -393,12 +388,6 @@ msgstr "" msgid "engine:time:hint" msgstr "Zeit in Sekunden" -msgid "general:sgf_load" -msgstr "Pfad um SGF-Dateien zu laden" - -msgid "general:sgf_save" -msgstr "Pfad um SGF-Dateien zu speichern" - msgid "general:anim_pv_time" msgstr "Zeit zwischen Zügen, wenn Sequenz animiert wird" diff --git a/katrain/i18n/locales/en/LC_MESSAGES/katrain.mo b/katrain/i18n/locales/en/LC_MESSAGES/katrain.mo index c0677f0..fd345d0 100644 Binary files a/katrain/i18n/locales/en/LC_MESSAGES/katrain.mo and b/katrain/i18n/locales/en/LC_MESSAGES/katrain.mo differ diff --git a/katrain/i18n/locales/en/LC_MESSAGES/katrain.po b/katrain/i18n/locales/en/LC_MESSAGES/katrain.po index 20f1d6e..a6fccfa 100644 --- a/katrain/i18n/locales/en/LC_MESSAGES/katrain.po +++ b/katrain/i18n/locales/en/LC_MESSAGES/katrain.po @@ -450,12 +450,6 @@ msgstr "" msgid "cache analysis to sgf" msgstr "Cache analysis in SGF" -#. removed as an option / can ignore -msgid "lock ai when playing" -msgstr "" -"Disable top moves\n" -" while in play mode" - #. submit button msgid "update teacher" msgstr "Update Feedback Settings" @@ -523,13 +517,6 @@ msgstr "" msgid "engine:time:hint" msgstr "Time in seconds" -#. no longer used, can ignore -msgid "general:sgf_load" -msgstr "Path for loading SGF files" - -msgid "general:sgf_save" -msgstr "Path for saving SGF files" - msgid "general:anim_pv_time" msgstr "Time between moves when animating a sequence" diff --git a/katrain/i18n/locales/es/LC_MESSAGES/katrain.mo b/katrain/i18n/locales/es/LC_MESSAGES/katrain.mo index 5baaa1e..5d316cc 100644 Binary files a/katrain/i18n/locales/es/LC_MESSAGES/katrain.mo and b/katrain/i18n/locales/es/LC_MESSAGES/katrain.mo differ diff --git a/katrain/i18n/locales/es/LC_MESSAGES/katrain.po b/katrain/i18n/locales/es/LC_MESSAGES/katrain.po index cff7ace..c158402 100644 --- a/katrain/i18n/locales/es/LC_MESSAGES/katrain.po +++ b/katrain/i18n/locales/es/LC_MESSAGES/katrain.po @@ -333,11 +333,6 @@ msgstr "" "Mostrar puntos/comentarios\n" " para motores de IA" -msgid "lock ai when playing" -msgstr "" -"Deshabilitar jugadas superiores top moves\n" -" en modo juego" - #. submit button msgid "update teacher" msgstr "Actualizar conf" @@ -398,12 +393,6 @@ msgstr "" msgid "engine:time:hint" msgstr "Tiempo en segundos" -msgid "general:sgf_load" -msgstr "Ruta para cargar los archivos SGF" - -msgid "general:sgf_save" -msgstr "Ruta para guardar los archivos SGF" - msgid "general:anim_pv_time" msgstr "Tiempo entre juagadas animando una secuencia" diff --git a/katrain/i18n/locales/fr/LC_MESSAGES/katrain.mo b/katrain/i18n/locales/fr/LC_MESSAGES/katrain.mo index a930151..88e84e7 100644 Binary files a/katrain/i18n/locales/fr/LC_MESSAGES/katrain.mo and b/katrain/i18n/locales/fr/LC_MESSAGES/katrain.mo differ diff --git a/katrain/i18n/locales/fr/LC_MESSAGES/katrain.po b/katrain/i18n/locales/fr/LC_MESSAGES/katrain.po index 81694f1..48e7751 100644 --- a/katrain/i18n/locales/fr/LC_MESSAGES/katrain.po +++ b/katrain/i18n/locales/fr/LC_MESSAGES/katrain.po @@ -344,11 +344,6 @@ msgstr "Dernier(s) coup(s) à marquer :" msgid "show ai dots" msgstr "Étudier les coups du joueur artificiel" -msgid "lock ai when playing" -msgstr "" -"Ne pas recommander de coups \n" -"en mode “Partie”" - #. submit button msgid "update teacher" msgstr "Mettre à jour" @@ -428,16 +423,6 @@ msgstr "" msgid "engine:time:hint" msgstr "En secondes" -msgid "general:sgf_load" -msgstr "" -"Chemin d'accès du \n" -"fichier SGF à analyser" - -msgid "general:sgf_save" -msgstr "" -"Chemin d'accès du \n" -"fichier SGF à enregistrer" - msgid "general:anim_pv_time" msgstr "" "Durée entre chaque coup \n" diff --git a/katrain/i18n/locales/jp/LC_MESSAGES/katrain.mo b/katrain/i18n/locales/jp/LC_MESSAGES/katrain.mo index 928ba4b..fb0bd4a 100644 Binary files a/katrain/i18n/locales/jp/LC_MESSAGES/katrain.mo and b/katrain/i18n/locales/jp/LC_MESSAGES/katrain.mo differ diff --git a/katrain/i18n/locales/jp/LC_MESSAGES/katrain.po b/katrain/i18n/locales/jp/LC_MESSAGES/katrain.po index 4ea0d5c..3cfeee1 100644 --- a/katrain/i18n/locales/jp/LC_MESSAGES/katrain.po +++ b/katrain/i18n/locales/jp/LC_MESSAGES/katrain.po @@ -354,12 +354,6 @@ msgstr "" "AIの手にもドットや\n" "SGFコメントをつける" -#. removed as an option / can ignore -msgid "lock ai when playing" -msgstr "" -"Disable top moves\n" -" while in play mode" - #. submit button msgid "update teacher" msgstr "指導設定を更新" @@ -419,13 +413,6 @@ msgstr "" msgid "engine:time:hint" msgstr "秒数" -#. no longer used, can ignore -msgid "general:sgf_load" -msgstr "Path for loading SGF files" - -msgid "general:sgf_save" -msgstr "SGFファイルの保存場所" - msgid "general:anim_pv_time" msgstr "手順アニメーションの一手毎の時間" diff --git a/katrain/i18n/locales/ko/LC_MESSAGES/katrain.mo b/katrain/i18n/locales/ko/LC_MESSAGES/katrain.mo index 0ea1b77..57ad9e8 100644 Binary files a/katrain/i18n/locales/ko/LC_MESSAGES/katrain.mo and b/katrain/i18n/locales/ko/LC_MESSAGES/katrain.mo differ diff --git a/katrain/i18n/locales/ko/LC_MESSAGES/katrain.po b/katrain/i18n/locales/ko/LC_MESSAGES/katrain.po index 7ea4495..ee5e3ab 100644 --- a/katrain/i18n/locales/ko/LC_MESSAGES/katrain.po +++ b/katrain/i18n/locales/ko/LC_MESSAGES/katrain.po @@ -326,11 +326,6 @@ msgstr "" "인공지능 대국자에 대해서도\n" "평가를 색으로 표시" -msgid "lock ai when playing" -msgstr "" -"대국 중에\n" -"후보수 분석하지 않기" - #. submit button msgid "update teacher" msgstr "피드백 설정 갱신" @@ -392,12 +387,6 @@ msgstr "" msgid "engine:time:hint" msgstr "시간(초)" -msgid "general:sgf_load" -msgstr "SGF 파일을 불러올 경로" - -msgid "general:sgf_save" -msgstr "SGF 파일을 저장할 경로" - msgid "general:anim_pv_time" msgstr "수순을 보여줄 때 수 사이의 시간" diff --git a/katrain/i18n/locales/ru/LC_MESSAGES/katrain.mo b/katrain/i18n/locales/ru/LC_MESSAGES/katrain.mo index b583b4c..1aebf6f 100644 Binary files a/katrain/i18n/locales/ru/LC_MESSAGES/katrain.mo and b/katrain/i18n/locales/ru/LC_MESSAGES/katrain.mo differ diff --git a/katrain/i18n/locales/ru/LC_MESSAGES/katrain.po b/katrain/i18n/locales/ru/LC_MESSAGES/katrain.po index 2a3e83f..7cae85e 100644 --- a/katrain/i18n/locales/ru/LC_MESSAGES/katrain.po +++ b/katrain/i18n/locales/ru/LC_MESSAGES/katrain.po @@ -352,12 +352,6 @@ msgstr "" "Показать точки и SGF комментарии\n" " для ИИ игроков" -#. removed as an option / can ignore -msgid "lock ai when playing" -msgstr "" -"Отключить лучшие ходы\n" -" во время игры" - #. submit button msgid "update teacher" msgstr "Сохранить настройки анализа" @@ -417,13 +411,6 @@ msgstr "" msgid "engine:time:hint" msgstr "Время в секундах" -#. no longer used, can ignore -msgid "general:sgf_load" -msgstr "Путь для загрузки файлов SGF" - -msgid "general:sgf_save" -msgstr "Путь для сохранения файлов SGF" - msgid "general:anim_pv_time" msgstr "Задержка между ходами в анимации" diff --git a/katrain/i18n/locales/tw/LC_MESSAGES/katrain.mo b/katrain/i18n/locales/tw/LC_MESSAGES/katrain.mo new file mode 100644 index 0000000..8ef53ec Binary files /dev/null and b/katrain/i18n/locales/tw/LC_MESSAGES/katrain.mo differ diff --git a/katrain/i18n/locales/tw/LC_MESSAGES/katrain.po b/katrain/i18n/locales/tw/LC_MESSAGES/katrain.po index 97a1d4a..3dd156e 100644 --- a/katrain/i18n/locales/tw/LC_MESSAGES/katrain.po +++ b/katrain/i18n/locales/tw/LC_MESSAGES/katrain.po @@ -167,14 +167,11 @@ msgstr "認輸" #. Shown when a move is undone in teaching mode. msgid "teaching undo message" msgstr "" -"復原第 {move} 手損失了 {points_lost:.1f} 目。請再試一次。" -"若要查看提示,將游標停於該手以查看預期的反制手段;" -"或查看預估的領地來看可能損失目數的棋盤區域。" +"復原第 {move} 手損失了 {points_lost:.1f} " +"目。請再試一次。若要查看提示,將游標停於該手以查看預期的反制手段;或查看預估的領地來看可能損失目數的棋盤區域。" msgid "ai-ponder" -msgstr "" -"AI引擎狀態指示燈,從綠色(閒置)變為橘色(處理中)。當引擎崩潰或無法啟動時," -"會變為紅色。" +msgstr "AI引擎狀態指示燈,從綠色(閒置)變為橘色(處理中)。當引擎崩潰或無法啟動時,會變為紅色。" #. undo button on the right msgid "undo-button-text" @@ -445,11 +442,6 @@ msgstr "" msgid "cache analysis to sgf" msgstr "儲存分析到SGF中" -msgid "lock ai when playing" -msgstr "" -"在對局模式中\n" -"停用最佳選點" - #. submit button msgid "update teacher" msgstr "更新指導棋設定" @@ -512,24 +504,20 @@ msgstr "" msgid "engine:time:hint" msgstr "時間單位是秒" -#. no longer used, can ignore -# msgid "general:sgf_load" -# msgstr "Path for loading SGF files" +msgid "general:anim_pv_time" +msgstr "動畫中,兩手棋的時間間隔" -# msgid "general:sgf_save" -# msgstr "Path for saving SGF files" +msgid "general:debug_level:hint" +msgstr "設為1時,回報錯誤" -# msgid "general:anim_pv_time" -# msgstr "Time between moves when animating a sequence" +msgid "general:debug_level" +msgstr "Console中的偵錯層級" -# msgid "general:debug_level" -# msgstr "Debug level in the console" +msgid "katago settings" +msgstr "KataGo設定" -# msgid "general:debug_level:hint" -# msgstr "Set to 1 when reporting errors" - -# msgid "update settings" -# msgstr "Update Settings" +msgid "update settings" +msgstr "更新設定" # ai settings from here msgid "ai settings" @@ -564,9 +552,8 @@ msgstr "KataGo執行檔 {exe} 不存在,請檢查一般設定。" msgid "Kata exe not found in path" msgstr "" -"在 PATH 中找不到KataGo執行檔 `{exe}`,請檢查環境變數" -"或在一般設定中使用完整路徑代替。若是在 MacOS 上,請先閱讀使用手冊中的" -"如何使用brew安裝KataGo。" +"在 PATH 中找不到KataGo執行檔 `{exe}`,請檢查環境變數或在一般設定中使用完整路徑代替。若是在 MacOS " +"上,請先閱讀使用手冊中的如何使用brew安裝KataGo。" msgid "Kata model not found" msgstr "KataGo模型 {model} 不存在,請檢查一般設定。" @@ -581,9 +568,7 @@ msgid "Engine died unexpectedly" msgstr "引擎意外崩潰沒有輸出,可能為記憶體不足導致: {error}" msgid "Engine missing DLL" -msgstr "" -"遺失DLL因此無法啟動KataGo。請參考KataGo文件中的所需事項," -"或嘗試單獨啟動KataGo來取得詳細資訊。" +msgstr "遺失DLL因此無法啟動KataGo。請參考KataGo文件中的所需事項,或嘗試單獨啟動KataGo來取得詳細資訊。" #. AI names, help etc msgid "strength:kyu" @@ -597,8 +582,7 @@ msgstr "KataGo" msgid "aihelp:default" msgstr "" -"最強的KataGo AI。其棋力由在一般設定中 `引擎` 區塊中的 `最大走訪數` 和 " -"`模型` 以及引擎組態文件決定。此處沒有可供調整的選項。" +"最強的KataGo AI。其棋力由在一般設定中 `引擎` 區塊中的 `最大走訪數` 和 `模型` 以及引擎組態文件決定。此處沒有可供調整的選項。" #. ai which handles handicap games better msgid "ai:handicap" @@ -606,20 +590,18 @@ msgstr "Kata讓子棋" msgid "aihelp:handicap" msgstr "" -"KataGo 對讓子棋做了最佳化的對局版本。以黑棋的觀點來看,KataGo 中的 `pda` 設定對應到的" -"是 `playoutDoublingAdvantage`。當被設定為 `自動` 時,KaTrain 將會找自動找到適合的值。" +"KataGo 對讓子棋做了最佳化的對局版本。以黑棋的觀點來看,KataGo 中的 `pda` 設定對應到的是 " +"`playoutDoublingAdvantage`。當被設定為 `自動` 時,KaTrain 將會找自動找到適合的值。" msgid "ai:simple" msgstr "單純模式" msgid "aihelp:simple" msgstr "" -"下法會導致盤面狀態簡單化。每步在損失最多 '最大目數損失' 目和最少 '最少走訪數'中," -"較傾向於損失較少目數、安定自身領地(搭配 importance settled_weight)、突破對方領地" -"(importance settled_weight * opponent_fac)、避免脫先(5路以上,importance " -"tenuki_penalty)和避免碰(importance attachment_penalty)。" -"權重可以是負數使對局複雜化,而寬根雜訊(在一般設定中)的使用,可以以棋力強度作為代價" -",加強風格。" +"下法會導致盤面狀態簡單化。每步在損失最多 '最大目數損失' 目和最少 '最少走訪數'中,較傾向於損失較少目數、安定自身領地(搭配 importance " +"settled_weight)、突破對方領地(importance settled_weight * " +"opponent_fac)、避免脫先(5路以上,importance tenuki_penalty)和避免碰(importance " +"attachment_penalty)。權重可以是負數使對局複雜化,而寬根雜訊(在一般設定中)的使用,可以以棋力強度作為代價,加強風格。" msgid "ai:jigo" msgstr "Kata控目" @@ -637,66 +619,61 @@ msgid "ai:policy" msgstr "直覺" msgid "aihelp:policy" -msgstr "" -"按最佳直覺行棋,沒有任何計算。棋力主要由引擎設定中的 `模型` 決定。" -"布局落點設定影響布局中隨機落點的數量。" +msgstr "按最佳直覺行棋,沒有任何計算。棋力主要由引擎設定中的 `模型` 決定。布局落點設定影響布局中隨機落點的數量。" msgid "ai:p:weighted" msgstr "直覺權重" msgid "aihelp:p:weighted" msgstr "" -"按直覺機率行棋, `weaken_fac` 影響較弱選點的多寡。當機率極低時,它的下棋風格變得很像直覺AI。" -" `pick_override` 決定在選擇最佳選點時的無隨機性;而 `lower_bound` 決定了允許的直覺值的下限。" +"按直覺機率行棋, `weaken_fac` 影響較弱選點的多寡。當機率極低時,它的下棋風格變得很像直覺AI。 `pick_override` " +"決定在選擇最佳選點時的無隨機性;而 `lower_bound` 決定了允許的直覺值的下限。" msgid "ai:p:pick" msgstr "盲選直覺" msgid "aihelp:p:pick" msgstr "" -"隨機選擇 `pick_n + pick_frac * ` 並採用最佳的一手。 " -"當 `pick_frac=1` 時,下棋風格像是直覺AI。 如果直覺值高於 `pick_override`,則採用" -"最佳的一手以避免明顯錯誤。" +"隨機選擇 `pick_n + pick_frac * ` 並採用最佳的一手。 當 " +"`pick_frac=1` 時,下棋風格像是直覺AI。 如果直覺值高於 `pick_override`,則採用最佳的一手以避免明顯錯誤。" msgid "ai:p:local" msgstr "局部模式" msgid "aihelp:p:local" msgstr "" -"使加權 `pick_n + pick_frac * ` 接近最後一手並選出最好的一手。" -"如果直覺值大於 `pick_override`則採用最佳的一手以避免明顯錯誤。" +"使加權 `pick_n + pick_frac * ` 接近最後一手並選出最好的一手。如果直覺值大於 " +"`pick_override`則採用最佳的一手以避免明顯錯誤。" msgid "ai:p:tenuki" msgstr "脫先模式" msgid "aihelp:p:tenuki" msgstr "" -"使加權 `pick_n + pick_frac * ` 遠離最後一手並選出最好的一手。如果" -"直覺值大於 `pick_override` 則採用最佳的一手以避免明顯錯誤。更高的 `stddev` 使其偏離更多。" +"使加權 `pick_n + pick_frac * ` 遠離最後一手並選出最好的一手。如果直覺值大於 " +"`pick_override` 則採用最佳的一手以避免明顯錯誤。更高的 `stddev` 使其偏離更多。" msgid "ai:p:influence" msgstr "取勢模式" msgid "aihelp:p:influence" msgstr "" -"在偏移值高於 `threshold` 線的點中選出最好的一手。增加 `line_weight` 以加重" -"對靠近邊緣選點的懲罰。在 '終局' 部分結束後停止。" +"在偏移值高於 `threshold` 線的點中選出最好的一手。增加 `line_weight` 以加重對靠近邊緣選點的懲罰。在 '終局' " +"部分結束後停止。" msgid "ai:p:territory" msgstr "取地模式" msgid "aihelp:p:territory" msgstr "" -"在偏移值低於 `threshold` 線的點中選出最好的一手。增加 `line_weight` 以加重" -"對靠近中央選點的懲罰。在 '終局' 部分結束後停止。" +"在偏移值低於 `threshold` 線的點中選出最好的一手。增加 `line_weight` 以加重對靠近中央選點的懲罰。在 '終局' " +"部分結束後停止。" msgid "ai:p:rank" msgstr "可變棋力" msgid "aihelp:p:rank" -msgstr "" -"隨機選擇有限數量的合法選點,並下出最佳的一手。愈強的設定有愈多的選擇來選出最佳的一手。" -"因為沒有0級/段,因此 3段 = -2級。" +msgstr "隨機選擇有限數量的合法選點,並下出最佳的一手。愈強的設定有愈多的選擇來選出最佳的一手。因為沒有0級/段,因此 3段 = -2級。" #. in AI settings msgid "estimated strength" @@ -801,4 +778,4 @@ msgstr "插入完畢,複製 {num_copied} 手棋。" #. when a user tries to go to a different move/node while in insert #. mode msgid "finish inserting before navigating" -msgstr "此功能在插入模式無法使用,按 i 結束插入。" \ No newline at end of file +msgstr "此功能在插入模式無法使用,按 i 結束插入。" diff --git a/katrain/img/flags/flag-tw.png b/katrain/img/flags/flag-tw.png new file mode 100644 index 0000000..970e3e3 Binary files /dev/null and b/katrain/img/flags/flag-tw.png differ