From bd41fb9427f3965b91ac467fe12045bbb793b5e9 Mon Sep 17 00:00:00 2001 From: Ilia <43654815+istudyatuni@users.noreply.github.com> Date: Thu, 12 Jun 2025 13:30:53 +0300 Subject: [PATCH] Check that all translation files are added to TRANSLATIONS and ends with newline (#6424) Co-authored-by: Laurenz --- crates/typst-library/src/text/lang.rs | 68 +++++++++++++++++++-- crates/typst-library/translations/ar.txt | 2 +- crates/typst-library/translations/bg.txt | 2 +- crates/typst-library/translations/ca.txt | 2 +- crates/typst-library/translations/cs.txt | 2 +- crates/typst-library/translations/da.txt | 2 +- crates/typst-library/translations/de.txt | 2 +- crates/typst-library/translations/el.txt | 2 +- crates/typst-library/translations/en.txt | 2 +- crates/typst-library/translations/es.txt | 2 +- crates/typst-library/translations/et.txt | 2 +- crates/typst-library/translations/fi.txt | 2 +- crates/typst-library/translations/fr.txt | 2 +- crates/typst-library/translations/gl.txt | 2 +- crates/typst-library/translations/he.txt | 2 +- crates/typst-library/translations/hu.txt | 4 +- crates/typst-library/translations/is.txt | 2 +- crates/typst-library/translations/it.txt | 2 +- crates/typst-library/translations/ja.txt | 2 +- crates/typst-library/translations/la.txt | 2 +- crates/typst-library/translations/nb.txt | 2 +- crates/typst-library/translations/nl.txt | 2 +- crates/typst-library/translations/nn.txt | 2 +- crates/typst-library/translations/pl.txt | 2 +- crates/typst-library/translations/pt-PT.txt | 12 ++-- crates/typst-library/translations/pt.txt | 2 +- crates/typst-library/translations/ro.txt | 2 +- crates/typst-library/translations/ru.txt | 2 +- crates/typst-library/translations/sl.txt | 2 +- crates/typst-library/translations/sq.txt | 2 +- crates/typst-library/translations/sr.txt | 2 +- crates/typst-library/translations/sv.txt | 2 +- crates/typst-library/translations/tl.txt | 2 +- crates/typst-library/translations/tr.txt | 2 +- crates/typst-library/translations/uk.txt | 2 +- crates/typst-library/translations/vi.txt | 2 +- crates/typst-library/translations/zh-TW.txt | 4 +- crates/typst-library/translations/zh.txt | 2 +- 38 files changed, 108 insertions(+), 48 deletions(-) diff --git a/crates/typst-library/src/text/lang.rs b/crates/typst-library/src/text/lang.rs index f9f13c783..e06156c43 100644 --- a/crates/typst-library/src/text/lang.rs +++ b/crates/typst-library/src/text/lang.rs @@ -14,13 +14,14 @@ macro_rules! translation { }; } -const TRANSLATIONS: [(&str, &str); 40] = [ +const TRANSLATIONS: &[(&str, &str)] = &[ translation!("ar"), translation!("bg"), translation!("ca"), translation!("cs"), translation!("da"), translation!("de"), + translation!("el"), translation!("en"), translation!("es"), translation!("et"), @@ -28,7 +29,6 @@ const TRANSLATIONS: [(&str, &str); 40] = [ translation!("fi"), translation!("fr"), translation!("gl"), - translation!("el"), translation!("he"), translation!("hu"), translation!("id"), @@ -41,8 +41,8 @@ const TRANSLATIONS: [(&str, &str); 40] = [ translation!("nl"), translation!("nn"), translation!("pl"), - translation!("pt-PT"), translation!("pt"), + translation!("pt-PT"), translation!("ro"), translation!("ru"), translation!("sl"), @@ -53,8 +53,8 @@ const TRANSLATIONS: [(&str, &str); 40] = [ translation!("tr"), translation!("uk"), translation!("vi"), - translation!("zh-TW"), translation!("zh"), + translation!("zh-TW"), ]; /// An identifier for a natural language. @@ -312,14 +312,74 @@ fn lang_str(lang: Lang, region: Option) -> EcoString { #[cfg(test)] mod tests { + use std::collections::HashSet; + use std::path::PathBuf; + use typst_utils::option_eq; use super::*; + fn translation_files_iter() -> impl Iterator { + std::fs::read_dir("translations") + .unwrap() + .map(|e| e.unwrap().path()) + .filter(|e| e.is_file() && e.extension().is_some_and(|e| e == "txt")) + } + #[test] fn test_region_option_eq() { let region = Some(Region([b'U', b'S'])); assert!(option_eq(region, "US")); assert!(!option_eq(region, "AB")); } + + #[test] + fn test_all_translations_included() { + let defined_keys = + HashSet::<&str>::from_iter(TRANSLATIONS.iter().map(|(lang, _)| *lang)); + let mut checked = 0; + for file in translation_files_iter() { + assert!( + defined_keys.contains( + file.file_stem() + .expect("translation file should have basename") + .to_str() + .expect("translation file name should be utf-8 encoded") + ), + "translation from {:?} should be registered in TRANSLATIONS in {}", + file.file_name().unwrap(), + file!(), + ); + checked += 1; + } + assert_eq!(TRANSLATIONS.len(), checked); + } + + #[test] + fn test_all_translation_files_formatted() { + for file in translation_files_iter() { + let content = std::fs::read_to_string(&file) + .expect("translation file should be in utf-8 encoding"); + let filename = file.file_name().unwrap(); + assert!( + content.ends_with('\n'), + "translation file {filename:?} should end with linebreak", + ); + for line in content.lines() { + assert_eq!( + line.trim(), + line, + "line {line:?} in {filename:?} should not have extra whitespaces" + ); + } + } + } + + #[test] + fn test_translations_sorted() { + assert!( + TRANSLATIONS.is_sorted_by_key(|(lang, _)| lang), + "TRANSLATIONS should be sorted" + ); + } } diff --git a/crates/typst-library/translations/ar.txt b/crates/typst-library/translations/ar.txt index 6b94dc44c..7af2aaa91 100644 --- a/crates/typst-library/translations/ar.txt +++ b/crates/typst-library/translations/ar.txt @@ -5,4 +5,4 @@ bibliography = المراجع heading = الفصل outline = المحتويات raw = قائمة -page = صفحة \ No newline at end of file +page = صفحة diff --git a/crates/typst-library/translations/bg.txt b/crates/typst-library/translations/bg.txt index 101a25221..e377af398 100644 --- a/crates/typst-library/translations/bg.txt +++ b/crates/typst-library/translations/bg.txt @@ -5,4 +5,4 @@ bibliography = Библиография heading = Раздел outline = Съдържание raw = Приложение -page = стр. \ No newline at end of file +page = стр. diff --git a/crates/typst-library/translations/ca.txt b/crates/typst-library/translations/ca.txt index d81645eca..f02473293 100644 --- a/crates/typst-library/translations/ca.txt +++ b/crates/typst-library/translations/ca.txt @@ -5,4 +5,4 @@ bibliography = Bibliografia heading = Secció outline = Índex raw = Llistat -page = pàgina \ No newline at end of file +page = pàgina diff --git a/crates/typst-library/translations/cs.txt b/crates/typst-library/translations/cs.txt index e21ca3520..417f1ab2e 100644 --- a/crates/typst-library/translations/cs.txt +++ b/crates/typst-library/translations/cs.txt @@ -5,4 +5,4 @@ bibliography = Bibliografie heading = Kapitola outline = Obsah raw = Výpis -page = strana \ No newline at end of file +page = strana diff --git a/crates/typst-library/translations/da.txt b/crates/typst-library/translations/da.txt index 78d7e601e..4ceeda065 100644 --- a/crates/typst-library/translations/da.txt +++ b/crates/typst-library/translations/da.txt @@ -5,4 +5,4 @@ bibliography = Bibliografi heading = Afsnit outline = Indhold raw = Liste -page = side \ No newline at end of file +page = side diff --git a/crates/typst-library/translations/de.txt b/crates/typst-library/translations/de.txt index dad785bcd..a9da1adb4 100644 --- a/crates/typst-library/translations/de.txt +++ b/crates/typst-library/translations/de.txt @@ -5,4 +5,4 @@ bibliography = Bibliographie heading = Abschnitt outline = Inhaltsverzeichnis raw = Listing -page = Seite \ No newline at end of file +page = Seite diff --git a/crates/typst-library/translations/el.txt b/crates/typst-library/translations/el.txt index 34aa3c44d..3853a45bb 100644 --- a/crates/typst-library/translations/el.txt +++ b/crates/typst-library/translations/el.txt @@ -4,4 +4,4 @@ equation = Εξίσωση bibliography = Βιβλιογραφία heading = Κεφάλαιο outline = Περιεχόμενα -raw = Παράθεση \ No newline at end of file +raw = Παράθεση diff --git a/crates/typst-library/translations/en.txt b/crates/typst-library/translations/en.txt index a4f82c89c..fa2d65b91 100644 --- a/crates/typst-library/translations/en.txt +++ b/crates/typst-library/translations/en.txt @@ -5,4 +5,4 @@ bibliography = Bibliography heading = Section outline = Contents raw = Listing -page = page \ No newline at end of file +page = page diff --git a/crates/typst-library/translations/es.txt b/crates/typst-library/translations/es.txt index 6580fb0a6..8fe9929d8 100644 --- a/crates/typst-library/translations/es.txt +++ b/crates/typst-library/translations/es.txt @@ -5,4 +5,4 @@ bibliography = Bibliografía heading = Sección outline = Índice raw = Listado -page = página \ No newline at end of file +page = página diff --git a/crates/typst-library/translations/et.txt b/crates/typst-library/translations/et.txt index 02134eff1..588929052 100644 --- a/crates/typst-library/translations/et.txt +++ b/crates/typst-library/translations/et.txt @@ -5,4 +5,4 @@ bibliography = Viited heading = Peatükk outline = Sisukord raw = List -page = lk. \ No newline at end of file +page = lk. diff --git a/crates/typst-library/translations/fi.txt b/crates/typst-library/translations/fi.txt index 91c943654..edb88de8d 100644 --- a/crates/typst-library/translations/fi.txt +++ b/crates/typst-library/translations/fi.txt @@ -5,4 +5,4 @@ bibliography = Viitteet heading = Osio outline = Sisällys raw = Esimerkki -page = sivu \ No newline at end of file +page = sivu diff --git a/crates/typst-library/translations/fr.txt b/crates/typst-library/translations/fr.txt index a5b399154..f8e27c9c0 100644 --- a/crates/typst-library/translations/fr.txt +++ b/crates/typst-library/translations/fr.txt @@ -5,4 +5,4 @@ bibliography = Bibliographie heading = Chapitre outline = Table des matières raw = Liste -page = page \ No newline at end of file +page = page diff --git a/crates/typst-library/translations/gl.txt b/crates/typst-library/translations/gl.txt index d11269223..49bf01b74 100644 --- a/crates/typst-library/translations/gl.txt +++ b/crates/typst-library/translations/gl.txt @@ -5,4 +5,4 @@ bibliography = Bibliografía heading = Sección outline = Índice raw = Listado -page = páxina \ No newline at end of file +page = páxina diff --git a/crates/typst-library/translations/he.txt b/crates/typst-library/translations/he.txt index c3ca77120..5317c9278 100644 --- a/crates/typst-library/translations/he.txt +++ b/crates/typst-library/translations/he.txt @@ -5,4 +5,4 @@ bibliography = רשימת מקורות heading = חלק outline = תוכן עניינים raw = קטע מקור -page = עמוד \ No newline at end of file +page = עמוד diff --git a/crates/typst-library/translations/hu.txt b/crates/typst-library/translations/hu.txt index d800688e5..a88da3e54 100644 --- a/crates/typst-library/translations/hu.txt +++ b/crates/typst-library/translations/hu.txt @@ -4,5 +4,5 @@ equation = Egyenlet bibliography = Irodalomjegyzék heading = Fejezet outline = Tartalomjegyzék -# raw = -page = oldal \ No newline at end of file +# raw = +page = oldal diff --git a/crates/typst-library/translations/is.txt b/crates/typst-library/translations/is.txt index 151303eb9..756c97700 100644 --- a/crates/typst-library/translations/is.txt +++ b/crates/typst-library/translations/is.txt @@ -5,4 +5,4 @@ bibliography = Heimildaskrá heading = Kafli outline = Efnisyfirlit raw = Sýnishorn -page = blaðsíða \ No newline at end of file +page = blaðsíða diff --git a/crates/typst-library/translations/it.txt b/crates/typst-library/translations/it.txt index f1ee1d339..9f3c352db 100644 --- a/crates/typst-library/translations/it.txt +++ b/crates/typst-library/translations/it.txt @@ -5,4 +5,4 @@ bibliography = Bibliografia heading = Sezione outline = Indice raw = Codice -page = pag. \ No newline at end of file +page = pag. diff --git a/crates/typst-library/translations/ja.txt b/crates/typst-library/translations/ja.txt index ea3404053..484b20a62 100644 --- a/crates/typst-library/translations/ja.txt +++ b/crates/typst-library/translations/ja.txt @@ -5,4 +5,4 @@ bibliography = 参考文献 heading = 節 outline = 目次 raw = リスト -page = ページ \ No newline at end of file +page = ページ diff --git a/crates/typst-library/translations/la.txt b/crates/typst-library/translations/la.txt index eb48d0e91..d25517c2f 100644 --- a/crates/typst-library/translations/la.txt +++ b/crates/typst-library/translations/la.txt @@ -5,4 +5,4 @@ bibliography = Conspectus librorum heading = Caput outline = Index capitum raw = Exemplum -page = charta \ No newline at end of file +page = charta diff --git a/crates/typst-library/translations/nb.txt b/crates/typst-library/translations/nb.txt index b6ad00c9b..edf66b53f 100644 --- a/crates/typst-library/translations/nb.txt +++ b/crates/typst-library/translations/nb.txt @@ -5,4 +5,4 @@ bibliography = Bibliografi heading = Kapittel outline = Innhold raw = Utskrift -page = side \ No newline at end of file +page = side diff --git a/crates/typst-library/translations/nl.txt b/crates/typst-library/translations/nl.txt index 788981faa..24b8315f0 100644 --- a/crates/typst-library/translations/nl.txt +++ b/crates/typst-library/translations/nl.txt @@ -5,4 +5,4 @@ bibliography = Bibliografie heading = Hoofdstuk outline = Inhoudsopgave raw = Listing -page = pagina \ No newline at end of file +page = pagina diff --git a/crates/typst-library/translations/nn.txt b/crates/typst-library/translations/nn.txt index 565d9a807..2c2a27a76 100644 --- a/crates/typst-library/translations/nn.txt +++ b/crates/typst-library/translations/nn.txt @@ -5,4 +5,4 @@ bibliography = Bibliografi heading = Kapittel outline = Innhald raw = Utskrift -page = side \ No newline at end of file +page = side diff --git a/crates/typst-library/translations/pl.txt b/crates/typst-library/translations/pl.txt index c1b630bbb..cc8f4b36b 100644 --- a/crates/typst-library/translations/pl.txt +++ b/crates/typst-library/translations/pl.txt @@ -5,4 +5,4 @@ bibliography = Bibliografia heading = Sekcja outline = Spis treści raw = Program -page = strona \ No newline at end of file +page = strona diff --git a/crates/typst-library/translations/pt-PT.txt b/crates/typst-library/translations/pt-PT.txt index 37a64aff2..1d68ab858 100644 --- a/crates/typst-library/translations/pt-PT.txt +++ b/crates/typst-library/translations/pt-PT.txt @@ -1,8 +1,8 @@ -# figure = -# table = -# equation = -# bibliography = +# figure = +# table = +# equation = +# bibliography = heading = Secção outline = Índice -# raw = -page = página \ No newline at end of file +# raw = +page = página diff --git a/crates/typst-library/translations/pt.txt b/crates/typst-library/translations/pt.txt index 646d907a7..398a75f37 100644 --- a/crates/typst-library/translations/pt.txt +++ b/crates/typst-library/translations/pt.txt @@ -5,4 +5,4 @@ bibliography = Bibliografia heading = Seção outline = Sumário raw = Listagem -page = página \ No newline at end of file +page = página diff --git a/crates/typst-library/translations/ro.txt b/crates/typst-library/translations/ro.txt index db7466c6a..f5d44f726 100644 --- a/crates/typst-library/translations/ro.txt +++ b/crates/typst-library/translations/ro.txt @@ -6,4 +6,4 @@ heading = Secțiunea outline = Cuprins # may be wrong raw = Listă -page = pagina \ No newline at end of file +page = pagina diff --git a/crates/typst-library/translations/ru.txt b/crates/typst-library/translations/ru.txt index 0e774e7bc..49cb34cb1 100644 --- a/crates/typst-library/translations/ru.txt +++ b/crates/typst-library/translations/ru.txt @@ -5,4 +5,4 @@ bibliography = Библиография heading = Раздел outline = Содержание raw = Листинг -page = с. \ No newline at end of file +page = с. diff --git a/crates/typst-library/translations/sl.txt b/crates/typst-library/translations/sl.txt index 1b0adf664..4c8a568ce 100644 --- a/crates/typst-library/translations/sl.txt +++ b/crates/typst-library/translations/sl.txt @@ -5,4 +5,4 @@ bibliography = Literatura heading = Poglavje outline = Kazalo raw = Program -page = stran \ No newline at end of file +page = stran diff --git a/crates/typst-library/translations/sq.txt b/crates/typst-library/translations/sq.txt index 396ce69a0..11ba53212 100644 --- a/crates/typst-library/translations/sq.txt +++ b/crates/typst-library/translations/sq.txt @@ -5,4 +5,4 @@ bibliography = Bibliografi heading = Kapitull outline = Përmbajtja raw = List -page = faqe \ No newline at end of file +page = faqe diff --git a/crates/typst-library/translations/sr.txt b/crates/typst-library/translations/sr.txt index bd13807b0..e4e8f1272 100644 --- a/crates/typst-library/translations/sr.txt +++ b/crates/typst-library/translations/sr.txt @@ -5,4 +5,4 @@ bibliography = Литература heading = Поглавље outline = Садржај raw = Програм -page = страна \ No newline at end of file +page = страна diff --git a/crates/typst-library/translations/sv.txt b/crates/typst-library/translations/sv.txt index 079f58463..20cea6f96 100644 --- a/crates/typst-library/translations/sv.txt +++ b/crates/typst-library/translations/sv.txt @@ -5,4 +5,4 @@ bibliography = Bibliografi heading = Kapitel outline = Innehåll raw = Listing -page = sida \ No newline at end of file +page = sida diff --git a/crates/typst-library/translations/tl.txt b/crates/typst-library/translations/tl.txt index 1fd15a020..39cff5e36 100644 --- a/crates/typst-library/translations/tl.txt +++ b/crates/typst-library/translations/tl.txt @@ -5,4 +5,4 @@ bibliography = Bibliograpiya heading = Seksyon outline = Talaan ng mga Nilalaman raw = Listahan -# page = \ No newline at end of file +# page = diff --git a/crates/typst-library/translations/tr.txt b/crates/typst-library/translations/tr.txt index 2419a0d4f..f6e2cfe29 100644 --- a/crates/typst-library/translations/tr.txt +++ b/crates/typst-library/translations/tr.txt @@ -5,4 +5,4 @@ bibliography = Kaynakça heading = Bölüm outline = İçindekiler raw = Liste -page = sayfa \ No newline at end of file +page = sayfa diff --git a/crates/typst-library/translations/uk.txt b/crates/typst-library/translations/uk.txt index bced3a520..4794c3311 100644 --- a/crates/typst-library/translations/uk.txt +++ b/crates/typst-library/translations/uk.txt @@ -5,4 +5,4 @@ bibliography = Бібліографія heading = Розділ outline = Зміст raw = Лістинг -page = c. \ No newline at end of file +page = c. diff --git a/crates/typst-library/translations/vi.txt b/crates/typst-library/translations/vi.txt index 41748abee..8ccfdf02f 100644 --- a/crates/typst-library/translations/vi.txt +++ b/crates/typst-library/translations/vi.txt @@ -6,4 +6,4 @@ heading = Phần outline = Mục lục # may be wrong raw = Chương trình -page = trang \ No newline at end of file +page = trang diff --git a/crates/typst-library/translations/zh-TW.txt b/crates/typst-library/translations/zh-TW.txt index 457a7fba9..4407f323e 100644 --- a/crates/typst-library/translations/zh-TW.txt +++ b/crates/typst-library/translations/zh-TW.txt @@ -1,8 +1,8 @@ figure = 圖 -# table = +# table = equation = 式 bibliography = 書目 heading = 小節 outline = 目錄 raw = 程式 -# page = \ No newline at end of file +# page = diff --git a/crates/typst-library/translations/zh.txt b/crates/typst-library/translations/zh.txt index 948edd53d..32dc40107 100644 --- a/crates/typst-library/translations/zh.txt +++ b/crates/typst-library/translations/zh.txt @@ -5,4 +5,4 @@ bibliography = 参考文献 heading = 小节 outline = 目录 raw = 代码 -# page = \ No newline at end of file +# page =