diff --git a/v2rayN/AmazTool/AmazTool.csproj b/v2rayN/AmazTool/AmazTool.csproj index 37193d62..05874af3 100644 --- a/v2rayN/AmazTool/AmazTool.csproj +++ b/v2rayN/AmazTool/AmazTool.csproj @@ -8,5 +8,10 @@ Copyright © 2017-2024 (GPLv3) 1.3.0 + + + + + \ No newline at end of file diff --git a/v2rayN/AmazTool/en-US.json b/v2rayN/AmazTool/Assets/en-US.json similarity index 100% rename from v2rayN/AmazTool/en-US.json rename to v2rayN/AmazTool/Assets/en-US.json diff --git a/v2rayN/AmazTool/zh-CN.json b/v2rayN/AmazTool/Assets/zh-CN.json similarity index 100% rename from v2rayN/AmazTool/zh-CN.json rename to v2rayN/AmazTool/Assets/zh-CN.json diff --git a/v2rayN/AmazTool/LocalizationHelper.cs b/v2rayN/AmazTool/LocalizationHelper.cs index 3804564c..4af352c6 100644 --- a/v2rayN/AmazTool/LocalizationHelper.cs +++ b/v2rayN/AmazTool/LocalizationHelper.cs @@ -1,11 +1,12 @@ -using System.Globalization; +using System.Globalization; +using System.Reflection; using System.Text.Json; namespace AmazTool { public class LocalizationHelper { - private static Dictionary languageResources = new(); + private static Dictionary _languageResources = []; static LocalizationHelper() { @@ -13,51 +14,46 @@ namespace AmazTool LoadLanguageResources(); } - /// - /// 加载外部 JSON 文件中的语言资源 - /// private static void LoadLanguageResources() { try { - string currentLanguage = CultureInfo.CurrentCulture.Name; + var currentLanguage = CultureInfo.CurrentCulture.Name; if (currentLanguage != "zh-CN" && currentLanguage != "en-US") { currentLanguage = "en-US"; } - string jsonFilePath = $"{currentLanguage}.json"; - if (!File.Exists(jsonFilePath)) - { - jsonFilePath = "en-US.json"; - } + var resourceName = $"AmazTool.Assets.{currentLanguage}.json"; + var assembly = Assembly.GetExecutingAssembly(); - var json = File.ReadAllText(jsonFilePath); + using var stream = assembly.GetManifestResourceStream(resourceName); + if (stream == null) return; + + using StreamReader reader = new(stream); + var json = reader.ReadToEnd(); if (!string.IsNullOrEmpty(json)) { - languageResources = JsonSerializer.Deserialize>(json) ?? new Dictionary(); + _languageResources = JsonSerializer.Deserialize>(json) ?? new Dictionary(); } } + catch (IOException ex) + { + Console.WriteLine($"Failed to read language resource file: {ex.Message}"); + } + catch (JsonException ex) + { + Console.WriteLine($"Failed to parse JSON data: {ex.Message}"); + } catch (Exception ex) { - Console.WriteLine($"Failed to load language resources: {ex.Message}"); - languageResources = []; // 初始化为空字典 + Console.WriteLine($"Unexpected error occurred: {ex.Message}"); } } - /// - /// 获取系统当前语言的本地化字符串 - /// - /// 要翻译的关键字 - /// 对应语言的本地化字符串,如果没有找到则返回关键字 public static string GetLocalizedValue(string key) { - if (languageResources != null && languageResources.TryGetValue(key, out var translation)) - { - return translation; - } - - return key; + return _languageResources.TryGetValue(key, out var translation) ? translation : key; } } } diff --git a/v2rayN/v2rayN.Desktop/Views/ProfilesView.axaml.cs b/v2rayN/v2rayN.Desktop/Views/ProfilesView.axaml.cs index a2bfa298..4508daa5 100644 --- a/v2rayN/v2rayN.Desktop/Views/ProfilesView.axaml.cs +++ b/v2rayN/v2rayN.Desktop/Views/ProfilesView.axaml.cs @@ -356,7 +356,7 @@ namespace v2rayN.Desktop.Views item2.Width = new DataGridLength(item.Width, DataGridLengthUnitType.Pixel); item2.DisplayIndex = displayIndex++; } - if (item.Name.StartsWith("to")) + if (item.Name.ToLower().StartsWith("to")) { if (!_config.GuiItem.EnableStatistics) { diff --git a/v2rayN/v2rayN/Views/ProfilesView.xaml.cs b/v2rayN/v2rayN/Views/ProfilesView.xaml.cs index 23459fc1..e39c7dff 100644 --- a/v2rayN/v2rayN/Views/ProfilesView.xaml.cs +++ b/v2rayN/v2rayN/Views/ProfilesView.xaml.cs @@ -338,7 +338,7 @@ namespace v2rayN.Views item2.Width = item.Width; item2.DisplayIndex = displayIndex++; } - if (item.Name.StartsWith("to")) + if (item.Name.ToLower().StartsWith("to")) { if (!_config.GuiItem.EnableStatistics) {