UNPKG

crowdfree

Version:

A crowdin compatible tool for translation and localisation of websites and applications

65 lines (63 loc) 2.13 kB
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