anylang
Version:
A translator's kit that uses the free APIs of Google Translate, Yandex, Bing, ChatGPT, and other LLMs
61 lines (59 loc) • 8.27 kB
JavaScript
export const createLanguageAliasesMap = (languages) => {
const complexLanguages = languages.filter((language) => language.includes('-'));
// Build languages map
const languagesMap = {};
for (const language of complexLanguages) {
const simpleLanguage = language.split('-')[0];
if (!(simpleLanguage in languagesMap)) {
languagesMap[simpleLanguage] = [language];
continue;
}
languagesMap[simpleLanguage].push(language);
}
return languagesMap;
};
export class LanguageAliases {
constructor(languagesList, options = {}) {
this.languagesList = languagesList;
this.options = options;
// Build map
const languagesMap = createLanguageAliasesMap(languagesList);
this.languagesMaps = {
normal: languagesMap,
reverse: Object.fromEntries(Object.entries(languagesMap)
.map(([simpleLanguage, aliases]) => aliases.map((alias) => [alias, simpleLanguage]))
.flat()),
};
this.simpleLanguages = new Set(languagesList);
}
getAll() {
var _a;
return Array.from(new Set([
...this.languagesList,
...Object.keys(this.languagesMaps.normal),
...Object.keys((_a = this.options.map) !== null && _a !== void 0 ? _a : {}),
]));
}
get(language) {
var _a, _b;
const mappedLanguage = this.getMappedLanguage(language);
if (mappedLanguage)
return mappedLanguage;
// Return mapped language
const languageAliases = this.languagesMaps.normal[language];
// Check if key is exists
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
if (languageAliases)
return (_a = this.getMappedLanguage(languageAliases[0])) !== null && _a !== void 0 ? _a : languageAliases[0];
// Return language in list
if (this.simpleLanguages.has(language))
return (_b = this.getMappedLanguage(language)) !== null && _b !== void 0 ? _b : language;
return null;
}
getMappedLanguage(language) {
const { map = {} } = this.options;
// Return mapped language
return language in map ? map[language] : null;
}
}
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxhbmd1YWdlcy9MYW5ndWFnZUFsaWFzZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxTQUFtQixFQUFFLEVBQUU7SUFDL0QsTUFBTSxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFFaEYsc0JBQXNCO0lBQ3RCLE1BQU0sWUFBWSxHQUE2QixFQUFFLENBQUM7SUFDbEQsS0FBSyxNQUFNLFFBQVEsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3pDLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFOUMsSUFBSSxDQUFDLENBQUMsY0FBYyxJQUFJLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDdkMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDMUMsU0FBUztRQUNWLENBQUM7UUFFRCxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxPQUFPLFlBQVksQ0FBQztBQUNyQixDQUFDLENBQUM7QUFFRixNQUFNLE9BQU8sZUFBZTtJQUczQixZQUNrQixhQUF1QixFQUN2QixVQUViLEVBQUU7UUFIVyxrQkFBYSxHQUFiLGFBQWEsQ0FBVTtRQUN2QixZQUFPLEdBQVAsT0FBTyxDQUVsQjtRQUVOLFlBQVk7UUFDWixNQUFNLFlBQVksR0FBRyx3QkFBd0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsYUFBYSxHQUFHO1lBQ3BCLE1BQU0sRUFBRSxZQUFZO1lBQ3BCLE9BQU8sRUFBRSxNQUFNLENBQUMsV0FBVyxDQUMxQixNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztpQkFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUNsQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUMvQztpQkFDQSxJQUFJLEVBQUUsQ0FDb0I7U0FDN0IsQ0FBQztRQUVGLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVNLE1BQU07O1FBQ1osT0FBTyxLQUFLLENBQUMsSUFBSSxDQUNoQixJQUFJLEdBQUcsQ0FBQztZQUNQLEdBQUcsSUFBSSxDQUFDLGFBQWE7WUFDckIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO1lBQ3pDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFBLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxtQ0FBSSxFQUFFLENBQUM7U0FDdEMsQ0FBQyxDQUNGLENBQUM7SUFDSCxDQUFDO0lBRU0sR0FBRyxDQUFDLFFBQWdCOztRQUMxQixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEQsSUFBSSxjQUFjO1lBQUUsT0FBTyxjQUFjLENBQUM7UUFFMUMseUJBQXlCO1FBQ3pCLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVELHlCQUF5QjtRQUN6Qix1RUFBdUU7UUFDdkUsSUFBSSxlQUFlO1lBQ2xCLE9BQU8sTUFBQSxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLG1DQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV6RSwwQkFBMEI7UUFDMUIsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7WUFDckMsT0FBTyxNQUFBLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsbUNBQUksUUFBUSxDQUFDO1FBRXJELE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQztJQUVPLGlCQUFpQixDQUFDLFFBQWdCO1FBQ3pDLE1BQU0sRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUVsQyx5QkFBeUI7UUFDekIsT0FBTyxRQUFRLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUMvQyxDQUFDO0NBQ0QiLCJmaWxlIjoibGFuZ3VhZ2VzL0xhbmd1YWdlQWxpYXNlcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBjcmVhdGVMYW5ndWFnZUFsaWFzZXNNYXAgPSAobGFuZ3VhZ2VzOiBzdHJpbmdbXSkgPT4ge1xuXHRjb25zdCBjb21wbGV4TGFuZ3VhZ2VzID0gbGFuZ3VhZ2VzLmZpbHRlcigobGFuZ3VhZ2UpID0+IGxhbmd1YWdlLmluY2x1ZGVzKCctJykpO1xuXG5cdC8vIEJ1aWxkIGxhbmd1YWdlcyBtYXBcblx0Y29uc3QgbGFuZ3VhZ2VzTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fTtcblx0Zm9yIChjb25zdCBsYW5ndWFnZSBvZiBjb21wbGV4TGFuZ3VhZ2VzKSB7XG5cdFx0Y29uc3Qgc2ltcGxlTGFuZ3VhZ2UgPSBsYW5ndWFnZS5zcGxpdCgnLScpWzBdO1xuXG5cdFx0aWYgKCEoc2ltcGxlTGFuZ3VhZ2UgaW4gbGFuZ3VhZ2VzTWFwKSkge1xuXHRcdFx0bGFuZ3VhZ2VzTWFwW3NpbXBsZUxhbmd1YWdlXSA9IFtsYW5ndWFnZV07XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRsYW5ndWFnZXNNYXBbc2ltcGxlTGFuZ3VhZ2VdLnB1c2gobGFuZ3VhZ2UpO1xuXHR9XG5cblx0cmV0dXJuIGxhbmd1YWdlc01hcDtcbn07XG5cbmV4cG9ydCBjbGFzcyBMYW5ndWFnZUFsaWFzZXMge1xuXHRwcml2YXRlIHJlYWRvbmx5IHNpbXBsZUxhbmd1YWdlcztcblx0cHJpdmF0ZSByZWFkb25seSBsYW5ndWFnZXNNYXBzO1xuXHRjb25zdHJ1Y3Rvcihcblx0XHRwcml2YXRlIHJlYWRvbmx5IGxhbmd1YWdlc0xpc3Q6IHN0cmluZ1tdLFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczoge1xuXHRcdFx0bWFwPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblx0XHR9ID0ge30sXG5cdCkge1xuXHRcdC8vIEJ1aWxkIG1hcFxuXHRcdGNvbnN0IGxhbmd1YWdlc01hcCA9IGNyZWF0ZUxhbmd1YWdlQWxpYXNlc01hcChsYW5ndWFnZXNMaXN0KTtcblx0XHR0aGlzLmxhbmd1YWdlc01hcHMgPSB7XG5cdFx0XHRub3JtYWw6IGxhbmd1YWdlc01hcCxcblx0XHRcdHJldmVyc2U6IE9iamVjdC5mcm9tRW50cmllcyhcblx0XHRcdFx0T2JqZWN0LmVudHJpZXMobGFuZ3VhZ2VzTWFwKVxuXHRcdFx0XHRcdC5tYXAoKFtzaW1wbGVMYW5ndWFnZSwgYWxpYXNlc10pID0+XG5cdFx0XHRcdFx0XHRhbGlhc2VzLm1hcCgoYWxpYXMpID0+IFthbGlhcywgc2ltcGxlTGFuZ3VhZ2VdKSxcblx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0LmZsYXQoKSxcblx0XHRcdCkgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nW10+LFxuXHRcdH07XG5cblx0XHR0aGlzLnNpbXBsZUxhbmd1YWdlcyA9IG5ldyBTZXQobGFuZ3VhZ2VzTGlzdCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0QWxsKCkge1xuXHRcdHJldHVybiBBcnJheS5mcm9tKFxuXHRcdFx0bmV3IFNldChbXG5cdFx0XHRcdC4uLnRoaXMubGFuZ3VhZ2VzTGlzdCxcblx0XHRcdFx0Li4uT2JqZWN0LmtleXModGhpcy5sYW5ndWFnZXNNYXBzLm5vcm1hbCksXG5cdFx0XHRcdC4uLk9iamVjdC5rZXlzKHRoaXMub3B0aW9ucy5tYXAgPz8ge30pLFxuXHRcdFx0XSksXG5cdFx0KTtcblx0fVxuXG5cdHB1YmxpYyBnZXQobGFuZ3VhZ2U6IHN0cmluZykge1xuXHRcdGNvbnN0IG1hcHBlZExhbmd1YWdlID0gdGhpcy5nZXRNYXBwZWRMYW5ndWFnZShsYW5ndWFnZSk7XG5cdFx0aWYgKG1hcHBlZExhbmd1YWdlKSByZXR1cm4gbWFwcGVkTGFuZ3VhZ2U7XG5cblx0XHQvLyBSZXR1cm4gbWFwcGVkIGxhbmd1YWdlXG5cdFx0Y29uc3QgbGFuZ3VhZ2VBbGlhc2VzID0gdGhpcy5sYW5ndWFnZXNNYXBzLm5vcm1hbFtsYW5ndWFnZV07XG5cdFx0Ly8gQ2hlY2sgaWYga2V5IGlzIGV4aXN0c1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uXG5cdFx0aWYgKGxhbmd1YWdlQWxpYXNlcylcblx0XHRcdHJldHVybiB0aGlzLmdldE1hcHBlZExhbmd1YWdlKGxhbmd1YWdlQWxpYXNlc1swXSkgPz8gbGFuZ3VhZ2VBbGlhc2VzWzBdO1xuXG5cdFx0Ly8gUmV0dXJuIGxhbmd1YWdlIGluIGxpc3Rcblx0XHRpZiAodGhpcy5zaW1wbGVMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSlcblx0XHRcdHJldHVybiB0aGlzLmdldE1hcHBlZExhbmd1YWdlKGxhbmd1YWdlKSA/PyBsYW5ndWFnZTtcblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRNYXBwZWRMYW5ndWFnZShsYW5ndWFnZTogc3RyaW5nKSB7XG5cdFx0Y29uc3QgeyBtYXAgPSB7fSB9ID0gdGhpcy5vcHRpb25zO1xuXG5cdFx0Ly8gUmV0dXJuIG1hcHBlZCBsYW5ndWFnZVxuXHRcdHJldHVybiBsYW5ndWFnZSBpbiBtYXAgPyBtYXBbbGFuZ3VhZ2VdIDogbnVsbDtcblx0fVxufVxuIl19