improve tests, especially for navigation.
This commit is contained in:
@ -24,16 +24,23 @@ export type language_matrix = {
|
||||
[key:string] : language_matrix_entry
|
||||
}
|
||||
|
||||
export async function fetchWithTimeout(url : string, options : RequestInit, timeout = 5000) : Promise<Response> {
|
||||
return Promise.race([
|
||||
fetch(url, options),
|
||||
new Promise((_, reject) => setTimeout(() => reject(new Error('timeout')), timeout))
|
||||
]);
|
||||
}
|
||||
|
||||
export class LanguageServer {
|
||||
constructor(public baseUrl : string) {}
|
||||
|
||||
async fetchLanguages() : Promise<language_matrix> {
|
||||
async fetchLanguages(timeout = 500) : Promise<language_matrix> {
|
||||
let data = {};
|
||||
const res = await fetch(this.baseUrl + "/languages", {
|
||||
const res = await fetchWithTimeout(this.baseUrl + "/languages", {
|
||||
headers: {
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
});
|
||||
}, timeout);
|
||||
try {
|
||||
data = await res.json();
|
||||
} catch (e) {
|
||||
@ -55,16 +62,20 @@ export class LanguageServer {
|
||||
|
||||
static async getDefault() {
|
||||
const settings = await Settings.getDefault();
|
||||
return new LanguageServer(await settings.getLibretranslateBaseUrl());
|
||||
return new LanguageServer(await settings.getLibretranslateBaseUrl() || LIBRETRANSLATE_BASE_URL);
|
||||
}
|
||||
}
|
||||
|
||||
export class Translator {
|
||||
constructor(public source : language_t, public defaultTarget : string = "en", private languageServer : LanguageServer) {
|
||||
constructor(public source : language_t, public defaultTarget : string = "en", private _languageServer : LanguageServer) {
|
||||
}
|
||||
|
||||
get languageServer() {
|
||||
return this._languageServer;
|
||||
}
|
||||
|
||||
async translate(text : string, target : string|undefined = undefined) {
|
||||
const url = this.languageServer.baseUrl + `/translate`;
|
||||
const url = this._languageServer.baseUrl + `/translate`;
|
||||
const res = await fetch(url, {
|
||||
method: "POST",
|
||||
body: JSON.stringify({
|
||||
@ -103,4 +114,10 @@ export class CachedTranslator extends Translator {
|
||||
await cache.set(key2, tr2);
|
||||
return tr2;
|
||||
}
|
||||
|
||||
static async getDefault(defaultTarget: string | undefined = undefined) {
|
||||
const settings = await Settings.getDefault();
|
||||
const source = await settings.getHostLanguage();
|
||||
return new CachedTranslator(source, defaultTarget, await LanguageServer.getDefault())
|
||||
}
|
||||
}
|
@ -12,7 +12,7 @@ export function chooseCountry(lang_a2 : string) {
|
||||
c => c.languages.includes(lang_a3.alpha3)
|
||||
);
|
||||
|
||||
console.log("cc = %x, ", cs.map(c => c.alpha2))
|
||||
// console.log("cc = %x, ", cs.map(c => c.alpha2))
|
||||
|
||||
return cs.filter(cc => Object.keys(LANG_FLAGS).includes(cc.alpha2.toLowerCase())).map(c => c.alpha2.toLowerCase());
|
||||
}
|
||||
|
@ -4,7 +4,9 @@ import _LANGUAGES from "@/assets/languages.min.json"
|
||||
export const LANG_FLAGS = _LANG_FLAGS
|
||||
|
||||
export function longLang(shortLang : string) {
|
||||
return ((LANG_FLAGS as any)[shortLang] as any)["name"] as string
|
||||
const obj = LANG_FLAGS[shortLang];
|
||||
if (!obj) return undefined;
|
||||
return obj["name"] as string;
|
||||
}
|
||||
|
||||
export function lang_a3_a2(a3 : string) {
|
||||
|
Reference in New Issue
Block a user