Flutter ARB 파일용 ICU 복수형 생성기

언어를 고르면 각 언어에 필요한 복수형 카테고리를 예시 숫자와 함께 보여 주고, ARB 파일에 바로 붙여넣을 수 있는 ICU 메시지를 생성합니다. 무료이고 가입이 필요 없으며, 모든 것이 브라우저 안에서 처리됩니다.

복수형 메시지 생성하기

언어

그다음, 모든 번역이 플레이스홀더를 유지하는지 확인하기

LocalePilot은 모든 ARB 파일을 열어 각 번역의 ICU 플레이스홀더를 원문과 비교하고, 누락된 키를 표시하고, 백업과 함께 내보내는 데스크톱 앱입니다. macOS 버전을 마무리하고 있습니다. 이메일을 남기시면 출시 소식을 알려 드립니다.

언어마다 복수형이 달라지는 이유

zero, one, two, few, many, other 카테고리는 언어별 CLDR 규칙을 따릅니다. 영어에서 one은 1만 뜻하고, 프랑스어에서는 0과 1을 포함합니다. 러시아어와 폴란드어에는 few와 many가 더해지고, 아랍어는 여섯 가지를 모두 쓰며, 한국어와 일본어는 other 하나뿐입니다. 따라서 영어용으로 쓴 두 분기짜리 메시지는 번역하는 순간 불완전해질 수 있습니다.

이 도구는 이 규칙을 브라우저(Intl.PluralRules)에서 읽습니다. 표시되는 카테고리와 예시 숫자는 해당 언어 자체의 것이며, 관리할 표가 따로 없습니다.

gen-l10n의 =1 함정

=1 분기는 flutter gen-l10n이 생성하는 코드에서 one 카테고리가 됩니다. 프랑스어에서는 이 카테고리가 0에도 적용되므로, count = 0일 때 "1 article restant"(1개 남음)이 표시됩니다. 숫자를 텍스트에 넣은 one 카테고리를 쓰거나 =0 분기를 추가하세요. 도구에서는 체크박스로 추가할 수 있습니다. 자세한 내용은 ICU 복수형과 플레이스홀더 가이드에 있습니다.

결과 사용 방법

  1. 언어별 "key": "{count, plural, …}" 줄을 해당 app_xx.arb 파일에 복사합니다.
  2. @key 메타데이터는 템플릿 파일에 한 번만 추가합니다.
  3. flutter gen-l10n을 실행합니다. other 분기가 없거나 중괄호가 닫히지 않았으면 파일 이름과 함께 생성이 멈춥니다.

그다음 플레이스홀더를 빠뜨리거나 이름을 바꾼 번역이 없는지는 ARB 누락 키 검사기로 확인하세요.

도구의 한계

이 도구는 구조를 생성할 뿐 번역은 하지 않습니다. 각 형태의 텍스트는 직접 씁니다. select 메시지와 중첩된 복수형은 다루지 않으며, l10n.yaml에서 use-escaping을 켰을 때 필요한 아포스트로피 이중화도 하지 않습니다.

자주 묻는 질문

한국어에는 어떤 복수형 카테고리가 필요한가요?

other 하나뿐입니다. 한국어의 CLDR 규칙에는 단수·복수 구분이 없어 other 분기 하나로 충분합니다. 원본 언어(영어 등)의 one 분기를 한국어에 복사할 필요는 없습니다.

other 분기는 왜 필수인가요?

flutter gen-l10n은 other 분기가 없는 복수형을 거부하고, 파일 이름을 알려 주며 생성을 중단합니다. 이 도구는 항상 other를 추가합니다.

=1과 one은 무엇이 다른가요?

생성된 코드에서 =1은 one 카테고리가 되며, 프랑스어에서는 이 카테고리가 0도 포함합니다. one 분기에 숫자를 넣거나 =0을 추가하세요.

텍스트가 서버로 전송되나요?

아닙니다. 메시지는 브라우저의 복수형 규칙을 바탕으로 페이지 안에서 조립되며, 아무것도 전송되지 않습니다.

목록에 없는 언어에도 쓸 수 있나요?

네. 자유 입력란에 언어 코드(예: cs나 sv)를 입력하세요. 브라우저가 인식하는 코드라면 무엇이든 받습니다.

LocalePilot과 무엇이 다른가요?

이 도구는 복수형 메시지 하나를 작성합니다. LocalePilot은 macOS 버전을 마무리 중인 데스크톱 앱으로, 모든 ARB 파일을 열고 내보내기 전에 각 번역의 ICU 플레이스홀더를 검사합니다.

출시 알림 받기

LocalePilot은 마무리 단계입니다. 이메일을 남기시면 출시 소식을 알려 드립니다.

  • macOS 12 이상 · Ollama 또는 LM Studio 선택 사항
  • 앱 인터페이스 언어: 영어, 프랑스어, 스페인어, 이탈리아어, 포르투갈어.