diff --git a/v2rayN/ServiceLib/Handler/Builder/CoreConfigContextBuilder.cs b/v2rayN/ServiceLib/Handler/Builder/CoreConfigContextBuilder.cs index b2b6e30d..d932c5ef 100644 --- a/v2rayN/ServiceLib/Handler/Builder/CoreConfigContextBuilder.cs +++ b/v2rayN/ServiceLib/Handler/Builder/CoreConfigContextBuilder.cs @@ -52,11 +52,11 @@ public class CoreConfigContextBuilder var (actRuleNode, ruleNodeValidatorResult) = await ResolveNodeAsync(context, ruleOutboundNode, false); validatorResult.Warnings.AddRange(ruleNodeValidatorResult.Warnings.Select(w => - $"Routing rule {ruleItem.Remarks} outbound node {ruleItem.OutboundTag} warning: {w}")); + string.Format(ResUI.MsgRoutingRuleOutboundNodeWarning, ruleItem.Remarks, ruleItem.OutboundTag, w))); if (!ruleNodeValidatorResult.Success) { validatorResult.Warnings.AddRange(ruleNodeValidatorResult.Errors.Select(e => - $"Routing rule {ruleItem.Remarks} outbound node {ruleItem.OutboundTag} error: {e}. Fallback to proxy node only.")); + string.Format(ResUI.MsgRoutingRuleOutboundNodeError, ruleItem.Remarks, ruleItem.OutboundTag, e))); ruleItem.OutboundTag = Global.ProxyTag; continue; } @@ -235,7 +235,7 @@ public class CoreConfigContextBuilder if (ancestorsGroup.Contains(childNode.IndexId)) { childNodeValidatorResult.Errors.Add( - $"Group {node.Remarks} has a cycle dependency on child node {childNode.Remarks}. Skipping this node."); + string.Format(ResUI.MsgGroupCycleDependency, node.Remarks, childNode.Remarks)); continue; } @@ -249,9 +249,9 @@ public class CoreConfigContextBuilder { var childNodeResult = RegisterSingleNodeAsync(context, childNode); childNodeValidatorResult.Warnings.AddRange(childNodeResult.Warnings.Select(w => - $"Group {node.Remarks} child node {childNode.Remarks} warning: {w}")); + string.Format(ResUI.MsgGroupChildNodeWarning, node.Remarks, childNode.Remarks, w))); childNodeValidatorResult.Errors.AddRange(childNodeResult.Errors.Select(e => - $"Group {node.Remarks} child node {childNode.Remarks} error: {e}. Skipping this node.")); + string.Format(ResUI.MsgGroupChildNodeError, node.Remarks, childNode.Remarks, e))); if (!childNodeResult.Success) { continue; @@ -267,9 +267,9 @@ public class CoreConfigContextBuilder var childGroupResult = await TraverseGroupNodeAsync(context, childNode, globalVisitedGroup, newAncestorsGroup); childNodeValidatorResult.Warnings.AddRange(childGroupResult.Warnings.Select(w => - $"Group {node.Remarks} child group node {childNode.Remarks} warning: {w}")); + string.Format(ResUI.MsgGroupChildGroupNodeWarning, node.Remarks, childNode.Remarks, w))); childNodeValidatorResult.Errors.AddRange(childGroupResult.Errors.Select(e => - $"Group {node.Remarks} child group node {childNode.Remarks} error: {e}. Skipping this node.")); + string.Format(ResUI.MsgGroupChildGroupNodeError, node.Remarks, childNode.Remarks, e))); if (!childGroupResult.Success) { continue; @@ -280,7 +280,7 @@ public class CoreConfigContextBuilder if (childIndexIdList.Count == 0) { - childNodeValidatorResult.Errors.Add($"Group {node.Remarks} has no valid child node."); + childNodeValidatorResult.Errors.Add(string.Format(ResUI.MsgGroupNoValidChildNode, node.Remarks)); return childNodeValidatorResult; } else diff --git a/v2rayN/ServiceLib/Handler/Builder/NodeValidator.cs b/v2rayN/ServiceLib/Handler/Builder/NodeValidator.cs index bfffb599..ea4876c6 100644 --- a/v2rayN/ServiceLib/Handler/Builder/NodeValidator.cs +++ b/v2rayN/ServiceLib/Handler/Builder/NodeValidator.cs @@ -1,4 +1,4 @@ -namespace ServiceLib.Handler.Builder; +namespace ServiceLib.Handler.Builder; public record NodeValidatorResult(List Errors, List Warnings) { @@ -72,8 +72,8 @@ public class NodeValidator } // Basic Property Validation - v.Assert(!item.Address.IsNullOrEmpty(), string.Format(ResUI.InvalidProperty, "Address")); - v.Assert(item.Port is > 0 and <= 65535, string.Format(ResUI.InvalidProperty, "Port")); + v.Assert(!item.Address.IsNullOrEmpty(), string.Format(ResUI.MsgInvalidProperty, "Address")); + v.Assert(item.Port is > 0 and <= 65535, string.Format(ResUI.MsgInvalidProperty, "Port")); // Network & Core Logic var net = item.GetNetwork(); @@ -85,14 +85,14 @@ public class NodeValidator if (!Global.SingboxSupportConfigType.Contains(item.ConfigType)) { - v.Error(string.Format(ResUI.CoreNotSupportProtocol, nameof(ECoreType.sing_box), item.ConfigType)); + v.Error(string.Format(ResUI.MsgCoreNotSupportProtocol, nameof(ECoreType.sing_box), item.ConfigType)); } } else if (coreType is ECoreType.Xray) { if (!Global.XraySupportConfigType.Contains(item.ConfigType)) { - v.Error(string.Format(ResUI.CoreNotSupportProtocol, nameof(ECoreType.Xray), item.ConfigType)); + v.Error(string.Format(ResUI.MsgCoreNotSupportProtocol, nameof(ECoreType.Xray), item.ConfigType)); } } @@ -102,30 +102,30 @@ public class NodeValidator { case EConfigType.VMess: v.Assert(!item.Password.IsNullOrEmpty() && Utils.IsGuidByParse(item.Password), - string.Format(ResUI.InvalidProperty, "Password")); + string.Format(ResUI.MsgInvalidProperty, "Password")); break; case EConfigType.VLESS: // Example of converting a non-critical issue to Warning if desired if (item.Password.Length <= 30 && !Utils.IsGuidByParse(item.Password)) { - v.Assert(!item.Password.IsNullOrEmpty(), string.Format(ResUI.InvalidProperty, "Password")); + v.Assert(!item.Password.IsNullOrEmpty(), string.Format(ResUI.MsgInvalidProperty, "Password")); } else { - v.Assert(!item.Password.IsNullOrEmpty(), string.Format(ResUI.InvalidProperty, "Password")); + v.Assert(!item.Password.IsNullOrEmpty(), string.Format(ResUI.MsgInvalidProperty, "Password")); } v.Assert(Global.Flows.Contains(protocolExtra.Flow ?? string.Empty), - string.Format(ResUI.InvalidProperty, "Flow")); + string.Format(ResUI.MsgInvalidProperty, "Flow")); break; case EConfigType.Shadowsocks: - v.Assert(!item.Password.IsNullOrEmpty(), string.Format(ResUI.InvalidProperty, "Password")); + v.Assert(!item.Password.IsNullOrEmpty(), string.Format(ResUI.MsgInvalidProperty, "Password")); v.Assert( !string.IsNullOrEmpty(protocolExtra.SsMethod) && Global.SsSecuritiesInSingbox.Contains(protocolExtra.SsMethod), - string.Format(ResUI.InvalidProperty, "SsMethod")); + string.Format(ResUI.MsgInvalidProperty, "SsMethod")); break; } @@ -135,20 +135,20 @@ public class NodeValidator if (!item.Cert.IsNullOrEmpty() && CertPemManager.ParsePemChain(item.Cert).Count == 0 && !item.CertSha.IsNullOrEmpty()) { - v.Error(string.Format(ResUI.InvalidProperty, "TLS Certificate")); + v.Error(string.Format(ResUI.MsgInvalidProperty, "TLS Certificate")); } } if (item.StreamSecurity == Global.StreamSecurityReality) { - v.Assert(!item.PublicKey.IsNullOrEmpty(), string.Format(ResUI.InvalidProperty, "PublicKey")); + v.Assert(!item.PublicKey.IsNullOrEmpty(), string.Format(ResUI.MsgInvalidProperty, "PublicKey")); } if (item.Network == nameof(ETransport.xhttp) && !item.Extra.IsNullOrEmpty()) { if (JsonUtils.ParseJson(item.Extra) is null) { - v.Error(string.Format(ResUI.InvalidProperty, "XHTTP Extra")); + v.Error(string.Format(ResUI.MsgInvalidProperty, "XHTTP Extra")); } } } @@ -158,20 +158,20 @@ public class NodeValidator // sing-box does not support xhttp / kcp transports if (SingboxUnsupportedTransports.Contains(net)) { - return string.Format(ResUI.CoreNotSupportNetwork, nameof(ECoreType.sing_box), net); + return string.Format(ResUI.MsgCoreNotSupportNetwork, nameof(ECoreType.sing_box), net); } // sing-box does not support non-tcp transports for protocols other than vmess/trojan/vless/shadowsocks if (!SingboxTransportSupportedProtocols.Contains(configType) && net != nameof(ETransport.tcp)) { - return string.Format(ResUI.CoreNotSupportProtocolTransport, + return string.Format(ResUI.MsgCoreNotSupportProtocolTransport, nameof(ECoreType.sing_box), configType.ToString(), net); } // sing-box shadowsocks only supports tcp/ws/quic transports if (configType == EConfigType.Shadowsocks && !SingboxShadowsocksAllowedTransports.Contains(net)) { - return string.Format(ResUI.CoreNotSupportProtocolTransport, + return string.Format(ResUI.MsgCoreNotSupportProtocolTransport, nameof(ECoreType.sing_box), configType.ToString(), net); } diff --git a/v2rayN/ServiceLib/Resx/ResUI.Designer.cs b/v2rayN/ServiceLib/Resx/ResUI.Designer.cs index 8f798007..10a1aed3 100644 --- a/v2rayN/ServiceLib/Resx/ResUI.Designer.cs +++ b/v2rayN/ServiceLib/Resx/ResUI.Designer.cs @@ -132,33 +132,6 @@ namespace ServiceLib.Resx { } } - /// - /// 查找类似 Core '{0}' does not support network type '{1}'. 的本地化字符串。 - /// - public static string CoreNotSupportNetwork { - get { - return ResourceManager.GetString("CoreNotSupportNetwork", resourceCulture); - } - } - - /// - /// 查找类似 Core '{0}' does not support protocol '{1}'. 的本地化字符串。 - /// - public static string CoreNotSupportProtocol { - get { - return ResourceManager.GetString("CoreNotSupportProtocol", resourceCulture); - } - } - - /// - /// 查找类似 Core '{0}' does not support protocol '{1}' when using transport '{2}'. 的本地化字符串。 - /// - public static string CoreNotSupportProtocolTransport { - get { - return ResourceManager.GetString("CoreNotSupportProtocolTransport", resourceCulture); - } - } - /// /// 查找类似 Note that custom configuration relies entirely on your own configuration and does not work with all settings. If you want to use the system proxy, please modify the listening port manually. 的本地化字符串。 /// @@ -312,24 +285,6 @@ namespace ServiceLib.Resx { } } - /// - /// 查找类似 Group '{0}' is empty. Please add at least one node. 的本地化字符串。 - /// - public static string GroupEmpty { - get { - return ResourceManager.GetString("GroupEmpty", resourceCulture); - } - } - - /// - /// 查找类似 {0} Group cannot reference itself or have a circular reference 的本地化字符串。 - /// - public static string GroupSelfReference { - get { - return ResourceManager.GetString("GroupSelfReference", resourceCulture); - } - } - /// /// 查找类似 This is not the correct configuration, please check 的本地化字符串。 /// @@ -357,15 +312,6 @@ namespace ServiceLib.Resx { } } - /// - /// 查找类似 The {0} property is invalid, please check. 的本地化字符串。 - /// - public static string InvalidProperty { - get { - return ResourceManager.GetString("InvalidProperty", resourceCulture); - } - } - /// /// 查找类似 Invalid address (URL) 的本地化字符串。 /// @@ -1914,6 +1860,33 @@ namespace ServiceLib.Resx { } } + /// + /// 查找类似 Core '{0}' does not support network type '{1}' 的本地化字符串。 + /// + public static string MsgCoreNotSupportNetwork { + get { + return ResourceManager.GetString("MsgCoreNotSupportNetwork", resourceCulture); + } + } + + /// + /// 查找类似 Core '{0}' does not support protocol '{1}' 的本地化字符串。 + /// + public static string MsgCoreNotSupportProtocol { + get { + return ResourceManager.GetString("MsgCoreNotSupportProtocol", resourceCulture); + } + } + + /// + /// 查找类似 Core '{0}' does not support protocol '{1}' when using transport '{2}' 的本地化字符串。 + /// + public static string MsgCoreNotSupportProtocolTransport { + get { + return ResourceManager.GetString("MsgCoreNotSupportProtocolTransport", resourceCulture); + } + } + /// /// 查找类似 Downloaded GeoFile: {0} successfully 的本地化字符串。 /// @@ -1959,6 +1932,60 @@ namespace ServiceLib.Resx { } } + /// + /// 查找类似 Group {0} child group node {1} error: {2}. Skipping this node. 的本地化字符串。 + /// + public static string MsgGroupChildGroupNodeError { + get { + return ResourceManager.GetString("MsgGroupChildGroupNodeError", resourceCulture); + } + } + + /// + /// 查找类似 Group {0} child group node {1} warning: {2} 的本地化字符串。 + /// + public static string MsgGroupChildGroupNodeWarning { + get { + return ResourceManager.GetString("MsgGroupChildGroupNodeWarning", resourceCulture); + } + } + + /// + /// 查找类似 Group {0} child node {1} error: {2}. Skipping this node. 的本地化字符串。 + /// + public static string MsgGroupChildNodeError { + get { + return ResourceManager.GetString("MsgGroupChildNodeError", resourceCulture); + } + } + + /// + /// 查找类似 Group {0} child node {1} warning: {2} 的本地化字符串。 + /// + public static string MsgGroupChildNodeWarning { + get { + return ResourceManager.GetString("MsgGroupChildNodeWarning", resourceCulture); + } + } + + /// + /// 查找类似 Group {0} has a cycle dependency on child node {1}. Skipping this node. 的本地化字符串。 + /// + public static string MsgGroupCycleDependency { + get { + return ResourceManager.GetString("MsgGroupCycleDependency", resourceCulture); + } + } + + /// + /// 查找类似 Group {0} has no valid child node. 的本地化字符串。 + /// + public static string MsgGroupNoValidChildNode { + get { + return ResourceManager.GetString("MsgGroupNoValidChildNode", resourceCulture); + } + } + /// /// 查找类似 Information 的本地化字符串。 /// @@ -1968,6 +1995,15 @@ namespace ServiceLib.Resx { } } + /// + /// 查找类似 The {0} property is invalid, please check 的本地化字符串。 + /// + public static string MsgInvalidProperty { + get { + return ResourceManager.GetString("MsgInvalidProperty", resourceCulture); + } + } + /// /// 查找类似 Please enter the URL 的本地化字符串。 /// @@ -1977,6 +2013,15 @@ namespace ServiceLib.Resx { } } + /// + /// 查找类似 Not support protocol '{0}' 的本地化字符串。 + /// + public static string MsgNotSupportProtocol { + get { + return ResourceManager.GetString("MsgNotSupportProtocol", resourceCulture); + } + } + /// /// 查找类似 No valid subscriptions set 的本地化字符串。 /// @@ -1995,6 +2040,24 @@ namespace ServiceLib.Resx { } } + /// + /// 查找类似 Routing rule {0} outbound node {1} error: {2}. Fallback to proxy node only. 的本地化字符串。 + /// + public static string MsgRoutingRuleOutboundNodeError { + get { + return ResourceManager.GetString("MsgRoutingRuleOutboundNodeError", resourceCulture); + } + } + + /// + /// 查找类似 Routing rule {0} outbound node {1} warning: {2} 的本地化字符串。 + /// + public static string MsgRoutingRuleOutboundNodeWarning { + get { + return ResourceManager.GetString("MsgRoutingRuleOutboundNodeWarning", resourceCulture); + } + } + /// /// 查找类似 Filter, press Enter to execute 的本地化字符串。 /// @@ -2103,15 +2166,6 @@ namespace ServiceLib.Resx { } } - /// - /// 查找类似 Node alias '{0}' does not exist. 的本地化字符串。 - /// - public static string NodeTagNotExist { - get { - return ResourceManager.GetString("NodeTagNotExist", resourceCulture); - } - } - /// /// 查找类似 Non-VMess or SS protocol 的本地化字符串。 /// @@ -2139,15 +2193,6 @@ namespace ServiceLib.Resx { } } - /// - /// 查找类似 Not support protocol '{0}'. 的本地化字符串。 - /// - public static string NotSupportProtocol { - get { - return ResourceManager.GetString("NotSupportProtocol", resourceCulture); - } - } - /// /// 查找类似 Scan completed, no valid QR code found 的本地化字符串。 /// @@ -2229,24 +2274,6 @@ namespace ServiceLib.Resx { } } - /// - /// 查找类似 Policy group: 的本地化字符串。 - /// - public static string PolicyGroupPrefix { - get { - return ResourceManager.GetString("PolicyGroupPrefix", resourceCulture); - } - } - - /// - /// 查找类似 Proxy chained: 的本地化字符串。 - /// - public static string ProxyChainedPrefix { - get { - return ResourceManager.GetString("ProxyChainedPrefix", resourceCulture); - } - } - /// /// 查找类似 Global hotkey {0} registration failed, reason: {1} 的本地化字符串。 /// @@ -2310,15 +2337,6 @@ namespace ServiceLib.Resx { } } - /// - /// 查找类似 Routing rule outbound: 的本地化字符串。 - /// - public static string RoutingRuleOutboundPrefix { - get { - return ResourceManager.GetString("RoutingRuleOutboundPrefix", resourceCulture); - } - } - /// /// 查找类似 Run as Admin 的本地化字符串。 /// diff --git a/v2rayN/ServiceLib/Resx/ResUI.fa-Ir.resx b/v2rayN/ServiceLib/Resx/ResUI.fa-Ir.resx index 9aba2fed..c8aec9ae 100644 --- a/v2rayN/ServiceLib/Resx/ResUI.fa-Ir.resx +++ b/v2rayN/ServiceLib/Resx/ResUI.fa-Ir.resx @@ -1539,38 +1539,20 @@ Multi-Configuration Fallback by Xray - - Core '{0}' does not support network type '{1}'. + + Core '{0}' does not support network type '{1}' - - Core '{0}' does not support protocol '{1}' when using transport '{2}'. + + Core '{0}' does not support protocol '{1}' when using transport '{2}' - - Core '{0}' does not support protocol '{1}'. + + Core '{0}' does not support protocol '{1}' - - Proxy chained: + + The {0} property is invalid, please check - - Routing rule outbound: - - - Policy group: - - - Node alias '{0}' does not exist. - - - Group '{0}' is empty. Please add at least one node. - - - The {0} property is invalid, please check. - - - {0} Group cannot reference itself or have a circular reference - - - Not support protocol '{0}'. + + Not support protocol '{0}' If the system does not have a tray function, please do not enable it @@ -1668,4 +1650,28 @@ The "Get Certificate" action may fail if a self-signed certificate is used or if Finalmask + + Routing rule {0} outbound node {1} warning: {2} + + + Routing rule {0} outbound node {1} error: {2}. Fallback to proxy node only. + + + Group {0} has a cycle dependency on child node {1}. Skipping this node. + + + Group {0} child node {1} warning: {2} + + + Group {0} child node {1} error: {2}. Skipping this node. + + + Group {0} child group node {1} warning: {2} + + + Group {0} child group node {1} error: {2}. Skipping this node. + + + Group {0} has no valid child node. + \ No newline at end of file diff --git a/v2rayN/ServiceLib/Resx/ResUI.fr.resx b/v2rayN/ServiceLib/Resx/ResUI.fr.resx index 3dfbcc09..56d54a65 100644 --- a/v2rayN/ServiceLib/Resx/ResUI.fr.resx +++ b/v2rayN/ServiceLib/Resx/ResUI.fr.resx @@ -1536,38 +1536,20 @@ Xray basculement (multi-sélection) - - Le cœur « {0} » ne prend pas en charge le type de réseau « {1} ». + + Le cœur « {0} » ne prend pas en charge le type de réseau « {1} » - - Le cœur « {0} » ne prend pas en charge le protocole « {1} » avec le mode de transport « {2} ». + + Le cœur « {0} » ne prend pas en charge le protocole « {1} » avec le mode de transport « {2} » - - Le cœur « {0} » ne prend pas en charge le protocole « {1} ». + + Le cœur « {0} » ne prend pas en charge le protocole « {1} » - - Chaîne de proxy : - - - Règle de routage sortante : - - - Groupe de stratégie : - - - L’alias « {0} » n’existe pas. - - - Le groupe « {0} » est vide. Veuillez ajouter au moins une configuration. - - + La propriété {0} est invalide, veuillez vérifier - - Le groupe {0} ne peut pas se référencer lui-même ni créer de référence circulaire - - - Protocole « {0} » non pris en charge. + + Protocole « {0} » non pris en charge Si le système n’a pas de zone de notif., n’activez pas cette option @@ -1665,4 +1647,28 @@ The "Get Certificate" action may fail if a self-signed certificate is used or if Finalmask + + Routing rule {0} outbound node {1} warning: {2} + + + Routing rule {0} outbound node {1} error: {2}. Fallback to proxy node only. + + + Group {0} has a cycle dependency on child node {1}. Skipping this node. + + + Group {0} child node {1} warning: {2} + + + Group {0} child node {1} error: {2}. Skipping this node. + + + Group {0} child group node {1} warning: {2} + + + Group {0} child group node {1} error: {2}. Skipping this node. + + + Group {0} has no valid child node. + diff --git a/v2rayN/ServiceLib/Resx/ResUI.hu.resx b/v2rayN/ServiceLib/Resx/ResUI.hu.resx index e69a0a54..3eb3b357 100644 --- a/v2rayN/ServiceLib/Resx/ResUI.hu.resx +++ b/v2rayN/ServiceLib/Resx/ResUI.hu.resx @@ -1539,38 +1539,20 @@ Multi-Configuration Fallback by Xray - - Core '{0}' does not support network type '{1}'. + + Core '{0}' does not support network type '{1}' - - Core '{0}' does not support protocol '{1}' when using transport '{2}'. + + Core '{0}' does not support protocol '{1}' when using transport '{2}' - - Core '{0}' does not support protocol '{1}'. + + Core '{0}' does not support protocol '{1}' - - Proxy chained: + + The {0} property is invalid, please check - - Routing rule outbound: - - - Policy group: - - - Node alias '{0}' does not exist. - - - Group '{0}' is empty. Please add at least one node. - - - The {0} property is invalid, please check. - - - {0} Group cannot reference itself or have a circular reference - - - Not support protocol '{0}'. + + Not support protocol '{0}' If the system does not have a tray function, please do not enable it @@ -1668,4 +1650,28 @@ The "Get Certificate" action may fail if a self-signed certificate is used or if Finalmask + + Routing rule {0} outbound node {1} warning: {2} + + + Routing rule {0} outbound node {1} error: {2}. Fallback to proxy node only. + + + Group {0} has a cycle dependency on child node {1}. Skipping this node. + + + Group {0} child node {1} warning: {2} + + + Group {0} child node {1} error: {2}. Skipping this node. + + + Group {0} child group node {1} warning: {2} + + + Group {0} child group node {1} error: {2}. Skipping this node. + + + Group {0} has no valid child node. + \ No newline at end of file diff --git a/v2rayN/ServiceLib/Resx/ResUI.resx b/v2rayN/ServiceLib/Resx/ResUI.resx index cc304154..a2d9e691 100644 --- a/v2rayN/ServiceLib/Resx/ResUI.resx +++ b/v2rayN/ServiceLib/Resx/ResUI.resx @@ -1539,38 +1539,20 @@ Fallback by Xray - - Core '{0}' does not support network type '{1}'. + + Core '{0}' does not support network type '{1}' - - Core '{0}' does not support protocol '{1}' when using transport '{2}'. + + Core '{0}' does not support protocol '{1}' when using transport '{2}' - - Core '{0}' does not support protocol '{1}'. + + Core '{0}' does not support protocol '{1}' - - Proxy chained: + + The {0} property is invalid, please check - - Routing rule outbound: - - - Policy group: - - - Node alias '{0}' does not exist. - - - Group '{0}' is empty. Please add at least one node. - - - The {0} property is invalid, please check. - - - {0} Group cannot reference itself or have a circular reference - - - Not support protocol '{0}'. + + Not support protocol '{0}' If the system does not have a tray function, please do not enable it @@ -1668,4 +1650,28 @@ The "Get Certificate" action may fail if a self-signed certificate is used or if Finalmask + + Routing rule {0} outbound node {1} warning: {2} + + + Routing rule {0} outbound node {1} error: {2}. Fallback to proxy node only. + + + Group {0} has a cycle dependency on child node {1}. Skipping this node. + + + Group {0} child node {1} warning: {2} + + + Group {0} child node {1} error: {2}. Skipping this node. + + + Group {0} child group node {1} warning: {2} + + + Group {0} child group node {1} error: {2}. Skipping this node. + + + Group {0} has no valid child node. + \ No newline at end of file diff --git a/v2rayN/ServiceLib/Resx/ResUI.ru.resx b/v2rayN/ServiceLib/Resx/ResUI.ru.resx index 6f093f72..4e851e20 100644 --- a/v2rayN/ServiceLib/Resx/ResUI.ru.resx +++ b/v2rayN/ServiceLib/Resx/ResUI.ru.resx @@ -1539,38 +1539,20 @@ Multi-Configuration Fallback by Xray - - Core '{0}' does not support network type '{1}'. + + Core '{0}' does not support network type '{1}' - - Core '{0}' does not support protocol '{1}' when using transport '{2}'. + + Core '{0}' does not support protocol '{1}' when using transport '{2}' - - Core '{0}' does not support protocol '{1}'. + + Core '{0}' does not support protocol '{1}' - - Proxy chained: + + The {0} property is invalid, please check - - Routing rule outbound: - - - Policy group: - - - Node alias '{0}' does not exist. - - - Group '{0}' is empty. Please add at least one node. - - - The {0} property is invalid, please check. - - - {0} Group cannot reference itself or have a circular reference - - - Not support protocol '{0}'. + + Not support protocol '{0}' If the system does not have a tray function, please do not enable it @@ -1668,4 +1650,28 @@ The "Get Certificate" action may fail if a self-signed certificate is used or if Finalmask + + Routing rule {0} outbound node {1} warning: {2} + + + Routing rule {0} outbound node {1} error: {2}. Fallback to proxy node only. + + + Group {0} has a cycle dependency on child node {1}. Skipping this node. + + + Group {0} child node {1} warning: {2} + + + Group {0} child node {1} error: {2}. Skipping this node. + + + Group {0} child group node {1} warning: {2} + + + Group {0} child group node {1} error: {2}. Skipping this node. + + + Group {0} has no valid child node. + \ No newline at end of file diff --git a/v2rayN/ServiceLib/Resx/ResUI.zh-Hans.resx b/v2rayN/ServiceLib/Resx/ResUI.zh-Hans.resx index c0f8665d..21e199ac 100644 --- a/v2rayN/ServiceLib/Resx/ResUI.zh-Hans.resx +++ b/v2rayN/ServiceLib/Resx/ResUI.zh-Hans.resx @@ -1536,38 +1536,20 @@ 多选故障转移 Xray - - 核心 '{0}' 不支持网络类型 '{1}'。 + + 核心 '{0}' 不支持网络类型 '{1}' - - 核心 '{0}' 在使用传输方式 '{2}' 时不支持协议 '{1}'。 + + 核心 '{0}' 在使用传输方式 '{2}' 时不支持协议 '{1}' - - 核心 '{0}' 不支持协议 '{1}'。 + + 核心 '{0}' 不支持协议 '{1}' - - 代理链: + + {0} 属性无效,请检查 - - 路由规则出站: - - - 策略组: - - - 别名 '{0}' 不存在。 - - - 组“{0}”为空。请至少添加一个配置。 - - - {0}属性无效,请检查 - - - {0} 分组不能引用自身或循环引用 - - - 不支持协议 '{0}'。 + + 不支持协议 '{0}' 如果系统没有托盘功能,请不要开启 @@ -1665,4 +1647,28 @@ Finalmask + + 路由规则 {0} 出站节点 {1} 警告:{2} + + + 路由规则 {0} 出站节点 {1} 错误:{2}。已回退为仅使用代理节点。 + + + 节点组 {0} 与子节点 {1} 存在循环依赖,已跳过该节点。 + + + 节点组 {0} 子节点 {1} 警告:{2} + + + 节点组 {0} 子节点 {1} 错误:{2}。已跳过该节点。 + + + 节点组 {0} 子节点组 {1} 警告:{2} + + + 节点组 {0} 子节点组 {1} 错误:{2}。已跳过该节点。 + + + 节点组 {0} 下没有有效的子节点。 + \ No newline at end of file diff --git a/v2rayN/ServiceLib/Resx/ResUI.zh-Hant.resx b/v2rayN/ServiceLib/Resx/ResUI.zh-Hant.resx index 9002c3af..5b74197c 100644 --- a/v2rayN/ServiceLib/Resx/ResUI.zh-Hant.resx +++ b/v2rayN/ServiceLib/Resx/ResUI.zh-Hant.resx @@ -1536,38 +1536,20 @@ 多選容錯移轉 Xray - - 核心 '{0}' 不支援網路類型 '{1}'. + + 核心 '{0}' 不支援網路類型 '{1}' - - 核心 '{0}' 在使用傳輸方式 '{2}' 時不支援協定 '{1}'. + + 核心 '{0}' 在使用傳輸方式 '{2}' 時不支援協定 '{1}' - - 核心 '{0}' 不支援協定 '{1}'. + + 核心 '{0}' 不支援協定 '{1}' - - 代理鏈: + + {0} 屬性無效,請檢查 - - 路由規則出站: - - - 策略組: - - - 別名 '{0}' 不存在。 - - - 組“{0}”為空.請至少添加一個配置。 - - - {0}屬性無效,請檢查 - - - {0} 分組不能引用自身或循環引用 - - - 不支援協定 '{0}'. + + 不支援協定 '{0}' 如果系統沒有託盤功能,請不要開啟 @@ -1665,4 +1647,28 @@ Finalmask + + Routing rule {0} outbound node {1} warning: {2} + + + Routing rule {0} outbound node {1} error: {2}. Fallback to proxy node only. + + + Group {0} has a cycle dependency on child node {1}. Skipping this node. + + + Group {0} child node {1} warning: {2} + + + Group {0} child node {1} error: {2}. Skipping this node. + + + Group {0} child group node {1} warning: {2} + + + Group {0} child group node {1} error: {2}. Skipping this node. + + + Group {0} has no valid child node. + \ No newline at end of file diff --git a/v2rayN/ServiceLib/ViewModels/AddGroupServerViewModel.cs b/v2rayN/ServiceLib/ViewModels/AddGroupServerViewModel.cs index 6e4d021c..d30917ec 100644 --- a/v2rayN/ServiceLib/ViewModels/AddGroupServerViewModel.cs +++ b/v2rayN/ServiceLib/ViewModels/AddGroupServerViewModel.cs @@ -234,13 +234,6 @@ public class AddGroupServerViewModel : MyReactiveObject SelectedSource.SetProtocolExtra(protocolExtra); - var hasCycle = await GroupProfileManager.HasCycle(SelectedSource.IndexId, protocolExtra); - if (hasCycle) - { - NoticeManager.Instance.Enqueue(string.Format(ResUI.GroupSelfReference, remarks)); - return; - } - if (await ConfigHandler.AddServerCommon(_config, SelectedSource) == 0) { NoticeManager.Instance.Enqueue(ResUI.OperationSuccess);