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);
}
}
}