From da9ec8596a6d345d4d54a7000c6e45221be9fe8a Mon Sep 17 00:00:00 2001 From: Borys Lykah Date: Thu, 26 Sep 2024 14:02:29 -0600 Subject: [PATCH] Add Ukrainian language (#712) * Add Ukrainian flag and set font * Minor fixes to the English text * Add Ukrainian localization * Reorder flags, replace "jigo (draw)" with "jigo" * Shorten translation of winrate to make icon fit --- katrain/core/lang.py | 2 +- katrain/gui.kv | 3 + .../i18n/locales/en/LC_MESSAGES/katrain.po | 4 +- .../i18n/locales/ua/LC_MESSAGES/katrain.mo | Bin 0 -> 30262 bytes .../i18n/locales/ua/LC_MESSAGES/katrain.po | 1063 +++++++++++++++++ katrain/img/flags/flag-ua.png | Bin 0 -> 14658 bytes 6 files changed, 1069 insertions(+), 3 deletions(-) create mode 100644 katrain/i18n/locales/ua/LC_MESSAGES/katrain.mo create mode 100644 katrain/i18n/locales/ua/LC_MESSAGES/katrain.po create mode 100644 katrain/img/flags/flag-ua.png diff --git a/katrain/core/lang.py b/katrain/core/lang.py index ccc94684..a8257b93 100644 --- a/katrain/core/lang.py +++ b/katrain/core/lang.py @@ -11,7 +11,7 @@ class Lang(Observable): observers = [] callbacks = [] - FONTS = {"jp": "NotoSansJP-Regular.otf", "tr": "NotoSans-Regular.ttf"} + FONTS = {"jp": "NotoSansJP-Regular.otf", "tr": "NotoSans-Regular.ttf", "ua": "NotoSans-Regular.ttf"} def __init__(self, lang): super(Lang, self).__init__() diff --git a/katrain/gui.kv b/katrain/gui.kv index c0e8d5ab..68a2bae5 100644 --- a/katrain/gui.kv +++ b/katrain/gui.kv @@ -1069,6 +1069,9 @@ LangButton: icon: 'flags/flag-fr.png' on_press: app.language = 'fr' + LangButton: + icon: 'flags/flag-ua.png' + on_press: app.language = 'ua' # LangButton: # icon: 'flags/flag-es.png' # on_press: app.language = 'es' diff --git a/katrain/i18n/locales/en/LC_MESSAGES/katrain.po b/katrain/i18n/locales/en/LC_MESSAGES/katrain.po index d18bac6a..1cc1e7cb 100644 --- a/katrain/i18n/locales/en/LC_MESSAGES/katrain.po +++ b/katrain/i18n/locales/en/LC_MESSAGES/katrain.po @@ -765,7 +765,7 @@ msgstr "KataGo" msgid "aihelp:default" msgstr "" -"Full strength KataGo AI. Strength is affected by 'max visits' and 'model' " +"Full strength KataGo AI. Strength is affected by 'max visits' and 'model' " "in the general settings 'engine' section and engine configuration file. No " "options are available here." @@ -920,7 +920,7 @@ msgstr "{num} available katago versions found" msgid "All models downloaded" msgstr "All available models already downloaded" -#. error message on trying to download models when already done +#. error message on trying to download katago when already done msgid "All binaries downloaded" msgstr "All available binaries already downloaded" diff --git a/katrain/i18n/locales/ua/LC_MESSAGES/katrain.mo b/katrain/i18n/locales/ua/LC_MESSAGES/katrain.mo new file mode 100644 index 0000000000000000000000000000000000000000..86d679188ed9b49a50074e806ed4e9f517d7d05c GIT binary patch literal 30262 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

fmL&tFtWZtu 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 literal 0 HcmV?d00001 diff --git a/katrain/i18n/locales/ua/LC_MESSAGES/katrain.po b/katrain/i18n/locales/ua/LC_MESSAGES/katrain.po new file mode 100644 index 00000000..02aaa50c --- /dev/null +++ b/katrain/i18n/locales/ua/LC_MESSAGES/katrain.po @@ -0,0 +1,1063 @@ +# KaTrain localization file +msgid "" +msgstr "" +"Language: Ukrainian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +# TODO: delete this mapping +# Settings = Налаштування +# Teaching = тренер +# Winrate = Шанс на перемогу +# Engine = енджин +# TODO: reformat all lines that are too long ^.{79,100} + +#. main hamburger menu +msgid "menu:playersetup" +msgstr "Налаштування гравців" + +msgid "menu:newgame" +msgstr "Нова гра" + +msgid "menu:save" +msgstr "Зберегти гру" + +msgid "menu:save-as" +msgstr "Зберегти гру як..." + +msgid "menu:load" +msgstr "Завантажити гру" + +msgid "menu:settings" +msgstr "Загальні налаштування" + +msgid "menu:clocksettings" +msgstr "Контроль часу" + +msgid "menu:teachsettings" +msgstr "Налаштування аналізу" + +msgid "menu:aisettings" +msgstr "Налаштування AI" + +msgid "menu:lang" +msgstr "Мова" + +msgid "menu:support" +msgstr "Долучитися" + +msgid "menu:manual" +msgstr "Довідник" + +#. player options in the setup and on the right +msgid "player:type" +msgstr "Гравець" + +msgid "player:human" +msgstr "Людина" + +msgid "player:ai" +msgstr "AI" + +msgid "aistrategy" +msgstr "Стратегія AI" + +msgid "gametype" +msgstr "Тип гри" + +msgid "game:normal" +msgstr "Звичайна" + +msgid "game:teach" +msgstr "Навчальна" + +#. buttons at the top - should all include a line break +msgid "analysis:nextmoves" +msgstr "" +"Наступні\n" +"ходи" + +msgid "analysis:dots" +msgstr "" +"Позначати\n" +"точки" + +msgid "analysis:topmoves" +msgstr "" +"Найкращі\n" +"ходи" + +msgid "analysis:policy" +msgstr "" +"Ходи\n" +"політики" + +msgid "analysis:territory" +msgstr "" +"Очікувана\n" +"територія" + +#. analysis menu items +msgid "analysis:extra" +msgstr "Глибший аналіз" + +msgid "analysis:equalize" +msgstr "Зрівняти візити потенційних ходів" + +msgid "analysis:sweep" +msgstr "Швидший аналіз усіх ходів" + +#. Analyze every node in the game more deeply +msgid "analysis:game" +msgstr "Глибший аналіз усієї гри" + +#. Restrict analysis to move range +msgid "limit to moves" +msgstr "Обмежити до діапазону" + +msgid "from move" +msgstr "від ходу" + +msgid "to move" +msgstr "до ходу" + +#. Menu option for tsumego frame around position +msgid "analysis:tsumegoframe" +msgstr "Рамка для цумеґо" + +#. View a player performance report +msgid "analysis:report" +msgstr "Звіт про результати гравця" + +#. game filter in performance report +msgid "Entire Game" +msgstr "Уся гра" + +#. opening of the game filter in performance report +msgid "Opening" +msgstr "Початок гри" + +#. middle of the game filter in performance report +msgid "Midgame" +msgstr "Середина гри" + +#. end of the game filter in performance report +msgid "Endgame" +msgstr "Кінцівка гри" + +#. header in performance report +msgid "header:keystats" +msgstr "Основні статистичні показники" + +#. statistic in performance report +msgid "stat:accuracy" +msgstr "Оцінка точності" + +#. statistic in performance report +msgid "stat:meanpointloss" +msgstr "Середня втрата очок" + +#. statistic in performance report +msgid "stat:aitopmove" +msgstr "Збіг з найкращим ходом AI %" + +#. statistic in performance report +msgid "stat:aitop5" +msgstr "Збіг з найкращими 5 ходами AI %" + +#. header in performance report +msgid "header:num moves" +msgstr "Кількість ходів" + +#. Analyze again but exclude all currently considered moves +msgid "analysis:alternatives" +msgstr "Знайти альтернативні ходи" + +#. Clear all results and reset to normal query +msgid "analysis:reset" +msgstr "Скинути аналіз" + +#. Restrict analysis to a specific region +msgid "analysis:region" +msgstr "Визначити область для аналізу" + +#. Status message +msgid "analysis:region:start" +msgstr "" +"Потягніть для вибору області інтересу. Виберіть одну точку для" +"скасування області." + +#. Menu option +msgid "analysis:playtoend" +msgstr "Швидке відтворення до завершення гри" + +#. Keep improving current position analysis when there is nothing else to do +msgid "analysis:continuous" +msgstr "Перемкнути безперервний аналіз" + +msgid "analysis:aimove" +msgstr "Дати AI зробити хід" + +#. Option in dropdown to insert some moves between the current and next +msgid "analysis:insert" +msgstr "Вставити ходи" + +#. status message +msgid "extra analysis" +msgstr "Виконується додатковий аналіз до {visits} визитів" + +#. status message +msgid "sweep analysis" +msgstr "Аналіз усієї дошки, {visits} перевірок на кожен хід" + +#. status message +msgid "alternative analysis" +msgstr "Пошук альтернативних ходів" + +#. status message +msgid "local analysis" +msgstr "Пошук локальних відповідей" + +#. status message +msgid "equalizing analysis" +msgstr "Зрівнювання аналізу можливих ходів до {visits} перевірок" + +#. status message +msgid "game re-analysis" +msgstr "Повторний аналіз всієї партії з {visits} візитами" + +#. status message +msgid "move range analysis" +msgstr "" +"Повторний аналіз ходів від {start_move} до {end_move} з {visits} візитами" + +#. right panel buttons and below board +msgid "pass-button-text" +msgstr "Пас" + +#. resign the game +msgid "resign" +msgstr "Здатися" + +#. Shown when a move is undone in teaching mode. +msgid "teaching undo message" +msgstr "" +"Хід {move} скасовано, оскільки він втратив {points_lost:.1f} очок. Спробуйте" +" ще раз. Для підказки наведіть курсор на хід, щоб побачити очікуване " +"спростування, або перевірте очікувану територію (t), щоб побачити області " +"дошки, де очікується втрата очок." + +msgid "ai-ponder" +msgstr "" +"Індикатор стану AI-енджину: зелений (очікування), оранжевий (обробка " +"запитів). Стає червоним у випадку аварії або збою запуску AI-енджину." + +#. undo button on the right +msgid "undo-button-text" +msgstr "Відміна" + +#. tabs and labels on the right panel +msgid "tab:score" +msgstr "Рахунок" + +msgid "tab:winrate" +msgstr "Шанс" + +#. shown on a graph tab +msgid "tab:rank_est" +msgstr "Приблизний ранг" + +msgid "tab:points" +msgstr "Втрата очок" + +msgid "tab:info" +msgstr "Інфо" + +msgid "tab:info-details" +msgstr "Деталі" + +msgid "tab:notes" +msgstr "Нотатки" + +msgid "closedlabel:scoregraph" +msgstr "Графік очок" + +#. on the graph +msgid "Jigo" +msgstr "Джиґо" + +msgid "closedlabel:movestats" +msgstr "Статистика ходів" + +msgid "closedlabel:info¬es" +msgstr "Інформація про хід та нотатки" + +#. on the board after passing once/twice +msgid "board-pass" +msgstr "Пас" + +msgid "board-game-end" +msgstr "" +"кінець\n" +"гри" + +#. Select mode +msgid "btn:Play" +msgstr "Грати" + +msgid "btn:Analysis" +msgstr "Аналіз" + +msgid "btn:Analyze" +msgstr "Аналізувати" + +msgid "stats:winrate" +msgstr "Шанс на перемогу" + +msgid "stats:score" +msgstr "Очікуваний рахунок" + +msgid "stats:pointslost" +msgstr "Втрачені очки" + +#. better than expected best move +msgid "stats:pointsgained" +msgstr "Здобуті очки" + +#. SGF and move comment messages +msgid "SGF start message" +msgstr "" +"Ходи з позначкою 'X' означають найкращий хід згідно з KataGo, а позначені " +"квадратом ходи втрачають менше 0,5 очка" + +msgid "Info:score" +msgstr "Рахунок: {score}" + +msgid "Info:winrate" +msgstr "Шанс на перемогу: {winrate}" + +msgid "Info:point loss" +msgstr "Очікувана втрата очок: {points_lost:.1f}" + +#. as in 'Move 125: B5' +msgid "move" +msgstr "Хід {number}" + +msgid "Info:top move" +msgstr "Передбачений найкращий хід: {top_move} ({score})." + +msgid "Info:best move" +msgstr "Хід був передбачений як найкращий" + +msgid "Info:PV" +msgstr "PV: {pv}" + +msgid "Info:policy rank" +msgstr "Хід займав #{rank} місце згідно з політикою ({probability:.2%})." + +msgid "Info:policy best" +msgstr "Найкращий хід за політикою: {move} ({probability:.1%})." + +msgid "Info:teaching undo" +msgstr "Хід автоматично скасовано в навчальному режимі." + +msgid "Info:undo predicted PV" +msgstr "Очікуване продовження: {pv}" + +msgid "Info:AI thoughts" +msgstr "Примітки AI: {thoughts}" + +msgid "No analysis available" +msgstr "Аналіз відсутній" + +msgid "Analyzing move..." +msgstr "Аналізую хід..." + +msgid "SGF Notes Hint" +msgstr "Ваші нотатки SGF для цієї позиції тут." + +# sgf load popup +msgid "load sgf title" +msgstr "Загрузити SGF-файл для аналізу" + +# sgf load button +msgid "Load File" +msgstr "Загрузити файл" + +# sgf save as button +msgid "Save File" +msgstr "Зберегти файл" + +# sgf save popup +msgid "save sgf title" +msgstr "Зберегти SGF файл" + +msgid "load sgf fast analysis" +msgstr "Швидкий аналіз" + +msgid "load sgf rewind" +msgstr "Повернутися до початку" + +# timer settings from here +msgid "timer settings" +msgstr "Налаштувати таймер" + +msgid "byoyomi length" +msgstr "Період біойомі (с)" + +msgid "byoyomi periods" +msgstr "Число періодів" + +msgid "count down sound" +msgstr "Звук" + +#. in minutes +msgid "main time" +msgstr "Основний час (хв.)" + +#. ignore moves if timer is on and less than this is used +msgid "minimal time use" +msgstr "Мінімальний час у біойомі (с)" + +msgid "move too fast" +msgstr "Обмірковуйте хід не менше {num} секунд перед ходом." + +#. submit button +msgid "update timer" +msgstr "Зберегти" + +# new game settings from here +msgid "New Game title" +msgstr "Створити нову гру / Редагувати деталі гри та правила" + +#. in new game options +msgid "player names" +msgstr "Імена гравців" + +#. hint on player name input +msgid "black player name hint" +msgstr "Ім'я гравця чорними" + +#. hint on player name input +msgid "white player name hint" +msgstr "Ім'я гравця білими" + +msgid "board size" +msgstr "Розмір дошки" + +msgid "handicap" +msgstr "Фора" + +msgid "komi" +msgstr "Комі" + +msgid "ruleset" +msgstr "Правила" + +#. ruleset names +msgid "japanese" +msgstr "Японські" + +msgid "chinese" +msgstr "Китайські" + +msgid "korean" +msgstr "Корейські" + +msgid "aga" +msgstr "AGA" + +msgid "tromp-taylor" +msgstr "Tromp-Taylor" + +msgid "new zealand" +msgstr "Новозеландські" + +msgid "stone_scoring" +msgstr "Стародавні китайські" + +msgid "clear cache" +msgstr "Очистити кеш" + +#. clear cache help +msgid "avoids replaying" +msgstr "" +"Уникає повторного відтворення\n" +"однакових партій" + +#. hints on new game +msgid "non square board hint" +msgstr "Використовуйте формат x:y (наприклад, 19:9) для прямокутних розмірів" + +#. submit new game +msgid "newgame" +msgstr "Почати нову гру" + +#. change komi etc in current game +msgid "editgame" +msgstr "Редагувати деталі гри" + +#. generate position alongside starting new game +msgid "setupposition" +msgstr "Створити позицію" + +# teacher settings from here +msgid "teacher settings" +msgstr "Налаштувати навчання та аналіз" + +msgid "point loss threshold" +msgstr "Втрата очок більша за" + +msgid "num undos" +msgstr "" +"Кількість відмін ходу\n" +"(навчальні ігри)" + +msgid "dot color" +msgstr "Колір" + +msgid "show dots" +msgstr "Відображати точки" + +msgid "save dots" +msgstr "Зберігати як SGF" + +msgid "show last n dots" +msgstr "Відображати точки за останні <ця кількість> ходів" + +msgid "show ai dots" +msgstr "Відображати точки та SGF комментарії для AI гравців" + +#. point loss precision options +msgid "show two digits for point loss near zero" +msgstr "Відображати точність до двох знаків для втрат очок поблизу нуля" + +#. analysis option +msgid "cache analysis to sgf" +msgstr "Зберігати кеш аналізу як SGF" + +#. submit button +msgid "update teacher" +msgstr "Зберегти налаштування" + +# main config settings +msgid "restarting engine" +msgstr "Перезапуск AI-енджину після зміни конфігурації." + +#. contribute settings popup +msgid "contribute settings title" +msgstr "Долучитися до розподіленого тренування KataGo" + +#. title +msgid "contribute:viewer settings" +msgstr "Налаштування візуалізації" + +#. title +msgid "contribute:login" +msgstr "Облікові дані для katagotraining.org" + +#. description for input +msgid "contribute:maxgames" +msgstr "Одночасні ігри" + +#. hint for max games +msgid "contribute:maxgames:hint" +msgstr "" +"Найкраще встановити кількість, рівну оптимальній numSearchThreads, близько " +"8 для середнього класу GPU. Можна трохи зменшити для коротких запусків, " +"оскільки неповні ігри не завантажуються." + +msgid "contribute:ownership" +msgstr "Визуалізувати теріторію" + +#. hint for ownership +msgid "contribute:ownership:hint" +msgstr "Трохи сповільнює тренування, проте дозволяє візуалізацію володіння." + +#. description +msgid "contribute:movespeed" +msgstr "Швидкість ходів" + +#. hint for move speed +msgid "contribute:movespeed:hint" +msgstr "Затримка між ходами в секундах/хід." + +#. description +msgid "contribute:savesgf" +msgstr "Зберігати файли SGF" + +#. hint for save +msgid "contribute:savesgf:hint" +msgstr "Зберігати SGF файли завершених ігор в ./dist_sgf" + +msgid "contribute:username" +msgstr "Ім'я користувача" + +msgid "contribute:password" +msgstr "Пароль" + +msgid "contribute:passwordwarning" +msgstr "(Зберігається без шифрування, не використовуйте в інших сервісах)" + +msgid "contribute:register" +msgstr "Реєструвати" + +msgid "contribute:start" +msgstr "Розпочати участь!" + +# title +msgid "general settings title" +msgstr "Загальні та налаштування AI-енджину" + +msgid "file not found" +msgstr "Шлях не існує" + +msgid "general settings" +msgstr "Загальні налаштування" + +msgid "katago settings" +msgstr "Налаштування KataGo" + +msgid "engine settings" +msgstr "Налаштування AI-енджину" + +msgid "config file path" +msgstr "Усі налаштування збережені в:" + +msgid "engine:katago" +msgstr "Шлях до виконуваного файлу KataGo" + +msgid "engine:katago:hint" +msgstr "Залиште порожнім для використання вбудованого виконуваного файлу" + +msgid "engine:model" +msgstr "Шлях до файлу моделі KataGo" + +msgid "engine:config" +msgstr "Шлях до файлу конфігурації KataGo" + +msgid "engine:altcommand" +msgstr "Змінити команду запуску енджину" + +msgid "engine:altcommand:hint" +msgstr "" +"Повна команда для запуску енджина. Усі інші параметри моделі будуть " +"ігноруватися." + +msgid "engine:max_visits" +msgstr "Максимальна кількість візитів під час аналізу" + +msgid "engine:fast_visits" +msgstr "Максимальна кількість візитів під час швидкого аналізу" + +msgid "engine:max_time" +msgstr "Максимальний час для аналізу" + +msgid "engine:wide_root_noise" +msgstr "Шум wideRootNoise (збільшує різноманітність розглянутих ходів)" + +msgid "engine:wide_root_noise:hint" +msgstr "" +"Встановіть 0.02-0.1 щоб показати\n" +"більше можливих ходів" + +msgid "engine:time:hint" +msgstr "Час в секундах" + +msgid "general:anim_pv_time" +msgstr "Інтервал між ходами під час анімації послідовності" + +msgid "general:debug_level" +msgstr "Рівень діагностики в консолі" + +msgid "general:debug_level:hint" +msgstr "Встановіть значення 1 для звітування про помилки" + +msgid "update settings" +msgstr "Зберегти налаштування" + +# ai settings from here +msgid "ai settings" +msgstr "Додаткові налаштування AI" + +msgid "Select AI" +msgstr "Оберіть яку стратегію AI налаштувати" + +msgid "update ai settings" +msgstr "Зберегти налаштування AI" + +#. misc errors and info messages +msgid "sgf written" +msgstr "SGF з аналізом збережено до {file_name}" + +msgid "wait-before-extra-analysis" +msgstr "" +"Дочекайтеся завершення початкового аналізу перед запитом на уточнення." + +msgid "Copied SGF to clipboard." +msgstr "SGF скопійовано в буфер обміну." + +msgid "Failed to import from clipboard" +msgstr "" +"Помилка імпорту гри з буфера обміну: {error}\n" +"Вміст буфера обміну: {contents}..." + +msgid "Failed to load SGF" +msgstr "Не вдалося відкрити SGF: {error}" + +msgid "Kata exe not found" +msgstr "" +"Виконуваний файл KataGo {exe} не знайдено, будь ласка, перевірте " +"загальні налаштування." + +msgid "Kata exe not found in path" +msgstr "" +"Виконуваний файл KataGo '{exe}' не знайдено у вашому PATH. Перевірте " +"змінні середовища або вкажіть повний шлях у загальних налаштуваннях." +"Для MacOS зверніться до інструкції щодо встановлення KataGo через brew." + +msgid "Kata model not found" +msgstr "Модель KataGo {model} не знайдено, перевірте загальні налаштування." + +msgid "Kata config not found" +msgstr "" +"Файл конфігурації KataGo {config} не знайдено, перевірте загальні " +"налаштування." + +msgid "Starting Kata failed" +msgstr "Не вдалося запустити KataGo з командою '{command}', помилка: {error}." + +msgid "Engine died unexpectedly" +msgstr "Енджин несподівано припинив роботу без виведення: {error}" + +msgid "Engine missing DLL" +msgstr "" +"Не вдалося запустити KataGo через відсутню DLL. Перевірте вимоги в " +"документації KataGo або спробуйте запустити виконуваний файл самостійно " +"для отримання деталей." + +#. popup title +msgid "engine recovery" +msgstr "Допомога з налаштуванням KataGo" + +msgid "engine died popup opening message" +msgstr "" +"Енджин KataGo не вдалося запустити або він аварійно завершив роботу.\n" +"\n" +"Помилка: [color=#CC2222]{error_message}[/color]\n" +"\n" +"Код помилки: [color=#CC2222]{code}[/color]." + +#. Link in tags should not be touched. +msgid "change engine suggestion" +msgstr "" +"Спочатку спробуйте завантажити інші версії KataGo і перевірте, чи допоможе " +"зміна виконуваного файлу в {link}." + +#. Link in tags should not be touched (uses link_here msgid) +msgid "go to engine help page" +msgstr "" +"Якщо проблеми залишаються, скористайтеся {link} для перегляду " +"актуальної сторінки з порадами щодо вирішення." + +#. as in "click here" to go to this page, +msgid "link_here" +msgstr "натиснить тут" + +#. AI names, help etc +msgid "strength:kyu" +msgstr "к" + +msgid "strength:dan" +msgstr "д" + +msgid "ai:default" +msgstr "KataGo" + +msgid "aihelp:default" +msgstr "" +"Повна сила AI KataGo. Сила залежить від параметрів 'max visits' і 'model' " +"у загальних налаштуваннях розділу енджина та у файлі конфігурації енджина. " +"Ніякі опції тут недоступні." + +#. ai which handles handicap games better +msgid "ai:handicap" +msgstr "KataHandicap" + +msgid "aihelp:handicap" +msgstr "" +"KataGo оптимізований для гри з вищою форою. Налаштування 'pda' відповідає " +"параметру 'playoutDoublingAdvantage' у KataGo з точки зору чорних. Якщо " +"встановлено 'automatic', KaTrain автоматично підбере відповідне значення." + + +msgid "ai:simple" +msgstr "Simple Style" + +msgid "aihelp:simple" +msgstr "" +"Виконує ходи, що призводять до спрощення позиції на дошці. Серед ходів, які " +"втрачають не більше ніж 'max_points_lost' очок і мають щонайменше " +"'min_visits' візитів, надає перевагу тим, що втрачають менше очок, " +"стабілізують власну територію більше (з вагою важливості 'settled_weight'), " +"стабілізують територію опонента (з важливістю " +"'settled_weight' * 'opponent_fac'), уникають тенукі (більше ніж на 5 клітин, " +"важливість 'tenuki_penalty') та уникають прикріплення (важливість " +"'attachment_penalty'). Ваги можуть бути негативними, щоб ускладнити гру, а " +"wideRootNoise (у загальних налаштуваннях) може бути використаний для для " +"гри, більш відповідної до обраного стилю, але за рахунок зниження сили " +"ходів." + +msgid "ai:jigo" +msgstr "KataJigo" + +msgid "ai:antimirror" +msgstr "Анти-дзеркальний" + +msgid "aihelp:antimirror" +msgstr "Режим проти дзеркальної гри в KataGo." + +msgid "aihelp:jigo" +msgstr "" +"Намагатиметься перемогти з певним відривом в очках (за замовчуванням 0.5), " +"без інших обмежень." + +msgid "ai:scoreloss" +msgstr "Втрата очок" + +msgid "aihelp:scoreloss" +msgstr "" +"Робить ходи, що призводять до більшої втрати очок, але з меншою " +"ймовірністю. При вищій кількості візитів, ймовірно, робитиме слабші та " +"різноманітніші ходи." + +msgid "ai:policy" +msgstr "Політика" + +msgid "aihelp:policy" +msgstr "" +"Виконує найкращий хід згідно з політичною мережею без додаткового аналізу. " +"Сила переважно залежить від параметра 'модель' у налаштуваннях енджина. " +"Параметр 'opening_moves' впливає на кількість більш випадкових ходів на " +"початку гри." + +msgid "ai:p:weighted" +msgstr "Політика з коефіцієнтами" + +msgid "aihelp:p:weighted" +msgstr "" +"Робить ходи відповідно до ймовірності політики, при цьому параметр " +"'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', щоб уникнути " +"явних помилок." + +msgid "ai:p:local" +msgstr "Локальний стиль" + +msgid "aihelp:p:local" +msgstr "" +"Випадковим чином обирає 'pick_n + pick_frac * <кількість легальних ходів>' " +"з ухилом у бік останнього ходу і виконує найкращий з них. Виконує найкращий " +"хід, якщо значення політики перевищує 'pick_override', щоб уникнути явних " +"помилок." + +msgid "ai:p:tenuki" +msgstr "Стиль тенукі" + +msgid "aihelp:p:tenuki" +msgstr "" +"Випадковим чином обирає 'pick_n + pick_frac * <кількість легальних ходів>' " +"з відхиленням від останнього ходу і робить найкращий з них. Робить " +"найкращий хід, якщо значення політики перевищує 'pick_override', щоб " +"уникнути очевидних помилок. Вищий 'stddev' змушує грати ще далі." + +msgid "ai:p:influence" +msgstr "Influential Style" + +msgid "aihelp:p:influence" +msgstr "" +"Вибирає ходи, що перевищують 'threshold', і робить найкращий. Збільште " +"'line_weight', щоб більше штрафувати ходи біля краю. Стратегія припиняється " +"після того, як буде заповнено частину дошки, визначену параметром 'endgame'." + +msgid "ai:p:territory" +msgstr "Territorial Style" + +msgid "aihelp:p:territory" +msgstr "" +"Вибирає ходи, що перевищують 'threshold', і робить найкращий. Збільште " +"'line_weight', щоб більше штрафувати ходи біля центру. Стратегія припиняється " +"після того, як буде заповнено частину дошки, визначену параметром 'endgame'." + +msgid "ai:p:rank" +msgstr "Калібрований ранг" + +msgid "aihelp:p:rank" +msgstr "" +"Випадковим чином обирає обмежену кількість легальних ходів і робить " +"найкращий з них. Сильніші налаштування вибирають найкращий хід з більшої " +"кількості варіантів. Оскільки немає 0 кю/дан, 3 дан = -2 кю." + +#. in AI settings +msgid "estimated strength" +msgstr "Приблизна сила" + +#. button in general settings for downloading models +msgid "download models button" +msgstr "Завантажити моделі" + +#. button in general settings for downloading katago executables +msgid "download katago button" +msgstr "Завантажити KataGo" + +#. shown on on the model select dropdown +msgid "models available" +msgstr "Знайдено {num} доступних моделей" + +#. shown on on the katago binary select dropdown +msgid "default katago option" +msgstr "Визначити платформу та використати наданий файл KataGo з OpenCL" + +#. shown on on the binaries select dropdown +msgid "katago binaries available" +msgstr "Знайдено {num} доступних версій KataGo" + +#. error message on trying to download models when already done +msgid "All models downloaded" +msgstr "Всі доступні моделі вже завантажено" + +#. error message on trying to download katago when already done +msgid "All binaries downloaded" +msgstr "Всі доступні виконувані файли вже завантажено" + +#. label in little popup for analyzing entire game +msgid "reanalyze max visits" +msgstr "Кількість визитів на хід" + +#. label in little popup for analyzing entire game +msgid "reanalyze mistakes only" +msgstr "Обмежити аналіз лише помилками" + +#. on move tree editing +msgid "Delete Node" +msgstr "Видалити вузол" + +#. on move tree editing +msgid "Toggle Collapse Branch" +msgstr "Розгорнути/Згорнути" + +#. on move tree editing +msgid "Make Main Branch" +msgstr "Встановити як основну гілку" + +#. on move tree editing, deletes all other branches splitting off from the +#. path UP TO this node +msgid "Prune Branch" +msgstr "Видалити гілку" + +#. theme label +msgid "theme" +msgstr "Тема оформлення" + +#. theme name +msgid "theme:normal" +msgstr "Стандартна тема" + +#. theme name +msgid "theme:red-green-colourblind" +msgstr "Червоний-зелений для дальтоніків" + +#. setting: what to show on top move (e.g. point loss, visits, ...) +msgid "stats on top move" +msgstr "Відображати інфо поверх каменів" + +#. Dropdown menu option +msgid "top_move_delta_score" +msgstr "Зміна рахунку" + +#. Dropdown menu option +msgid "top_move_score" +msgstr "Рахунок" + +#. Dropdown menu option +msgid "top_move_delta_winrate" +msgstr "Зміна шансу" + +#. Dropdown menu option +msgid "top_move_winrate" +msgstr "Шанс на перемогу" + +#. Dropdown menu option +msgid "top_move_visits" +msgstr "Візити" + +#. Dropdown menu option +msgid "top_move_nothing" +msgstr "(порожній)" + +#. top move stats show threshold description +msgid "show stats if" +msgstr "Відображати інфо якщо більше ніж ... візитів" + +#. status message on starting insert mode +msgid "starting insert mode" +msgstr "Запуск режиму вставки, натисніть 'i', щоб завершити вставку." + +#. status message on ending insert mode and copying the moves +msgid "ending insert mode" +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', щоб завершити " +"режим вставки." + +#. menu item +msgid "menu:distributed" +msgstr "Розподілене тренування" + +#. in self-play mode +msgid "gui-locked" +msgstr "" +"Дія {action} недоступна в режимі розподіленого тренування з самостійною " +"грою. Перезапустіть KaTrain для виходу з цього режиму." + +#. Progress message +msgid "setup game status message" +msgstr "Генерація гри через самостійну гру AI: хід {move}/{until_move}." + +#. Popup for generating position: top explanation +msgid "setup position explanation" +msgstr "" +"Генерує незавершену гру, яку ви можете продовжити грати. Наприклад, ви " +"можете використовувати це для гри проти сильніших AI, починаючи з переваги " +"в різноманітних середніх або кінцевих позиціях гри." + +#. Description for black target score +msgid "setup position black score" +msgstr "Цільовий рахунок для чорних:" + +#. Description for how many moves +msgid "setup position move number" +msgstr "Генерувати гру до ходу:" + +#. distance of wall to existing stones +msgid "tsumego:walldistance" +msgstr "Дістанція до стінки" + +#. tsumego: ko is good enough? +msgid "tsumego:ko" +msgstr "Дозволити ко?" diff --git a/katrain/img/flags/flag-ua.png b/katrain/img/flags/flag-ua.png new file mode 100644 index 0000000000000000000000000000000000000000..72ad8fcb8d21ce1bd34e7cce7c9a0552ee7d003e GIT binary patch literal 14658 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