دیدگاه جدیدی بگذارید

محلی سازی / فارسی سازی در PHP - بخش دو

شمسی کردن تاریخ php

در بخش قبل شیوه‌ی نصب و فعال سازی کتابخانه intl مربوط به محلی‌سازی داده‌ها در php رو گفتم، در این بخش روش استفاده از اون رو توضیح میدم.

IntlDateFormatter - کلاس کار با تاریخ:

برای شروع ابتدا یک IntlDateFormatter با قوانین محلی‌سازی (که خود یک رشته است، برای مثال 'fa' به عنوان قوانین فارسی‌سازی) ایجاد می‌کنید و از متدهای شیء ایجاد شده برای عملیات مورد نظر استفاده می‌کنید. درصورتی که از روند برنامه‌نویسی Procedural استفاده می‌کنید، هر متد کلاس، یک تابع معادل دارد که اولین پارامتر تابع یک شیء IntlDateFormatter است و بقیه پارامترها، همان پارامترهاییست که متد در شیوه‌ی ObjectOriented می‌گیرد.

ثوابت از پیش تعریف شده.

نام ثابت تاثیر روی مقدار زمان تاثیر روی مقدار تاریخ
IntlDateFormatter::NONE عدم نمایش عدم نمایش
IntlDateFormatter::FULL نمایش کامل نمایش کامل
IntlDateFormatter::LONG نمایش طولانی نمایش طولانی
IntlDateFormatter::MEDIUM نمایش متوسط نمایش متوسط
IntlDateFormatter::SHORT  فقط نمایش بخش‌های لازم فقط نمایش بخش‌های لازم
IntlDateFormatter::TRADITIONAL   تقویم‌های غیر میلادی
IntlDateFormatter::GREGORIAN   تقویم میلادی

 

استفاده:

ایجاد یک شیء از کلاس به این صورت است:

static IntlDateFormatter IntlDateFormatter::create ( string $locale , int $datetype , int $timetype [, string $timezone [, int $calendar [, string $pattern ]]] );
$date_formatter = new IntlDateFormatter ( string $locale , int $datetype , int $timetype [, string $timezone [, int $calendar [, string $pattern ]]] );
IntlDateFormatter datefmt_create ( string $locale , int $datetype , int $timetype [, string $timezone [, int $calendar [, string $pattern ]]] );

$locale: زبان مورد نظر - 'fa' برای فارسی
$datetype, $timetype: یکی از ثابت‌های جدول بالا
$timezone: منطقه زمانی، اگر قید نشود از پیش‌فرض سیستم استفاده می‌شود
$calendar: یکی از دو ثابت ذکر شده در جدول بالا
$pattern: برای اطلاعات بیشتر به  userguide.icu-project.org/formatparse/datetime مراجعه کنید


$date_formatter = new IntlDateFormatter("fa_IR @calendar=persian", 
                              IntlDateFormatter::FULL, 
                              IntlDateFormatter::FULL,
                              'Asia/Tehran',
                              IntlDateFormatter::TRADITIONAL);

فرمت کردن تاریخ با فرمت‌های پیش‌فرض:

print $date_formatter->format(time());

$date = new DateTime('1980-11-11');
print $date_formatter->format($date);

