UNPKG

echogarden

Version:

An easy-to-use speech toolset. Includes tools for synthesis, recognition, alignment, speech translation, language detection, source separation and more.

122 lines 4.07 kB
import { readAndParseJsonFile } from './FileSystem.js'; import { resolveToModuleRootDir } from './PathUtilities.js'; export function languageCodeToName(languageCode) { const languageNames = new Intl.DisplayNames(['en'], { type: 'language' }); let translatedLanguageName; try { translatedLanguageName = languageNames.of(languageCode); } catch (e) { } return translatedLanguageName || 'Unknown'; } export function formatLanguageCodeWithName(languageCode, styleId = 1) { if (styleId == 1) { return `${languageCodeToName(languageCode)} (${languageCode})`; } else { return `${languageCode}, ${languageCodeToName(languageCode)}`; } } export async function normalizeIdentifierToLanguageCode(langIdentifier) { const result = await parseLangIdentifier(langIdentifier); return result.Name; } export async function normalizeIdentifierToShortLanguageCode(langIdentifier) { const result = await parseLangIdentifier(langIdentifier); return result.TwoLetterISOLanguageName; } export async function parseLangIdentifier(langIdentifier) { if (!langIdentifier) { return emptyLangInfoEntry; } await loadLangInfoEntriesIfNeeded(); langIdentifier = langIdentifier.trim().toLowerCase(); for (const entry of langInfoEntries) { if (langIdentifier === entry.NameLowerCase || langIdentifier === entry.ThreeLetterISOLanguageName || langIdentifier === entry.EnglishNameLowerCase) { return entry; } } throw new Error(`Couldn't parse language identifier '${langIdentifier}'.`); } export function getShortLanguageCode(langCode) { const dashIndex = langCode.indexOf('-'); if (dashIndex == -1) { return langCode; } return langCode.substring(0, dashIndex).toLowerCase(); } export function normalizeLanguageCode(langCode) { langCode = langCode.trim(); const parts = langCode.split('-'); const result = [parts[0].toLowerCase()]; for (let i = 1; i < parts.length; i++) { result.push(parts[i].toUpperCase()); } return result.join('-'); } const isoToLcidLookup = new Map(); const lcidToIsoLookup = new Map(); let langInfoEntries = []; export async function isoToLcidLanguageCode(iso) { await loadLcidLookupIfNeeded(); return isoToLcidLookup.get(iso); } export async function lcidToIsoLanguageCode(lcid) { await loadLcidLookupIfNeeded(); return lcidToIsoLookup.get(lcid); } async function loadLcidLookupIfNeeded() { await loadLangInfoEntriesIfNeeded(); for (const lcidEntry of langInfoEntries) { const name = lcidEntry.Name; const lcidValue = lcidEntry.LCID; isoToLcidLookup.set(name, lcidValue); let entry = lcidToIsoLookup.get(lcidValue); if (!entry) { entry = []; lcidToIsoLookup.set(lcidValue, entry); } entry.push(name); } return langInfoEntries; } async function loadLangInfoEntriesIfNeeded() { if (langInfoEntries.length > 0) { return; } const entries = await readAndParseJsonFile(resolveToModuleRootDir('data/tables/lcid-table.json')); for (const entry of entries) { entry.NameLowerCase = entry.Name.toLowerCase(); entry.EnglishNameLowerCase = entry.EnglishName.toLowerCase(); langInfoEntries.push(entry); } } export function getDefaultDialectForLanguageCodeIfPossible(langCode) { const defaultDialect = defaultDialectForLanguageCode[langCode]; return defaultDialect || langCode; } export const defaultDialectForLanguageCode = { 'en': 'en-US', 'zh': 'zh-CN', 'ar': 'ar-EG', 'fr': 'fr-FR', 'de': 'de-DE', 'pt': 'pt-BR', 'es': 'es-ES', 'nl': 'nl-NL' }; export const emptyLangInfoEntry = { LCID: -1, Name: '', NameLowerCase: '', TwoLetterISOLanguageName: '', ThreeLetterISOLanguageName: '', ThreeLetterWindowsLanguageName: '', EnglishName: 'Empty', EnglishNameLowerCase: 'empty', ANSICodePage: '' }; //# sourceMappingURL=Locale.js.map