@shawnvogt/strapi-plugin-google-translate
Version:
Strapi plugin for automated translation of content using Google Cloud Translation
86 lines (74 loc) • 2.38 kB
JavaScript
const { getAllTranslatableFields } = require('../utils/translatable-fields')
const { translateRelations } = require('../utils/translate-relations')
module.exports = ({ strapi }) => ({
async translate(ctx) {
const {
data,
sourceLocale,
targetLocale,
contentTypeUid,
inEditor = true,
} = ctx.request.body
if (!targetLocale || !sourceLocale) {
return ctx.badRequest('target and source locale are both required')
}
if (targetLocale === sourceLocale) {
return ctx.badRequest('target and source locale must be different')
}
const contentSchema = strapi.contentTypes[contentTypeUid]
if (!contentSchema) {
return ctx.notFound('corresponding content type not found')
}
let fieldsToTranslate = await getAllTranslatableFields(data, contentSchema)
try {
const translatedData = await strapi
.plugin('gct')
.service('gctService')
.translate({
data,
sourceLocale,
targetLocale,
fieldsToTranslate,
inEditor,
})
const translatedRelations = await translateRelations(
translatedData,
contentSchema,
targetLocale
)
ctx.body = translatedRelations
return translatedRelations
} catch (error) {
console.log(error)
strapi.log.error(JSON.stringify(error))
if (error.response?.status !== undefined) {
switch (error.response.status) {
case 400:
return ctx.badRequest('gct.error.badRequest', {
message: error.message,
})
case 403:
return ctx.forbidden('gct.error.forbidden', {
message: error.message,
})
case 404:
return ctx.notFound('gct.error.notFound', {
message: error.message,
})
default:
return ctx.internalServerError(error.message)
}
} else if (error.message) {
return ctx.internalServerError(
'CMEditViewTranslateLocale.translate-failure',
{ message: error.message }
)
} else {
return ctx.internalServerError(
'CMEditViewTranslateLocale.translate-failure'
)
}
}
},
})