print $date_formatter->format(array('tm_sec'=>3, 'tm_min'=>45, 'tm_hour'=>22, 'tm_mda' => ......);
به دست آوردن گرانول‌های تاریخ به فرمت آرایه‌ای که localtime ارائه می‌کند (tm_mday tm_sec tm_hour ...)

 array IntlDateFormatter::localtime ( string $value [, int &$position ] );

$date_formatter->localtime(time());
$date_formatter->localtime("Wednesday, December 31, 1969 4:00:00 PM PT",0);

ایجاد فرمت دلخواه: اگر نمی‌خواید از فرمت‌های پیش‌فرض استفاده کنید با استفاده از متد setPattern که فرمت‌های ICU را قبول می‌کند، می‌تونید فرمت دلخواه خودتون رو ایجاد کنید (مثلا yyyy یا m-d).

 

$date_formatter = new IntlDateFormatter("fa_IR @calendar=persian", 
                              IntlDateFormatter::FULL, 
                              IntlDateFormatter::FULL,
                              'Asia/Tehran',
                              IntlDateFormatter::TRADITIONAL);
$format_string = 'yyyy';
$datetime = time();
$date_formatter->setPattern('YYYY');
$date_formatter->format($datetime);

IntlDateFormatter::parse یک رشته حرفی شامل تاریخ مورد نظر را می‌گیرد و تاریخ را به فرمت unix timestamp به صورت int برمی‌گرداند.

IntlDateFormatter::getCalendar نوع تقویم فعلی مورد استفاده را برمی‌گرداند. 0 یعنی غیرمیلادی و 1 یعنی میلادی.
IntlDateFormatter::getDateType نوع تاریخ فعلی مورد استفاده را برمی‌گرداند. یکی از ثابت‌های جدول بالا.
IntlDateFormatter::getErrorCode کد خطای آخرین عملیات را برمی‌گرداند (0 یعنی خطایی رخ نداده).
IntlDateFormatter::getErrorMessage پیغام خطای آخرین عملیات را برمی‌گرداند.
IntlDateFormatter::setTimeZone تنظیم منطقه زمانی (Asia/Tehran)
IntlDateFormatter::setCalendar تنظیم نوع تقویم فعلی مورد استفاده. برای مقادیر قابل قبول به جدول بالا مراجعه کنید.

توضیح مختصر در مورد بعضی از کلاس‌های دیگر intl

کلاس Collator:
این کلاس جایگزینیست برای توابع مربوط عملیات رشته‌‌ای تا از حروف غیر انگلیسی پشتیبانی شود.نحوه‌ی ساخت و استفاده از این کلاس تقریبا مشابه IntlDateFormatter است.
نمونه‌ای از متدهای این کلاس:

bool Collator::asort ( array &$arr [, int $sort_flag ] )    //Object Oriented
bool collator_asort ( Collator $coll , array &$arr [, int $sort_flag ] )    //Procedural
bool Collator::sort ( array &$arr [, int $sort_flag ] )    //Object Oriented
bool collator_sort ( Collator $coll , array &$arr [, int $sort_flag ] )    //Procedural
int Collator::compare ( string $str1 , string $str2 )    //Object Oriented
int collator_compare ( Collator $coll , string $str1 , string $str2 )    //Procedural
static Collator Collator::create ( string $locale )    //Object Oriented
Collator collator_create ( string $locale )    //Procedural
string Collator::getErrorMessage ( void )    //OO
string collator_get_error_message ( Collator $coll )    //Procedural
int Collator::getErrorCode ( void )    //OO
int collator_get_error_code ( Collator $coll )    //Procedural

برای لیست کامل متدهای Collator و کاربرد آن‌ها به صفحات راهنمای PHP مراجعه کنید

مثال:

$names = array('کوشا','عرفان','حسین','kamran');
$intl_col = new Collator('fa');
$int_col->sort($names);
 print_r($names);

بعد از Collator می‌رسیم به NumberFormatter
کارای جالبی با NumberFormatter میشه کرد. مثلا تبدیل 0.75 به 75% به صورت خودکار (با قوانین ICU).
مثال:

$fmt = numfmt_create( 'fa', NumberFormatter::TYPE_CURRENCY );
$data = numfmt_format($fmt, 1234567.891234567890000);
echo $data;
$fmt = new NumberFormatter( 'fa', NumberFormatter::DECIMAL );
$fmt->setPattern("#0.# kg");
print $fmt->format(1234567.89100);
$fmt->setTextAttribute(NumberFormatter::NEGATIVE_PREFIX, "منفی ");
echo $fmt->format(-1234567.891234567890000);

 

تگ های مطلب: 

CCBot/2.0 (http://commoncrawl.org/faq/)

آخرین ارسال ها

محتواهای محبوب

درباره ما

Author
اینجا دروپال یعنی همه چیز. در مورد دروپال صحبت میکنیم. ماژول هامون رو به اشتراک میزاریم در مورد قالب دروپال ، فروشگاه دروپال، دروپال فارسی و تاریخ شمسی دروپال صحبت میکنیم و هرچیزی که در مورد طراحی سایت با دروپال میدونیم به هم انتقال میدیم. دروپالیون یک سایت شخصی نیست. ما دست همه کسانی که برای پیشرفت دروپال تلاش میکنند رو میفشاریم و با آغوش باز اونها رو در این سایت میپذیریم.

تماس با ما

با ما تماس بگیرید.

logo-samandehi