كيفية تخصيص اللغات باستخدام امتدادات Unicode

إضافة أنظمة التقويم وتنسيقات الترقيم وتفضيلات عرض الوقت إلى معرفات اللغة

مقدمة

معرّف اللغة مثل en-US يخبر JavaScript باللغة والمنطقة التي يجب استخدامها للتنسيق. ومع ذلك، فهو لا يحدد نظام التقويم المراد استخدامه، أو تنسيق الترقيم المراد عرضه، أو ما إذا كان سيتم عرض الوقت بتنسيق 12 ساعة أو 24 ساعة. تختلف تفضيلات التنسيق هذه حسب اختيار المستخدم، وليس فقط حسب الموقع.

تحل امتدادات Unicode هذه المشكلة. فهي تتيح لك إضافة تفضيلات التنسيق مباشرة إلى معرفات اللغة. بدلاً من استخدام خيارات تكوين منفصلة لكل أداة تنسيق، يمكنك ترميز التفضيلات مرة واحدة في سلسلة اللغة نفسها.

يشرح هذا الدليل كيفية عمل امتدادات Unicode، وأنواع الامتدادات المتاحة، ومتى يتم استخدامها في كود التدويل الخاص بك.

ما هي امتدادات Unicode

امتدادات Unicode هي علامات إضافية تضيفها إلى معرفات اللغة لتحديد تفضيلات التنسيق. وهي تتبع تنسيقاً قياسياً محدداً في BCP 47، وهي نفس المواصفة التي تحدد معرفات اللغة.

يبدأ الامتداد بـ -u- متبوعاً بأزواج مفتاح-قيمة. يرمز u إلى Unicode. كل مفتاح يتكون من حرفين، وتختلف القيم حسب نوع المفتاح.

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:00
  • h24 يستخدم الساعات من 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 للترتيب القياسي لـ Unicode
  • phonebk لترتيب دليل الهاتف (الألمانية)
  • pinyin لترتيب 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"]

يوفر الترتيب الصيني أنظمة ترتيب متعددة. يقوم ترتيب Pinyin بالفرز حسب النطق، بينما يقوم ترتيب الضربات بالفرز حسب عدد ضربات الفرشاة المستخدمة لكتابة كل حرف.

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 تُرجع قيمة منطقية وليس سلسلة نصية. تشير القيمة 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));
// Output uses Islamic calendar, Arabic-Indic numerals, and 12-hour time

يمكن أن يظهر كل مفتاح امتداد مرة واحدة فقط في سلسلة اللغة المحلية. إذا حددت نفس المفتاح عدة مرات، فإن القيمة الأخيرة هي التي تسود.

const locale = new Intl.Locale("en-US-u-hc-h23-hc-h12");
console.log(locale.hourCycle); // "h12"

عند إنشاء اللغات المحلية برمجيًا، تأكد من ظهور كل مفتاح امتداد مرة واحدة لتجنب الغموض.

حالات الاستخدام العملية

تحل امتدادات Unicode مشاكل حقيقية في التطبيقات المعولمة. فهم حالات الاستخدام الشائعة يساعدك على تطبيق الامتدادات بفعالية.

تخزين تفضيلات المستخدم

قم بتخزين تفضيلات التنسيق الخاصة بالمستخدم في سلسلة لغة محلية واحدة بدلاً من حقول تكوين متعددة:

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: "๑๒๓,๔๕๖"

دعم المتصفحات

تعمل امتدادات Unicode في جميع المتصفحات الحديثة. يدعم 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);
// If browser supports Chinese calendar: "chinese"
// If browser does not support it: undefined

يدعم Node.js امتدادات Unicode ابتداءً من الإصدار 12، مع دعم كامل لجميع الخصائص في الإصدار 18 وما بعده.

الملخص

تتيح لك امتدادات Unicode إضافة تفضيلات التنسيق إلى معرّفات اللغة المحلية. بدلاً من تكوين كل أداة تنسيق بشكل منفصل، يمكنك ترميز التفضيلات مرة واحدة في سلسلة اللغة المحلية.

المفاهيم الأساسية:

  • تبدأ الامتدادات بـ -u- متبوعة بأزواج مفتاح-قيمة
  • يحدد المفتاح ca نظام التقويم
  • يحدد المفتاح nu نظام الترقيم
  • يحدد المفتاح hc تنسيق دورة الساعة
  • يحدد المفتاح co قواعد الترتيب
  • يحدد المفتاح kf ترتيب الأحرف الكبيرة أولاً
  • يُفعّل المفتاح kn الترتيب الرقمي
  • يمكنك استخدام سلاسل الامتدادات أو كائنات الخيارات
  • تعمل الامتدادات كإعدادات افتراضية يمكن لخيارات أداة التنسيق تجاوزها
  • يعرض الكائن Intl.Locale الامتدادات كخصائص

استخدم امتدادات Unicode لتخزين تفضيلات المستخدم، واحترام التقويمات الثقافية، وعرض الأرقام التقليدية، وتنفيذ الترتيب الخاص باللغة المحلية. توفر طريقة قياسية لتخصيص سلوك التنسيق في كود التدويل بلغة JavaScript.