fix(updates): предотвратить повторные модальные окна и добавить активную проверку готовности сервисов роутера перед перезагрузкой страницы
This commit is contained in:
@@ -507,7 +507,7 @@
|
|||||||
"call": "Another component action is already running",
|
"call": "Another component action is already running",
|
||||||
"key": "Another component action is already running",
|
"key": "Another component action is already running",
|
||||||
"places": [
|
"places": [
|
||||||
"src/tachyon/tabs/updates/initController.ts:844"
|
"src/tachyon/tabs/updates/initController.ts:861"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1003,7 +1003,7 @@
|
|||||||
"call": "Check update",
|
"call": "Check update",
|
||||||
"key": "Check update",
|
"key": "Check update",
|
||||||
"places": [
|
"places": [
|
||||||
"src/tachyon/tabs/updates/initController.ts:913"
|
"src/tachyon/tabs/updates/initController.ts:930"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1081,17 +1081,17 @@
|
|||||||
"call": "Checks failed",
|
"call": "Checks failed",
|
||||||
"key": "Checks failed",
|
"key": "Checks failed",
|
||||||
"places": [
|
"places": [
|
||||||
"src/tachyon/tabs/diagnostic/helpers/getMeta.ts:26",
|
"src/tachyon/tabs/diagnostic/checks/getCheckItemsMeta.ts:10",
|
||||||
"src/tachyon/tabs/diagnostic/checks/getCheckItemsMeta.ts:10"
|
"src/tachyon/tabs/diagnostic/helpers/getMeta.ts:26"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"call": "Checks passed",
|
"call": "Checks passed",
|
||||||
"key": "Checks passed",
|
"key": "Checks passed",
|
||||||
"places": [
|
"places": [
|
||||||
"src/tachyon/tabs/diagnostic/helpers/getMeta.ts:13",
|
|
||||||
"src/tachyon/tabs/diagnostic/checks/getCheckItemsMeta.ts:23",
|
"src/tachyon/tabs/diagnostic/checks/getCheckItemsMeta.ts:23",
|
||||||
"src/tachyon/tabs/diagnostic/checks/runFakeIPCheck.ts:43"
|
"src/tachyon/tabs/diagnostic/checks/runFakeIPCheck.ts:43",
|
||||||
|
"src/tachyon/tabs/diagnostic/helpers/getMeta.ts:13"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1183,8 +1183,8 @@
|
|||||||
"src/tachyon/tabs/monitoring/initController.ts:884",
|
"src/tachyon/tabs/monitoring/initController.ts:884",
|
||||||
"src/tachyon/tabs/monitoring/initController.ts:934",
|
"src/tachyon/tabs/monitoring/initController.ts:934",
|
||||||
"src/tachyon/tabs/diagnostic/partials/renderAiChatModal.ts:212",
|
"src/tachyon/tabs/diagnostic/partials/renderAiChatModal.ts:212",
|
||||||
"src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:374",
|
"src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:406",
|
||||||
"src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:419"
|
"src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:451"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -2602,7 +2602,7 @@
|
|||||||
"src/tachyon/tabs/updates/initController.ts:619",
|
"src/tachyon/tabs/updates/initController.ts:619",
|
||||||
"src/tachyon/tabs/updates/initController.ts:620",
|
"src/tachyon/tabs/updates/initController.ts:620",
|
||||||
"src/tachyon/tabs/updates/initController.ts:695",
|
"src/tachyon/tabs/updates/initController.ts:695",
|
||||||
"src/tachyon/tabs/updates/initController.ts:891"
|
"src/tachyon/tabs/updates/initController.ts:908"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -3422,22 +3422,22 @@
|
|||||||
"call": "Install",
|
"call": "Install",
|
||||||
"key": "Install",
|
"key": "Install",
|
||||||
"places": [
|
"places": [
|
||||||
"src/tachyon/tabs/updates/initController.ts:927",
|
"src/tachyon/tabs/updates/initController.ts:944",
|
||||||
"src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:363"
|
"src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:395"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"call": "Install another build:",
|
"call": "Install another build:",
|
||||||
"key": "Install another build:",
|
"key": "Install another build:",
|
||||||
"places": [
|
"places": [
|
||||||
"src/tachyon/tabs/updates/initController.ts:1421"
|
"src/tachyon/tabs/updates/initController.ts:1438"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"call": "Installed build → Available build",
|
"call": "Installed build → Available build",
|
||||||
"key": "Installed build → Available build",
|
"key": "Installed build → Available build",
|
||||||
"places": [
|
"places": [
|
||||||
"src/tachyon/tabs/updates/initController.ts:1279"
|
"src/tachyon/tabs/updates/initController.ts:1296"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -3445,7 +3445,7 @@
|
|||||||
"key": "Installed version is newer than release",
|
"key": "Installed version is newer than release",
|
||||||
"places": [
|
"places": [
|
||||||
"src/tachyon/tabs/updates/initController.ts:341",
|
"src/tachyon/tabs/updates/initController.ts:341",
|
||||||
"src/tachyon/tabs/updates/initController.ts:1287"
|
"src/tachyon/tabs/updates/initController.ts:1304"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -4029,8 +4029,8 @@
|
|||||||
"call": "Issues detected",
|
"call": "Issues detected",
|
||||||
"key": "Issues detected",
|
"key": "Issues detected",
|
||||||
"places": [
|
"places": [
|
||||||
"src/tachyon/tabs/diagnostic/helpers/getMeta.ts:20",
|
"src/tachyon/tabs/diagnostic/checks/getCheckItemsMeta.ts:17",
|
||||||
"src/tachyon/tabs/diagnostic/checks/getCheckItemsMeta.ts:17"
|
"src/tachyon/tabs/diagnostic/helpers/getMeta.ts:20"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -4190,14 +4190,14 @@
|
|||||||
"key": "Latest version is installed",
|
"key": "Latest version is installed",
|
||||||
"places": [
|
"places": [
|
||||||
"src/tachyon/tabs/updates/initController.ts:344",
|
"src/tachyon/tabs/updates/initController.ts:344",
|
||||||
"src/tachyon/tabs/updates/initController.ts:1285"
|
"src/tachyon/tabs/updates/initController.ts:1302"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"call": "Latest version:",
|
"call": "Latest version:",
|
||||||
"key": "Latest version:",
|
"key": "Latest version:",
|
||||||
"places": [
|
"places": [
|
||||||
"src/tachyon/tabs/updates/initController.ts:1287"
|
"src/tachyon/tabs/updates/initController.ts:1304"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -4305,11 +4305,11 @@
|
|||||||
"call": "Loading...",
|
"call": "Loading...",
|
||||||
"key": "Loading...",
|
"key": "Loading...",
|
||||||
"places": [
|
"places": [
|
||||||
"src/tachyon/tabs/updates/initController.ts:1129",
|
"src/tachyon/tabs/updates/initController.ts:1146",
|
||||||
"src/tachyon/tabs/updates/initController.ts:1144",
|
"src/tachyon/tabs/updates/initController.ts:1161",
|
||||||
"src/tachyon/tabs/updates/initController.ts:1162",
|
"src/tachyon/tabs/updates/initController.ts:1179",
|
||||||
"src/tachyon/tabs/updates/initController.ts:1176",
|
"src/tachyon/tabs/updates/initController.ts:1193",
|
||||||
"src/tachyon/tabs/updates/initController.ts:1190"
|
"src/tachyon/tabs/updates/initController.ts:1207"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -4852,9 +4852,9 @@
|
|||||||
"places": [
|
"places": [
|
||||||
"src/tachyon/helpers/singBoxVariant.ts:38",
|
"src/tachyon/helpers/singBoxVariant.ts:38",
|
||||||
"src/tachyon/helpers/singBoxVariant.ts:46",
|
"src/tachyon/helpers/singBoxVariant.ts:46",
|
||||||
"src/tachyon/tabs/updates/initController.ts:1165",
|
"src/tachyon/tabs/updates/initController.ts:1182",
|
||||||
"src/tachyon/tabs/updates/initController.ts:1179",
|
"src/tachyon/tabs/updates/initController.ts:1196",
|
||||||
"src/tachyon/tabs/updates/initController.ts:1193"
|
"src/tachyon/tabs/updates/initController.ts:1210"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -5039,8 +5039,8 @@
|
|||||||
"call": "Open",
|
"call": "Open",
|
||||||
"key": "Open",
|
"key": "Open",
|
||||||
"places": [
|
"places": [
|
||||||
"src/tachyon/tabs/updates/initController.ts:1261",
|
"src/tachyon/tabs/updates/initController.ts:1278",
|
||||||
"src/tachyon/tabs/updates/initController.ts:1300"
|
"src/tachyon/tabs/updates/initController.ts:1317"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -5068,7 +5068,7 @@
|
|||||||
"call": "Operation failed",
|
"call": "Operation failed",
|
||||||
"key": "Operation failed",
|
"key": "Operation failed",
|
||||||
"places": [
|
"places": [
|
||||||
"src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:414"
|
"src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:446"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -5662,7 +5662,7 @@
|
|||||||
"call": "Rebuilt release",
|
"call": "Rebuilt release",
|
||||||
"key": "Rebuilt release",
|
"key": "Rebuilt release",
|
||||||
"places": [
|
"places": [
|
||||||
"src/tachyon/tabs/updates/initController.ts:1281"
|
"src/tachyon/tabs/updates/initController.ts:1298"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -5739,14 +5739,21 @@
|
|||||||
"call": "Reinstall",
|
"call": "Reinstall",
|
||||||
"key": "Reinstall",
|
"key": "Reinstall",
|
||||||
"places": [
|
"places": [
|
||||||
"src/tachyon/tabs/updates/initController.ts:1041"
|
"src/tachyon/tabs/updates/initController.ts:1058"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"call": "Reloading page in",
|
"call": "Reload now",
|
||||||
"key": "Reloading page in",
|
"key": "Reload now",
|
||||||
"places": [
|
"places": [
|
||||||
"src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:329"
|
"src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:342"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"call": "Reloading...",
|
||||||
|
"key": "Reloading...",
|
||||||
|
"places": [
|
||||||
|
"src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:371"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -5768,7 +5775,7 @@
|
|||||||
"key": "Remove",
|
"key": "Remove",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7927",
|
"../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7927",
|
||||||
"src/tachyon/tabs/updates/initController.ts:997"
|
"src/tachyon/tabs/updates/initController.ts:1014"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -6642,6 +6649,13 @@
|
|||||||
"../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:819"
|
"../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:819"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"call": "Services are online and ready! Reloading page...",
|
||||||
|
"key": "Services are online and ready! Reloading page...",
|
||||||
|
"places": [
|
||||||
|
"src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:370"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"call": "Services info",
|
"call": "Services info",
|
||||||
"key": "Services info",
|
"key": "Services info",
|
||||||
@@ -6649,6 +6663,13 @@
|
|||||||
"src/tachyon/tabs/dashboard/initController.ts:1871"
|
"src/tachyon/tabs/dashboard/initController.ts:1871"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"call": "Services restarted. Click to reload page.",
|
||||||
|
"key": "Services restarted. Click to reload page.",
|
||||||
|
"places": [
|
||||||
|
"src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:384"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"call": "Settings",
|
"call": "Settings",
|
||||||
"key": "Settings",
|
"key": "Settings",
|
||||||
@@ -7713,7 +7734,7 @@
|
|||||||
"call": "Transient connection error",
|
"call": "Transient connection error",
|
||||||
"key": "Transient connection error",
|
"key": "Transient connection error",
|
||||||
"places": [
|
"places": [
|
||||||
"src/tachyon/tabs/updates/initController.ts:860"
|
"src/tachyon/tabs/updates/initController.ts:877"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -7991,7 +8012,7 @@
|
|||||||
"call": "Update",
|
"call": "Update",
|
||||||
"key": "Update",
|
"key": "Update",
|
||||||
"places": [
|
"places": [
|
||||||
"src/tachyon/tabs/updates/initController.ts:927"
|
"src/tachyon/tabs/updates/initController.ts:944"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -8005,14 +8026,14 @@
|
|||||||
"call": "Update is available for current release",
|
"call": "Update is available for current release",
|
||||||
"key": "Update is available for current release",
|
"key": "Update is available for current release",
|
||||||
"places": [
|
"places": [
|
||||||
"src/tachyon/tabs/updates/initController.ts:1268"
|
"src/tachyon/tabs/updates/initController.ts:1285"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"call": "Update is available:",
|
"call": "Update is available:",
|
||||||
"key": "Update is available:",
|
"key": "Update is available:",
|
||||||
"places": [
|
"places": [
|
||||||
"src/tachyon/tabs/updates/initController.ts:1247"
|
"src/tachyon/tabs/updates/initController.ts:1264"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -8275,6 +8296,13 @@
|
|||||||
"../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10286"
|
"../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10286"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"call": "Verifying router and service readiness...",
|
||||||
|
"key": "Verifying router and service readiness...",
|
||||||
|
"places": [
|
||||||
|
"src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:365"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"call": "Via country.is",
|
"call": "Via country.is",
|
||||||
"key": "Via country.is",
|
"key": "Via country.is",
|
||||||
@@ -8304,6 +8332,13 @@
|
|||||||
"../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8755"
|
"../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8755"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"call": "Waiting for router services to restart...",
|
||||||
|
"key": "Waiting for router services to restart...",
|
||||||
|
"places": [
|
||||||
|
"src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:337"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"call": "WAN",
|
"call": "WAN",
|
||||||
"key": "WAN",
|
"key": "WAN",
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: TACHYON\n"
|
"Project-Id-Version: TACHYON\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-08-16 17:35+0300\n"
|
"POT-Creation-Date: 2026-08-17 07:26+0300\n"
|
||||||
"PO-Revision-Date: 2026-08-16 17:35+0300\n"
|
"PO-Revision-Date: 2026-08-17 07:26+0300\n"
|
||||||
"Last-Translator: Dushnilin <dushnilin@gmail.com>\n"
|
"Last-Translator: Dushnilin <dushnilin@gmail.com>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
"Language: \n"
|
"Language: \n"
|
||||||
@@ -316,7 +316,7 @@ msgstr ""
|
|||||||
msgid "Anonymized support report copied to clipboard"
|
msgid "Anonymized support report copied to clipboard"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/updates/initController.ts:844
|
#: src/tachyon/tabs/updates/initController.ts:861
|
||||||
msgid "Another component action is already running"
|
msgid "Another component action is already running"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -611,7 +611,7 @@ msgstr ""
|
|||||||
msgid "Check timeout after which the server is considered dead"
|
msgid "Check timeout after which the server is considered dead"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/updates/initController.ts:913
|
#: src/tachyon/tabs/updates/initController.ts:930
|
||||||
msgid "Check update"
|
msgid "Check update"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -662,14 +662,14 @@ msgstr ""
|
|||||||
msgid "checks"
|
msgid "checks"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/diagnostic/helpers/getMeta.ts:26
|
|
||||||
#: src/tachyon/tabs/diagnostic/checks/getCheckItemsMeta.ts:10
|
#: src/tachyon/tabs/diagnostic/checks/getCheckItemsMeta.ts:10
|
||||||
|
#: src/tachyon/tabs/diagnostic/helpers/getMeta.ts:26
|
||||||
msgid "Checks failed"
|
msgid "Checks failed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/diagnostic/helpers/getMeta.ts:13
|
|
||||||
#: src/tachyon/tabs/diagnostic/checks/getCheckItemsMeta.ts:23
|
#: src/tachyon/tabs/diagnostic/checks/getCheckItemsMeta.ts:23
|
||||||
#: src/tachyon/tabs/diagnostic/checks/runFakeIPCheck.ts:43
|
#: src/tachyon/tabs/diagnostic/checks/runFakeIPCheck.ts:43
|
||||||
|
#: src/tachyon/tabs/diagnostic/helpers/getMeta.ts:13
|
||||||
msgid "Checks passed"
|
msgid "Checks passed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -725,8 +725,8 @@ msgstr ""
|
|||||||
#: src/tachyon/tabs/monitoring/initController.ts:884
|
#: src/tachyon/tabs/monitoring/initController.ts:884
|
||||||
#: src/tachyon/tabs/monitoring/initController.ts:934
|
#: src/tachyon/tabs/monitoring/initController.ts:934
|
||||||
#: src/tachyon/tabs/diagnostic/partials/renderAiChatModal.ts:212
|
#: src/tachyon/tabs/diagnostic/partials/renderAiChatModal.ts:212
|
||||||
#: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:374
|
#: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:406
|
||||||
#: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:419
|
#: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:451
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1562,7 +1562,7 @@ msgstr ""
|
|||||||
#: src/tachyon/tabs/updates/initController.ts:619
|
#: src/tachyon/tabs/updates/initController.ts:619
|
||||||
#: src/tachyon/tabs/updates/initController.ts:620
|
#: src/tachyon/tabs/updates/initController.ts:620
|
||||||
#: src/tachyon/tabs/updates/initController.ts:695
|
#: src/tachyon/tabs/updates/initController.ts:695
|
||||||
#: src/tachyon/tabs/updates/initController.ts:891
|
#: src/tachyon/tabs/updates/initController.ts:908
|
||||||
msgid "Failed to execute"
|
msgid "Failed to execute"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -2043,21 +2043,21 @@ msgstr ""
|
|||||||
msgid "Init Packet Payload (I5)"
|
msgid "Init Packet Payload (I5)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/updates/initController.ts:927
|
#: src/tachyon/tabs/updates/initController.ts:944
|
||||||
#: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:363
|
#: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:395
|
||||||
msgid "Install"
|
msgid "Install"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/updates/initController.ts:1421
|
#: src/tachyon/tabs/updates/initController.ts:1438
|
||||||
msgid "Install another build:"
|
msgid "Install another build:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/updates/initController.ts:1279
|
#: src/tachyon/tabs/updates/initController.ts:1296
|
||||||
msgid "Installed build → Available build"
|
msgid "Installed build → Available build"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/updates/initController.ts:341
|
#: src/tachyon/tabs/updates/initController.ts:341
|
||||||
#: src/tachyon/tabs/updates/initController.ts:1287
|
#: src/tachyon/tabs/updates/initController.ts:1304
|
||||||
msgid "Installed version is newer than release"
|
msgid "Installed version is newer than release"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -2395,8 +2395,8 @@ msgstr ""
|
|||||||
msgid "Issues"
|
msgid "Issues"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/diagnostic/helpers/getMeta.ts:20
|
|
||||||
#: src/tachyon/tabs/diagnostic/checks/getCheckItemsMeta.ts:17
|
#: src/tachyon/tabs/diagnostic/checks/getCheckItemsMeta.ts:17
|
||||||
|
#: src/tachyon/tabs/diagnostic/helpers/getMeta.ts:20
|
||||||
msgid "Issues detected"
|
msgid "Issues detected"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -2490,11 +2490,11 @@ msgid "Latency test URL"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/updates/initController.ts:344
|
#: src/tachyon/tabs/updates/initController.ts:344
|
||||||
#: src/tachyon/tabs/updates/initController.ts:1285
|
#: src/tachyon/tabs/updates/initController.ts:1302
|
||||||
msgid "Latest version is installed"
|
msgid "Latest version is installed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/updates/initController.ts:1287
|
#: src/tachyon/tabs/updates/initController.ts:1304
|
||||||
msgid "Latest version:"
|
msgid "Latest version:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -2557,11 +2557,11 @@ msgstr ""
|
|||||||
msgid "Loading connections"
|
msgid "Loading connections"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/updates/initController.ts:1129
|
#: src/tachyon/tabs/updates/initController.ts:1146
|
||||||
#: src/tachyon/tabs/updates/initController.ts:1144
|
#: src/tachyon/tabs/updates/initController.ts:1161
|
||||||
#: src/tachyon/tabs/updates/initController.ts:1162
|
#: src/tachyon/tabs/updates/initController.ts:1179
|
||||||
#: src/tachyon/tabs/updates/initController.ts:1176
|
#: src/tachyon/tabs/updates/initController.ts:1193
|
||||||
#: src/tachyon/tabs/updates/initController.ts:1190
|
#: src/tachyon/tabs/updates/initController.ts:1207
|
||||||
msgid "Loading..."
|
msgid "Loading..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -2879,9 +2879,9 @@ msgstr ""
|
|||||||
|
|
||||||
#: src/tachyon/helpers/singBoxVariant.ts:38
|
#: src/tachyon/helpers/singBoxVariant.ts:38
|
||||||
#: src/tachyon/helpers/singBoxVariant.ts:46
|
#: src/tachyon/helpers/singBoxVariant.ts:46
|
||||||
#: src/tachyon/tabs/updates/initController.ts:1165
|
#: src/tachyon/tabs/updates/initController.ts:1182
|
||||||
#: src/tachyon/tabs/updates/initController.ts:1179
|
#: src/tachyon/tabs/updates/initController.ts:1196
|
||||||
#: src/tachyon/tabs/updates/initController.ts:1193
|
#: src/tachyon/tabs/updates/initController.ts:1210
|
||||||
msgid "Not installed"
|
msgid "Not installed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -2991,8 +2991,8 @@ msgstr ""
|
|||||||
msgid "Only the specified servers."
|
msgid "Only the specified servers."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/updates/initController.ts:1261
|
#: src/tachyon/tabs/updates/initController.ts:1278
|
||||||
#: src/tachyon/tabs/updates/initController.ts:1300
|
#: src/tachyon/tabs/updates/initController.ts:1317
|
||||||
msgid "Open"
|
msgid "Open"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -3008,7 +3008,7 @@ msgstr ""
|
|||||||
msgid "Operation completed successfully!"
|
msgid "Operation completed successfully!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:414
|
#: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:446
|
||||||
msgid "Operation failed"
|
msgid "Operation failed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -3356,7 +3356,7 @@ msgstr ""
|
|||||||
msgid "Rebuild firewall rules"
|
msgid "Rebuild firewall rules"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/updates/initController.ts:1281
|
#: src/tachyon/tabs/updates/initController.ts:1298
|
||||||
msgid "Rebuilt release"
|
msgid "Rebuilt release"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -3400,12 +3400,16 @@ msgstr ""
|
|||||||
msgid "Regular expression must not contain spaces or commas"
|
msgid "Regular expression must not contain spaces or commas"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/updates/initController.ts:1041
|
#: src/tachyon/tabs/updates/initController.ts:1058
|
||||||
msgid "Reinstall"
|
msgid "Reinstall"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:329
|
#: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:342
|
||||||
msgid "Reloading page in"
|
msgid "Reload now"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:371
|
||||||
|
msgid "Reloading..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7847
|
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7847
|
||||||
@@ -3417,7 +3421,7 @@ msgid "Removal completed successfully!"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7927
|
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7927
|
||||||
#: src/tachyon/tabs/updates/initController.ts:997
|
#: src/tachyon/tabs/updates/initController.ts:1014
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -3935,10 +3939,18 @@ msgstr ""
|
|||||||
msgid "Services & Access"
|
msgid "Services & Access"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:370
|
||||||
|
msgid "Services are online and ready! Reloading page..."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/dashboard/initController.ts:1871
|
#: src/tachyon/tabs/dashboard/initController.ts:1871
|
||||||
msgid "Services info"
|
msgid "Services info"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:384
|
||||||
|
msgid "Services restarted. Click to reload page."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1152
|
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1152
|
||||||
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7232
|
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7232
|
||||||
msgid "Settings"
|
msgid "Settings"
|
||||||
@@ -4555,7 +4567,7 @@ msgstr ""
|
|||||||
msgid "Traffic will go through the default route (Direct/Default)."
|
msgid "Traffic will go through the default route (Direct/Default)."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/updates/initController.ts:860
|
#: src/tachyon/tabs/updates/initController.ts:877
|
||||||
msgid "Transient connection error"
|
msgid "Transient connection error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -4725,7 +4737,7 @@ msgstr ""
|
|||||||
msgid "Up to 10 snapshots are kept; the oldest ones are removed automatically."
|
msgid "Up to 10 snapshots are kept; the oldest ones are removed automatically."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/updates/initController.ts:927
|
#: src/tachyon/tabs/updates/initController.ts:944
|
||||||
msgid "Update"
|
msgid "Update"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -4733,11 +4745,11 @@ msgstr ""
|
|||||||
msgid "Update is available"
|
msgid "Update is available"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/updates/initController.ts:1268
|
#: src/tachyon/tabs/updates/initController.ts:1285
|
||||||
msgid "Update is available for current release"
|
msgid "Update is available for current release"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/updates/initController.ts:1247
|
#: src/tachyon/tabs/updates/initController.ts:1264
|
||||||
msgid "Update is available:"
|
msgid "Update is available:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -4905,6 +4917,10 @@ msgstr ""
|
|||||||
msgid "Value must not contain control characters"
|
msgid "Value must not contain control characters"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:365
|
||||||
|
msgid "Verifying router and service readiness..."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1986
|
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1986
|
||||||
msgid "Via country.is"
|
msgid "Via country.is"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -4922,6 +4938,10 @@ msgstr ""
|
|||||||
msgid "vless://, vmess://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links"
|
msgid "vless://, vmess://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:337
|
||||||
|
msgid "Waiting for router services to restart..."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/diagnostic/checks/runInboundsCheck.ts:70
|
#: src/tachyon/tabs/diagnostic/checks/runInboundsCheck.ts:70
|
||||||
msgid "WAN"
|
msgid "WAN"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: TACHYON\n"
|
"Project-Id-Version: TACHYON\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-08-16 20:35+0300\n"
|
"POT-Creation-Date: 2026-08-17 10:26+0300\n"
|
||||||
"PO-Revision-Date: 2026-08-16 20:35+0300\n"
|
"PO-Revision-Date: 2026-08-17 10:26+0300\n"
|
||||||
"Last-Translator: Dushnilin\n"
|
"Last-Translator: Dushnilin\n"
|
||||||
"Language-Team: none\n"
|
"Language-Team: none\n"
|
||||||
"Language: ru\n"
|
"Language: ru\n"
|
||||||
@@ -2372,8 +2372,11 @@ msgstr "Регулярное выражение не должно содержа
|
|||||||
msgid "Reinstall"
|
msgid "Reinstall"
|
||||||
msgstr "Переустановить"
|
msgstr "Переустановить"
|
||||||
|
|
||||||
msgid "Reloading page in"
|
msgid "Reload now"
|
||||||
msgstr "Перезагрузка страницы через"
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Reloading..."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Remote Hosts Lists"
|
msgid "Remote Hosts Lists"
|
||||||
msgstr "Удалённые списки Hosts"
|
msgstr "Удалённые списки Hosts"
|
||||||
@@ -2741,9 +2744,15 @@ msgstr "Список сервисов"
|
|||||||
msgid "Services & Access"
|
msgid "Services & Access"
|
||||||
msgstr "Сервисы и доступ"
|
msgstr "Сервисы и доступ"
|
||||||
|
|
||||||
|
msgid "Services are online and ready! Reloading page..."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Services info"
|
msgid "Services info"
|
||||||
msgstr "Информация о сервисах"
|
msgstr "Информация о сервисах"
|
||||||
|
|
||||||
|
msgid "Services restarted. Click to reload page."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Settings"
|
msgid "Settings"
|
||||||
msgstr "Настройки"
|
msgstr "Настройки"
|
||||||
|
|
||||||
@@ -3404,6 +3413,9 @@ msgstr "Значение не может быть пустым"
|
|||||||
msgid "Value must not contain control characters"
|
msgid "Value must not contain control characters"
|
||||||
msgstr "Значение не должно содержать символы управления"
|
msgstr "Значение не должно содержать символы управления"
|
||||||
|
|
||||||
|
msgid "Verifying router and service readiness..."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Via country.is"
|
msgid "Via country.is"
|
||||||
msgstr "Через country.is"
|
msgstr "Через country.is"
|
||||||
|
|
||||||
@@ -3416,6 +3428,9 @@ msgstr "Видимое имя этой секции"
|
|||||||
msgid "vless://, vmess://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links"
|
msgid "vless://, vmess://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links"
|
||||||
msgstr "Ссылки vless://, vmess://, ss://, trojan://, socks4/5://, hy2/hysteria2://"
|
msgstr "Ссылки vless://, vmess://, ss://, trojan://, socks4/5://, hy2/hysteria2://"
|
||||||
|
|
||||||
|
msgid "Waiting for router services to restart..."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "WAN"
|
msgid "WAN"
|
||||||
msgstr "WAN"
|
msgstr "WAN"
|
||||||
|
|
||||||
@@ -3509,6 +3524,9 @@ msgstr "sing-box outbound для Zapret2 настроен"
|
|||||||
msgid "Zapret2 sing-box outbound is not configured"
|
msgid "Zapret2 sing-box outbound is not configured"
|
||||||
msgstr "sing-box outbound для Zapret2 не настроен"
|
msgstr "sing-box outbound для Zapret2 не настроен"
|
||||||
|
|
||||||
|
msgid "Reloading page in"
|
||||||
|
msgstr "Перезагрузка страницы через"
|
||||||
|
|
||||||
msgid "Level"
|
msgid "Level"
|
||||||
msgstr "Уровень"
|
msgstr "Уровень"
|
||||||
|
|
||||||
|
|||||||
@@ -691,7 +691,9 @@ async function handleChooseOutbound(
|
|||||||
const res = await TachyonShellMethods.setClashApiGroupProxy(selector, tag);
|
const res = await TachyonShellMethods.setClashApiGroupProxy(selector, tag);
|
||||||
if (res && !(res as any).success && (res as any).error) {
|
if (res && !(res as any).success && (res as any).error) {
|
||||||
showToast(
|
showToast(
|
||||||
(res as any).message || (res as any).error || _('Failed to switch proxy'),
|
(res as any).message ||
|
||||||
|
(res as any).error ||
|
||||||
|
_('Failed to switch proxy'),
|
||||||
'error',
|
'error',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -1122,59 +1124,64 @@ function renderCommonDetailsModal(
|
|||||||
],
|
],
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
: (isPriority || section.outbounds.some((o) => o.code === member.code))
|
: isPriority ||
|
||||||
? [
|
section.outbounds.some(
|
||||||
E(
|
(o) => o.code === member.code,
|
||||||
'button',
|
)
|
||||||
{
|
? [
|
||||||
type: 'button',
|
E(
|
||||||
class:
|
'button',
|
||||||
'btn cbi-button cbi-button-action tachyon_dashboard-page__urltest-details__select-btn',
|
{
|
||||||
click: async (event: MouseEvent) => {
|
type: 'button',
|
||||||
event.preventDefault();
|
class:
|
||||||
const btn = event.currentTarget as HTMLButtonElement | null;
|
'btn cbi-button cbi-button-action tachyon_dashboard-page__urltest-details__select-btn',
|
||||||
if (btn) {
|
click: async (event: MouseEvent) => {
|
||||||
btn.disabled = true;
|
event.preventDefault();
|
||||||
}
|
const btn =
|
||||||
const targetSelector = isPriority
|
event.currentTarget as HTMLButtonElement | null;
|
||||||
? (outbound?.code || section.code)
|
if (btn) {
|
||||||
: section.code;
|
btn.disabled = true;
|
||||||
await handleChooseOutbound(
|
|
||||||
section.sectionName,
|
|
||||||
targetSelector,
|
|
||||||
member.code,
|
|
||||||
);
|
|
||||||
const updatedSection = store
|
|
||||||
.get()
|
|
||||||
.sectionsWidget.data.find(
|
|
||||||
(s) =>
|
|
||||||
s.sectionName === section.sectionName,
|
|
||||||
);
|
|
||||||
const updatedOutbound =
|
|
||||||
updatedSection?.outbounds.find(
|
|
||||||
(o) => o.code === outbound?.code,
|
|
||||||
);
|
|
||||||
if (updatedSection && updatedOutbound) {
|
|
||||||
if (isPriority) {
|
|
||||||
handleShowPriorityInfo(
|
|
||||||
updatedSection,
|
|
||||||
updatedOutbound,
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
handleShowUrlTestInfo(
|
|
||||||
updatedSection,
|
|
||||||
updatedOutbound,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
} else {
|
const targetSelector = isPriority
|
||||||
ui.hideModal();
|
? outbound?.code || section.code
|
||||||
}
|
: section.code;
|
||||||
|
await handleChooseOutbound(
|
||||||
|
section.sectionName,
|
||||||
|
targetSelector,
|
||||||
|
member.code,
|
||||||
|
);
|
||||||
|
const updatedSection = store
|
||||||
|
.get()
|
||||||
|
.sectionsWidget.data.find(
|
||||||
|
(s) =>
|
||||||
|
s.sectionName ===
|
||||||
|
section.sectionName,
|
||||||
|
);
|
||||||
|
const updatedOutbound =
|
||||||
|
updatedSection?.outbounds.find(
|
||||||
|
(o) => o.code === outbound?.code,
|
||||||
|
);
|
||||||
|
if (updatedSection && updatedOutbound) {
|
||||||
|
if (isPriority) {
|
||||||
|
handleShowPriorityInfo(
|
||||||
|
updatedSection,
|
||||||
|
updatedOutbound,
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
handleShowUrlTestInfo(
|
||||||
|
updatedSection,
|
||||||
|
updatedOutbound,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ui.hideModal();
|
||||||
|
}
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
_('Select'),
|
||||||
_('Select'),
|
),
|
||||||
),
|
]
|
||||||
]
|
: []
|
||||||
: []
|
|
||||||
: []),
|
: []),
|
||||||
member.canCopyLink
|
member.canCopyLink
|
||||||
? renderUrlTestCopyButton(
|
? renderUrlTestCopyButton(
|
||||||
|
|||||||
@@ -1503,8 +1503,7 @@ async function handleRunAiDoctor() {
|
|||||||
}),
|
}),
|
||||||
renderButton({
|
renderButton({
|
||||||
classNames: ['cbi-button-reset'],
|
classNames: ['cbi-button-reset'],
|
||||||
text:
|
text: '🚨 ' + _('Restore Native Internet (Stop Tachyon)'),
|
||||||
'🚨 ' + _('Restore Native Internet (Stop Tachyon)'),
|
|
||||||
onClick: async () => {
|
onClick: async () => {
|
||||||
showToast(
|
showToast(
|
||||||
_(
|
_(
|
||||||
@@ -1512,10 +1511,9 @@ async function handleRunAiDoctor() {
|
|||||||
),
|
),
|
||||||
'success',
|
'success',
|
||||||
);
|
);
|
||||||
const fixRes =
|
const fixRes = await TachyonShellMethods.applyQuickFix(
|
||||||
await TachyonShellMethods.applyQuickFix(
|
'restore_native_internet',
|
||||||
'restore_native_internet',
|
);
|
||||||
);
|
|
||||||
if (
|
if (
|
||||||
fixRes &&
|
fixRes &&
|
||||||
typeof fixRes === 'object' &&
|
typeof fixRes === 'object' &&
|
||||||
@@ -1609,10 +1607,9 @@ function handleRestoreNativeInternet() {
|
|||||||
_('Restoring native direct internet (stopping Tachyon)...'),
|
_('Restoring native direct internet (stopping Tachyon)...'),
|
||||||
'success',
|
'success',
|
||||||
);
|
);
|
||||||
const res =
|
const res = await TachyonShellMethods.applyQuickFix(
|
||||||
await TachyonShellMethods.applyQuickFix(
|
'restore_native_internet',
|
||||||
'restore_native_internet',
|
);
|
||||||
);
|
|
||||||
if (
|
if (
|
||||||
res &&
|
res &&
|
||||||
typeof res === 'object' &&
|
typeof res === 'object' &&
|
||||||
|
|||||||
@@ -750,7 +750,21 @@ function isComponentActionAlreadyRunningError(message: string | undefined) {
|
|||||||
|
|
||||||
function handleComponentUiState(uiState: Tachyon.UiState) {
|
function handleComponentUiState(uiState: Tachyon.UiState) {
|
||||||
for (const state of uiState.actions.component || []) {
|
for (const state of uiState.actions.component || []) {
|
||||||
void followComponentActionState(state);
|
const jobId = state.job_id;
|
||||||
|
if (!jobId) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (handledComponentJobs.has(jobId) || followedComponentJobs.has(jobId)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (state.running) {
|
||||||
|
void followComponentActionState(state);
|
||||||
|
} else {
|
||||||
|
handledComponentJobs.add(jobId);
|
||||||
|
void ackComponentActionJob(jobId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -811,15 +825,18 @@ async function handleComponentAction(button: ComponentActionButton) {
|
|||||||
const currentSha = checkResult?.current_sha;
|
const currentSha = checkResult?.current_sha;
|
||||||
const targetSha = checkResult?.latest_sha;
|
const targetSha = checkResult?.latest_sha;
|
||||||
|
|
||||||
const modalController = showUpdateProgressModal({
|
let modalController = getActiveProgressModalController();
|
||||||
component: button.component,
|
if (!modalController) {
|
||||||
action: button.action,
|
modalController = showUpdateProgressModal({
|
||||||
componentTitle: cardTitle,
|
component: button.component,
|
||||||
currentVersion,
|
action: button.action,
|
||||||
targetVersion,
|
componentTitle: cardTitle,
|
||||||
currentSha,
|
currentVersion,
|
||||||
targetSha,
|
targetVersion,
|
||||||
});
|
currentSha,
|
||||||
|
targetSha,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
let jobId = '';
|
let jobId = '';
|
||||||
let ownsJobFollow = false;
|
let ownsJobFollow = false;
|
||||||
@@ -867,15 +884,15 @@ async function handleComponentAction(button: ComponentActionButton) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
jobId = startResponse.data.job_id;
|
jobId = startResponse.data.job_id;
|
||||||
setActiveProgressModalJobId(jobId);
|
if (followedComponentJobs.has(jobId) || handledComponentJobs.has(jobId)) {
|
||||||
markUiActionOwned('component', jobId);
|
|
||||||
modalController.startLogTracking(jobId);
|
|
||||||
if (followedComponentJobs.has(jobId)) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
followedComponentJobs.add(jobId);
|
followedComponentJobs.add(jobId);
|
||||||
ownsJobFollow = true;
|
ownsJobFollow = true;
|
||||||
|
setActiveProgressModalJobId(jobId);
|
||||||
|
markUiActionOwned('component', jobId);
|
||||||
|
modalController.startLogTracking(jobId);
|
||||||
|
|
||||||
const response = await TachyonShellMethods.waitComponentActionJob(
|
const response = await TachyonShellMethods.waitComponentActionJob(
|
||||||
jobId,
|
jobId,
|
||||||
|
|||||||
@@ -144,9 +144,13 @@ export function showUpdateProgressModal(
|
|||||||
timerBadgeEl,
|
timerBadgeEl,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const logPreEl = E('pre', {
|
const logPreEl = E(
|
||||||
class: 'tachyon-update-modal__log',
|
'pre',
|
||||||
}, _('Operation started. Waiting for log output...')) as HTMLPreElement;
|
{
|
||||||
|
class: 'tachyon-update-modal__log',
|
||||||
|
},
|
||||||
|
_('Operation started. Waiting for log output...'),
|
||||||
|
) as HTMLPreElement;
|
||||||
|
|
||||||
const logPanelEl = E('div', { class: 'tachyon-update-modal__log-panel' }, [
|
const logPanelEl = E('div', { class: 'tachyon-update-modal__log-panel' }, [
|
||||||
E('div', { class: 'tachyon-update-modal__log-header' }, [
|
E('div', { class: 'tachyon-update-modal__log-header' }, [
|
||||||
@@ -318,42 +322,78 @@ export function showUpdateProgressModal(
|
|||||||
? _('Removal completed successfully!')
|
? _('Removal completed successfully!')
|
||||||
: _('Operation completed successfully!'));
|
: _('Operation completed successfully!'));
|
||||||
|
|
||||||
const bannerEl = E('div', { class: 'tachyon-update-modal__success-banner' }, [
|
const bannerEl = E(
|
||||||
renderCheckIcon24(),
|
'div',
|
||||||
E('span', {}, successMsg),
|
{ class: 'tachyon-update-modal__success-banner' },
|
||||||
]);
|
[renderCheckIcon24(), E('span', {}, successMsg)],
|
||||||
|
);
|
||||||
|
|
||||||
if (opts?.reloadPage) {
|
if (opts?.reloadPage) {
|
||||||
let secondsLeft = 3;
|
let isProbing = true;
|
||||||
const reloadBtnText = () =>
|
let attempt = 0;
|
||||||
`${_('Reloading page in')} ${secondsLeft}s...`;
|
const maxAttempts = 30;
|
||||||
|
|
||||||
|
const statusEl = E(
|
||||||
|
'div',
|
||||||
|
{
|
||||||
|
class: 'tachyon-update-modal__reload-status',
|
||||||
|
style:
|
||||||
|
'margin: 10px 0; font-size: 0.95em; color: var(--cbi-color-neutral, #666);',
|
||||||
|
},
|
||||||
|
_('Waiting for router services to restart...'),
|
||||||
|
);
|
||||||
|
|
||||||
const reloadBtn = renderButton({
|
const reloadBtn = renderButton({
|
||||||
classNames: ['cbi-button-save'],
|
classNames: ['cbi-button-save'],
|
||||||
text: reloadBtnText(),
|
text: _('Reload now'),
|
||||||
onClick: () => {
|
onClick: () => {
|
||||||
|
isProbing = false;
|
||||||
window.location.reload();
|
window.location.reload();
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
actionButtonContainer.replaceChildren(
|
actionButtonContainer.replaceChildren(
|
||||||
bannerEl,
|
bannerEl,
|
||||||
E(
|
statusEl,
|
||||||
'div',
|
E('div', { class: 'tachyon-update-modal__action-buttons' }, [
|
||||||
{ class: 'tachyon-update-modal__action-buttons' },
|
reloadBtn,
|
||||||
[reloadBtn],
|
]),
|
||||||
),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
const reloadTimer = setInterval(() => {
|
const probeAndReload = async () => {
|
||||||
secondsLeft -= 1;
|
// Pause 2 seconds initially to allow init scripts and rpcd reload to commence
|
||||||
if (secondsLeft <= 0) {
|
await new Promise((resolve) => setTimeout(resolve, 2000));
|
||||||
clearInterval(reloadTimer);
|
|
||||||
window.location.reload();
|
while (isProbing && attempt < maxAttempts) {
|
||||||
} else {
|
attempt += 1;
|
||||||
reloadBtn.textContent = reloadBtnText();
|
statusEl.textContent = `${_('Verifying router and service readiness...')} (${attempt}/${maxAttempts})`;
|
||||||
|
|
||||||
|
try {
|
||||||
|
const res = await TachyonShellMethods.getSystemInfo();
|
||||||
|
if (res && res.success) {
|
||||||
|
statusEl.textContent = _(
|
||||||
|
'Services are online and ready! Reloading page...',
|
||||||
|
);
|
||||||
|
reloadBtn.textContent = _('Reloading...');
|
||||||
|
await new Promise((resolve) => setTimeout(resolve, 600));
|
||||||
|
window.location.reload();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} catch (_err) {
|
||||||
|
// RPC is unavailable while daemon/rpcd is reloading; keep probing
|
||||||
|
}
|
||||||
|
|
||||||
|
await new Promise((resolve) => setTimeout(resolve, 1500));
|
||||||
}
|
}
|
||||||
}, 1000);
|
|
||||||
|
if (isProbing) {
|
||||||
|
statusEl.textContent = _(
|
||||||
|
'Services restarted. Click to reload page.',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
void probeAndReload();
|
||||||
} else {
|
} else {
|
||||||
const actionButtons: HTMLElement[] = [];
|
const actionButtons: HTMLElement[] = [];
|
||||||
|
|
||||||
@@ -409,10 +449,11 @@ export function showUpdateProgressModal(
|
|||||||
cleanupTimers();
|
cleanupTimers();
|
||||||
finishLogTracking();
|
finishLogTracking();
|
||||||
|
|
||||||
const bannerEl = E('div', { class: 'tachyon-update-modal__error-banner' }, [
|
const bannerEl = E(
|
||||||
renderXIcon24(),
|
'div',
|
||||||
E('span', {}, errorMessage || _('Operation failed')),
|
{ class: 'tachyon-update-modal__error-banner' },
|
||||||
]);
|
[renderXIcon24(), E('span', {}, errorMessage || _('Operation failed'))],
|
||||||
|
);
|
||||||
|
|
||||||
const closeBtn = renderButton({
|
const closeBtn = renderButton({
|
||||||
classNames: ['cbi-button-remove'],
|
classNames: ['cbi-button-remove'],
|
||||||
@@ -424,11 +465,7 @@ export function showUpdateProgressModal(
|
|||||||
|
|
||||||
actionButtonContainer.replaceChildren(
|
actionButtonContainer.replaceChildren(
|
||||||
bannerEl,
|
bannerEl,
|
||||||
E(
|
E('div', { class: 'tachyon-update-modal__action-buttons' }, [closeBtn]),
|
||||||
'div',
|
|
||||||
{ class: 'tachyon-update-modal__action-buttons' },
|
|
||||||
[closeBtn],
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
startLogTracking: (jobId: string) => {
|
startLogTracking: (jobId: string) => {
|
||||||
|
|||||||
@@ -7320,7 +7320,9 @@ function renderCommonDetailsModal(info, fields, renderMemberName, isPriority, se
|
|||||||
_("Active")
|
_("Active")
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
] : isPriority || section.outbounds.some((o) => o.code === member.code) ? [
|
] : isPriority || section.outbounds.some(
|
||||||
|
(o) => o.code === member.code
|
||||||
|
) ? [
|
||||||
E(
|
E(
|
||||||
"button",
|
"button",
|
||||||
{
|
{
|
||||||
@@ -16006,9 +16008,13 @@ function showUpdateProgressModal(options) {
|
|||||||
]),
|
]),
|
||||||
timerBadgeEl
|
timerBadgeEl
|
||||||
]);
|
]);
|
||||||
const logPreEl = E("pre", {
|
const logPreEl = E(
|
||||||
class: "tachyon-update-modal__log"
|
"pre",
|
||||||
}, _("Operation started. Waiting for log output..."));
|
{
|
||||||
|
class: "tachyon-update-modal__log"
|
||||||
|
},
|
||||||
|
_("Operation started. Waiting for log output...")
|
||||||
|
);
|
||||||
const logPanelEl = E("div", { class: "tachyon-update-modal__log-panel" }, [
|
const logPanelEl = E("div", { class: "tachyon-update-modal__log-panel" }, [
|
||||||
E("div", { class: "tachyon-update-modal__log-header" }, [
|
E("div", { class: "tachyon-update-modal__log-header" }, [
|
||||||
E("b", {}, _("Operation log")),
|
E("b", {}, _("Operation log")),
|
||||||
@@ -16143,37 +16149,65 @@ function showUpdateProgressModal(options) {
|
|||||||
cleanupTimers();
|
cleanupTimers();
|
||||||
finishLogTracking();
|
finishLogTracking();
|
||||||
const successMsg = message || (isCheckAction ? _("Check completed!") : options.action === "remove" ? _("Removal completed successfully!") : _("Operation completed successfully!"));
|
const successMsg = message || (isCheckAction ? _("Check completed!") : options.action === "remove" ? _("Removal completed successfully!") : _("Operation completed successfully!"));
|
||||||
const bannerEl = E("div", { class: "tachyon-update-modal__success-banner" }, [
|
const bannerEl = E(
|
||||||
renderCheckIcon24(),
|
"div",
|
||||||
E("span", {}, successMsg)
|
{ class: "tachyon-update-modal__success-banner" },
|
||||||
]);
|
[renderCheckIcon24(), E("span", {}, successMsg)]
|
||||||
|
);
|
||||||
if (opts?.reloadPage) {
|
if (opts?.reloadPage) {
|
||||||
let secondsLeft = 3;
|
let isProbing = true;
|
||||||
const reloadBtnText = () => `${_("Reloading page in")} ${secondsLeft}s...`;
|
let attempt = 0;
|
||||||
|
const maxAttempts = 30;
|
||||||
|
const statusEl = E(
|
||||||
|
"div",
|
||||||
|
{
|
||||||
|
class: "tachyon-update-modal__reload-status",
|
||||||
|
style: "margin: 10px 0; font-size: 0.95em; color: var(--cbi-color-neutral, #666);"
|
||||||
|
},
|
||||||
|
_("Waiting for router services to restart...")
|
||||||
|
);
|
||||||
const reloadBtn = renderButton({
|
const reloadBtn = renderButton({
|
||||||
classNames: ["cbi-button-save"],
|
classNames: ["cbi-button-save"],
|
||||||
text: reloadBtnText(),
|
text: _("Reload now"),
|
||||||
onClick: () => {
|
onClick: () => {
|
||||||
|
isProbing = false;
|
||||||
window.location.reload();
|
window.location.reload();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
actionButtonContainer.replaceChildren(
|
actionButtonContainer.replaceChildren(
|
||||||
bannerEl,
|
bannerEl,
|
||||||
E(
|
statusEl,
|
||||||
"div",
|
E("div", { class: "tachyon-update-modal__action-buttons" }, [
|
||||||
{ class: "tachyon-update-modal__action-buttons" },
|
reloadBtn
|
||||||
[reloadBtn]
|
])
|
||||||
)
|
|
||||||
);
|
);
|
||||||
const reloadTimer = setInterval(() => {
|
const probeAndReload = async () => {
|
||||||
secondsLeft -= 1;
|
await new Promise((resolve) => setTimeout(resolve, 2e3));
|
||||||
if (secondsLeft <= 0) {
|
while (isProbing && attempt < maxAttempts) {
|
||||||
clearInterval(reloadTimer);
|
attempt += 1;
|
||||||
window.location.reload();
|
statusEl.textContent = `${_("Verifying router and service readiness...")} (${attempt}/${maxAttempts})`;
|
||||||
} else {
|
try {
|
||||||
reloadBtn.textContent = reloadBtnText();
|
const res = await TachyonShellMethods.getSystemInfo();
|
||||||
|
if (res && res.success) {
|
||||||
|
statusEl.textContent = _(
|
||||||
|
"Services are online and ready! Reloading page..."
|
||||||
|
);
|
||||||
|
reloadBtn.textContent = _("Reloading...");
|
||||||
|
await new Promise((resolve) => setTimeout(resolve, 600));
|
||||||
|
window.location.reload();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} catch (_err) {
|
||||||
|
}
|
||||||
|
await new Promise((resolve) => setTimeout(resolve, 1500));
|
||||||
}
|
}
|
||||||
}, 1e3);
|
if (isProbing) {
|
||||||
|
statusEl.textContent = _(
|
||||||
|
"Services restarted. Click to reload page."
|
||||||
|
);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
void probeAndReload();
|
||||||
} else {
|
} else {
|
||||||
const actionButtons = [];
|
const actionButtons = [];
|
||||||
if (opts?.onInstall) {
|
if (opts?.onInstall) {
|
||||||
@@ -16217,10 +16251,11 @@ function showUpdateProgressModal(options) {
|
|||||||
completeError: (errorMessage) => {
|
completeError: (errorMessage) => {
|
||||||
cleanupTimers();
|
cleanupTimers();
|
||||||
finishLogTracking();
|
finishLogTracking();
|
||||||
const bannerEl = E("div", { class: "tachyon-update-modal__error-banner" }, [
|
const bannerEl = E(
|
||||||
renderXIcon24(),
|
"div",
|
||||||
E("span", {}, errorMessage || _("Operation failed"))
|
{ class: "tachyon-update-modal__error-banner" },
|
||||||
]);
|
[renderXIcon24(), E("span", {}, errorMessage || _("Operation failed"))]
|
||||||
|
);
|
||||||
const closeBtn = renderButton({
|
const closeBtn = renderButton({
|
||||||
classNames: ["cbi-button-remove"],
|
classNames: ["cbi-button-remove"],
|
||||||
text: _("Close"),
|
text: _("Close"),
|
||||||
@@ -16230,11 +16265,7 @@ function showUpdateProgressModal(options) {
|
|||||||
});
|
});
|
||||||
actionButtonContainer.replaceChildren(
|
actionButtonContainer.replaceChildren(
|
||||||
bannerEl,
|
bannerEl,
|
||||||
E(
|
E("div", { class: "tachyon-update-modal__action-buttons" }, [closeBtn])
|
||||||
"div",
|
|
||||||
{ class: "tachyon-update-modal__action-buttons" },
|
|
||||||
[closeBtn]
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
startLogTracking: (jobId) => {
|
startLogTracking: (jobId) => {
|
||||||
@@ -16761,7 +16792,19 @@ function isComponentActionAlreadyRunningError(message) {
|
|||||||
}
|
}
|
||||||
function handleComponentUiState(uiState) {
|
function handleComponentUiState(uiState) {
|
||||||
for (const state of uiState.actions.component || []) {
|
for (const state of uiState.actions.component || []) {
|
||||||
void followComponentActionState(state);
|
const jobId = state.job_id;
|
||||||
|
if (!jobId) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (handledComponentJobs.has(jobId) || followedComponentJobs.has(jobId)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (state.running) {
|
||||||
|
void followComponentActionState(state);
|
||||||
|
} else {
|
||||||
|
handledComponentJobs.add(jobId);
|
||||||
|
void ackComponentActionJob(jobId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
async function refreshComponentActionState() {
|
async function refreshComponentActionState() {
|
||||||
@@ -16809,15 +16852,18 @@ async function handleComponentAction(button) {
|
|||||||
const checkResult = getVisibleCheckResult(button.component);
|
const checkResult = getVisibleCheckResult(button.component);
|
||||||
const currentSha = checkResult?.current_sha;
|
const currentSha = checkResult?.current_sha;
|
||||||
const targetSha = checkResult?.latest_sha;
|
const targetSha = checkResult?.latest_sha;
|
||||||
const modalController = showUpdateProgressModal({
|
let modalController = getActiveProgressModalController();
|
||||||
component: button.component,
|
if (!modalController) {
|
||||||
action: button.action,
|
modalController = showUpdateProgressModal({
|
||||||
componentTitle: cardTitle,
|
component: button.component,
|
||||||
currentVersion,
|
action: button.action,
|
||||||
targetVersion,
|
componentTitle: cardTitle,
|
||||||
currentSha,
|
currentVersion,
|
||||||
targetSha
|
targetVersion,
|
||||||
});
|
currentSha,
|
||||||
|
targetSha
|
||||||
|
});
|
||||||
|
}
|
||||||
let jobId = "";
|
let jobId = "";
|
||||||
let ownsJobFollow = false;
|
let ownsJobFollow = false;
|
||||||
try {
|
try {
|
||||||
@@ -16859,14 +16905,14 @@ async function handleComponentAction(button) {
|
|||||||
throw new Error(startResponse.error);
|
throw new Error(startResponse.error);
|
||||||
}
|
}
|
||||||
jobId = startResponse.data.job_id;
|
jobId = startResponse.data.job_id;
|
||||||
setActiveProgressModalJobId(jobId);
|
if (followedComponentJobs.has(jobId) || handledComponentJobs.has(jobId)) {
|
||||||
markUiActionOwned("component", jobId);
|
|
||||||
modalController.startLogTracking(jobId);
|
|
||||||
if (followedComponentJobs.has(jobId)) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
followedComponentJobs.add(jobId);
|
followedComponentJobs.add(jobId);
|
||||||
ownsJobFollow = true;
|
ownsJobFollow = true;
|
||||||
|
setActiveProgressModalJobId(jobId);
|
||||||
|
markUiActionOwned("component", jobId);
|
||||||
|
modalController.startLogTracking(jobId);
|
||||||
const response = await TachyonShellMethods.waitComponentActionJob(
|
const response = await TachyonShellMethods.waitComponentActionJob(
|
||||||
jobId,
|
jobId,
|
||||||
button.component,
|
button.component,
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: TACHYON\n"
|
"Project-Id-Version: TACHYON\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-08-16 20:35+0300\n"
|
"POT-Creation-Date: 2026-08-17 10:26+0300\n"
|
||||||
"PO-Revision-Date: 2026-08-16 20:35+0300\n"
|
"PO-Revision-Date: 2026-08-17 10:26+0300\n"
|
||||||
"Last-Translator: Dushnilin\n"
|
"Last-Translator: Dushnilin\n"
|
||||||
"Language-Team: none\n"
|
"Language-Team: none\n"
|
||||||
"Language: ru\n"
|
"Language: ru\n"
|
||||||
@@ -2372,8 +2372,11 @@ msgstr "Регулярное выражение не должно содержа
|
|||||||
msgid "Reinstall"
|
msgid "Reinstall"
|
||||||
msgstr "Переустановить"
|
msgstr "Переустановить"
|
||||||
|
|
||||||
msgid "Reloading page in"
|
msgid "Reload now"
|
||||||
msgstr "Перезагрузка страницы через"
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Reloading..."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Remote Hosts Lists"
|
msgid "Remote Hosts Lists"
|
||||||
msgstr "Удалённые списки Hosts"
|
msgstr "Удалённые списки Hosts"
|
||||||
@@ -2741,9 +2744,15 @@ msgstr "Список сервисов"
|
|||||||
msgid "Services & Access"
|
msgid "Services & Access"
|
||||||
msgstr "Сервисы и доступ"
|
msgstr "Сервисы и доступ"
|
||||||
|
|
||||||
|
msgid "Services are online and ready! Reloading page..."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Services info"
|
msgid "Services info"
|
||||||
msgstr "Информация о сервисах"
|
msgstr "Информация о сервисах"
|
||||||
|
|
||||||
|
msgid "Services restarted. Click to reload page."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Settings"
|
msgid "Settings"
|
||||||
msgstr "Настройки"
|
msgstr "Настройки"
|
||||||
|
|
||||||
@@ -3404,6 +3413,9 @@ msgstr "Значение не может быть пустым"
|
|||||||
msgid "Value must not contain control characters"
|
msgid "Value must not contain control characters"
|
||||||
msgstr "Значение не должно содержать символы управления"
|
msgstr "Значение не должно содержать символы управления"
|
||||||
|
|
||||||
|
msgid "Verifying router and service readiness..."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Via country.is"
|
msgid "Via country.is"
|
||||||
msgstr "Через country.is"
|
msgstr "Через country.is"
|
||||||
|
|
||||||
@@ -3416,6 +3428,9 @@ msgstr "Видимое имя этой секции"
|
|||||||
msgid "vless://, vmess://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links"
|
msgid "vless://, vmess://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links"
|
||||||
msgstr "Ссылки vless://, vmess://, ss://, trojan://, socks4/5://, hy2/hysteria2://"
|
msgstr "Ссылки vless://, vmess://, ss://, trojan://, socks4/5://, hy2/hysteria2://"
|
||||||
|
|
||||||
|
msgid "Waiting for router services to restart..."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "WAN"
|
msgid "WAN"
|
||||||
msgstr "WAN"
|
msgstr "WAN"
|
||||||
|
|
||||||
@@ -3509,6 +3524,9 @@ msgstr "sing-box outbound для Zapret2 настроен"
|
|||||||
msgid "Zapret2 sing-box outbound is not configured"
|
msgid "Zapret2 sing-box outbound is not configured"
|
||||||
msgstr "sing-box outbound для Zapret2 не настроен"
|
msgstr "sing-box outbound для Zapret2 не настроен"
|
||||||
|
|
||||||
|
msgid "Reloading page in"
|
||||||
|
msgstr "Перезагрузка страницы через"
|
||||||
|
|
||||||
msgid "Level"
|
msgid "Level"
|
||||||
msgstr "Уровень"
|
msgstr "Уровень"
|
||||||
|
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: TACHYON\n"
|
"Project-Id-Version: TACHYON\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-08-16 17:35+0300\n"
|
"POT-Creation-Date: 2026-08-17 07:26+0300\n"
|
||||||
"PO-Revision-Date: 2026-08-16 17:35+0300\n"
|
"PO-Revision-Date: 2026-08-17 07:26+0300\n"
|
||||||
"Last-Translator: Dushnilin <dushnilin@gmail.com>\n"
|
"Last-Translator: Dushnilin <dushnilin@gmail.com>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
"Language: \n"
|
"Language: \n"
|
||||||
@@ -316,7 +316,7 @@ msgstr ""
|
|||||||
msgid "Anonymized support report copied to clipboard"
|
msgid "Anonymized support report copied to clipboard"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/updates/initController.ts:844
|
#: src/tachyon/tabs/updates/initController.ts:861
|
||||||
msgid "Another component action is already running"
|
msgid "Another component action is already running"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -611,7 +611,7 @@ msgstr ""
|
|||||||
msgid "Check timeout after which the server is considered dead"
|
msgid "Check timeout after which the server is considered dead"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/updates/initController.ts:913
|
#: src/tachyon/tabs/updates/initController.ts:930
|
||||||
msgid "Check update"
|
msgid "Check update"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -662,14 +662,14 @@ msgstr ""
|
|||||||
msgid "checks"
|
msgid "checks"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/diagnostic/helpers/getMeta.ts:26
|
|
||||||
#: src/tachyon/tabs/diagnostic/checks/getCheckItemsMeta.ts:10
|
#: src/tachyon/tabs/diagnostic/checks/getCheckItemsMeta.ts:10
|
||||||
|
#: src/tachyon/tabs/diagnostic/helpers/getMeta.ts:26
|
||||||
msgid "Checks failed"
|
msgid "Checks failed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/diagnostic/helpers/getMeta.ts:13
|
|
||||||
#: src/tachyon/tabs/diagnostic/checks/getCheckItemsMeta.ts:23
|
#: src/tachyon/tabs/diagnostic/checks/getCheckItemsMeta.ts:23
|
||||||
#: src/tachyon/tabs/diagnostic/checks/runFakeIPCheck.ts:43
|
#: src/tachyon/tabs/diagnostic/checks/runFakeIPCheck.ts:43
|
||||||
|
#: src/tachyon/tabs/diagnostic/helpers/getMeta.ts:13
|
||||||
msgid "Checks passed"
|
msgid "Checks passed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -725,8 +725,8 @@ msgstr ""
|
|||||||
#: src/tachyon/tabs/monitoring/initController.ts:884
|
#: src/tachyon/tabs/monitoring/initController.ts:884
|
||||||
#: src/tachyon/tabs/monitoring/initController.ts:934
|
#: src/tachyon/tabs/monitoring/initController.ts:934
|
||||||
#: src/tachyon/tabs/diagnostic/partials/renderAiChatModal.ts:212
|
#: src/tachyon/tabs/diagnostic/partials/renderAiChatModal.ts:212
|
||||||
#: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:374
|
#: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:406
|
||||||
#: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:419
|
#: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:451
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1562,7 +1562,7 @@ msgstr ""
|
|||||||
#: src/tachyon/tabs/updates/initController.ts:619
|
#: src/tachyon/tabs/updates/initController.ts:619
|
||||||
#: src/tachyon/tabs/updates/initController.ts:620
|
#: src/tachyon/tabs/updates/initController.ts:620
|
||||||
#: src/tachyon/tabs/updates/initController.ts:695
|
#: src/tachyon/tabs/updates/initController.ts:695
|
||||||
#: src/tachyon/tabs/updates/initController.ts:891
|
#: src/tachyon/tabs/updates/initController.ts:908
|
||||||
msgid "Failed to execute"
|
msgid "Failed to execute"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -2043,21 +2043,21 @@ msgstr ""
|
|||||||
msgid "Init Packet Payload (I5)"
|
msgid "Init Packet Payload (I5)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/updates/initController.ts:927
|
#: src/tachyon/tabs/updates/initController.ts:944
|
||||||
#: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:363
|
#: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:395
|
||||||
msgid "Install"
|
msgid "Install"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/updates/initController.ts:1421
|
#: src/tachyon/tabs/updates/initController.ts:1438
|
||||||
msgid "Install another build:"
|
msgid "Install another build:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/updates/initController.ts:1279
|
#: src/tachyon/tabs/updates/initController.ts:1296
|
||||||
msgid "Installed build → Available build"
|
msgid "Installed build → Available build"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/updates/initController.ts:341
|
#: src/tachyon/tabs/updates/initController.ts:341
|
||||||
#: src/tachyon/tabs/updates/initController.ts:1287
|
#: src/tachyon/tabs/updates/initController.ts:1304
|
||||||
msgid "Installed version is newer than release"
|
msgid "Installed version is newer than release"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -2395,8 +2395,8 @@ msgstr ""
|
|||||||
msgid "Issues"
|
msgid "Issues"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/diagnostic/helpers/getMeta.ts:20
|
|
||||||
#: src/tachyon/tabs/diagnostic/checks/getCheckItemsMeta.ts:17
|
#: src/tachyon/tabs/diagnostic/checks/getCheckItemsMeta.ts:17
|
||||||
|
#: src/tachyon/tabs/diagnostic/helpers/getMeta.ts:20
|
||||||
msgid "Issues detected"
|
msgid "Issues detected"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -2490,11 +2490,11 @@ msgid "Latency test URL"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/updates/initController.ts:344
|
#: src/tachyon/tabs/updates/initController.ts:344
|
||||||
#: src/tachyon/tabs/updates/initController.ts:1285
|
#: src/tachyon/tabs/updates/initController.ts:1302
|
||||||
msgid "Latest version is installed"
|
msgid "Latest version is installed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/updates/initController.ts:1287
|
#: src/tachyon/tabs/updates/initController.ts:1304
|
||||||
msgid "Latest version:"
|
msgid "Latest version:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -2557,11 +2557,11 @@ msgstr ""
|
|||||||
msgid "Loading connections"
|
msgid "Loading connections"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/updates/initController.ts:1129
|
#: src/tachyon/tabs/updates/initController.ts:1146
|
||||||
#: src/tachyon/tabs/updates/initController.ts:1144
|
#: src/tachyon/tabs/updates/initController.ts:1161
|
||||||
#: src/tachyon/tabs/updates/initController.ts:1162
|
#: src/tachyon/tabs/updates/initController.ts:1179
|
||||||
#: src/tachyon/tabs/updates/initController.ts:1176
|
#: src/tachyon/tabs/updates/initController.ts:1193
|
||||||
#: src/tachyon/tabs/updates/initController.ts:1190
|
#: src/tachyon/tabs/updates/initController.ts:1207
|
||||||
msgid "Loading..."
|
msgid "Loading..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -2879,9 +2879,9 @@ msgstr ""
|
|||||||
|
|
||||||
#: src/tachyon/helpers/singBoxVariant.ts:38
|
#: src/tachyon/helpers/singBoxVariant.ts:38
|
||||||
#: src/tachyon/helpers/singBoxVariant.ts:46
|
#: src/tachyon/helpers/singBoxVariant.ts:46
|
||||||
#: src/tachyon/tabs/updates/initController.ts:1165
|
#: src/tachyon/tabs/updates/initController.ts:1182
|
||||||
#: src/tachyon/tabs/updates/initController.ts:1179
|
#: src/tachyon/tabs/updates/initController.ts:1196
|
||||||
#: src/tachyon/tabs/updates/initController.ts:1193
|
#: src/tachyon/tabs/updates/initController.ts:1210
|
||||||
msgid "Not installed"
|
msgid "Not installed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -2991,8 +2991,8 @@ msgstr ""
|
|||||||
msgid "Only the specified servers."
|
msgid "Only the specified servers."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/updates/initController.ts:1261
|
#: src/tachyon/tabs/updates/initController.ts:1278
|
||||||
#: src/tachyon/tabs/updates/initController.ts:1300
|
#: src/tachyon/tabs/updates/initController.ts:1317
|
||||||
msgid "Open"
|
msgid "Open"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -3008,7 +3008,7 @@ msgstr ""
|
|||||||
msgid "Operation completed successfully!"
|
msgid "Operation completed successfully!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:414
|
#: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:446
|
||||||
msgid "Operation failed"
|
msgid "Operation failed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -3356,7 +3356,7 @@ msgstr ""
|
|||||||
msgid "Rebuild firewall rules"
|
msgid "Rebuild firewall rules"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/updates/initController.ts:1281
|
#: src/tachyon/tabs/updates/initController.ts:1298
|
||||||
msgid "Rebuilt release"
|
msgid "Rebuilt release"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -3400,12 +3400,16 @@ msgstr ""
|
|||||||
msgid "Regular expression must not contain spaces or commas"
|
msgid "Regular expression must not contain spaces or commas"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/updates/initController.ts:1041
|
#: src/tachyon/tabs/updates/initController.ts:1058
|
||||||
msgid "Reinstall"
|
msgid "Reinstall"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:329
|
#: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:342
|
||||||
msgid "Reloading page in"
|
msgid "Reload now"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:371
|
||||||
|
msgid "Reloading..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7847
|
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7847
|
||||||
@@ -3417,7 +3421,7 @@ msgid "Removal completed successfully!"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7927
|
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7927
|
||||||
#: src/tachyon/tabs/updates/initController.ts:997
|
#: src/tachyon/tabs/updates/initController.ts:1014
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -3935,10 +3939,18 @@ msgstr ""
|
|||||||
msgid "Services & Access"
|
msgid "Services & Access"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:370
|
||||||
|
msgid "Services are online and ready! Reloading page..."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/dashboard/initController.ts:1871
|
#: src/tachyon/tabs/dashboard/initController.ts:1871
|
||||||
msgid "Services info"
|
msgid "Services info"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:384
|
||||||
|
msgid "Services restarted. Click to reload page."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1152
|
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1152
|
||||||
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7232
|
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7232
|
||||||
msgid "Settings"
|
msgid "Settings"
|
||||||
@@ -4555,7 +4567,7 @@ msgstr ""
|
|||||||
msgid "Traffic will go through the default route (Direct/Default)."
|
msgid "Traffic will go through the default route (Direct/Default)."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/updates/initController.ts:860
|
#: src/tachyon/tabs/updates/initController.ts:877
|
||||||
msgid "Transient connection error"
|
msgid "Transient connection error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -4725,7 +4737,7 @@ msgstr ""
|
|||||||
msgid "Up to 10 snapshots are kept; the oldest ones are removed automatically."
|
msgid "Up to 10 snapshots are kept; the oldest ones are removed automatically."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/updates/initController.ts:927
|
#: src/tachyon/tabs/updates/initController.ts:944
|
||||||
msgid "Update"
|
msgid "Update"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -4733,11 +4745,11 @@ msgstr ""
|
|||||||
msgid "Update is available"
|
msgid "Update is available"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/updates/initController.ts:1268
|
#: src/tachyon/tabs/updates/initController.ts:1285
|
||||||
msgid "Update is available for current release"
|
msgid "Update is available for current release"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/updates/initController.ts:1247
|
#: src/tachyon/tabs/updates/initController.ts:1264
|
||||||
msgid "Update is available:"
|
msgid "Update is available:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -4905,6 +4917,10 @@ msgstr ""
|
|||||||
msgid "Value must not contain control characters"
|
msgid "Value must not contain control characters"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:365
|
||||||
|
msgid "Verifying router and service readiness..."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1986
|
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1986
|
||||||
msgid "Via country.is"
|
msgid "Via country.is"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -4922,6 +4938,10 @@ msgstr ""
|
|||||||
msgid "vless://, vmess://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links"
|
msgid "vless://, vmess://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:337
|
||||||
|
msgid "Waiting for router services to restart..."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/tachyon/tabs/diagnostic/checks/runInboundsCheck.ts:70
|
#: src/tachyon/tabs/diagnostic/checks/runInboundsCheck.ts:70
|
||||||
msgid "WAN"
|
msgid "WAN"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|||||||
Reference in New Issue
Block a user