From 44489029776b587ac1494df31d382cf8e595f2fa Mon Sep 17 00:00:00 2001 From: Takeshi KOMIYA Date: Sat, 21 Oct 2017 01:42:53 +0900 Subject: [PATCH 1/2] Fix #4169: Chinese language doesn't trigger Chinese search automatically --- CHANGES | 1 + sphinx/search/__init__.py | 5 +++++ tests/test_search.py | 12 ++++++++++++ 3 files changed, 18 insertions(+) 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' From 05516a61c82ed29deceeda503aa61afcaa87624e Mon Sep 17 00:00:00 2001 From: Takeshi KOMIYA Date: Sat, 21 Oct 2017 13:44:36 +0900 Subject: [PATCH 2/2] Fix mypy violation --- sphinx/ext/intersphinx.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sphinx/ext/intersphinx.py b/sphinx/ext/intersphinx.py index d018603e2..ad50542a3 100644 --- a/sphinx/ext/intersphinx.py +++ b/sphinx/ext/intersphinx.py @@ -217,7 +217,7 @@ def load_mappings(app): if isinstance(value, (list, tuple)): # new format - name, (uri, inv) = key, value # type: ignore + name, (uri, inv) = key, value if not isinstance(name, string_types): logger.warning('intersphinx identifier %r is not string. Ignored', name) continue