diff --git a/Resources/Private/JavaScriptModules/flow-translation-endpoint/package.json b/Resources/Private/JavaScriptModules/flow-translation-endpoint/package.json new file mode 100644 index 0000000..6b20fc6 --- /dev/null +++ b/Resources/Private/JavaScriptModules/flow-translation-endpoint/package.json @@ -0,0 +1,13 @@ +{ + "name": "@digicomp/flow-translation-endpoint", + "description": "Connect to Flow's merged and parsed xliff contents", + "main": "translate.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [ + "i18n" + ], + "author": "Ferdinand Kuhl", + "license": "MIT" +} diff --git a/Resources/Private/JavaScriptModules/flow-translation-endpoint/translate.js b/Resources/Private/JavaScriptModules/flow-translation-endpoint/translate.js new file mode 100644 index 0000000..c511f9e --- /dev/null +++ b/Resources/Private/JavaScriptModules/flow-translation-endpoint/translate.js @@ -0,0 +1,41 @@ +// storage for promises with the same ids so the same request is not issued twice +const translations = {}; + +export function translateIdPatterns(idPatterns) +{ + if (!translations[idPatterns.join(',')]) { + translations[idPatterns.join(',')] = getJSON(idPatterns); + } + return translations[idPatterns.join(',')]; +} + +export function arrayFromPaths(units) +{ + const result = {}; + for (const [key, value] of Object.entries(units)) { + let cur = result; + const parts = key.split('.'), + lastPart = parts.pop(); + + parts.forEach(function(elem){ + cur[elem] = cur[elem] || {}; + cur = cur[elem]; + }); + cur[lastPart] = value; + } + return result; +} + +async function getJSON(idPatterns) +{ + const uri = new URL(document.documentElement.dataset.xliffUri, document.location); + uri.searchParams.set(document.documentElement.dataset.xliffParameter, idPatterns); + const response = await fetch(uri, {headers: { + 'Accept': 'application/json', + 'Accept-Language': document.documentElement.lang, + }}); + if (!response.ok) { + return Promise.reject('Unexpected server response'); + } + return await response.json(); +}