Skip to content

Commit 684c960

Browse files
committed
add language support in pagefind search
1 parent c9f870d commit 684c960

File tree

3 files changed

+36
-9
lines changed

3 files changed

+36
-9
lines changed

Cargo.lock

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

plugins/pagefind/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@ specta-typescript = { workspace = true }
1515
tokio = { workspace = true, features = ["macros", "sync"] }
1616

1717
[dependencies]
18+
codes-iso-639 = { workspace = true }
1819
pagefind = "1.4.0"
20+
whichlang = "0.1.0"
1921

2022
tauri = { workspace = true, features = ["test"] }
2123
tauri-specta = { workspace = true, features = ["derive", "typescript"] }

plugins/pagefind/src/ext.rs

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,29 @@
11
use std::path::PathBuf;
22

3+
use codes_iso_639::part_1::LanguageCode;
4+
5+
fn detect_language(content: &str) -> String {
6+
let lang_code = match whichlang::detect_language(content) {
7+
whichlang::Lang::Ara => LanguageCode::Ar,
8+
whichlang::Lang::Cmn => LanguageCode::Zh,
9+
whichlang::Lang::Deu => LanguageCode::De,
10+
whichlang::Lang::Eng => LanguageCode::En,
11+
whichlang::Lang::Fra => LanguageCode::Fr,
12+
whichlang::Lang::Hin => LanguageCode::Hi,
13+
whichlang::Lang::Ita => LanguageCode::It,
14+
whichlang::Lang::Jpn => LanguageCode::Ja,
15+
whichlang::Lang::Kor => LanguageCode::Ko,
16+
whichlang::Lang::Nld => LanguageCode::Nl,
17+
whichlang::Lang::Por => LanguageCode::Pt,
18+
whichlang::Lang::Rus => LanguageCode::Ru,
19+
whichlang::Lang::Spa => LanguageCode::Es,
20+
whichlang::Lang::Swe => LanguageCode::Sv,
21+
whichlang::Lang::Tur => LanguageCode::Tr,
22+
whichlang::Lang::Vie => LanguageCode::Vi,
23+
};
24+
lang_code.code().to_string()
25+
}
26+
327
#[derive(Clone, serde::Serialize, serde::Deserialize, specta::Type)]
428
pub struct IndexRecord {
529
pub url: String,
@@ -61,7 +85,6 @@ fn build_index_sync(pagefind_dir: PathBuf, records: Vec<IndexRecord>) -> Result<
6185
rt.block_on(async {
6286
let options = PagefindServiceConfig::builder()
6387
.keep_index_url(true)
64-
.force_language("en".to_string())
6588
.build();
6689

6790
let mut index = PagefindIndex::new(Some(options)).map_err(|e| crate::Error::Anyhow(e))?;
@@ -72,15 +95,9 @@ fn build_index_sync(pagefind_dir: PathBuf, records: Vec<IndexRecord>) -> Result<
7295
meta.insert("title".to_string(), t);
7396
}
7497

98+
let language = detect_language(&record.content);
7599
index
76-
.add_custom_record(
77-
record.url,
78-
record.content,
79-
"en".to_string(),
80-
Some(meta),
81-
None,
82-
None,
83-
)
100+
.add_custom_record(record.url, record.content, language, Some(meta), None, None)
84101
.await
85102
.map_err(|e| crate::Error::Anyhow(e))?;
86103
}

0 commit comments

Comments
 (0)