@shawnvogt/strapi-plugin-google-translate
Version:
Strapi plugin for automated translation of content using Google Cloud Translation
159 lines (148 loc) • 2.91 kB
JavaScript
const { URLSearchParams } = require('url')
const axios = require('axios')
const _ = require('lodash')
const { GOOGLE_TRANSLATE_API } = require('./constants')
const { splitTextArrayIntoChunks } = require('./chunks')
async function translate({ q, key, ...parameters }) {
if (!q) {
return { translations: [] }
}
const apiURL = GOOGLE_TRANSLATE_API
const params = new URLSearchParams({ key: key }).toString()
const data = { ...parameters }
const textArray = Array.isArray(q) ? q : [q]
const { chunks, reduceFunction } = splitTextArrayIntoChunks(textArray)
return reduceFunction(
await Promise.all(
chunks.map(async (texts) => {
data.q = texts
return (await axios.post(`${apiURL}/?${params}`, data)).data.data
})
)
)
}
function parseLocale(strapiLocale) {
const unstripped = strapiLocale.toUpperCase()
const stripped = unstripped.split('-')[0]
switch (stripped) {
case 'AF':
case 'SQ':
case 'AM':
case 'AR':
case 'HY':
case 'AZ':
case 'EU':
case 'BE':
case 'BN':
case 'BS':
case 'BG':
case 'CA':
case 'CEB':
case 'ZH':
case 'ZH-CN':
case 'ZH-TW':
case 'CO':
case 'HR':
case 'CS':
case 'DA':
case 'NL':
case 'EN':
case 'EO':
case 'ET':
case 'FI':
case 'FR':
case 'FY':
case 'GL':
case 'KA':
case 'DE':
case 'EL':
case 'GU':
case 'HT':
case 'HA':
case 'HAW':
case 'HE':
case 'IW':
case 'HI':
case 'HMN':
case 'HU':
case 'IS':
case 'IG':
case 'ID':
case 'GA':
case 'IT':
case 'JA':
case 'JV':
case 'KN':
case 'KK':
case 'KM':
case 'RW':
case 'KO':
case 'KU':
case 'KY':
case 'LO':
case 'LA':
case 'LV':
case 'LT':
case 'LB':
case 'MK':
case 'MG':
case 'MS':
case 'ML':
case 'MT':
case 'MI':
case 'MR':
case 'MN':
case 'MY':
case 'NE':
case 'NO':
case 'NY':
case 'OR':
case 'PS':
case 'FA':
case 'PL':
case 'PT':
case 'PA':
case 'RO':
case 'RU':
case 'SM':
case 'GD':
case 'SR':
case 'ST':
case 'SN':
case 'SD':
case 'SI':
case 'SK':
case 'SL':
case 'SO':
case 'ES':
case 'SU':
case 'SW':
case 'SV':
case 'TL':
case 'TG':
case 'TA':
case 'TT':
case 'TE':
case 'TH':
case 'TR':
case 'TK':
case 'UK':
case 'UR':
case 'UG':
case 'UZ':
case 'VI':
case 'CY':
case 'XH':
case 'YI':
case 'YO':
case 'ZU':
return stripped
default:
throw new Error('unsupported locale')
}
}
module.exports = {
translate,
parseLocale,
}