Yii Framework Forum: سایت چند زبانه با Yii - Yii Framework Forum

Jump to content

  • (2 Pages)
  • +
  • 1
  • 2
  • You cannot start a new topic
  • You cannot reply to this topic

سایت چند زبانه با Yii

#1 User is offline   Shahcheraghean 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 478
  • Joined: 12-December 12
  • Location:Mashhad, IRAN

  Posted 03 March 2013 - 04:09 AM


یه سایت می خوام بنویسم به زبان های فارسی، عربی و انگلیسی. آقای خلقی مطلبی اینجا نوشتند که خیلی کمکم کرد ولی چندتا موضوع جدید.
۱- برای چیدمان استایل به صورت راست چین چطوری باید عمل کرد؟
۲- برای نگهداری مطالب سایت به چند زبان چه راههایی را پیشنهاد می کنید؟



www.shgn.ir
www.shgn.ir/yii-framework/
yii2.swsco.ir
In a world without any fences or walls,Who needs Gates or Windows!
0

#2 User is offline   rezaonline.net 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 120
  • Joined: 20-June 12

Posted 03 March 2013 - 06:57 AM

اگر خواستید از دیتابیس استفاده کنید با سه تا فیلد lng,str,trans که اولی پارامترهای en,fa,ir بگیری دومی جملات انگلیسی و سومی ترجمه مناسب . بعد توی سایت هر زبانی که ست شده بود از دیتابیس واکشی کنید . البته از فایل هم میتونید استفاده کنید اما دیتابیس راحتتره و یک کش 72 ساعته روش بذارید فکر نکنم به جایی بربخوره

rezaworkshop.ir - rezaonline.net/blog
php5 , mysql , html5 , css3 , jquery + ajax
0

#3 User is offline   Nabi 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 208
  • Joined: 22-February 12
  • Location:Ahwaz

Posted 03 March 2013 - 07:52 AM

برای سایتهای چند زبانه از Yii::t()‎ استفاده میشه.
اینجوری هم میشه زبان ست کرد
Yii::app()->language = 'en'; 



وقتی پیغام میذارید، بی زحمت متنتون رو انتخاب کنید و این دو تا کار ناقابل رو هم انجام بدید:
1. از اون بالا RTL رو انتخاب کنید.
2. فونت رو هم Tahoma بگذارید.
که چشمون در نیاد.
دمت گرم!

www.IranPHP.ir
0

#4 User is offline   Shahcheraghean 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 478
  • Joined: 12-December 12
  • Location:Mashhad, IRAN

Posted 03 March 2013 - 09:12 AM

View Postrezaonline.net, on 03 March 2013 - 06:57 AM, said:

اگر خواستید از دیتابیس استفاده کنید با سه تا فیلد lng,str,trans که اولی پارامترهای en,fa,ir بگیری دومی جملات انگلیسی و سومی ترجمه مناسب . بعد توی سایت هر زبانی که ست شده بود از دیتابیس واکشی کنید . البته از فایل هم میتونید استفاده کنید اما دیتابیس راحتتره و یک کش 72 ساعته روش بذارید فکر نکنم به جایی بربخوره



با تشکر.
فقط این چیزی که شما گفته اید فقط برای نگهداری ۲ زبان انگلیسی و فارسی است پس عربیش چی شد.

www.shgn.ir
www.shgn.ir/yii-framework/
yii2.swsco.ir
In a world without any fences or walls,Who needs Gates or Windows!
0

#5 User is offline   rezaonline.net 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 120
  • Joined: 20-June 12

Posted 03 March 2013 - 04:03 PM

برای نگه داری n زبان هست .
rezaworkshop.ir - rezaonline.net/blog
php5 , mysql , html5 , css3 , jquery + ajax
0

#6 User is offline   Shahcheraghean 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 478
  • Joined: 12-December 12
  • Location:Mashhad, IRAN

Posted 04 March 2013 - 12:08 AM

