93 lines
3.0 KiB
TypeScript
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()
|
|
}
|
|
})
|
|
})
|
|
} |