75 lines
2.4 KiB
C#
75 lines
2.4 KiB
C#
using System;
|
|
using System.Windows.Markup;
|
|
using XP.Common.Localization.Interfaces;
|
|
|
|
namespace XP.Common.Localization.Extensions
|
|
{
|
|
/// <summary>
|
|
/// 本地化标记扩展 | Localization markup extension
|
|
/// 用法: {loc:Localization Key=ResourceKey} | Usage: {loc:Localization Key=ResourceKey}
|
|
/// </summary>
|
|
[MarkupExtensionReturnType(typeof(string))]
|
|
public class LocalizationExtension : MarkupExtension
|
|
{
|
|
private static ILocalizationService? _localizationService;
|
|
private string _key = string.Empty;
|
|
|
|
/// <summary>
|
|
/// 资源键 | Resource key
|
|
/// </summary>
|
|
[ConstructorArgument("key")]
|
|
public string Key
|
|
{
|
|
get => _key;
|
|
set => _key = value;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 默认构造函数 | Default constructor
|
|
/// </summary>
|
|
public LocalizationExtension()
|
|
{
|
|
}
|
|
|
|
/// <summary>
|
|
/// 带资源键的构造函数 | Constructor with resource key
|
|
/// </summary>
|
|
/// <param name="key">资源键 | Resource key</param>
|
|
public LocalizationExtension(string key)
|
|
{
|
|
_key = key;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 初始化本地化服务(由 CommonModule 调用)| Initialize localization service (called by CommonModule)
|
|
/// </summary>
|
|
/// <param name="localizationService">本地化服务实例 | Localization service instance</param>
|
|
public static void Initialize(ILocalizationService localizationService)
|
|
{
|
|
_localizationService = localizationService;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 提供本地化字符串值 | Provide localized string value
|
|
/// </summary>
|
|
/// <param name="serviceProvider">服务提供者 | Service provider</param>
|
|
/// <returns>本地化字符串 | Localized string</returns>
|
|
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);
|
|
}
|
|
}
|
|
}
|