diff options
Diffstat (limited to 'source/blender/blentranslation/intern/blt_lang.c')
-rw-r--r-- | source/blender/blentranslation/intern/blt_lang.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/source/blender/blentranslation/intern/blt_lang.c b/source/blender/blentranslation/intern/blt_lang.c index 1ad62fa5869..74c2b4b7472 100644 --- a/source/blender/blentranslation/intern/blt_lang.c +++ b/source/blender/blentranslation/intern/blt_lang.c @@ -54,6 +54,10 @@ #include "MEM_guardedalloc.h" +/* Cached IME support flags */ +static bool ime_is_lang_supported = false; +static void blt_lang_check_ime_supported(void); + #ifdef WITH_INTERNATIONAL #include "boost_locale_wrapper.h" @@ -280,6 +284,7 @@ void BLT_lang_set(const char *str) #else (void)str; #endif + blt_lang_check_ime_supported(); } /* Get the current locale (short code, e.g. es_ES). */ @@ -355,3 +360,32 @@ void BLT_lang_locale_explode( MEM_freeN(_t); } } + +/* Test if the translation context allows IME input - used to + * avoid weird character drawing if IME inputs non-ascii chars. + */ +static void blt_lang_check_ime_supported(void) +{ +#ifdef WITH_INPUT_IME + const char *uilng = BLT_lang_get(); + if (U.transopts & USER_DOTRANSLATE) { + ime_is_lang_supported = STREQ(uilng, "zh_CN") || + STREQ(uilng, "zh_TW") || + STREQ(uilng, "ja_JP"); + } + else { + ime_is_lang_supported = false; + } +#else + ime_is_lang_supported = false; +#endif +} + +bool BLT_lang_is_ime_supported(void) +{ +#ifdef WITH_INPUT_IME + return ime_is_lang_supported; +#else + return false; +#endif +} |