Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

오픈소스 번역 기여하기 v2

194 views

Published on

2018년 2월 24일 그놈 3.28 번역 모임

Published in: Technology
  • Be the first to comment

  • Be the first to like this

오픈소스 번역 기여하기 v2

  1. 1. 오픈소스 번역 기여하기 그놈 3.28 번역 모임 류창우 <cwryu@debian.org>
  2. 2. 미디어위키 (위키백과)
  3. 3. 그놈 화면
  4. 4. 이렇게 우리말이 나오는 오픈소스는 ● 물론 누군가 번역한 사람이 있습니다. 아마도 한국인. ● 오늘날 오픈소스는 전세계 모두가 같이 만들어서 같이 씁니다. 특히 번역은 각 언어의 네이티브들의 도움을 받습니다. ● AI가 완전히 대신할 날은 쉽게 안 옵니다. :-)
  5. 5. 오픈소스 번역? ● "메시지 번역" - UI에 표시되는 글 번역 ● 도움말 번역 ● 문서 번역, 웹사이트 번역
  6. 6. 메시지 번역 특징 ● 1회성 작업이 아닙니다. ● 짧아도 2-3년, 길게 10년 넘게 유지되는 SW가 많습니다. ● SW가 여러번 개정되면서 번역도 업데이트해야 합니다. ● 사용자가 많이 접합니다.
  7. 7. 비공식 "한글 패치"가 아닙니다
  8. 8. 번역 작업을 어떻게 모을 것인가 ● 현대적인 SW는 보통 번역할 문자열이 분리되어 있고 추가할 수 있습니다 ("번 역 리소스") ● 케바케: 여러가지 파일 포맷 ● 온라인 번역: translatewiki, transifex, weblate, pootle ● 파일을 메일로 전달하기도 하고 github PR로 하기도 하고.. ● GNOME은 그 중간쯤입니다. 번역은 파일로 편집하지만 소스코드를 다루지는 않습니다. ● 오픈소스에서 가장 많이 쓰이는 번역 파일인 GNU Gettext 포맷을 여기서 다룹 니다.
  9. 9. 주요 번역 방식 소개: 온라인 ● https://translatewiki.net - 주로 위키미디어 관련 (mediawiki, openstreetmap) ● https://www.transifex.com/ - 여러 오픈소스, 회사가 운영하므로 꺼리기도 함 ● weblate (서버 설치) - https://hosted.weblate.org/ ● pootle (서버 설치) - https://translations.documentfoundation.org/ 등
  10. 10. 주요 번역 방식 소개: The Translation Project ● https://translationproject.org/ ● 처음에 GNU Translation Project로 시작해서 주로 GNU 프로그램들 메시지 ● 번역 파일 다운로드 & 자동처리되는 메일로 제출
  11. 11. 주요 번역 방식 소개: GNOME ● https://l10n.gnome.org “Damned Lies” ● 마크 트와인, "There are three kinds of lies: lies, damned lies, and statistics." ○ 세상에는 세 가지 종류의 거짓말이 있다. 거짓말, 빌어먹을 거짓말, 그리고 통계. ● 번역 "통계" 사이트 - 지금은 번역 제출 기능도 탑재 ● 웹으로 번역 파일 다운로드 ● 편집은 로컬에서 ● 웹에서 제출
  12. 12. ● 1990 Sun Microsystems에서 최초 개발한 방식을 GNU Gettext에서 사용, 지금 은 GNU Gettext 확장된 버전이 사실상 대세 ● 대부분 (아마도 모든) 프로그래밍 언어에서 지원 ● 영문 문자열을 key로 (msgid) 번역 문자열을 (msgstr) 찾아내는 방식. ○ 개발자 입장에서 도입 장벽이 낮음 ○ 번역자 입장에서 점진적으로 작업해 나갈 수 있음 ● 계속 업데이트되는 긴 문서를 번역할 때도 중간 포맷으로 사용 ○ po4a, poxml 같은 변환도구 사용 GNU Gettext
  13. 13. Gettext 파일: PO와 MO ● Portable Object, Machine Object라는 어려워보이는 이름의 파일 포맷인데.. ● .po 파일은 사람이 편집할 수 있는 텍스트 파일입니다. ○ 영문 문자열(msgid)과 번역된 문자열(msgstr)이 들어 있습니다. ● .mo 파일은 .po 파일을 변환한 설치용 파일입니다. ○ 바이너리 형식 해시테이블.
  14. 14. 별로 알 필요 없는 내부 구조 (localedir, locale, domain) /usr/share/locale/ko/LC_MESSAGES/hello.mo setlocale(LC_MESSAGES, ""); bindtextdomain("hello", "/usr/share/locale"); textdomain("hello"); ... greeting_msg = _("Hello, world!"); $ LANG=C hello Hello, world! $ env LANG=ko_KR.UTF-8 hello 안녕하세요, 여러분! $ env LANG=ko_KR.UTF-8 TEXTDOMAINDIR=/usr/share/locale gettext hello "Hello, world!" 안녕하세요, 여러분!$
  15. 15. 일반적인 작업 과정 ● 앱 개발자가 소스코드에서 영문 스트링을 추출해 영문 스트링만 들어 있는 PO 파일을 (.pot) 만듭니다. (xgettext) ● 새로 번역하는 경우 번역자가 이 .pot 파일을 .po 파일로 만들어서 편집합니다. ● 기존 번역이 있는 경우 .pot 파일과 기존 .po 파일을 비교해 추가된/바뀐 문자열 을 포함한 새 .po 파일을 만듭니다. (msgmerge) ● 번역자는 .po 파일에 번역을 추가/업데이트해 제출
  16. 16. 일반적인 작업 과정 (새로 번역 / 업데이트) hello.c ko.po (new) hello.pot ko.po (merged) ko.po (old) ko.po (updated)
  17. 17. 그래서 PO 파일을 기여하려면.. ● 배포하는 .pot (번역이 없으면) 또는 .po (있으나 업데이트해야 하면) 파일을 찾 습니다. 또는 파일을 만드는 방법이 안내되어 있을 수도 있습니다. ● 폭풍 번역 & 제출
  18. 18. PO 파일 편집하기 ● 텍스트 파일이기는 하지만 이스케이프 등 형식에 맞춰 써야 하므로 일반 텍스 트 편집기로는 어렵습니다. 전용 편집 프로그램 또는 모드/플러그인이 필수적. ● POEdit ● Emacs po-mode, VIM po.vim
  19. 19. 헤더 엔트리 ● 관리를 위한 정보 및 중요 메타데이터가 들어 있습니다. ● Content-Type 및 Plural-Forms 중요 msgid "" msgstr "" "Project-Id-Version: gnome-control-centern" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" "control-center&keywords=I18N+L10N&component=generaln" "POT-Creation-Date: 2016-08-30 15:17+0000n" "PO-Revision-Date: 2016-09-03 20:05+0900n" "Last-Translator: Changwoo Ryu <cwryu@debian.org>n" "Language-Team: GNOME Korea <gnome-kr@googlegroups.com>n" "Language: kon" "MIME-Version: 1.0n" "Content-Type: text/plain; charset=UTF-8n" "Content-Transfer-Encoding: 8bitn" "Plural-Forms: nplurals=1; plural=0;n"
  20. 20. 엔트리 ● 전용 에디터를 쓰면 알 일이 없겠지만… ● 번역자는 번역 문자열 및 코멘트만 추가할 수 있습니다. # 모니터 이름, Primary-Secondary #: ../panels/display/cc-display-panel.c:578 #: ../panels/display/cc-display-panel.c:2429 msgid "Primary" msgstr "주요"
  21. 21. 엔트리 (계속) ● 문맥 문자열(msgctx)이 들어 있을 수도 있습니다. #: ../shell/cc-window.c:872 msgctxt "category" msgid "Hardware" msgstr "하드웨어"
  22. 22. 고급: 복수형 ● 개수에 따라 명사와 동사가 달라지는 경우. 영어는 단수/복수만 있지만 동유럽 언어도 보통 3가지, 아랍어는 6가지나 됩니다. ○ https://www.gnu.org/software/gettext/manual/html_node/Plural-forms.html ● 한국어는 복수형 구별을 하지 않고 1가지만 씁니다. msgid "%i day ago" msgid_plural "%i days ago" msgstr[0] " %i일 전"
  23. 23. 고급: 포맷 문자열 ● 해당 프로그래밍 언어의 지식이 필요한데, 번역하면서 익숙해지면 됩니다. ● 포맷 문자열에 어순을 바꿀 수 있는 기능이 있을 수도 있습니다. #, c-format msgid "%d of %d" msgstr "%2$d개 중 %1$d"
  24. 24. 번역이 끝나면.. ● msgfmt -v 명령으로 확인합니다. ● 전용 에디터에는 내장되어 있음. $ msgfmt --statistics -c -v -o /dev/null ko.po ko.po: 번역된 메시지 1497개. $
  25. 25. ko-po-check ● https://github.com/changwoo/ko-po-check/ ● 추가로 한국어 번역을 확인하는 프로그램 ● 자주 틀리는 관례, 용어, XML 포맷 실수 등등.. ● 잡아낸 게 모두 문제라는 뜻은 아니고, 모든 걸 잡아내지도 못합니다. :) $ ko-po-check ko.po ko.po:1775: 바로 가기: "link"은(는) "링크"(이)라고 번역하길 제안합니다 ko.po:4654: 인쇄 작업 보기(_J): "Show ..." 형태는 "... 보이기(표시)" 형태와 같이 번역합니 다 ko.po:5583: Mouse: 검색어가 중복되어 있습니다 $

×