mirror of
https://github.com/Mahdi-zarei/nekoray.git
synced 2025-12-18 20:50:09 +08:00
improve translation template
This commit is contained in:
parent
a60a06b841
commit
218e793253
@ -89,7 +89,7 @@
|
||||
<item>
|
||||
<widget class="QCheckBox" name="strict_route">
|
||||
<property name="text">
|
||||
<string notr="true">Strict Route</string>
|
||||
<string>Strict Route</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
||||
@ -272,6 +272,10 @@ For NekoBox, this rewrites the underlying(localhost) DNS in Tun Mode, normal mod
|
||||
<source>socks</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Removed all rule-set files</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DialogEditGroup</name>
|
||||
@ -775,6 +779,42 @@ also if the connection cannot be established with the current address family (ip
|
||||
<source>Export</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invalid state</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The list of routing profiles is empty, this should be an unreachable state, crashes may occur now</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invalid settings</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Routing profile cannot be empty</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>DNS Rules are not valid</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invalid operation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Routing Profiles cannot be empty, try adding another profile or editing this one</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Profile is Read-only</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot delete built-in profiles</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DialogVPNSettings</name>
|
||||
@ -805,14 +845,6 @@ https://matsuridayo.github.io/n-configuration/#vpn-tun</source>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished">لغو کردن</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><html><head/><body><p>Enables Generic Segmentation offloading on the Tun device, Only supported on Linux</p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable GSO</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Auto Redirect</source>
|
||||
<translation type="unfinished"></translation>
|
||||
@ -1726,6 +1758,98 @@ Split by line.</source>
|
||||
<source>Open Manager</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Profile test aborted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Something is very wrong, the subject ent cannot be found!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Profile manager data is corrupted, try again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The last speed test did not exit completely, please wait. If it persists, please restart the program.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to build test config: </source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Speedtest finished!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to stop tests</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You need to enable hijack DNS server first</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to get system dns settings</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to set system dns: </source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>BuildConfig return error</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Another profile is starting...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Another profile is stopping...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Try to start the config, but the core has not listened to the grpc port, so restart it...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Stop return error</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy core config</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy test config</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot start</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Last download request has not finished yet</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to download geoip: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to download geosite: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to download geo assets</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Geo Asset update completed!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ProxyItem</name>
|
||||
@ -1936,5 +2060,48 @@ Direct: %2</source>
|
||||
<source>Advanced</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invalid rules</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Some rules could not be added:
|
||||
</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Simple rule manual</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invalid JSON Array</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The provided input cannot be parsed to a valid route rule array:
|
||||
</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invalid operation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot create Route Profile with empty name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Empty Route Profile</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>No valid rules are in the profile</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Some rules could not be added, fix them before saving:
|
||||
</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
||||
|
||||
@ -3,6 +3,26 @@
|
||||
<TS version="2.1" language="ru_RU">
|
||||
<context>
|
||||
<name>DialogBasicSettings</name>
|
||||
<message>
|
||||
<source>System</source>
|
||||
<translation type="unfinished">Системная</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Press shortcut</source>
|
||||
<translation type="unfinished">Нажмите сочетание клавиш</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Yes</source>
|
||||
<translation type="unfinished">Да</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>No</source>
|
||||
<translation type="unfinished">Нет</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Strict Route</source>
|
||||
<translation type="unfinished">Строгий маршрут</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Basic Settings</source>
|
||||
<translation>Основные настройки</translation>
|
||||
@ -281,6 +301,10 @@ For NekoBox, this rewrites the underlying(localhost) DNS in Tun Mode, normal mod
|
||||
<source>socks</source>
|
||||
<translation type="unfinished">socks</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Removed all rule-set files</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DialogEditGroup</name>
|
||||
@ -786,6 +810,42 @@ also if the connection cannot be established with the current address family (ip
|
||||
<source>Export</source>
|
||||
<translation type="unfinished">Экспорт</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invalid state</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The list of routing profiles is empty, this should be an unreachable state, crashes may occur now</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invalid settings</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Routing profile cannot be empty</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>DNS Rules are not valid</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invalid operation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Routing Profiles cannot be empty, try adding another profile or editing this one</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Profile is Read-only</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot delete built-in profiles</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DialogVPNSettings</name>
|
||||
@ -819,14 +879,6 @@ https://matsuridayo.github.io/n-configuration/#vpn-tun</translation>
|
||||
<source>Cancel</source>
|
||||
<translation>Отмена</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><html><head/><body><p>Enables Generic Segmentation offloading on the Tun device, Only supported on Linux</p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable GSO</source>
|
||||
<translation type="unfinished">Включить GSO</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Auto Redirect</source>
|
||||
<translation type="unfinished">Авто. перенаправление</translation>
|
||||
@ -1742,6 +1794,98 @@ Split by line.</source>
|
||||
<source>Open Manager</source>
|
||||
<translation type="unfinished">Открыть менеджер</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Profile test aborted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Something is very wrong, the subject ent cannot be found!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Profile manager data is corrupted, try again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The last speed test did not exit completely, please wait. If it persists, please restart the program.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to build test config: </source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Speedtest finished!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to stop tests</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You need to enable hijack DNS server first</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to get system dns settings</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to set system dns: </source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>BuildConfig return error</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Another profile is starting...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Another profile is stopping...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Try to start the config, but the core has not listened to the grpc port, so restart it...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Stop return error</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy core config</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy test config</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot start</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Last download request has not finished yet</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to download geoip: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to download geosite: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to download geo assets</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Geo Asset update completed!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ProxyItem</name>
|
||||
@ -1959,29 +2103,48 @@ Release note:
|
||||
<source>Advanced</source>
|
||||
<translation type="unfinished">Расширенный</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loglevel</source>
|
||||
<translation type="unfinished">Уровень журнала</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>System</source>
|
||||
<translation type="unfinished">Системная</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Press shortcut</source>
|
||||
<translation type="unfinished">Нажмите сочетание клавиш</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Yes</source>
|
||||
<translation type="unfinished">Да</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>No</source>
|
||||
<translation type="unfinished">Нет</translation>
|
||||
<message>
|
||||
<source>Invalid rules</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Strict Route</source>
|
||||
<translation type="unfinished">Строгий маршрут</translation>
|
||||
<source>Some rules could not be added:
|
||||
</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Simple rule manual</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invalid JSON Array</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The provided input cannot be parsed to a valid route rule array:
|
||||
</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invalid operation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot create Route Profile with empty name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Empty Route Profile</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>No valid rules are in the profile</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Some rules could not be added, fix them before saving:
|
||||
</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
||||
|
||||
@ -273,6 +273,10 @@ For NekoBox, this rewrites the underlying(localhost) DNS in Tun Mode, normal mod
|
||||
<source>socks</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Removed all rule-set files</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DialogEditGroup</name>
|
||||
@ -779,6 +783,42 @@ also if the connection cannot be established with the current address family (ip
|
||||
<source>Export</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invalid state</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The list of routing profiles is empty, this should be an unreachable state, crashes may occur now</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invalid settings</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Routing profile cannot be empty</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>DNS Rules are not valid</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invalid operation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Routing Profiles cannot be empty, try adding another profile or editing this one</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Profile is Read-only</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot delete built-in profiles</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DialogVPNSettings</name>
|
||||
@ -812,14 +852,6 @@ https://matsuridayo.github.io/n-configuration/#vpn-tun</translation>
|
||||
<source>Cancel</source>
|
||||
<translation>取消</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><html><head/><body><p>Enables Generic Segmentation offloading on the Tun device, Only supported on Linux</p></body></html></source>
|
||||
<translation>在 Tun 设备上启用通用分段卸载,仅支持 Linux</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable GSO</source>
|
||||
<translation>启用 GSO</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Auto Redirect</source>
|
||||
<translation>自动重定向</translation>
|
||||
@ -1734,6 +1766,98 @@ Split by line.</source>
|
||||
<source>Open Manager</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Profile test aborted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Something is very wrong, the subject ent cannot be found!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Profile manager data is corrupted, try again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The last speed test did not exit completely, please wait. If it persists, please restart the program.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to build test config: </source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Speedtest finished!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to stop tests</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You need to enable hijack DNS server first</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to get system dns settings</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to set system dns: </source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>BuildConfig return error</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Another profile is starting...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Another profile is stopping...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Try to start the config, but the core has not listened to the grpc port, so restart it...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Stop return error</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy core config</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy test config</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot start</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Last download request has not finished yet</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to download geoip: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to download geosite: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to download geo assets</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Geo Asset update completed!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ProxyItem</name>
|
||||
@ -1951,5 +2075,48 @@ Release note:
|
||||
<source>Advanced</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invalid rules</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Some rules could not be added:
|
||||
</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Simple rule manual</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invalid JSON Array</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The provided input cannot be parsed to a valid route rule array:
|
||||
</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invalid operation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot create Route Profile with empty name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Empty Route Profile</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>No valid rules are in the profile</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Some rules could not be added, fix them before saving:
|
||||
</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
||||
|
||||
@ -1459,8 +1459,8 @@ void MainWindow::on_menu_export_config_triggered() {
|
||||
QApplication::clipboard()->setText(config_core);
|
||||
|
||||
QMessageBox msg(QMessageBox::Information, tr("Config copied"), config_core);
|
||||
QPushButton *button_1 = msg.addButton("Copy core config", QMessageBox::YesRole);
|
||||
QPushButton *button_2 = msg.addButton("Copy test config", QMessageBox::YesRole);
|
||||
QPushButton *button_1 = msg.addButton(tr("Copy core config"), QMessageBox::YesRole);
|
||||
QPushButton *button_2 = msg.addButton(tr("Copy test config"), QMessageBox::YesRole);
|
||||
msg.addButton(QMessageBox::Ok);
|
||||
msg.setEscapeButton(QMessageBox::Ok);
|
||||
msg.setDefaultButton(QMessageBox::Ok);
|
||||
@ -2066,7 +2066,7 @@ bool MainWindow::StopVPNProcess() {
|
||||
void MainWindow::DownloadAssets(const QString &geoipUrl, const QString &geositeUrl) {
|
||||
if (!mu_download_assets.tryLock()) {
|
||||
runOnUiThread([=](){
|
||||
MessageBoxWarning("Cannot start", "Last download request has not finished yet");
|
||||
MessageBoxWarning(tr("Cannot start"), tr("Last download request has not finished yet"));
|
||||
});
|
||||
return;
|
||||
}
|
||||
@ -2075,22 +2075,22 @@ void MainWindow::DownloadAssets(const QString &geoipUrl, const QString &geositeU
|
||||
if (!geoipUrl.isEmpty()) {
|
||||
auto resp = NetworkRequestHelper::DownloadGeoAsset(geoipUrl, "geoip.db");
|
||||
if (!resp.isEmpty()) {
|
||||
MW_show_log(QString("Failed to download geoip: %1").arg(resp));
|
||||
MW_show_log(QString(tr("Failed to download geoip: %1")).arg(resp));
|
||||
errors += "geoip: " + resp;
|
||||
}
|
||||
}
|
||||
if (!geositeUrl.isEmpty()) {
|
||||
auto resp = NetworkRequestHelper::DownloadGeoAsset(geositeUrl, "geosite.db");
|
||||
if (!resp.isEmpty()) {
|
||||
MW_show_log(QString("Failed to download geosite: %1").arg(resp));
|
||||
MW_show_log(QString(tr("Failed to download geosite: %1")).arg(resp));
|
||||
errors += "\ngeosite: " + resp;
|
||||
}
|
||||
}
|
||||
mu_download_assets.unlock();
|
||||
if (!errors.isEmpty()) {
|
||||
runOnUiThread([=](){
|
||||
MessageBoxWarning("Failed to download geo assets", errors);
|
||||
MessageBoxWarning(tr("Failed to download geo assets"), errors);
|
||||
});
|
||||
}
|
||||
MW_show_log("Geo Asset update completed!");
|
||||
MW_show_log(tr("Geo Asset update completed!"));
|
||||
}
|
||||
@ -31,7 +31,7 @@ void MainWindow::setup_grpc() {
|
||||
|
||||
void MainWindow::RunSpeedTest(const QString& config, bool useDefault, const QStringList& outboundTags, const QMap<QString, int>& tag2entID, int entID) {
|
||||
if (stopSpeedtest.load()) {
|
||||
MW_show_log("Profile test aborted");
|
||||
MW_show_log(tr("Profile test aborted"));
|
||||
return;
|
||||
}
|
||||
|
||||
@ -54,13 +54,13 @@ void MainWindow::RunSpeedTest(const QString& config, bool useDefault, const QStr
|
||||
entID = tag2entID.count(QString(res.outbound_tag().c_str())) == 0 ? -1 : tag2entID[QString(res.outbound_tag().c_str())];
|
||||
}
|
||||
if (entID == -1) {
|
||||
MW_show_log("Something is very wrong, the subject ent cannot be found!");
|
||||
MW_show_log(tr("Something is very wrong, the subject ent cannot be found!"));
|
||||
continue;
|
||||
}
|
||||
|
||||
auto ent = NekoGui::profileManager->GetProfile(entID);
|
||||
if (ent == nullptr) {
|
||||
MW_show_log("Profile manager data is corrupted, try again.");
|
||||
MW_show_log(tr("Profile manager data is corrupted, try again."));
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -83,14 +83,14 @@ void MainWindow::speedtest_current_group(const QList<std::shared_ptr<NekoGui::Pr
|
||||
return;
|
||||
}
|
||||
if (!speedtestRunning.tryLock()) {
|
||||
MessageBoxWarning(software_name, "The last speed test did not exit completely, please wait. If it persists, please restart the program.");
|
||||
MessageBoxWarning(software_name, tr("The last speed test did not exit completely, please wait. If it persists, please restart the program."));
|
||||
return;
|
||||
}
|
||||
|
||||
runOnNewThread([this, profiles]() {
|
||||
auto buildObject = NekoGui::BuildTestConfig(profiles);
|
||||
if (!buildObject->error.isEmpty()) {
|
||||
MW_show_log("Failed to build test config: " + buildObject->error);
|
||||
MW_show_log(tr("Failed to build test config: ") + buildObject->error);
|
||||
speedtestRunning.unlock();
|
||||
return;
|
||||
}
|
||||
@ -126,7 +126,7 @@ void MainWindow::speedtest_current_group(const QList<std::shared_ptr<NekoGui::Pr
|
||||
speedtestRunning.unlock();
|
||||
runOnUiThread([=]{
|
||||
refresh_proxy_list();
|
||||
MW_show_log("Speedtest finished!");
|
||||
MW_show_log(tr("Speedtest finished!"));
|
||||
});
|
||||
});
|
||||
}
|
||||
@ -137,7 +137,7 @@ void MainWindow::stopSpeedTests() {
|
||||
defaultClient->StopTests(&ok);
|
||||
|
||||
if (!ok) {
|
||||
MW_show_log("Failed to stop tests");
|
||||
MW_show_log(tr("Failed to stop tests"));
|
||||
}
|
||||
}
|
||||
|
||||
@ -176,7 +176,7 @@ void MainWindow::stop_core_daemon() {
|
||||
|
||||
bool MainWindow::set_system_dns(bool set, bool save_set) {
|
||||
if (!NekoGui::dataStore->enable_dns_server) {
|
||||
MW_show_log("You need to enable hijack DNS server first");
|
||||
MW_show_log(tr("You need to enable hijack DNS server first"));
|
||||
return false;
|
||||
}
|
||||
if (!get_elevated_permissions(4)) {
|
||||
@ -190,7 +190,7 @@ bool MainWindow::set_system_dns(bool set, bool save_set) {
|
||||
bool ok;
|
||||
auto sysDefaults = defaultClient->GetSystemDNS(&ok);
|
||||
if (!ok) {
|
||||
MW_show_log("Failed to get system dns settings");
|
||||
MW_show_log(tr("Failed to get system dns settings"));
|
||||
return false;
|
||||
}
|
||||
QStringList sysDefServers;
|
||||
@ -207,7 +207,7 @@ bool MainWindow::set_system_dns(bool set, bool save_set) {
|
||||
res = defaultClient->SetSystemDNS(&rpcOK, servers, is_dhcp, true);
|
||||
}
|
||||
if (!rpcOK) {
|
||||
MW_show_log("Failed to set system dns: " + res);
|
||||
MW_show_log(tr("Failed to set system dns: ") + res);
|
||||
return false;
|
||||
}
|
||||
if (save_set) NekoGui::dataStore->system_dns_set = set;
|
||||
@ -241,7 +241,7 @@ void MainWindow::neko_start(int _id) {
|
||||
|
||||
auto result = BuildConfig(ent, false, false);
|
||||
if (!result->error.isEmpty()) {
|
||||
MessageBoxWarning("BuildConfig return error", result->error);
|
||||
MessageBoxWarning(tr("BuildConfig return error"), result->error);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -290,11 +290,11 @@ void MainWindow::neko_start(int _id) {
|
||||
};
|
||||
|
||||
if (!mu_starting.tryLock()) {
|
||||
MessageBoxWarning(software_name, "Another profile is starting...");
|
||||
MessageBoxWarning(software_name, tr("Another profile is starting..."));
|
||||
return;
|
||||
}
|
||||
if (!mu_stopping.tryLock()) {
|
||||
MessageBoxWarning(software_name, "Another profile is stopping...");
|
||||
MessageBoxWarning(software_name, tr("Another profile is stopping..."));
|
||||
mu_starting.unlock();
|
||||
return;
|
||||
}
|
||||
@ -304,7 +304,7 @@ void MainWindow::neko_start(int _id) {
|
||||
if (!NekoGui::dataStore->core_running) {
|
||||
runOnUiThread(
|
||||
[=] {
|
||||
MW_show_log("Try to start the config, but the core has not listened to the grpc port, so restart it...");
|
||||
MW_show_log(tr("Try to start the config, but the core has not listened to the grpc port, so restart it..."));
|
||||
core_process->start_profile_when_core_is_up = ent->id;
|
||||
core_process->Restart();
|
||||
},
|
||||
@ -380,7 +380,7 @@ void MainWindow::neko_stop(bool crash, bool sem, bool manual) {
|
||||
bool rpcOK;
|
||||
QString error = defaultClient->Stop(&rpcOK);
|
||||
if (rpcOK && !error.isEmpty()) {
|
||||
runOnUiThread([=] { MessageBoxWarning("Stop return error", error); });
|
||||
runOnUiThread([=] { MessageBoxWarning(tr("Stop return error"), error); });
|
||||
return false;
|
||||
} else if (!rpcOK) {
|
||||
return false;
|
||||
|
||||
@ -163,7 +163,7 @@ RouteItem::RouteItem(QWidget *parent, const std::shared_ptr<NekoGui::RoutingChai
|
||||
{
|
||||
runOnUiThread([=]
|
||||
{
|
||||
MessageBoxWarning("Invalid rules", "Some rules could not be added:\n" + res);
|
||||
MessageBoxWarning(tr("Invalid rules"), tr("Some rules could not be added:\n") + res);
|
||||
});
|
||||
}
|
||||
currentIndex = -1;
|
||||
@ -184,7 +184,7 @@ RouteItem::RouteItem(QWidget *parent, const std::shared_ptr<NekoGui::RoutingChai
|
||||
{
|
||||
runOnUiThread([=]
|
||||
{
|
||||
MessageBoxInfo("Simple rule manual", NekoGui::Information::SimpleRuleInfo);
|
||||
MessageBoxInfo(tr("Simple rule manual"), NekoGui::Information::SimpleRuleInfo);
|
||||
});
|
||||
});
|
||||
|
||||
@ -200,11 +200,11 @@ RouteItem::RouteItem(QWidget *parent, const std::shared_ptr<NekoGui::RoutingChai
|
||||
auto *tEdit = new QTextEdit;
|
||||
tEdit->setPlaceholderText("[\n"
|
||||
" {\n"
|
||||
" \"outbound\": \"dns-out\",\n"
|
||||
" \"action\": \"hijack-dns\",\n"
|
||||
" \"protocol\": \"dns\"\n"
|
||||
" },\n"
|
||||
" {\n"
|
||||
" \"outbound\": \"dns-out\",\n"
|
||||
" \"action\": \"reject\",\n"
|
||||
" \"protocol\": \"udp\"\n"
|
||||
" }\n"
|
||||
" ]");
|
||||
@ -219,7 +219,7 @@ RouteItem::RouteItem(QWidget *parent, const std::shared_ptr<NekoGui::RoutingChai
|
||||
auto err = new QString;
|
||||
auto parsed = NekoGui::RoutingChain::parseJsonArray(QString2QJsonArray(tEdit->toPlainText()), err);
|
||||
if (!err->isEmpty()) {
|
||||
MessageBoxInfo("Invalid JSON Array", "The provided input cannot be parsed to a valid route rule array:\n" + *err);
|
||||
MessageBoxInfo(tr("Invalid JSON Array"), tr("The provided input cannot be parsed to a valid route rule array:\n") + *err);
|
||||
return;
|
||||
}
|
||||
chain->Rules.clear();
|
||||
@ -305,7 +305,7 @@ void RouteItem::accept() {
|
||||
chain->name = ui->route_name->text();
|
||||
|
||||
if (chain->name == "") {
|
||||
MessageBoxWarning("Invalid operation", "Cannot create Route Profile with empty name");
|
||||
MessageBoxWarning(tr("Invalid operation"), tr("Cannot create Route Profile with empty name"));
|
||||
return;
|
||||
}
|
||||
|
||||
@ -321,7 +321,7 @@ void RouteItem::accept() {
|
||||
}
|
||||
|
||||
if (chain->Rules.empty()) {
|
||||
MessageBoxInfo("Empty Route Profile", "No valid rules are in the profile");
|
||||
MessageBoxInfo(tr("Empty Route Profile"), tr("No valid rules are in the profile"));
|
||||
return;
|
||||
}
|
||||
|
||||
@ -333,7 +333,7 @@ void RouteItem::accept() {
|
||||
{
|
||||
runOnUiThread([=]
|
||||
{
|
||||
MessageBoxWarning("Invalid rules", "Some rules could not be added, fix them before saving:\n" + res);
|
||||
MessageBoxWarning(tr("Invalid rules"), tr("Some rules could not be added, fix them before saving:\n") + res);
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
@ -133,7 +133,7 @@ DialogBasicSettings::DialogBasicSettings(QWidget *parent)
|
||||
MW_show_log("Failed to remove " + item + ", stop the core then try again");
|
||||
}
|
||||
}
|
||||
MW_show_log("Removed all rule-set files");
|
||||
MW_show_log(tr("Removed all rule-set files"));
|
||||
});
|
||||
|
||||
// Mux
|
||||
|
||||
@ -17,7 +17,7 @@
|
||||
|
||||
void DialogManageRoutes::reloadProfileItems() {
|
||||
if (chainList.empty()) {
|
||||
MessageBoxWarning("Invalid state", "The list of routing profiles is empty, this should be an unreachable state, crashes may occur now");
|
||||
MessageBoxWarning(tr("Invalid state"), tr("The list of routing profiles is empty, this should be an unreachable state, crashes may occur now"));
|
||||
return;
|
||||
}
|
||||
|
||||
@ -187,11 +187,11 @@ DialogManageRoutes::~DialogManageRoutes() {
|
||||
|
||||
void DialogManageRoutes::accept() {
|
||||
if (chainList.empty()) {
|
||||
MessageBoxInfo("Invalid settings", "Routing profile cannot be empty");
|
||||
MessageBoxInfo(tr("Invalid settings"), tr("Routing profile cannot be empty"));
|
||||
return;
|
||||
}
|
||||
if (!validate_dns_rules(rule_editor->toPlainText())) {
|
||||
MessageBoxInfo("Invalid settings", "DNS Rules are not valid");
|
||||
MessageBoxInfo(tr("Invalid settings"), tr("DNS Rules are not valid"));
|
||||
return;
|
||||
}
|
||||
|
||||
@ -299,13 +299,13 @@ void DialogManageRoutes::on_delete_route_clicked() {
|
||||
auto idx = ui->route_profiles->currentRow();
|
||||
if (idx < 0) return;
|
||||
if (chainList.size() == 1) {
|
||||
MessageBoxWarning("Invalid operation", "Routing Profiles cannot be empty, try adding another profile or editing this one");
|
||||
MessageBoxWarning(tr("Invalid operation"), tr("Routing Profiles cannot be empty, try adding another profile or editing this one"));
|
||||
return;
|
||||
}
|
||||
|
||||
auto profileToDel = chainList[idx];
|
||||
if (profileToDel->isViewOnly()) {
|
||||
MessageBoxInfo("Profile is Read-only", "Cannot delete built-in profiles");
|
||||
MessageBoxInfo(tr("Profile is Read-only"), tr("Cannot delete built-in profiles"));
|
||||
return;
|
||||
}
|
||||
chainList.removeAt(idx);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user