자동 복수형 처리
@lingo.dev/compiler는 텍스트에서 복수형을 자동으로 감지하고 언어별 올바른 복수형 처리를 위해 ICU MessageFormat으로 변환합니다.
기능
컴파일러는 AI를 사용하여 텍스트에 복수형(예: "1 item" 대 "5 items")이 포함되어 있는지 감지하고 ICU MessageFormat 구문으로 변환합니다.
변환 전 (작성한 코드):
<p>You have {count} items</p>
변환 후 (컴파일됨):
<p>{count, plural, one {You have 1 item} other {You have # items}}</p>
언어마다 복수형 규칙이 다릅니다. 아랍어는 6가지 형태, 러시아어는 4가지 형태, 영어는 2가지 형태를 가집니다. ICU MessageFormat은 이 모든 것을 올바르게 처리합니다.
작동 방식
- 컴파일러가 숫자 값이 포함된 보간을 감지합니다
- 복수형 감지를 위해 텍스트를 LLM에 전송합니다
- LLM이 복수형이 감지되면 ICU MessageFormat 패턴을 반환합니다
- 컴파일러가 복수형 인식 번역을 주입합니다
이 과정은 자동으로 진행되며 코드 변경이 필요하지 않습니다.
구성
{
pluralization: {
enabled: true, // Default: true
model: "groq:llama-3.1-8b-instant", // Fast model for plural detection
}
}
모델: 비용을 낮게 유지하기 위해 복수형 감지에 별도의 (빠른) 모델을 사용합니다. 기본값은 Groq의 가장 빠른 모델입니다.
예시
단순 복수형
<p>You have {count} items in your cart</p>
변환 결과:
{count, plural,
one {You have 1 item in your cart}
other {You have # items in your cart}
}
0 형태
<p>You have {unreadCount} unread messages</p>
변환 결과:
{unreadCount, plural,
=0 {You have no unread messages}
one {You have 1 unread message}
other {You have # unread messages}
}
복잡한 복수형
<p>{days} days and {hours} hours remaining</p>
다음과 같이 변환됩니다:
{days, plural,
one {1 day}
other {# days}
} and {hours, plural,
one {1 hour}
other {# hours}
} remaining
언어별 규칙
ICU MessageFormat은 복잡한 복수형 규칙을 자동으로 처리합니다:
영어 (2가지 형태):
- one: 1 item
- other: 0 items, 2 items, 100 items
러시아어 (4가지 형태):
- one: 1, 21, 31, 41... (оди́н элеме́нт)
- few: 2-4, 22-24... (два элеме́нта)
- many: 0, 5-20, 25-30... (пять элеме́нтов)
- other: 1.5, 2.5... (1.5 элеме́нта)
아랍어 (6가지 형태):
- zero: 0
- one: 1
- two: 2
- few: 3-10
- many: 11-99
- other: 100+
컴파일러는 각 대상 로케일에 맞는 올바른 형태를 생성합니다.
복수형 비활성화
앱에서 복수형을 사용하지 않거나 수동으로 처리하려는 경우:
{
pluralization: {
enabled: false,
}
}
이렇게 하면 복수형 감지를 완전히 건너뛰어 LLM 호출을 줄입니다.
수동 복수형
코드에서 직접 ICU MessageFormat을 작성할 수 있습니다:
<p>
{formatMessage(
{ id: "items", defaultMessage: "{count, plural, one {# item} other {# items}}" },
{ count }
)}
</p>
컴파일러는 복수형을 감지하지 않고 정확한 형식을 사용합니다.
성능
복수형 감지는 약간의 오버헤드를 추가합니다:
- 숫자 보간이 있는 고유 텍스트당 추가 LLM 호출 1회
- 빠른 모델 사용 (기본값: Groq llama-3.1-8b-instant)
- 결과가 캐시됨—후속 빌드에서 감지 결과 재사용
비용: 무시할 수 있는 수준입니다. 빠른 모델은 요청당 1센트의 일부만 소요됩니다.
자주 묻는 질문
모든 언어에서 작동하나요? 예. ICU MessageFormat은 적절한 복수형 규칙을 가진 200개 이상의 언어를 지원합니다.
AI가 잘못 처리하면 어떻게 하나요?
data-lingo-override를 사용하여 올바른 복수형이 포함된 정확한 번역을 지정하세요:
<p data-lingo-override={{
es: "{count, plural, one {1 artículo} other {# artículos}}"
}}>
{count} items
</p>
복수형 감지 모델을 사용자 정의할 수 있나요?
예. pluralization.model를 지원되는 LLM으로 설정하세요. 기본값은 속도와 비용에 최적화되어 있습니다.
번들 크기가 증가하나요? 약간 증가합니다. ICU MessageFormat 패턴은 단순 문자열보다 조금 더 큽니다. 영향은 미미합니다.
중첩된 복수형은 어떻게 되나요? 지원됩니다. 컴파일러는 동일한 문자열에서 여러 복수형 변수를 처리합니다.
복수형을 표시해야 하나요?
아니요. 컴파일러는 pluralization.enabled: true일 때 자동으로 감지합니다.
디버깅
감지된 복수형을 확인하려면 .lingo/metadata.json를 확인하세요:
{
"translations": {
"abc123": {
"source": "You have {count} items",
"pattern": "{count, plural, one {You have 1 item} other {You have # items}}",
"locales": {
"es": "{count, plural, one {Tienes 1 artículo} other {Tienes # artículos}}"
}
}
}
}
pattern 필드는 컴파일러가 감지한 ICU MessageFormat을 표시합니다.
다음 단계
- 수동 재정의 — 복수형을 수동으로 재정의
- 구성 참조 — 복수형 옵션
- ICU MessageFormat 가이드 — ICU 구문 학습