XML 파일 번역 프로젝트
-XML 파일 형태로 된 이러닝 관련 웹사이트 콘텐츠
고객 요구 사항
– 기존 번역물과 상이하지 않게 용어 통일
– 서비스 오픈 전인 고객사 웹사이트에 업로드 요청
의뢰 파일 분석
프로젝트를 진행하기 전 XML 파일의 구조를 먼저 분석했습니다. 번역해야 할 XML 파일의 구조는 아래와 같았습니다.
<?XML version="1.0"> <sco> <string> <source> <![CDATA["내용"]]> </source> <translation> <![CDATA["내용"]]> </translation> </string> <source> <![CDATA["내용"]]> </source> <translation> <![CDATA["내용"]]> </translation> </string> . . . </sco>
일부 태그에는 속성도 있었지만, 대략적으로 위와 같은 형태로 반복되는 xml 파일이었습니다. 이미 번역된 부분이 있었기에 <translation>태그에 번역된 내용이 작성되어 있는 경우도 있었습니다. 그리고 이 XML파일은 웹사이트의 콘텐츠가 되기 때문에 다수의 <html>태그도 포함되어 있었습니다.
예상되는 문제점
– 용어 통일
– xml 파일을 어떻게 열고 번역하고 수정할 것인가?
– 작업자(번역가, 리뷰어)가 문서마다 포함되어 있는 html 태그를 누락시킬 수 있음
– 완료된 번역은 어떻게 xml 파일로 다시 편집할 것인가?
“신속하고 꼼꼼한 프로젝트 종료를 위하여”
프로젝트 시작
XML 파일을 신속하고 꼼꼼하게 번역하기 위해서 아래와 같은 방법으로 논의했습니다.
- xml 파일을 메모장이나 워드 프로그램을 사용하여 번역 : 이 방법은 파일이 백여개가 넘는 상태에서 번역할 지점을 찾아가며 번역하기에 유용하지 않았습니다.
- xml 파일을 에디트 프로그램을 사용하여 번역 : 에디트 플러스나 울트라 에디트 등의 에디팅 프로그램은 수정한 내용이 잘 입력되었는지 확인하는데에는 유용했습니다. 그러나 역시 XML태그에서 번역할 지점을 찾아야하기 때문에 유용하지 않았습니다.
- CAT Tool을 사용하여 번역 : 일부 CAT 소프트웨어는 프로그램이 무거워 원활하게 운영하기 쉽지 않았습니다. xml 파일 내에 기존에 번역된 내용이 있어서 추가 작업이 필요하게 되었습니다.
- 이번 프로젝트를 위한 자체 프로그램 개발 : 필요한 사항들을 임의대로 만들 수 있기 때문에 유용했습니다. 그러나 개발 시간과 에러 발생 등에 따른 예상치 못한 리스크가 있을 것이라 판단했습니다.
“이 프로젝트를 위한 프로그램 개발”
모든 사항을 검토해봤지만, 1~3번은 편집, 리뷰 등 후처리 과정에서 시간적 손실이 클 것으로 예상되어, 개발 에러에 대한 리스크를 감수하고 4번을 선택하였습니다.
프로젝트 첫 주에는 운영될 프로그램 기획과 개발 그리고 기존에 번역된 번역을 저장하는 것으로 정했습니다.
최대한 빠르게 완료되어야 함으로 프로그램은 php + mysql + jQuery 조합으로 결정하고 진행되었습니다.
php의 simplexml_load_file() 함수로 xml 파일을 온라인에서 열고 CDATA를 파싱하기 위해 옵션에 LIBXML_NOCDATA를 넣었습니다.
“웹에서 XML파일을 열어서 번역”
또한 웹에서 <html>태그가 표현되지 않고 텍스트로 출력되어야 하고, 작업자(번역가, 리뷰어)가 번역, 검수한 내용을 기재하기 위해 textarea를 생성했습니다. 원문도 필요하므로 Source, Target 두가지로 사용자에게 textarea로 출력했습니다. 원문은 혹시 발생할 지 모를 에러를 방지하기 위해 read only로 출력했습니다.
우선 실제 번역될 내용과 기존에 번역된 자료의 구분을 위해 임의의 아이디를 생성하여 기존에 번역된 자료를 데이터베이스에 입력했습니다. 이렇게 입력한 내용은 다른 아이디가 수정할 수 없습니다.
“입력한 내용은 작성한 ID만 수정 가능하고
DB저장은 실시간으로 “
용어를 확인 할 수 있도록 Target Textarea에 Focus on 될 경우 번역할 내용을 검색해서 그동안 번역한 내용과 비교하여 출력해줍니다.
번역가가 번역에만 집중하고, 주변 환경에 의해서 저장에 문제가 생길 경우를 대비해 작성한 번역 내용은 key up 될 때마다 비동기식으로 자동 저장되도록 했습니다. 혹시나 발생할 에러에 옆에 저장 버튼으로도 저장이 가능하고 단축키로도 저장이 가능하도록 했습니다.
Tag 부분 역시 번역가가 태그를 직접적으로 건드리지 않을 수 있도록 새로운 창을 만들었습니다. 비어있는 부분만 작성하면 태그는 함께 저장됩니다.
“리뷰어는 전체 파일에서 용어를 검색하고
용어의 쓰임을 확인하고 수정”
리뷰어가 수정한 부분은 체크하여 추후에 비교할 수 있도록 했습니다. 리뷰어는 모든 파일에서 단어와 문장을 전부 검색할 수 있도록 했습니다. xml 파일을 개별적으로 접근하지 않아도 단어 사용의 흐름을 보고 수정할 수 있도록 했습니다.
“번역과 편집이 완료된 xml 파일을 다운로드”
번역가 리뷰가 완료된 파일은 다시 한번 누락된 내용이 없는지 확인했습니다. 많은 파일을 xml로 편집하기에는 많은 시간을 요구하기 때문에 번역된 파일을 xml로 내보내기 위한 작업을 합니다.
<? $doc = new DOMDocument("1.0","UTF-8"); $sco = $doc -> createElement('sco'); $sco_attr = $doc ->createAttribute("lanugae"); $sco_attr = ->value="KO"; $sco->appendChild($sco_attr); . . . //Loop Start 소스, 번역 내용 입력 . . . $src ->appendChild($doc->createCDATASection($src_string)); $trg ->appendChild($doc->createCDATASection($trg_string)); . . . //Loop Finish ?>
버튼을 클릭하여 번역된 파일을 xml로 내보낼 수 있도록 코드를 작성했습니다.
이렇게 xml로 내보낼 수 있게 된 파일은 고객사 웹사이트에 정상적으로 업로드 되었고 시스템 상에 문제가 없었습니다.
예상보다 신경 쓸 부분이 많은 프로젝트였지만, 예상했던 문제가 큰 문제 없이 잘 처리되어 예정일에 완료되었습니다.
- 모든 프로젝트를 프로그램을 개발하여 운영하지는 않습니다.
- 프로젝트를 위한 내부 사용 툴이었기 때문에 디자인은 하지 않았습니다.