Merge branch '2dust:master' into master

This commit is contained in:
fonaix 2024-11-18 12:47:29 +08:00 committed by GitHub
commit 3a2837b223
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 29 additions and 28 deletions

View file

@ -8,5 +8,10 @@
<Copyright>Copyright © 2017-2024 (GPLv3)</Copyright> <Copyright>Copyright © 2017-2024 (GPLv3)</Copyright>
<FileVersion>1.3.0</FileVersion> <FileVersion>1.3.0</FileVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<EmbeddedResource Include="Assets\en-US.json" />
<EmbeddedResource Include="Assets\zh-CN.json" />
</ItemGroup>
</Project> </Project>

View file

@ -1,11 +1,12 @@
using System.Globalization; using System.Globalization;
using System.Reflection;
using System.Text.Json; using System.Text.Json;
namespace AmazTool namespace AmazTool
{ {
public class LocalizationHelper public class LocalizationHelper
{ {
private static Dictionary<string, string> languageResources = new(); private static Dictionary<string, string> _languageResources = [];
static LocalizationHelper() static LocalizationHelper()
{ {
@ -13,51 +14,46 @@ namespace AmazTool
LoadLanguageResources(); LoadLanguageResources();
} }
/// <summary>
/// 加载外部 JSON 文件中的语言资源
/// </summary>
private static void LoadLanguageResources() private static void LoadLanguageResources()
{ {
try try
{ {
string currentLanguage = CultureInfo.CurrentCulture.Name; var currentLanguage = CultureInfo.CurrentCulture.Name;
if (currentLanguage != "zh-CN" && currentLanguage != "en-US") if (currentLanguage != "zh-CN" && currentLanguage != "en-US")
{ {
currentLanguage = "en-US"; currentLanguage = "en-US";
} }
string jsonFilePath = $"{currentLanguage}.json"; var resourceName = $"AmazTool.Assets.{currentLanguage}.json";
if (!File.Exists(jsonFilePath)) var assembly = Assembly.GetExecutingAssembly();
{
jsonFilePath = "en-US.json";
}
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)) if (!string.IsNullOrEmpty(json))
{ {
languageResources = JsonSerializer.Deserialize<Dictionary<string, string>>(json) ?? new Dictionary<string, string>(); _languageResources = JsonSerializer.Deserialize<Dictionary<string, string>>(json) ?? new Dictionary<string, string>();
} }
} }
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) catch (Exception ex)
{ {
Console.WriteLine($"Failed to load language resources: {ex.Message}"); Console.WriteLine($"Unexpected error occurred: {ex.Message}");
languageResources = []; // 初始化为空字典
} }
} }
/// <summary>
/// 获取系统当前语言的本地化字符串
/// </summary>
/// <param name="key">要翻译的关键字</param>
/// <returns>对应语言的本地化字符串,如果没有找到则返回关键字</returns>
public static string GetLocalizedValue(string key) public static string GetLocalizedValue(string key)
{ {
if (languageResources != null && languageResources.TryGetValue(key, out var translation)) return _languageResources.TryGetValue(key, out var translation) ? translation : key;
{
return translation;
}
return key;
} }
} }
} }

View file

@ -356,7 +356,7 @@ namespace v2rayN.Desktop.Views
item2.Width = new DataGridLength(item.Width, DataGridLengthUnitType.Pixel); item2.Width = new DataGridLength(item.Width, DataGridLengthUnitType.Pixel);
item2.DisplayIndex = displayIndex++; item2.DisplayIndex = displayIndex++;
} }
if (item.Name.StartsWith("to")) if (item.Name.ToLower().StartsWith("to"))
{ {
if (!_config.GuiItem.EnableStatistics) if (!_config.GuiItem.EnableStatistics)
{ {

View file

@ -338,7 +338,7 @@ namespace v2rayN.Views
item2.Width = item.Width; item2.Width = item.Width;
item2.DisplayIndex = displayIndex++; item2.DisplayIndex = displayIndex++;
} }
if (item.Name.StartsWith("to")) if (item.Name.ToLower().StartsWith("to"))
{ {
if (!_config.GuiItem.EnableStatistics) if (!_config.GuiItem.EnableStatistics)
{ {