rubrapack 매뉴얼←↑→

7 여러 언어

목표: 영어나 한국어로 말하는 패키지 하나를 만든다. 약관도 언어마다 따로 두고, 한국어 Windows 에서는 한국어가 미리 골라진다.

7.1 원본#

한국어 약관 LICENSE-ko.txt 가 LICENSE.txt 옆에 있다.

# tutorial 07: hello.toml
format = 1

[package]
name = "Hello"
manufacturer = "Example Software"
version = "$(VERSION)"
arch = "x64"
upgrade-code = "{3F2A6C1D-8B4E-4F7A-9C2D-5E6F7A8B9C0D}"
ui = "installdir"
license = "LICENSE.txt"
downgrade-message = "A newer Hello is already installed."

[define]
VERSION = "1.5.0"

[ui]
languages = ["ko"]
license-ko = "LICENSE-ko.txt"
launch = "file:Hello"

[ui-text.WelcomeText]
text = "This will install [ProductName] [ProductVersion]."
text-ko = "[ProductName] [ProductVersion]을(를) 설치합니다."

[dir.INSTALLDIR]
path = "$(ProgramFiles)/Hello"

[file.Hello]
dir = "INSTALLDIR"
source = "dist/hello.exe"

[shortcut.StartMenu]
dir = "Programs"
name = "Hello"
target = "file:Hello"

7.2 언어 더하기: languages#

페이지는 늘 영어다. [ui] 의 languages = ["ko"] 는 같은 패키지에 한국어를 더하고, 그러면:

영어만 있으면 언어 페이지가 없다. 조용한 설치(/qn)는 페이지를 보이지 않으므로 고를 필요가 없다. 명령줄의 RPLANGUAGE=ko 는 한국어를 미리 고른다 - 그래도 맨 먼저 나오는 언어 페이지에서, 그리고 조용한 설치에서:

msiexec /i hello.msi RPLANGUAGE=ko
한국어 Windows 의 언어 페이지: 한국어가 골라져 있다
한국어 Windows 의 언어 페이지: 한국어가 골라져 있다

7.3 언어마다 약관: license-xx#

license-ko = "LICENSE-ko.txt" 는 한국어를 골랐을 때 보이는 약관이다. 영어(와 자기 약관이 없는 더한 언어)는 [package] license 를 보인다. .txt / .md / .rtf 규칙은 같다.

7.4 언어마다 글: text-xx#

[ui-text.ID] 에서 text 는 모든 언어의 글, text-ko 는 한국어 글이다. 내장 글은 모두 이미 영어와 한국어로 있다. text 를 준 곳에만 text-ko 를 주어 두 언어가 같은 말을 하게 한다.

7.5 영어와 한국어 말고 다른 언어#

rubrapack 의 내장 페이지는 영어와 한국어로 쓰여 있다. 다른 언어 - ja, de, fr 등 - 는 모든 글을 text-xx 로 직접 준다. 빠진 것은 빌드가 알려 준다:

hello.toml:16:1: error[RP1202]: language 'ja' has no built-in texts: give [ui-text.ID] text-ja for all of them (64 missing, the first is Back)

그런 언어에는 [ui] 의 키 셋이 더 도움이 된다: name-ja(언어 페이지에 보일 이름), font-ja(그 페이지들의 글꼴), langid-ja(그 언어를 미리 고르게 하는 Windows 언어 번호 - 수 하나나 목록). 흔한 언어(ja, zh, de, fr, es, it, pt, nl, pl, ru, uk, tr, vi, th)에는 이 셋이 내장되어 있다.

7.6 글꼴#

언어마다 페이지의 글꼴이 따로 있다. 원본에 아무것도 쓰지 않으면 Windows 가 그 언어에 쓰는 글꼴이다: 한국어는 맑은 고딕, 일본어는 Yu Gothic UI, 중국어는 Microsoft YaHei UI, 타이어는 Leelawadee UI, 영어와 그 밖의 모든 언어는 Segoe UI. font-xx 는 그 언어에 다른 글꼴을 고르고, font-en 은 영어에 고른다:

[ui]
languages = ["ko"]
font-ko = "나눔고딕"       # 한국어 페이지와 한국어 라이선스 글
font-en = "Tahoma"         # 영어 페이지

이름은 Windows 가 설정 > 개인 설정 > 글꼴에 늘어놓는 대로, 31자 이내로 쓴다. 라이선스 글에는 글꼴의 영어 이름이 필요하다: rubrapack 은 Windows 에 딸린 한국어·일본어·중국어 글꼴과 나눔 글꼴의 영어 이름을 안다. 그 밖의 글꼴은 영어 이름("Noto Sans KR")으로 쓴다. 그러지 않으면 라이선스 글은 그 언어에 흔한 글꼴로 남고 빌드가 경고한다. 사용자 컴퓨터에 없는 글꼴은 비슷한 것으로 바뀌므로 Windows 에 딸려 오는 글꼴이 안전하다. 패키지가 글꼴을 설치해 주지는 않는다.

7.7 번역되지 않는 것#

7.8 해 보기#

한국어 Windows 에서 hello.msi 를 두 번 누른다: 언어 페이지에 한국어가 골라져 있고, 그 뒤 모든 페이지가 한국어 약관과 함께 한국어다. English 를 고르면 같은 페이지가 LICENSE.txt 와 함께 영어로 나온다. 영어 Windows 에서 msiexec /i hello.msi RPLANGUAGE=ko 도 해 본다.

한국어를 고른 환영 페이지: [ui-text.WelcomeText] 의 text-ko
한국어를 고른 환영 페이지: [ui-text.WelcomeText] 의 text-ko

7.9 안에서 무슨 일이 일어났나#

Windows Installer 패키지에는 "여러 언어"라는 개념이 따로 없다: 페이지의 글은 그 표에 고정되어 있다. 그래서 rubrapack 은 모든 글을 속성 - 이름 붙은 값 - 으로 만들고 페이지에는 그 속성을 보인다:

C:\work\hello> rubrapack inspect hello.msi Property
...
RpT_WelcomeText	This will install Hello 1.5.0.
RpT_WelcomeText_en	This will install Hello 1.5.0.
RpT_WelcomeText_ko	Hello 1.5.0을(를) 설치합니다.
...

첫 페이지 전에 작은 동작들이 고른 언어의 글을 보이는 속성에 복사한다. 각 동작은 조건이 참일 때만 돈다:

C:\work\hello> rubrapack inspect hello.msi InstallUISequence
...
RpL_ko_26	RPLANGUAGE = "ko"	127
...
C:\work\hello> rubrapack inspect hello.msi CustomAction
...
RpL_ko_26	51	RpT_WelcomeText	[RpT_WelcomeText_ko]

형식 51 은 "속성 정하기"다: RpT_WelcomeText 가 RpT_WelcomeText_ko 의 값이 된다. 글은 패키지에 UTF-8(코드 페이지 65001)로 저장된다. 글자 인코딩은 제3부의 글자, 문자열 저장 방식은 제4부의 MSI 데이터베이스가 설명한다.