Zola vs magyar nyelv

Posted 2023-03-13 08:30:00 by sanyi ‐ 2 min read

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
Címkék:
zola magyar elasticlunr-rs elasticlunr