پرستاشاپ فارسی: بومی‌سازی تاریخ، تومان و آدرس بعد از نصب اولیه

پرستاشاپ فارسی

هر چند وقت یک‌بار کسی برایم می‌نویسد که بستهٔ زبان فارسی پرستاشاپ را نصب کرده، همه‌چیز هم ترجمه شده، ولی فروشگاهش هنوز آن چیزی نیست که انتظار داشت. تاریخ سفارش‌ها میلادی است، قیمت‌ها ریالی‌اند و به شکل عجیبی نمایش داده می‌شوند، فرم آدرس فیلد استان ندارد، و در پرستاشاپ ۹ نصف پنل مدیریت چپ‌چین مانده است.

این‌ها هیچ‌کدام باگ نصب شما نیست. بستهٔ زبان دقیقا همان کاری را می‌کند که اسمش می‌گوید: رشته‌های متنی را ترجمه می‌کند. تاریخ شمسی، واحد تومان، استان‌های ایران و راست‌چین شدن درست پنل، هیچ‌کدام جزو ترجمه نیستند و پرستاشاپ هم برای هیچ‌کدامشان راه‌حل آماده ندارد.

در این مقاله جدا می‌کنم که «فارسی‌سازی» در عمل یعنی چند کار متفاوت، هرکدام دقیقا کجای پرستاشاپ گیر دارد، و چه گزینه‌هایی برای هرکدام هست. بخش زیادی از چیزی که می‌خوانید حاصل ساخت یک ماژول فارسی‌ساز است؛ جاهایی که به باگ خود پرستاشاپ برخوردیم، شمارهٔ گزارشش در گیت‌هاب را هم می‌آورم تا بتوانید خودتان ببینید.

فارسی‌سازی در واقع سه کار متفاوت است

بیشتر سردرگمی‌ها از اینجا شروع می‌شود که سه چیز مستقل را با یک اسم صدا می‌زنیم:

  1. ترجمه. متن‌های رابط کاربری به فارسی. کاری که بستهٔ زبان انجام می‌دهد.
  2. جهت و تایپوگرافی. راست‌چین شدن چیدمان و فونتی که فارسی را درست نشان بدهد. پرستاشاپ برای فروشگاه این را دارد، برای پنل مدیریت نسخهٔ ۹ ناقص دارد.
  3. بومی‌سازی. تاریخ شمسی، تومان، استان و شهر ایران، فاکتور فارسی، پیامک. این لایه اصلا وجود ندارد و باید ساخته شود.

وقتی کسی می‌گوید «پرستاشاپم فارسی نشد»، تقریبا همیشه منظورش لایهٔ سوم است. لایهٔ اول را ده دقیقه‌ای می‌شود نصب کرد و مشکل خاصی هم ندارد.

بستهٔ زبان فارسی تا کجا می‌آید

بستهٔ زبان فارسی را از خود پنل نصب می‌کنید: «بین‌الملل ← ترجمه‌ها ← افزودن / به‌روزرسانی زبان» و انتخاب فارسی. همین کار زبان را اضافه می‌کند، رشته‌های ترجمه‌شده را می‌آورد و چون فارسی راست‌به‌چپ است، قالب فروشگاه را هم راست‌چین می‌کند.

جدا از آن، یک «بستهٔ بومی‌سازی» هم هست: «بین‌الملل ← بومی‌سازی» و واردکردن ایران. این یکی ارز ریال، واحدها، مالیات و ۳۱ استان را اضافه می‌کند. این دو تا را زیاد با هم اشتباه می‌گیرند؛ بستهٔ زبان ترجمه می‌آورد، بستهٔ بومی‌سازی داده.

بعد از نصب هر دو، چیزی که همچنان سر جایش می‌ماند این است:

  • تاریخ‌ها میلادی‌اند، در پنل و در فروشگاه و روی فاکتور.
  • ارز ریال است و الگوی نمایشش هم درست ذخیره نمی‌شود.
  • استان‌ها وارد شده‌اند، ولی فرم آدرس فروشگاه فیلد استان ندارد.
  • شهر یک فیلد متنی آزاد است، پس هر مشتری هرطور دلش بخواهد می‌نویسد.
  • فاکتور PDF فارسی را یا نشان نمی‌دهد یا شکسته نشان می‌دهد.
  • اطلاع‌رسانی فقط ایمیل است و پیامکی در کار نیست.
  • در پرستاشاپ ۹، پیشخوان و صفحات تنظیمات ماژول‌ها چپ‌چین می‌مانند.

