
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.
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.
// 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.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 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)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.
// 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 translatedValidasi 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.
# 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.htmlICU 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 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}}"
}# 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)Coba i18n Agent Sekarang
Lepaskan file terjemahan Anda di sini
JSON, YAML, PO, XML, CSV, Markdown, Properties
atau klik untuk menjelajahi
Bahasa target