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)
{