Skip to main content

Aturan Bentuk Jamak CLDR: Validasi Kategori Bentuk Jamak i18n di Berbagai Bahasa

Bahasa Inggris memiliki 2 bentuk jamak. Arab memiliki 6. Rusia memiliki 4. Jika penyiapan i18n Anda hanya menangani 'one' dan 'other', aplikasi Anda rusak dalam sebagian besar bahasa. Panduan ini menjelaskan aturan bentuk jamak CLDR dan cara memvalidasinya.

1

Apa Itu Aturan Bentuk Jamak CLDR?

Unicode CLDR (Common Locale Data Repository) mendefinisikan enam kategori bentuk jamak: zero, one, two, few, many, dan other. Setiap bahasa menggunakan subset kategori ini dengan aturan angka tertentu. Bahasa Inggris menggunakan one (tepat 1) dan other (semua yang lain). Namun, sebagian besar bahasa lebih kompleks — kesalahan bentuk jamak menghasilkan teks yang salah secara tata bahasa dan membuat aplikasi Anda tampak amatir.

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.
Kategori 'other' wajib untuk setiap bahasa. Kategori ini menjadi fallback ketika tidak ada kategori lain yang cocok. Jika Anda hanya mendefinisikan 'one' dan 'other', Anda aman dalam bahasa Inggris, tetapi gagal dalam lebih dari 60% bahasa di dunia.
2

Enam Kategori Bentuk Jamak

CLDR mendefinisikan tepat enam kategori bentuk jamak. Tidak setiap bahasa menggunakan keenamnya — bahasa Inggris hanya menggunakan dua, sedangkan Arab menggunakan semuanya. File i18n Anda harus mendefinisikan kategori yang diperlukan setiap bahasa target, atau pengguna akan mengalami crash, melihat kunci mentah, atau membaca teks yang salah secara tata bahasa.

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

Kategori Bentuk Jamak Berdasarkan Bahasa

Referensi cepat untuk kategori bentuk jamak yang diperlukan bahasa target umum. Gunakan saat mendefinisikan bentuk jamak dalam file terjemahan Anda.

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

Validasi Bentuk Jamak Otomatis

i18n-validate memeriksa bahwa setiap kunci bentuk jamak dalam file terjemahan Anda mendefinisikan semua kategori CLDR yang diperlukan bahasa target. Jika file bahasa Rusia Anda hanya memiliki bentuk 'one' dan 'other', alat ini menandai kategori 'few' dan 'many' yang tidak tersedia sebagai kesalahan. Jalankan di CI untuk menemukan masalah bentuk jamak sebelum mencapai pengguna.

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

ICU MessageFormat untuk Bentuk Jamak

Cara yang direkomendasikan untuk mendefinisikan terjemahan bentuk jamak adalah ICU MessageFormat. Format ini menggunakan satu string dengan aturan bentuk jamak tersemat: {count, plural, one {# item} other {# items}'}. ICU didukung oleh react-intl, vue-i18n, Angular Transloco, Flutter, dan sebagian besar framework i18n modern.

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)
Simbol # dalam ICU MessageFormat diganti dengan jumlah yang telah diformat. Gunakan # alih-alih melakukan hardcode nama variabel dalam bentuk jamak. Misalnya, tulis '# item / # items' alih-alih mengulang variabel jumlah secara eksplisit.

Coba i18n Agent Sekarang

Lepaskan file terjemahan Anda di sini

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

atau klik untuk menjelajahi

Bahasa target

Tidak perlu mendaftarEstimasi instan

Tanya Jawab Aturan Bentuk Jamak CLDR