using System.Globalization;
using System.Text.Json;
namespace SpaceEngineersBlueprintEditor.Utilities.Localization;
/// <summary>
/// Loads the optional Chinese display names for blueprint members.
/// Reflection and serialization must always use the original <c>Name</c> value;
/// this class is only responsible for presentation and search aliases.
/// </summary>
public static class BlueprintPropertyNameLocalizer
{
private static readonly Lazy<IReadOnlyDictionary<string, string>> ChineseNames =
new(LoadChineseNames);
public static bool IsChineseUser =>
CultureInfo.CurrentUICulture.TwoLetterISOLanguageName.Equals(
"zh",
StringComparison.OrdinalIgnoreCase);
public static string GetDisplayName(string? originalName)
{
if (string.IsNullOrWhiteSpace(originalName))
return string.Empty;
if (!IsChineseUser || !ChineseNames.Value.TryGetValue(originalName, out var chineseName))
return originalName;
return $"{chineseName} [{originalName}]";
}
public static string? GetChineseName(string? originalName)
{
if (string.IsNullOrWhiteSpace(originalName))
return null;
return ChineseNames.Value.TryGetValue(originalName, out var chineseName)
? chineseName
: null;
}
private static IReadOnlyDictionary<string, string> LoadChineseNames()
{
var path = Path.Combine(
AppContext.BaseDirectory,
"Assets",
"Localization",
"BlueprintPropertyNames.zh-CN.json");
try
{
if (!File.Exists(path))
return new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
var values = JsonSerializer.Deserialize<Dictionary<string, string>>(
File.ReadAllText(path));
return values is null
? new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
: new Dictionary<string, string>(values, StringComparer.OrdinalIgnoreCase);
}
catch (Exception ex) when (ex is IOException or UnauthorizedAccessException or JsonException)
{
// Missing or malformed optional display data must never prevent a blueprint from opening.
return new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
}
}
}
using System.Globalization;
using System.Text.Json;
namespace SpaceEngineersBlueprintEditor.Utilities.Localization;
/// <summary>
/// Loads the optional Chinese display names for blueprint members.
/// Reflection and serialization must always use the original <c>Name</c> value;
/// this class is only responsible for presentation and search aliases.
/// </summary>
public static class BlueprintPropertyNameLocalizer
{
private static readonly Lazy<IReadOnlyDictionary<string, string>> ChineseNames =
new(LoadChineseNames);
public static bool IsChineseUser =>
CultureInfo.CurrentUICulture.TwoLetterISOLanguageName.Equals(
"zh",
StringComparison.OrdinalIgnoreCase);
public static string GetDisplayName(string? originalName)
{
if (string.IsNullOrWhiteSpace(originalName))
return string.Empty;
if (!IsChineseUser || !ChineseNames.Value.TryGetValue(originalName, out var chineseName))
return originalName;
return $"{chineseName} [{originalName}]";
}
public static string? GetChineseName(string? originalName)
{
if (string.IsNullOrWhiteSpace(originalName))
return null;
return ChineseNames.Value.TryGetValue(originalName, out var chineseName)
? chineseName
: null;
}
private static IReadOnlyDictionary<string, string> LoadChineseNames()
{
var path = Path.Combine(
AppContext.BaseDirectory,
"Assets",
"Localization",
"BlueprintPropertyNames.zh-CN.json");
try
{
if (!File.Exists(path))
return new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
var values = JsonSerializer.Deserialize<Dictionary<string, string>>(
File.ReadAllText(path));
return values is null
? new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
: new Dictionary<string, string>(values, StringComparer.OrdinalIgnoreCase);
}
catch (Exception ex) when (ex is IOException or UnauthorizedAccessException or JsonException)
{
// Missing or malformed optional display data must never prevent a blueprint from opening.
return new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
}
}
}