feat: add language selection combobox and update TTS dialog for improved language handling
This commit is contained in:
115
src/lib/constants/gtts-languages.ts
Normal file
115
src/lib/constants/gtts-languages.ts
Normal file
@@ -0,0 +1,115 @@
|
||||
export interface LanguageOption {
|
||||
code: string
|
||||
name: string
|
||||
region?: string
|
||||
}
|
||||
|
||||
export const GTTS_LANGUAGES: LanguageOption[] = [
|
||||
{ code: 'af', name: 'Afrikaans' },
|
||||
{ code: 'ar', name: 'Arabic' },
|
||||
{ code: 'bg', name: 'Bulgarian' },
|
||||
{ code: 'bn', name: 'Bengali' },
|
||||
{ code: 'bs', name: 'Bosnian' },
|
||||
{ code: 'ca', name: 'Catalan' },
|
||||
{ code: 'cs', name: 'Czech' },
|
||||
{ code: 'cy', name: 'Welsh' },
|
||||
{ code: 'da', name: 'Danish' },
|
||||
{ code: 'de', name: 'German' },
|
||||
{ code: 'el', name: 'Greek' },
|
||||
{ code: 'en', name: 'English', region: 'United States' },
|
||||
{ code: 'en-au', name: 'English', region: 'Australia' },
|
||||
{ code: 'en-ca', name: 'English', region: 'Canada' },
|
||||
{ code: 'en-gb', name: 'English', region: 'UK' },
|
||||
{ code: 'en-ie', name: 'English', region: 'Ireland' },
|
||||
{ code: 'en-in', name: 'English', region: 'India' },
|
||||
{ code: 'en-ng', name: 'English', region: 'Nigeria' },
|
||||
{ code: 'en-nz', name: 'English', region: 'New Zealand' },
|
||||
{ code: 'en-ph', name: 'English', region: 'Philippines' },
|
||||
{ code: 'en-za', name: 'English', region: 'South Africa' },
|
||||
{ code: 'en-tz', name: 'English', region: 'Tanzania' },
|
||||
{ code: 'en-uk', name: 'English', region: 'United Kingdom' },
|
||||
{ code: 'en-us', name: 'English', region: 'United States' },
|
||||
{ code: 'eo', name: 'Esperanto' },
|
||||
{ code: 'es', name: 'Spanish', region: 'Spain' },
|
||||
{ code: 'es-es', name: 'Spanish', region: 'Spain' },
|
||||
{ code: 'es-mx', name: 'Spanish', region: 'Mexico' },
|
||||
{ code: 'es-us', name: 'Spanish', region: 'United States' },
|
||||
{ code: 'et', name: 'Estonian' },
|
||||
{ code: 'eu', name: 'Basque' },
|
||||
{ code: 'fa', name: 'Persian' },
|
||||
{ code: 'fi', name: 'Finnish' },
|
||||
{ code: 'fr', name: 'French', region: 'France' },
|
||||
{ code: 'fr-ca', name: 'French', region: 'Canada' },
|
||||
{ code: 'fr-fr', name: 'French', region: 'France' },
|
||||
{ code: 'ga', name: 'Irish' },
|
||||
{ code: 'gu', name: 'Gujarati' },
|
||||
{ code: 'he', name: 'Hebrew' },
|
||||
{ code: 'hi', name: 'Hindi' },
|
||||
{ code: 'hr', name: 'Croatian' },
|
||||
{ code: 'hu', name: 'Hungarian' },
|
||||
{ code: 'hy', name: 'Armenian' },
|
||||
{ code: 'id', name: 'Indonesian' },
|
||||
{ code: 'is', name: 'Icelandic' },
|
||||
{ code: 'it', name: 'Italian' },
|
||||
{ code: 'ja', name: 'Japanese' },
|
||||
{ code: 'jw', name: 'Javanese' },
|
||||
{ code: 'ka', name: 'Georgian' },
|
||||
{ code: 'kk', name: 'Kazakh' },
|
||||
{ code: 'km', name: 'Khmer' },
|
||||
{ code: 'kn', name: 'Kannada' },
|
||||
{ code: 'ko', name: 'Korean' },
|
||||
{ code: 'la', name: 'Latin' },
|
||||
{ code: 'lv', name: 'Latvian' },
|
||||
{ code: 'mk', name: 'Macedonian' },
|
||||
{ code: 'ml', name: 'Malayalam' },
|
||||
{ code: 'mr', name: 'Marathi' },
|
||||
{ code: 'ms', name: 'Malay' },
|
||||
{ code: 'mt', name: 'Maltese' },
|
||||
{ code: 'my', name: 'Myanmar (Burmese)' },
|
||||
{ code: 'ne', name: 'Nepali' },
|
||||
{ code: 'nl', name: 'Dutch' },
|
||||
{ code: 'no', name: 'Norwegian' },
|
||||
{ code: 'pa', name: 'Punjabi' },
|
||||
{ code: 'pl', name: 'Polish' },
|
||||
{ code: 'pt', name: 'Portuguese', region: 'Brazil' },
|
||||
{ code: 'pt-br', name: 'Portuguese', region: 'Brazil' },
|
||||
{ code: 'pt-pt', name: 'Portuguese', region: 'Portugal' },
|
||||
{ code: 'ro', name: 'Romanian' },
|
||||
{ code: 'ru', name: 'Russian' },
|
||||
{ code: 'si', name: 'Sinhala' },
|
||||
{ code: 'sk', name: 'Slovak' },
|
||||
{ code: 'sl', name: 'Slovenian' },
|
||||
{ code: 'sq', name: 'Albanian' },
|
||||
{ code: 'sr', name: 'Serbian' },
|
||||
{ code: 'su', name: 'Sundanese' },
|
||||
{ code: 'sv', name: 'Swedish' },
|
||||
{ code: 'sw', name: 'Swahili' },
|
||||
{ code: 'ta', name: 'Tamil' },
|
||||
{ code: 'te', name: 'Telugu' },
|
||||
{ code: 'th', name: 'Thai' },
|
||||
{ code: 'tl', name: 'Filipino' },
|
||||
{ code: 'tr', name: 'Turkish' },
|
||||
{ code: 'uk', name: 'Ukrainian' },
|
||||
{ code: 'ur', name: 'Urdu' },
|
||||
{ code: 'vi', name: 'Vietnamese' },
|
||||
{ code: 'yo', name: 'Yoruba' },
|
||||
{ code: 'zh', name: 'Chinese (Mandarin)' },
|
||||
{ code: 'zh-cn', name: 'Chinese', region: 'China' },
|
||||
{ code: 'zh-tw', name: 'Chinese', region: 'Taiwan' },
|
||||
{ code: 'zu', name: 'Zulu' }
|
||||
]
|
||||
|
||||
export function getLanguageDisplayName(lang: LanguageOption): string {
|
||||
if (lang.region) {
|
||||
return `${lang.name} (${lang.region}) - ${lang.code}`
|
||||
}
|
||||
return `${lang.name} - ${lang.code}`
|
||||
}
|
||||
|
||||
export function getSortedLanguages(): LanguageOption[] {
|
||||
return [...GTTS_LANGUAGES].sort((a, b) => {
|
||||
const aDisplay = getLanguageDisplayName(a)
|
||||
const bDisplay = getLanguageDisplayName(b)
|
||||
return aDisplay.localeCompare(bDisplay)
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user