GNUninted Nations와 GNU 홈페이지 번역

소프트웨어를 설치할 때 언어팩을 선택할 경우가 있습니다. 영문 소프트웨어임에도 불구하고 언어를 한국어로 선택하면, 소프트웨어를 사용하면서 접하게 되는 메뉴와 오류 메시지 등이 모두 한국어로 표시되어 편리합니다. 겉으로 보이는 모습을 중국어로 바꾸고 싶다면 언어팩을 중국어로 전환하기만 하면 됩니다. 이것은 화면으로 출력되는 메시지를 소프트웨어의 본래 기능과 독립시켜 선택이 가능하게 만들었기 때문인데, 이러한 형태로 언어팩을 만들 수 있는 도구가 GNU gettext입니다. gettext로 만들어진 언어 파일을 흔히 PO (Portable Object) 파일이라고 부르며 파일의 확장자가 .po로 끝납니다. 번역에 사용되는 최초의 원형 파일은 템플릿이라 하여 .pot의 확장자를 갖습니다. 한국어와 일본어 언어팩을 만든다고 가정하면 최초의 템플릿인 example.pot 파일을 복사한 뒤 각각 한국어와 일본어 PO 파일인 example.ko.po와 example.ja.po로 편집하여 소프트웨어를 설치할 때 원하는 언어팩을 선택하는 형태가 됩니다.

GNU 소프트웨어에 사용되는 한국어 언어팩을 만들기 위한 자유 번역 프로젝트를 통해 GNU gettext에 대해 보다 자세히 참고할 수 있습니다. 이 프로젝트는 http://translationproject.org/team/ko.html에서 계속되고 있습니다. gettext 한국어 매뉴얼도 이용할 수 있습니다.

 

이야기를 바꿔 GNU 홈페이지의 글을 한국어로 번역하는 과정을 생각해 봅니다.

예전의 경우를 되돌아 보면, http://www.gnu.org/gnu/manifesto.html이라는 글이 새롭게 올려졌을 때 이 글을 한국어로 번역하려면 HTML 파일을 그대로 복사하여 인코딩과 태그 등을 수정하고 본문의 내용을 한국어로 번역한 후에, 이를 manifesto.ko.html로 이름을 바꾸어 http://www.gnu.org/gnu 디렉토리에 올린 후에 원문 파일인 manifesto.html에 manifesto.ko.html에 대한 링크 정보를 추가하여 상호 참조가 가능하게 했습니다. 만약 일본어 번역문인 manifesto.ja.html이 추가되면 manifesto.html과 manifesto.ko.html, manifesto.ja.html 파일 모두에 서로에 대한 링크 정보를 삽입하여 웹에서 상호 참조가 가능하게 해 주었습니다.

특정한 언어를 담고 있는 문서는 그 언어를 알고 있는 사람이 수정하는 것이 관리에 적절한데 GNU 홈페이지의 문서가 많아질수록, 번역되는 언어가 다양해질수록, 그리고 영어 원문이 빈번히 수정될수록 번역문들을 통합적으로 관리하기가 더욱 힘들어 졌습니다.

또한 2002년 이후부터는 GNU 홈페이지에 CSS와 XHTML 등의 새로운 웹 표준과 디자인 형태가 도입되면서 과거의 문서들을 새로운 디자인에 맞게 마이그레이션하는 문제가 발생하였습니다. 영어 원문들은 일괄적인 처리가 가능했지만, 다양한 언어의 번역문들은 그렇지 못한 경우가 많았습니다.

GNUnited Nations는 GNU 홈페이지의 문서들을 gettext를 이용해 관리하는 자동화 도구입니다. 소프트웨어 언어팩의 경우를 생각하면 그 작동 원리를 쉽게 이해할 수 있습니다. 일괄 처리와 통합 관리가 가능한 HTML과 SSI 코드 등을 제외한, 순수한 글의 내용만을 번역하여 PO 파일로 저장한 뒤에 언어별 PO 파일들로부터 HTML 문서로 자동으로 생성하고 관리하여 홈페이지에서 여러 가지 언어가 함께 서비스 될 수 있도록 하는 것입니다. PO 파일을 이용한 GNU 홈페이지 문서 번역은 CSS와 HTML, SSI 등의 기술적이고 세부적인 사항에 신경쓰지 않고 본문의 내용만을 번역하고 유지하면 되기 때문에 번역자의 수고와 번거로움을 많이 덜 수 있습니다. 구체적인 작동 원리에 대해서는 GNUnited Nations 설명서GNU 웹 번역자 설명서를 참고할 수 있습니다.

 

