crowdfree
Version:
A crowdin compatible tool for translation and localisation of websites and applications
65 lines (63 loc) • 2.13 kB
JavaScript
const API_URL = process.env.REACT_APP_API_URI ? `${process.env.REACT_APP_API_URI}/api/` : "/api/"
let translationUpdateHooks = []
let translationUpdateHookPoller = 0;
async function getTranslations(updateHook) {
if (updateHook) {
// Add to list of hooks that will receive updates sent from the server
translationUpdateHooks.push(updateHook)
if (!translationUpdateHookPoller) {
translationUpdateHookPoller = Date.now()
setInterval(async () => {
// Get updates since the last time this ran
let data = await fetch(API_URL + "translations/since/" + translationUpdateHookPoller)
let resp = await data.json()
translationUpdateHooks.forEach(async hook => {
if (resp.data?.length) console.log(resp.data)
if (resp.data?.length) hook?.(resp.data)
})
// Save current time
translationUpdateHookPoller = Date.now()
}, 500)
}
}
let data = await fetch(API_URL + "translations")
return (await data.json()).data
}
async function getLocales() {
let data = await fetch(API_URL + "locales")
return (await data.json()).data
}
async function updateTranslation(
update = {
file: "locale.json",
key: "headertext",
locale: "en",
props: {
value: "New english text"
}
}
) {
let resp = await fetch(API_URL + "translations/update", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
data: [update]
})
})
let data = (await resp.json()).data
translationUpdateHooks.forEach(hook => hook(data))
return data
}
async function getTranslation(file, key) {
let data = await fetch(`${API_URL}translation/${file}/${key}`)
return (await data.json()).data
}
const api = {
getTranslations,
getLocales,
updateTranslation,
getTranslation,
}
export default api