ببخشید متوجه نمی شم. چطوری میگید برای n زبان.
یکی از فیلدها که انگلیسی را نگه می دارد، یکی هم نوع زبان دیگری ترجمه مناسب به یک زبان است.
حالا برای نگهداری ترجمه مثلا نام یک کالا به زبان انگلیسی که هیچی، میگیم زبان ترجمه فراسی آن را هم تویtrans میزاریم و نوع زبان را هم توی lng می زاریم.
حالا می خوام همین نام کالا را به ترجمه عربی هم نگهدارم، چکار باید بکنم؟
حالا اینم بگم که این موضوع برای چند جدول با چند فیلد باید پیاده سازی بشه.
از اینها گذشته برای واکشی اطلاعات از دیتابیس چطوری باید عمل کرد، توی مدل؟ توی کنترلر؟ یا توی ویو باید زبان را مشخص و براساس آن از دیتابیس واکشی کنم؟

www.shgn.ir
www.shgn.ir/yii-framework/
yii2.swsco.ir
In a world without any fences or walls,Who needs Gates or Windows!
0

#7 User is offline   Shahcheraghean 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 478
  • Joined: 12-December 12
  • Location:Mashhad, IRAN

Posted 04 March 2013 - 01:02 AM

دوستان اینو تازه پیدا کردم. نظرتون درباره اش چیه؟
کلاس: CDbMessageSource

www.shgn.ir
www.shgn.ir/yii-framework/
yii2.swsco.ir
In a world without any fences or walls,Who needs Gates or Windows!
0

#8 User is offline   Ostovar IT 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 76
  • Joined: 09-June 11
  • Location:iran, tehran

Posted 04 March 2013 - 08:03 AM

لینک های زیر آموزش طراحی سایت های چند زبانه در ایی هست مطالعه کنید مشکل داشتید همین جا مطرح کنید.
استفاده از فایل:
http://www.yiiframew...-yii-framework/
مفاهیم کلی:
http://www.yiiframew.../en/topics.i18n
استفاده از دیتابیس:
http://www.yiiframew...DbMessageSource

تا بینهایت زبان رو با روش های فوق میتونید در یک سایت پشتیبانی کنیم
تحلیل، طراحی و برنامه نویسی وب، آموزش "ایی" فریمورک و برنامه نویسی وب، اخبار، مقالات، درج آگهی، استخدام و ... در وب سایت فناوری اطلاعات استوار
www.ostovarit.com
09128157188
2

#9 User is offline   Shahcheraghean 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 478
  • Joined: 12-December 12
  • Location:Mashhad, IRAN

Posted 04 March 2013 - 08:23 AM

خیلی ممنون، خدوم هم همین به همین راه رسیده بودم و این کلاس CDbMessageSource را تازه امروز پیداش کردم.
ولی یه موضوع دیگه، اون هم این که توی دیتابیس فرض کنید چندتا جدول دارم که هر کدوم از اونها چند فیلد دارند که باید ترجمه شوند. حالا راه حل چیه؟
از این گذشته چطوری باید اطلاعات را به ازای هر زبان و توی چه مرحله ای واکشی کنم؟

www.shgn.ir
www.shgn.ir/yii-framework/
yii2.swsco.ir
In a world without any fences or walls,Who needs Gates or Windows!
0

#10 User is offline   Shahcheraghean 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 478
  • Joined: 12-December 12
  • Location:Mashhad, IRAN

Posted 05 March 2013 - 10:26 AM

دوستان کسی نیست داستان را ادامه بده. بنده همچنان منتظرم. چکار باید بکنم؟

www.shgn.ir
www.shgn.ir/yii-framework/
yii2.swsco.ir
In a world without any fences or walls,Who needs Gates or Windows!
0

#11 User is offline   Shahcheraghean 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 478
  • Joined: 12-December 12
  • Location:Mashhad, IRAN

Posted 11 March 2013 - 12:30 AM

دوستان واقعا کسی نیست که روی i18n کار کرده باشه؟
خیلی خیلی گیج شدم؟

www.shgn.ir
www.shgn.ir/yii-framework/
yii2.swsco.ir
In a world without any fences or walls,Who needs Gates or Windows!
0

#12 User is offline   mereeelin 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 42
  • Joined: 29-October 11

Posted 11 March 2013 - 07:38 AM

View PostShahcheraghean, on 11 March 2013 - 12:30 AM, said:

دوستان واقعا کسی نیست که روی i18n کار کرده باشه؟
خیلی خیلی گیج شدم؟




