files/en-us/web/api/translator/availability_static/index.md
{{APIRef("Translator and Language Detector APIs")}}{{SeeCompatTable}}{{securecontext_header}}
The availability() static method of the {{domxref("Translator")}} interface returns an enumerated value that indicates the availability of the AI model for the given Translator configuration.
Translator.availability(options)
options
Translator. Possible values include:
sourceLanguage
targetLanguage
A {{jsxref("Promise")}} that fulfills with an enumerated value indicating whether support is available (or will be available) for a given Translator configuration, or null if support could not be determined.
Possible values include:
available
downloadable
downloading
unavailable
sourceLanguage and targetLanguage are the same.InvalidStateError {{domxref("DOMException")}}
OperationError {{domxref("DOMException")}}
UnknownError {{domxref("DOMException")}}
availability() call failed for any other reason, or a reason the user agent did not wish to disclose.If usage of the method is blocked by a {{httpheader('Permissions-Policy/translator','translator')}} {{httpheader("Permissions-Policy")}}, the promise rejects with a value of unavailable.
availability() usageIn the following snippet, we start by checking the availability of the model for translating between two languages using the availability() method:
unavailable, we print an appropriate error message to the console.available, we create a translator using the {{domxref("Translator.create_static", "create()")}} method, passing it the source and target languages. The required AI model is available, so we can use it immediately.downloadable or downloading), we run the same create() method call, but this time we include a monitor that logs the percentage of the model downloaded each time the {{domxref("CreateMonitor/downloadprogress_event", "downloadprogress")}} event fires.async function getTranslator(languages) {
const availability = await Translator.availability(languages);
if (availability === "unavailable") {
console.log(
`Translation not supported; try a different language combination.`,
);
return undefined;
} else if (availability === "available") {
return await Translator.create(languages);
}
return await Translator.create({
...languages,
monitor(monitor) {
monitor.addEventListener("downloadprogress", (e) => {
console.log(`Downloaded ${Math.floor(e.loaded * 100)}%`);
});
},
});
}
const translator = await getTranslator({
sourceLanguage: "en",
targetLanguage: "ja",
});
async function langSupport(source, target) {
const availability = await Translator.availability({
sourceLanguage: source,
targetLanguage: target,
});
return availability;
}
await langSupport("en", "fr");
await langSupport("en", "pt");
await langSupport("en", "zh");
{{Specifications}}
{{Compat}}