فصل ششم — قسمت شصت و چهارم 🐧
مفهوم localization
——————-
Localization یا بومیسازی یعنی سیستمعامل بداند کاربر در چه زبان، کشور و منطقهای کار میکند و اطلاعات را متناسب با آن نمایش دهد.
مثلاً:
زبان: فارسی
کشور: ایران
تقویم/فرمت تاریخ: متناسب با تنظیمات منطقه
فرمت عدد: متناسب با Locale
کیبورد: فارسی / انگلیسی
—————
🌍 Locale چیست؟
Locale مجموعهای از تنظیمات مربوط به زبان و منطقه کاربر است.
در لینوکس این اطلاعات معمولاً از طریق Environment Variableها مشخص میشوند.
برای دیدن Locale فعلی:
locale
مثلاً ممکن است ببینی:
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_ALL=
——————
🧠 مهمترین متغیرها
LANG
تنظیم پیشفرض Locale سیستم/کاربر است.
echo $LANG
مثلاً:
en_US.UTF-8
یعنی:
en → English
US → United States
UTF-8 → Encoding
—————
LC_ALL
اگر مقدار داشته باشد، میتواند تنظیمات سایر LC_*ها را override کند.
مثلاً:
echo $LC_ALL
معمولاً بهتر است برای تنظیم دائمی بیدلیل از آن استفاده نکنیم.
———————
LC_TIME
فرمت نمایش زمان و تاریخ:
echo $LC_TIME
LC_NUMERIC
فرمت اعداد:
echo $LC_NUMERIC
LC_MONETARY
فرمت پول:
echo $LC_MONETARY
LC_MESSAGES
زبان پیامهای برنامهها:
echo $LC_MESSAGES
—————-
🔤 حالا Encoding چیست؟
اینجا باید یک تفاوت مهم را بفهمی:
Locale ≠ Encoding
Locale میگوید:
Encoding میگوید:
————-
1️⃣ ASCII
قدیمیترین ساختار معروف برای نمایش کاراکترهاست.
مثلاً:
A → 65
B → 66
C → 67
ASCII عمدتاً برای حروف انگلیسی، اعداد و تعدادی علامت طراحی شده.
❌ مشکل:
فارسی، عربی، چینی و بسیاری زبانهای دیگر را پوشش نمیدهد.
2️⃣ ISO-8859
برای گسترش ASCII مجموعههایی از استانداردهای 8 بیتی ایجاد شدند.
مثلاً:
ISO-8859-1
برای بسیاری از کاراکترهای زبانهای اروپای غربی استفاده میشد.
اما هر نسخه مجموعه متفاوتی از کاراکترها را پوشش میدهد.
پس هنوز مشکل چندزبانه بودن کامل وجود داشت.
3️⃣ Unicode
Unicode آمد تا برای تقریباً تمام زبانهای دنیا یک استاندارد واحد برای کاراکترها داشته باشیم.
مثلاً:
A
ش
中
😀
همگی میتوانند در Unicode تعریف شوند.
🧠 خیلی ساده:
4️⃣ UTF
اینجا یک نکته خیلی مهم:
Unicode و UTF یکی نیستند.
Unicode مشخص میکند چه کاراکتری چه کدی دارد.
UTF مشخص میکند این اطلاعات چطور در حافظه/فایل به صورت بایت ذخیره یا منتقل شود.
معروفترین آن:
UTF-8
مثلاً:
LANG=en_US.UTF-8
یعنی Locale انگلیسی آمریکا با Encoding مبتنی بر UTF-8.
——————
🔍 در لینوکس چطور ببینیم؟
مهمترین دستور:
locale
برای دیدن Localeهای موجود:
locale -a
مثلاً:
C
C.utf8
en_US.utf8
و برای دیدن مقدار یک متغیر:
echo $LANG
یا:
echo $LC_ALL
مفهوم localization
——————-
Localization یا بومیسازی یعنی سیستمعامل بداند کاربر در چه زبان، کشور و منطقهای کار میکند و اطلاعات را متناسب با آن نمایش دهد.
مثلاً:
زبان: فارسی
کشور: ایران
تقویم/فرمت تاریخ: متناسب با تنظیمات منطقه
فرمت عدد: متناسب با Locale
کیبورد: فارسی / انگلیسی
—————
🌍 Locale چیست؟
Locale مجموعهای از تنظیمات مربوط به زبان و منطقه کاربر است.
در لینوکس این اطلاعات معمولاً از طریق Environment Variableها مشخص میشوند.
برای دیدن Locale فعلی:
locale
مثلاً ممکن است ببینی:
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_ALL=
——————
🧠 مهمترین متغیرها
LANG
تنظیم پیشفرض Locale سیستم/کاربر است.
echo $LANG
مثلاً:
en_US.UTF-8
یعنی:
en → English
US → United States
UTF-8 → Encoding
—————
LC_ALL
اگر مقدار داشته باشد، میتواند تنظیمات سایر LC_*ها را override کند.
مثلاً:
echo $LC_ALL
معمولاً بهتر است برای تنظیم دائمی بیدلیل از آن استفاده نکنیم.
———————
LC_TIME
فرمت نمایش زمان و تاریخ:
echo $LC_TIME
LC_NUMERIC
فرمت اعداد:
echo $LC_NUMERIC
LC_MONETARY
فرمت پول:
echo $LC_MONETARY
LC_MESSAGES
زبان پیامهای برنامهها:
echo $LC_MESSAGES
—————-
🔤 حالا Encoding چیست؟
اینجا باید یک تفاوت مهم را بفهمی:
Locale ≠ Encoding
Locale میگوید:
«سیستم از چه زبان و منطقهای استفاده کند؟»
Encoding میگوید:
«کاراکترها را چطور به داده قابل ذخیره در کامپیوتر تبدیل کنیم؟»
————-
1️⃣ ASCII
قدیمیترین ساختار معروف برای نمایش کاراکترهاست.
مثلاً:
A → 65
B → 66
C → 67
ASCII عمدتاً برای حروف انگلیسی، اعداد و تعدادی علامت طراحی شده.
❌ مشکل:
فارسی، عربی، چینی و بسیاری زبانهای دیگر را پوشش نمیدهد.
2️⃣ ISO-8859
برای گسترش ASCII مجموعههایی از استانداردهای 8 بیتی ایجاد شدند.
مثلاً:
ISO-8859-1
برای بسیاری از کاراکترهای زبانهای اروپای غربی استفاده میشد.
اما هر نسخه مجموعه متفاوتی از کاراکترها را پوشش میدهد.
پس هنوز مشکل چندزبانه بودن کامل وجود داشت.
3️⃣ Unicode
Unicode آمد تا برای تقریباً تمام زبانهای دنیا یک استاندارد واحد برای کاراکترها داشته باشیم.
مثلاً:
A
ش
中
😀
همگی میتوانند در Unicode تعریف شوند.
🧠 خیلی ساده:
ASCII یک محله بود؛ Unicode یک شهر خیلی بزرگ برای کاراکترهای زبانهای مختلف است. 😄
4️⃣ UTF
اینجا یک نکته خیلی مهم:
Unicode و UTF یکی نیستند.
Unicode مشخص میکند چه کاراکتری چه کدی دارد.
UTF مشخص میکند این اطلاعات چطور در حافظه/فایل به صورت بایت ذخیره یا منتقل شود.
معروفترین آن:
UTF-8
مثلاً:
LANG=en_US.UTF-8
یعنی Locale انگلیسی آمریکا با Encoding مبتنی بر UTF-8.
——————
🔍 در لینوکس چطور ببینیم؟
مهمترین دستور:
locale
برای دیدن Localeهای موجود:
locale -a
مثلاً:
C
C.utf8
en_US.utf8
و برای دیدن مقدار یک متغیر:
echo $LANG
یا:
echo $LC_ALL