SlideShare una empresa de Scribd logo
1 de 25
오픈소스 번역 기여하기
그놈 3.30 번역 모임
류창우 <cwryu@debian.org>
그놈 화면
이렇게 우리말이 나오는 오픈소스는
● 물론 누군가 번역한 사람이 있습니다. 아마도 한국인.
● 오늘날 오픈소스는 전세계 모두가 같이 만들어서 같이 씁니다. 특히 번역은 각
언어의 네이티브들의 도움을 받습니다.
● AI가 완전히 대신할 날은 쉽게 안 옵니다. :-)
오픈소스 번역?
● "메시지 번역" - UI에 표시되는 글 번역
● 도움말 번역
● 문서 번역, 웹사이트 번역
메시지 번역 특징
● 1회성 작업이 아닙니다.
● 짧아도 2-3년, 길게 10년 넘게 유지되는 SW가 많습니다.
● SW가 여러번 개정되면서 번역도 업데이트해야 합니다.
● 사용자가 많이 접합니다.
비공식 "한글 패치"가 아닙니다
번역 작업을 어떻게 모을 것인가
● 현대적인 SW는 보통 번역할 문자열이 분리되어 있고 추가할 수 있습니다 ("번
역 리소스")
● 케바케: 여러가지 파일 포맷
● 온라인 번역: translatewiki, transifex, weblate, pootle
● 파일을 메일로 전달하기도 하고 github PR로 하기도 하고..
● GNOME은 그 중간쯤입니다. 번역은 파일로 편집하지만 소스코드를 다루지는
않습니다.
● 오픈소스에서 가장 많이 쓰이는 번역 파일인 GNU Gettext 포맷을 여기서 다룹
니다.
주요 번역 방식 소개: 온라인
● https://translatewiki.net - 주로 위키미디어 관련 (mediawiki, openstreetmap)
● https://www.transifex.com/ - 여러 오픈소스, 회사가 운영하므로 꺼리기도 함
● weblate (서버 설치) - https://hosted.weblate.org/
● pootle (서버 설치) - https://translations.documentfoundation.org/ 등
주요 번역 방식 소개: The Translation Project
● https://translationproject.org/
● 처음에 GNU Translation Project로 시작해서 주로 GNU 프로그램들 메시지
● 번역 파일 다운로드 & 자동처리되는 메일로 제출
주요 번역 방식 소개: GNOME
● https://l10n.gnome.org “Damned Lies”
● 마크 트와인, "There are three kinds of lies: lies, damned lies, and statistics."
○ 세상에는 세 가지 종류의 거짓말이 있다. 거짓말, 빌어먹을 거짓말, 그리고 통계.
● 번역 "통계" 사이트 - 지금은 번역 제출 기능도 탑재
● 웹으로 번역 파일 다운로드
● 편집은 로컬에서
● 웹에서 제출
● 1990 Sun Microsystems에서 최초 개발한 방식을 GNU Gettext에서 사용, 지금
은 GNU Gettext 확장된 버전이 사실상 대세
● 대부분 (아마도 모든) 프로그래밍 언어에서 지원
● 영문 문자열을 key로 (msgid) 번역 문자열을 (msgstr) 찾아내는 방식.
○ 개발자 입장에서 도입 장벽이 낮음
○ 번역자 입장에서 점진적으로 작업해 나갈 수 있음
● 계속 업데이트되는 긴 문서를 번역할 때도 중간 포맷으로 사용
○ po4a, poxml 같은 변환도구 사용
GNU Gettext
Gettext 파일: PO와 MO
● Portable Object, Machine Object라는 어려워보이는 이름의 파일 포맷인데..
● .po 파일은 사람이 편집할 수 있는 텍스트 파일입니다.
○ 영문 문자열(msgid)과 번역된 문자열(msgstr)이 들어 있습니다.
● .mo 파일은 .po 파일을 변환한 설치용 파일입니다.
○ 바이너리 형식 해시테이블.
별로 알 필요 없는 내부 구조 (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!"
안녕하세요, 여러분!$
일반적인 작업 과정
● 앱 개발자가 소스코드에서 영문 스트링을 추출해 영문 스트링만 들어 있는 PO
파일을 (.pot) 만듭니다. (xgettext)
● 새로 번역하는 경우 번역자가 이 .pot 파일을 .po 파일로 만들어서 편집합니다.
● 기존 번역이 있는 경우 .pot 파일과 기존 .po 파일을 비교해 추가된/바뀐 문자열
을 포함한 새 .po 파일을 만듭니다. (msgmerge)
● 번역자는 .po 파일에 번역을 추가/업데이트해 제출
일반적인 작업 과정 (새로 번역 / 업데이트)
hello.c
ko.po
(new)
hello.pot
ko.po
(merged)
ko.po
(old)
ko.po
(updated)
그래서 PO 파일을 기여하려면..
● 배포하는 .pot (번역이 없으면) 또는 .po (있으나 업데이트해야 하면) 파일을 찾
습니다. 또는 파일을 만드는 방법이 안내되어 있을 수도 있습니다.
● 폭풍 번역 & 제출
PO 파일 편집하기
● 텍스트 파일이기는 하지만 이스케이프 등 형식에 맞춰 써야 하므로 일반 텍스
트 편집기로는 어렵습니다. 전용 편집 프로그램 또는 모드/플러그인이 필수적.
● POEdit
● Emacs po-mode, VIM po.vim
헤더 엔트리
● 관리를 위한 정보 및 중요 메타데이터가 들어 있습니다.
● 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"
엔트리
● 전용 에디터를 쓰면 알 일이 없겠지만…
● 번역자는 번역 문자열 및 코멘트만 추가할 수 있습니다.
# 모니터 이름, Primary-Secondary
#: ../panels/display/cc-display-panel.c:578
#: ../panels/display/cc-display-panel.c:2429
msgid "Primary"
msgstr "주요"
엔트리 (계속)
● 문맥 문자열(msgctx)이 들어 있을 수도 있습니다.
#: ../shell/cc-window.c:872
msgctxt "category"
msgid "Hardware"
msgstr "하드웨어"
고급: 복수형
● 개수에 따라 명사와 동사가 달라지는 경우. 영어는 단수/복수만 있지만 동유럽
언어도 보통 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일 전"
고급: 포맷 문자열
● 해당 프로그래밍 언어의 지식이 필요한데, 번역하면서 익숙해지면 됩니다.
● 포맷 문자열에 어순을 바꿀 수 있는 기능이 있을 수도 있습니다.
#, c-format
msgid "%d of %d"
msgstr "%2$d개 중 %1$d"
번역이 끝나면..
● msgfmt -v 명령으로 확인합니다.
● 전용 에디터에는 내장되어 있음.
$ msgfmt --statistics -c -v -o /dev/null ko.po
ko.po: 번역된 메시지 1497개.
$
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: 검색어가 중복되어 있습니다
$

Más contenido relacionado

Similar a 오픈소스 번역 기여하기 v3

오픈소스 번역 기여하기
오픈소스 번역 기여하기오픈소스 번역 기여하기
오픈소스 번역 기여하기Changwoo Ryu
 
[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기
[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기
[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기PgDay.Seoul
 
강분도 - 공개SW개발과 우분투 (2010Y10M05D)
강분도 - 공개SW개발과 우분투 (2010Y10M05D)강분도 - 공개SW개발과 우분투 (2010Y10M05D)
강분도 - 공개SW개발과 우분투 (2010Y10M05D)Ubuntu Korea Community
 
코분투메뉴얼 10.04 Cobuntu Manual
코분투메뉴얼 10.04 Cobuntu Manual코분투메뉴얼 10.04 Cobuntu Manual
코분투메뉴얼 10.04 Cobuntu ManualUbuntu Korea Community
 
Introduction to Golang v2
Introduction to Golang v2Introduction to Golang v2
Introduction to Golang v2Hyejong
 
프로그래밍 언어의 기본 개념과 주요 프로그래밍 언어
프로그래밍 언어의 기본 개념과 주요 프로그래밍 언어프로그래밍 언어의 기본 개념과 주요 프로그래밍 언어
프로그래밍 언어의 기본 개념과 주요 프로그래밍 언어Bizmerce Corp
 
Github? linux? 이건 뭐지?
Github? linux? 이건 뭐지?Github? linux? 이건 뭐지?
Github? linux? 이건 뭐지?Suho Lee
 
Pc용 주요 오픈소스sw 종류 및 이용, 그리고 배포
Pc용 주요 오픈소스sw 종류 및 이용, 그리고 배포Pc용 주요 오픈소스sw 종류 및 이용, 그리고 배포
Pc용 주요 오픈소스sw 종류 및 이용, 그리고 배포Jihui Choi
 
[IGC2017] Protocol:hyperspace Diver 개발 포스트모템
[IGC2017] Protocol:hyperspace Diver 개발 포스트모템[IGC2017] Protocol:hyperspace Diver 개발 포스트모템
[IGC2017] Protocol:hyperspace Diver 개발 포스트모템Young Soo Kim
 
Golang Restful 서버 개발기
Golang Restful 서버 개발기Golang Restful 서버 개발기
Golang Restful 서버 개발기Hyejong
 
AngularJS In Production
AngularJS In ProductionAngularJS In Production
AngularJS In ProductionMooYeol Lee
 
파이썬을 배워야하는 이유 발표자료 - 김연수
파이썬을 배워야하는 이유 발표자료 - 김연수파이썬을 배워야하는 이유 발표자료 - 김연수
파이썬을 배워야하는 이유 발표자료 - 김연수Yeon Soo Kim
 
2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영
2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영
2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영Tae Young Lee
 
[Devil's camp 2019] 혹시 Elixir 아십니까? 정.말.갓.언.어.입.니.다
[Devil's camp 2019] 혹시 Elixir 아십니까? 정.말.갓.언.어.입.니.다[Devil's camp 2019] 혹시 Elixir 아십니까? 정.말.갓.언.어.입.니.다
[Devil's camp 2019] 혹시 Elixir 아십니까? 정.말.갓.언.어.입.니.다KWON JUNHYEOK
 
[DS Meetup] iPad로 가벼운 분석환경 구축해보기
[DS Meetup] iPad로 가벼운 분석환경 구축해보기[DS Meetup] iPad로 가벼운 분석환경 구축해보기
[DS Meetup] iPad로 가벼운 분석환경 구축해보기Minho Lee
 
Python을 이용한 Linux Desktop Application
Python을 이용한 Linux Desktop ApplicationPython을 이용한 Linux Desktop Application
Python을 이용한 Linux Desktop ApplicationUbuntu Korea Community
 
CoreDot TechSeminar 2018 - Session1 Park Jihun
CoreDot TechSeminar 2018 - Session1 Park JihunCoreDot TechSeminar 2018 - Session1 Park Jihun
CoreDot TechSeminar 2018 - Session1 Park JihunCore.Today
 
어플리케이션 및 웹 개발
어플리케이션 및 웹 개발어플리케이션 및 웹 개발
어플리케이션 및 웹 개발Leonardo Taehwan Kim
 

Similar a 오픈소스 번역 기여하기 v3 (20)

오픈소스 번역 기여하기
오픈소스 번역 기여하기오픈소스 번역 기여하기
오픈소스 번역 기여하기
 
[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기
[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기
[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기
 
강분도 - 공개SW개발과 우분투 (2010Y10M05D)
강분도 - 공개SW개발과 우분투 (2010Y10M05D)강분도 - 공개SW개발과 우분투 (2010Y10M05D)
강분도 - 공개SW개발과 우분투 (2010Y10M05D)
 
코분투메뉴얼 10.04 Cobuntu Manual
코분투메뉴얼 10.04 Cobuntu Manual코분투메뉴얼 10.04 Cobuntu Manual
코분투메뉴얼 10.04 Cobuntu Manual
 
Introduction to Golang v2
Introduction to Golang v2Introduction to Golang v2
Introduction to Golang v2
 
프로그래밍 언어의 기본 개념과 주요 프로그래밍 언어
프로그래밍 언어의 기본 개념과 주요 프로그래밍 언어프로그래밍 언어의 기본 개념과 주요 프로그래밍 언어
프로그래밍 언어의 기본 개념과 주요 프로그래밍 언어
 
Github? linux? 이건 뭐지?
Github? linux? 이건 뭐지?Github? linux? 이건 뭐지?
Github? linux? 이건 뭐지?
 
About Epub
About EpubAbout Epub
About Epub
 
Pc용 주요 오픈소스sw 종류 및 이용, 그리고 배포
Pc용 주요 오픈소스sw 종류 및 이용, 그리고 배포Pc용 주요 오픈소스sw 종류 및 이용, 그리고 배포
Pc용 주요 오픈소스sw 종류 및 이용, 그리고 배포
 
Introduce Cobuntu 9.04
Introduce Cobuntu 9.04Introduce Cobuntu 9.04
Introduce Cobuntu 9.04
 
[IGC2017] Protocol:hyperspace Diver 개발 포스트모템
[IGC2017] Protocol:hyperspace Diver 개발 포스트모템[IGC2017] Protocol:hyperspace Diver 개발 포스트모템
[IGC2017] Protocol:hyperspace Diver 개발 포스트모템
 
Golang Restful 서버 개발기
Golang Restful 서버 개발기Golang Restful 서버 개발기
Golang Restful 서버 개발기
 
AngularJS In Production
AngularJS In ProductionAngularJS In Production
AngularJS In Production
 
파이썬을 배워야하는 이유 발표자료 - 김연수
파이썬을 배워야하는 이유 발표자료 - 김연수파이썬을 배워야하는 이유 발표자료 - 김연수
파이썬을 배워야하는 이유 발표자료 - 김연수
 
2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영
2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영
2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영
 
[Devil's camp 2019] 혹시 Elixir 아십니까? 정.말.갓.언.어.입.니.다
[Devil's camp 2019] 혹시 Elixir 아십니까? 정.말.갓.언.어.입.니.다[Devil's camp 2019] 혹시 Elixir 아십니까? 정.말.갓.언.어.입.니.다
[Devil's camp 2019] 혹시 Elixir 아십니까? 정.말.갓.언.어.입.니.다
 
[DS Meetup] iPad로 가벼운 분석환경 구축해보기
[DS Meetup] iPad로 가벼운 분석환경 구축해보기[DS Meetup] iPad로 가벼운 분석환경 구축해보기
[DS Meetup] iPad로 가벼운 분석환경 구축해보기
 
Python을 이용한 Linux Desktop Application
Python을 이용한 Linux Desktop ApplicationPython을 이용한 Linux Desktop Application
Python을 이용한 Linux Desktop Application
 
CoreDot TechSeminar 2018 - Session1 Park Jihun
CoreDot TechSeminar 2018 - Session1 Park JihunCoreDot TechSeminar 2018 - Session1 Park Jihun
CoreDot TechSeminar 2018 - Session1 Park Jihun
 
어플리케이션 및 웹 개발
어플리케이션 및 웹 개발어플리케이션 및 웹 개발
어플리케이션 및 웹 개발
 

Más de Changwoo Ryu

그놈 3.30 번역 모임
그놈 3.30 번역 모임그놈 3.30 번역 모임
그놈 3.30 번역 모임Changwoo Ryu
 
그놈 3.28 번역 모임
그놈 3.28 번역 모임그놈 3.28 번역 모임
그놈 3.28 번역 모임Changwoo Ryu
 
국립국어원 오픈소스 어휘 정보 활용 사례
국립국어원 오픈소스 어휘 정보 활용 사례국립국어원 오픈소스 어휘 정보 활용 사례
국립국어원 오픈소스 어휘 정보 활용 사례Changwoo Ryu
 
날림 학습: 컴퓨터의 시간 처리
날림 학습: 컴퓨터의 시간 처리날림 학습: 컴퓨터의 시간 처리
날림 학습: 컴퓨터의 시간 처리Changwoo Ryu
 
그놈 3.26 번역 모임
그놈 3.26 번역 모임그놈 3.26 번역 모임
그놈 3.26 번역 모임Changwoo Ryu
 
C/c++ 표준 int 타입
C/c++ 표준 int 타입C/c++ 표준 int 타입
C/c++ 표준 int 타입Changwoo Ryu
 
Hunspell 한국어 맞춤법 검사의 원리
Hunspell 한국어 맞춤법 검사의 원리Hunspell 한국어 맞춤법 검사의 원리
Hunspell 한국어 맞춤법 검사의 원리Changwoo Ryu
 
오픈소스 라이선스 세미나 (2014/07/15)
오픈소스 라이선스 세미나 (2014/07/15)오픈소스 라이선스 세미나 (2014/07/15)
오픈소스 라이선스 세미나 (2014/07/15)Changwoo Ryu
 

Más de Changwoo Ryu (9)

그놈 3.30 번역 모임
그놈 3.30 번역 모임그놈 3.30 번역 모임
그놈 3.30 번역 모임
 
그놈 3.28 번역 모임
그놈 3.28 번역 모임그놈 3.28 번역 모임
그놈 3.28 번역 모임
 
국립국어원 오픈소스 어휘 정보 활용 사례
국립국어원 오픈소스 어휘 정보 활용 사례국립국어원 오픈소스 어휘 정보 활용 사례
국립국어원 오픈소스 어휘 정보 활용 사례
 
날림 학습: 컴퓨터의 시간 처리
날림 학습: 컴퓨터의 시간 처리날림 학습: 컴퓨터의 시간 처리
날림 학습: 컴퓨터의 시간 처리
 
그놈 3.26 번역 모임
그놈 3.26 번역 모임그놈 3.26 번역 모임
그놈 3.26 번역 모임
 
C/c++ 표준 int 타입
C/c++ 표준 int 타입C/c++ 표준 int 타입
C/c++ 표준 int 타입
 
Reprap 소개
Reprap 소개Reprap 소개
Reprap 소개
 
Hunspell 한국어 맞춤법 검사의 원리
Hunspell 한국어 맞춤법 검사의 원리Hunspell 한국어 맞춤법 검사의 원리
Hunspell 한국어 맞춤법 검사의 원리
 
오픈소스 라이선스 세미나 (2014/07/15)
오픈소스 라이선스 세미나 (2014/07/15)오픈소스 라이선스 세미나 (2014/07/15)
오픈소스 라이선스 세미나 (2014/07/15)
 

오픈소스 번역 기여하기 v3

  • 1. 오픈소스 번역 기여하기 그놈 3.30 번역 모임 류창우 <cwryu@debian.org>
  • 3. 이렇게 우리말이 나오는 오픈소스는 ● 물론 누군가 번역한 사람이 있습니다. 아마도 한국인. ● 오늘날 오픈소스는 전세계 모두가 같이 만들어서 같이 씁니다. 특히 번역은 각 언어의 네이티브들의 도움을 받습니다. ● AI가 완전히 대신할 날은 쉽게 안 옵니다. :-)
  • 4. 오픈소스 번역? ● "메시지 번역" - UI에 표시되는 글 번역 ● 도움말 번역 ● 문서 번역, 웹사이트 번역
  • 5. 메시지 번역 특징 ● 1회성 작업이 아닙니다. ● 짧아도 2-3년, 길게 10년 넘게 유지되는 SW가 많습니다. ● SW가 여러번 개정되면서 번역도 업데이트해야 합니다. ● 사용자가 많이 접합니다.
  • 7. 번역 작업을 어떻게 모을 것인가 ● 현대적인 SW는 보통 번역할 문자열이 분리되어 있고 추가할 수 있습니다 ("번 역 리소스") ● 케바케: 여러가지 파일 포맷 ● 온라인 번역: translatewiki, transifex, weblate, pootle ● 파일을 메일로 전달하기도 하고 github PR로 하기도 하고.. ● GNOME은 그 중간쯤입니다. 번역은 파일로 편집하지만 소스코드를 다루지는 않습니다. ● 오픈소스에서 가장 많이 쓰이는 번역 파일인 GNU Gettext 포맷을 여기서 다룹 니다.
  • 8. 주요 번역 방식 소개: 온라인 ● https://translatewiki.net - 주로 위키미디어 관련 (mediawiki, openstreetmap) ● https://www.transifex.com/ - 여러 오픈소스, 회사가 운영하므로 꺼리기도 함 ● weblate (서버 설치) - https://hosted.weblate.org/ ● pootle (서버 설치) - https://translations.documentfoundation.org/ 등
  • 9.
  • 10. 주요 번역 방식 소개: The Translation Project ● https://translationproject.org/ ● 처음에 GNU Translation Project로 시작해서 주로 GNU 프로그램들 메시지 ● 번역 파일 다운로드 & 자동처리되는 메일로 제출
  • 11. 주요 번역 방식 소개: GNOME ● https://l10n.gnome.org “Damned Lies” ● 마크 트와인, "There are three kinds of lies: lies, damned lies, and statistics." ○ 세상에는 세 가지 종류의 거짓말이 있다. 거짓말, 빌어먹을 거짓말, 그리고 통계. ● 번역 "통계" 사이트 - 지금은 번역 제출 기능도 탑재 ● 웹으로 번역 파일 다운로드 ● 편집은 로컬에서 ● 웹에서 제출
  • 12. ● 1990 Sun Microsystems에서 최초 개발한 방식을 GNU Gettext에서 사용, 지금 은 GNU Gettext 확장된 버전이 사실상 대세 ● 대부분 (아마도 모든) 프로그래밍 언어에서 지원 ● 영문 문자열을 key로 (msgid) 번역 문자열을 (msgstr) 찾아내는 방식. ○ 개발자 입장에서 도입 장벽이 낮음 ○ 번역자 입장에서 점진적으로 작업해 나갈 수 있음 ● 계속 업데이트되는 긴 문서를 번역할 때도 중간 포맷으로 사용 ○ po4a, poxml 같은 변환도구 사용 GNU Gettext
  • 13. Gettext 파일: PO와 MO ● Portable Object, Machine Object라는 어려워보이는 이름의 파일 포맷인데.. ● .po 파일은 사람이 편집할 수 있는 텍스트 파일입니다. ○ 영문 문자열(msgid)과 번역된 문자열(msgstr)이 들어 있습니다. ● .mo 파일은 .po 파일을 변환한 설치용 파일입니다. ○ 바이너리 형식 해시테이블.
  • 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. 일반적인 작업 과정 ● 앱 개발자가 소스코드에서 영문 스트링을 추출해 영문 스트링만 들어 있는 PO 파일을 (.pot) 만듭니다. (xgettext) ● 새로 번역하는 경우 번역자가 이 .pot 파일을 .po 파일로 만들어서 편집합니다. ● 기존 번역이 있는 경우 .pot 파일과 기존 .po 파일을 비교해 추가된/바뀐 문자열 을 포함한 새 .po 파일을 만듭니다. (msgmerge) ● 번역자는 .po 파일에 번역을 추가/업데이트해 제출
  • 16. 일반적인 작업 과정 (새로 번역 / 업데이트) hello.c ko.po (new) hello.pot ko.po (merged) ko.po (old) ko.po (updated)
  • 17. 그래서 PO 파일을 기여하려면.. ● 배포하는 .pot (번역이 없으면) 또는 .po (있으나 업데이트해야 하면) 파일을 찾 습니다. 또는 파일을 만드는 방법이 안내되어 있을 수도 있습니다. ● 폭풍 번역 & 제출
  • 18. PO 파일 편집하기 ● 텍스트 파일이기는 하지만 이스케이프 등 형식에 맞춰 써야 하므로 일반 텍스 트 편집기로는 어렵습니다. 전용 편집 프로그램 또는 모드/플러그인이 필수적. ● POEdit ● Emacs po-mode, VIM po.vim
  • 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. 엔트리 ● 전용 에디터를 쓰면 알 일이 없겠지만… ● 번역자는 번역 문자열 및 코멘트만 추가할 수 있습니다. # 모니터 이름, Primary-Secondary #: ../panels/display/cc-display-panel.c:578 #: ../panels/display/cc-display-panel.c:2429 msgid "Primary" msgstr "주요"
  • 21. 엔트리 (계속) ● 문맥 문자열(msgctx)이 들어 있을 수도 있습니다. #: ../shell/cc-window.c:872 msgctxt "category" msgid "Hardware" msgstr "하드웨어"
  • 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. 고급: 포맷 문자열 ● 해당 프로그래밍 언어의 지식이 필요한데, 번역하면서 익숙해지면 됩니다. ● 포맷 문자열에 어순을 바꿀 수 있는 기능이 있을 수도 있습니다. #, c-format msgid "%d of %d" msgstr "%2$d개 중 %1$d"
  • 24. 번역이 끝나면.. ● msgfmt -v 명령으로 확인합니다. ● 전용 에디터에는 내장되어 있음. $ msgfmt --statistics -c -v -o /dev/null ko.po ko.po: 번역된 메시지 1497개. $
  • 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: 검색어가 중복되어 있습니다 $

Notas del editor

  1. 보더랜드2 공식 한국어 번역 추가되기 전에 돌았던 "한글패치" 화면