Skip to content

Commit

Permalink
feat(translate): add auto translation by DeepL
Browse files Browse the repository at this point in the history
  • Loading branch information
rdlabo committed Mar 21, 2023
1 parent 6857ca5 commit 51dc415
Show file tree
Hide file tree
Showing 9 changed files with 2,677 additions and 1,441 deletions.
41 changes: 41 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@
"@ionic/prettier-config": "^2.0.0",
"@tsconfig/docusaurus": "^1.0.4",
"@types/react": "^17.0.37",
"deepl": "^1.0.13",
"html-loader": "^3.1.0",
"prettier": "^2.5.0",
"ts-node": "^10.4.0",
Expand Down
5 changes: 5 additions & 0 deletions scripts/build-translate/deepl.config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"fromLanguage": "EN",
"toLanguage": "JA",
"ulr": "https://www.deepl.com/docs-api"
}
80 changes: 46 additions & 34 deletions scripts/build-translate/index.ts
Original file line number Diff line number Diff line change
@@ -1,42 +1,15 @@
import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from 'fs';
const fetch = require('node-fetch');
import { commands } from '../data/cli.json';

const getTranslateType = async () => {
const response = await fetch('https://unpkg.com/@ionic/docs/core.json');
const { components } = await response.json();

return [
{
type: 'api',
contents: components,
key: 'tag',
contentsKey: 'components',
markdown: 'docs',
resource: response,
},
{
type: 'cli',
contents: commands,
key: 'name',
contentsKey: 'commands',
markdown: 'description',
resource: require('../data/cli.json'),
},
{
type: 'native',
contents: require('../data/native.json'),
key: 'packageName',
contentsKey: '',
markdown: 'description',
resource: require('../data/native.json'),
}
];
}
import { getTranslateType } from './translate-type';
const translate = require('deepl');
import DeeplConfig from './deepl.config.json';
import TranslatedCache from '../data/translated-cache.json';

const apply = async () => {
const translateTypes = await getTranslateType();

const cacheTranslated = TranslatedCache.cache as { [key: string]: string };
const translatedNow = {} as { [key: string]: string };

for (const translateType of translateTypes) {
const directory = process.cwd() + '/src/translate/' + translateType.type;
if (!existsSync(directory)) {
Expand All @@ -58,6 +31,39 @@ const apply = async () => {
if (existsSync(readmePath)) {
componentObject[translateType.markdown] = readFileSync(readmePath, { encoding: 'utf8' });
}
await Promise.all(translateType.translateTarget.map(async (target: string) => {
if (componentObject[target]) {
await Promise.all(componentObject[target].map(async (ob: any) => {
if (ob[translateType.translateTargetKey]) {
const translateText = ob[translateType.translateTargetKey].replace(/\n/g, ' ');

// キャッシュデータにあるか確認
if (cacheTranslated.hasOwnProperty(translateText)) {
ob[translateType.translateTargetKey] = ob[translateType.translateTargetKey] + `\n\n自動翻訳: ${cacheTranslated[translateText]}`;
return;
}

// 今回翻訳データにあるか確認
if (translatedNow.hasOwnProperty(ob[translateType.translateTargetKey])) {
ob[translateType.translateTargetKey] = ob[translateType.translateTargetKey] + `\n\n自動翻訳: ${translatedNow[translateText]}`;
return;
}

const response = await translate({
free_api: true,
text: translateText,
source_lang: DeeplConfig.fromLanguage,
target_lang: DeeplConfig.toLanguage,
auth_key: process.env.DEEPLAUTHKEY,
});
const translated = response.data.translations[0].text;
translatedNow[translateText] = translated;

ob[translateType.translateTargetKey] = ob[translateType.translateTargetKey] + `\n\n自動翻訳: ${translated}`;
}
}));
}
}));
componentsObject.push(componentObject);
}
let resource = translateType.resource;
Expand All @@ -70,6 +76,12 @@ const apply = async () => {

writeFileSync(process.cwd() + '/scripts/data/translated-' + translateType.type + '.json', JSON.stringify(resource, null, 2), { encoding: 'utf8' });
}

// 翻訳データの結合
const writeTranslateCache = {
cache: Object.assign(cacheTranslated, translatedNow)
};
writeFileSync(process.cwd() + '/scripts/data/translated-cache.json', JSON.stringify(writeTranslateCache, null, 2), { encoding: 'utf8' });
};

const create = async () => {
Expand Down
40 changes: 40 additions & 0 deletions scripts/build-translate/translate-type.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
const fetch = require('node-fetch');
import { commands } from '../data/cli.json';

export const getTranslateType = async () => {
const response = await fetch('https://unpkg.com/@ionic/docs/core.json');
const { components } = await response.json();

return [
{
type: 'api',
contents: components,
key: 'tag',
contentsKey: 'components',
markdown: 'docs',
translateTarget: ['props', 'methods', 'events', 'listeners', 'styles', 'slots', 'parts'],
translateTargetKey: 'docs',
resource: response,
},
{
type: 'cli',
contents: commands,
key: 'name',
contentsKey: 'commands',
markdown: 'description',
translateTarget: ["inputs"],
translateTargetKey: 'summary',
resource: require('../data/cli.json'),
},
{
type: 'native',
contents: require('../data/native.json'),
key: 'packageName',
contentsKey: '',
markdown: 'description',
translateTarget: [],
translateTargetKey: 'undefined',
resource: require('../data/native.json'),
}
];
}
Loading

0 comments on commit 51dc415

Please sign in to comment.