translation using NGettext.Wpf
This commit is contained in:
63
src/MpvNet.Windows/WPF/WpfTranslator.cs
Normal file
63
src/MpvNet.Windows/WPF/WpfTranslator.cs
Normal file
@@ -0,0 +1,63 @@
|
||||
|
||||
using NGettext.Wpf;
|
||||
|
||||
using System.Globalization;
|
||||
|
||||
namespace MpvNet.Windows.WPF;
|
||||
|
||||
public class WpfTranslator : ITranslator
|
||||
{
|
||||
static Language[] Languages { get; } = new Language[] {
|
||||
new("english", "en", "en"),
|
||||
new("chinese-china", "zh-Hans", "zh"), // Chinese (Simplified)
|
||||
new("german", "de", "de"),
|
||||
};
|
||||
|
||||
public string Gettext(string msgId)
|
||||
{
|
||||
InitNGettextWpf();
|
||||
return Translation._(msgId);
|
||||
}
|
||||
|
||||
void InitNGettextWpf()
|
||||
{
|
||||
if (Translation.Localizer == null)
|
||||
CompositionRoot.Compose("mpvnet", GetCulture(App.Language), Folder.Startup + "Locale");
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
throw new Exception($"Unknown language {name}.");
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user