Skip to main content

CLDR çoğul kuralları: diller arasındaki i18n çoğul kategorilerini doğrulayın

İngilizcede 2, Arapçada 6 ve Rusçada 4 çoğul biçimi vardır. i18n kurulumunuz yalnızca 'one' ve 'other' kategorilerini yönetiyorsa uygulamanız çoğu dilde bozuk demektir. Bu rehber, CLDR çoğul kurallarını ve bunların nasıl doğrulanacağını açıklar.

1

CLDR çoğul kuralları nedir?

Unicode CLDR (Common Locale Data Repository) altı çoğul kategorisi tanımlar: zero, one, two, few, many ve other. Her dil, bu kategorilerin belirli sayı kurallarına sahip bir alt kümesini kullanır. İngilizce one (tam olarak 1) ve other (diğer her şey) kategorilerini kullanır. Ancak çoğu dil daha karmaşıktır; çoğul biçimlerini yanlış kullanmak dil bilgisi açısından bozuk metinlere yol açarak uygulamanızın amatör görünmesine neden olur.

The plural problem
// English has 2 plural forms: one, other
// "1 item" vs "2 items"

// But many languages have more:
// Arabic: 6 forms (zero, one, two, few, many, other)
// Polish: 3 forms (one, few, other)
// Japanese: 1 form (other)
// Czech: 3 forms (one, few, other)

// If you only provide "one" and "other",
// Arabic and Polish users see broken text.
'other' kategorisi her dil için zorunludur. Başka hiçbir kategori eşleşmediğinde geri dönüş olarak kullanılır. Yalnızca 'one' ve 'other' kategorilerini tanımlarsanız İngilizcede sorun yaşamazsınız ancak dünya dillerinin %60'ından fazlasında kurulumunuz bozuk olur.
2

Altı çoğul kategorisi

CLDR tam olarak altı çoğul kategorisi tanımlar. Her dil altı kategorinin tümünü kullanmaz; İngilizce yalnızca iki, Arapça ise altısını da kullanır. i18n dosyalarınız her hedef dilin gerektirdiği kategorileri tanımlamalıdır; aksi takdirde kullanıcılar çökmelerle, ham anahtarlarla veya dil bilgisi açısından yanlış metinlerle karşılaşır.

CLDR plural categories
// CLDR defines 6 plural categories:
// zero  - 0 items (Arabic, Latvian)
// one   - 1 item (most languages)
// two   - 2 items (Arabic, Welsh)
// few   - 2-4 items (Polish, Czech, Russian)
// many  - 5-19 items (Arabic, Polish, Russian)
// other - everything else (required for ALL languages)

// Examples by language:
// English:  one, other                    (2 forms)
// French:   one, many, other              (3 forms)
// Arabic:   zero, one, two, few, many, other  (6 forms)
// Japanese: other                         (1 form)
// Polish:   one, few, many, other         (4 forms)
// Russian:  one, few, many, other         (4 forms)
3

Dile göre çoğul kategorileri

Yaygın hedef dillerin gerektirdiği çoğul kategorilerine yönelik hızlı başvuru tablosu. Çeviri dosyalarınızda çoğul biçimlerini tanımlarken bu tabloyu kullanın.

Common mistakes
// MISTAKE 1: Only providing "one" and "other"
// en.json
{
  "items_one": "{{count}} item",
  "items_other": "{{count}} items"
}
// This breaks for Arabic (missing zero, two, few, many)

// MISTAKE 2: Hardcoded plural logic
// WRONG:
const text = count === 1 ? "1 item" : `${count} items`
// This fails for languages where "1" isn't the only "one" form

// MISTAKE 3: Missing "other" category
// "other" is REQUIRED for every language
// Without it, some numbers show raw keys

// MISTAKE 4: Translating plural RULES instead of text
// The CLDR rules (one, few, many) are universal
// Only the TEXT after each rule should be translated
4

Otomatik çoğul doğrulaması

i18n-validate, çeviri dosyalarınızdaki her çoğul anahtarının hedef dil için gereken tüm CLDR kategorilerini tanımlayıp tanımlamadığını denetler. Rusça dosyanızda yalnızca 'one' ve 'other' biçimleri varsa araç eksik 'few' ve 'many' kategorilerini hata olarak işaretler. Çoğul sorunlarını kullanıcılara ulaşmadan yakalamak için aracı CI'da çalıştırın.

Terminal
# Validate plural forms match CLDR requirements
npx i18n-validate --check-plurals \
  --source locales/en.json \
  --targets 'locales/*.json'

# Output:
# locales/ar.json:
#   items: missing plural forms: zero, two, few, many
#   Expected: zero, one, two, few, many, other
#   Found: one, other
#
# locales/pl.json:
#   items: missing plural forms: few, many
#   Expected: one, few, many, other
#   Found: one, other

# Fix: Add all required forms for each language
# See https://unicode.org/cldr/charts/latest/supplemental/language_plural_rules.html
5

Çoğul biçimleri için ICU MessageFormat

Çoğul çevirilerini tanımlamak için önerilen yöntem ICU MessageFormat'tır. Gömülü çoğul kurallarına sahip tek bir dize kullanır: {count, plural, one {# öğe} other {# öğe}'}. ICU; react-intl, vue-i18n, Angular Transloco, Flutter ve çoğu modern i18n çatısı tarafından desteklenir.

ICU plural messages
// ICU MessageFormat handles plurals correctly
// It uses CLDR rules internally

// en.json
{
  "items": "{count, plural, one {# item} other {# items}}"
}

// ar.json
{
  "items": "{count, plural, zero {لا عناصر} one {عنصر واحد} two {عنصران} few {# عناصر} many {# عنصرًا} other {# عنصر}}"
}

// pl.json
{
  "items": "{count, plural, one {# element} few {# elementy} many {# elementów} other {# elementu}}"
}

// ICU also handles ordinals:
{
  "ranking": "{pos, selectordinal, one {#st} two {#nd} few {#rd} other {#th}}"
}
Terminal
# Validate ICU message syntax
npx i18n-validate --check-icu \
  --source locales/en.json \
  --targets 'locales/*.json'

# Catches:
# - Missing plural categories for the target language
# - Syntax errors in ICU messages
# - Mismatched variable names
# - Missing "other" (always required)
ICU MessageFormat içindeki # simgesi, biçimlendirilmiş count değeriyle değiştirilir. Çoğul biçimlerinizde değişken adını sabit kodlamak yerine # kullanın. Örneğin count değişkenini açıkça tekrarlamak yerine '# öğe / # öğe' yazın.

i18n Agent'ı şimdi deneyin

Çeviri dosyanızı buraya bırakın

JSON, YAML, PO, XML, CSV, Markdown, Properties

veya göz atmak için tıklayın

Hedef diller

Kayıt gerekmezAnında fiyat tahmini

CLDR çoğul kuralları hakkında sık sorulan sorular