diff --git a/v2rayN/AmazTool/LocalizationHelper.cs b/v2rayN/AmazTool/LocalizationHelper.cs index 3804564c..839be22e 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,9 +14,6 @@ namespace AmazTool LoadLanguageResources(); } - /// - /// 加载外部 JSON 文件中的语言资源 - /// private static void LoadLanguageResources() { try @@ -26,33 +24,39 @@ namespace AmazTool currentLanguage = "en-US"; } - string jsonFilePath = $"{currentLanguage}.json"; - if (!File.Exists(jsonFilePath)) - { - jsonFilePath = "en-US.json"; - } + string resourceName = $"AmazTool.{currentLanguage}.json"; + var assembly = Assembly.GetExecutingAssembly(); - var json = File.ReadAllText(jsonFilePath); - if (!string.IsNullOrEmpty(json)) + using Stream? stream = assembly.GetManifestResourceStream(resourceName); + if (stream != null) { - languageResources = JsonSerializer.Deserialize>(json) ?? new Dictionary(); + using StreamReader reader = new(stream); + + var json = reader.ReadToEnd(); + + if (!string.IsNullOrEmpty(json)) + { + 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)) + if (languageResources.TryGetValue(key, out var translation)) { return translation; }