Compare commits

..

9 Commits

Author SHA1 Message Date
2dust
30e663cd4f up 7.16.3 2025-11-19 17:15:35 +08:00
JieXu
054efeb32c [PR]改进Emoji字体兼容性 (#8346)
* Update AppBuilderExtension.cs

* Update package-rhel.sh

* Update package-debian.sh

* Update AppBuilderExtension.cs

* Update AppBuilderExtension.cs

* Update AppBuilderExtension.cs

* Withdraw

* Update AppBuilderExtension.cs
2025-11-19 16:47:00 +08:00
2dust
2ebd2b28a8 Support Backspace for remove actions in UI lists
Changed key handling and menu input gestures to allow Backspace (in addition to Delete) for removing items in server, profile, and routing rule lists. This improves usability and consistency across both Avalonia and WPF views.
2025-11-18 16:54:42 +08:00
dependabot[bot]
84f812c8ee Bump actions/checkout from 5.0.0 to 5.0.1 (#8341)
Bumps [actions/checkout](https://github.com/actions/checkout) from 5.0.0 to 5.0.1.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v5.0.0...v5.0.1)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 5.0.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-18 16:15:59 +08:00
2dust
b6ee40ab8d Update Directory.Packages.props 2025-11-18 16:15:19 +08:00
2dust
7f24f4a15f Remove shortcut hints from menu translations
Shortcut key hints (e.g., '(Ctrl+C)', '(Delete)') were removed from various menu item translations in resource files for all supported languages. This improves consistency and clarity in UI text across the application.
2025-11-18 16:00:02 +08:00
2dust
0d307671d1 Bug fix
https://github.com/2dust/v2rayN/issues/8267
2025-11-17 17:44:39 +08:00
Harry Huang
8ea5a57988 Optimize speedtest (#8325)
* Optimize stop-speedtest tip display

* Fix speedtest termination latency
2025-11-16 14:58:55 +08:00
Harry Huang
4fb41aeca1 Remove redundant string operation (#8324) 2025-11-16 14:21:34 +08:00
44 changed files with 626 additions and 391 deletions

View File

@@ -31,7 +31,7 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v5.0.0
uses: actions/checkout@v5.0.1
with:
submodules: 'recursive'
fetch-depth: '0'
@@ -110,7 +110,7 @@ jobs:
dnf -y install sudo git rpm-build rpmdevtools dnf-plugins-core rsync findutils tar gzip unzip which
- name: Checkout repo (for scripts)
uses: actions/checkout@v5.0.0
uses: actions/checkout@v5.0.1
with:
submodules: 'recursive'
fetch-depth: '0'

View File

@@ -26,7 +26,7 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v5.0.0
uses: actions/checkout@v5.0.1
with:
submodules: 'recursive'
fetch-depth: '0'

View File

@@ -26,7 +26,7 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v5.0.0
uses: actions/checkout@v5.0.1
with:
submodules: 'recursive'
fetch-depth: '0'

View File

@@ -27,7 +27,7 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v5.0.0
uses: actions/checkout@v5.0.1
- name: Setup
uses: actions/setup-dotnet@v5.0.0

View File

@@ -28,7 +28,7 @@ Package: v2rayN
Version: $Version
Architecture: $Arch2
Maintainer: https://github.com/2dust/v2rayN
Depends: libc6 (>= 2.34), fontconfig (>= 2.13.1), desktop-file-utils (>= 0.26), xdg-utils (>= 1.1.3), coreutils (>= 8.32), bash (>= 5.1)
Depends: libc6 (>= 2.34), fontconfig (>= 2.13.1), desktop-file-utils (>= 0.26), xdg-utils (>= 1.1.3), coreutils (>= 8.32), bash (>= 5.1), libfreetype6 (>= 2.11)
Description: A GUI client for Windows and Linux, support Xray core and sing-box-core and others
EOF

View File

@@ -631,13 +631,14 @@ ExclusiveArch: aarch64 x86_64
Source0: __PKGROOT__.tar.gz
# Runtime dependencies (Avalonia / X11 / Fonts / GL)
Requires: freetype, cairo, pango, openssl, mesa-libEGL, mesa-libGL
Requires: cairo, pango, openssl, mesa-libEGL, mesa-libGL
Requires: glibc >= 2.34
Requires: fontconfig >= 2.13.1
Requires: desktop-file-utils >= 0.26
Requires: xdg-utils >= 1.1.3
Requires: coreutils >= 8.32
Requires: bash >= 5.1
Requires: freetype >= 2.10
%description
v2rayN Linux for Red Hat Enterprise Linux

View File

@@ -1,7 +1,7 @@
<Project>
<PropertyGroup>
<Version>7.16.2</Version>
<Version>7.16.3</Version>
</PropertyGroup>
<PropertyGroup>

View File

@@ -19,9 +19,9 @@
<PackageVersion Include="ReactiveUI" Version="22.2.1" />
<PackageVersion Include="ReactiveUI.Fody" Version="19.5.41" />
<PackageVersion Include="ReactiveUI.WPF" Version="22.2.1" />
<PackageVersion Include="Semi.Avalonia" Version="11.3.7" />
<PackageVersion Include="Semi.Avalonia" Version="11.3.7.1" />
<PackageVersion Include="Semi.Avalonia.AvaloniaEdit" Version="11.2.0.1" />
<PackageVersion Include="Semi.Avalonia.DataGrid" Version="11.3.7" />
<PackageVersion Include="Semi.Avalonia.DataGrid" Version="11.3.7.1" />
<PackageVersion Include="NLog" Version="6.0.6" />
<PackageVersion Include="sqlite-net-pcl" Version="1.9.172" />
<PackageVersion Include="TaskScheduler" Version="2.12.2" />

View File

@@ -425,7 +425,7 @@ public class Utils
var domain = authority;
// Handle IPv6 addresses, e.g., "[2001:db8::1]:443"
if (authority.StartsWith("[") && authority.Contains("]"))
if (authority.StartsWith('[') && authority.Contains(']'))
{
var closingBracketIndex = authority.LastIndexOf(']');
if (closingBracketIndex < authority.Length - 1 && authority[closingBracketIndex + 1] == ':')

View File

@@ -4,7 +4,7 @@ namespace ServiceLib.Handler.Fmt;
public class BaseFmt
{
private static readonly string[] _allowInsecureArray = new[] { "insecure", "allowInsecure", "allow_insecure", "verify" };
private static readonly string[] _allowInsecureArray = new[] { "insecure", "allowInsecure", "allow_insecure" };
protected static string GetIpv6(string address)
{

View File

@@ -45,18 +45,18 @@ public class SocksFmt : BaseFmt
};
result = result[Global.ProtocolShares[EConfigType.SOCKS].Length..];
//remark
var indexRemark = result.IndexOf("#");
var indexRemark = result.IndexOf('#');
if (indexRemark > 0)
{
try
{
item.Remarks = Utils.UrlDecode(result.Substring(indexRemark + 1, result.Length - indexRemark - 1));
item.Remarks = Utils.UrlDecode(result.Substring(indexRemark + 1));
}
catch { }
result = result[..indexRemark];
}
//part decode
var indexS = result.IndexOf("@");
var indexS = result.IndexOf('@');
if (indexS > 0)
{
}

View File

@@ -19,7 +19,7 @@ namespace ServiceLib.Resx {
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
// (以 /str 作为命令选项),或重新生成 VS 项目。
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "18.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
public class ResUI {
@@ -799,7 +799,7 @@ namespace ServiceLib.Resx {
}
/// <summary>
/// 查找类似 Import Share Links from clipboard (Ctrl+V) 的本地化字符串。
/// 查找类似 Import Share Links from clipboard 的本地化字符串。
/// </summary>
public static string menuAddServerViaClipboard {
get {
@@ -817,7 +817,7 @@ namespace ServiceLib.Resx {
}
/// <summary>
/// 查找类似 Scan QR code on the screen (Ctrl+S) 的本地化字符串。
/// 查找类似 Scan QR code on the screen 的本地化字符串。
/// </summary>
public static string menuAddServerViaScan {
get {
@@ -970,7 +970,7 @@ namespace ServiceLib.Resx {
}
/// <summary>
/// 查找类似 Edit Configuration (Ctrl+D) 的本地化字符串。
/// 查找类似 Edit Configuration 的本地化字符串。
/// </summary>
public static string menuEditServer {
get {
@@ -1015,7 +1015,7 @@ namespace ServiceLib.Resx {
}
/// <summary>
/// 查找类似 Export Share Link to Clipboard (Ctrl+C) 的本地化字符串。
/// 查找类似 Export Share Link to Clipboard 的本地化字符串。
/// </summary>
public static string menuExport2ShareUrl {
get {
@@ -1249,7 +1249,7 @@ namespace ServiceLib.Resx {
}
/// <summary>
/// 查找类似 Move to bottom (B) 的本地化字符串。
/// 查找类似 Move to bottom 的本地化字符串。
/// </summary>
public static string menuMoveBottom {
get {
@@ -1258,7 +1258,7 @@ namespace ServiceLib.Resx {
}
/// <summary>
/// 查找类似 Down (D) 的本地化字符串。
/// 查找类似 Down 的本地化字符串。
/// </summary>
public static string menuMoveDown {
get {
@@ -1285,7 +1285,7 @@ namespace ServiceLib.Resx {
}
/// <summary>
/// 查找类似 Move to top (T) 的本地化字符串。
/// 查找类似 Move to top 的本地化字符串。
/// </summary>
public static string menuMoveTop {
get {
@@ -1294,7 +1294,7 @@ namespace ServiceLib.Resx {
}
/// <summary>
/// 查找类似 Up (U) 的本地化字符串。
/// 查找类似 Up 的本地化字符串。
/// </summary>
public static string menuMoveUp {
get {
@@ -1312,7 +1312,7 @@ namespace ServiceLib.Resx {
}
/// <summary>
/// 查找类似 Copy (Ctrl+C) 的本地化字符串。
/// 查找类似 Copy 的本地化字符串。
/// </summary>
public static string menuMsgViewCopy {
get {
@@ -1330,7 +1330,7 @@ namespace ServiceLib.Resx {
}
/// <summary>
/// 查找类似 Select all (Ctrl+A) 的本地化字符串。
/// 查找类似 Select all 的本地化字符串。
/// </summary>
public static string menuMsgViewSelectAll {
get {
@@ -1402,7 +1402,7 @@ namespace ServiceLib.Resx {
}
/// <summary>
/// 查找类似 Select active node (Enter) 的本地化字符串。
/// 查找类似 Select active node 的本地化字符串。
/// </summary>
public static string menuProxiesSelectActivity {
get {
@@ -1411,7 +1411,7 @@ namespace ServiceLib.Resx {
}
/// <summary>
/// 查找类似 Test Configurations real delay (Ctrl+R) 的本地化字符串。
/// 查找类似 Test Configurations real delay 的本地化字符串。
/// </summary>
public static string menuRealPingServer {
get {
@@ -1528,7 +1528,7 @@ namespace ServiceLib.Resx {
}
/// <summary>
/// 查找类似 Remove selected Configurations (Delete) 的本地化字符串。
/// 查找类似 Remove selected Configurations 的本地化字符串。
/// </summary>
public static string menuRemoveServer {
get {
@@ -1564,7 +1564,7 @@ namespace ServiceLib.Resx {
}
/// <summary>
/// 查找类似 Remove selected (Delete) 的本地化字符串。
/// 查找类似 Remove selected 的本地化字符串。
/// </summary>
public static string menuRoutingAdvancedRemove {
get {
@@ -1573,7 +1573,7 @@ namespace ServiceLib.Resx {
}
/// <summary>
/// 查找类似 Set as active rule (Enter) 的本地化字符串。
/// 查找类似 Set as active rule 的本地化字符串。
/// </summary>
public static string menuRoutingAdvancedSetDefault {
get {
@@ -1645,7 +1645,7 @@ namespace ServiceLib.Resx {
}
/// <summary>
/// 查找类似 Remove Rule (Delete) 的本地化字符串。
/// 查找类似 Remove Rule 的本地化字符串。
/// </summary>
public static string menuRuleRemove {
get {
@@ -1654,7 +1654,7 @@ namespace ServiceLib.Resx {
}
/// <summary>
/// 查找类似 Select all (Ctrl+A) 的本地化字符串。
/// 查找类似 Select all 的本地化字符串。
/// </summary>
public static string menuSelectAll {
get {
@@ -1681,7 +1681,7 @@ namespace ServiceLib.Resx {
}
/// <summary>
/// 查找类似 Set as active Configuration (Enter) 的本地化字符串。
/// 查找类似 Set as active Configuration 的本地化字符串。
/// </summary>
public static string menuSetDefaultServer {
get {
@@ -1699,7 +1699,7 @@ namespace ServiceLib.Resx {
}
/// <summary>
/// 查找类似 Share Configuration (Ctrl+F) 的本地化字符串。
/// 查找类似 Share Configuration 的本地化字符串。
/// </summary>
public static string menuShareServer {
get {
@@ -1726,7 +1726,7 @@ namespace ServiceLib.Resx {
}
/// <summary>
/// 查找类似 Test Configurations download speed (Ctrl+T) 的本地化字符串。
/// 查找类似 Test Configurations download speed 的本地化字符串。
/// </summary>
public static string menuSpeedServer {
get {
@@ -1870,7 +1870,7 @@ namespace ServiceLib.Resx {
}
/// <summary>
/// 查找类似 Test Configurations with tcping (Ctrl+O) 的本地化字符串。
/// 查找类似 Test Configurations with tcping 的本地化字符串。
/// </summary>
public static string menuTcpingServer {
get {
@@ -2355,6 +2355,15 @@ namespace ServiceLib.Resx {
}
}
/// <summary>
/// 查找类似 Press ESC to terminate the test 的本地化字符串。
/// </summary>
public static string SpeedtestingPressEscToExit {
get {
return ResourceManager.GetString("SpeedtestingPressEscToExit", resourceCulture);
}
}
/// <summary>
/// 查找类似 Skip test 的本地化字符串。
/// </summary>
@@ -2383,7 +2392,7 @@ namespace ServiceLib.Resx {
}
/// <summary>
/// 查找类似 Waiting for testing (press ESC to terminate)... 的本地化字符串。
/// 查找类似 Waiting... 的本地化字符串。
/// </summary>
public static string SpeedtestingWait {
get {

View File

@@ -472,10 +472,10 @@
<value>زبان</value>
</data>
<data name="menuAddServerViaClipboard" xml:space="preserve">
<value>وارد کردن URL انبوه از کلیپ بورد (Ctrl+V)</value>
<value>وارد کردن URL انبوه از کلیپ بورد</value>
</data>
<data name="menuAddServerViaScan" xml:space="preserve">
<value>اسکن کد QR روی صفحه (Ctrl+S)</value>
<value>اسکن کد QR روی صفحه</value>
</data>
<data name="menuCopyServer" xml:space="preserve">
<value>سرور انتخاب شده را شبیه سازی کنید</value>
@@ -484,31 +484,31 @@
<value>سرورهای تکراری را حذف کنید</value>
</data>
<data name="menuRemoveServer" xml:space="preserve">
<value>حذف سرورهای انتخابی (Delete)</value>
<value>حذف سرورهای انتخابی</value>
</data>
<data name="menuSetDefaultServer" xml:space="preserve">
<value>به عنوان سرور فعال تنظیم کنید (Enter)</value>
<value>به عنوان سرور فعال تنظیم کنید</value>
</data>
<data name="menuClearServerStatistics" xml:space="preserve">
<value>تمام آمار خدمات را پاک کنید</value>
</data>
<data name="menuRealPingServer" xml:space="preserve">
<value>آزمایش سرورها با تاخیر واقعی (Ctrl+R)</value>
<value>آزمایش سرورها با تاخیر واقعی</value>
</data>
<data name="menuSortServerResult" xml:space="preserve">
<value>مرتب سازی بر اساس نتیجه تست</value>
</data>
<data name="menuSpeedServer" xml:space="preserve">
<value>تست سرعت دانلود سرورها (Ctrl+T)</value>
<value>تست سرعت دانلود سرورها</value>
</data>
<data name="menuTcpingServer" xml:space="preserve">
<value>تست سرورها با tcping (Ctrl+O)</value>
<value>تست سرورها با tcping</value>
</data>
<data name="menuExport2ClientConfig" xml:space="preserve">
<value>سرور انتخابی را برای پیکربندی کلاینت صادر کنید</value>
</data>
<data name="menuExport2ShareUrl" xml:space="preserve">
<value>URL های اشتراک گذاری را به کلیپ بورد صادر کنید (Ctrl+C)</value>
<value>URL های اشتراک گذاری را به کلیپ بورد صادر کنید</value>
</data>
<data name="menuAddCustomServer" xml:space="preserve">
<value>یک سرور پیکربندی سفارشی اضافه شود</value>
@@ -529,19 +529,19 @@
<value>سرور [VMess] را اضافه کنید</value>
</data>
<data name="menuSelectAll" xml:space="preserve">
<value>انتخاب همه (Ctrl+A)</value>
<value>انتخاب همه</value>
</data>
<data name="menuMsgViewClear" xml:space="preserve">
<value>همه را پاک کن</value>
</data>
<data name="menuMsgViewCopy" xml:space="preserve">
<value>کپی (Ctrl+C)</value>
<value>کپی</value>
</data>
<data name="menuMsgViewCopyAll" xml:space="preserve">
<value>کپی همه</value>
</data>
<data name="menuMsgViewSelectAll" xml:space="preserve">
<value>انتخاب همه (Ctrl+A)</value>
<value>انتخاب همه</value>
</data>
<data name="menuSubAdd" xml:space="preserve">
<value>اضافه کردن</value>
@@ -796,13 +796,13 @@
<value>به پایین حرکت شود(B)</value>
</data>
<data name="menuMoveDown" xml:space="preserve">
<value>پایین (D)</value>
<value>پایین</value>
</data>
<data name="menuMoveTop" xml:space="preserve">
<value>حرکت به بالا (T)</value>
<value>حرکت به بالا</value>
</data>
<data name="menuMoveUp" xml:space="preserve">
<value>بالا (U)</value>
<value>بالا</value>
</data>
<data name="MsgFilterTitle" xml:space="preserve">
<value>فیلتر، از عبارات منظم پشتیبانی می کند</value>
@@ -922,7 +922,7 @@
<value>رد شدن از آزمون</value>
</data>
<data name="menuEditServer" xml:space="preserve">
<value>ویرایش سرور (Ctrl+D)</value>
<value>ویرایش سرور</value>
</data>
<data name="TbSettingsDoubleClick2Activate" xml:space="preserve">
<value>دوبار کلیک کردن سرور باعث فعال شدن آن می شود</value>
@@ -976,7 +976,10 @@
<value>فعال‌ سازی شتاب‌ دهنده سخت‌ افزاری (نیاز به راه‌اندازی مجدد)</value>
</data>
<data name="SpeedtestingWait" xml:space="preserve">
<value>در انتظار آزمایش (برای پایان دادن به ESC فشار دهید)...</value>
<value>در انتظار آزمایش...</value>
</data>
<data name="SpeedtestingPressEscToExit" xml:space="preserve">
<value>برای پایان دادن به ESC فشار دهید</value>
</data>
<data name="TipDisplayLog" xml:space="preserve">
<value>لطفاً در صورت قطع غیرعادی آن را خاموش کنید</value>
@@ -1204,7 +1207,7 @@
<value>تازه سازی پروکسی ها</value>
</data>
<data name="menuProxiesSelectActivity" xml:space="preserve">
<value>انتخاب گره فعال (Enter)</value>
<value>انتخاب گره فعال</value>
</data>
<data name="TbSettingsDomainStrategy4Out" xml:space="preserve">
<value>استراتژی دامنه پیش فرض برای خروجی</value>
@@ -1635,4 +1638,4 @@ The "Get Certificate" action may fail if a self-signed certificate is used or if
<data name="TbSettingsMacOSShowInDock" xml:space="preserve">
<value>macOS displays this in the Dock (requires restart)</value>
</data>
</root>
</root>

View File

@@ -472,10 +472,10 @@
<value>Langue (redémarrage requis)</value>
</data>
<data name="menuAddServerViaClipboard" xml:space="preserve">
<value>Importer liens depuis le presse-papiers (Ctrl+V)</value>
<value>Importer liens depuis le presse-papiers</value>
</data>
<data name="menuAddServerViaScan" xml:space="preserve">
<value>Scanner le QR code à lécran (Ctrl+S)</value>
<value>Scanner le QR code à lécran</value>
</data>
<data name="menuCopyServer" xml:space="preserve">
<value>Cloner la sélection</value>
@@ -484,7 +484,7 @@
<value>Supprimer les doublons</value>
</data>
<data name="menuRemoveServer" xml:space="preserve">
<value>Supprimer la sélection (multi-sélection) (Delete)</value>
<value>Supprimer la sélection (multi-sélection)</value>
</data>
<data name="menuSetDefaultServer" xml:space="preserve">
<value>Définir comme actif (Entrée)</value>
@@ -493,22 +493,22 @@
<value>Effacer toutes les statistiques de service</value>
</data>
<data name="menuRealPingServer" xml:space="preserve">
<value>Tester la latence de connexion réelle (multi-sélect) (Ctrl+R)</value>
<value>Tester la latence de connexion réelle (multi-sélect)</value>
</data>
<data name="menuSortServerResult" xml:space="preserve">
<value>Trier selon les résultats de test</value>
</data>
<data name="menuSpeedServer" xml:space="preserve">
<value>Tester la vitesse (multi-sélection) (Ctrl+T)</value>
<value>Tester la vitesse (multi-sélection)</value>
</data>
<data name="menuTcpingServer" xml:space="preserve">
<value>Tester la latence Tcping (multi-sélection) (Ctrl+O)</value>
<value>Tester la latence Tcping (multi-sélection)</value>
</data>
<data name="menuExport2ClientConfig" xml:space="preserve">
<value>Exporter la configuration complète sélectionnée</value>
</data>
<data name="menuExport2ShareUrl" xml:space="preserve">
<value>Exporter les liens de partage vers le presse-papiers (multi-sélection) (Ctrl+C)</value>
<value>Exporter les liens de partage vers le presse-papiers (multi-sélection)</value>
</data>
<data name="menuAddCustomServer" xml:space="preserve">
<value>Ajouter une configuration personnalisée</value>
@@ -529,19 +529,19 @@
<value>Ajouter [VMess]</value>
</data>
<data name="menuSelectAll" xml:space="preserve">
<value>Tout sélectionner (Ctrl+A)</value>
<value>Tout sélectionner</value>
</data>
<data name="menuMsgViewClear" xml:space="preserve">
<value>Tout effacer</value>
</data>
<data name="menuMsgViewCopy" xml:space="preserve">
<value>Copier (Ctrl+C)</value>
<value>Copier</value>
</data>
<data name="menuMsgViewCopyAll" xml:space="preserve">
<value>Tout copier</value>
</data>
<data name="menuMsgViewSelectAll" xml:space="preserve">
<value>Tout sélect (Ctrl+A)</value>
<value>Tout sélect</value>
</data>
<data name="menuSubAdd" xml:space="preserve">
<value>Ajouter</value>
@@ -781,7 +781,7 @@
<value>Mode PAC</value>
</data>
<data name="menuShareServer" xml:space="preserve">
<value>Partager (Ctrl+F)</value>
<value>Partager</value>
</data>
<data name="menuRouting" xml:space="preserve">
<value>Routage</value>
@@ -793,16 +793,16 @@
<value>Exécuter en tant quadministrateur</value>
</data>
<data name="menuMoveBottom" xml:space="preserve">
<value>Déplacer tout en bas (B)</value>
<value>Déplacer tout en bas</value>
</data>
<data name="menuMoveDown" xml:space="preserve">
<value>Descendre (D)</value>
<value>Descendre</value>
</data>
<data name="menuMoveTop" xml:space="preserve">
<value>Déplacer tout en haut (T)</value>
<value>Déplacer tout en haut</value>
</data>
<data name="menuMoveUp" xml:space="preserve">
<value>Monter (U)</value>
<value>Monter</value>
</data>
<data name="MsgFilterTitle" xml:space="preserve">
<value>Filtre (regex pris en charge)</value>
@@ -817,7 +817,7 @@
<value>Importer 1-clic du jeu de règles</value>
</data>
<data name="menuRoutingAdvancedRemove" xml:space="preserve">
<value>Suppr. règles sélectionnées (Delete)</value>
<value>Suppr. règles sélectionnées</value>
</data>
<data name="menuRoutingAdvancedSetDefault" xml:space="preserve">
<value>Définir comme règles actives (Entrée)</value>
@@ -853,7 +853,7 @@
<value>Liste des règles</value>
</data>
<data name="menuRuleRemove" xml:space="preserve">
<value>Supprimer les règles sélectionnées (Delete)</value>
<value>Supprimer les règles sélectionnées</value>
</data>
<data name="menuRoutingRuleDetailsSetting" xml:space="preserve">
<value>Paramètres détaillés des règles de routage</value>
@@ -922,7 +922,7 @@
<value>Ignorer le test</value>
</data>
<data name="menuEditServer" xml:space="preserve">
<value>Éditer (Ctrl+D)</value>
<value>Éditer</value>
</data>
<data name="TbSettingsDoubleClick2Activate" xml:space="preserve">
<value>Double-cliquer sur linterface principale pour activer</value>
@@ -976,7 +976,10 @@
<value>Activer laccélération matérielle (redémarrage requis)</value>
</data>
<data name="SpeedtestingWait" xml:space="preserve">
<value>En attente du test (appuyer sur Échap pour arrêter)...</value>
<value>En attente du test...</value>
</data>
<data name="SpeedtestingPressEscToExit" xml:space="preserve">
<value>Appuyer sur Échap pour arrêter</value>
</data>
<data name="TipDisplayLog" xml:space="preserve">
<value>Désactiver cette option si coupure anormale</value>

View File

@@ -472,10 +472,10 @@
<value>Nyelv (Újraindítás)</value>
</data>
<data name="menuAddServerViaClipboard" xml:space="preserve">
<value>Megosztási linkek importálása vágólapról (Ctrl+V)</value>
<value>Megosztási linkek importálása vágólapról</value>
</data>
<data name="menuAddServerViaScan" xml:space="preserve">
<value>QR kód beolvasása a képernyőről (Ctrl+S)</value>
<value>QR kód beolvasása a képernyőről</value>
</data>
<data name="menuCopyServer" xml:space="preserve">
<value>Kijelölt konfiguráció klónozása</value>
@@ -484,31 +484,31 @@
<value>Ismétlődő konfigurációk eltávolítása</value>
</data>
<data name="menuRemoveServer" xml:space="preserve">
<value>Kijelölt konfigurációk eltávolítása (Delete)</value>
<value>Kijelölt konfigurációk eltávolítása</value>
</data>
<data name="menuSetDefaultServer" xml:space="preserve">
<value>Beállítás aktív konfigurációként (Enter)</value>
<value>Beállítás aktív konfigurációként</value>
</data>
<data name="menuClearServerStatistics" xml:space="preserve">
<value>Összes szolgáltatás statisztika törlése</value>
</data>
<data name="menuRealPingServer" xml:space="preserve">
<value>Konfigurációk valós késleltetésének tesztelése (Ctrl+R)</value>
<value>Konfigurációk valós késleltetésének tesztelése</value>
</data>
<data name="menuSortServerResult" xml:space="preserve">
<value>Rendezés teszteredmény szerint</value>
</data>
<data name="menuSpeedServer" xml:space="preserve">
<value>Konfigurációk letöltési sebességének tesztelése (Ctrl+T)</value>
<value>Konfigurációk letöltési sebességének tesztelése</value>
</data>
<data name="menuTcpingServer" xml:space="preserve">
<value>Konfigurációk tesztelése tcpinggel (Ctrl+O)</value>
<value>Konfigurációk tesztelése tcpinggel</value>
</data>
<data name="menuExport2ClientConfig" xml:space="preserve">
<value>Kijelölt konfiguráció exportálása teljes konfigurációként</value>
</data>
<data name="menuExport2ShareUrl" xml:space="preserve">
<value>Megosztási link exportálása vágólapra (Ctrl+C)</value>
<value>Megosztási link exportálása vágólapra</value>
</data>
<data name="menuAddCustomServer" xml:space="preserve">
<value>Egyéni konfiguráció hozzáadása</value>
@@ -529,19 +529,19 @@
<value>[VMess] konfiguráció hozzáadása</value>
</data>
<data name="menuSelectAll" xml:space="preserve">
<value>Összes kijelölése (Ctrl+A)</value>
<value>Összes kijelölése</value>
</data>
<data name="menuMsgViewClear" xml:space="preserve">
<value>Összes törlése</value>
</data>
<data name="menuMsgViewCopy" xml:space="preserve">
<value>Másolás (Ctrl+C)</value>
<value>Másolás</value>
</data>
<data name="menuMsgViewCopyAll" xml:space="preserve">
<value>Összes másolása</value>
</data>
<data name="menuMsgViewSelectAll" xml:space="preserve">
<value>Összes kijelölése (Ctrl+A)</value>
<value>Összes kijelölése</value>
</data>
<data name="menuSubAdd" xml:space="preserve">
<value>Hozzáadás</value>
@@ -781,7 +781,7 @@
<value>PAC mód</value>
</data>
<data name="menuShareServer" xml:space="preserve">
<value>Konfiguráció megosztása (Ctrl+F)</value>
<value>Konfiguráció megosztása</value>
</data>
<data name="menuRouting" xml:space="preserve">
<value>Útválasztás</value>
@@ -793,16 +793,16 @@
<value>Futtatás rendszergazdaként</value>
</data>
<data name="menuMoveBottom" xml:space="preserve">
<value>Mozgatás alulra (B)</value>
<value>Mozgatás alulra</value>
</data>
<data name="menuMoveDown" xml:space="preserve">
<value>Le (D)</value>
<value>Le</value>
</data>
<data name="menuMoveTop" xml:space="preserve">
<value>Mozgatás felülre (T)</value>
<value>Mozgatás felülre</value>
</data>
<data name="menuMoveUp" xml:space="preserve">
<value>Fel (U)</value>
<value>Fel</value>
</data>
<data name="MsgFilterTitle" xml:space="preserve">
<value>Szűrő, támogatja a reguláris kifejezéseket</value>
@@ -817,10 +817,10 @@
<value>Szabályok importálása</value>
</data>
<data name="menuRoutingAdvancedRemove" xml:space="preserve">
<value>Kijelölt eltávolítása (Delete)</value>
<value>Kijelölt eltávolítása</value>
</data>
<data name="menuRoutingAdvancedSetDefault" xml:space="preserve">
<value>Beállítás aktív szabályként (Enter)</value>
<value>Beállítás aktív szabályként</value>
</data>
<data name="TbdomainStrategy" xml:space="preserve">
<value>Tartomány stratégia</value>
@@ -853,7 +853,7 @@
<value>Szabálylista</value>
</data>
<data name="menuRuleRemove" xml:space="preserve">
<value>Szabály eltávolítása (Delete)</value>
<value>Szabály eltávolítása</value>
</data>
<data name="menuRoutingRuleDetailsSetting" xml:space="preserve">
<value>Útválasztási szabály részleteinek beállítása</value>
@@ -922,7 +922,7 @@
<value>Teszt kihagyása</value>
</data>
<data name="menuEditServer" xml:space="preserve">
<value>Konfiguráció szerkesztése (Ctrl+D)</value>
<value>Konfiguráció szerkesztése</value>
</data>
<data name="TbSettingsDoubleClick2Activate" xml:space="preserve">
<value>Dupla kattintás a konfigurációra aktiválja</value>
@@ -976,7 +976,10 @@
<value>Hardveres gyorsítás engedélyezése (újraindítást igényel)</value>
</data>
<data name="SpeedtestingWait" xml:space="preserve">
<value>Tesztelésre vár (ESC megnyomásával megszakítható)...</value>
<value>Tesztelésre vár...</value>
</data>
<data name="SpeedtestingPressEscToExit" xml:space="preserve">
<value>ESC megnyomásával megszakítható</value>
</data>
<data name="TipDisplayLog" xml:space="preserve">
<value>Kérjük, kapcsolja ki rendellenes megszakadás esetén</value>
@@ -1204,7 +1207,7 @@
<value>Proxyk frissítése</value>
</data>
<data name="menuProxiesSelectActivity" xml:space="preserve">
<value>Aktív csomópont kiválasztása (Enter)</value>
<value>Aktív csomópont kiválasztása</value>
</data>
<data name="TbSettingsDomainStrategy4Out" xml:space="preserve">
<value>Alapértelmezett tartomány stratégia kimenő forgalomhoz</value>

View File

@@ -472,10 +472,10 @@
<value>Language (Restart)</value>
</data>
<data name="menuAddServerViaClipboard" xml:space="preserve">
<value>Import Share Links from clipboard (Ctrl+V)</value>
<value>Import Share Links from clipboard</value>
</data>
<data name="menuAddServerViaScan" xml:space="preserve">
<value>Scan QR code on the screen (Ctrl+S)</value>
<value>Scan QR code on the screen</value>
</data>
<data name="menuCopyServer" xml:space="preserve">
<value>Clone selected Configuration</value>
@@ -484,31 +484,31 @@
<value>Remove duplicate Configurations</value>
</data>
<data name="menuRemoveServer" xml:space="preserve">
<value>Remove selected Configurations (Delete)</value>
<value>Remove selected Configurations</value>
</data>
<data name="menuSetDefaultServer" xml:space="preserve">
<value>Set as active Configuration (Enter)</value>
<value>Set as active Configuration</value>
</data>
<data name="menuClearServerStatistics" xml:space="preserve">
<value>Clear all service statistics</value>
</data>
<data name="menuRealPingServer" xml:space="preserve">
<value>Test Configurations real delay (Ctrl+R)</value>
<value>Test Configurations real delay</value>
</data>
<data name="menuSortServerResult" xml:space="preserve">
<value>Sort by test result</value>
</data>
<data name="menuSpeedServer" xml:space="preserve">
<value>Test Configurations download speed (Ctrl+T)</value>
<value>Test Configurations download speed</value>
</data>
<data name="menuTcpingServer" xml:space="preserve">
<value>Test Configurations with tcping (Ctrl+O)</value>
<value>Test Configurations with tcping</value>
</data>
<data name="menuExport2ClientConfig" xml:space="preserve">
<value>Export selected Configuration for complete configuration</value>
</data>
<data name="menuExport2ShareUrl" xml:space="preserve">
<value>Export Share Link to Clipboard (Ctrl+C)</value>
<value>Export Share Link to Clipboard</value>
</data>
<data name="menuAddCustomServer" xml:space="preserve">
<value>Add a custom configuration Configuration</value>
@@ -529,19 +529,19 @@
<value>Add [VMess] Configuration</value>
</data>
<data name="menuSelectAll" xml:space="preserve">
<value>Select all (Ctrl+A)</value>
<value>Select all</value>
</data>
<data name="menuMsgViewClear" xml:space="preserve">
<value>Clear all</value>
</data>
<data name="menuMsgViewCopy" xml:space="preserve">
<value>Copy (Ctrl+C)</value>
<value>Copy</value>
</data>
<data name="menuMsgViewCopyAll" xml:space="preserve">
<value>Copy all</value>
</data>
<data name="menuMsgViewSelectAll" xml:space="preserve">
<value>Select all (Ctrl+A)</value>
<value>Select all</value>
</data>
<data name="menuSubAdd" xml:space="preserve">
<value>Add</value>
@@ -781,7 +781,7 @@
<value>PAC mode</value>
</data>
<data name="menuShareServer" xml:space="preserve">
<value>Share Configuration (Ctrl+F)</value>
<value>Share Configuration</value>
</data>
<data name="menuRouting" xml:space="preserve">
<value>Routing</value>
@@ -793,16 +793,16 @@
<value>Run as Admin</value>
</data>
<data name="menuMoveBottom" xml:space="preserve">
<value>Move to bottom (B)</value>
<value>Move to bottom</value>
</data>
<data name="menuMoveDown" xml:space="preserve">
<value>Down (D)</value>
<value>Down</value>
</data>
<data name="menuMoveTop" xml:space="preserve">
<value>Move to top (T)</value>
<value>Move to top</value>
</data>
<data name="menuMoveUp" xml:space="preserve">
<value>Up (U)</value>
<value>Up</value>
</data>
<data name="MsgFilterTitle" xml:space="preserve">
<value>Filter, supports regular expressions</value>
@@ -817,10 +817,10 @@
<value>Import Rules</value>
</data>
<data name="menuRoutingAdvancedRemove" xml:space="preserve">
<value>Remove selected (Delete)</value>
<value>Remove selected</value>
</data>
<data name="menuRoutingAdvancedSetDefault" xml:space="preserve">
<value>Set as active rule (Enter)</value>
<value>Set as active rule</value>
</data>
<data name="TbdomainStrategy" xml:space="preserve">
<value>Domain strategy</value>
@@ -853,7 +853,7 @@
<value>Rule List</value>
</data>
<data name="menuRuleRemove" xml:space="preserve">
<value>Remove Rule (Delete)</value>
<value>Remove Rule</value>
</data>
<data name="menuRoutingRuleDetailsSetting" xml:space="preserve">
<value>Routing Rule Details Setting</value>
@@ -922,7 +922,7 @@
<value>Skip test</value>
</data>
<data name="menuEditServer" xml:space="preserve">
<value>Edit Configuration (Ctrl+D)</value>
<value>Edit Configuration</value>
</data>
<data name="TbSettingsDoubleClick2Activate" xml:space="preserve">
<value>Double-clicking Configuration makes it active</value>
@@ -976,7 +976,10 @@
<value>Enable hardware acceleration (requires restart)</value>
</data>
<data name="SpeedtestingWait" xml:space="preserve">
<value>Waiting for testing (press ESC to terminate)...</value>
<value>Waiting...</value>
</data>
<data name="SpeedtestingPressEscToExit" xml:space="preserve">
<value>Press ESC to terminate the test</value>
</data>
<data name="TipDisplayLog" xml:space="preserve">
<value>Please turn off when there is an abnormal disconnection</value>
@@ -1204,7 +1207,7 @@
<value>Refresh Proxies</value>
</data>
<data name="menuProxiesSelectActivity" xml:space="preserve">
<value>Select active node (Enter)</value>
<value>Select active node</value>
</data>
<data name="TbSettingsDomainStrategy4Out" xml:space="preserve">
<value>Default domain strategy for outbound</value>

View File

@@ -472,10 +472,10 @@
<value>Язык (требуется перезапуск)</value>
</data>
<data name="menuAddServerViaClipboard" xml:space="preserve">
<value>Импорт массива URL из буфера обмена (Ctrl+V)</value>
<value>Импорт массива URL из буфера обмена</value>
</data>
<data name="menuAddServerViaScan" xml:space="preserve">
<value>Сканировать QR-код с экрана (Ctrl+S)</value>
<value>Сканировать QR-код с экрана</value>
</data>
<data name="menuCopyServer" xml:space="preserve">
<value>Клонировать выбранный сервер</value>
@@ -484,31 +484,31 @@
<value>Удалить дубликаты серверов</value>
</data>
<data name="menuRemoveServer" xml:space="preserve">
<value>Удалить выбранные серверы (Delete)</value>
<value>Удалить выбранные серверы</value>
</data>
<data name="menuSetDefaultServer" xml:space="preserve">
<value>Установить как активный сервер (Enter)</value>
<value>Установить как активный сервер</value>
</data>
<data name="menuClearServerStatistics" xml:space="preserve">
<value>Очистить всю статистику</value>
</data>
<data name="menuRealPingServer" xml:space="preserve">
<value>Тест на реальную задержку сервера (Ctrl+R)</value>
<value>Тест на реальную задержку сервера</value>
</data>
<data name="menuSortServerResult" xml:space="preserve">
<value>Сортировать по результату теста</value>
</data>
<data name="menuSpeedServer" xml:space="preserve">
<value>Тест на скорость загрузки сервера (Ctrl+T)</value>
<value>Тест на скорость загрузки сервера</value>
</data>
<data name="menuTcpingServer" xml:space="preserve">
<value>Тест задержки с tcping (Ctrl+O)</value>
<value>Тест задержки с tcping</value>
</data>
<data name="menuExport2ClientConfig" xml:space="preserve">
<value>Экспортировать выбранный сервер для клиента</value>
</data>
<data name="menuExport2ShareUrl" xml:space="preserve">
<value>Экспорт URL-адресов общего доступа в буфер обмена (Ctrl+C)</value>
<value>Экспорт URL-адресов общего доступа в буфер обмена</value>
</data>
<data name="menuAddCustomServer" xml:space="preserve">
<value>Добавить сервер пользовательской конфигурации</value>
@@ -529,19 +529,19 @@
<value>Добавить сервер [VMess]</value>
</data>
<data name="menuSelectAll" xml:space="preserve">
<value>Выбрать все (Ctrl+A)</value>
<value>Выбрать все</value>
</data>
<data name="menuMsgViewClear" xml:space="preserve">
<value>Очистить все</value>
</data>
<data name="menuMsgViewCopy" xml:space="preserve">
<value>Скопировать (Ctrl+C)</value>
<value>Скопировать</value>
</data>
<data name="menuMsgViewCopyAll" xml:space="preserve">
<value>Скопировать все</value>
</data>
<data name="menuMsgViewSelectAll" xml:space="preserve">
<value>Выбрать все (Ctrl+A)</value>
<value>Выбрать все</value>
</data>
<data name="menuSubAdd" xml:space="preserve">
<value>Добавить</value>
@@ -781,7 +781,7 @@
<value>Режим PAC</value>
</data>
<data name="menuShareServer" xml:space="preserve">
<value>Поделиться сервером (Ctrl+F)</value>
<value>Поделиться сервером</value>
</data>
<data name="menuRouting" xml:space="preserve">
<value>Маршрутизация</value>
@@ -793,16 +793,16 @@
<value>Администратор</value>
</data>
<data name="menuMoveBottom" xml:space="preserve">
<value>Спуститься вниз (B)</value>
<value>Спуститься вниз</value>
</data>
<data name="menuMoveDown" xml:space="preserve">
<value>Вниз (D)</value>
<value>Вниз</value>
</data>
<data name="menuMoveTop" xml:space="preserve">
<value>Подняться наверх (T)</value>
<value>Подняться наверх</value>
</data>
<data name="menuMoveUp" xml:space="preserve">
<value>Вверх (U)</value>
<value>Вверх</value>
</data>
<data name="MsgFilterTitle" xml:space="preserve">
<value>Фильтр, поддерживает regex</value>
@@ -853,7 +853,7 @@
<value>Список правил</value>
</data>
<data name="menuRuleRemove" xml:space="preserve">
<value>Удалить правила (Delete)</value>
<value>Удалить правила</value>
</data>
<data name="menuRoutingRuleDetailsSetting" xml:space="preserve">
<value>Детальные настройки правил маршрутизации</value>
@@ -922,7 +922,7 @@
<value>Пропустить тест</value>
</data>
<data name="menuEditServer" xml:space="preserve">
<value>Редактировать сервер (Ctrl+D)</value>
<value>Редактировать сервер</value>
</data>
<data name="TbSettingsDoubleClick2Activate" xml:space="preserve">
<value>Двойной клик чтобы сделать сервер активным</value>
@@ -976,7 +976,10 @@
<value>Включить аппаратное ускорение (требуется перезагрузка)</value>
</data>
<data name="SpeedtestingWait" xml:space="preserve">
<value>Ожидание тестирования (нажмите ESC для отмены)…</value>
<value>Ожидание тестирования…</value>
</data>
<data name="SpeedtestingPressEscToExit" xml:space="preserve">
<value>нажмите ESC для отмены</value>
</data>
<data name="TipDisplayLog" xml:space="preserve">
<value>Отключите при аномальном разрыве соединения</value>
@@ -1204,7 +1207,7 @@
<value>Обновить прокси</value>
</data>
<data name="menuProxiesSelectActivity" xml:space="preserve">
<value>Сделать узел активным (Enter)</value>
<value>Сделать узел активным</value>
</data>
<data name="TbSettingsDomainStrategy4Out" xml:space="preserve">
<value>Стратегия домена по умолчанию для исходящих</value>

View File

@@ -472,10 +472,10 @@
<value>语言 (需重启)</value>
</data>
<data name="menuAddServerViaClipboard" xml:space="preserve">
<value>从剪贴板导入分享链接 (Ctrl+V)</value>
<value>从剪贴板导入分享链接</value>
</data>
<data name="menuAddServerViaScan" xml:space="preserve">
<value>扫描屏幕上的二维码 (Ctrl+S)</value>
<value>扫描屏幕上的二维码</value>
</data>
<data name="menuCopyServer" xml:space="preserve">
<value>克隆所选</value>
@@ -484,31 +484,31 @@
<value>移除重复</value>
</data>
<data name="menuRemoveServer" xml:space="preserve">
<value>移除所选 (多选) (Delete)</value>
<value>移除所选 (多选)</value>
</data>
<data name="menuSetDefaultServer" xml:space="preserve">
<value>设为活动 (Enter)</value>
<value>设为活动</value>
</data>
<data name="menuClearServerStatistics" xml:space="preserve">
<value>清除所有服务统计数据</value>
</data>
<data name="menuRealPingServer" xml:space="preserve">
<value>测试真连接延迟 (多选) (Ctrl+R)</value>
<value>测试真连接延迟 (多选)</value>
</data>
<data name="menuSortServerResult" xml:space="preserve">
<value>按测试结果排序</value>
</data>
<data name="menuSpeedServer" xml:space="preserve">
<value>测试速度 (多选) (Ctrl+T)</value>
<value>测试速度 (多选)</value>
</data>
<data name="menuTcpingServer" xml:space="preserve">
<value>测试延迟 Tcping (多选) (Ctrl+O)</value>
<value>测试延迟 Tcping (多选)</value>
</data>
<data name="menuExport2ClientConfig" xml:space="preserve">
<value>导出所选完整配置</value>
</data>
<data name="menuExport2ShareUrl" xml:space="preserve">
<value>导出分享链接至剪贴板 (多选) (Ctrl+C)</value>
<value>导出分享链接至剪贴板 (多选)</value>
</data>
<data name="menuAddCustomServer" xml:space="preserve">
<value>添加自定义配置</value>
@@ -529,19 +529,19 @@
<value>添加 [VMess] </value>
</data>
<data name="menuSelectAll" xml:space="preserve">
<value>全选 (Ctrl+A)</value>
<value>全选</value>
</data>
<data name="menuMsgViewClear" xml:space="preserve">
<value>清除所有</value>
</data>
<data name="menuMsgViewCopy" xml:space="preserve">
<value>复制 (Ctrl+C)</value>
<value>复制</value>
</data>
<data name="menuMsgViewCopyAll" xml:space="preserve">
<value>复制所有</value>
</data>
<data name="menuMsgViewSelectAll" xml:space="preserve">
<value>全选 (Ctrl+A)</value>
<value>全选</value>
</data>
<data name="menuSubAdd" xml:space="preserve">
<value>添加</value>
@@ -781,7 +781,7 @@
<value>Pac 模式</value>
</data>
<data name="menuShareServer" xml:space="preserve">
<value>分享 (Ctrl+F)</value>
<value>分享</value>
</data>
<data name="menuRouting" xml:space="preserve">
<value>路由</value>
@@ -793,16 +793,16 @@
<value>以管理员身份运行</value>
</data>
<data name="menuMoveBottom" xml:space="preserve">
<value>下移至底 (B)</value>
<value>下移至底</value>
</data>
<data name="menuMoveDown" xml:space="preserve">
<value>下移 (D)</value>
<value>下移</value>
</data>
<data name="menuMoveTop" xml:space="preserve">
<value>上移至顶 (T)</value>
<value>上移至顶</value>
</data>
<data name="menuMoveUp" xml:space="preserve">
<value>上移 (U)</value>
<value>上移</value>
</data>
<data name="MsgFilterTitle" xml:space="preserve">
<value>过滤器 (支持正则)</value>
@@ -817,10 +817,10 @@
<value>一键导入规则集</value>
</data>
<data name="menuRoutingAdvancedRemove" xml:space="preserve">
<value>移除所选规则 (Delete)</value>
<value>移除所选规则</value>
</data>
<data name="menuRoutingAdvancedSetDefault" xml:space="preserve">
<value>设为活动规则 (Enter)</value>
<value>设为活动规则</value>
</data>
<data name="TbdomainStrategy" xml:space="preserve">
<value>域名解析策略</value>
@@ -853,7 +853,7 @@
<value>规则列表</value>
</data>
<data name="menuRuleRemove" xml:space="preserve">
<value>移除所选规则 (Delete)</value>
<value>移除所选规则</value>
</data>
<data name="menuRoutingRuleDetailsSetting" xml:space="preserve">
<value>路由规则详情设置</value>
@@ -922,7 +922,7 @@
<value>跳过测试</value>
</data>
<data name="menuEditServer" xml:space="preserve">
<value>编辑 (Ctrl+D)</value>
<value>编辑</value>
</data>
<data name="TbSettingsDoubleClick2Activate" xml:space="preserve">
<value>主界面双击设为活动</value>
@@ -976,7 +976,10 @@
<value>启用硬件加速 (需重启)</value>
</data>
<data name="SpeedtestingWait" xml:space="preserve">
<value>等待测试中 (按 ESC 终止)...</value>
<value>等待测试...</value>
</data>
<data name="SpeedtestingPressEscToExit" xml:space="preserve">
<value>按 ESC 可终止测试</value>
</data>
<data name="TipDisplayLog" xml:space="preserve">
<value>当有异常断流时请关闭</value>
@@ -1201,7 +1204,7 @@
<value>刷新</value>
</data>
<data name="menuProxiesSelectActivity" xml:space="preserve">
<value>设为活动 (Enter)</value>
<value>设为活动</value>
</data>
<data name="TbSettingsDomainStrategy4Out" xml:space="preserve">
<value>Outbound 默认解析策略</value>

View File

@@ -472,10 +472,10 @@
<value>語言 (需重啟)</value>
</data>
<data name="menuAddServerViaClipboard" xml:space="preserve">
<value>從剪貼簿導入分享連結 (Ctrl+V)</value>
<value>從剪貼簿導入分享連結</value>
</data>
<data name="menuAddServerViaScan" xml:space="preserve">
<value>掃描螢幕上的二維碼 (Ctrl+S)</value>
<value>掃描螢幕上的二維碼</value>
</data>
<data name="menuCopyServer" xml:space="preserve">
<value>複製所選</value>
@@ -484,31 +484,31 @@
<value>移除重複</value>
</data>
<data name="menuRemoveServer" xml:space="preserve">
<value>移除所選 (多選) (Delete)</value>
<value>移除所選 (多選)</value>
</data>
<data name="menuSetDefaultServer" xml:space="preserve">
<value>設為活動 (Enter)</value>
<value>設為活動</value>
</data>
<data name="menuClearServerStatistics" xml:space="preserve">
<value>清除所有服務統計資料</value>
</data>
<data name="menuRealPingServer" xml:space="preserve">
<value>測試真連線延遲 (多選) (Ctrl+R)</value>
<value>測試真連線延遲 (多選)</value>
</data>
<data name="menuSortServerResult" xml:space="preserve">
<value>按測試結果排序</value>
</data>
<data name="menuSpeedServer" xml:space="preserve">
<value>測試速度 (多選) (Ctrl+T)</value>
<value>測試速度 (多選)</value>
</data>
<data name="menuTcpingServer" xml:space="preserve">
<value>測試延遲 Tcping (多選) (Ctrl+O)</value>
<value>測試延遲 Tcping (多選)</value>
</data>
<data name="menuExport2ClientConfig" xml:space="preserve">
<value>匯出所選完整設定</value>
</data>
<data name="menuExport2ShareUrl" xml:space="preserve">
<value>匯出分享連結至剪貼簿 (多選) (Ctrl+C)</value>
<value>匯出分享連結至剪貼簿 (多選)</value>
</data>
<data name="menuAddCustomServer" xml:space="preserve">
<value>新增自訂節點</value>
@@ -529,19 +529,19 @@
<value>新增 [VMess] 節點</value>
</data>
<data name="menuSelectAll" xml:space="preserve">
<value>全選 (Ctrl+A)</value>
<value>全選</value>
</data>
<data name="menuMsgViewClear" xml:space="preserve">
<value>清除所有</value>
</data>
<data name="menuMsgViewCopy" xml:space="preserve">
<value>複製 (Ctrl+C)</value>
<value>複製</value>
</data>
<data name="menuMsgViewCopyAll" xml:space="preserve">
<value>複製所有</value>
</data>
<data name="menuMsgViewSelectAll" xml:space="preserve">
<value>全選 (Ctrl+A)</value>
<value>全選</value>
</data>
<data name="menuSubAdd" xml:space="preserve">
<value>新增</value>
@@ -781,7 +781,7 @@
<value>PAC 模式</value>
</data>
<data name="menuShareServer" xml:space="preserve">
<value>分享 (Ctrl+F)</value>
<value>分享</value>
</data>
<data name="menuRouting" xml:space="preserve">
<value>路由</value>
@@ -793,16 +793,16 @@
<value>以管理員身份執行</value>
</data>
<data name="menuMoveBottom" xml:space="preserve">
<value>下移至底部 (B)</value>
<value>下移至底部</value>
</data>
<data name="menuMoveDown" xml:space="preserve">
<value>下移 (D)</value>
<value>下移</value>
</data>
<data name="menuMoveTop" xml:space="preserve">
<value>上移至頂部 (T)</value>
<value>上移至頂部</value>
</data>
<data name="menuMoveUp" xml:space="preserve">
<value>上移 (U)</value>
<value>上移</value>
</data>
<data name="MsgFilterTitle" xml:space="preserve">
<value>過濾 (允許正則)</value>
@@ -817,10 +817,10 @@
<value>一鍵匯入規則集</value>
</data>
<data name="menuRoutingAdvancedRemove" xml:space="preserve">
<value>移除所選規則 (Delete)</value>
<value>移除所選規則</value>
</data>
<data name="menuRoutingAdvancedSetDefault" xml:space="preserve">
<value>設為活動規則 (Enter)</value>
<value>設為活動規則</value>
</data>
<data name="TbdomainStrategy" xml:space="preserve">
<value>域名解析策略</value>
@@ -853,7 +853,7 @@
<value>規則列表</value>
</data>
<data name="menuRuleRemove" xml:space="preserve">
<value>移除所選規則 (Delete)</value>
<value>移除所選規則</value>
</data>
<data name="menuRoutingRuleDetailsSetting" xml:space="preserve">
<value>路由規則詳情設定</value>
@@ -922,7 +922,7 @@
<value>跳過測試</value>
</data>
<data name="menuEditServer" xml:space="preserve">
<value>編輯 (Ctrl+D)</value>
<value>編輯</value>
</data>
<data name="TbSettingsDoubleClick2Activate" xml:space="preserve">
<value>主介面輕按兩下設為活動</value>
@@ -976,7 +976,10 @@
<value>啟用硬體加速 (需重啟)</value>
</data>
<data name="SpeedtestingWait" xml:space="preserve">
<value>等待測試中(按 ESC 終止)...</value>
<value>等待測試中...</value>
</data>
<data name="SpeedtestingPressEscToExit" xml:space="preserve">
<value>按 ECS 以終止測試</value>
</data>
<data name="TipDisplayLog" xml:space="preserve">
<value>當有異常斷流時請關閉</value>
@@ -1201,7 +1204,7 @@
<value>重新整理</value>
</data>
<data name="menuProxiesSelectActivity" xml:space="preserve">
<value>設為活動節點 (Enter)</value>
<value>設為活動節點</value>
</data>
<data name="TbSettingsDomainStrategy4Out" xml:space="preserve">
<value>Outbound 預設解析策略</value>
@@ -1632,4 +1635,4 @@
<data name="TbSettingsMacOSShowInDock" xml:space="preserve">
<value>macOS 在 Dock 欄顯示 (需重啟)</value>
</data>
</root>
</root>

View File

@@ -300,7 +300,7 @@ public partial class CoreConfigSingboxService
private bool ParseV2Domain(string domain, Rule4Sbox rule)
{
if (domain.StartsWith("#") || domain.StartsWith("ext:") || domain.StartsWith("ext-domain:"))
if (domain.StartsWith('#') || domain.StartsWith("ext:") || domain.StartsWith("ext-domain:"))
{
return false;
}

View File

@@ -19,7 +19,7 @@ public class SpeedtestService(Config config, Func<SpeedTestResult, Task> updateF
public void ExitLoop()
{
if (_lstExitLoop.Count > 0)
if (!_lstExitLoop.IsEmpty)
{
_ = UpdateFunc("", ResUI.SpeedtestingStop);
@@ -27,6 +27,11 @@ public class SpeedtestService(Config config, Func<SpeedTestResult, Task> updateF
}
}
private static bool ShouldStopTest(string exitLoopKey)
{
return !_lstExitLoop.Any(p => p == exitLoopKey);
}
private async Task RunAsync(ESpeedActionType actionType, List<ProfileItem> selecteds)
{
var exitLoopKey = Utils.GetGuid(false);
@@ -103,6 +108,11 @@ public class SpeedtestService(Config config, Func<SpeedTestResult, Task> updateF
}
}
if (lstSelected.Count > 1 && (actionType == ESpeedActionType.Speedtest || actionType == ESpeedActionType.Mixedtest))
{
NoticeManager.Instance.Enqueue(ResUI.SpeedtestingPressEscToExit);
}
return lstSelected;
}
@@ -152,7 +162,7 @@ public class SpeedtestService(Config config, Func<SpeedTestResult, Task> updateF
var pageSizeNext = pageSize / 2;
if (lstFailed.Count > 0 && pageSizeNext > 0)
{
if (_lstExitLoop.Any(p => p == exitLoopKey) == false)
if (ShouldStopTest(exitLoopKey))
{
await UpdateFunc("", ResUI.SpeedtestingSkip);
return;
@@ -190,6 +200,12 @@ public class SpeedtestService(Config config, Func<SpeedTestResult, Task> updateF
{
continue;
}
if (ShouldStopTest(exitLoopKey))
{
return false;
}
tasks.Add(Task.Run(async () =>
{
await DoRealPing(it);
@@ -218,7 +234,7 @@ public class SpeedtestService(Config config, Func<SpeedTestResult, Task> updateF
List<Task> tasks = new();
foreach (var it in selecteds)
{
if (_lstExitLoop.Any(p => p == exitLoopKey) == false)
if (ShouldStopTest(exitLoopKey))
{
await UpdateFunc(it.IndexId, "", ResUI.SpeedtestingSkip);
continue;
@@ -234,21 +250,27 @@ public class SpeedtestService(Config config, Func<SpeedTestResult, Task> updateF
if (processService is null)
{
await UpdateFunc(it.IndexId, "", ResUI.FailedToRunCore);
return;
}
else
await Task.Delay(1000);
var delay = await DoRealPing(it);
if (blSpeedTest)
{
await Task.Delay(1000);
var delay = await DoRealPing(it);
if (blSpeedTest)
if (ShouldStopTest(exitLoopKey))
{
if (delay > 0)
{
await DoSpeedTest(downloadHandle, it);
}
else
{
await UpdateFunc(it.IndexId, "", ResUI.SpeedtestingSkip);
}
await UpdateFunc(it.IndexId, "", ResUI.SpeedtestingSkip);
return;
}
if (delay > 0)
{
await DoSpeedTest(downloadHandle, it);
}
else
{
await UpdateFunc(it.IndexId, "", ResUI.SpeedtestingSkip);
}
}
}

View File

@@ -1,14 +1,31 @@
using System;
using System.Collections.Generic;
using System.IO;
using Avalonia;
using Avalonia.Media;
namespace v2rayN.Desktop.Common;
public static class AppBuilderExtension
{
public static AppBuilder WithFontByDefault(this AppBuilder appBuilder)
{
var uri = Path.Combine(Global.AvaAssets, "Fonts#Noto Sans SC");
return appBuilder.With(new FontManagerOptions()
var fallbacks = new List<FontFallback>();
var notoSansSc = new FontFamily(Path.Combine(Global.AvaAssets, "Fonts#Noto Sans SC"));
fallbacks.Add(new FontFallback { FontFamily = notoSansSc });
if (OperatingSystem.IsLinux())
{
//DefaultFamilyName = uri,
FontFallbacks = new[] { new FontFallback { FontFamily = new FontFamily(uri) } }
fallbacks.Add(new FontFallback
{
FontFamily = new FontFamily("Noto Color Emoji")
});
}
return appBuilder.With(new FontManagerOptions
{
FontFallbacks = fallbacks.ToArray()
});
}
}

View File

@@ -152,13 +152,31 @@
<DataGrid.ContextMenu>
<ContextMenu>
<MenuItem x:Name="menuAddChildServer" Header="{x:Static resx:ResUI.menuAddChildServer}" />
<MenuItem x:Name="menuRemoveChildServer" Header="{x:Static resx:ResUI.menuRemoveChildServer}" />
<MenuItem x:Name="menuSelectAllChild" Header="{x:Static resx:ResUI.menuSelectAll}" />
<MenuItem
x:Name="menuRemoveChildServer"
Header="{x:Static resx:ResUI.menuRemoveChildServer}"
InputGesture="Back" />
<MenuItem
x:Name="menuSelectAllChild"
Header="{x:Static resx:ResUI.menuSelectAll}"
InputGesture="Ctrl+A" />
<Separator />
<MenuItem x:Name="menuMoveTop" Header="{x:Static resx:ResUI.menuMoveTop}" />
<MenuItem x:Name="menuMoveUp" Header="{x:Static resx:ResUI.menuMoveUp}" />
<MenuItem x:Name="menuMoveDown" Header="{x:Static resx:ResUI.menuMoveDown}" />
<MenuItem x:Name="menuMoveBottom" Header="{x:Static resx:ResUI.menuMoveBottom}" />
<MenuItem
x:Name="menuMoveTop"
Header="{x:Static resx:ResUI.menuMoveTop}"
InputGesture="T" />
<MenuItem
x:Name="menuMoveUp"
Header="{x:Static resx:ResUI.menuMoveUp}"
InputGesture="U" />
<MenuItem
x:Name="menuMoveDown"
Header="{x:Static resx:ResUI.menuMoveDown}"
InputGesture="D" />
<MenuItem
x:Name="menuMoveBottom"
Header="{x:Static resx:ResUI.menuMoveBottom}"
InputGesture="B" />
</ContextMenu>
</DataGrid.ContextMenu>
<DataGrid.Columns>

View File

@@ -132,6 +132,7 @@ public partial class AddGroupServerWindow : WindowBase<AddGroupServerViewModel>
break;
case Key.Delete:
case Key.Back:
ViewModel?.ChildRemoveAsync();
e.Handled = true;
break;

View File

@@ -110,7 +110,10 @@
<ItemsControl.ContextMenu>
<ContextMenu>
<MenuItem x:Name="menuProxiesDelaytestPart" Header="{x:Static resx:ResUI.menuProxiesDelaytestPart}" />
<MenuItem x:Name="menuProxiesSelectActivity" Header="{x:Static resx:ResUI.menuProxiesSelectActivity}" />
<MenuItem
x:Name="menuProxiesSelectActivity"
Header="{x:Static resx:ResUI.menuProxiesSelectActivity}"
InputGesture="Enter" />
</ContextMenu>
</ItemsControl.ContextMenu>
<ItemsControl.ItemsPanel>

View File

@@ -26,8 +26,14 @@
<ContentControl x:Name="conTheme" DockPanel.Dock="Right" />
<Menu Margin="{StaticResource Margin4}">
<MenuItem Header="{x:Static resx:ResUI.menuServers}">
<MenuItem x:Name="menuAddServerViaClipboard" Header="{x:Static resx:ResUI.menuAddServerViaClipboard}" />
<MenuItem x:Name="menuAddServerViaScan" Header="{x:Static resx:ResUI.menuAddServerViaScan}" />
<MenuItem
x:Name="menuAddServerViaClipboard"
Header="{x:Static resx:ResUI.menuAddServerViaClipboard}"
InputGesture="Ctrl+V" />
<MenuItem
x:Name="menuAddServerViaScan"
Header="{x:Static resx:ResUI.menuAddServerViaScan}"
InputGesture="Ctrl+S" />
<MenuItem x:Name="menuAddServerViaImage" Header="{x:Static resx:ResUI.menuAddServerViaImage}" />
<MenuItem x:Name="menuAddCustomServer" Header="{x:Static resx:ResUI.menuAddCustomServer}" />
<MenuItem x:Name="menuAddPolicyGroupServer" Header="{x:Static resx:ResUI.menuAddPolicyGroupServer}" />

View File

@@ -72,18 +72,20 @@
VerticalScrollBarVisibility="Auto"
WordWrap="True">
<avaloniaEdit:TextEditor.Options>
<avaloniaEdit:TextEditorOptions AllowScrollBelowDocument="False"/>
<avaloniaEdit:TextEditorOptions AllowScrollBelowDocument="False" />
</avaloniaEdit:TextEditor.Options>
<avaloniaEdit:TextEditor.ContextFlyout>
<MenuFlyout>
<MenuItem
x:Name="menuMsgViewSelectAll"
Click="menuMsgViewSelectAll_Click"
InputGesture="Ctrl+A"
Header="{x:Static resx:ResUI.menuMsgViewSelectAll}" />
<MenuItem
x:Name="menuMsgViewCopy"
Click="menuMsgViewCopy_Click"
Header="{x:Static resx:ResUI.menuMsgViewCopy}" />
Header="{x:Static resx:ResUI.menuMsgViewCopy}"
InputGesture="Ctrl+C" />
<MenuItem
x:Name="menuMsgViewCopyAll"
Click="menuMsgViewCopyAll_Click"

View File

@@ -103,16 +103,34 @@
</DataGrid.KeyBindings>
<DataGrid.ContextMenu>
<ContextMenu>
<MenuItem x:Name="menuSetDefaultServer" Header="{x:Static resx:ResUI.menuSetDefaultServer}" />
<MenuItem x:Name="menuEditServer" Header="{x:Static resx:ResUI.menuEditServer}" />
<MenuItem
x:Name="menuSetDefaultServer"
Header="{x:Static resx:ResUI.menuSetDefaultServer}"
InputGesture="Enter" />
<MenuItem
x:Name="menuEditServer"
Header="{x:Static resx:ResUI.menuEditServer}"
InputGesture="Ctrl+D" />
<MenuItem x:Name="menuCopyServer" Header="{x:Static resx:ResUI.menuCopyServer}" />
<MenuItem x:Name="menuRemoveServer" Header="{x:Static resx:ResUI.menuRemoveServer}" />
<MenuItem
x:Name="menuRemoveServer"
Header="{x:Static resx:ResUI.menuRemoveServer}"
InputGesture="Back" />
<MenuItem x:Name="menuRemoveDuplicateServer" Header="{x:Static resx:ResUI.menuRemoveDuplicateServer}" />
<MenuItem x:Name="menuRemoveInvalidServerResult" Header="{x:Static resx:ResUI.menuRemoveInvalidServerResult}" />
<Separator />
<MenuItem x:Name="menuTcpingServer" Header="{x:Static resx:ResUI.menuTcpingServer}" />
<MenuItem x:Name="menuRealPingServer" Header="{x:Static resx:ResUI.menuRealPingServer}" />
<MenuItem x:Name="menuSpeedServer" Header="{x:Static resx:ResUI.menuSpeedServer}" />
<MenuItem
x:Name="menuTcpingServer"
Header="{x:Static resx:ResUI.menuTcpingServer}"
InputGesture="Ctrl+O" />
<MenuItem
x:Name="menuRealPingServer"
Header="{x:Static resx:ResUI.menuRealPingServer}"
InputGesture="Ctrl+R" />
<MenuItem
x:Name="menuSpeedServer"
Header="{x:Static resx:ResUI.menuSpeedServer}"
InputGesture="Ctrl+T" />
<MenuItem x:Name="menuSortServerResult" Header="{x:Static resx:ResUI.menuSortServerResult}" />
<Separator />
<MenuItem x:Name="menuMoveToGroup" Header="{x:Static resx:ResUI.menuMoveToGroup}">
@@ -130,19 +148,40 @@
</MenuItem>
</MenuItem>
<MenuItem Header="{x:Static resx:ResUI.menuMoveTo}">
<MenuItem x:Name="menuMoveTop" Header="{x:Static resx:ResUI.menuMoveTop}" />
<MenuItem x:Name="menuMoveUp" Header="{x:Static resx:ResUI.menuMoveUp}" />
<MenuItem x:Name="menuMoveDown" Header="{x:Static resx:ResUI.menuMoveDown}" />
<MenuItem x:Name="menuMoveBottom" Header="{x:Static resx:ResUI.menuMoveBottom}" />
<MenuItem
x:Name="menuMoveTop"
Header="{x:Static resx:ResUI.menuMoveTop}"
InputGesture="T" />
<MenuItem
x:Name="menuMoveUp"
Header="{x:Static resx:ResUI.menuMoveUp}"
InputGesture="U" />
<MenuItem
x:Name="menuMoveDown"
Header="{x:Static resx:ResUI.menuMoveDown}"
InputGesture="D" />
<MenuItem
x:Name="menuMoveBottom"
Header="{x:Static resx:ResUI.menuMoveBottom}"
InputGesture="B" />
</MenuItem>
<MenuItem x:Name="menuSelectAll" Header="{x:Static resx:ResUI.menuSelectAll}" />
<MenuItem
x:Name="menuSelectAll"
Header="{x:Static resx:ResUI.menuSelectAll}"
InputGesture="Ctrl+A" />
<Separator />
<MenuItem x:Name="menuShareServer" Header="{x:Static resx:ResUI.menuShareServer}" />
<MenuItem
x:Name="menuShareServer"
Header="{x:Static resx:ResUI.menuShareServer}"
InputGesture="Ctrl+F" />
<MenuItem Header="{x:Static resx:ResUI.menuExportConfig}">
<MenuItem x:Name="menuExport2ClientConfig" Header="{x:Static resx:ResUI.menuExport2ClientConfig}" />
<MenuItem x:Name="menuExport2ClientConfigClipboard" Header="{x:Static resx:ResUI.menuExport2ClientConfigClipboard}" />
<Separator />
<MenuItem x:Name="menuExport2ShareUrl" Header="{x:Static resx:ResUI.menuExport2ShareUrl}" />
<MenuItem
x:Name="menuExport2ShareUrl"
Header="{x:Static resx:ResUI.menuExport2ShareUrl}"
InputGesture="Ctrl+C" />
<MenuItem x:Name="menuExport2ShareUrlBase64" Header="{x:Static resx:ResUI.menuExport2ShareUrlBase64}" />
</MenuItem>
<Separator />

View File

@@ -313,33 +313,37 @@ public partial class ProfilesView : ReactiveUserControl<ProfilesViewModel>
}
else
{
if (e.Key is Key.Enter or Key.Return)
switch (e.Key)
{
ViewModel?.SetDefaultServer();
}
else if (e.Key == Key.Delete)
{
ViewModel?.RemoveServerAsync();
}
else if (e.Key == Key.T)
{
ViewModel?.MoveServer(EMove.Top);
}
else if (e.Key == Key.U)
{
ViewModel?.MoveServer(EMove.Up);
}
else if (e.Key == Key.D)
{
ViewModel?.MoveServer(EMove.Down);
}
else if (e.Key == Key.B)
{
ViewModel?.MoveServer(EMove.Bottom);
}
else if (e.Key == Key.Escape)
{
ViewModel?.ServerSpeedtestStop();
case Key.Enter:
//case Key.Return:
ViewModel?.SetDefaultServer();
break;
case Key.Delete:
case Key.Back:
ViewModel?.RemoveServerAsync();
break;
case Key.T:
ViewModel?.MoveServer(EMove.Top);
break;
case Key.U:
ViewModel?.MoveServer(EMove.Up);
break;
case Key.D:
ViewModel?.MoveServer(EMove.Down);
break;
case Key.B:
ViewModel?.MoveServer(EMove.Bottom);
break;
case Key.Escape:
ViewModel?.ServerSpeedtestStop();
break;
}
}
}

View File

@@ -184,14 +184,32 @@
<DataGrid.ContextMenu>
<ContextMenu>
<MenuItem x:Name="menuRuleAdd2" Header="{x:Static resx:ResUI.menuRuleAdd}" />
<MenuItem x:Name="menuRuleRemove" Header="{x:Static resx:ResUI.menuRuleRemove}" />
<MenuItem x:Name="menuRuleSelectAll" Header="{x:Static resx:ResUI.menuSelectAll}" />
<MenuItem
x:Name="menuRuleRemove"
Header="{x:Static resx:ResUI.menuRuleRemove}"
InputGesture="Back" />
<MenuItem
x:Name="menuRuleSelectAll"
Header="{x:Static resx:ResUI.menuSelectAll}"
InputGesture="Ctrl+A" />
<MenuItem x:Name="menuRuleExportSelected" Header="{x:Static resx:ResUI.menuRuleExportSelected}" />
<Separator />
<MenuItem x:Name="menuMoveTop" Header="{x:Static resx:ResUI.menuMoveTop}" />
<MenuItem x:Name="menuMoveUp" Header="{x:Static resx:ResUI.menuMoveUp}" />
<MenuItem x:Name="menuMoveDown" Header="{x:Static resx:ResUI.menuMoveDown}" />
<MenuItem x:Name="menuMoveBottom" Header="{x:Static resx:ResUI.menuMoveBottom}" />
<MenuItem
x:Name="menuMoveTop"
Header="{x:Static resx:ResUI.menuMoveTop}"
InputGesture="T" />
<MenuItem
x:Name="menuMoveUp"
Header="{x:Static resx:ResUI.menuMoveUp}"
InputGesture="U" />
<MenuItem
x:Name="menuMoveDown"
Header="{x:Static resx:ResUI.menuMoveDown}"
InputGesture="D" />
<MenuItem
x:Name="menuMoveBottom"
Header="{x:Static resx:ResUI.menuMoveBottom}"
InputGesture="B" />
</ContextMenu>
</DataGrid.ContextMenu>
<DataGrid.Columns>

View File

@@ -140,25 +140,28 @@ public partial class RoutingRuleSettingWindow : WindowBase<RoutingRuleSettingVie
}
else
{
if (e.Key == Key.T)
switch (e.Key)
{
ViewModel?.MoveRule(EMove.Top);
}
else if (e.Key == Key.U)
{
ViewModel?.MoveRule(EMove.Up);
}
else if (e.Key == Key.D)
{
ViewModel?.MoveRule(EMove.Down);
}
else if (e.Key == Key.B)
{
ViewModel?.MoveRule(EMove.Bottom);
}
else if (e.Key == Key.Delete)
{
ViewModel?.RuleRemoveAsync();
case Key.T:
ViewModel?.MoveRule(EMove.Top);
break;
case Key.U:
ViewModel?.MoveRule(EMove.Up);
break;
case Key.D:
ViewModel?.MoveRule(EMove.Down);
break;
case Key.B:
ViewModel?.MoveRule(EMove.Bottom);
break;
case Key.Delete:
case Key.Back:
ViewModel?.RuleRemoveAsync();
break;
}
}
}

View File

@@ -99,9 +99,18 @@
<DataGrid.ContextMenu>
<ContextMenu>
<MenuItem x:Name="menuRoutingAdvancedAdd" Header="{x:Static resx:ResUI.menuRoutingAdvancedAdd}" />
<MenuItem x:Name="menuRoutingAdvancedRemove" Header="{x:Static resx:ResUI.menuRoutingAdvancedRemove}" />
<MenuItem x:Name="menuRoutingAdvancedSelectAll" Header="{x:Static resx:ResUI.menuSelectAll}" />
<MenuItem x:Name="menuRoutingAdvancedSetDefault" Header="{x:Static resx:ResUI.menuRoutingAdvancedSetDefault}" />
<MenuItem
x:Name="menuRoutingAdvancedRemove"
Header="{x:Static resx:ResUI.menuRoutingAdvancedRemove}"
InputGesture="Back" />
<MenuItem
x:Name="menuRoutingAdvancedSelectAll"
Header="{x:Static resx:ResUI.menuSelectAll}"
InputGesture="Ctrl+A" />
<MenuItem
x:Name="menuRoutingAdvancedSetDefault"
Header="{x:Static resx:ResUI.menuRoutingAdvancedSetDefault}"
InputGesture="Enter" />
<Separator />
<MenuItem x:Name="menuRoutingAdvancedImportRules" Header="{x:Static resx:ResUI.menuRoutingAdvancedImportRules}" />
</ContextMenu>

View File

@@ -73,18 +73,27 @@ public partial class RoutingSettingWindow : WindowBase<RoutingSettingViewModel>
{
if (e.KeyModifiers is KeyModifiers.Control or KeyModifiers.Meta)
{
if (e.Key == Key.A)
switch (e.Key)
{
lstRoutings.SelectAll();
case Key.A:
lstRoutings.SelectAll();
break;
}
}
else if (e.Key is Key.Enter or Key.Return)
else
{
ViewModel?.RoutingAdvancedSetDefault();
}
else if (e.Key == Key.Delete)
{
ViewModel?.RoutingAdvancedRemoveAsync();
switch (e.Key)
{
case Key.Enter:
//case Key.Return:
ViewModel?.RoutingAdvancedSetDefault();
break;
case Key.Delete:
case Key.Back:
ViewModel?.RoutingAdvancedRemoveAsync();
break;
}
}
}

View File

@@ -218,24 +218,29 @@
<MenuItem
x:Name="menuSelectAllChild"
Height="{StaticResource MenuItemHeight}"
Header="{x:Static resx:ResUI.menuSelectAll}" />
Header="{x:Static resx:ResUI.menuSelectAll}"
InputGestureText="Ctrl+A" />
<Separator />
<MenuItem
x:Name="menuMoveTop"
Height="{StaticResource MenuItemHeight}"
Header="{x:Static resx:ResUI.menuMoveTop}" />
Header="{x:Static resx:ResUI.menuMoveTop}"
InputGestureText="T" />
<MenuItem
x:Name="menuMoveUp"
Height="{StaticResource MenuItemHeight}"
Header="{x:Static resx:ResUI.menuMoveUp}" />
Header="{x:Static resx:ResUI.menuMoveUp}"
InputGestureText="U" />
<MenuItem
x:Name="menuMoveDown"
Height="{StaticResource MenuItemHeight}"
Header="{x:Static resx:ResUI.menuMoveDown}" />
Header="{x:Static resx:ResUI.menuMoveDown}"
InputGestureText="D" />
<MenuItem
x:Name="menuMoveBottom"
Height="{StaticResource MenuItemHeight}"
Header="{x:Static resx:ResUI.menuMoveBottom}" />
Header="{x:Static resx:ResUI.menuMoveBottom}"
InputGestureText="B" />
</ContextMenu>
</DataGrid.ContextMenu>
<DataGrid.Columns>

View File

@@ -91,25 +91,28 @@ public partial class AddGroupServerWindow
}
else
{
if (e.Key == Key.T)
switch (e.Key)
{
ViewModel?.MoveServer(EMove.Top);
}
else if (e.Key == Key.U)
{
ViewModel?.MoveServer(EMove.Up);
}
else if (e.Key == Key.D)
{
ViewModel?.MoveServer(EMove.Down);
}
else if (e.Key == Key.B)
{
ViewModel?.MoveServer(EMove.Bottom);
}
else if (e.Key == Key.Delete)
{
ViewModel?.ChildRemoveAsync();
case Key.T:
ViewModel?.MoveServer(EMove.Top);
break;
case Key.U:
ViewModel?.MoveServer(EMove.Up);
break;
case Key.D:
ViewModel?.MoveServer(EMove.Down);
break;
case Key.B:
ViewModel?.MoveServer(EMove.Bottom);
break;
case Key.Delete:
case Key.Back:
ViewModel?.ChildRemoveAsync();
break;
}
}
}

View File

@@ -142,7 +142,10 @@
<ListView.ContextMenu>
<ContextMenu Style="{StaticResource DefContextMenu}">
<MenuItem x:Name="menuProxiesDelaytestPart" Header="{x:Static resx:ResUI.menuProxiesDelaytestPart}" />
<MenuItem x:Name="menuProxiesSelectActivity" Header="{x:Static resx:ResUI.menuProxiesSelectActivity}" />
<MenuItem
x:Name="menuProxiesSelectActivity"
Header="{x:Static resx:ResUI.menuProxiesSelectActivity}"
InputGestureText="Enter" />
</ContextMenu>
</ListView.ContextMenu>
<ListView.ItemsPanel>

View File

@@ -58,11 +58,13 @@
<MenuItem
x:Name="menuAddServerViaClipboard"
Height="{StaticResource MenuItemHeight}"
Header="{x:Static resx:ResUI.menuAddServerViaClipboard}" />
Header="{x:Static resx:ResUI.menuAddServerViaClipboard}"
InputGestureText="Ctrl+V" />
<MenuItem
x:Name="menuAddServerViaScan"
Height="{StaticResource MenuItemHeight}"
Header="{x:Static resx:ResUI.menuAddServerViaScan}" />
Header="{x:Static resx:ResUI.menuAddServerViaScan}"
InputGestureText="Ctrl+S" />
<MenuItem
x:Name="menuAddServerViaImage"
Height="{StaticResource MenuItemHeight}"

View File

@@ -91,11 +91,13 @@
<MenuItem
x:Name="menuMsgViewSelectAll"
Height="{StaticResource MenuItemHeight}"
Header="{x:Static resx:ResUI.menuMsgViewSelectAll}" />
Header="{x:Static resx:ResUI.menuMsgViewSelectAll}"
InputGestureText="Ctrl+A" />
<MenuItem
x:Name="menuMsgViewCopy"
Height="{StaticResource MenuItemHeight}"
Header="{x:Static resx:ResUI.menuMsgViewCopy}" />
Header="{x:Static resx:ResUI.menuMsgViewCopy}"
InputGestureText="Ctrl+C" />
<MenuItem
x:Name="menuMsgViewCopyAll"
Height="{StaticResource MenuItemHeight}"

View File

@@ -123,11 +123,13 @@
<MenuItem
x:Name="menuSetDefaultServer"
Height="{StaticResource MenuItemHeight}"
Header="{x:Static resx:ResUI.menuSetDefaultServer}" />
Header="{x:Static resx:ResUI.menuSetDefaultServer}"
InputGestureText="Enter" />
<MenuItem
x:Name="menuEditServer"
Height="{StaticResource MenuItemHeight}"
Header="{x:Static resx:ResUI.menuEditServer}" />
Header="{x:Static resx:ResUI.menuEditServer}"
InputGestureText="Ctrl+D" />
<MenuItem
x:Name="menuCopyServer"
Height="{StaticResource MenuItemHeight}"
@@ -135,7 +137,8 @@
<MenuItem
x:Name="menuRemoveServer"
Height="{StaticResource MenuItemHeight}"
Header="{x:Static resx:ResUI.menuRemoveServer}" />
Header="{x:Static resx:ResUI.menuRemoveServer}"
InputGestureText="Back" />
<MenuItem
x:Name="menuRemoveDuplicateServer"
Height="{StaticResource MenuItemHeight}"
@@ -148,15 +151,18 @@
<MenuItem
x:Name="menuTcpingServer"
Height="{StaticResource MenuItemHeight}"
Header="{x:Static resx:ResUI.menuTcpingServer}" />
Header="{x:Static resx:ResUI.menuTcpingServer}"
InputGestureText="Ctrl+O" />
<MenuItem
x:Name="menuRealPingServer"
Height="{StaticResource MenuItemHeight}"
Header="{x:Static resx:ResUI.menuRealPingServer}" />
Header="{x:Static resx:ResUI.menuRealPingServer}"
InputGestureText="Ctrl+R" />
<MenuItem
x:Name="menuSpeedServer"
Height="{StaticResource MenuItemHeight}"
Header="{x:Static resx:ResUI.menuSpeedServer}" />
Header="{x:Static resx:ResUI.menuSpeedServer}"
InputGestureText="Ctrl+T" />
<MenuItem
x:Name="menuSortServerResult"
Height="{StaticResource MenuItemHeight}"
@@ -184,29 +190,35 @@
<MenuItem
x:Name="menuMoveTop"
Height="{StaticResource MenuItemHeight}"
Header="{x:Static resx:ResUI.menuMoveTop}" />
Header="{x:Static resx:ResUI.menuMoveTop}"
InputGestureText="T" />
<MenuItem
x:Name="menuMoveUp"
Height="{StaticResource MenuItemHeight}"
Header="{x:Static resx:ResUI.menuMoveUp}" />
Header="{x:Static resx:ResUI.menuMoveUp}"
InputGestureText="U" />
<MenuItem
x:Name="menuMoveDown"
Height="{StaticResource MenuItemHeight}"
Header="{x:Static resx:ResUI.menuMoveDown}" />
Header="{x:Static resx:ResUI.menuMoveDown}"
InputGestureText="D" />
<MenuItem
x:Name="menuMoveBottom"
Height="{StaticResource MenuItemHeight}"
Header="{x:Static resx:ResUI.menuMoveBottom}" />
Header="{x:Static resx:ResUI.menuMoveBottom}"
InputGestureText="B" />
</MenuItem>
<MenuItem
x:Name="menuSelectAll"
Height="{StaticResource MenuItemHeight}"
Header="{x:Static resx:ResUI.menuSelectAll}" />
Header="{x:Static resx:ResUI.menuSelectAll}"
InputGestureText="Ctrl+A" />
<Separator />
<MenuItem
x:Name="menuShareServer"
Height="{StaticResource MenuItemHeight}"
Header="{x:Static resx:ResUI.menuShareServer}" />
Header="{x:Static resx:ResUI.menuShareServer}"
InputGestureText="Ctrl+F" />
<MenuItem Header="{x:Static resx:ResUI.menuExportConfig}">
<MenuItem
x:Name="menuExport2ClientConfig"
@@ -220,7 +232,8 @@
<MenuItem
x:Name="menuExport2ShareUrl"
Height="{StaticResource MenuItemHeight}"
Header="{x:Static resx:ResUI.menuExport2ShareUrl}" />
Header="{x:Static resx:ResUI.menuExport2ShareUrl}"
InputGestureText="Ctrl+C" />
<MenuItem
x:Name="menuExport2ShareUrlBase64"
Height="{StaticResource MenuItemHeight}"

View File

@@ -292,33 +292,37 @@ public partial class ProfilesView
}
else
{
if (e.Key is Key.Enter or Key.Return)
switch (e.Key)
{
ViewModel?.SetDefaultServer();
}
else if (e.Key == Key.Delete)
{
ViewModel?.RemoveServerAsync();
}
else if (e.Key == Key.T)
{
ViewModel?.MoveServer(EMove.Top);
}
else if (e.Key == Key.U)
{
ViewModel?.MoveServer(EMove.Up);
}
else if (e.Key == Key.D)
{
ViewModel?.MoveServer(EMove.Down);
}
else if (e.Key == Key.B)
{
ViewModel?.MoveServer(EMove.Bottom);
}
else if (e.Key == Key.Escape)
{
ViewModel?.ServerSpeedtestStop();
case Key.Enter:
//case Key.Return:
ViewModel?.SetDefaultServer();
break;
case Key.Delete:
case Key.Back:
ViewModel?.RemoveServerAsync();
break;
case Key.T:
ViewModel?.MoveServer(EMove.Top);
break;
case Key.U:
ViewModel?.MoveServer(EMove.Up);
break;
case Key.D:
ViewModel?.MoveServer(EMove.Down);
break;
case Key.B:
ViewModel?.MoveServer(EMove.Bottom);
break;
case Key.Escape:
ViewModel?.ServerSpeedtestStop();
break;
}
}
}

View File

@@ -263,11 +263,13 @@
<MenuItem
x:Name="menuRuleRemove"
Height="{StaticResource MenuItemHeight}"
Header="{x:Static resx:ResUI.menuRuleRemove}" />
Header="{x:Static resx:ResUI.menuRuleRemove}"
InputGestureText="Back" />
<MenuItem
x:Name="menuRuleSelectAll"
Height="{StaticResource MenuItemHeight}"
Header="{x:Static resx:ResUI.menuSelectAll}" />
Header="{x:Static resx:ResUI.menuSelectAll}"
InputGestureText="Ctrl+A" />
<MenuItem
x:Name="menuRuleExportSelected"
Height="{StaticResource MenuItemHeight}"
@@ -276,19 +278,23 @@
<MenuItem
x:Name="menuMoveTop"
Height="{StaticResource MenuItemHeight}"
Header="{x:Static resx:ResUI.menuMoveTop}" />
Header="{x:Static resx:ResUI.menuMoveTop}"
InputGestureText="T" />
<MenuItem
x:Name="menuMoveUp"
Height="{StaticResource MenuItemHeight}"
Header="{x:Static resx:ResUI.menuMoveUp}" />
Header="{x:Static resx:ResUI.menuMoveUp}"
InputGestureText="U" />
<MenuItem
x:Name="menuMoveDown"
Height="{StaticResource MenuItemHeight}"
Header="{x:Static resx:ResUI.menuMoveDown}" />
Header="{x:Static resx:ResUI.menuMoveDown}"
InputGestureText="D" />
<MenuItem
x:Name="menuMoveBottom"
Height="{StaticResource MenuItemHeight}"
Header="{x:Static resx:ResUI.menuMoveBottom}" />
Header="{x:Static resx:ResUI.menuMoveBottom}"
InputGestureText="B" />
</ContextMenu>
</DataGrid.ContextMenu>
<DataGrid.Columns>

View File

@@ -140,25 +140,28 @@ public partial class RoutingRuleSettingWindow
}
else
{
if (e.Key == Key.T)
switch (e.Key)
{
ViewModel?.MoveRule(EMove.Top);
}
else if (e.Key == Key.U)
{
ViewModel?.MoveRule(EMove.Up);
}
else if (e.Key == Key.D)
{
ViewModel?.MoveRule(EMove.Down);
}
else if (e.Key == Key.B)
{
ViewModel?.MoveRule(EMove.Bottom);
}
else if (e.Key == Key.Delete)
{
ViewModel?.RuleRemoveAsync();
case Key.T:
ViewModel?.MoveRule(EMove.Top);
break;
case Key.U:
ViewModel?.MoveRule(EMove.Up);
break;
case Key.D:
ViewModel?.MoveRule(EMove.Down);
break;
case Key.B:
ViewModel?.MoveRule(EMove.Bottom);
break;
case Key.Delete:
case Key.Back:
ViewModel?.RuleRemoveAsync();
break;
}
}
}

View File

@@ -144,15 +144,18 @@
<MenuItem
x:Name="menuRoutingAdvancedRemove"
Height="{StaticResource MenuItemHeight}"
Header="{x:Static resx:ResUI.menuRoutingAdvancedRemove}" />
Header="{x:Static resx:ResUI.menuRoutingAdvancedRemove}"
InputGestureText="Back" />
<MenuItem
x:Name="menuRoutingAdvancedSelectAll"
Height="{StaticResource MenuItemHeight}"
Header="{x:Static resx:ResUI.menuSelectAll}" />
Header="{x:Static resx:ResUI.menuSelectAll}"
InputGestureText="Ctrl+A" />
<MenuItem
x:Name="menuRoutingAdvancedSetDefault"
Height="{StaticResource MenuItemHeight}"
Header="{x:Static resx:ResUI.menuRoutingAdvancedSetDefault}" />
Header="{x:Static resx:ResUI.menuRoutingAdvancedSetDefault}"
InputGestureText="Enter" />
<Separator />
<MenuItem
x:Name="menuRoutingAdvancedImportRules"

View File

@@ -78,18 +78,27 @@ public partial class RoutingSettingWindow
{
if (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl))
{
if (e.Key == Key.A)
switch (e.Key)
{
lstRoutings.SelectAll();
case Key.A:
lstRoutings.SelectAll();
break;
}
}
else if (e.Key is Key.Enter or Key.Return)
else
{
ViewModel?.RoutingAdvancedSetDefault();
}
else if (e.Key == Key.Delete)
{
ViewModel?.RoutingAdvancedRemoveAsync();
switch (e.Key)
{
case Key.Enter:
//case Key.Return:
ViewModel?.RoutingAdvancedSetDefault();
break;
case Key.Delete:
case Key.Back:
ViewModel?.RoutingAdvancedRemoveAsync();
break;
}
}
}