mono/packages/tasks/src/sheets.ts
2026-01-29 15:31:09 +01:00

93 lines
3.0 KiB
TypeScript

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()
}
})
})
}