瀏覽代碼

added language check to only support 'from languages' that has a symbol check

Scrublord1336 6 年之前
父節點
當前提交
89fe534c3e

+ 8 - 0
src/XUnity.AutoTranslator.Plugin.Core/AutoTranslationPlugin.cs

@@ -118,6 +118,14 @@ namespace XUnity.AutoTranslator.Plugin.Core
             Logger.Current.Error( e, "An unexpected error occurred during initialization of endpoint." );
             Logger.Current.Error( e, "An unexpected error occurred during initialization of endpoint." );
          }
          }
 
 
+         if( !TextHelper.IsFromLanguageSupported( Settings.FromLanguage ) )
+         {
+            Logger.Current.Error( $"The plugin has been configured to use the 'FromLanguage={Settings.FromLanguage}'. This language is not supported. Shutting plugin down." );
+
+            _endpoint = null;
+            Settings.IsShutdown = true;
+         }
+
          _symbolCheck = TextHelper.GetSymbolCheck( Settings.FromLanguage );
          _symbolCheck = TextHelper.GetSymbolCheck( Settings.FromLanguage );
 
 
          LoadTranslations();
          LoadTranslations();

+ 55 - 2
src/XUnity.AutoTranslator.Plugin.Core/Utilities/TextHelper.cs

@@ -10,9 +10,17 @@ namespace XUnity.AutoTranslator.Plugin.Core.Utilities
       private static readonly Dictionary<string, Func<string, bool>> LanguageSymbolChecks = new Dictionary<string, Func<string, bool>>( StringComparer.OrdinalIgnoreCase )
       private static readonly Dictionary<string, Func<string, bool>> LanguageSymbolChecks = new Dictionary<string, Func<string, bool>>( StringComparer.OrdinalIgnoreCase )
       {
       {
          { "ja", ContainsJapaneseSymbols },
          { "ja", ContainsJapaneseSymbols },
-         { "ja-JP", ContainsJapaneseSymbols },
+         { "ru", ContainsRussianSymbols },
+         { "zh-CN", ContainsChineseSymbols },
+         { "zh-TW", ContainsChineseSymbols },
+         { "ko", ContainsKoreanSymbols },
       };
       };
 
 
+      public static bool IsFromLanguageSupported( string code )
+      {
+         return LanguageSymbolChecks.ContainsKey( code );
+      }
+
       public static Func<string, bool> GetSymbolCheck( string language )
       public static Func<string, bool> GetSymbolCheck( string language )
       {
       {
          if( LanguageSymbolChecks.TryGetValue( language, out Func<string, bool> check ) )
          if( LanguageSymbolChecks.TryGetValue( language, out Func<string, bool> check ) )
@@ -34,7 +42,52 @@ namespace XUnity.AutoTranslator.Plugin.Core.Utilities
                || ( c >= '\u30a1' && c <= '\u30fa' ) // katakana
                || ( c >= '\u30a1' && c <= '\u30fa' ) // katakana
                || ( c >= '\uff66' && c <= '\uff9d' ) // half-width katakana
                || ( c >= '\uff66' && c <= '\uff9d' ) // half-width katakana
                || ( c >= '\u4e00' && c <= '\u9faf' ) // CJK unifed ideographs - Common and uncommon kanji
                || ( c >= '\u4e00' && c <= '\u9faf' ) // CJK unifed ideographs - Common and uncommon kanji
-               || ( c >= '\u3400' && c <= '\u4db5' ) ) // CJK unified ideographs Extension A - Rare kanji ( 3400 - 4dbf)
+               || ( c >= '\u3400' && c <= '\u4dbf' ) // CJK unified ideographs Extension A - Rare kanji ( 3400 - 4dbf)
+               || ( c >= '\uf900' && c <= '\ufaff' ) ) // CJK Compatibility Ideographs
+            {
+               return true;
+            }
+         }
+         return false;
+      }
+
+      public static bool ContainsKoreanSymbols( string text )
+      {
+         foreach( var c in text )
+         {
+            if( ( c >= '\uac00' && c <= '\ud7af' ) ) // Hangul Syllables
+            {
+               return true;
+            }
+         }
+         return false;
+      }
+
+      public static bool ContainsChineseSymbols( string text )
+      {
+         foreach( var c in text )
+         {
+            if( ( c >= '\u4e00' && c <= '\u9faf' )
+               || ( c >= '\u3400' && c <= '\u4dbf' )
+               || ( c >= '\uf900' && c <= '\ufaff' ) )
+            {
+               return true;
+            }
+         }
+         return false;
+      }
+
+      public static bool ContainsRussianSymbols( string text )
+      {
+         foreach( var c in text )
+         {
+            if( ( c >= '\u0400' && c <= '\u04ff' )
+               || ( c >= '\u0500' && c <= '\u052f' )
+               || ( c >= '\u2de0' && c <= '\u2dff' )
+               || ( c >= '\ua640' && c <= '\ua69f' )
+               || ( c >= '\u1c80' && c <= '\u1c88' )
+               || ( c >= '\ufe2e' && c <= '\ufe2f' )
+               || ( c == '\u1d2b' || c == '\u1d78' ) )
             {
             {
                return true;
                return true;
             }
             }