Files
mpv.net/src/MpvNet.Windows/WPF/WpfTranslator.cs
stax76 6ef9f32d4f misc
2023-12-26 16:58:12 +01:00

69 lines
1.8 KiB
C#

using NGettext.Wpf;
using System.Globalization;
namespace MpvNet.Windows.WPF;
public class WpfTranslator : ITranslator
{
string _localizerLangauge = "";
static Language[] Languages { get; } = new Language[] {
new("english", "en", "en"),
new("chinese-china", "zh-CN", "zh"), // Chinese (Simplified)
new("german", "de", "de"),
};
public string Gettext(string msgId)
{
InitNGettextWpf();
return Translation._(msgId);
}
void InitNGettextWpf()
{
if (Translation.Localizer == null || _localizerLangauge != App.Language)
{
CompositionRoot.Compose("mpvnet", GetCulture(App.Language), Folder.Startup + "Locale");
_localizerLangauge = App.Language;
}
}
string GetSystemLanguage()
{
string twoLetterName = CultureInfo.CurrentUICulture.TwoLetterISOLanguageName;
if (twoLetterName == "zh")
return "chinese-china"; // Chinese (Simplified)
return new CultureInfo(twoLetterName).EnglishName.ToLowerInvariant();
}
CultureInfo GetCulture(string name)
{
if (name == "system")
name = GetSystemLanguage();
foreach (Language lang in Languages)
if (lang.MpvNetName == name)
return new CultureInfo(lang.CultureInfoName);
return new CultureInfo("en");
}
class Language
{
public string MpvNetName { get; }
public string CultureInfoName { get; }
public string TwoLetterName { get; }
public Language(string mpvNetName, string cultureInfoName, string twoLetterName)
{
MpvNetName = mpvNetName;
CultureInfoName = cultureInfoName;
TwoLetterName = twoLetterName;
}
}
}