
Peraturan Bentuk Jamak CLDR: Sahkan Kategori Bentuk Jamak i18n Merentas Bahasa
Bahasa Inggeris mempunyai 2 bentuk jamak. Arab mempunyai 6. Rusia mempunyai 4. Jika persediaan i18n anda hanya mengendalikan 'one' dan 'other', aplikasi anda rosak dalam kebanyakan bahasa. Panduan ini menerangkan peraturan bentuk jamak CLDR dan cara mengesahkannya.
Apakah Itu Peraturan Bentuk Jamak CLDR?
Unicode CLDR (Common Locale Data Repository) mentakrifkan enam kategori bentuk jamak: zero, one, two, few, many, dan other. Setiap bahasa menggunakan subset kategori ini dengan peraturan nombor tertentu. Bahasa Inggeris menggunakan one (tepat 1) dan other (semua yang lain). Namun, kebanyakan bahasa lebih kompleks — kesilapan bentuk jamak menghasilkan teks yang salah dari segi tatabahasa dan membuatkan aplikasi anda kelihatan amatur.
// 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 mentakrifkan tepat enam kategori bentuk jamak. Tidak setiap bahasa menggunakan keenam-enamnya — bahasa Inggeris hanya menggunakan dua, manakala Arab menggunakan semuanya. Fail i18n anda mesti mentakrifkan kategori yang diperlukan oleh setiap bahasa sasaran, atau pengguna akan mengalami ranap, melihat kekunci mentah, atau membaca teks yang salah dari segi tatabahasa.
// 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 Mengikut Bahasa
Rujukan pantas untuk kategori bentuk jamak yang diperlukan oleh bahasa sasaran umum. Gunakannya apabila mentakrifkan bentuk jamak dalam fail 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 translatedPengesahan Bentuk Jamak Automatik
i18n-validate menyemak bahawa setiap kekunci bentuk jamak dalam fail terjemahan anda mentakrifkan semua kategori CLDR yang diperlukan oleh bahasa sasaran. Jika fail bahasa Rusia anda hanya mempunyai bentuk 'one' dan 'other', alat ini menandai kategori 'few' dan 'many' yang tiada sebagai ralat. Jalankannya dalam CI untuk mengesan 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 disyorkan untuk mentakrifkan terjemahan bentuk jamak ialah ICU MessageFormat. Format ini menggunakan satu rentetan dengan peraturan bentuk jamak terbenam: {count, plural, one {# item} other {# items}'}. ICU disokong oleh react-intl, vue-i18n, Angular Transloco, Flutter, dan kebanyakan rangka kerja i18n moden.
// 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)Cuba i18n Agent Sekarang
Lepaskan fail terjemahan anda di sini
JSON, YAML, PO, XML, CSV, Markdown, Properties
atau klik untuk semak imbas
Bahasa sasaran