سلام
من خودم تو سیستم های خودم از یه تکنیک استفاده می کنم که این اجازه رو بهم می ده که بتونم هر تعداد زبان که می خوام داشته باشم و بتونم در آینده هم ازشون استفاده کنم .
در مرحله اول من تمام جداولی رو که باید به چند زبان داده داشته باشن رو به ۲ جدول تبدیل می کنم ، به عنوان مثال اگر جدول
page
داشته باشم ای جدول رو به ۲ جدول
page و page_info
تبدیل می کنم
که با هم رابطه یک به چند دارند.
در جدول
page
من اطلاعات اصلی بدون ویژگی هایی که نیاز به چند زبانه بودن را دارند را ذخیره می کنم مانند:
active , date , . . .
اما در جدول دوم ویژگی هایی که نیاز به ترجمه دارند را ذخیره می کنم به همراه یک شناسه از جدول اول و یا فیلد که زبان را مشخص می کند .
حالا شما تنها کافیست که یک رابطه بین این دو ایجاد کنید.
برای مدلی که برای جدول دوم می سازید که در اینجا می شود
PageInfo
میبایست یک
default scope
بنویسید که یک شرط به تمام
query
ها اضافه کند و آن هم می تواند چیزی شبیه به این باشد .


public function defaultScope()
{
return array(

'condition'=>"page_lang = :lang",
'params'=>array(":lang" => $_GET['language']),
);
}


به واسطه این اسکپ هر زمان شما نیاز به داده داشته باشید داده ها با فرمت مورد نیاز برای شما ایجاد خواهد شد .

فقط شما باید به این نکته توجه داشته باشید که برای فرم هایی که میخواهید به منظور ورود اطلاعات از آن ها استفاده نمایید باید ۲ مدل ارسال کنید ، هم مدل اصلی و هم مدل اینفو .

اگه بازم نیاز به توضیح داشتی بگو تا بیشتر برات بگم

1

#13 User is offline   Shahcheraghean 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 478
  • Joined: 12-December 12
  • Location:Mashhad, IRAN

Posted 12 March 2013 - 02:41 AM

ممنون از توجهتان.
ولی اینطوری افزونگی داده های دیتابیس زیاد نمیشه. به نظرم راه آقا رضا بهتره جواب بده که همه توی یک جدول و برای هر زبان یه رکورد ذخیره میشه؟ نه؟

www.shgn.ir
www.shgn.ir/yii-framework/
yii2.swsco.ir
In a world without any fences or walls,Who needs Gates or Windows!
0

#14 User is offline   mereeelin 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 42
  • Joined: 29-October 11

Posted 12 March 2013 - 12:57 PM

View PostShahcheraghean, on 12 March 2013 - 02:41 AM, said:

ممنون از توجهتان.
ولی اینطوری افزونگی داده های دیتابیس زیاد نمیشه. به نظرم راه آقا رضا بهتره جواب بده که همه توی یک جدول و برای هر زبان یه رکورد ذخیره میشه؟ نه؟





سلام
نه ، زمانی میگیم افزونگی داریم که یک داده رو چند جای مختلف ذخیره کنید ، در حالی که شما داده ی تکراری ندارید .
من این روش رو تست گرفتم و روی یه پایگاه داده ای ۵۰۰۰ داده ای بدون مشکل کار می کنه

0

#15 User is offline   Shahcheraghean 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 478
  • Joined: 12-December 12
  • Location:Mashhad, IRAN

Posted 13 March 2013 - 01:17 AM

ممنون. از راهنمایتان.
آیا راههای دیگری هم برای این کار وجو دارد؟
راستی نظرتان درباره روش کلاس خود YII به نام CDbMessageSource چیه؟

www.shgn.ir
www.shgn.ir/yii-framework/
yii2.swsco.ir
In a world without any fences or walls,Who needs Gates or Windows!
0

#16 User is offline   Nabi 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 208
  • Joined: 22-February 12
  • Location:Ahwaz

Posted 13 March 2013 - 01:46 AM

راستش راهی که جناب mereeelin فرمودند نمیدونم چرا یه جوری بهم نمیچسبه!! نمیدونم چرا :D البته جسارت کردم.

