import { sanitize } from '@plastichub/osr-i18n/_cli' import { CONFIG_DEFAULT } from '@plastichub/osr-commons' import { IOptions as IOptionsI18n } from '@plastichub/osr-i18n/types' import { translate } from '@plastichub/osr-i18n/lib/translate' import * as pMap from 'p-map' import { I18N_SOURCE_LANGUAGE, I18N_STORE, MAIL_DEFAULT_OUTPUT_PATH, OSR_ROOT } from './config' import { logger } from '../src' export const defaultSheetOptions = (srcLang, dstLang, dst: string, logLevel: string, options: {} = {}) => { const i18nOptions: IOptionsI18n = { srcLang, dstLang, store: I18N_STORE(OSR_ROOT(), dstLang), dst, cache: true, logLevel, ...options } return i18nOptions } export const translateSheets = async ( languages: string[], files: string[], srcLang: string, dstLanguage: string, query: string = "$[*][0,1,2,3,4]", dst: string = MAIL_DEFAULT_OUTPUT_PATH, logLevel = 'info', options: any = {}) => { const config: any = CONFIG_DEFAULT() if (dstLanguage === I18N_SOURCE_LANGUAGE) { return } return await pMap(languages, async (dstLanguage) => { return await pMap(files, async (src) => { const i18nOptions: IOptionsI18n = { srcLang: srcLang, dstLang: dstLanguage, src: src, store: I18N_STORE(OSR_ROOT(), dstLanguage), dst: dst, query: query, cache: true, api_key: config.deepl.auth_key, logLevel: logLevel, ...options } logger.debug('Translate Sheet ' + src + ' ' + dstLanguage, i18nOptions) const ret = await translate(sanitize(i18nOptions) as any) return ret }) }) } export const sheetTranslationTask = (grunt, slug: string, files: string[], languages: string[], translationTasks: string[], options: {} = {}) => { const config = {} const key: any = (CONFIG_DEFAULT() as any).deepl.auth_key languages.forEach((lang: string) => { config[`${slug}-${lang}`] = { src: files, options: defaultSheetOptions(I18N_SOURCE_LANGUAGE, lang, `${OSR_ROOT()}/content/${lang}`, 'warn', { api_key: key, ...options }) } grunt.extendConfig({ i18n: config }) grunt.registerTask(`${slug}-${lang}`, `i18n:${slug}-${lang}`) translationTasks.push(`i18n:${slug}-${lang}`) }) grunt.registerTask(`${slug}-tasks`, translationTasks) } export const register = (grunt) => { grunt.registerMultiTask('sheets-i18n', 'Translate Sheets ', async function () { const done = this.async() const task_options = this.data.options // const cwd = path.resolve(option('cwd', task_options, grunt, process.cwd())) return new Promise((resolve) => { if (!task_options.watchContent) { resolve(true) done() } }) }) }