티스토리 뷰
다국어 기반으로 응용 프로그램을 작성하는 경우 아래의 그림과 같이 "키=내용"으로 단순 구성된 각 언어별 파일을 만드는 방식을 많이 사용하게 됩니다.
이런 다국어 기반의 응용을 지속적으로 버전업 하다 보면 대부분 영어 번역이나 한글 번역등 중심이 되는 기본 언어 파일에는 내용을 추가하거나 변경하지만 다른 언어에 대해서는 추가 및 업데이트를 소홀하게 되는 경우가 많습니다. 특히 커뮤니티의 기여를 통해서 번역을 확장해 가는 오픈 소스 프로젝트의 경우에는 더더욱 이런 현상이 비일비재한 것이 사실입니다.
프로그램은 새로운 버전이 릴리즈 되었는데 정작 번역 파일은 따라가지 못하다보니 듬성 듬성 번역되지 않은 것 때문에 프로그램이 불완전하게 보이기도 합니다.
이런 상황을 보완하기 위해서 기본 언어와 번역 대상을 하나씩 눈으로 비교 한다는 것은 시작하기도 전에 지치는 일이고 도구를 사용하려고 생각해 보니 그 또한 마땅한 도구를 찾을 수 없네요. 비슷한 상황에서 윈머지를 사용하면 좋겠지만 번역 파일이기 때문에 추가된 항목 뿐만아니라 이미 정상 번역된 것 까지 변경되었다고 나오니 윈머지 또한 적당하지 않아서 PHP로 간단하게 프로그램을 만들어서 사용하기로 했습니다.
프로그램의 구조는 간단합니다.
영어 언어 파일을 읽어서 키를 추출하면서 키 중복 여부를 검사합니다. 이때 빈라인, 주석 라인은 제외시킵니다.
한글 번역 파일을 읽어서 키를 추출하면서 키 중복 여부를 검사합니다. 이때 빈라인, 주석 라인은 제외시킵니다.
추출한 영어 키를 중심으로 해당하는 한글 키가 없으면 한글 번역 파일에 해당 항목을 추가합니다.
영어 키에 해당하는 한글 키가 존재하지만 내용이 동일하면 번역이 필요하다는 검사 결과를 출력합니다.
$line) { $pos = strpos($line, "="); if ($pos === null) continue; //empty line if (substr($line, 0, 1) == '#') continue; //comment line $key = trim(substr($line, 0, $pos)); if (!empty($enary[$key])) { echo "EN: Duplicated!($i, $key)\n"; continue; } $enary[$key] = trim(substr($line, $pos + 1)); } //get keys of ko foreach ($ko_lines as $i=>$line) { $pos = strpos($line, "="); if ($pos === null) continue; //empty line if (substr($line, 0, 1) == '#') continue; //comment line $key = trim(substr($line, 0, $pos)); if (!empty($koary[$key])) { echo "KO: Duplicated!($i, $key)\n"; continue; } $koary[$key] = trim(substr($line, $pos + 1)); } //compare en-ko $addlines="#Added lines"; foreach ($enary as $key=>$str) { if (empty($koary[$key])) { $addlines .= "\n$key = $str"; } else { if ($str == $koary[$key]) { echo "KO: Need translation!($key:$str)\n"; } } } $fp = fopen('Resources_ko.properties', 'a'); if ($fp != null) { fwrite($fp, $addlines); } fclose($fp); ?>
'프로그래밍' 카테고리의 다른 글
윈도우 콘솔창에서 네트웍 점검하기 (0) | 2015.06.15 |
---|---|
C#에서 PDF출력하기 (0) | 2015.06.02 |
C# 반올림, 올림, 버림 사용하기 (0) | 2015.05.20 |
어떤 통합 개발 환경(IDE)을 사용할 것인가? (2) | 2015.05.20 |
C언어 배우기를 위한 준비 (0) | 2015.05.19 |
- 런타임 에러 76은 경로를 찾을수 없다는 메시지 이군요. 입력하신 경로를⋯
- Set folder = fso.GetFolder(sFolder) 에서 런⋯
- [승인대기]
- 표준 시간은 제주 올레 홈페이지를 참조하시는 것이 좋을듯 하네요. 이 포⋯
- 안녕하세요. 리뷰 감사해요 소요시간이 어떻게 되나요? 저도 가보려고요
- 제주 올레길 / 까미노 데 산티아고 길 을 가봤는데 아직 해파랑 남파⋯
- 아 오르세... 제 가 갔을땐 실내 촬영이 안됬는데 지금은 된다고 하지요⋯
- 법환 포구 빌라 자리엔 원래 각종 맛집들이 있엇는데 말이죠.. 싹 밀어서⋯
- 리눅스의 쉘 환경과 같은 준비를 해주는 것으로 이해하면 좋을듯 합니다. ⋯
- 안녕하세요.. 야라바님 초면에 갑작스럽겠지만 제 생명의 은인입니다. T⋯