كيفية تخصيص اللغات المحلية باستخدام امتدادات يونيكود
إضافة أنظمة التقويم وتنسيقات الأرقام وتفضيلات عرض الوقت إلى معرّفات اللغات المحلية
مقدمة
معرّف اللغة المحلية مثل en-US يخبر جافا سكريبت أي لغة ومنطقة يجب استخدامها للتنسيق. ومع ذلك، فهو لا يحدد نظام التقويم المستخدم، أو تنسيق الأرقام المعروض، أو ما إذا كان يجب عرض الوقت بتنسيق 12 ساعة أو 24 ساعة. تختلف تفضيلات التنسيق هذه حسب اختيار المستخدم، وليس فقط حسب الموقع.
تحل امتدادات يونيكود هذه المشكلة. فهي تتيح لك إضافة تفضيلات التنسيق مباشرة إلى معرّفات اللغة المحلية. بدلاً من استخدام خيارات تكوين منفصلة لكل منسق، يمكنك ترميز التفضيلات مرة واحدة في سلسلة اللغة المحلية نفسها.
يشرح هذا الدليل كيفية عمل امتدادات يونيكود، وأنواع الامتدادات المتاحة، ومتى يجب استخدامها في كود التدويل الخاص بك.
ما هي امتدادات يونيكود
امتدادات يونيكود هي علامات إضافية تضيفها إلى معرّفات اللغة المحلية لتحديد تفضيلات التنسيق. تتبع تنسيقًا قياسيًا محددًا في BCP 47، وهو نفس المواصفات التي تحدد معرّفات اللغة المحلية.
يبدأ الامتداد بـ -u- متبوعًا بأزواج المفتاح والقيمة. يرمز الحرف u إلى يونيكود. كل مفتاح يتكون من حرفين، وتختلف القيم حسب نوع المفتاح.
const locale = "en-US-u-ca-gregory-hc-h12";
يحدد معرّف اللغة المحلية هذا اللغة الإنجليزية الأمريكية مع التقويم الغريغوري وعرض الوقت بنظام 12 ساعة.
كيفية إضافة امتدادات إلى سلاسل اللغة المحلية
تظهر الامتدادات في نهاية معرّف اللغة المحلية، بعد مكونات اللغة والنص والمنطقة. تفصل علامة -u- المعرّف الأساسي عن الامتدادات.
يتبع الهيكل الأساسي هذا النمط:
language-region-u-key-value-key-value
يحدد كل زوج مفتاح-قيمة تفضيلًا واحدًا للتنسيق. يمكنك تضمين أزواج مفتاح-قيمة متعددة في سلسلة لغة محلية واحدة.
const japanese = new Intl.Locale("ja-JP-u-ca-japanese-nu-jpan");
console.log(japanese.calendar); // "japanese"
console.log(japanese.numberingSystem); // "jpan"
لا يهم ترتيب أزواج المفتاح والقيمة. كل من "en-u-ca-gregory-nu-latn" و "en-u-nu-latn-ca-gregory" صالحان ومتكافئان.
امتدادات التقويم
يحدد المفتاح ca نظام التقويم المستخدم لتنسيق التاريخ. تستخدم الثقافات المختلفة أنظمة تقويم مختلفة، ويفضل بعض المستخدمين التقويمات غير الغريغورية لأسباب دينية أو ثقافية.
تشمل قيم التقويم الشائعة:
gregoryللتقويم الغريغوريbuddhistللتقويم البوذيislamicللتقويم الإسلاميhebrewللتقويم العبريchineseللتقويم الصينيjapaneseللتقويم الإمبراطوري الياباني
const islamicLocale = new Intl.Locale("ar-SA-u-ca-islamic");
const date = new Date("2025-03-15");
const formatter = new Intl.DateTimeFormat(islamicLocale, {
year: "numeric",
month: "long",
day: "numeric"
});
console.log(formatter.format(date));
// Output: "٢٠ رمضان ١٤٤٦ هـ"
هذا ينسق التاريخ وفقًا للتقويم الإسلامي. يظهر نفس التاريخ الغريغوري كسنة وشهر ويوم مختلف في نظام التقويم الإسلامي.
التقويم البوذي شائع الاستخدام في تايلاند. يحسب السنوات من ميلاد بوذا في 543 قبل الميلاد، مما يجعل السنوات البوذية متقدمة بـ 543 سنة عن السنوات الغريغورية.
const buddhistLocale = new Intl.Locale("th-TH-u-ca-buddhist");
const formatter = new Intl.DateTimeFormat(buddhistLocale, {
year: "numeric",
month: "long",
day: "numeric"
});
console.log(formatter.format(new Date("2025-03-15")));
// Output: "15 มีนาคม 2568"
السنة 2025 في التقويم الغريغوري هي 2568 في التقويم البوذي.
امتدادات نظام الترقيم
يحدد المفتاح nu نظام الترقيم المستخدم لعرض الأرقام. بينما تستخدم معظم اللغات الأرقام العربية الغربية (0-9)، تمتلك العديد من المناطق أنظمة ترقيم تقليدية خاصة بها.
تشمل قيم نظام الترقيم الشائعة:
latnللأرقام العربية الغربية (0-9)arabللأرقام العربية الهنديةhanidecللأرقام العشرية الصينيةdevaللأرقام الديفاناغاريةthaiللأرقام التايلاندية
const arabicLocale = new Intl.Locale("ar-EG-u-nu-arab");
const number = 123456;
const formatter = new Intl.NumberFormat(arabicLocale);
console.log(formatter.format(number));
// Output: "١٢٣٬٤٥٦"
تبدو الأرقام العربية الهندية مختلفة عن الأرقام الغربية لكنها تمثل نفس القيم. يظهر الرقم 123456 كـ ١٢٣٬٤٥٦.
الأرقام التايلاندية تقدم مثالاً آخر:
const thaiLocale = new Intl.Locale("th-TH-u-nu-thai");
const formatter = new Intl.NumberFormat(thaiLocale);
console.log(formatter.format(123456));
// Output: "๑๒๓,๔๕๖"
تدعم العديد من اللغات العربية كلاً من الأرقام العربية الهندية والأرقام اللاتينية. يمكن للمستخدمين اختيار النظام المفضل لديهم بناءً على التفضيل الشخصي أو السياق.
امتدادات دورة الساعة
يحدد المفتاح hc كيفية عرض الوقت. تفضل بعض المناطق نظام الـ 12 ساعة مع مؤشرات صباحًا ومساءً، بينما يفضل البعض الآخر نظام الـ 24 ساعة. تحدد دورة الساعة أيضًا كيفية ظهور منتصف الليل.
تتوفر أربع قيم لدورة الساعة:
h12تستخدم الساعات 1-12 مع منتصف الليل عند الساعة 12:00 صباحًاh11تستخدم الساعات 0-11 مع منتصف الليل عند الساعة 0:00 صباحًاh23تستخدم الساعات 0-23 مع منتصف الليل عند الساعة 0:00h24تستخدم الساعات 1-24 مع منتصف الليل عند الساعة 24:00
تمثل القيم h12 وh11 نظام الـ 12 ساعة، بينما تمثل h23 وh24 نظام الـ 24 ساعة. يكمن الاختلاف في ما إذا كان نطاق الساعات يبدأ من 0 أو 1.
const us12Hour = new Intl.Locale("en-US-u-hc-h12");
const japan11Hour = new Intl.Locale("ja-JP-u-hc-h11");
const europe23Hour = new Intl.Locale("en-GB-u-hc-h23");
const date = new Date("2025-03-15T00:30:00");
console.log(new Intl.DateTimeFormat(us12Hour, { hour: "numeric", minute: "numeric" }).format(date));
// Output: "12:30 AM"
console.log(new Intl.DateTimeFormat(japan11Hour, { hour: "numeric", minute: "numeric" }).format(date));
// Output: "0:30 AM"
console.log(new Intl.DateTimeFormat(europe23Hour, { hour: "numeric", minute: "numeric" }).format(date));
// Output: "00:30"
يظهر تنسيق h12 منتصف الليل كـ 12:30 صباحًا، بينما يظهره تنسيق h11 كـ 0:30 صباحًا. يظهره تنسيق h23 كـ 00:30 بدون صباحًا أو مساءً.
تستخدم معظم التطبيقات إما h12 أو h23. يستخدم تنسيق h11 بشكل أساسي في اليابان، ونادرًا ما يستخدم h24 في الممارسة العملية.
امتدادات الترتيب
يحدد المفتاح co قواعد الترتيب لفرز السلاسل النصية. يحدد الترتيب تسلسل الأحرف عند فرز النص. تمتلك اللغات والمناطق المختلفة اتفاقيات فرز مختلفة.
تشمل قيم الترتيب الشائعة:
standardللترتيب القياسي وفق يونيكودphonebkلترتيب دليل الهاتف (الألمانية)pinyinلترتيب البينيين (الصينية)strokeللترتيب حسب عدد الضربات (الصينية)
يعامل ترتيب دليل الهاتف الألماني علامات التشكيل بشكل مختلف عن الترتيب القياسي. يوسع ترتيب دليل الهاتف الحرف ä إلى ae، وö إلى oe، وü إلى ue لأغراض الفرز.
const names = ["Müller", "Meyer", "Möller", "Mueller"];
const standard = new Intl.Collator("de-DE");
const phonebook = new Intl.Collator("de-DE-u-co-phonebk");
console.log(names.sort((a, b) => standard.compare(a, b)));
// Output: ["Meyer", "Möller", "Mueller", "Müller"]
console.log(names.sort((a, b) => phonebook.compare(a, b)));
// Output: ["Meyer", "Möller", "Mueller", "Müller"]
يوفر الترتيب الصيني أنظمة ترتيب متعددة. يفرز ترتيب البينيين حسب النطق، بينما يفرز ترتيب الضربات حسب عدد ضربات الفرشاة المستخدمة لكتابة كل حرف.
const pinyinCollator = new Intl.Collator("zh-CN-u-co-pinyin");
const strokeCollator = new Intl.Collator("zh-CN-u-co-stroke");
تؤثر امتدادات الترتيب فقط على واجهة برمجة التطبيقات Intl.Collator والطرق مثل Array.prototype.sort() عند استخدامها مع أدوات الترتيب.
امتدادات الحالة الأولى
يحدد المفتاح kf ما إذا كانت الأحرف الكبيرة أو الصغيرة تُرتب أولاً في التصنيف. يختلف هذا التفضيل حسب اللغة وحالة الاستخدام.
تتوفر ثلاث قيم:
upperلترتيب الأحرف الكبيرة قبل الأحرف الصغيرةlowerلترتيب الأحرف الصغيرة قبل الأحرف الكبيرةfalseلاستخدام ترتيب الحالة الافتراضي للغة المحلية
const words = ["apple", "Apple", "APPLE", "banana"];
const upperFirst = new Intl.Collator("en-US-u-kf-upper");
const lowerFirst = new Intl.Collator("en-US-u-kf-lower");
console.log(words.sort((a, b) => upperFirst.compare(a, b)));
// Output: ["APPLE", "Apple", "apple", "banana"]
console.log(words.sort((a, b) => lowerFirst.compare(a, b)));
// Output: ["apple", "Apple", "APPLE", "banana"]
يؤثر ترتيب الحالة الأولى على التصنيف عندما تكون الكلمات متطابقة باستثناء الحالة. وهو يحدد ترتيب الفرز الثانوي بعد مقارنة الأحرف الأساسية.
امتدادات التصنيف الرقمي
يُمكّن المفتاح kn التصنيف الرقمي، الذي يرتب التسلسلات الرقمية حسب قيمتها العددية بدلاً من ترتيبها معجمياً. بدون التصنيف الرقمي، يتم ترتيب "10" قبل "2" لأن "1" يأتي قبل "2" في ترتيب الأحرف.
يقبل التصنيف الرقمي قيمتين:
trueلتمكين التصنيف الرقميfalseلتعطيل التصنيف الرقمي (الافتراضي)
const items = ["item1", "item10", "item2", "item20"];
const standard = new Intl.Collator("en-US");
const numeric = new Intl.Collator("en-US-u-kn-true");
console.log(items.sort((a, b) => standard.compare(a, b)));
// Output: ["item1", "item10", "item2", "item20"]
console.log(items.sort((a, b) => numeric.compare(a, b)));
// Output: ["item1", "item2", "item10", "item20"]
عند تمكين التصنيف الرقمي، يتم ترتيب "item2" بشكل صحيح قبل "item10" لأن 2 أقل من 10. وهذا ينتج ترتيب الفرز المتوقع للسلاسل النصية التي تحتوي على أرقام.
التصنيف الرقمي مفيد لفرز أسماء الملفات، وأرقام الإصدارات، وعناوين الشوارع، وأي نص يحتوي على أرقام مضمنة.
استخدام كائنات الخيارات بدلاً من سلاسل الامتداد
بدلاً من ترميز الامتدادات في سلسلة اللغة المحلية، يمكنك تمريرها كخيارات إلى منشئ Intl.Locale. يفصل هذا النهج اللغة المحلية الأساسية عن تفضيلات التنسيق.
const locale = new Intl.Locale("ja-JP", {
calendar: "japanese",
numberingSystem: "jpan",
hourCycle: "h11"
});
console.log(locale.toString());
// Output: "ja-JP-u-ca-japanese-hc-h11-nu-jpan"
يقوم المنشئ بتحويل الخيارات إلى علامات امتداد تلقائيًا. كلا النهجين ينتجان كائنات لغة محلية متطابقة.
يوفر نهج كائن الخيارات العديد من المزايا. فهو يجعل الكود أكثر قابلية للقراءة باستخدام أسماء خصائص كاملة بدلاً من رموز مكونة من حرفين. كما يسهل إنشاء لغات محلية ديناميكيًا من بيانات التكوين.
const userPreferences = {
language: "ar",
region: "SA",
calendar: "islamic",
numberingSystem: "arab"
};
const locale = new Intl.Locale(`${userPreferences.language}-${userPreferences.region}`, {
calendar: userPreferences.calendar,
numberingSystem: userPreferences.numberingSystem
});
يمكنك أيضًا تمرير الخيارات مباشرة إلى منشئات المنسق:
const formatter = new Intl.DateTimeFormat("th-TH", {
calendar: "buddhist",
numberingSystem: "thai",
year: "numeric",
month: "long",
day: "numeric"
});
هذا يجمع بين خيارات التنسيق الخاصة باللغة المحلية وخيارات العرض في استدعاء منشئ واحد.
متى تستخدم الامتدادات مقابل خيارات المنسق
تخدم الامتدادات وخيارات المنسق أغراضًا مختلفة. فهم متى تستخدم كل نهج يساعدك على كتابة كود أنظف وأكثر قابلية للصيانة.
استخدم الامتدادات في سلسلة اللغة المحلية عندما تكون تفضيلات التنسيق متأصلة في اللغة المحلية للمستخدم. إذا كان المستخدم التايلاندي يريد دائمًا رؤية التقويم البوذي والأرقام التايلاندية، قم بترميز هذه التفضيلات في معرف اللغة المحلية الخاص به.
const userLocale = "th-TH-u-ca-buddhist-nu-thai";
هذا يتيح لك تمرير اللغة المحلية إلى أي منسق دون تكرار التفضيلات:
const dateFormatter = new Intl.DateTimeFormat(userLocale);
const numberFormatter = new Intl.NumberFormat(userLocale);
يستخدم كلا المنسقين تلقائيًا التقويم البوذي والأرقام التايلاندية.
استخدم خيارات المنسق عندما تكون تفضيلات التنسيق خاصة بحالة استخدام واحدة. إذا كنت ترغب في عرض التقويم الإسلامي في جزء واحد من تطبيقك ولكن التقويم الميلادي في مكان آخر، قم بتمرير خيار التقويم إلى المنسق المحدد.
const islamicFormatter = new Intl.DateTimeFormat("ar-SA", {
calendar: "islamic"
});
const gregorianFormatter = new Intl.DateTimeFormat("ar-SA", {
calendar: "gregory"
});
ينتج معرف اللغة المحلية نفسه تنسيقات مختلفة بناءً على خيار التقويم.
تعمل الامتدادات في سلسلة اللغة المحلية كإعدادات افتراضية. تتجاوز خيارات المنسق هذه الإعدادات الافتراضية عند تحديدها. هذا يتيح لك استخدام تفضيلات المستخدم كخط أساس مع تخصيص منسقات محددة.
const locale = "en-US-u-hc-h23";
const formatter12Hour = new Intl.DateTimeFormat(locale, {
hourCycle: "h12"
});
يفضل المستخدم نظام الـ 24 ساعة، لكن هذا المنسق المحدد يتجاوز هذا التفضيل لإظهار نظام الـ 12 ساعة.
قراءة قيم الامتدادات من اللغات المحلية
يعرض كائن Intl.Locale قيم الامتدادات كخصائص. يمكنك قراءة هذه الخصائص لفحص أو التحقق من تفضيلات التنسيق للغة المحلية.
const locale = new Intl.Locale("ar-SA-u-ca-islamic-nu-arab-hc-h12");
console.log(locale.calendar); // "islamic"
console.log(locale.numberingSystem); // "arab"
console.log(locale.hourCycle); // "h12"
تعيد هذه الخصائص قيم الامتدادات إذا كانت موجودة، أو undefined إذا لم يتم تحديد الامتداد.
يمكنك استخدام هذه الخصائص لبناء واجهات التكوين أو التحقق من تفضيلات المستخدم:
function describeLocalePreferences(localeString) {
const locale = new Intl.Locale(localeString);
return {
language: locale.language,
region: locale.region,
calendar: locale.calendar || "default",
numberingSystem: locale.numberingSystem || "default",
hourCycle: locale.hourCycle || "default"
};
}
console.log(describeLocalePreferences("th-TH-u-ca-buddhist-nu-thai"));
// Output: { language: "th", region: "TH", calendar: "buddhist", numberingSystem: "thai", hourCycle: "default" }
تتوافق خصائص الترتيب (collation) والأولوية الحالة (caseFirst) والرقمية (numeric) مع مفاتيح الامتداد co وkf وkn:
const locale = new Intl.Locale("de-DE-u-co-phonebk-kf-upper-kn-true");
console.log(locale.collation); // "phonebk"
console.log(locale.caseFirst); // "upper"
console.log(locale.numeric); // true
لاحظ أن خاصية numeric تعيد قيمة منطقية (boolean)، وليس سلسلة نصية. تشير القيمة true إلى أن الترتيب الرقمي مفعّل.
دمج امتدادات متعددة
يمكنك دمج امتدادات متعددة في معرّف لغة محلية واحد. هذا يتيح لك تحديد جميع تفضيلات التنسيق دفعة واحدة.
const locale = new Intl.Locale("ar-SA-u-ca-islamic-nu-arab-hc-h12-co-standard");
const dateFormatter = new Intl.DateTimeFormat(locale, {
year: "numeric",
month: "long",
day: "numeric",
hour: "numeric",
minute: "numeric"
});
const date = new Date("2025-03-15T14:30:00");
console.log(dateFormatter.format(date));
// الناتج يستخدم التقويم الإسلامي، والأرقام العربية الهندية، ونظام الوقت 12 ساعة
يمكن أن يظهر كل مفتاح امتداد مرة واحدة فقط في سلسلة اللغة المحلية. إذا حددت نفس المفتاح عدة مرات، فإن القيمة الأخيرة هي التي تأخذ الأولوية.
const locale = new Intl.Locale("en-US-u-hc-h23-hc-h12");
console.log(locale.hourCycle); // "h12"
عند إنشاء لغات محلية برمجياً، تأكد من ظهور كل مفتاح امتداد مرة واحدة لتجنب الغموض.
حالات الاستخدام العملية
تحل امتدادات يونيكود مشكلات حقيقية في التطبيقات المدولة. فهم حالات الاستخدام الشائعة يساعدك على تطبيق الامتدادات بفعالية.
تخزين تفضيلات المستخدم
قم بتخزين تفضيلات التنسيق للمستخدم في سلسلة لغة واحدة بدلاً من حقول تكوين متعددة:
function saveUserPreferences(userId, localeString) {
const locale = new Intl.Locale(localeString);
return {
userId,
language: locale.language,
region: locale.region,
localeString: locale.toString(),
preferences: {
calendar: locale.calendar,
numberingSystem: locale.numberingSystem,
hourCycle: locale.hourCycle
}
};
}
const preferences = saveUserPreferences(123, "ar-SA-u-ca-islamic-nu-arab-hc-h12");
يخزن هذا النهج تفضيلات التنسيق كسلسلة واحدة مع توفير وصول منظم إلى المكونات الفردية.
بناء محددات اللغة
اسمح للمستخدمين باختيار تفضيلات التنسيق من خلال واجهة المستخدم عن طريق إنشاء سلاسل لغوية مع امتدادات:
function buildLocaleFromUserInput(language, region, preferences) {
const options = {};
if (preferences.calendar) {
options.calendar = preferences.calendar;
}
if (preferences.numberingSystem) {
options.numberingSystem = preferences.numberingSystem;
}
if (preferences.hourCycle) {
options.hourCycle = preferences.hourCycle;
}
const locale = new Intl.Locale(`${language}-${region}`, options);
return locale.toString();
}
const userLocale = buildLocaleFromUserInput("th", "TH", {
calendar: "buddhist",
numberingSystem: "thai",
hourCycle: "h23"
});
console.log(userLocale);
// Output: "th-TH-u-ca-buddhist-hc-h23-nu-thai"
احترام التقويمات الدينية
يجب على التطبيقات التي تخدم المجتمعات الدينية دعم أنظمة التقويم الخاصة بها:
function createReligiousCalendarFormatter(religion, baseLocale) {
const calendars = {
jewish: "hebrew",
muslim: "islamic",
buddhist: "buddhist"
};
const calendar = calendars[religion];
if (!calendar) {
return new Intl.DateTimeFormat(baseLocale);
}
const locale = new Intl.Locale(baseLocale, { calendar });
return new Intl.DateTimeFormat(locale, {
year: "numeric",
month: "long",
day: "numeric"
});
}
const jewishFormatter = createReligiousCalendarFormatter("jewish", "en-US");
console.log(jewishFormatter.format(new Date("2025-03-15")));
// Output: "15 Adar II 5785"
الفرز بقواعد مخصصة
استخدم امتدادات التصنيف لتنفيذ الفرز الخاص باللغة:
function sortNames(names, locale, collationType) {
const localeWithCollation = new Intl.Locale(locale, {
collation: collationType
});
const collator = new Intl.Collator(localeWithCollation);
return names.sort((a, b) => collator.compare(a, b));
}
const germanNames = ["Müller", "Meyer", "Möller", "Mueller"];
const sorted = sortNames(germanNames, "de-DE", "phonebk");
console.log(sorted);
عرض الأرقام التقليدية
عرض الأرقام في أنظمة الترقيم التقليدية للعرض المناسب ثقافياً:
function formatTraditionalNumber(number, locale, numberingSystem) {
const localeWithNumbering = new Intl.Locale(locale, {
numberingSystem
});
return new Intl.NumberFormat(localeWithNumbering).format(number);
}
console.log(formatTraditionalNumber(123456, "ar-EG", "arab"));
// Output: "١٢٣٬٤٥٦"
console.log(formatTraditionalNumber(123456, "th-TH", "thai"));
// Output: "๑๒๓,๔๕๖"
دعم المتصفحات
تعمل امتدادات يونيكود في جميع المتصفحات الحديثة. تدعم Chrome وFirefox وSafari وEdge صيغة الامتداد في معرفات اللغة والخصائص المقابلة لها في كائنات Intl.Locale.
يعتمد توفر قيم الامتداد المحددة على تنفيذ المتصفح. تدعم جميع المتصفحات القيم الشائعة مثل gregory للتقويم، وlatn لنظام الترقيم، وh12 أو h23 لدورة الساعة. قد لا تعمل القيم الأقل شيوعاً مثل التقويمات الصينية التقليدية أو أنظمة ترقيم اللغات الأقلية في جميع المتصفحات.
اختبر معرفات اللغة في المتصفحات المستهدفة عند استخدام قيم امتداد أقل شيوعاً. استخدم خصائص Intl.Locale للتحقق مما إذا كان المتصفح قد تعرف على قيم الامتداد الخاصة بك:
const locale = new Intl.Locale("zh-CN-u-ca-chinese");
console.log(locale.calendar);
// إذا كان المتصفح يدعم التقويم الصيني: "chinese"
// إذا كان المتصفح لا يدعمه: undefined
يدعم Node.js امتدادات يونيكود بدءاً من الإصدار 12، مع دعم كامل لجميع الخصائص في الإصدار 18 وما بعده.
الملخص
تتيح لك امتدادات يونيكود إضافة تفضيلات التنسيق إلى معرفات اللغة. بدلاً من تكوين كل منسق بشكل منفصل، يمكنك ترميز التفضيلات مرة واحدة في سلسلة اللغة.
المفاهيم الرئيسية:
- تبدأ الامتدادات بـ
-u-متبوعة بأزواج المفتاح والقيمة - يحدد المفتاح
caنظام التقويم - يحدد المفتاح
nuنظام الترقيم - يحدد المفتاح
hcتنسيق دورة الساعة - يحدد المفتاح
coقواعد الترتيب - يحدد المفتاح
kfترتيب الحالة الأولى - يمكّن المفتاح
knالترتيب الرقمي - يمكنك استخدام سلاسل الامتداد أو كائنات الخيارات
- تعمل الامتدادات كإعدادات افتراضية يمكن لخيارات المنسق تجاوزها
- يعرض كائن
Intl.Localeالامتدادات كخصائص
استخدم امتدادات يونيكود لتخزين تفضيلات المستخدم، واحترام التقويمات الثقافية، وعرض الأرقام التقليدية، وتنفيذ الفرز الخاص باللغة. توفر هذه الامتدادات طريقة قياسية لتخصيص سلوك التنسيق في كود تدويل JavaScript.