اگر هنوز پرستاشاپ را نصب نکرده‌اید، راهنمای نصب پرستاشاپ روی ویندوز را اول بخوانید؛ بقیهٔ این مقاله فرض می‌گیرد نصب کارکنی دارید.

تاریخ میلادی، سرسخت‌ترین قسمت ماجرا

تاریخ شمسی معمولا اولین چیزی است که آزار می‌دهد و آخرین چیزی است که درست می‌شود. دلیلش هم معماری خود پرستاشاپ است.

تقریبا هر تاریخی که در پرستاشاپ می‌بینید از یک متد واحد بیرون می‌آید: Tools::displayDate. این متد هیچ هوکی ندارد. یعنی یک ماژول نمی‌تواند مثل کارهای دیگر خودش را به آن وصل کند و خروجی‌اش را عوض کند؛ تنها راه موجود، override کردن همان کلاس است. هر ماژول تاریخ‌شمسی‌ای که می‌بینید، بالاخره جایی همین کار را می‌کند، چون راه دیگری نیست.

همین موضوع دو پیامد عملی دارد که بهتر است از قبل بدانید. اول اینکه روی یک نصب نمی‌توانید همزمان دو ماژول تاریخ شمسی داشته باشید، چون پرستاشاپ اجازهٔ دو override روی یک متد را نمی‌دهد و ماژول دوم موقع نصب خطا می‌دهد. دوم اینکه هر ماژولی که فایل override را سر نصب روی دیسک می‌نویسد، موقع به‌روزرسانی پرستاشاپ می‌تواند دردسر بسازد.

نکتهٔ دیگری که کمتر به آن فکر می‌شود: تاریخ پنل و تاریخ فروشگاه دو مسئلهٔ جدا هستند. پنل مدیریت پر از فیلتر و بازهٔ تاریخی و نمودار است؛ اگر فقط خروجی را شمسی کنید ولی ورودی فیلترها میلادی بماند، عملا چیزی درست نشده. در سمت فروشگاه هم تاریخ در صفحهٔ حساب کاربری، تاریخچهٔ سفارش و فاکتور ظاهر می‌شود که هرکدام مسیر رندر جداگانه‌ای دارند. جزئیات این تفکیک را در صفحهٔ تاریخ جلالی در پنل مدیریت و تاریخ جلالی در فروشگاه و فاکتورها باز کرده‌ایم.

قیمت به ریال است، مشتری به تومان فکر می‌کند

ارز رسمی ایران ریال است و بستهٔ بومی‌سازی هم ریال را نصب می‌کند. ولی خریدار ایرانی با تومان خرید می‌کند و عدد ریالی برایش بی‌معنی است. اینجا دو مشکل جدا وجود دارد که معمولا قاتی می‌شوند.

مشکل اول یک باگ واقعی در هستهٔ پرستاشاپ است. الگوی نمایش قیمت برای فارسی که از دادهٔ استاندارد CLDR می‌آید، با یک نویسهٔ کنترلی نامرئی شروع می‌شود (U+200E) و کد پرستاشاپ فقط نویسهٔ مشابه دیگری (U+200F) را می‌شناسد. چون دو بایت اول این دو نویسه یکسان است، رشته وسط کار خراب می‌شود و الگوی نامعتبری ذخیره می‌شود. نتیجه‌اش همان چیزی است که خیلی‌ها دیده‌اند: قیمت به شکل ریال125,000 با نماد چسبیده به عدد، و فرم ارز هم اجازهٔ اصلاحش را نمی‌دهد. این باگ با برچسب Major در issue #36604 ثبت شده و یک PR باز دارد که ما هم تستش کردیم و نتیجه را همان‌جا گزارش دادیم، ولی هنوز ادغام نشده.

