پشتیبانی بین‌المللی‌سازی در Node.js با ICU

Node.js امکانات متعددی برای نوشتن برنامه‌های بین‌المللی دارد. این امکانات شامل توابع حساس به locale در استاندارد ECMAScript، شیء Intl، متدهای locale-aware مانند localeCompare و toLocaleString، پشتیبانی از دامنه‌های بین‌المللی در URL، و ابزارهایی مانند TextDecoder و RegExp Unicode Property Escapes است. این قابلیت‌ها توسط موتور V8 و کتابخانه ICU (International Components for Unicode) پیاده‌سازی می‌شوند. بسته به نحوهٔ ساخت Node.js، می‌توان مجموعهٔ داده‌های ICU را به‌صورت کامل یا محدود در باینری قرار داد.

ICU / Intl / ECMA-402String.prototype.normalize / localeCompare / toLocaleStringsmall-icu / system-icu / full-icuNODE_ICU_DATA / --icu-data-dirTextDecoder / RegExp Unicode Property Escapes

~2 min read • Updated Dec 29, 2025

1. امکانات بین‌المللی در Node.js


  • توابع Unicode-aware مانند String.prototype.normalize()، toLowerCase() و toUpperCase().
  • شیء Intl و متدهای حساس به locale مانند localeCompare() و Date.prototype.toLocaleString().
  • پشتیبانی از دامنه‌های بین‌المللی (IDN) در WHATWG URL parser.
  • توابعی مانند buffer.transcode() و util.TextDecoder.
  • پشتیبانی از RegExp Unicode Property Escapes.

2. گزینه‌های ساخت Node.js


چهار گزینهٔ اصلی برای نحوهٔ استفاده از ICU هنگام کامپایل وجود دارد:


  • none: بدون ICU، اکثر قابلیت‌های بین‌المللی غیرفعال می‌شوند.
  • system-icu: استفاده از ICU نصب‌شده در سیستم عامل. پشتیبانی کامل یا جزئی بسته به داده‌های موجود.
  • small-icu: شامل داده‌های محدود (معمولاً فقط زبان انگلیسی) در باینری.
  • full-icu: شامل مجموعهٔ کامل داده‌های ICU. پیش‌فرض در باینری‌های رسمی Node.js.

3. مقایسهٔ ویژگی‌ها


Featurenonesystem-icusmall-icufull-icu
normalize()غیرفعالکاملکاملکامل
Intlغیرفعالجزئی/کاملجزئی (فقط انگلیسی)کامل
localeCompare()غیرفعالکاملکاملکامل
Date.toLocaleString()غیرفعالجزئی/کاملجزئی (فقط انگلیسی)کامل
TextDecoderجزئیجزئی/کاملجزئیکامل
RegExp Unicodeغیرفعالکاملکاملکامل

4. افزودن داده‌های ICU در زمان اجرا


در حالت small-icu می‌توان داده‌های اضافی ICU را در زمان اجرا بارگذاری کرد:


  • با استفاده از گزینهٔ --icu-data-dir در CLI.
  • با تنظیم متغیر محیطی NODE_ICU_DATA.
  • با گزینهٔ --with-icu-default-data-dir هنگام کامپایل.

ماژول full-icu در npm می‌تواند نصب داده‌های ICU کامل را ساده کند.


5. تشخیص پشتیبانی ICU


  • typeof Intl === 'object': بررسی وجود Intl.
  • typeof process.versions.icu === 'string': بررسی فعال بودن ICU.
  • برای بررسی پشتیبانی از زبان‌های غیرانگلیسی، می‌توان از Intl.DateTimeFormat استفاده کرد.

6. مثال ساده


const january = new Date(9e8);
const spanish = new Intl.DateTimeFormat('es', { month: 'long' });
console.log(spanish.format(january)); // "enero" در حالت full-icu

نتیجه‌گیری


پشتیبانی بین‌المللی‌سازی در Node.js با استفاده از ICU امکان توسعهٔ برنامه‌هایی چندزبانه و حساس به locale را فراهم می‌کند. بسته به نیاز پروژه می‌توان بین گزینه‌های none، system-icu، small-icu و full-icu انتخاب کرد. استفاده از full-icu بیشترین امکانات را فراهم می‌کند، در حالی که small-icu تعادل خوبی بین اندازهٔ باینری و قابلیت‌ها ایجاد می‌کند.


Written & researched by Dr. Shahin Siami