복수형과 Stringsdict
여러 언어의 복수형 규칙을 처리합니다.
복수형과 Stringsdict은(는) CoddyKit의 무료 Swift Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Swift Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
복수형 문제
영어에는 두 가지 형태만 있습니다. 항목 1개와 항목 2개입니다. 그래서 개발자는 종종 "\(n) item" + (n == 1 ? "" : "s")처럼 작성합니다. 하지만 이 방식은 심각한 문제를 일으킵니다. 아랍어에는 복수형 범주가 여섯 개이고, 러시아어에는 세 개, 일본어에는 하나가 있습니다. 복수형 로직을 하드코딩하면 언제든 현지화 버그가 발생할 수 있습니다.
// FRAGILE — only works for English
let n = 5
let bad = "\(n) item" + (n == 1 ? "" : "s")
print(bad)복수형 범주
유니코드는 복수형 범주를 정의합니다. 0개, 1개, 2개, 소수형, 다수형, 기타입니다. 각 언어는 이 중 일부를 사용합니다. 시스템은 로캘 규칙에 따라 숫자에 맞는 범주를 선택하므로 규칙을 직접 작성할 필요가 없습니다.
// English uses: one, other
// Russian uses: one, few, many, other
// Japanese uses: other (only)
// You provide a variant string per category needed.문자열 카탈로그의 복수형 변형
문자열 카탈로그에서는 문자열에 복수형 변형이 있음을 표시할 수 있습니다. 그러면 엑스코드에서 각 범주에 해당하는 텍스트를 입력할 수 있습니다. 런타임에는 보간된 개수와 사용자의 로캘에 따라 올바른 변형이 자동으로 선택됩니다.
// Catalog entry, key "message_count":
// one: "You have %lld message"
// other: "You have %lld messages"
let count = 1
let text = String(localized: "You have \(count) messages")
print(text)기존 .stringsdict
문자열 카탈로그가 사용되기 전에는 복수형이 .stringsdict 파일에 저장되었습니다. 이 파일은 key를 형식 문자열 및 범주별 변형과 연결하는 속성 목록입니다. 오래된 프로젝트에서 여전히 볼 수 있으며 완전히 지원됩니다.
// Localizable.stringsdict (plist) structure:
// key: "items_count"
// NSStringLocalizedFormatKey: "%#@items@"
// items: NSStringPluralRuleType
// one: "%lld item"
// other: "%lld items"stringsdict 항목의 구조
각 항목에는 형식 key가 있으며, 이 key는 %#@name@으로 감싼 하나 이상의 이름 있는 변수를 참조합니다. 각 변수는 규칙 유형(NSStringPluralRuleType), 값 형식 지정자(%lld), 그리고 각 복수형 범주에 해당하는 문자열을 선언합니다.
// The %#@items@ token expands to the chosen
// plural variant. %lld is the integer placeholder
// substituted inside each variant string.
let n = 3
print(String(localized: "\(n) items selected"))복수형 문자열 조회
코드에서 호출 지점은 개수만 보간하면 되므로 어떤 지역화된 문자열과도 동일해 보입니다. 복수형 선택은 프레임워크 내부에서 이루어지므로 모든 언어에서 동일한 Swift 코드 한 줄을 사용할 수 있습니다.
func messagesLabel(_ count: Int) -> String {
return String(localized: "You have \(count) messages")
}
print(messagesLabel(0))
print(messagesLabel(1))
print(messagesLabel(7))‘하나’는 단순히 1이 아닙니다
흔히 하는 실수는 하나 범주가 정확히 숫자 1을 의미한다고 생각하는 것입니다. 일부 언어에서는 21, 31처럼 1로 끝나는 모든 수를 포함하며, 영은 별도의 범주일 수도 있고 아닐 수도 있습니다. 각 범주에 해당하는 텍스트를 항상 제공하고 규칙에 따라 선택되도록 하십시오.
// Russian: 1, 21, 31 -> 'one'
// 2, 3, 4 -> 'few'
// 5..20, 0 -> 'many'
// Never assume one == 1.복수형과 다른 값 결합하기
형식에는 여러 변수가 포함될 수 있습니다. 예를 들어 개수와 이름을 함께 포함할 수 있습니다. 각 변수는 독립적으로 복수형이 될 수 있습니다. 문자열 카탈로그에서는 어떤 보간 값이 변하는지 표시하고, 나머지는 모든 변형에서 일정하게 유지합니다.
let files = 2
let folder = "Photos"
let text = String(
localized: "\(files) files in \(folder)")
// 'files' drives the plural; 'folder' is substituted as-is
print(text)너비 및 기기 변형
동일한 카탈로그 메커니즘으로 기기와 너비 변형도 지원할 수 있습니다. 따라서 watch에는 짧은 레이블을, iPad에는 더 긴 레이블을 표시하거나 공간이 부족할 때 축약할 수 있습니다. 이러한 변형은 복수형 변형과 함께 사용할 수 있습니다.
// Catalog can vary by:
// plural: one / other
// device: iPhone / iPad / watch
// width: short / medium / long
let label = String(localized: "Notifications")
print(label)복수형화 테스트
변형을 확인하려면 Xcode의 구성표 지역화 재정의를 사용해 각 대상 언어로 앱을 실행하거나, 의사 언어 및 로캘별 미리 보기를 사용하십시오. 경계에 해당하는 수인 0, 1, 2, 5, 11, 21, 100을 표본으로 확인하십시오.
let samples = [0, 1, 2, 5, 11, 21, 100]
for n in samples {
print(String(localized: "\(n) items"))
}모범 사례
복수형을 올바르게 처리하려면 다음을 따르십시오.
s접미사를 연결하거나 하드코딩하지 마십시오.- 대상 언어에 필요한 모든 범주를 제공하십시오.
- 미리 계산된 문자열이 아니라 보간된 정수에서 복수형을 결정하십시오.
- 새 코드에는 문자열 카탈로그를 우선 사용하고, 기존 대상에 대해서만
.stringsdict를 유지하십시오.
func cartSummary(_ items: Int) -> String {
String(localized: "Your cart has \(items) items",
comment: "Cart count; pluralized")
}
print(cartSummary(1))빠른 확인
복수형 선택을 어떻게 처리해야 하는지 떠올려 보십시오.
요약
로캘에 맞는 복수형화를 배웠습니다.
- 유니코드 복수형 범주는 영, 하나, 둘, 소수, 다수, 기타이며, 각 언어는 이 중 일부를 사용합니다.
- 문자열 카탈로그에서는 키마다 복수형 변형을 추가할 수 있으며, 기존
.stringsdict도 plist를 통해 같은 기능을 제공합니다. - 호출 지점은 간단하게 유지됩니다. 개수를 보간하면 프레임워크가 변형을 선택합니다.
- 복수형 로직을 하드코딩하지 마십시오. 하나 범주는 단순히 숫자 1을 의미하지 않습니다.
자주 묻는 질문
“복수형과 Stringsdict” 강의는 무료인가요?
네 — “복수형과 Stringsdict” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Swift Academy 강의 전체를 잠금 해제할 수 있습니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“복수형과 Stringsdict”에서 뭘 배우나요?
여러 언어의 복수형 규칙을 처리합니다. 브라우저에서 직접 실행하는 실습 코드로 Swift Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Swift Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Swift Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“복수형과 Stringsdict” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Swift Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Swift Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 문자열 카탈로그와 지역화된 문자열
- 복수형과 Stringsdict
- 로캘 인식 형식 지정
- 오른쪽에서 왼쪽 및 레이아웃 방향