콘텐츠로 이동

레시피: i18n 파일 번역

이 레시피는 웹 및 모바일 앱용 로컬라이제이션 파일을 번역하는 방법을 보여줍니다. yaku는 문자열 값을 추출하고 번역한 뒤 다시 작성합니다. 키와 구조는 LLM이 건드리지 않습니다.

입력 (locales/en.json):

{
"greeting": "Hello!",
"farewell": "Goodbye!",
"login": "Log in",
"signup": "Sign up",
"settings": "Settings"
}
Terminal window
yaku --to ko -f locales/en.json -o locales/ko.json
yaku --to ja -f locales/en.json -o locales/ja.json

출력 (locales/ko.json):

{
"greeting": "안녕하세요!",
"farewell": "안녕히 가세요!",
"login": "로그인",
"signup": "회원가입",
"settings": "설정"
}

yaku는 깊이 중첩된 JSON을 처리합니다:

{
"nav": {
"home": "Home",
"about": "About Us"
},
"errors": {
"404": "Page not found",
"500": "Internal server error"
}
}
Terminal window
yaku --to ko -f en.json -o ko.json

모든 키, 중첩, 숫자, 불리언이 보존됩니다. 문자열 값만 번역됩니다.

입력 (config/locales/en.yaml):

en:
activerecord:
errors:
messages:
blank: "can't be blank"
invalid: "is invalid"
taken: "has already been taken"
views:
pagination:
next: "Next"
previous: "Previous"
first: "First"
last: "Last"
Terminal window
yaku --to ko -f config/locales/en.yaml -o config/locales/ko.yaml

출력 (config/locales/ko.yaml):

en:
activerecord:
errors:
messages:
blank: "빈 값일 수 없습니다"
invalid: "유효하지 않습니다"
taken: "이미 사용 중입니다"
views:
pagination:
next: "다음"
previous: "이전"
first: "처음"
last: "마지막"

하나의 소스 파일을 여러 언어로 번역합니다:

#!/bin/bash
SOURCE="locales/en.json"
LANGUAGES=("ko" "zh-TW" "ja" "fr" "de" "es")
for lang in "${LANGUAGES[@]}"; do
yaku --to "$lang" -f "$SOURCE" -o "locales/${lang}.json"
echo "Generated locales/${lang}.json"
done

UI 용어는 정확하고 일관된 번역이 필요합니다. 용어집을 생성하세요:

.yaku-glossary.yaml
ko:
Sign up: 회원가입
Log in: 로그인
Log out: 로그아웃
Settings: 설정
Dashboard: 대시보드
Profile: 프로필
ja:
Sign up: サインアップ
Log in: ログイン
Log out: ログアウト
Settings: 設定
Dashboard: ダッシュボード
Terminal window
yaku --to ko -f locales/en.json -o locales/ko.json
# .yaku-glossary.yaml에서 용어집 자동 로드
  • 소스 로케일에서 번역하세요. 다른 번역된 파일이 아닌 항상 en.json(또는 소스 언어)에서 번역하세요.
  • UI 일관성을 위해 용어집을 사용하세요. 버튼, 레이블, 내비게이션 항목은 어디서나 같은 용어를 사용해야 합니다.
  • 복수형을 검토하세요. 일부 언어는 복수형을 다르게 처리합니다. 번역 후 i18n 프레임워크에서 복수형이 올바르게 처리되는지 확인하세요.
  • 보간 변수를 확인하세요. i18n 파일에 {{name}}이나 %{count} 같은 변수가 포함되어 있다면 출력에서 보존되었는지 확인하세요.