translation using NGettext.Wpf

This commit is contained in:
stax76
2023-12-08 06:23:17 +01:00
parent 8997a2eacb
commit 5dd3716012
73 changed files with 3001 additions and 17699 deletions

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