feat: add support for Chinese characters

This commit is contained in:
Anna 2022-06-01 16:44:45 -04:00
parent bd68419074
commit 2f68ab1950
Signed by: anna
GPG Key ID: 0B391D8F06FCD9E0
3 changed files with 39 additions and 13 deletions

View File

@ -36,6 +36,7 @@ internal class Configuration : IPluginConfiguration {
public bool SortAutoTranslate;
public bool FontsEnabled = true;
public bool EnableChineseRange;
public float FontSize = 17f;
public float JapaneseFontSize = 17f;
public float SymbolsFontSize = 17f;
@ -70,6 +71,7 @@ internal class Configuration : IPluginConfiguration {
this.SharedMode = other.SharedMode;
this.SortAutoTranslate = other.SortAutoTranslate;
this.FontsEnabled = other.FontsEnabled;
this.EnableChineseRange = other.EnableChineseRange;
this.FontSize = other.FontSize;
this.JapaneseFontSize = other.JapaneseFontSize;
this.SymbolsFontSize = other.SymbolsFontSize;
@ -246,49 +248,61 @@ internal static class KeybindModeExt {
[Serializable]
internal enum LanguageOverride {
None,
ChineseSimplified,
ChineseTraditional,
English,
French,
German,
Italian,
Japanese,
Korean,
Norwegian,
Greek,
// Italian,
// Japanese,
// Korean,
// Norwegian,
PortugueseBrazil,
Romanian,
Russian,
Spanish,
Swedish,
}
internal static class LanguageOverrideExt {
internal static string Name(this LanguageOverride mode) => mode switch {
LanguageOverride.None => Language.LanguageOverride_None,
LanguageOverride.ChineseSimplified => "简体中文",
LanguageOverride.ChineseTraditional => "繁體中文",
LanguageOverride.English => "English",
LanguageOverride.French => "Français",
LanguageOverride.German => "Deutsch",
LanguageOverride.Italian => "Italiano",
LanguageOverride.Japanese => "日本語",
LanguageOverride.Korean => "한국어 (Korean)",
LanguageOverride.Norwegian => "Norsk",
LanguageOverride.Greek => "Ελληνικά",
// LanguageOverride.Italian => "Italiano",
// LanguageOverride.Japanese => "日本語",
// LanguageOverride.Korean => "한국어 (Korean)",
// LanguageOverride.Norwegian => "Norsk",
LanguageOverride.PortugueseBrazil => "Português do Brasil",
LanguageOverride.Romanian => "Română",
LanguageOverride.Russian => "Русский",
LanguageOverride.Spanish => "Español",
LanguageOverride.Swedish => "Svenska",
_ => throw new ArgumentOutOfRangeException(nameof(mode), mode, null),
};
internal static string Code(this LanguageOverride mode) => mode switch {
LanguageOverride.None => "",
LanguageOverride.ChineseSimplified => "zh-hans",
LanguageOverride.ChineseTraditional => "zh-hant",
LanguageOverride.English => "en",
LanguageOverride.French => "fr",
LanguageOverride.German => "de",
LanguageOverride.Italian => "it",
LanguageOverride.Japanese => "ja",
LanguageOverride.Korean => "ko",
LanguageOverride.Norwegian => "no",
LanguageOverride.Greek => "el",
// LanguageOverride.Italian => "it",
// LanguageOverride.Japanese => "ja",
// LanguageOverride.Korean => "ko",
// LanguageOverride.Norwegian => "no",
LanguageOverride.PortugueseBrazil => "pt-br",
LanguageOverride.Romanian => "ro",
LanguageOverride.Russian => "ru",
LanguageOverride.Spanish => "es",
LanguageOverride.Swedish => "sv",
_ => throw new ArgumentOutOfRangeException(nameof(mode), mode, null),
};
}

View File

@ -112,7 +112,15 @@ internal sealed class PluginUi : IDisposable {
builder.Destroy();
}
BuildRange(out this._ranges, null, ImGui.GetIO().Fonts.GetGlyphRangesDefault());
var ranges = new List<IntPtr> {
ImGui.GetIO().Fonts.GetGlyphRangesDefault(),
};
if (this.Plugin.Config.EnableChineseRange) {
ranges.Add(ImGui.GetIO().Fonts.GetGlyphRangesChineseFull());
}
BuildRange(out this._ranges, null, ranges.ToArray());
BuildRange(out this._jpRange, GlyphRangesJapanese.GlyphRanges);
this.SetUpUserFonts();

View File

@ -90,6 +90,10 @@ public class Fonts : ISettingsTab {
ImGuiUtil.HelpText(string.Format(Language.Options_JapaneseFont_Description, Plugin.PluginName));
ImGui.Spacing();
ImGui.Checkbox("Enable Chinese glyphs", ref this.Mutable.EnableChineseRange);
ImGuiUtil.HelpText("Adds support for Chinese characters in the global font.");
ImGui.Spacing();
}
const float speed = .0125f;