From 7d8cec3aedd8567b17cdfaaa1fc91ac58aab7850 Mon Sep 17 00:00:00 2001 From: Sander Land Date: Mon, 7 Dec 2020 13:50:50 +0100 Subject: [PATCH] fix --- CONTRIBUTIONS.md | 22 +++++++----------- README.md | 6 ++--- katrain/__main__.py | 7 +++--- katrain/core/game.py | 19 +++++++++------ katrain/gui/badukpan.py | 7 +++++- katrain/gui/popups.py | 16 +++++++------ katrain/gui/widgets/movetree.py | 4 ++-- .../i18n/locales/cn/LC_MESSAGES/katrain.mo | Bin 14213 -> 14219 bytes .../i18n/locales/cn/LC_MESSAGES/katrain.po | 2 +- .../i18n/locales/de/LC_MESSAGES/katrain.mo | Bin 16377 -> 16383 bytes .../i18n/locales/de/LC_MESSAGES/katrain.po | 2 +- .../i18n/locales/en/LC_MESSAGES/katrain.mo | Bin 15652 -> 15658 bytes .../i18n/locales/en/LC_MESSAGES/katrain.po | 2 +- .../i18n/locales/es/LC_MESSAGES/katrain.mo | Bin 15773 -> 15779 bytes .../i18n/locales/es/LC_MESSAGES/katrain.po | 2 +- .../i18n/locales/fr/LC_MESSAGES/katrain.mo | Bin 17480 -> 17486 bytes .../i18n/locales/fr/LC_MESSAGES/katrain.po | 2 +- .../i18n/locales/jp/LC_MESSAGES/katrain.mo | Bin 17881 -> 17887 bytes .../i18n/locales/jp/LC_MESSAGES/katrain.po | 2 +- .../i18n/locales/ko/LC_MESSAGES/katrain.mo | Bin 17413 -> 17419 bytes .../i18n/locales/ko/LC_MESSAGES/katrain.po | 2 +- .../i18n/locales/ru/LC_MESSAGES/katrain.mo | Bin 22203 -> 22209 bytes .../i18n/locales/ru/LC_MESSAGES/katrain.po | 2 +- 23 files changed, 53 insertions(+), 44 deletions(-) diff --git a/CONTRIBUTIONS.md b/CONTRIBUTIONS.md index 0e06ce0..85b2c31 100644 --- a/CONTRIBUTIONS.md +++ b/CONTRIBUTIONS.md @@ -11,6 +11,14 @@ This is not enforced, and contributions with incorrect formatting will be accept ## Translations +### Contributing to an existing translation + +* Go [here](https://github.com/sanderland/katrain/blob/master/katrain/i18n/locales/) and locate the `.po` file for your language. + Alternatively, find the same file in the branch for the next version. +* Correct the relevant `msgstr` entries. + +### Adding a translation + Adding a translation requires making a new `.po` file with entries for that languages. * Copy the [English .po file](https://github.com/sanderland/katrain/blob/master/katrain/i18n/locales/en/LC_MESSAGES/katrain.po) @@ -19,19 +27,6 @@ Adding a translation requires making a new `.po` file with entries for that lang * The information at the top of the file should also not be translated. You can send me the resulting `.po` file and I will integrate it into the program. - -For those who have some python experience as well, you can: - -* Replicate the directory structure `katrain/i18n//LC_MESSAGES/katrain.po`. -* Run `python i18.py` which will generate the `.mo` files and check for any errors. -* Find `gui.kv` and add a button near the others: - ``` - LangButton: - icon: 'img/flags/flag-.png' - on_press: app.language = '' - ``` -* The language should now show up in the app. -* Pull request your changes to the latest minor version branch. # Contributors @@ -53,6 +48,7 @@ Many thanks to these additional authors: * "kaorahi" for bug fixes and SGF parser improvements. * "ajkenny84" for the red-green colourblind theme. * Lukasz Wierzbowski for the ability to paste urls for sgfs and helping fix alt-gr issues. +* Carton He for a fix to handling empty komi values in sgfs. ## Translators diff --git a/README.md b/README.md index 1ec51f6..7fa6f9a 100644 --- a/README.md +++ b/README.md @@ -177,15 +177,15 @@ Keyboard shortcuts are shown with **[key]**. In addition to shortcuts mentioned above and those shown in the main menu: * **[Shift]**: Open the main menu. -* **[~]** or **[ ` ]** or **[m]**: Cycles through more minimalistic UI modes. +* **[~]** or **[ ` ]** or **[f12]**: Cycles through more minimalistic UI modes. * **[p]**: Pass -* **[b]**: Pause/Resume timer +* **[pause]**: Pause/Resume timer * **[arrow left]** or **[z]**: Undo move. Hold alt for 10 moves at a time, or ctrl to skip to the start. * **[arrow right]** or **[x]**: Redo move. Hold alt for 10 moves at a time, or ctrl to skip to the end. * **[arrow up/down]** Switch branch, as would be expected from the move tree. * **[home/end]** Go to the beginning/end of the game. * **[pageup]** Make the currently selected node the main branch -* **[ctrl-delete]** Delete current node. +* **[Ctrl-delete]** Delete current node. * **[c]** Collapse/Uncollapse the branch from the current node to the previous branching point. * **[b]** Go back to the previous branching point. * **[n]** As in clicking the red arrow, go to one move before the next mistake (orange or worse) by a human player. diff --git a/katrain/__main__.py b/katrain/__main__.py index 80608a3..6989370 100644 --- a/katrain/__main__.py +++ b/katrain/__main__.py @@ -64,7 +64,8 @@ from katrain.core.constants import ( STATUS_ERROR, STATUS_INFO, PLAYING_NORMAL, - PLAYER_HUMAN, SGF_INTERNAL_COMMENTS_MARKER, + PLAYER_HUMAN, + SGF_INTERNAL_COMMENTS_MARKER, ) from katrain.gui.popups import ConfigTeacherPopup, ConfigTimerPopup, I18NPopup, SaveSGFPopup from katrain.core.base_katrain import KaTrainBase @@ -545,9 +546,9 @@ class KaTrainGui(Screen, KaTrainBase): self.nav_drawer.set_state("toggle") elif keycode[1] == "spacebar": self.toggle_continuous_analysis() - elif keycode[1] == "b" and ctrl_pressed: + elif keycode[1] in ["pause", "break", "f15"] and not ctrl_pressed: self.controls.timer.paused = not self.controls.timer.paused - elif keycode[1] in ["`", "~", "m"] and ctrl_pressed: + elif keycode[1] in ["`", "~", "f12"]: self.zen = (self.zen + 1) % 3 elif keycode[1] in ["left", "z"]: self("undo", 1 + (alt_pressed or shift_pressed) * 9 + (ctrl_pressed and not alt_pressed) * 999) diff --git a/katrain/core/game.py b/katrain/core/game.py index f995d12..ceab62f 100644 --- a/katrain/core/game.py +++ b/katrain/core/game.py @@ -20,7 +20,8 @@ from katrain.core.constants import ( STATUS_ERROR, STATUS_INFO, STATUS_TEACHING, - VERSION, SGF_INTERNAL_COMMENTS_MARKER, + VERSION, + SGF_INTERNAL_COMMENTS_MARKER, ) from katrain.core.engine import KataGoEngine from katrain.core.game_node import GameNode @@ -407,7 +408,9 @@ class Game: x_properties["RE"] = self.end_result x_properties["KTV"] = ANALYSIS_FORMAT_VERSION self.root.properties = {**root_properties, **{k: [v] for k, v in x_properties.items()}} - player_names = {bw: re.sub(r"[\u200b\u3164'<>:\"/\\|?*]", "", self.root.get_property("P" + bw, bw)) for bw in "BW"} + player_names = { + bw: re.sub(r"[\u200b\u3164'<>:\"/\\|?*]", "", self.root.get_property("P" + bw, bw)) for bw in "BW" + } base_game_name = f"{PROGRAM_NAME}_{player_names['B']} vs {player_names['W']}" return f"{base_game_name} {self.game_id}.sgf" @@ -507,7 +510,7 @@ class Game: priority = -1_000_000_000 elif mode in ["equalize", "alternative", "local"]: if not cn.analysis_complete and mode != "local": - self.katrain.controls.set_status(i18n._("wait-before-equalize"), STATUS_INFO, self.current_node) + self.katrain.controls.set_status(i18n._("wait-before-extra-analysis"), STATUS_INFO, self.current_node) return if mode == "alternative": # also do a quick update on current candidates so it doesn't look too weird self.katrain.controls.set_status(i18n._("alternative analysis"), STATUS_ANALYSIS) @@ -530,13 +533,14 @@ class Game: cn = self.current_node count = 0 if not cn.analysis_exists: + self.katrain.controls.set_status(i18n._("wait-before-extra-analysis"), STATUS_INFO, cn) return def analyze_and_play_policy(node): nonlocal count, cn cand = node.candidate_moves if self.katrain.game is not self: - return # a new game happened + return # a new game happened if cand: move = Move.from_gtp(cand[0]["move"], player=node.next_player) else: @@ -544,8 +548,9 @@ class Game: move = polmoves[0][1] if polmoves else Move(None) if move.is_pass: - self.set_current_node(node) - self.katrain.controls.set_status("", STATUS_INFO) + if self.current_node == cn: + self.set_current_node(node) + self.katrain.controls.set_status("", STATUS_INFO, cn) return count += 1 new_node = GameNode(parent=node, move=move) @@ -554,7 +559,7 @@ class Game: cn.add_shortcut(new_node) self.katrain.controls.move_tree.redraw_tree_trigger() - self.katrain.controls.set_status(i18n._("playtoend:status").format(num_moves=count), STATUS_INFO) + self.katrain.controls.set_status(i18n._("playtoend:status").format(num_moves=count), STATUS_INFO, cn) def set_analysis(result, _partial): new_node.set_analysis(result) diff --git a/katrain/gui/badukpan.py b/katrain/gui/badukpan.py index f1cd02a..4a610d0 100644 --- a/katrain/gui/badukpan.py +++ b/katrain/gui/badukpan.py @@ -502,6 +502,7 @@ class BadukPanWidget(Widget): ] top_move_coords = None + child_moves = {c.move.gtp() for c in current_node.children if c.move} if hint_moves: low_visits_threshold = katrain.config("trainer/low_visits", 25) top_moves_show = [ @@ -519,7 +520,11 @@ class BadukPanWidget(Widget): scale = HINT_SCALE text_on = True alpha = HINTS_ALPHA - if move_dict["visits"] < low_visits_threshold and not engine_best_move: + if ( + move_dict["visits"] < low_visits_threshold + and not engine_best_move + and not move_dict["move"] in child_moves + ): scale = UNCERTAIN_HINT_SCALE text_on = False alpha = HINTS_LO_ALPHA diff --git a/katrain/gui/popups.py b/katrain/gui/popups.py index 27d8a8e..4fcee19 100644 --- a/katrain/gui/popups.py +++ b/katrain/gui/popups.py @@ -253,11 +253,10 @@ class NewGamePopup(QuickConfigGui): def normalized_rules(self): rules = self.katrain.game.root.get_property("RU", "japanese").strip().lower() for abbr, name in self.katrain.engine.RULESETS_ABBR: - if abbr==rules or abbr==rules: + if abbr == rules or abbr == rules: return name - - def update_playerinfo(self,*args): + def update_playerinfo(self, *args): for bw, player_setup in self.player_setup.players.items(): name = self.player_name[bw].text if name: @@ -274,7 +273,6 @@ class NewGamePopup(QuickConfigGui): if rules is not None: self.rules_spinner.select_key(rules.strip()) - def update_config(self, save_to_file=True): super().update_config(save_to_file=save_to_file) self.katrain.log(f"New game settings: {self.katrain.config('game')}", OUTPUT_DEBUG) @@ -288,11 +286,15 @@ class NewGamePopup(QuickConfigGui): props = self.collect_properties(self) root = self.katrain.game.root changed = False - for k, currentval, newval in [("RU",self.normalized_rules(), props["game/rules"]), ("KM", root.komi, props["game/komi"])]: - if currentval !=newval: + for k, currentval, newval in [ + ("RU", self.normalized_rules(), props["game/rules"]), + ("KM", root.komi, props["game/komi"]), + ]: + if currentval != newval: changed = True self.katrain.log( - f"Property {k} changed from {currentval} to {newval}, triggering re-analysis of entire game.", OUTPUT_INFO + f"Property {k} changed from {currentval} to {newval}, triggering re-analysis of entire game.", + OUTPUT_INFO, ) self.katrain.game.root.set_property(k, newval) self.update_playerinfo() diff --git a/katrain/gui/widgets/movetree.py b/katrain/gui/widgets/movetree.py index 99d1728..ecd53f1 100644 --- a/katrain/gui/widgets/movetree.py +++ b/katrain/gui/widgets/movetree.py @@ -143,8 +143,8 @@ class MoveTreeCanvas(Widget): def children_with_shortcuts(move): shortcuts = move.shortcuts_to - via = [v for m, v in shortcuts] # children that are shortcut - return [m for m in move.ordered_children if m not in via] + [m for m, v in shortcuts] + via = {v: m for m, v in shortcuts} # children that are shortcut + return [m if m not in via else via[m] for m in move.ordered_children] self.move_pos = {root: (0, 0)} stack = children_with_shortcuts(root)[::-1] diff --git a/katrain/i18n/locales/cn/LC_MESSAGES/katrain.mo b/katrain/i18n/locales/cn/LC_MESSAGES/katrain.mo index b7e88de5f4b45e3021736e12ef3292637000999b..e2d7c20787c0e04140d6a1b8ead5fccb85a3c940 100644 GIT binary patch delta 1794 zcmXZcduYvZ7{~F4WoFLVhHYUE!(6u6m@$-0xs*ue4{~q&YsYOG%V;@h64N4vqKM3; zL>nu&ESKC8rABg@l4XQk%M|aA^ZfPtKHuB({XW0%Iorx=%Fe%yjr29M)HJj8n1=)L zH1@{_7{GQ+!CxK+`DjKd<-`h_?E*I*v*4q3#;)3`xL zB6i>~>`wOKn2%bx7<*tj#$q*2!Wt~Z`*;}R*?k^n8mn+GYGD#((T3@$@hq&s38({|!yqZz+&tM)7PA2FP#I z{x`TeYQi#)D^LlxA}6(7r~@9yENt@l4fZ1bjsc9zHJgknsQL5Uu=iJ?Dsc@n$Zsv) z(Sf`ROCA|rSb#iin}J$T>it`A6!AXfQg$1urhP>npg)7UVKye>Y*dApBG1CkpyoZo zh;I18JKnk9P?gY+R0l}K|G#HUA}&IWm$;RvPf&~6xDIvTV;ICMK7P-~AG|#wGTIh8DE?z!!`mj^U5I z3wA}FIEZ=!$sUI=fj9$|ARkk3GAhA5R7Jy$mx9ZK!OC^z#W}^Ri&t(~8(!O(mA0tg EKS4pjeE3vC%)*U0758UY*otY~ zrXvY|;W&&T`*;;8vW5I?zQ7VgwWLE~;{EZoB)={o(e8y^%0B zx*!d;VUEZ7ZZRIBzZ8$*ODw^vY_lWSj1iohWA+rk;Q?&PHG72%`7WB5MR_k^1dn2P zC3P;R@d?}enJt+RyL)cukFLNurzZzAEo0vm> zd+r^-kmq2DQ=$tCk%w&yPz%bvewZO5;xFm|$^2ORe$SXpycjjU*4>Qy1a+v552Frz5`%c%#~=Fm6Sre3 z_16iz>5xBB3kMc)ddxs2T7Y_lt5FHcQ3*pHSG#*q7dqnc3AYKg|25Qpt*G^#Mbuvd zU34gM59+1~)1v)($e)_c^mrMngcYcR)S(hKczhcB6E~w0TybyUO5!`1f~nJ^2N@rx zp^5WQ-@X*J@p^X)s)V~ykM1z)KrKGrf&6l<8}-eDGt6jOAu3TNYQODnEh=BV8$Rxh zMz;y|m@a$V>2|pvQ5$}D|9StQnbD1tQ58+Y?KloKztO#fI#^3IF1Keiw4l=mKH~u5 zUW~zh{Gsc_ai}+t=y4h*5@(_k6ksaOMkOdiRkY&jt>DIB+@`JTsy6JXyjnPFP5OTo C+`R$- diff --git a/katrain/i18n/locales/cn/LC_MESSAGES/katrain.po b/katrain/i18n/locales/cn/LC_MESSAGES/katrain.po index 55d9acf..842ae99 100644 --- a/katrain/i18n/locales/cn/LC_MESSAGES/katrain.po +++ b/katrain/i18n/locales/cn/LC_MESSAGES/katrain.po @@ -415,7 +415,7 @@ msgstr "保存AI设置" msgid "sgf written" msgstr "带分析的SGF文件保存到 {file_name}" -msgid "wait-before-equalize" +msgid "wait-before-extra-analysis" msgstr "优化前等待初始分析完成" msgid "Copied SGF to clipboard." diff --git a/katrain/i18n/locales/de/LC_MESSAGES/katrain.mo b/katrain/i18n/locales/de/LC_MESSAGES/katrain.mo index 6118c3947016741a938db41f598dd75bbaff33e7..62e3473352bf22465e9af6c28732e9707ffee59c 100644 GIT binary patch delta 1794 zcmXZcYfR2z7{~FeqH~E#N2x@@(}4;d9NLV+j2uR3YHV_9l;MT_8TA5r!Dh>8%x0Km znd6woi!`Tc(_(pnSZucDl^mAuZ_oeD^SST)dH&aZU)O#8pCM=1x!LdU#GBdJ1hcJ} zg9UgFbFdf3VsN5a9Hw9x7UE_s#WrlmWmq%LEKhUP?*}jteUo?=LvR{;Q1RC#nPW2; z9AjZLcA)0nn1%l1&4^+77>z4&1a84{tiv*Via#+t*=#ZTuv-u=MLo9$mB@CC!NWKO z&!#wLM;LUnpa)i@nq^=mc3=~Z!i5ve{BR9Y6sy2y+=Ko&GR-U$Ls1#Wx${)lEL7!+ zP>Ggd2v$1oU^7Or(0~fqhzfWN!?6XQ;}!gX4HL~a;)+RT&+snx;em8Me9YEQrYa1p z$R>(;D(QAHpE;GQV(!B|{9x`Z_m~}JFgKGAzIcw>_yzUn7VI7BV82kM3(7X5+LnUB zI3L-|mY^!N8`V>ds5lo;3AAD?K6KaLB3I(rCkBi8VhHIYTR>;1L^T+K4X6zcpaNcX z*YBVz^#lX33w3}u?))RF3BS4Pe$&lLm`5VX+iDDEe>=oLfsdn_InKjcjKXWE#2({X>~rV&1j%B5D`%hw4N_FbebXy%jD)&TOYpSJH)!GVNuc?*EDkFo-%x z5K*`l^Puju%AM~+WpoXbu@iL#1E@HIn1a7i2S}XdeQk44J(G`$H-8rOAH$%M1!Y)= z3Val4T)ToX*p15kJ1W2*j70z0-m8m8T}?WwXR=X=6``IhL-j@l#^P2~1rE=q{yND? z7LxG>>aJg-dg3QiMH@zKm{;H}Z7C}7K~xi-K>fZ2eetrpeic=jn^=MOFb<;%y=FQL zbn->W_1bb&z$VlN&8SSyqX(~}y7xUQ(|{rx5F=3sFG0oGgsSXmROYR&k5K!)L{-x1 zVZdu|A6-AAn(7OVz?foh28pN*(@>daqe@te3b+Ina24_&Wg9Sqz>V&D+Z=BNA7C`! zzrqCGa_eWH6WUzwi6hXD=>*j4m5!>22enZy>R`o~ge6EIt41~Le$-W6#8SL{>wegl Zu&})iyQ)3aJF2(stFNuUH6`J7+JD6*#eDz( delta 1788 zcmXZcYfR2z7{~F8lEi}!B2Uue)JgR?bx?#FqZ}F~hs~TuSk}yJ8GmoY95!1{V>ZKt z+2k-SV`Gi9Y+B44#PF)|Mh?qi`TqR>Z=TP6-_P^E?)$p#>;LpRJx;@?Fek>$V*O@Y zF%75VDV&5I7>l9tW^w38A5O!~Sco_9Ixfc5qxep9)bBrFIR3!^_De9Eh)JmU%M#47 zDGX{^h{SuS`7_K!8*Rq37Q|t=2t#oLF2zb*fDiC1h9{a8<8K^*^Vn6-m7)^agu`(! zrsBzfV|IwaBNp^P$r!T~EXRkq4~O9Fv1TDyiWJ4l@F-Se81~{I3>)WW9F3aCd#0c& zmxW5S2nS-h;|denS1Z1$%)y*jH5PLW2Kq#rzn- zJP+B+=AtUK9Y>;rigN~)Ks}DYyWaY9@e%3@KA_@sVF16O4iKB;zP4$oo(ZDj<>gTSCsC}xd`7BhJ*W*cr@N&sLA8LaGs7y{{I$p+!_!5Tf zcp85cG!}$Iw z`pwo^Cj*`E7wW_j1@2$%DAel}Kvg6OwNVD@VA+^}`A8sJg=*SesH-}Q^YO;*Cf^oc S|LUDzn;6b?pj^vhtbX?GmB3$ ztHd0fi7l9cy%@kRn22GM&BkI9Zomv|LI+DQI@xRnZpA6sh<w#!&|5m-$PaI5vpSSs02Qt z;(bT0_d8SFg>k4C8K{8y7=eYTg~ix~>+vo6r!mF>e1L`1&F)}0$9jSH@g`oR-h;T7 zzVzZU`nz-lhs~r7%$?#avw8-J)O%Z)*?CmPf9JTBh@c;l%rh|_3s85a1Xbc4$YHDo zqwpN6Wo@X$@1hR!1a*gAdC$Kh@f`cdU^Oq|=emK*FoyYI)CNr$#AZ~W9#n}RpzcDS zH-CoF%=^9PgQ!b4gla`}j@$b*3^Ff3AN$)z20C#F1Gp2lk>fo-jylm<)W)5di`}SJ zeMX&Z7^5(19%aT9)O;%@U=^0&F;oR#;!O6pAqLtYdA@rq^HK9HNPDf;n_of&yp8$z z5NWIZ!-Y6wfm^vUBp2IKz|7IGgg7nSg4RI4gb6|2Gk?$4wCTF}S?mGC_BZLsU808dc~ z4WlylaqRIJi)uw0D)B5-;9QKuC8*1{&U;^q+NT_q@BvhdPv=vAoveiiLF`7I@HMJ3 zKal%lz5;jS0@N35B`V-<)X5ywh7HJ{$WCE6oo>ZCH=0&=FL|Cs2ubBJU*AW7!XT!@X$S#5?|D~&mXy6|(_7-O|U!`he& zi#aSd#ta+EMRUlyV#q~Itud#x@&4@hyLvs(@Av$l=X-emzt*}-bvHf@cSf06e6m?J zW?}|5<0O2H(f9=uaR|dPF2!sOreQtS;xY_NHJgm|y&*8?~ShKVlGmLsjf2p2zTUX2bC^j>PMzjPIi=_XJh3Zd3q0 zsQtd7)(1M{-Gx5Xi!{`RIT(idsD(v%6PM#V44h!L8b9Du%%4bB_z%1B0qNbs)6}~k zm(Z7XETF&h0!U_xStoO+DAQ~|gBa>v7HHOpium_5w-UkhBZBz^jK^FYjf+tgD?^g8 zt?0uBRLd@)0>6h!q#bpKUVG2KBKtY^hrtqFL}j}hmtqX_J*WeYp&y%28{I~g_#x^p zba?YljAGvHJ?}+bx;|7Z!gAc+r=XvCE{1Tvtze*xOE4NMPzTj|&kv(Asz)8%iZihd z)vC{^%m&bhp}A)BF$pzaj|o_X%kUtog0C=x^R1784oH~p-pU-*d@a&m+u_a6pf
bky5I1}b$is)Q?%zq*wp*TD{; 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 UYz_(BQMGn!W%Y)pthj{qe-uQ;{Qv*} diff --git a/katrain/i18n/locales/fr/LC_MESSAGES/katrain.po b/katrain/i18n/locales/fr/LC_MESSAGES/katrain.po index 10f99d3..9eaa760 100644 --- a/katrain/i18n/locales/fr/LC_MESSAGES/katrain.po +++ b/katrain/i18n/locales/fr/LC_MESSAGES/katrain.po @@ -476,7 +476,7 @@ msgstr "Mettre à jour" msgid "sgf written" msgstr "Analyse SGF rédigée dans {file_name}" -msgid "wait-before-equalize" +msgid "wait-before-extra-analysis" msgstr "Attendez la fin de l'analyse en cours avant de l'approfondir." msgid "Copied SGF to clipboard." diff --git a/katrain/i18n/locales/jp/LC_MESSAGES/katrain.mo b/katrain/i18n/locales/jp/LC_MESSAGES/katrain.mo index 6d6ff7c02fbfeba5da20f20eb4eb84964cda2f3d..e9dafa41db37141bf63b16255ad1100e00f6308b 100644 GIT binary patch delta 1796 zcmXZcZETKL9LMqBy{2X8P+6&Zs4~+kRrCSVyHw)^mWYY1Wz?ERtrbxT5?n#N@E9+! zq)jw3vKQhZMS?9-nQf%(MLi@N(gY!qiiyQyWAXjvI!V*dIp_Lc=lswAoa_E$PojHI z;>_c;XsD#jY^e#0Fo|u!ZtO>YVot zaDH$JdcKwD1sl-`MCkbrp(}gb0}gBt0Y8O)7dr5M==b2y^j~8SUiw7ZhCfix8g`!d zsq_Wz97omg&pc@kem!1l!S4&=xblh8b^0xZ#PEJpS0vq_k(?|&_<*c9XjkA_vBdG~ zH4es%lDL%l!AkUzEk(yQp?A0|^xM!o{1Maf8v5?sMOW$tX0pEir7@3zfu$0g(=zl6 z+k*#?W7ZLLMJ}UD{(JCF@IE?$N1^`)9q*fF2cVzlAVpFMrm?=3(-^`)J#sM>p#zVg zUp$AS@G5#oPtZGlg(=v7TKs$vdIQB+fz{}*P_?mn~dTG z+8FRc=aDtki63E~ig+hk=;w=(FG$~_Cul+M>?AsobI3=eE9mj7=)^j)2JfNgDV-JH zxdjmo2iBv137gQRY(-Ca9Q`%4V*z%c&;B_&fibhCTr3S%<5c=v(9he^^ZXL*3U;H{ zje2PK7QYJqgT?g!3jsxyabOvGqGWJBdS_pS=MBNN=pAmr$q8v6I+2b!ar`axJdcpL zmHI0@NUMqiGqD!|d6@~ delta 1790 zcmXZcZD^KN9LMqB-D;+8>AK6**_xY8ZRYMx%}txP^Qk~$q*H6wm=hlw`NG6Ul#7^H z=nD%r*pw7shzi4rTId4B$wXmOU#PHXq#%ZxVdO&;q2C|Zfw9jy=lWm&^FI&Q{oAfY z->$^5+nLd8l7{6iCz$ zZ8#9W$0FQ|<=B;{Nbl14kAa~${w--1PQ!fMhEA{#U&Z5?iQTvidx8`5rBp)t4r>`d zH#(khR6$&D5x&lN8l7hmzK^R5qPXIN47kEuI2iAv6FtQtxS&wVzy{30m3RR+p$kfn zkp|(s;K%5EpP?sQi7sF>I^S;e&hC$BIIukg{1o~<=)fDHe+SRge~5qJ$+xAi@c{d| zl$95bm1-~=CpF=<@zNapq*&U6KTL?@$|p*f=r@;0zwmxkSIRchs3?>AUtl#Hw0Ge4 z6p7>4Lwp0X-ix<#Ot2DtWQ);ptI#WK3jH?p3V+0G>_Xq2tLUA&i^G^-k7&$iVDMCl z#c2upg{{Gz$T6!Gy(6d4TYfQkC3pi}K!51}jgJ2}IEWkP=Od9#QVKJfU!T$#&OkkK z549N`*osbY6i4G3^onkxSNs4oa9~CJJR7}$5}b)O=(BGL%(|EdLh4J zrk3zo|oxc%1 z?~Zg7PteAIC+a|Qs~caz7iY#RNur-uBVUkKpc6Es3ps=?>?raP>1Xu#8FXRYxD>CW z^ORP_ckY9Th6C%-zl5vMTiJq6xF7vBwBrQqM4$cd=mPR)@pFr%!5W-QeT&O@(kVR*hg*oa=?S}aRQ-=GWWoD;|Q zqVx14aSgf`9%ybHI1~pEP>3&KF}l)H^c^Ti?@$%`r+7ZPkk8Q*uL(9Gr>M3Qr?VTg T2drJc?8`5U%?Re)o5ev;N diff --git a/katrain/i18n/locales/jp/LC_MESSAGES/katrain.po b/katrain/i18n/locales/jp/LC_MESSAGES/katrain.po index fd8ddae..b0e571a 100644 --- a/katrain/i18n/locales/jp/LC_MESSAGES/katrain.po +++ b/katrain/i18n/locales/jp/LC_MESSAGES/katrain.po @@ -452,7 +452,7 @@ msgstr "AI設定を更新" msgid "sgf written" msgstr "分析結果入りSGFを{file_name}に保存" -msgid "wait-before-equalize" +msgid "wait-before-extra-analysis" msgstr "初期分析が完了しないと均等分析はできません" msgid "Copied SGF to clipboard." diff --git a/katrain/i18n/locales/ko/LC_MESSAGES/katrain.mo b/katrain/i18n/locales/ko/LC_MESSAGES/katrain.mo index f9931259fe4d92de54c1fe7fff748770d181b1ac..366a5eff12b5aec2d8664b7190920c26f41b5db2 100644 GIT binary patch delta 1796 zcmXZcZD`G57{~Ez*fMrv#@URG9S1Xe@ccaH;dp$5B?{SC!jZC}&C_3#wq_*4hP_%* zOEH_YT8ccq5U)^&DA6XAWTYj&KmYsH=f3X$eeV0Zuj~ImCu-wP*2dlZkl>}8S#X3| z6er_KY{I43jR7neX_kY9I2d=}Nvy&ajL$Huz?(Q9!*~M3AYfZh5U7um`YrY$#@Be z;&q&j_d=doJ%e5*v~leiKhv}LjJO?jgX3YdzIYCm=taDbw=e!h^`(b_G?! zho~ODLY1}$M`K``ALk=Qv8AYsMNz-2M76LEQ?MCnt!H-_a2b1sIwU7ZzF~|-)_5!80xM3iOO^mpMXjo zLB1Hd|^PQRXbiH0F;X z?~OI0D)0!ol)XVEl)^_Wr=Tjc#<>B>#kQalYQX=Ma?e{(m1>V9e4&)@gnN0xq*5|I#9iT;GVxgea2sL6#hY7Jfo2Mr!&YY zG~>&&2$F+EQKi0ythF}OTl@`IV;}0S1By`zm7z8)cY3G<>rsiF!;RR4y3lV_i<7(s z{=zJzJ(lg_t*8Y%Q3o7Fs&4hT5FeuwNG!7d|Dfr}f0&iwG^{}#)QPIdb7u^7k&mc- zyYm?Qy` SbWiE-s*0TzZ8;-eXa588P|qs> delta 1790 zcmXZcSxA&o7{>8eq_Hx|)YQ@@Gb=4E+gFzoi;|#>h-_a5T7*j5F$Tj*%BXDdN=T5P z%@RQhLCcG%n-&=d}q$`obQ`c)nUh~!*0Lx1>?*tKFMq+ zPQWEthYPVAqc9`cY&_1yXxxmaupF;pFP7uA5oWpQ_nVEybvPKSa1>rZhFB}k#gN~E zwwOlrNVDNsf>UuH&cdr0kKLGvzi|M@q?m2RWZZ<6I5EuZEpDKWN%h8+VFGmp4#5kk z17E?}*p?bJtD(_DhbBHc+S_RjKBjI$o#05CSva0XZS)*=;tllSt}$LR`>{Xu2^@rH zU4K2sQa7Oz?R5Q5gETa-3pMd))J6u7-$0B-MefIDoP@uy3s>OFac18!E1iv#KuU&L zF)rY~e$#((g4s&yGnwAF_gQ9z)GsEQed2l0pUof|k(15ZdC-8`>BgyE5_^%k?Gh@& z4%8h!Lq+=qQ!rwhSEnPPSU&1t0o3oxP*+%mu~?5>ZP1!&a2R`tqwovrO0gHCi?1Vk<7f9@K(4Op=d9sH>>KB5cM&{EHe_Fo*ngN6TrbW4*H!6R8g) z?~R>DC2$Wpls!jnD2k6*W}=cQauy?dvDK(~Yq2jW_q-96)b+XKKa55v9lHD1sJr=x zyttMzk8c@Qq9Wdgny>=3;7LrtbEvQ8D(W3+LEU}3d;SFV8Gpc$_zQLLgdFl8P9rVH zj4#jfkhLvP#i>11HEo#6P)B*>Q)a^LV$NQ)agy&n|KWH5CA7<-u8djnfYDFdT$QeQ%`2Q13zjmD~|5!`ha+Q9Gg{_UzkK Ny8UpVB|GU=`hU1y&8`3d diff --git a/katrain/i18n/locales/ko/LC_MESSAGES/katrain.po b/katrain/i18n/locales/ko/LC_MESSAGES/katrain.po index c04f90b..c8d1081 100644 --- a/katrain/i18n/locales/ko/LC_MESSAGES/katrain.po +++ b/katrain/i18n/locales/ko/LC_MESSAGES/katrain.po @@ -424,7 +424,7 @@ msgstr "인공지능 설정 갱신" msgid "sgf written" msgstr "SGF와 분석 결과를 {file_name}에 기록했습니다." -msgid "wait-before-equalize" +msgid "wait-before-extra-analysis" msgstr "추가적인 분석을 요청하기 전에, 먼저 일차적인 분석이 끝날 때까지 기다려 주십시오." msgid "Copied SGF to clipboard." diff --git a/katrain/i18n/locales/ru/LC_MESSAGES/katrain.mo b/katrain/i18n/locales/ru/LC_MESSAGES/katrain.mo index 951f6ccb1f2b7020e038a7e00f8afff3b61b4371..0bc8dd4f69496d78e2e3cbc6cf870b1e76e1109e 100644 GIT binary patch delta 1796 zcmXZbYfO%D7{~G76OvX+&eGvYP7x*NV@U_0C}&>uurWM((P55r^McJBE7lrg&1p7m zSs3$z$i|o%wq_1F4Vf|T9LM+CeZTtr|Nr}cysqoM-so#-^fkQ?bp}Z46DzI7bS%Pp z%)}1thbaT4v6zj$aWihjgZKykU?u*HlV)RCyu?yn#V~w|v+yNO!=wZ$fTam?w35ax z26|vZqO=UtaSrao(b$HpRad_hjzh2p)A0bdV$dfQCrP{M-xwry!<=L;k3~2Hw<1&3 zfHU!SvLk(_5jxmi@EzGhzp)hKSrvs2cEUqA3TrWh18-p{{X0XY2z-F{;%C?$-y%WL zch9I{l0`ff`(nOBqZf@*w24*NA8Wk{jb8r_HZ$Ii*&JLuTslI(jpvoo4~~#F;q#Hw zF)ZPhdH9X+y~7FVQaQ$E5P=XucbdlYG8zLX^3u*y;w1NGX(Vb42jpWaZbPQ( zJQ7{KMzW^P)7_jWBX?67PR2U4h&)ECg?6-B`i=I$UNfjW&etd!mg^j}TvsE}QVUwK zb$H+Zp@nQtrqmNxqlJDG+Ce)o8uxkq<7o5GBiU37+I}A~8~SQrqO?fVHi&3Y{#Bx{ljQQR*&}5R?NiLNO{Q5X#`jKcoKJ^MbbY@TEh8SO2Y=4 zuoyq0g?@4li*O^_0aq{{-(UqQ*ZmDE(fV)EUbr~V{oR6S#dZ-b!VfTj{n*rsb1OPA zH1^W4DnE{c@B(JyBb67=I*wC{V- z9(cwZzl`?Rwaq2|_CJ4Npb%r{xv5x>wx9tm0v9n6zv42CV)8IthoM-55m=A*!n4>N zuVFae#TEDjlW=sAl!3(#4V$ delta 1790 zcmXZbXKc+;7{~G7EvhXoO07!=7uDLeS8oT}YK>Y^Bx+onptj^ngjkJKX(UaIG$CnI zL|;)V2oXWjh*2X!MT~c5Y~RQK|LSwjx#xeLbDrn9SF1g>)t+;&Lxb%kwf9O(Fc~Lf zDf+PyJEE_PG#JNV46egfxCejXS1iI$U8QVX8Y}Us&SMzf!%TdHW3Wq{REPy}3TiHc zODwd(PVv%gOvZ`03;Sa|@~u1xQUu21Axy?%tizQaDYqNnFu%}U3ddBRl!V#X6N`|o zD#vuZ>1)J+11THEq>zCSN=H3cFb`G^!mMf4~$ABCh?WXz-pa}R_pypwp5GO zY>n>k-_cSw&M&pad1$F$ixy}zw#HrVybNuB1yW7bqMi2=Gw>Tm6JMj!oQ;!^tSEqS zSnjUZ;sECNF$|m1IomN3ZN3k!$x6{)T8Dmog0zRcL?gLM$K$vSEtB3%X%_L7&%hQc zF&|%|rGD@@DGQgN1vrPX_!QUU546AG>haF}8QKe{OmO~g0kmeTLd)b{Fl>!8Fbgdc$8Z7Gp>s z)oJ2Pw2N%Pu6V$;5-pRr&@vT#!61aeXV-7Ig82`$6bJJE|4+3B?V`KU4mjdkjkfOw z+JX1bGWH59JX~^`^N{P)oeMulEA?+2WOq;DIjvX-U^H$-zSCZ8hWpV{T!I$pC|asd pViKM~>yZXb!@p?fq|M|^oL+Mwa(QI)wHpdoF59}eW`MV3)IZys