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

View File

@ -112,7 +112,15 @@ internal sealed class PluginUi : IDisposable {
builder.Destroy(); 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); BuildRange(out this._jpRange, GlyphRangesJapanese.GlyphRanges);
this.SetUpUserFonts(); this.SetUpUserFonts();

View File

@ -90,6 +90,10 @@ public class Fonts : ISettingsTab {
ImGuiUtil.HelpText(string.Format(Language.Options_JapaneseFont_Description, Plugin.PluginName)); ImGuiUtil.HelpText(string.Format(Language.Options_JapaneseFont_Description, Plugin.PluginName));
ImGui.Spacing(); 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; const float speed = .0125f;