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

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

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

برای تاریخ شمسی در دروپال از ماژول Datex استفاده کنید.

بخش دوم مقاله‌ی فارسی سازی و محلی سازی در php را اینجا بخوانید

یکی از آرزوهای برنامه‌نویسان فارسی زبان هنگام توسعه برنامه‌ها و اسکریپت‌ها، پشتیبانی آسان از تاریخ شمسی هست. از جمله مشکلات توابع و کلاس‌های فارسی‌ساز که توسط خود ما برنامه‌نویسان ایرانی توسعه یافته‌اند فارسی نکردن بخش‌هایی است که خود از توابع و کلاس‌های داخلی زبان مورد نظر استفاده می‌کنند. برای نمونه ماژول Calendar در دروپال که از Date API استفاده می‌کند.

اما خبر خوب: در پی‌اچ‌پی ورژن ۵.۲ به بعد، یک کتابخانه از طریق PCEL در دسترس است که به طور کامل از محلی سازی پشتیبانی می‌کند. در اینجا استفاده از اون رو آموزش میدم.
اگرچه فعلا مشکل گفته شده رو حل نمی‌کنه یعنی کدهای داخلی پروژه‌ها از این کتابخانه استفاده نمی‌کنند و نیاز به دستکاری مستقیم توسط خود ما هست ولی خودش امیدوار کنندست، با پیگیری مستمر شاید بتونیم کاری کنیم از این کتابخانه استفاده بیشتری شود.
از جمله مشکلاتی که تابع setlocale() دارد، نیاز به نصب بودن زبان مورد نظر روی سیستم مورد استفاده است، اما توابع Intl هیچ ارتباطی با زبان نصب روی سیستم ندارد و دردسر مدیریت زبان‌های سیستم رو کمتر می‌کند. Intl از دستورات ICU نیز پشتیبانی می‌کند بنابراین امکان استفاده از دستوراتی مثل numbers=roman وجود دارد (roman numbers: i ii iii ix xi x).

توضیح در مورد ICU/UCA در این مقاله نمی‌گنجه ولی اگر گوگل رو بگردید مقالات جالبی پیدا می‌کنید. مثلا می‌تونید برای اعداد خاصی، تلفظ‌های خاصی تعیین کنید (به طوری که عدد ۳/۱۴ به کلمه دروپال تبدیل شود یا ۳۶۵ به تبریک).

نصب:

Archlinux
pacman -S php-pear

Ubuntu/Debian
apt-get install php-pear

CentOS/Fedora
yum install php-pear

سپس:

pecl install intl

راهنمای نصب در ویندوز.

سپس باید با حذف علامت ; از فایل php.ini در قسمت extension=intl.so و ری‌استارت کردن Apache اون رو فعال کنید. با چک کردن خروجی تابع phpinfo می‌تونید از فعال شدن intl مطمئن شوید (admin/reports/status/php در دروپال). در نهایت این تابع خروجی مشابه این خواهد داشت:

کتابخانه intl شامل این بخش‌هاست:

  • Collator: کلاس مربوط به کار با رشته‌های حرفی (مقایسه و مرتب‌سازی رشته‌ها).
  • Number Formatter: کلاس مربوط به کار با اعداد (تبدیل رشته‌های عددی به عدد، نمایش اعداد به صورت محلی‌سازی شده و ...).
  • Message Formatter: کلاس مربوط به ساخت پیغام‌های محاوره‌ای برای کاربر نهایی که شامل اعداد و تاریخ محلی‌سازی شده است.
  • IntlDateFormatter: کلاس مربوط به فرمت کردن تاریخ در زبان موردنظر (شامل تاریخ شمسی).
  • Normalizer:کلاس تبدیل رشته به فرم نرمال یونیکد.
  • Locale

فارسی سازی تاریخ در دروپال:
برای فارسی‌سازی تاریخ در دروپال به وسیله این کتابخانه پس از فعال‌سازی این کتابخانه به روش گفته‌شده، patch داده شده رو باید اعمال کرد. برای اعمال patch پس از نصب git باید به روش زیر عمل کنید
البته این patch فقط برای تست اولیه ایجاد شده و در حال تکمیل اون هستیم. پس از تکمیل می‌تونید اون رو تحت ماژول datex دانلود کنید.

git apply --stat drupal-add_persin_date_support_1_1.patch
OR
patch -p1 < drupal-add_persin_date_support_1_1_0.patch

چنانچه نتوانستید patch را اعمال کنید کافیست در فایل common.inc دنبال عبارت زیر بگردید:

$format = date_format($date_time, $format);

و عبارت زیر را دقیقا بعد از آن اضافه کنید

//does _format_date_callback translate? if so we dont need it, our formatter
//is less costly
static $ir_frmater;
if ($langcode == 'fa') {
    if (!$ir_frmater) {
        $ir_frmater = new IntlDateFormatter("fa_IR@calendar=persian",
            IntlDateFormatter::MEDIUM,
            IntlDateFormatter::SHORT,
            $timezone,
            IntlDateFormatter::TRADITIONAL);
    }
    dpm(datefmt_get_error_code ( $ir_frmater));
    return $ir_frmater->format(intval($timestamp));
}

پ.ن: با تشکر ویژه از oops‌ بابت معرفی این function

بخش دوم مقاله‌ی فارسی سازی و محلی سازی در php را اینجا بخوانید

فایل ضمیمه: 

پیوستاندازه
فایل drupal-add_persin_date_support_1_1.patch958 بایت

تگ های مطلب: 

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

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

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

درباره ما

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

تماس با ما

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

logo-samandehi