다국어 시스템
- 기본지식
- 용어 정리
- file 관련
- 다국어 플러그인 / 모듈
- Gettext + potfile
- I18N + json
기본 지식
- 첫 글자와 끝 글자와 그 사이의 글자가 많아 해당 문자의 개수 표현한 것이라고 한다..!㉪!
역시 개발자들의 네이밍 답다. 거의 JAVA 커피가 좋아서, 방울뱀이 좋아서 Python 급이다.간단 명료한 네이밍 동기!!!@!
L10n: Localization
- 지역화의 약칭
- 소프트웨어를 사용하는 사용자를 위해 한 언어에 맞추어 개발 되어있다는 뜻
- 한번에 다중 언어를 사용할 수 없음
I18n: Internationlization
- = multiligual(m17n) system
- 국제화의 약칭
- 여러 언어를 동시에 입력해서 사용할 수 있어야 해당 반열에 오름
G11n: Globalization
- 다국어 시스템을 구성하는 것을 의미
- G11n = I18n + L10n
- EX) POSIX 시간으로 저장하는 것이 I18n / 타임존 고려 출력이 L10n ⇒ POSIX(소프트웨어 절대 시간, 유닉스 시간, 그리니치 천문대 기준 1초에 1씩 증가)
그 외
- K8s : kubernetes(쿠버네티스)
- T9n: Translation(번역)
- A12n: Administration(관리)
- A11y: Accessibility(접근성)
- V12n: Virtualization(가상화)
- C14n: Canonicalization(정규화)
- S13n: Standardization(표준화)
- P13n: Personalization(개인화)
- D11n: Documentation(문서화)
- E13n: Europeanization(유럽화)
- E11n: Normalization(표준화)
GNU란
- “유닉스가 아니다”의 재귀 약자
- 운영체제의 하나, 컴퓨터 소프트웨어의 모음집, 온전히 자유 소프트웨어로 이루어짐
pofile이란
- 소스에서 메시지만 추출한 텍스트 파일
- 이를 번역한 후에 컴파일한 최종 메시지 파일이 mo 파일
- po file 문법
- 공백 # 번역자-주석문 #. 자동-주석문 **#: 참조...** #, 플래그... msgid(번역되지 않은 문자열) msgstr(번역된 문자열)
다국어 플러그인/모듈
- 웹 서비스를 비롯한 응용 소프트웨어에 사용되는 메시지들을 쉽게 다국어에 적용할 수 있도록 도와주는 툴
- 해당 툴을 이용하면, 개발자는 응용 프로그램으로 부터 번역할 메시지를 뽑아내서 사전을 만들 수 있음
- gettext
- i18n 모듈
Gettext 모듈 + pofile
- 메시지 아이디 (msgid)와 번역된 스트링 (msgstr)으로 매칭
PMS-BE(Nuxt.js)에서
https://github.com/lajosbencz/nuxt-gettext
사용 예시
EX) php에서의 gettext 지원 방식 참고
1. gettext 설치 및 확인
#apt-get install gettext
# apt-get install apache2
# apt-get install php5
# local -a =>시스템 local로 등록된 언어 확인
2. po 파일
- gettext를 이용해서 소스코드로 부터 메시지를 가져올 수 있음, xgettext는 소스코드를 읽어 gettext 함수를 추출해 po 파일을 만듦
- 물론 msgstr은 프로그래머 혹은 번역자가 직접 입력해야 함
# xgettext -n test.php3
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\\n"
"Report-Msgid-Bugs-To: \\n"
"POT-Creation-Date: 2013-01-18 22:35+0900\\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n"
"Language-Team: LANGUAGE <LL@li.org>\\n"
"Language: \\n"
"MIME-Version: 1.0\\n"
"Content-Type: text/plain; charset=utf-8\\n"
"Content-Transfer-Encoding: utf-8\\n"
#: test.php3:10
msgid "Hello"
msgstr "HELLO World"
#: test.php3:12
msgid "What"
msgstr "What's your name?"
3. po 파일 컴파일
- 컴파일 완료 시 messages.mo 파일이 만들어짐
# msgfmt messages.po
4. 번역할 새 메시지 추가
- 완전한 po 파일 생성 후, 새로 번역할 메시지가 추가 되었다면 문제가 생김. msgfmt를 이용하면 기존 po 가 삭제돼 버리기 때문
- 해당 경우, **msgmerge**로 문제 해결
- 이후 message_new 파일 번역 후 msgfmt로 mo 파일 생성
=> 기존 po파일의 백업 파일을 만듦
# mv messages.po messages_old.po
=> 새로운 po 파일 생성
# xgettext -n *.php
=> msgmerge를 이용하여 이전 po파일과 새로 만든 po파일을 병합
# msgmerge message_old.po message.po --output-file=message_new.po
I18N 플러그인+ json file
- key값과 value값으로 매칭
- $t(’’) 사용
PMS-WEB(Vue.js)에서
https://github.com/intlify/vue-i18n-next
사용 예시
EX) vue에서 i18n 지원 방식 참고
Nuxt에서 Vue I18n으로 국제화(다국어) 적용하기
참고
https://www.lesstif.com/software-architect/sw-17105632.html
http://korea.gnu.org/manual/release/gettext/gettext-ko_2.html
https://www.joinc.co.kr/w/Site/PHP/gettext
https://developerjournal.tistory.com/10
오류, 수정 사항은 피드백 주시면 감사드리며 참고하겠습니다 🙏