مشکل دوم مال وقتی است که تصمیم می‌گیرید یک ارز سفارشی به اسم تومان بسازید. اینجا یک تلهٔ جدی هست: در پرستاشاپ ۹، اگر ارزی که کد عددی استاندارد ندارد را ارز پیش‌فرض فروشگاه کنید، کل پنل مدیریت از کار می‌افتد و حتی صفحهٔ ورود هم بالا نمی‌آید. یعنی برای برگرداندنش دسترسی به دیتابیس لازم دارید. این مورد در issue #41335 ثبت است و علت ریشه‌ای آن را ما در همان issue کامنت گذاشتیم.

به همین دلیل روش امن‌تر دست‌نزدن به ارز پیش‌فرض و عوض‌کردن لایهٔ نمایش است؛ توضیح کاملش در مستندات واحد پول تومان آمده.

استان و شهر: جایی که آدرس ایرانی جا نمی‌شود

این یکی از آن باگ‌هایی است که تا وقتی سفارش واقعی نگیرید متوجهش نمی‌شوید. بستهٔ بومی‌سازی ایران ۳۱ استان را وارد می‌کند و گزینهٔ «دارای استان» کشور را هم روشن می‌کند. ولی قالب آدرس ایران را دست نمی‌زند، و فرم آدرس در فروشگاه فیلدهایش را دقیقا از همان قالب می‌سازد. نتیجه این می‌شود که فیلد استان در فروشگاه اصلا نمایش داده نمی‌شود و هر آدرسی که مشتری ثبت می‌کند با استان خالی ذخیره می‌شود، بدون اینکه خطایی ببینید.

چیزی که این را بدتر می‌کند این است که فرم آدرس در خود پنل مدیریت فیلد استان را مستقل از قالب نشان می‌دهد. پس شما از پنل نگاه می‌کنید و همه‌چیز سالم به نظر می‌رسد، در حالی که آدرس‌های واقعی مشتری‌ها استان ندارند. این را موقع ساخت همین ماژول پیدا کردیم و در issue #42857 گزارش دادیم.

شهر داستان جداگانه‌ای دارد و اصلا باگ نیست: شهر در پرستاشاپ یک فیلد متنی آزاد است. یعنی برای یک شهر، ده جور نوشته در دیتابیس جمع می‌شود و بعدا نه می‌توانید درست فیلتر بگیرید نه گزارش. راهش تبدیل‌کردن شهر به فهرست وابسته به استان است که در مستندات فهرست استان و شهر توضیح داده شده.

راست‌چین شدن پنل، مشکلی که مخصوص پرستاشاپ ۹ است

اگر روی پرستاشاپ ۸ کار کرده‌اید و حالا روی ۹ هستید، احتمالا چیز عجیبی دیده‌اید: بیشتر صفحات پنل راست‌چین‌اند، ولی پیشخوان و صفحات تنظیمات ماژول‌ها چپ‌چین مانده‌اند. این توهم نیست و تقصیر ماژول هم نیست.

از نسخهٔ ۹، پرستاشاپ به آدرس فایل استایل پنل یک شمارهٔ نسخه اضافه می‌کند. ولی کدی که وظیفه دارد نسخهٔ راست‌چین فایل را جایگزین کند، فقط وقتی کار می‌کند که آدرس دقیقا به .css ختم شود. با آن شمارهٔ نسخه در انتهای آدرس، این جایگزینی انجام نمی‌شود. صفحات جدیدتر پنل مشکلی ندارند چون مسیر دیگری دارند، ولی هر صفحه‌ای که از کنترلرهای قدیمی می‌آید (پیشخوان و صفحهٔ تنظیمات هر ماژول) استایل چپ‌چین می‌گیرد. گزارشش issue #42842 است.

