using System; using System.Windows.Markup; using XP.Common.Localization.Interfaces; namespace XP.Common.Localization.Extensions { /// /// 本地化标记扩展 | Localization markup extension /// 用法: {loc:Localization Key=ResourceKey} | Usage: {loc:Localization Key=ResourceKey} /// [MarkupExtensionReturnType(typeof(string))] public class LocalizationExtension : MarkupExtension { private static ILocalizationService? _localizationService; private string _key = string.Empty; /// /// 资源键 | Resource key /// [ConstructorArgument("key")] public string Key { get => _key; set => _key = value; } /// /// 默认构造函数 | Default constructor /// public LocalizationExtension() { } /// /// 带资源键的构造函数 | Constructor with resource key /// /// 资源键 | Resource key public LocalizationExtension(string key) { _key = key; } /// /// 初始化本地化服务(由 CommonModule 调用)| Initialize localization service (called by CommonModule) /// /// 本地化服务实例 | Localization service instance public static void Initialize(ILocalizationService localizationService) { _localizationService = localizationService; } /// /// 提供本地化字符串值 | Provide localized string value /// /// 服务提供者 | Service provider /// 本地化字符串 | Localized string public override object ProvideValue(IServiceProvider serviceProvider) { if (string.IsNullOrEmpty(_key)) { return string.Empty; } if (_localizationService == null) { // 设计时回退 | Design-time fallback return $"[{_key}]"; } // 直接返回当前语言的翻译字符串 | Return translated text for current language return _localizationService.GetString(_key); } } }