将Feature/XP.Common和Feature/XP.Hardware分支合并至Develop/XP.forHardwareAndCommon,完善XPapp注册和相关硬件类库通用类库功能。
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user