将Feature/XP.Common和Feature/XP.Hardware分支合并至Develop/XP.forHardwareAndCommon,完善XPapp注册和相关硬件类库通用类库功能。

This commit is contained in:
QI Mingxuan
2026-04-16 17:31:13 +08:00
parent 6ec4c3ddaa
commit 2bd6e566c3
581 changed files with 74600 additions and 222 deletions
@@ -0,0 +1,142 @@
using System;
using System.Configuration;
using System.Globalization;
using XP.Common.Localization.Enums;
using XP.Common.Localization.Interfaces;
using XP.Common.Logging.Interfaces;
namespace XP.Common.Localization.Configs
{
/// <summary>
/// 本地化配置实现 | Localization configuration implementation
/// 使用 App.config 存储语言设置 | Uses App.config to store language settings
/// </summary>
public class LocalizationConfig : ILocalizationConfig
{
private const string LanguageKey = "Language";
private readonly ILoggerService _logger;
/// <summary>
/// 构造函数 | Constructor
/// </summary>
/// <param name="logger">日志服务 | Logger service</param>
public LocalizationConfig(ILoggerService logger)
{
_logger = (logger ?? throw new ArgumentNullException(nameof(logger))).ForModule<LocalizationConfig>();
}
/// <summary>
/// 获取保存的语言设置 | Get saved language setting
/// </summary>
/// <returns>语言设置,如果未设置则返回 null | Language setting, or null if not set</returns>
public SupportedLanguage? GetSavedLanguage()
{
try
{
var languageString = ConfigurationManager.AppSettings[LanguageKey];
if (string.IsNullOrWhiteSpace(languageString))
{
_logger.Info("No saved language setting found in configuration");
return null;
}
if (Enum.TryParse<SupportedLanguage>(languageString, true, out var language))
{
_logger.Info($"Loaded saved language setting: {language}");
return language;
}
_logger.Warn($"Invalid language setting in configuration: '{languageString}'. Expected values: ZhCN, ZhTW, EnUS");
return null;
}
catch (ConfigurationErrorsException ex)
{
_logger.Error(ex, "Configuration error while reading language setting");
return null;
}
catch (Exception ex)
{
_logger.Error(ex, "Unexpected error while reading saved language setting");
return null;
}
}
/// <summary>
/// 保存语言设置 | Save language setting
/// </summary>
/// <param name="language">要保存的语言 | Language to save</param>
public void SaveLanguage(SupportedLanguage language)
{
try
{
var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
var appSettings = config.AppSettings.Settings;
var languageValue = language.ToString();
if (appSettings[LanguageKey] == null)
{
appSettings.Add(LanguageKey, languageValue);
_logger.Info($"Added new language setting to configuration: {language}");
}
else
{
appSettings[LanguageKey].Value = languageValue;
_logger.Info($"Updated language setting in configuration: {language}");
}
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
_logger.Info($"Successfully saved language setting: {language}");
}
catch (ConfigurationErrorsException ex)
{
_logger.Error(ex, $"Configuration error while saving language setting: {language}");
throw new InvalidOperationException($"Failed to save language setting to configuration file: {ex.Message}", ex);
}
catch (UnauthorizedAccessException ex)
{
_logger.Error(ex, $"Access denied while saving language setting: {language}");
throw new InvalidOperationException("Access denied to configuration file. Please check file permissions.", ex);
}
catch (Exception ex)
{
_logger.Error(ex, $"Unexpected error while saving language setting: {language}");
throw new InvalidOperationException($"Failed to save language setting: {ex.Message}", ex);
}
}
/// <summary>
/// 获取系统默认语言 | Get system default language
/// </summary>
/// <returns>系统默认语言 | System default language</returns>
public SupportedLanguage GetSystemDefaultLanguage()
{
try
{
var systemCulture = CultureInfo.CurrentUICulture.Name;
_logger.Info($"Detecting system default language from culture: {systemCulture}");
var defaultLanguage = systemCulture switch
{
"zh-CN" => SupportedLanguage.ZhCN,
"zh-TW" or "zh-HK" or "zh-MO" => SupportedLanguage.ZhTW,
"en-US" or "en" => SupportedLanguage.EnUS,
_ when systemCulture.StartsWith("zh", StringComparison.OrdinalIgnoreCase) => SupportedLanguage.ZhCN,
_ when systemCulture.StartsWith("en", StringComparison.OrdinalIgnoreCase) => SupportedLanguage.EnUS,
_ => SupportedLanguage.ZhCN // 默认简体中文 | Default to Simplified Chinese
};
_logger.Info($"System default language determined: {defaultLanguage} (from culture: {systemCulture})");
return defaultLanguage;
}
catch (Exception ex)
{
_logger.Error(ex, "Error while detecting system default language, falling back to ZhCN");
return SupportedLanguage.ZhCN; // 默认简体中文 | Default to Simplified Chinese
}
}
}
}