User language control via userlang query param

This is a draft commit enabling the testing of the support for
kiwix-serve internationalization.
This commit is contained in:
Veloman Yunkan 2022-01-17 00:28:24 +04:00 committed by Matthieu Gautier
parent 507e111f34
commit e4a0a029ff
7 changed files with 33 additions and 4 deletions

View File

@ -443,11 +443,11 @@ SuggestionsList_t getSuggestions(SuggestionSearcherCache& cache, const zim::Arch
namespace namespace
{ {
std::string makeFulltextSearchSuggestion(const std::string& queryString) std::string makeFulltextSearchSuggestion(const std::string& lang, const std::string& queryString)
{ {
MustacheData data; MustacheData data;
data.set("SEARCH_TERMS", queryString); data.set("SEARCH_TERMS", queryString);
const std::string tmpl = getTranslatedString("en", "suggest-full-text-search"); const std::string tmpl = getTranslatedString(lang, "suggest-full-text-search");
return render_template(tmpl, data); return render_template(tmpl, data);
} }
@ -523,7 +523,8 @@ std::unique_ptr<Response> InternalServer::handle_suggest(const RequestContext& r
/* Propose the fulltext search if possible */ /* Propose the fulltext search if possible */
if (archive->hasFulltextIndex()) { if (archive->hasFulltextIndex()) {
MustacheData result; MustacheData result;
result.set("label", makeFulltextSearchSuggestion(queryString)); const auto lang = request.get_user_language();
result.set("label", makeFulltextSearchSuggestion(lang, queryString));
result.set("value", queryString + " "); result.set("value", queryString + " ");
result.set("kind", "pattern"); result.set("kind", "pattern");
result.set("first", first); result.set("first", first);

View File

@ -193,4 +193,9 @@ std::string RequestContext::get_query() const {
return q; return q;
} }
std::string RequestContext::get_user_language() const
{
return get_optional_param<std::string>("userlang", "en");
}
} }

View File

@ -94,6 +94,8 @@ class RequestContext {
bool can_compress() const { return acceptEncodingDeflate; } bool can_compress() const { return acceptEncodingDeflate; }
std::string get_user_language() const;
private: // data private: // data
std::string full_url; std::string full_url;
std::string url; std::string url;

8
static/i18n/hy.json Normal file
View File

@ -0,0 +1,8 @@
{
"@metadata": {
"authors": [
]
},
"name":"Հայերեն",
"suggest-full-text-search": "որոնել '{{{SEARCH_TERMS}}}'..."
}

View File

@ -1 +1,2 @@
i18n/en.json i18n/en.json
i18n/hy.json

View File

@ -12,9 +12,10 @@ jq(document).ready(() => {
? (new URLSearchParams(window.location.search)).get('content') ? (new URLSearchParams(window.location.search)).get('content')
: window.location.pathname.split(`${root}/`)[1].split('/')[0]; : window.location.pathname.split(`${root}/`)[1].split('/')[0];
const userlang = (new URLSearchParams(window.location.search)).get('userlang') || "en";
$( "#kiwixsearchbox" ).autocomplete({ $( "#kiwixsearchbox" ).autocomplete({
source: `${root}/suggest?content=${bookName}`, source: `${root}/suggest?content=${bookName}&userlang=${userlang}`,
dataType: "json", dataType: "json",
cache: false, cache: false,

View File

@ -1182,6 +1182,17 @@ R"EXPECTEDRESPONSE([
//EOLWHITESPACEMARKER //EOLWHITESPACEMARKER
} }
] ]
)EXPECTEDRESPONSE"
},
{ /* url: */ "/ROOT/suggest?content=zimfile&term=abracadabra&userlang=hy",
R"EXPECTEDRESPONSE([
{
"value" : "abracadabra ",
"label" : "որոնել &apos;abracadabra&apos;...",
"kind" : "pattern"
//EOLWHITESPACEMARKER
}
]
)EXPECTEDRESPONSE" )EXPECTEDRESPONSE"
}, },
}; };