실제 번역 방법

GNU 홈페이지의 한국어 번역은 통일적인 운영과 관리를 위해 한국어 번역팀에 의해 주도되고 있습니다. 한국어 번역팀의 작업 공간은 사나바 개발 사이트에 있습니다. 번역팀에 참여하고 싶거나, 직접 참여하지 않더라도 인상 깊은 문서를 개인적으로 번역해 자유 소프트웨어 공동체에 기여하고 싶은 경우에는 <www-ko@gnu.org> 앞으로 연락하면 됩니다. 번역문에는 번역자의 이름과 메일 주소를 명시하여 감사의 뜻을 표하고 있습니다.

GNU 홈페이지 내의 문서와 파일들은 대부분 GNU Emacs로 만들고 관리되기 때문에 특별한 문제가 없다면 Emacs로 작업하는 것이 여러가지 이유로 권장됩니다. 개인 시스템에서 작업할 경우에는 gettext와 Emacs 이외에 gettext-el 패키지를 설치하면 Emacs에서 PO 파일을 불러들일 때 자동으로 PO 편집 모드를 활용할 수 있습니다. PO 파일의 편집은 기본적으로 msgid에 있는 영문을 번역하여 이에 대응하는 msgstr 부분에 새롭게 입력하는 방식으로 이루어 집니다.

예를 들어 템플릿 파일 manifesto.pot가 있을 경우, 한국어 번역을 위해서는 이 파일을 manifesto.ko.po라는 이름으로 복사한 뒤에 작업을 시작합니다. 이 파일 안에 아래와 같은 행이 있다고 할 때 작업 방법은 다음과 같습니다.

 

    msgid "GNU Manifesto"
    msgstr ""

msgid 부분은 그대로 둔 채 msgstr 부분에 다음과 같이 한국어 번역을 입력합니다.

    msgid "GNU Manifesto"
    msgstr "
    GNU 선언문"

여러 줄일 경우에는 다음과 같은 형태가 됩니다.

    msgid ""
    "
    GNU Manifesto"
    "
    written by Richard M. Stallman"
    msgstr ""

위와 같은 경우에는 다음과 같이 편집하면 됩니다.

    msgid ""
    "
    GNU Manifesto"
    "
    written by Richard M. Stallman"
    msgstr ""
    "
    GNU 선언문"
    "
    글: 리처드 M. 스톨먼"

 

이런 식으로 작업하여 한국어 PO 파일이 완성되면 GNUnited Nations에 의해 자동으로 HTML 문서가 생성되는데, 웹에서 볼 수 있는 영어 원문인 manifeto.html 문서 안에는 "GNU Manifesto"로 되어 있는 부분이 한국어 문서인 manifesto.ko.html에는 "GNU 선언문"이라는 형태로 번역되어 있게 됩니다. 일본어 번역의 경우에도 manifesto.ja.po 파일의 msgstr 부분을 일본어로 입력해 넣으면 마찬가지로 해당 부분이 "GNU 宣言"이라고 번역된 manifesto.ja.html 파일이 자동으로 생성됩니다.

HTML 문서가 자동 생성되는 방법은, manifesto.ko.po 파일이 CVS를 통해 GNU 서버에 업로드 되는 상황이 발생하면 이를 감지한 데몬 프로그램이 새로운 언어의 문서 정보를 포함한 상호 링크 정보를 갱신한 후에 manifesto로 시작되는 모든 HTML 문서를 새롭게 만드는 것입니다. 이 경우 CVS로 업로드가 일어난 순간 모든 관련 문서들이 업데이트되지만 시스템에 많은 부담을 주기 때문에 현재에는 Cron을 사용해서 12시간마다 새롭게 업로드된 PO 파일이 있는가를 확인해서 관련된 HTML 파일을 새롭게 만드는 방법을 쓰고 있습니다. 따라서 현재의 시스템 하에서는 PO 파일을 GNU 서버에 업로드해도 최대 12시간이 경과한 뒤에 변화가 웹 서버에 반영됩니다. PO 파일은 HTML을 생성하기 위한 중간 형태의 파일이기 때문에 홈페이지에 직접 나타나지 않습니다. 이곳에 링크시킨 manifesto.pot는 파일의 형식을 보여주기 위해 예시한 것일 뿐입니다.

 