یک لایه پایین‌تر هم مشکل دومی هست: فایل راست‌چین به‌صورت خودکار از روی فایل اصلی ساخته می‌شود، و ابزاری که این کار را می‌کند مقادیری را که با متغیرهای CSS نوشته شده‌اند برنمی‌گرداند. برای همین حتی بعد از حل مشکل اول، بعضی فاصله‌ها و حاشیه‌ها همچنان برعکس می‌مانند (issue #42843). این دو تا را باید با هم حل کرد، وگرنه تعمیر یکی، دیگری را نمایان می‌کند. روش کارمان در مستندات فونت و راست‌چین پنل هست.

در کنار جهت، فونت هم مهم است. فونت پیش‌فرض پنل برای فارسی طراحی نشده و ارقام را هم لاتین نشان می‌دهد. این یکی برخلاف بقیه باگ نیست و با یک فونت مناسب حل می‌شود.

فاکتور و برچسب پستی

فاکتورهای پرستاشاپ PDF هستند و PDF برای فارسی سه چیز لازم دارد که هیچ‌کدام پیش‌فرض نیستند: فونت جاسازی‌شده، شکل‌دهی درست حروف چسبان، و راست‌به‌چپ شدن چیدمان. اگر این سه تا نباشد، یا مربع خالی می‌بینید یا حروف جدا از هم و برعکس.

جدا از فارسی‌بودن، فاکتور ایرانی چند قلم دیگر هم لازم دارد که در قالب پیش‌فرض نیست، و برچسب پستی هم که اصلا در پرستاشاپ وجود ندارد و معمولا دستی درست می‌شود. جزئیات در مستندات فاکتور و برچسب پستی آمده.

اطلاع‌رسانی، چون ایمیل در ایران جواب نمی‌دهد

کل سیستم اطلاع‌رسانی پرستاشاپ روی ایمیل بنا شده. در بازار ایران این یعنی بخش بزرگی از مشتری‌ها هیچ‌وقت خبردار نمی‌شوند که سفارششان ثبت یا ارسال شده، و شما هم مدام تماس تلفنی می‌گیرید که «سفارشم چی شد».

پیامک این را حل می‌کند، ولی به یک لایهٔ میانی نیاز دارد: تعریف اینکه در کدام وضعیت سفارش چه پیامی برود، به مشتری یا به مدیر، و با کدام سرویس‌دهنده. این ساختار و منطق قاعده‌هایش در مستندات اطلاع‌رسانی سفارش توضیح داده شده. یک حالت دیگر هم هست که فروشنده‌ها کمتر به آن فکر می‌کنند و مستقیم فروش می‌آورد: خبردادن به کسانی که کالای ناموجود را می‌خواستند، به‌محض اینکه دوباره موجود شد.

سه راهی که پیش رویتان است

خودتان override بنویسید

اگر برنامه‌نویس دارید یا خودتان PHP بلدید، این کاملا شدنی است و هزینهٔ مستقیمی هم ندارد. کنترل کامل دست خودتان است و هیچ کد اضافه‌ای هم که لازم نداشته باشید روی سایت نمی‌نشیند.

هزینه‌اش جای دیگری است: هر به‌روزرسانی پرستاشاپ ممکن است overrideهایتان را بشکند و باید دوباره بررسی و تطبیقشان بدهید. آن باگ‌هایی هم که بالاتر شمردم مال هسته‌اند و با نوشتن override خودبه‌خود حل نمی‌شوند؛ باید یکی‌یکی پیدا و دور زده شوند، و پیداکردنشان همان چیزی است که وقت می‌برد. برای فروشگاهی که فقط تاریخ شمسی می‌خواهد و همین، این راه منطقی است.

برای هر نیاز یک ماژول جدا بخرید

یک ماژول تاریخ شمسی، یکی برای تومان، یکی برای پیامک، یکی برای استان و شهر. سریع است و هر کدام کار خودش را می‌کند.

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

یک ماژول یکپارچه

یک ماژول که همهٔ این لایه‌ها را با هم مدیریت کند، مسئلهٔ تداخل را از بین می‌برد و اجازه می‌دهد هر امکان را جدا خاموش و روشن کنید. ما ماژول فارسی‌ساز پرستاشاپ راهکار را دقیقا با همین نگاه ساختیم و هستهٔ آن رایگان است.

صادقانه‌اش این است که این راه هم برای همه بهترین نیست. اگر فروشگاهتان کوچک است و فقط با تاریخ میلادی مشکل دارید، نصب یک مجموعهٔ کامل کار اضافه است. قاعدهٔ سادهٔ من این است: اگر دو مورد یا کمتر از فهرست بالا اذیتتان می‌کند، جدا حلش کنید؛ از سه مورد به بالا، یکپارچه ارزان‌تر تمام می‌شود، چه از نظر پول چه از نظر وقتی که صرف نگه‌داری می‌کنید.

از کجا شروع کنم

ترتیبی که پیشنهاد می‌کنم، بر اساس اینکه هر قدم چقدر روی فروش اثر می‌گذارد:

  1. بستهٔ زبان فارسی و بستهٔ بومی‌سازی ایران را نصب کنید. پایهٔ همه‌چیز همین است.
  2. نمایش قیمت را درست کنید. مشتری باید بفهمد چقدر باید بپردازد، قبل از هر چیز دیگری.
  3. فرم آدرس را کامل کنید. هر روزی که بگذرد، آدرس‌های ناقص بیشتری در دیتابیس جمع شده که بعدا باید پاکسازی شوند.
  4. پیامک را راه بیندازید. بیشترین اثر را روی تماس‌های پشتیبانی دارد.
  5. تاریخ شمسی را فعال کنید، اول در پنل که خودتان راحت باشید، بعد در فروشگاه.
  6. فاکتور و برچسب پستی را آخر بگذارید، چون تا سفارش واقعی نداشته باشید نمی‌توانید درست تستشان کنید.

و یک توصیهٔ کوچک که خیلی‌ها گران تمامش می‌کنند: هر کدام از این‌ها را اول روی یک نسخهٔ آزمایشی امتحان کنید، نه روی فروشگاهی که دارد سفارش می‌گیرد. مخصوصا ارز، که اگر اشتباه پیش برود می‌تواند پنل را از دسترس خارج کند.

سؤال‌های پرتکرار

بستهٔ زبان فارسی پرستاشاپ را از کجا دانلود کنم؟

لازم نیست جایی دانلود کنید. از پنل مدیریت به «بین‌الملل ← ترجمه‌ها» بروید و در بخش «افزودن / به‌روزرسانی زبان» فارسی را انتخاب کنید؛ پرستاشاپ خودش بسته را از سرور رسمی می‌گیرد و نصب می‌کند. بسته‌های فارسی دستی که در سایت‌های متفرقه پیدا می‌شوند معمولا برای نسخه‌های قدیمی‌ترند و ترجمه‌های ناقص یا قدیمی وارد فروشگاه می‌کنند.

آیا فارسی‌سازی سرعت فروشگاه را کم می‌کند؟

خود ترجمه و راست‌چین شدن اثر محسوسی ندارند. چیزی که می‌تواند سرعت را پایین بیاورد، نصب چند ماژول سنگین برای کارهای کوچک است. اگر قرار است چند امکان را جدا اضافه کنید، ببینید هر کدام چه مقدار کد و کوئری اضافه می‌کند و امکاناتی را که استفاده نمی‌کنید خاموش نگه دارید.

تاریخ شمسی روی سفارش‌های قبلی هم اعمال می‌شود؟

بله. تاریخ‌ها در دیتابیس دست‌نخورده باقی می‌مانند و تبدیل فقط موقع نمایش انجام می‌شود، پس سفارش‌های قدیمی هم شمسی دیده می‌شوند. همین ویژگی باعث می‌شود اگر بعدا تاریخ شمسی را خاموش کنید، هیچ داده‌ای از دست نرفته باشد.

روی پرستاشاپ ۸ هم همین مشکلات وجود دارد؟

بیشترشان بله، ولی نه همه. مشکل چپ‌چین ماندن پیشخوان و صفحات ماژول‌ها مخصوص نسخهٔ ۹ است و روی ۸ وجود ندارد. در عوض نبود تاریخ شمسی، فیلد استان در فرم آدرس، و فاکتور فارسی روی هر دو نسخه یکسان است.

اگر قالب سفارشی دارم، راست‌چین شدن فروشگاه به هم می‌ریزد؟

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


اگر فروشگاهتان همین حالا روی پرستاشاپ کار می‌کند و نمی‌دانید از کدام قسمت شروع کنید، وضعیت نصبتان را بگویید تا بگوییم کدام‌یک از این‌ها واقعا برایتان مسئله است و کدام را می‌شود فعلا کنار گذاشت. صفحهٔ تماس در دسترس است.

دیدگاه خود را بنویسید

مشاوره رایگان

اگر عجله داری، همین حالا زنگ بزن:

یا شماره‌ات را بگذار، ما تماس می‌گیریم
شما چی ترجیح می‌دهید؟