چند زبانه کردن وب سایت

phpweb

Active Member
من می خوام یه وب سایت رو به سه زبان فارسی، انگلیسی و فرانسوی طراحی کنم.

تا حالا وب سایت چند زبانه طراحی نکردم.

لطفا بگید برای اینکار فقط باید زبان صفحات اصلی سایت که بازدیدکنده ها می بینن رو تغییر بدم یا اینکه کنترل پنل رو هم باید تغییر بدم؟

اگر سایت دارای فروشگاه هست، برای سه زبانه کردن سایت، باید سه فروشگاه ایجاد کنم که هرکدوم یه زبان مخصوص به خودشون دارن یا اینکه باید از برنامه نویسی استفاده کنم و متنهای توی صفحات رو به زبانهای مختلف نمایش بدم؟

کلا هیچ ایده ای ندارم در این مورد لطفا راهنمایی کنید.
 

masima

Member
لطفا بگید برای اینکار فقط باید زبان صفحات اصلی سایت که بازدیدکنده ها می بینن رو تغییر بدم یا اینکه کنترل پنل رو هم باید تغییر بدم؟
به نظرم اگه کسی که قراره تو سایت مطلب بذاره ؛ زبانش فارسی هست (که مطمئنم این جوره! ) چه لزومی داره کنترل پنل رو تغییر بدید؟
باید سه فروشگاه ایجاد کنم که هرکدوم یه زبان مخصوص به خودشون دارن یا ..
این یعنی چی؟ بالاخره کد نویسی تون که فرقی نمیکنه ؟ درسته؟ فقط میخواین نمایشش فرق کنه دیگه ! برای طراحی جدول ها اگه من بودم برای هر جنسی 3 تا نام میذاشتم به زبان های مختلف .. مثلا برای کتاب میشد اینجوری : کتاب - book - فرانسه کتاب ! موفق باشید
 

phpweb

Active Member
به نظرم اگه کسی که قراره تو سایت مطلب بذاره ؛ زبانش فارسی هست (که مطمئنم این جوره! ) چه لزومی داره کنترل پنل رو تغییر بدید؟ این یعنی چی؟ بالاخره کد نویسی تون که فرقی نمیکنه ؟ درسته؟ فقط میخواین نمایشش فرق کنه دیگه ! برای طراحی جدول ها اگه من بودم برای هر جنسی 3 تا نام میذاشتم به زبان های مختلف .. مثلا برای کتاب میشد اینجوری : کتاب - book - فرانسه کتاب ! موفق باشید
می خوام بدونم استاندارد کار چیه.

به هر حال وقتی می گیم سایت چند زبانه هست باید زبان همه قسمتهای سایت تغییر کنه.
 

greencat

Member
سلام
معمولا روال کار این طوری هستش که شما به تعداد زبان‌هایی که می‌خواهید سایت نمایش داده بشه صفحه‌ی اون زبان رو توی دایرکتوری language قرار می‌دید، خوب حالا اگر کسی سایت رو خواست به زبان english ببینه باید فایل زبان انگلیسی include بشه و با توجه به فایل include شده باید dir های سایتتون هم تغییر کنه اگر فارسی نشون داده میشه rtl و اگر لاتین ltr و یه تیبل هم در دیتابیستون میخوایید به اسم setting مثلا که این dir ها رو برای زبان مورد نظرتون نگه داری کنه، و همه dir هاتون باید متغییر مانند باشه، تا قابل تغییر و set شدن باشه.
برای هر مطلب هم به زبان‌ها مختلف لزومی نداره جدول متفاوتی وجود داشته باشه همه مطالب رو به هر زبانی که باشه توی 1 جدول ذخیره کنید و بهشون فیلد زبان اختصاص بدید برای هر رکورد.
موفق باشید.
 

masima

Member
استاندارد کار همینه که greencat عزیز گفتن ؛ یعنی در واقع شما برای 3 زبان باید 3 تا سایت با تمام صفحه ها طراحی کنید و داخل پوشه زبان مربوطه بذارید ! خب طبیعیه که زحمتش زیاده ! بعد بر اساس range IP Address صفحه ایندکس سایت رو بارگزاری نمایید ؛ مثلا برای IP های ایران زیر پوشه fa از پوشه language رو انتخاب کنید و index.html رو نمایش بدید ! و برای دیگر IP ها زبان پیش فرض رو انگلیسی بذارید !
برای هر مطلب هم به زبان‌ها مختلف لزومی نداره جدول متفاوتی وجود داشته باشه همه مطالب رو به هر زبانی که باشه توی 1 جدول ذخیره کنید و بهشون فیلد زبان اختصاص بدید برای هر رکورد.
منظور منم همین بود ؛ ولی فک کنم خوب تشریح نکردم !
 
