Lingo.dev CLI는 다양한 파일 형식을 파싱하고 번역하기 위해 버킷 유형을 사용합니다. 각 버킷 유형은 특정 형식에 맞게 설계된 전용 파서입니다. CLI가 번역할 파일을 지정하려면 i18n.json에서 하나 이상의 버킷을 구성하세요.
버킷 유형#
| 버킷 유형 | 형식 | 출력 모드 | [locale] 필요 |
|---|---|---|---|
json | JSON 파일 | 로캘별 개별 파일 | 예 |
json5 | JSON5 파일 | 로캘별 개별 파일 | 예 |
jsonc | JSONC 파일(주석 포함) | 로캘별 개별 파일 | 예 |
json-dictionary | JSON 사전(플랫 키-값) | 로캘별 개별 파일 | 예 |
yaml | YAML 파일 | 로캘별 개별 파일 | 예 |
yaml-root-key | 로캘 루트 키가 있는 YAML | 원본 파일 수정 | 아니요 |
markdown | Markdown 파일 | 로캘별 개별 파일 | 예 |
mdx | MDX 파일 | 로캘별 개별 파일 | 예 |
markdoc | Markdoc 파일 | 로캘별 개별 파일 | 예 |
html | HTML 파일 | 로캘별 개별 파일 | 예 |
mjml | MJML 이메일 템플릿 | 로캘별 개별 파일 | 예 |
android | Android XML 리소스 | 로캘별 개별 파일 | 예 |
xcode-strings | Xcode .strings 파일 | 로캘별 개별 파일 | 예 |
xcode-stringsdict | Xcode .stringsdict 파일 | 로캘별 개별 파일 | 예 |
xcode-xcstrings | Xcode .xcstrings 카탈로그 | 원본 파일 수정 | 아니요 |
flutter | Flutter ARB 파일 | 로캘별 개별 파일 | 예 |
po | GNU gettext PO 파일 | 로캘별 개별 파일 | 예 |
properties | Java .properties 파일 | 로캘별 개별 파일 | 예 |
csv | CSV 파일 | 원본 파일 수정 | 아니요 |
csv-per-locale | CSV 파일(로캘별 1개) | 로캘별 개별 파일 | 예 |
xml | 범용 XML 파일 | 로캘별 개별 파일 | 예 |
xliff | XLIFF 파일 | 로캘별 개별 파일 | 예 |
srt | SRT 자막 파일 | 로캘별 개별 파일 | 예 |
vtt | VTT 자막 파일 | 로캘별 개별 파일 | 예 |
php | PHP 로컬라이제이션 배열 | 로캘별 개별 파일 | 예 |
typescript | TypeScript 파일 | 로캘별 개별 파일 | 예 |
vue-json | Vue i18n JSON 블록 | 로캘별 개별 파일 | 예 |
txt | 일반 텍스트 파일 | 로캘별 개별 파일 | 예 |
출력 모드#
버킷은 다음 두 가지 출력 모드 중 하나로 동작합니다:
로캘별 개별 파일 - CLI가 각 대상 언어마다 별도의 파일을 생성합니다. include 패턴에는 [locale] 플레이스홀더가 반드시 포함되어야 합니다:
json
{
"buckets": {
"json": {
"include": ["locales/[locale].json"]
}
}
}이렇게 하면 locales/en.json, locales/es.json, locales/fr.json 등이 생성됩니다.
원본 파일 수정 - CLI가 소스 콘텐츠가 들어 있는 동일한 파일에 번역을 다시 기록합니다. 이 경우 [locale] 플레이스홀더는 사용하지 않습니다:
json
{
"buckets": {
"csv": {
"include": ["translations.csv"]
}
}
}CSV 파일은 일반적으로 하나의 파일 안에서 열 단위로 모든 로캘을 저장합니다. Xcode .xcstrings 카탈로그와 루트 키가 있는 YAML도 비슷한 방식으로 동작합니다.
구성 예시#
JSON을 사용하는 웹 앱#
json
{
"buckets": {
"json": {
"include": ["src/locales/[locale].json"],
"lockedKeys": ["brand/name"]
}
}
}Markdown을 사용하는 문서 사이트#
json
{
"buckets": {
"markdown": {
"include": ["docs/[locale]/*.md"],
"exclude": ["docs/[locale]/drafts/*.md"]
}
}
}모바일 앱(iOS + Android)#
json
{
"buckets": {
"xcode-xcstrings": {
"include": ["ios/Localizable.xcstrings"]
},
"android": {
"include": ["android/app/src/main/res/values-[locale]/strings.xml"]
}
}
}여러 형식을 사용하는 모노레포#
json
{
"buckets": {
"json": {
"include": ["apps/web/locales/[locale].json"]
},
"mdx": {
"include": ["packages/docs/content/[locale]/*.mdx"]
},
"flutter": {
"include": ["apps/mobile/lib/l10n/app_[locale].arb"]
}
}
}버킷별 기능#
일부 버킷은 include/exclude 패턴 외에도 추가 기능을 지원합니다:
| 기능 | 지원 버킷 | 설명 |
|---|---|---|
| 키 잠금 | 키-값 형식(JSON, YAML 등) | 번역 없이 소스 값을 그대로 복사 |
| 키 무시 | 키-값 형식 | 대상 파일에서 키를 완전히 제외 |
| 키 보존 | 키-값 형식 | 한 번 초기화한 뒤 이후 업데이트로부터 보호 |
| 번역가 메모 | JSONC, XCStrings | 번역 품질을 높일 수 있도록 주석으로 문맥 제공 |
Include 패턴 규칙#
- 패턴은
i18n.json파일 위치를 기준으로 하는 상대 경로입니다 - 로캘 코드용 플레이스홀더로
[locale]를 사용하세요("로캘별 개별 파일" 버킷에 필요) - 별표(
*)는 모든 파일명과 일치합니다:locales/[locale]/*.json - 재귀 패턴(
**)은 깊이에 관계없이 파일과 일치합니다:src/**/[locale].json,config/locales/**/[locale].yml. 패턴에**가 포함되면node_modules,.git,dist,build,.next,.turbo은 기본적으로 제외됩니다. 필요에 따라 여기에exclude항목을 추가하세요(CLI 0.135.0+ 필요) - 파일 확장자는 파싱에 영향을 주지 않습니다. 어떤 파서를 사용할지는 버킷 유형이 결정합니다
