( تعداد نمایش : 1888 )

بررسی کلاس Globalization.CultureInfo

بررسی مشخصات کشور ایران در کلاس CultureInfo

در این کلاس مشخصات مربوط به فرهنگ‌ ملتها شامل زبان، سیستم نوشتاری، تقویم‌های مورد استفاده و … ذخیره شده‌اند. طبق توضیحاتی که برای این کلاس وجود دارد، به هر فرهنگ‌(culture) یک نام بنابه استاندارد RFC 1766 و یک مشخصه‌ی عددی اختصاص داده شده است. مثلاً ایران را می‌توان با نام “fa-IR” و یا مشخصه‌ی “‪۰×۰۴۲۹‬” نشان داد. در اینجا fa-IR یک فرهنگ specific است که دقیقاً زبان و کشور را مشخص می‌کند. دسته‌ی دیگری از فرهنگ‌ها به نام neutral (یا بیطرف) نیز وجود دارند که فقط زبان را مشخص می‌کنند و مستقل از یک کشور یا منطقه‌ی خاص هستند. در این مورد، فارسی با نام “fa” و یا مشخصه‌ی “۰×۰۰۲۹″ تعریف می‌شود و به عنوان parent culture برای fa-IR در نظر گرفته می‌شود.

برای دیدن لیست کامل فرهنگ‌ها می‌توانید به صفحه‌ی CultureInfo Class در کتابخانه‌ی MSDN مراجعه کنید.