میتونید عنوان های ثابت سیستم رو ( نوشته های ثابت ) به صورت متغیر وارد کنید و بعد با استفاده از چندین فایل جداگانه زبان مقدار این متغیر ها رو بسته به زبان مربوطه تغییر بدید.
 

Masoud1365

مدیر انجمن
یعنی در واقع شما برای 3 زبان باید 3 تا سایت با تمام صفحه ها طراحی کنید و داخل پوشه زبان مربوطه بذارید ! خب طبیعیه که زحمتش زیاده ! بعد بر اساس range IP Address صفحه ایندکس سایت رو بارگزاری نمایید ؛ مثلا برای IP های ایران زیر پوشه fa از پوشه language رو انتخاب کنید و index.html رو نمایش بدید ! و برای دیگر IP ها زبان پیش فرض رو انگلیسی بذارید !
خیر اینجوری نیست !
کلا برای طراحی سایت ها یچند زبانه فقط باید یه فیلد lang_id + یه فایل که حاوی پیام های سایت به زبان های مختلف هست رو درست کنید !
همه چیزش مثل طراحی یک وب معمولی هست + اون فیلد هایی که گفتم ×
موفق
 

phpweb

Active Member
خیر اینجوری نیست !
کلا برای طراحی سایت ها یچند زبانه فقط باید یه فیلد lang_id + یه فایل که حاوی پیام های سایت به زبان های مختلف هست رو درست کنید !
همه چیزش مثل طراحی یک وب معمولی هست + اون فیلد هایی که گفتم ×
موفق

توی سایتها می شه ثبت لینک کرد و همچنین به منوها و زیرمنوها اضافه کرد.

با توجه به اینکه می شه گفت لینک دهنده ها و منوهای سایت جز اجزای ثابت سایت هستن، ایا برای این دو بخش از سایت هم باید یه فیلد مربوط به زبان در نظر گرفت؟
 
همینطور که masoud1365 گفت, میتونید زبان رو از یک variable مثل file.php?lang=en بگیرید. بعد ببینید برای مثال اگه مقدار lang بود en, فایل انگلیسی رو load کنه که تمام متغیر ها و متون ثابت به زبان انگلیسی هست. در صورت نبود variable مورد نظر هم یک زبان default رو قرار بده. حالا شما میتونید در فایل زبان تعریف کنید هر بخش چه متنی داشته باشه برای مثال Homepage متن "صفحه اصلی" یا ...

موفق باشید.
 

Masoud1365

مدیر انجمن
منوهای شما ممکن هست که ثابت هم نباشه !
یعنی توی فارسی یه چیزهایی داشته باشی که توی انگلیسی نداشته باشی !
شما برای همه قسمت ها این فیلد رو در نظر بگیر که سایتت multi language بشه و مثلا اگر در آینده خواستی یه زبان دیگه اضافه کنی دچار دردسر نشی و فقط یه رکورد به جدول زبانت اضافه میکنی همین :wink:
 

phpweb

Active Member
منوهای شما ممکن هست که ثابت هم نباشه !
یعنی توی فارسی یه چیزهایی داشته باشی که توی انگلیسی نداشته باشی !
شما برای همه قسمت ها این فیلد رو در نظر بگیر که سایتت multi language بشه و مثلا اگر در آینده خواستی یه زبان دیگه اضافه کنی دچار دردسر نشی و فقط یه رکورد به جدول زبانت اضافه میکنی همین :wink:
کلا برای طراحی سایت ها یچند زبانه فقط باید یه فیلد lang_id + یه فایل که حاوی پیام های سایت به زبان های مختلف هست رو درست کنید !

می شه بگید منظور از "یه فایل که حاوی پیام های سایت به زبان های مختلف هست" چیه؟

مثلا وقتی که کاربر یه فرم رو بدرستی پر نمی کنه، باید بهش هشدار بدیم، منظورتون از پیامهای سیستم این نوع هشدارهاست یا منظورتون چیز دیگه ای هست؟

