[font="Tahoma"][rtl]اگر خواستید از دیتابیس استفاده کنید با سه تا فیلد lng,str,trans که اولی پارامترهای en,fa,ir بگیری دومی جملات انگلیسی و سومی ترجمه مناسب . بعد توی سایت هر زبانی که ست شده بود از دیتابیس واکشی کنید . البته از فایل هم میتونید استفاده کنید اما دیتابیس راحتتره و یک کش 72 ساعته روش بذارید فکر نکنم به جایی بربخوره[/rtl][/font]
من خودم تو سیستم های خودم از یه تکنیک استفاده می کنم که این اجازه رو بهم می ده که بتونم هر تعداد زبان که می خوام داشته باشم و بتونم در آینده هم ازشون استفاده کنم .
در مرحله اول من تمام جداولی رو که باید به چند زبان داده داشته باشن رو به ۲ جدول تبدیل می کنم ، به عنوان مثال اگر جدول
page
داشته باشم ای جدول رو به ۲ جدول
page و page_info
تبدیل می کنم
که با هم رابطه یک به چند دارند.
در جدول
page
من اطلاعات اصلی بدون ویژگی هایی که نیاز به چند زبانه بودن را دارند را ذخیره می کنم مانند:
active , date , . . .
اما در جدول دوم ویژگی هایی که نیاز به ترجمه دارند را ذخیره می کنم به همراه یک شناسه از جدول اول و یا فیلد که زبان را مشخص می کند .
حالا شما تنها کافیست که یک رابطه بین این دو ایجاد کنید.
برای مدلی که برای جدول دوم می سازید که در اینجا می شود
PageInfo
میبایست یک
default scope
بنویسید که یک شرط به تمام
query
ها اضافه کند و آن هم می تواند چیزی شبیه به این باشد .
به واسطه این اسکپ هر زمان شما نیاز به داده داشته باشید داده ها با فرمت مورد نیاز برای شما ایجاد خواهد شد .
فقط شما باید به این نکته توجه داشته باشید که برای فرم هایی که میخواهید به منظور ورود اطلاعات از آن ها استفاده نمایید باید ۲ مدل ارسال کنید ، هم مدل اصلی و هم مدل اینفو .
اگه بازم نیاز به توضیح داشتی بگو تا بیشتر برات بگم
[rtl][font=“Tahoma”]راستش راهی که جناب mereeelin فرمودند نمیدونم چرا یه جوری بهم نمیچسبه!! نمیدونم چرا البته جسارت کردم.
@Shahcheraghean ، لطفاً شما اول مشخص کنید که میخواهید محتوا که قراره در دیتابیس ذخیره بشن رو برای زبان های مختلف مجزا ذخیره کنید و یا اینکه صرفاً میخواهید پیغام های درون سایت رو به زبان های مختلف به کاربر نمایش بدید.
یعنی روی DATA میخواهید چند زبانه بودن رو داشته باشید و یا روی VIEW
یا بازهم آیا یعنی میخواهید متن یک خبر به زبان های مختلف توسط کاربر وارد و در دیتابیس ذخیره بشه و یا اینکه خبر تک زبانه درج میشه و سپس تنها منوی اخبار، کلمه تاریخ و کلماتی که به view مربوط هستند رو میخواهید با زبان های مختلف نمایش بدید؟
می خواهم که کاربر مطالبی را که وارد می کند به چند زبان مثلا ۲،۳ یا حتی ۴ زبان وارد کند. حالا اینجا هم باید مطالب توی دیتابیس چند زبان باشند و هم مطالب خود view. برای ترجمه مطالب view مشکلی نیست می دونم که بامتد Yii::t() انجام میشه ولی برای مطالب توی دیتابیس نمی دونم از چه راههی برم یا حتی چطوری توی مدلم و ویو پیاده سازی کنم.
[rtl][font="Tahoma"]بیشتر که فکر کردم دیدم راه جناب mereeelin ، راه بدی هم نیست و میشه گفت منطقی هم هست!
من مشکلم با دو تکه کردن جدول بود که با توجه به نوع مسئله، نمیتونه غلط باشه. البته با کمی هم ارفاق میشه دو جدول رو یکی کرد. که خب یک سری فیلد تکراری بوجود میاد مثل status و ویژگی هایی از این دست، که خب میشه اینطور استدلال کرد که هر رکورد دیتا در سایت برای هر زبان ماهیت مستقل داره و برای هر رکورد محتوا علاوه بر عنوان و متن و غیره، میتونه ویژگی های متفاوتی وجود داشته باشه، اینطور ادغام دو جدول میتونه توجیح پذیر باشه. یعنی فرض میکنیم یک مطلب در زبان انگلیسی ممکنه فعال باشه ولی در زبان فارسی غیرفعال. یا حتی یک مطلب ممکنه برای زبان انگلیسی وجود داشته باشه ولی برای زبان فارسی وجود نداشته باشه.
در حالتی که شما فرمودید دو جدول مجزا میشن. چون یک جدول اصلی داریم که برای تمام زبان ها ابتدا رکوردی از اون خونده میشه و به تناسب نوع زبان سیستم دیتا را از جدول دوم میخواند، پس اگر برای یک زبان متنی وارد نشه، طبعاً با تغییر زبان، جاش توی سایت خالی میمونه که شاید خیلی صورت جالبی نداشته باشه.
البته پیاده سازی هر یک از روشهای فوق بستگی به نوع سناریوی پروژه داره.
ضمناً در حالت بهینه تر میشه به هر یک از روشهای فوق یک جدول دیگه هم اضافه کرد. یعنی برای نگهداری خود زبان ها هم از یک جدول مستقل استفاده کنیم که دیگه یک فیلد enum برای en و fa و… نگذاریم و یک رابطه چند به یک با جدول زبان برقرار کنیم.
برای استفاده از روشهای فوق، فکر میکنم این اکستنشن بهتون کمک کنه:
البته باش کار نکردم ولی به نظر میرسه به چیزی که درموردش صحبت شد نزدیک باشه.
اینها همه برای نگهداری دیتا ها بود.
اما برای چندزبانه کردن کلمات درون سایت هم از همون توابع I18N که yii در اختیارمون میگذاره استفاده میشه که به سه روش CPhpMessageSource و CGettextMessageSource و CDbMessageSource نگهداری و مدیریت میشه و قابل استفاده هستند.
ولی راه آقا رضا بیشتر بهم می چسبه تا راهی که شما پیشنهاد دادید.
تو راه اقا رضا ما توی جداول برای ترجمه به ازا هر فیلد فقط یه فیلد تکراری خواهیم داشت ولی توی اون روش شما به هر فیلد توی جدول دیگه چند فیلد دارید که این علاوه بر یک جدول اضافه دو فیلد id نیز اضافه می کند.
حال شما فرض بگیرید تعداد جداولی که قرار است مطالبش ترجمه شوند ۳ عدد باشند. تو اون حالت باید ۳ جدول اضافه دیگر نیز داشته باشیم.
[font="Tahoma"][rtl]میتونی همون روشی رو که گفتم رو با دو تا جدول پیاده کنی و از طریق id به هم وصل کنی راحت یعنی در کل اون فیلدهای تکراری شناسه های عدد میشن ک[/rtl][/font]
[font="Tahoma"][rtl]اما یه سوال ، نهایتا چند تا زبان داری؟[/rtl][/font]