مثال: مثال زیر اطلاعات مختلف فرهنگ fa-IR را از کلاس CultureInfo استخراج کرده و نمایش می‌دهد. ‪(C#)‬

<%@ Page language=”C#” %>
<%@ Import namespace=”System.Globalization” %>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″>
</head>
<body>
<h3>
Iran culture information
</h3>
<% CultureInfo ircul = new CultureInfo(“fa-IR”); %>
Name:
<% Response.Write(ircul.Name); %>
<br>
Locale Identifier:
<% Response.Write(ircul.LCID); %>
<br>
English Name:
<% Response.Write(ircul.EnglishName); %>
<br>
Dispaly Name (in .NET language):
<% Response.Write(ircul.DisplayName); %>
<br>
Native Name:
<span dir=”rtl”>
<% Response.Write(ircul.NativeName); %>
</span><br>
Is Neutral Culture:
<% Response.Write(ircul.IsNeutralCulture); %>
<br>
Two-Letter ISO Language Name (ISO 639-1):
<% Response.Write(ircul.TwoLetterISOLanguageName); %>
<br>
Three-Letter ISO Language Name (ISO 639-2):
<% Response.Write(ircul.ThreeLetterISOLanguageName); %>
<br>
Three-Letter Windows Language Name:
<% Response.Write(ircul.ThreeLetterWindowsLanguageName); %>
<br>
Calendar in use (Default Calendar):<br>&nbsp;&nbsp;&nbsp;
<% Response.Write(ircul.Calendar.ToString()); %>
<br>
Optional Calendars (All Calendars in use):
<br>
<% foreach (System.Globalization.Calendar cal in ircul.OptionalCalendars) {
Response.Write(“&nbsp;&nbsp;&nbsp;” + cal.ToString() + “<br>”);
}
%>
</body>
</html>

خروجی این برنامه بصورت زیر است که در ادامه در مورد آن توضیح خواهم داد:

Iran culture information
Name: fa-IR
Locale Identifier: 1065
English Name: Farsi (Iran)
Dispaly Name (in .NET language): Farsi (Iran)
Native Name: فارسى (ایران)
Is Neutral Culture: False
Two-Letter ISO Language Name (ISO 639-1): fa
Three-Letter ISO Language Name (ISO 639-2): fas
Three-Letter Windows Language Name: FAR
Calendar in use (Default Calendar):
System.Globalization.GregorianCalendar
Optional Calendars (All Calendars in use):
System.Globalization.GregorianCalendar
System.Globalization.GregorianCalendar
System.Globalization.HijriCalendar
System.Globalization.GregorianCalendar

در این مثال، برای ایجاد شئ ircul می‌توانید بجای new CultureInfo(“fa-IR”)‎ از سازنده‌ی new CultureInfo(0×0429)‎ هم استفاده کنید.

Locale Identifier همان مشخصه‌ی عددی فرهنگ است که با ارجاع به CultureInfo.LCID بدست می‌آید.

چیز جالبی که در اینجا می‌توانید ببینید، خروجی دستور ircul.NativeName است که یک عبارت فارسی ست بصورت “فارسى (ایران)”. البته یک ایراد کوچک در آن وجود دارد: یای آخر در کلمه‌ی “فارسی” دارای کد U+0649 (الف مکسورة) و یای وسط در کلمه “ایران” دارای کد U+064A (یای عربی) می‌باشد که طبق قوانین یونی‌کد برای زبان فارسی هردوی آنها باید کد U+06CC (یای فارسی) را داشته باشند.

نکته‌ی دیگری که در اینجا وجود دارد، ترجمه‌ی لفظی کلمه‌ی “فارسی” یعنی “Farsi” است که با فراخوانی ircul.EnglishName بدست می‌آید. این کلمه که علاوه بر دات‌نت در یونی‌کد و استانداردهای W3C نیز بکار رفته، اصولاً در زبان انگلیسی درست نیست. توضیح این مطلب را به نقل از نوشته‌ی دوست عزیزم آقای خداداد رضاخانی (ایرانشناس) می‌نویسم:

[فارسی تلفظ عربی پارسی است که اسم زبان ماست. در زبانهای اروپایی این کلمه از یونانی گرفته شده که بصورت صحیح و با "پ" بجای "ف" است. اما اینکه چرا بعضی‌ها می گویند Farsi بجای استفاده از Persian که صورت درست کلمه است، [...]! Farsi اسم زبان ماست در فارسی، اما در انگلیسی و زبانهای دیگر اروپایی باید گفت Persian/Persisch/Persan . مثل اینکه در انگلیسی، اسم زبان English است و در فارسی ما “انگلیسی” می گوییم. اگر کسی بگوید “من انگلیش صحبت می کنم”، کلمه اشتباهی بکار برده. کما اینکه یونانی ها به زبانشان Elliniki می گویند، اما در انگلیسی از Greek استفاده می کنند. ایرانیان هم باید یاد بگیرند که به قوانین زبانها احترام بگذارند و از کلمات صحیح استفاده کنند].

بنابراین خروجی ircul.EnglishName باید بصورت “Persian (Iran)‎” باشد.

در مورد تقویم‌های مورد استفاده در ایران، همانطور که ملاحظه می‌کنید، تقویم هجری-شمسی دیده نمی‌شود. تقویم‌های نسبت داده شده به کشور ایران طبق خروجی برنامه فوق سه تا GregorianCalendar (تقویم میلادی) و یک HijriCalendar (تقویم هجری-قمری) است. تقویم میلادی در System.Globalization برگردان‌های مختلفی دارد که در فهرست Globalization.GregorianCalendarTypes لیست شده‌اند. با دستورهای زیر مشخص می‌شود که هر یک از این تقویم‌های میلادی از کدام نوع آن است:

Response.Write(((GregorianCalendar)ircul.Calendar).CalendarType);
OUTPUT-> Localized

Response.Write(((GregorianCalendar)ircul.OptionalCalendars[0]).CalendarType);
OUTPUT-> USEnglish
Response.Write(((GregorianCalendar)ircul.OptionalCalendars[1]).CalendarType);
OUTPUT-> Localized
Response.Write(((GregorianCalendar)ircul.OptionalCalendars[3]).CalendarType);
OUTPUT-> TransliteratedEnglish

برگردان‌های مختلف تقویم میلادی در کلاس DateTimeFormatInfo استفاده می‌شوند و برای این هستند که بتوانیم تاریخ را در آن در مدلهای مختلف نشان دهیم. مثلاً در تقویم پیش‌فرض که در اینجا می‌بینید، یعنی Localized که در واقع برگردان فرانسوی تقویم میلادی است، ماهها بشکل : ژانویه، فوریه، مارس، آوریل، مى، ژوئن، ژوئیه، اوت، سپتامبر، اُکتبر، نوامبر، دسامبر نشان داده می‌شوند و در برگردان انگلیسی (TransliteratedEnglish) ماهها بشکل ینایر، فبرایر، مارس، ابریل، مایو، یونیو، یولیو، اغسطس، سبتمبر، اکتوبر، نوفمبر، دیسمبر نشان داده می‌شوند که البته این برگردان از انگلیسی به عربی است و در فارسی چنین چیزی نداریم. به نظر من بهترین خروجی که propertyی ircul.OptionalCalendars می‌تواند داشته باشد آرایه‌ایست که اعضای آن به ترتیب تقویم میلادی (انگلیسی)، تقویم هجری شمسی (جلالی)، تقویم میلادی (برگردان فرانسوی) و تقویم هجری (قمری) باشد.

از کلاس CultureInfo علاوه بر اطلاعات فوق می‌توان سه کلاس دیگر به نامهای DateTimeFormatInfo، NumberFormatInfo و TextInfo را نیز استخراج کرد که هرکدام اطلاعات دیگری را که از اسم آنها مشخص است در اختیارمان قرار می‌دهند که اگر فرصت پیدا کنم راجع به هرکدام جداگانه توضیح خواهم داد.

برای نشان دادن فرهنگ جاری سیستم که در Control Panel ویندوز تنظیم شده می‌توانید از دستور زیر استفاده کنید:

Response.Write( CultureInfo.CurrentCulture.Name );

دیدگاه خود را بیان کنید.

باید وارد سایت شده باشید برای دیدگاه دادن