use crate::audio::lid::NUM_LANGUAGES;
#[cfg(test)]
mod tests;
pub const LABELS_JSON_LEN: usize = 10_756;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct Language {
index: usize,
code: &'static str,
name: &'static str,
}
impl Language {
const fn new(index: usize, code: &'static str, name: &'static str) -> Self {
Self { index, code, name }
}
#[inline]
pub const fn index(&self) -> usize {
self.index
}
#[inline]
pub const fn code(&self) -> &'static str {
self.code
}
#[inline]
pub const fn name(&self) -> &'static str {
self.name
}
#[inline]
#[must_use]
pub const fn from_index(index: usize) -> Option<&'static Self> {
if index < NUM_LANGUAGES {
Some(&LANGUAGES[index])
} else {
None
}
}
#[must_use]
pub fn from_code(code: &str) -> Option<&'static Self> {
LANGUAGES
.binary_search_by(|entry| entry.code.cmp(code))
.ok()
.map(|index| &LANGUAGES[index])
}
}
#[inline]
#[must_use]
pub const fn languages() -> &'static [Language; NUM_LANGUAGES] {
&LANGUAGES
}
#[must_use]
pub const fn labels_json_bytes() -> &'static [u8] {
include_bytes!("../assets/voxlingua107_labels.json")
}
static LANGUAGES: [Language; NUM_LANGUAGES] = [
Language::new(0, "ab", "Abkhazian"),
Language::new(1, "af", "Afrikaans"),
Language::new(2, "am", "Amharic"),
Language::new(3, "ar", "Arabic"),
Language::new(4, "as", "Assamese"),
Language::new(5, "az", "Azerbaijani"),
Language::new(6, "ba", "Bashkir"),
Language::new(7, "be", "Belarusian"),
Language::new(8, "bg", "Bulgarian"),
Language::new(9, "bn", "Bengali"),
Language::new(10, "bo", "Tibetan"),
Language::new(11, "br", "Breton"),
Language::new(12, "bs", "Bosnian"),
Language::new(13, "ca", "Catalan"),
Language::new(14, "ceb", "Cebuano"),
Language::new(15, "cs", "Czech"),
Language::new(16, "cy", "Welsh"),
Language::new(17, "da", "Danish"),
Language::new(18, "de", "German"),
Language::new(19, "el", "Greek"),
Language::new(20, "en", "English"),
Language::new(21, "eo", "Esperanto"),
Language::new(22, "es", "Spanish"),
Language::new(23, "et", "Estonian"),
Language::new(24, "eu", "Basque"),
Language::new(25, "fa", "Persian"),
Language::new(26, "fi", "Finnish"),
Language::new(27, "fo", "Faroese"),
Language::new(28, "fr", "French"),
Language::new(29, "gl", "Galician"),
Language::new(30, "gn", "Guarani"),
Language::new(31, "gu", "Gujarati"),
Language::new(32, "gv", "Manx"),
Language::new(33, "ha", "Hausa"),
Language::new(34, "haw", "Hawaiian"),
Language::new(35, "hi", "Hindi"),
Language::new(36, "hr", "Croatian"),
Language::new(37, "ht", "Haitian"),
Language::new(38, "hu", "Hungarian"),
Language::new(39, "hy", "Armenian"),
Language::new(40, "ia", "Interlingua"),
Language::new(41, "id", "Indonesian"),
Language::new(42, "is", "Icelandic"),
Language::new(43, "it", "Italian"),
Language::new(44, "iw", "Hebrew"),
Language::new(45, "ja", "Japanese"),
Language::new(46, "jw", "Javanese"),
Language::new(47, "ka", "Georgian"),
Language::new(48, "kk", "Kazakh"),
Language::new(49, "km", "Central Khmer"),
Language::new(50, "kn", "Kannada"),
Language::new(51, "ko", "Korean"),
Language::new(52, "la", "Latin"),
Language::new(53, "lb", "Luxembourgish"),
Language::new(54, "ln", "Lingala"),
Language::new(55, "lo", "Lao"),
Language::new(56, "lt", "Lithuanian"),
Language::new(57, "lv", "Latvian"),
Language::new(58, "mg", "Malagasy"),
Language::new(59, "mi", "Maori"),
Language::new(60, "mk", "Macedonian"),
Language::new(61, "ml", "Malayalam"),
Language::new(62, "mn", "Mongolian"),
Language::new(63, "mr", "Marathi"),
Language::new(64, "ms", "Malay"),
Language::new(65, "mt", "Maltese"),
Language::new(66, "my", "Burmese"),
Language::new(67, "ne", "Nepali"),
Language::new(68, "nl", "Dutch"),
Language::new(69, "nn", "Norwegian Nynorsk"),
Language::new(70, "no", "Norwegian"),
Language::new(71, "oc", "Occitan"),
Language::new(72, "pa", "Panjabi"),
Language::new(73, "pl", "Polish"),
Language::new(74, "ps", "Pushto"),
Language::new(75, "pt", "Portuguese"),
Language::new(76, "ro", "Romanian"),
Language::new(77, "ru", "Russian"),
Language::new(78, "sa", "Sanskrit"),
Language::new(79, "sco", "Scots"),
Language::new(80, "sd", "Sindhi"),
Language::new(81, "si", "Sinhala"),
Language::new(82, "sk", "Slovak"),
Language::new(83, "sl", "Slovenian"),
Language::new(84, "sn", "Shona"),
Language::new(85, "so", "Somali"),
Language::new(86, "sq", "Albanian"),
Language::new(87, "sr", "Serbian"),
Language::new(88, "su", "Sundanese"),
Language::new(89, "sv", "Swedish"),
Language::new(90, "sw", "Swahili"),
Language::new(91, "ta", "Tamil"),
Language::new(92, "te", "Telugu"),
Language::new(93, "tg", "Tajik"),
Language::new(94, "th", "Thai"),
Language::new(95, "tk", "Turkmen"),
Language::new(96, "tl", "Tagalog"),
Language::new(97, "tr", "Turkish"),
Language::new(98, "tt", "Tatar"),
Language::new(99, "uk", "Ukrainian"),
Language::new(100, "ur", "Urdu"),
Language::new(101, "uz", "Uzbek"),
Language::new(102, "vi", "Vietnamese"),
Language::new(103, "war", "Waray"),
Language::new(104, "yi", "Yiddish"),
Language::new(105, "yo", "Yoruba"),
Language::new(106, "zh", "Chinese"),
];