diff --git a/CHANGES b/CHANGES index 40c91af68..4e37d3b45 100644 --- a/CHANGES +++ b/CHANGES @@ -31,6 +31,7 @@ Bugs fixed * #3692: Unable to build HTML if writing .buildinfo failed * #4152: HTML writer crashes if a field list is placed on top of the document * #4063: Sphinx crashes when labeling directive ``.. todolist::`` +* #4169: Chinese language doesn't trigger Chinese search automatically Testing -------- diff --git a/sphinx/search/__init__.py b/sphinx/search/__init__.py index ef74d3b71..17560213d 100644 --- a/sphinx/search/__init__.py +++ b/sphinx/search/__init__.py @@ -265,6 +265,11 @@ class IndexBuilder(object): # objtype index -> (domain, type, objname (localized)) lang_class = languages.get(lang) # type: Type[SearchLanguage] # add language-specific SearchLanguage instance + + # fallback; try again with language-code + if lang_class is None and '_' in lang: + lang_class = languages.get(lang.split('_')[0]) + if lang_class is None: self.lang = SearchEnglish(options) # type: SearchLanguage elif isinstance(lang_class, str): diff --git a/tests/test_search.py b/tests/test_search.py index 21c0badb7..f1825dfa4 100644 --- a/tests/test_search.py +++ b/tests/test_search.py @@ -228,3 +228,15 @@ def test_IndexBuilder(): } assert index._objtypes == {('dummy', 'objtype'): 0} assert index._objnames == {0: ('dummy', 'objtype', 'objtype')} + + +def test_IndexBuilder_lookup(): + env = DummyEnvironment('1.0', {}) + + # zh + index = IndexBuilder(env, 'zh', {}, None) + assert index.lang.lang == 'zh' + + # zh_CN + index = IndexBuilder(env, 'zh_CN', {}, None) + assert index.lang.lang == 'zh'