Emacs에서 PO 파일을 불러들인 후에 h를 입력하면 PO 편집 모드에서 쓸 수 있는 명령어에 대한 도움말을 참고할 수 있습니다. 가장 간단한 명령어로는 입력할 msgstr 부분으로 커서를 이동한 후 Enter를 치면 편집창이 새롭게 열리면서 편집을 시작할 수 있고 편집이 끝난 뒤에는 C-cC-c를 두번 연속으로 입력하여 원래의 PO 모드 화면으로 돌아갈 수 있습니다. C-cCtrl 키를 누른 상태에서 C 키를 함께 누르는 것을 의미합니다.

GNU Korea 서버에는 Emacs로 PO 파일을 편집할 수 있는 도구가 갖추어져 있기 때문에 개인 작업 환경이 마련되어 있지 않다면 서버로 접속하여 직접 작업할 수 있습니다. 이 경우 원하는 PO 파일이 있는 위치는 /var/local/cvs/www/ 디렉토리 밑에 있는 po 디렉토리입니다. 예를 들어, http://www.gnu.org/gnu/manifesto.html을 번역하려고 하면 /var/local/cvs/를 루트로 하여 웹 문서와 동일한 디렉토리 구조인 /var/local/cvs/www/gnu/ 안의 po 디렉토리 안에 있는 manifesto.pot 템플릿 파일을 manifesto.ko.po 파일로 복사한 뒤 작업하면 됩니다.

편집 작업은 자신의 홈 디렉토리로 해당 파일을 복사해서 해야지 CVS 디렉토리 상에서 직접 하지 않도록 주의해야 합니다.

문서를 편집하는데 있어 중요한 두가지는 PO 파일의 헤더와 본문의 줄바꿈에 대한 것입니다. PO 파일의 제일 윗부분에 있는 헤더에서 빨간색으로 표시된 다음 사항을 올바르게 입력해 줍니다. 나머지 부분은 그대로 놓아 두어도 됩니다.

 

# Korean translation of http://www.gnu.org/gnu/manifesto.html   --> 번역할 문서의 인터넷 URL
# Copyright (C) 2012 Free Software Foundation, Inc.
# This file is distributed under the same license as the original article.
#
# 번역자 영문 이름 <이메일@주소>, 2012.   --> 번역자의 영문 이름과 메일 주소
#
#, fuzzy   --> Emacs에서는 TAB 키를 입력해서 없앰. GUI용 편집 프로그램에서는 자동으로 없어짐
#
msgid ""
msgstr ""
"Project-Id-Version: manifesto.html\n"   --> 첫번째 줄의 URL 끝에 있는 파일 이름
"POT-Creation-Date: 2011-11-07 20:25-0500\n"  --> 그대로 유지함
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"  --> 편집 프로그램이 자동으로 갱신함
"Last-Translator: FULL NAME \n
"Language-Team: Korean\n"
"Language: ko\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"   --> UTF-8로 함
"Content-Transfer-Encoding: 8bit\n"   --> 8bit로 함

 

특히 PO 파일의 다른 본문들과 달리 헤더의 항목들은 끝이 개행 문자인 \n으로 끝나고 있음에 유의해야 합니다. 또한 한 행이 80 컬럼을 넘지 않게 편집하는 것이 좋습니다. 편집이 끝난 뒤에는 Emacs에서 대문자 V를 입력하여 올바르게 편집되었는지 확인해 볼 수 있습니다. 한국어 번역팀에서 지속적으로 번역 작업을 할 계획을 갖고 있다면, GNUnited Nations 설명서GNU 웹 번역자 설명서를 읽어볼 것을 권장합니다.

실제로 번역된 PO 파일의 예는 이곳에서 참고할 수 있습니다.

 

GUI 편집 프로그램

Emacs에 익숙하지 않고, 사용하기도 힘든 경우에는 GUI용 PO 편집 프로그램을 사용할 수 있습니다.

다음과 같은 웹 기반 번역 도구도 이용 가능합니다.

 

편집 후의 검증 방법

전용 편집 프로그램의 경우는 별도의 검증이 필요 없지만, 일반 텍스트 편집기로 작업하거나 일부분을 수정했다면 다음 명령어로 완성된 파일의 오류 여부를 확인해 볼 수 있습니다.

$ msgfmt -cv -o /dev/null manifesto.ko.po

GUI나 웹 기반의 편집 도구를 사용할 경우에는 원본 PO 파일이 갖고 있던 구조가 변형되어 행 구분이 없게 바뀔 수 있는데, 한 행이 80컬럼 이하가 되도록 바꿔 주는 것이 좋습니다. 다음 명령어를 이용해서 편집 프로그램이 임의로 조정한 양식을 GNUN이 기준으로 하는 형태로 바꿀 수 있습니다.

