다국어 처리를 하면서 다른 프로젝트도 처리해야 하면서 경로가 동일하길래..
그냥 외부 명령어를 추가해서 경로까지 처리하기로 했다.
더보기
더보기
onst fs = require('fs');
const path = require('path');
const { argv } = require('node:process');
// 외부 명령어에 대한 key에 대한 값
const langKey = {
key1: "val1",
key2: "val2"
};
// 프로젝트명 가져오기
const getProject = () => {
const cmd = argv[2] || "jui";
if (!Object.prototype.hasOwnProperty.call(langKey, cmd)) {
console.log("존재하지 않는 프로젝트입니다. 기본값 jui로 처리합니다.");
return langKey.jui;
}
return langKey[cmd];
};
// TS 파일에서 객체 추출
const extractObjectFromTS = (filePath) => {
const content = fs.readFileSync(filePath, 'utf8');
const match = content.match(/const\s+[a-zA-Z]+\s*=\s*({[\s\S]*?});/);
if (!match?.[1]) {
throw new Error(`객체를 찾을 수 없습니다: ${filePath}`);
}
try {
return eval(`(${match[1]})`);
} catch (error) {
throw new Error(`객체 변환 실패: ${filePath}`);
}
};
// 다른 키 찾기
const findDifferentKeys = (obj1, obj2) => {
const allKeys = new Set([...Object.keys(obj1), ...Object.keys(obj2)]);
return Array.from(allKeys).filter(key => !(key in obj1 && key in obj2));
};
try {
const diffListDir = path.join(__dirname, 'diff_list'); // diff_list라는 이름으로 내역들 추가.
if (!fs.existsSync(diffListDir)) {
fs.mkdirSync(diffListDir);
console.log('diff_list 폴더가 생성되었습니다.');
}
const project = getProject();
const koPath = `/경로/${project}/lang/ko.ts`;
const enPath = `/경로/${project}/lang/en.ts`;
const ko = extractObjectFromTS(koPath);
const en = extractObjectFromTS(enPath);
const differences = findDifferentKeys(ko, en);
// JSON 결과 생성
const result = {
createdAt: new Date().toISOString(),
project: project,
totalDifferences: differences.length,
details: differences.map(key => ({
key,
existsInKo: key in ko,
existsInEn: key in en
}))
};
// 결과 저장
const jsonFileName = `lang_diff_${result.createdAt}.json`;
fs.writeFileSync(
path.join(diffListDir, jsonFileName),
JSON.stringify(result, null, 2),
'utf8'
);
console.log('한국어와 영어 파일 간 서로 다른 키들:', differences);
console.log(`\n분석이 완료되었습니다.`);
console.log(`JSON 파일 저장 위치: ${jsonFileName}`);
} catch (error) {
console.error('에러 발생:', error instanceof Error ? error.message : '알 수
없는 에러');
}
위처럼 경로 등에 대해 object로 추가하고 경로에 대해 처리해서 수정.
'기술이야기' 카테고리의 다른 글
[다국어 처리]다국어 처리를 위한 루틴화 - 1 (0) | 2024.12.04 |
---|