54 lines
1.6 KiB
C#
54 lines
1.6 KiB
C#
using System.Globalization;
|
|
|
|
namespace Atomx.Admin.Client.Services
|
|
{
|
|
public interface ILocalizationService
|
|
{
|
|
/// <summary>
|
|
/// 获取当前文化环境
|
|
/// </summary>d
|
|
CultureInfo CurrentCulture { get; }
|
|
|
|
/// <summary>
|
|
/// 当语言发生改变时触发的事件。
|
|
/// </summary>
|
|
event EventHandler<CultureInfo> LanguageChanged;
|
|
|
|
/// <summary>
|
|
/// 当语言发生改变时触发的事件。调用 <see cref="InteractiveStringLocalizer"/> 来更改语言环境。
|
|
/// </summary>
|
|
/// <param name="culture"></param>
|
|
void SetLanguage(CultureInfo culture);
|
|
}
|
|
|
|
|
|
public class LocalizationService : ILocalizationService
|
|
{
|
|
private CultureInfo? _currentCulture;
|
|
|
|
/// <summary>
|
|
/// 获取当前文化环境
|
|
/// </summary>
|
|
public CultureInfo CurrentCulture => _currentCulture ?? CultureInfo.CurrentCulture;
|
|
|
|
public event EventHandler<CultureInfo> LanguageChanged = default!;
|
|
|
|
public void SetLanguage(CultureInfo culture)
|
|
{
|
|
if (!culture.Equals(CultureInfo.CurrentCulture))
|
|
{
|
|
CultureInfo.CurrentCulture = culture;
|
|
}
|
|
|
|
if (_currentCulture == null || !_currentCulture.Equals(culture))
|
|
{
|
|
_currentCulture = culture;
|
|
CultureInfo.DefaultThreadCurrentCulture = culture;
|
|
CultureInfo.DefaultThreadCurrentUICulture = culture;
|
|
|
|
LanguageChanged?.Invoke(this, culture);
|
|
}
|
|
}
|
|
}
|
|
}
|