سوال دیگه اینکه دسترسی به این فایل چطوره؟ باید توی همه صفحات اینکلود بشه؟
 

greencat

Member
سلام
خیر masima جان منظور من این نبودش!! چون راه غیر اصولی و کار اضافی هستش.
شما در سیستمی که می‌نویسید برای هیچ کلمه‌ای از متن رو در اون به صورت عادی نمی‌نویسید و از متغییر استفاده می‌کنید مثلا برای صفحه‌ی اصلی می‌نویسید mainpage$ حالا در همه‌ی صفحه‌هات زبانها که در اول اسکریپت include کردید ما متغییر mainpage$ رو داریم توی زبان فراسی بهش مقدار "صفحه‌ی اصلی" نسبت داده شده و در صفحه‌ی زبان انگلیسی بهش مقدار "home" مثلا مقدار دهی شده که این فایل زبان هم با یک combobox توسط کاربر تعیین میشه، این طوری شما 1 صفحه نوشتید و چون برای کلماتش از متغییرها استفاده کردید به هر زبانی می‌تونید اون رو بالا بیارید.

در مورد ثابت نبودن منو‌ها و زیر منو‌ها هم مثل cms ها عمل کنید، و توی فایل زبان تمامی لغات رو در نظر بگیرید چه استفاده بشه چه نشه، اگر در سورس اون کلمه استفاده بشه و زیر منوش ساخته بشه مقدارش از فایل لود میشه و اگر اصلا زیر منوش ساخته نشه اون متغییر هم در سورس کد وجود نداره که بخواد مقدارش از فایل زبان جایگزین بشه، نیازی به فیلد در دیتابیس برای این قسمت ها نیست و فقط به تعداد زبان‌هایی که دارید رکورد نیاز هستش مثلا اگر فارسی انگلیسی و فرانسه هستش فقط 3رکورد در دیتابیس برای زبان می‌خواد که ویژگی های اون زبان رو ذخیره کنه مثل direction های اون زبان همین و گرنه برای کلمات هیچ چیزی نمیخواد در دیتابیس ذخیره بشه.
موفق باشید.
 

Cyletech

Member
من پاسخ دیگر دوستان رو نخوندم ، اگر مشابه پاسخ من وجود داره ، پاسخ اون دوستمون پیش از منه :rose:
اگر بخوای یه نرم افزاری رو ارائه بدی که از چندین زبان (تعدادش مهم نیست) پشتیبانی کنه ، اگر من بودم برای راحتی در کار ساب دامین های مختلف میساختم و هر ساب دامین مخصوص یک زبان قرار می دادم.
ولی اگر میخوای اینطوری عمل نکنی ، در یک پوشه زبان ها رو جدا از هم پوشه بندی کن و به کاربر امکان انتخاب زبان رو بده. بطور پیش فرض زبان مثلاً پارسی زبان سایت هست. اگر کاربر بیاد و زبان انگلیسی رو انتخاب کنه ، آی پی اون و مدل مرورگرش رو ذخیره کن در یک فایل (پایگاه داده برای اینکار مناسب نیست) و بعد برای اون آی پی و مرورگر زبان سایت رو انگلیسی قرار بده. وقتی کاربر وارد هر صفحه میشه ، شما در اول فایل بررسی کنید فایل رو و اگر وجود داشت اون کاربر اطلاعاتش در فایل اونوقت همون زبانی که خواسته را از فایل بیرون بکش و جایگزین زبان پیشفرض کن.
 

phpweb

Active Member
دوستان تا الان متوجه شدم که باید یه فایل ایجاد کنم و متن های ثابت سایت رو توی متغیرهایی که توی این فایل هستن قرار بدم. بعد فایل رو باید توی سایت اینکلود کنم و متغیرها رو در جای مناسب نمایش بدم.

برای زبانهای مختلف، به راحتی می تونیم یه فایل جداگانه ایجاد کنیم یا اینکه توی همون یک فایل، زبانهای دیگه رو اضافه کنیم.

تا اینجای کار درست هست؟


بحث هنوز ادامه داره.
 
آخرین ویرایش:

eAmin

