Computer Science/i18n

다국어 시스템

dayeon.O_O.dev 2022. 5. 5. 07:50
다국어 시스템
- 기본지식
    - 용어 정리
    - 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(번역된 문자열)

다국어 플러그인/모듈

  • 웹 서비스를 비롯한 응용 소프트웨어에 사용되는 메시지들을 쉽게 다국어에 적용할 수 있도록 도와주는 툴
  • 해당 툴을 이용하면, 개발자는 응용 프로그램으로 부터 번역할 메시지를 뽑아내서 사전을 만들 수 있음
  1. gettext
  2. i18n 모듈

Gettext 모듈 + pofile

  • 메시지 아이디 (msgid)와 번역된 스트링 (msgstr)으로 매칭

PMS-BE(Nuxt.js)에서

nuxt-gettext

 

nuxt-gettext

Translation module utilizing the gettext ecosystem. Latest version: 0.2.2, last published: 2 years ago. Start using nuxt-gettext in your project by running `npm i nuxt-gettext`. There are no other projects in the npm registry using nuxt-gettext.

www.npmjs.com

https://github.com/lajosbencz/nuxt-gettext

 

GitHub - lajosbencz/nuxt-gettext: Translation module utilizing the gettext ecosystem

Translation module utilizing the gettext ecosystem - GitHub - lajosbencz/nuxt-gettext: Translation module utilizing the gettext ecosystem

github.com

 

GitHub - Polyconseil/vue-gettext: Translate your Vue.js applications with gettext.

Translate your Vue.js applications with gettext. Contribute to Polyconseil/vue-gettext development by creating an account on GitHub.

github.com

사용 예시

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)에서

vue-i18n

https://github.com/intlify/vue-i18n-next

 

GitHub - nuxt-community/i18n-module: i18n for Nuxt

i18n for Nuxt. Contribute to nuxt-community/i18n-module development by creating an account on GitHub.

github.com

사용 예시

EX) vue에서 i18n 지원 방식 참고

Nuxt에서 Vue I18n으로 국제화(다국어) 적용하기

 

Nuxt에서 Vue I18n으로 국제화(다국어) 적용하기

개요 다국어 적용 1. package install $ yarn add @nuxtjs/i18n 2. plugins로 전역으로 사용할 수 있게 Setting plugins/i18n.ts // eslint-disable-next-line import/named import VueI18n, { IVueI18n } from 'v..

heewon26.tistory.com


참고

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

 


오류, 수정 사항은 피드백 주시면 감사드리며 참고하겠습니다 🙏