$ msgcat -o manifesto.ko.po manifesto.ko.po

편집 과정에서 PO 파일 내부에 포함된 HTML 태그 중 일부가 삭제되는 등의 오류가 생길 수 있는데, po-html-validator를 이용해서 오류 여부를 확인해 볼 수 있습니다. 실행 파일인 Python 스크립트는 /usr/local/bin/ 디렉토리에 설치되어 있으므로 설정 변경이 필요한 경우에는 이 파일을 복사한 뒤 수정해서 사용하면 됩니다.

$ po-html-validator manifesto.ko.po

HTML 파일의 오류 검증이 필요할 경우에는 다음 명령어를 사용할 수 있습니다.

$ gnun-validate-html manifesto.ko.po

$ linkchecker -r1 -v http://www.gnu.org/gnu/manifesto.ko.html

MS 윈도우즈 환경에서 작업한 파일을 제공받는 등의 이유로, 확인 과정에서 개행 문자(\n)와 BOM을 제거할 필요가 있을 때는 /usr/local/bin/ 에 설치된 fromdosbomremover 명령어를 사용할 수 있습니다. 둘 모두 명령어 뒤에 파일명을 인수로 실행하면 불필요한 문자들이 제거됩니다.

$ fromdos manifesto.ko.po

$ bomremover manifesto.ko.po

 

번역에 참고할 수 있는 용어 사전

GNU Korea 용어 사전 DB는 사고로 손상되어 더 이상 이용할 수 없습니다. 대신 일부가 정리된 번역어표와 다른 사이트들의 자료를 참고할 수 있습니다.

GNU 홈페이지 번역에 있어서는 개인적인 선호가 담긴 한글 용어의 채택을 제한합니다. 이러한 번역어들은 전체적인 통일성을 위해 한국어팀에 의해 변경될 수 있습니다. 새로운 한국어 용어를 사용하기 원할 경우에는 <www-ko-translators@gnu.org>의 논의를 거쳐 결정하는 것을 원칙으로 합니다.

 

이 모든 것이 너무 어렵고 생소하다면...

HTML 태그 등이 없는 웹 페이지의 본문 내용을 단순히 단락을 구분하여 번역한 뒤 텍스트 파일에 저장해서 보내면 한국어 번역팀이 처리할 수 있습니다. 그러나 이 경우에는 번역문이 실제로 GNU 홈페이지에 게시되는데 시간이 좀 더 소요될 것입니다.

 

현재까지 업데이트 된 PO 파일 리스트

 

한국어 코디네이터를 위한 몇가지 안내

CVS 커밋에서의 유의 사항

PO 파일 작성이 완료되어 CVS 서버에 commit 할 때는 몇가지 주의가 필요합니다. 특히 commit이 수행되면 관련 정보가 www-commit 메일링 리스트를 통해 GNU 웹마스터와 각국 번역 코디네이터들에게 모두 전달되기 때문에 가능하면 발생되는 메일의 수를 줄일 필요가 있습니다. 따라서 a.ko.po, b.ko.po, c.ko.po 등 3개의 PO 파일을 새롭게 만들거나 기존의 번역문을 수정한 경우에는 각각의 파일을 별도로 3번의 commit을 하지 말고, 한번의 commit으로 3개의 파일을 함께 올리는 것이 좋습니다.

$ cvs commit -m "add new Korean translations." a.ko.po b.ko.po c.ko.po

위와 같은 형식으로 실행할 수 있습니다. 또한 문서들의 갱신이 매우 빈번하게 이루어 지기 때문에 CVS에 addcommit을 하기 전에 반드시 update를 먼저 수행하는 것이 좋습니다.

로그 메세지를 여러 줄로 나눠 여러 항목을 표기하고자 한다면, 이중 따옴표 "" 안에서 단순히 엔터를 쳐서 다음행으로 넘어간 뒤에 입력을 계속하면 다음 줄로 로그 메시지가 기록됩니다.

$ cvs commit -m "add new Korean translations.
and some bug fix.
and ...." a.ko.po b.ko.po c.ko.po

 

가입해야 하는 메일링 리스트

한국어 코디네이터는 다음 메일링 리스트에 가입하여 GNU 웹마스터 및 다른 국가 코디네이터들과 의견을 주고받아야 합니다. 가입은 https://lists.gnu.org/mailman/listinfo/에서 직접 합니다.