Well-Known Member
بهترین و اصولی ترین راه استفاده از xml و یا json هست، شما می تونید یک parser بنویسید و محتویات فایلهای فوق رو استخراج کنید و در جای مناسب قرار بدید. نحوه استفاده هم بستگی به خودتون داره می تونید به تعداد زبانهای مورد نیاز فایل جدید بسازید و یا تمامی زبانها رو در یک فایل قرار بدید.
با استفاده از قالبهای فوق به علت اینکه ویرایش اونها مستقل از زبان php هست، شما خیلی راحت می تونید، زبانهای مورد نیاز رو حذف و یا اضافه کنید.
یکی از کاربردهای xml و json در همین موارد هست. احتمالا در سیستم های حرفه ای و اصولی باید دیده باشید که از روشهای مشابه استفاده کردند.

موفق باشید.
 
آخرین ویرایش:

phpweb

Active Member
بهترین و اصولی ترین راه استفاده از xml و یا json هست، شما می تونید یک parser بنویسید و محتویات فایلهای فوق رو استخراج کنید و در جای مناسب قرار بدید. نحوه استفاده هم بستگی به خودتون داره می تونید به تعداد زبانهای مورد نیاز فایل جدید بسازید و یا تمامی زبانها رو در یک فایل قرار بدید.
با استفاده از قالبهای فوق به علت اینکه ویرایش اونها مستقل از زبان php هست، شما خیلی راحت می تونید، زبانهای مورد نیاز رو حذف و یا اضافه کنید.
یکی از کاربردهای xml و json در همین موارد هست. احتمالا در سیستم های حرفه ای و اصولی باید دیده باشید که از روشهای مشابه استفاده کردند.

موفق باشید.
طراحی پارسر بلد نیستم.

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

phpweb

Active Member
الان دیگه اصول کار سایتهای چند زبانه رو متوجه شدم و می دونم که بجای قرار دادن متن ثابت توی صفحات سایت، باید این متن ها رو توی متغیر قرار بدیم و متغیر رو نمایش بدیم. برای تغییر زبان سایت هم باید از دستورات شرطی استفاده کنیم و متغیرهای مربوط به یه زبان خاص رو توی صفحه نمایش داد.

خود متغیرها هم توی یه فایل مربوط به زبان قرار می گیرن و این فایل رو باید توی صفحات اینکلود کنیم.
 

phpweb

Active Member
یه مشکل جدید برام پیش اومده و اونم مشکل با نمایش هشدارها به کار بر هست.

برای مثال اگر کاربر یه فرم رو به درستی پر نکرده بود، باید بهش هشدار بدیم.

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

برای این حالت چطور باید هشدارها رو بر اساس زبان سایت نمایش بدیم؟

 

eAmin

Well-Known Member
طراحی پارسر بلد نیستم.

اگر یه آموزش برای نوشتن پارسر برای سایتهای چند زبانه سراغ دارید لطفا لینکش رو قرار بدید.
در php نیاز به نوشتن پارسر از پایه ندارید.
پارسرهای مختلفی در php وجود داره که بصورت آماده هست و می تونید استفاده کنید. SimpleXML , DOM , XMLReader, XMLWriter و ...
JSON هم نیاز به parser نداره! json_decode برای شما اینکار رو انجام می ده و بصورت آرایه می تونید به محتویات دسترسی داشته باشید.
 

greencat

Member
هشدار دادن به دو صورت انجام می شه، اول هشدار رو توی سسشن قرار می دیم و بعد از فراخوانی صفحه، سسشن رو نمایش می دیم. روش دوم هشدار رو توی یه متغیر قرار می دیم و بعد از اینکلود کرد فرم این هشدار رو به کاربر نمایش می دیم.
چرا کار رو اینقدر برای خودتون سخت می‌کنید؟!!!!
نیازی به استفاده از session نیست! فرم رو به همون صفحه ارسال کنید اگر خطایی بود متن خطا رو توی فایل زبان بنویسید و به یه متغییر نسبت بدید (حالا به هر زبانی ، یعنی error_mail$ توی صفحه‎ی زبان فارسی ترجمه شده به " ایمیل وارد شده نا معتبر است" و در صفحه‌ی زبان انگلیسی ترجمه شده "the mail not valid") حالا اگر کاربر زبان فارسی رو انتخاب کرده بود متغییر پیغام رو به فراسی نشون میده و اگر انگلیسی انتخاب شده بود کاربر متن خطا رو به انگلیسی می‌بینه، به همین راحتی!
برای ذخیره کردن زبان انتخاب شده توسط کاربر برای زبان پیش فرض هم از کوکی‌ها استفاده کنید و نه از دیتابیس.
موفق باشید.
 

جدیدترین ارسال ها

بالا