본문 바로가기
기술이야기

[다국어 처리]다국어 처리를 위한 루틴화 - 2

by SeO.V 2024. 12. 30.

다국어 처리를 하면서 다른 프로젝트도 처리해야 하면서 경로가 동일하길래..

그냥 외부 명령어를 추가해서 경로까지 처리하기로 했다.

 

더보기
더보기
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