به طور کلی عمل بومی سازی یا فارسی کردن در اودوو شامل سه جزء اصلی است:
- فارسی کردن متنها
- فارسی کردن تقویم
- اضافه کردن سرویس هایی مثل درگاه پرداخت ایرانی که مخصوص کاربران ایران است.
فارسی کردن متن
در بخش فارسی سازی متن باید با استفاده از ابزار های ارائه شده توسط دو تیم اودوو و OCA، ماژولهایی که در مرحله نهایی هستند فارسی سازی شوند. به همین منظور، وظیفه اصلی در این بخش این است که در سایت هایی که لینک آنها در ادامه آمده است، ابتدا لاگین کرده و سپس تمامی جملههای موجود در این سایت ها ترجمه شود.
این کار را باید برای تمامی ماژول هایی که توسط تیم خود ما ایجاد می شود نیز تکرار کنیم. در ادامه به شرح دقیق تر مراحل کار فارسی سازی متن می پردازیم:
- نصب poedit
- ورود به پروژهها
- ایجاد فایل های ترجمه
فارسی کردن تقویم
فارسی کردن یا بومی سازی تقویم عموما باید در چند بخش به صورت مستقل انجام شود. دلیل اصلی این کار این است که بخشها به صورت کاملا مستقل از یکدیگر کار میکنند و هر بخش روش مختص خود را برای نمایش تاریخ دارد.
برای انجام عمل بومی سازی تقویم، باید در دو بخش اصلی بک اند و فرانت اند، تغییراتی ایجاد شوند.
بخش بک اند
در بخش بک اند عملیات سمت سرور انجام می شود که شامل موارد زیر است:
- بومی سازی فیلد های تاریخ در پی دی اف صورت حساب
- دسته بندی رکورد ها بر اساس تاریخ
بومی سازی فیلد های تاریخ در پی دی اف صورت حساب
برای این کار یک مدل به نام ir_qweb_fields در ماژول تقویم فارسی ایجاد شده است که در آن از مدل های از قبل ایجاد شده در اودوو ارث بری می کند و توابع تعریف شده در این مدل ها تغییر یا بازنویسی
دسته بندی رکورد ها بر اساس تاریخ
یکی از مهمترین مواردی که در سرور انجام میشود و در فارسی سازی موثر است، دسته بندی کردن رکوردها بر اساس تاریخ است. در این حالت یک درخواست read group ارسال میشود و ما باید دستههای ممکن به وجود آمده را ارسال کنیم. در این دسته بندی اگر تاریخ به عنوان یک فیلد دسته بندی در نظر گرفته شود باید دو قابلیت را برای آن تعیین کنیم:
- برچسب دسته بندی: برچسب دسته در واقع همان سطح یا معیار دسته بندی است که رکورد ها بر اساس آن دسته بندی می شوند. در ماژول تقویم فارسی برچسب های دسته بندی شامل سال، ربع، ماه، هفته و روز هستند.
- بازه تاریخ مورد استفاده در بخش جستجو ها
برای پیاده سازی این دو قابلیت، باید مدل BaseModel را با تکنیکهای پایتونی تغییر دهید و محتوای متد های زیر را برای تولید نتیجه مورد نظر بازنویسی کنید.
-
تابع basemodel: _read_group_format_result
این تابع برای ایجاد برچسب مناسب استفاده می شود. برای ایجاد برچسب فارسی باید تغییراتی در این تابع اعمال شود. در محتوای این تغییرات، در صورتی که زبان سیستم به فارسی عوض شود، برای بدست آوردن معادل فارسی برای برچسب یک تابع به نام format_label_custom فراخوانی می شود. - basemodel: _read_group_process_groupby
این تابع برای تعیین فرمت نمایش تاریخ استفاده می شود.
در ماژول تقویم فارسی، برای پیاده سازی تغییرات ذکر شده روی مدل BaseModel یک مدل به نام hack_odoo_base_model تعریف شده است. در این مدل با تکنیک ارث بری از مدل BaseModel، توابع _read_group_format_result و _read_group_process_groupby در دسترس قرار می گیرند و سپس ویرایش و بازنویسی می شوند.
در اینجا یک چالش با تابع date_trunc وجود دارد که باید مورد توجه قرار گیرد. این تابع دسته بندیها رو بر اساس تاریخ میلادی ایجاد میکنه. این تابع در پست گرس استفاده میشه و باید کارهایی توی پایگاه داده برای این مورد انجام داد. فعلا توی این فاز ما این مورد رو انجام نخواهیم داد.
بخش فرانت اند
این بخش شامل عملیاتی است که کاربر می تواند نتایج آن را در UI سایت مشاهده کند. این عملیات شامل موارد زیر است:
-
بازنویسی سرویس های جاوا اسکریپتی
برای بومی سازی تقویم نیاز است که سرویس های جاوا اسکریپتی موجود در ماژول web بازنویسی شوند. دو تا از سرویس هایی که برای این کار بازنویسی می شوند فایل های localization_service.js و dates.js است.
- بازنویسی بخش هایی از ماژول های جاوا اسکریپتی
- گسترش یا تغییر کامپوننت های OWL
- تغییر ویجت های قدیمی اودوو
شرح روش بازنویسی یک سرویس
فرض کنید که یک سرویس رو بخواهیم باز نویسی یا ویرایش کنیم که این به صورت زیر انجام می شود:
-
ابتدا باید سرویس اصلی مورد نظر را در سرویسی که در ماژول خود ایجاد کرده ایم، import
کنیم. برای import شدن یک سرویس، نیاز است که مسیری که سرویس در آن ذخیره شده است در کد
اضافه شود. به عنوان مثال برای بازنویسی یا ویرایش سرویس dates باید از کد زیر استفاده
کنیم:
import * as dates from "@web/core/l10n/dates";
-
بعد از import شدن سرویس اصلی، تمام متدها و متغیرهای موجود در آن سرویس در سرویس
خودمان در دسترس است و می توانیم آنها را ویرایش یا بازنویسی کنیم. به عنوان مثال با
استفاده از قطعه کد زیر می توانیم متد areDateEquals را که از متد های سرویس dates است،
بازنویسی یا ویرایش کنیم.
زمانی که یک متد از سرویس اصلی را در سرویس خود بازنویسی و یا ویرایش می کنید، باید تمام
متغیرهایی که در سرویس اصلی تعریف شده و در متد مورد نظر از آنها استفاده شده است را در
سرویس خود نیز تعریف کنید. به عنوان مثال متغیرهای SERVER_DATE_FORMAT،
SERVER_TIME_FORMAT، SERVER_DATETIME_FORMAT را که در سرویس اصلی dates تعریف شده اند،
نیاز است در سرویس خود تعریف کنید.
در صورت بازنویسی یا ویرایش یک متد، اگر خروجی متد شما با خروجی متد اصلی متفاوت باشد، باید خروجی متد خود را برگردانید.
تذکر : توسعه دهندگان اودوو باید علاوه بر تغییر سرویس های اصلی بر اساس نیاز خود، تغییر این سرویس ها بر اساس نسخه اودوو را هم در نظر بگیرند. به عنوان مثال اگر می خواهید مشابه یک ماژول در اودوو ۱۶ را در اودوو ۱۷ نیز ایجاد کنید، باید تمام قسمت های بازنویسی یا ویرایش شده را با توجه به سرویس ها و متد های بروز شده در نسخه اودوو مجددا ویرایش یا بازنویسی کنید.
بخشی از دادههایی که در وب نمایش داده میشود مستقیم از پایگاه داده آورده میشود. این نوع دادهها بدون دستکاری نمایش داده میشود. برای نمونه زمانی که شما یک فهرست را بر اساس تاریخ گروه بندی میکنید، عنوان هر گروه سمت سرور تعیین شده و به عنوان پارامتر ارسال میشود. در نمایش Kanban همین مقدار به صورت مستقیم نمایش داده میشود. معمولا از درخواست زیر برای دسته بندی استفاده میشود.
https://etachar.com/web/dataset/call_kw/sale.order/web_read_group
اضافه کردن سرویس های مخصوص کاربران ایران
درگاه پرداخت
ارسال پیامک
خصوصی سازی قالبهای ارسال ایمیل، پیامک و گزارش
پیشنهاد هایی برای حمایت از تقویم فارسی در اودوو ۱۶
برای دیدن کارهای مورد نیاز برای حمایت از تقویم فارسی می توانید به آدرس زیر مراجعه کنید:
https://github.com/odoo/odoo/commit/ec04a814dc160862e63408ed781048b439429984
قطعه کد مورد استفاده برای انجام بومی سازی در بخش بک اند در لینک زیر قابل مشاهده است. این قطعه کد در حال حاضر باید در اودوو ۱۶ فعال باشد. ولی روشهای بهتری برای آن پیدا شده است که نیازی به این کار نباشد. مثلا خود فیلدهایی که در بک اند ایجاد شده رو باز نویسی کردیم:
https://github.com/odoo/odoo/commit/19654fef01a8cdabac516b2d495e6f0f2eb361bd
بخشی از تغییرات نیز در جاوا اسکریپت اعمال شده است که در لینک زیر قابل مشاهده است.
https://github.com/odoo/odoo/commit/e8cbba1b06c30f7c3eda19fb26a69fde4279da7d
تقویم فارسی اودوو ۱۶