پشتیبانی بین‌المللی‌سازی در 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 دقیقه مطالعه · آخرین به‌روزرسانی ۸ دی ۱۴۰۴

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 تعادل خوبی بین اندازهٔ باینری و قابلیت‌ها ایجاد می‌کند.


نوشته و پژوهش‌شده توسط دکتر شاهین صیامی

مقالات مرتبط

آشنایی کامل با ماژول Cluster در Node.js و نحوه افزایش مقیاس‌پذیری سرور

ماژول Cluster در Node.js به توسعه‌دهندگان اجازه می‌دهد چندین پردازش همزمان ایجاد کنند که یک پورت سرور را به اشتراک می‌گذارند. این کار باعث استفاده بهتر از هسته‌های CPU و افزایش توان پردازش برنامه می‌شود. در این مقاله نحوه کار Cluster، مدیریت Workerها، تنظیمات مهم و مثال عملی را بررسی می‌کنیم.

ادامه

راهنمای جامع ماژول VM در Node.js (ماژول node:vm)

ماژول node:vm امکان کامپایل و اجرای کد جاوااسکریپت در کانتکست‌های ایزولهٔ V8 را فراهم می‌کند. این کانتکست‌ها مانند یک «سندباکس سبک» داخل برنامهٔ Node.js عمل می‌کنند و هرکدام globalThis مخصوص خود را دارند. این ماژول برای اجرای پویا، موتورهای قالب (Template Engines)، سیستم‌های افزونه (Plugin Systems)، REPLها و تست ایزولهٔ منطق بسیار مناسب است. اما نکتهٔ بسیار مهم: vm یک ابزار امنیتی نیست و نباید برای اجرای کدهای غیرقابل‌اعتماد استفاده شود.

ادامه

راهنمای جامع ماژول V8 در Node.js (ماژول node:v8)

راهنمای جامع ماژول V8 در Node.js (ماژول node:v8)

ادامه

راهنمای جامع Worker Threads در Node.js (ماژول node:worker_threads)

ماژول node:worker_threads امکان اجرای واقعی چندریسمانی (Multithreading) را در Node.js فراهم می‌کند. برخلاف مدل تک‌ریسمانی سنتی Node.js، Worker Threads اجازه می‌دهند کارهای سنگین CPU در ریسه‌های جداگانه اجرا شوند بدون اینکه حلقهٔ رویداد (Event Loop) مسدود شود. این ماژول از حافظهٔ اشتراکی، انتقال بدون کپی (Zero‑Copy)، کانال‌های پیام، Worker Pool، محدودیت منابع و ابزارهای همگام‌سازی پیشرفته پشتیبانی می‌کند. Worker Threads برای پردازش‌های محاسباتی سنگین ایده‌آل هستند، در حالی که I/O همچنان باید توسط ریسهٔ اصلی مدیریت شود.

ادامه

راهنمای جامع ماژول util در Node.js

ماژول node:util مجموعه‌ای از توابع کمکی قدرتمند برای استفاده در هستهٔ Node.js و همچنین توسعهٔ برنامه‌ها ارائه می‌دهد. این ماژول ابزارهایی برای دیباگ، بازرسی اشیا، تبدیل Callback ↔ Promise، قالب‌بندی رشته‌ها، بررسی انواع، مدیریت خطاها، رمزگذاری متن، پردازش MIME، پارس آرگومان‌های CLI، سیگنال‌های Abort، و ابزارهای متفرقه فراهم می‌کند. این ماژول یکی از جعبه‌ابزارهای اصلی و ضروری برای توسعه‌دهندگان Node.js است.

ادامه

راهنمای جامع ماژول URL در Node.js

ماژول node:url ابزارهایی برای تحلیل، ساخت، و دست‌کاری URLها در Node.js فراهم می‌کند. Node.js دو API برای کار با URL دارد: WHATWG URL API — استاندارد مدرن و سازگار با مرورگرها (توصیه‌شده). Legacy API — API قدیمی Node.js (غیرتوصیه‌شده). WHATWG URL API یک رابط تمیز، سازگار و قدرتمند برای کار با اجزای URL، پارامترهای query، الگوهای URL و حتی Blob URLها ارائه می‌دهد.

ادامه