@Shahcheraghean ، لطفاً شما اول مشخص کنید که میخواهید محتوا که قراره در دیتابیس ذخیره بشن رو برای زبان های مختلف مجزا ذخیره کنید و یا اینکه صرفاً میخواهید پیغام های درون سایت رو به زبان های مختلف به کاربر نمایش بدید.
یعنی روی DATA میخواهید چند زبانه بودن رو داشته باشید و یا روی VIEW
یا بازهم آیا یعنی میخواهید متن یک خبر به زبان های مختلف توسط کاربر وارد و در دیتابیس ذخیره بشه و یا اینکه خبر تک زبانه درج میشه و سپس تنها منوی اخبار، کلمه تاریخ و کلماتی که به view مربوط هستند رو میخواهید با زبان های مختلف نمایش بدید؟



وقتی پیغام میذارید، بی زحمت متنتون رو انتخاب کنید و این دو تا کار ناقابل رو هم انجام بدید:
1. از اون بالا RTL رو انتخاب کنید.
2. فونت رو هم Tahoma بگذارید.
که چشمون در نیاد.
دمت گرم!

www.IranPHP.ir
0

#17 User is offline   Shahcheraghean 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 478
  • Joined: 12-December 12
  • Location:Mashhad, IRAN

Posted 13 March 2013 - 04:55 AM

ببینید. یه چیزی شبیه به همان.
می خواهم که کاربر مطالبی را که وارد می کند به چند زبان مثلا ۲،۳ یا حتی ۴ زبان وارد کند. حالا اینجا هم باید مطالب توی دیتابیس چند زبان باشند و هم مطالب خود view. برای ترجمه مطالب view مشکلی نیست می دونم که بامتد Yii::t() انجام میشه ولی برای مطالب توی دیتابیس نمی دونم از چه راههی برم یا حتی چطوری توی مدلم و ویو پیاده سازی کنم.

www.shgn.ir
www.shgn.ir/yii-framework/
yii2.swsco.ir
In a world without any fences or walls,Who needs Gates or Windows!
0

#18 User is offline   Nabi 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 208
  • Joined: 22-February 12
  • Location:Ahwaz

Posted 14 March 2013 - 04:23 AM

بیشتر که فکر کردم دیدم راه جناب mereeelin ، راه بدی هم نیست و میشه گفت منطقی هم هست!

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

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

البته پیاده سازی هر یک از روشهای فوق بستگی به نوع سناریوی پروژه داره.

ضمناً در حالت بهینه تر میشه به هر یک از روشهای فوق یک جدول دیگه هم اضافه کرد. یعنی برای نگهداری خود زبان ها هم از یک جدول مستقل استفاده کنیم که دیگه یک فیلد enum برای en و fa و... نگذاریم و یک رابطه چند به یک با جدول زبان برقرار کنیم.

برای استفاده از روشهای فوق، فکر میکنم این اکستنشن بهتون کمک کنه:
http://www.yiiframew...l-active-record
البته باش کار نکردم ولی به نظر میرسه به چیزی که درموردش صحبت شد نزدیک باشه.

اینها همه برای نگهداری دیتا ها بود.

اما برای چندزبانه کردن کلمات درون سایت هم از همون توابع I18N که yii در اختیارمون میگذاره استفاده میشه که به سه روش CPhpMessageSource و CGettextMessageSource و CDbMessageSource نگهداری و مدیریت میشه و قابل استفاده هستند.






وقتی پیغام میذارید، بی زحمت متنتون رو انتخاب کنید و این دو تا کار ناقابل رو هم انجام بدید:
1. از اون بالا RTL رو انتخاب کنید.
2. فونت رو هم Tahoma بگذارید.
که چشمون در نیاد.
دمت گرم!

www.IranPHP.ir
0

#19 User is offline   Shahcheraghean 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 478
  • Joined: 12-December 12
  • Location:Mashhad, IRAN

Posted 15 March 2013 - 10:28 AM

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

www.shgn.ir
www.shgn.ir/yii-framework/
yii2.swsco.ir
In a world without any fences or walls,Who needs Gates or Windows!
1

#20 User is offline   rezaonline.net 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 120
  • Joined: 20-June 12

Posted 15 March 2013 - 08:43 PM

میتونی همون روشی رو که گفتم رو با دو تا جدول پیاده کنی و از طریق id به هم وصل کنی راحت یعنی در کل اون فیلدهای تکراری شناسه های عدد میشن ک

اما یه سوال ، نهایتا چند تا زبان داری؟

rezaworkshop.ir - rezaonline.net/blog
php5 , mysql , html5 , css3 , jquery + ajax
0

Share this topic:


  • (2 Pages)
  • +
  • 1
  • 2
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users