UNPKG

@shawnvogt/strapi-plugin-google-translate

Version:

Strapi plugin for automated translation of content using Google Cloud Translation

86 lines (74 loc) 2.38 kB
'use strict' 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' ) } } }, })