A Zola keresőjének magyar nyelvi támogatásával volt egy kis probléma
Amikor kipublikáltam a blog első verzióját, észrevettem hogy a kereső mező mindig az angol nyelvű tartalmakban keres.
A frontend kód látszólag jól működött, amikor angol nyelvű oldalon voltam akkor az angol, amikor magyar nyelvű oldalon voltam akkor a magyar indexben keresett.
Az indexek tartalmát megnézve derült ki, hogy a Zola mindkét indexet: a magyar és az angol verziót is az angol tartalmak alapján, angolul generálta le.
Kicsit jobban megnézve a Zola kódját kiderült, hogy azért mert az indexer mindig az alapértelmezett nyelvet használja:
fn index_for_lang(&self, lang: &str) -> Result<()> {
let index_json = search::build_index(
&self.config.default_language,
&self.library.read().unwrap(),
&self.config,
)?;
...
Nem tűnt túl logikusnak, átírtam hogy használja az aktuális nyelvet, ekkor derült ki miért volt szükség erre a kis trükkre: a Zola kereső funkciója az elasticlunr-rs csomagra épül aminek finonam szólva hiányos a nyelvi támogatása. Az elasticlunr-rs két dologra épül: magára az elasticlunr.js library-re és a rust_stemmers csomagra. Szerencsére mindkettőnek van magyar nyelvi támogatása, így csak az elasticlunr-rs csomagot kellett kiegészíteni hogy használja is ezeket.
A következő lépés a Zola okosítása volt: legalább próbáljon rá az aktuális nyelv használatára, mielőtt visszalép a default nyelvre:
// Checks whether the given language is supported by Elasticlunr
pub fn is_language_supported(lang: &str) -> bool {
lang::from_code(lang).is_some()
}
fn index_for_lang(&self, lang: &str) -> Result<()> {
let index_json = search::build_index(
match search::is_language_supported(lang) {
true => lang,
false => &self.config.default_language,
},
&self.library.read().unwrap(),
&self.config,
)?;
...
Ezekkel a módosításokkal már jól generálódott le az index, de eltört a kereső mező működése. Kiderült hogy azért, mert az elasticlunr.js alapcsomagja csak az angol nyelvi támogatást tartalmazza, a többi nyelv külön csomagban van.
Ezt a két állományt letöltve és a témához adva megjavult a kereső:
js/lunr.stemmer.support.min.js
js/lunr.hu.min.js