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

phpweb

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

من می خوام همه خطاهای مربوط به فرمها رو توی یه فایل جدا بنویسم و این فایل رو توی صفحه اینکلود کنم. یعنی دوتا فایل ایجاد می شه. یکی برای متن های ثابت و یکی برای خطاهایی که باید نمایش داده بشه

اینطوری هر وقت بخوام می تونم به این صفحه خطاها رو به زبانهای مختلف اضافه کنم و نیازی به شرطهای زیاد برای پیدا کردن خطا مورد نظر نیست.

فقط چک می کنم که زبان سایت چیه و بعد متغیر مربوط به خطا رو نمایش بدیم.

آیا ایجاد دو فایل برای سایتهای چند زبانه مناسب هست یا نه؟
 

masima

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

من می خوام همه خطاهای مربوط به فرمها رو توی یه فایل جدا بنویسم و این فایل رو توی صفحه اینکلود کنم. یعنی دوتا فایل ایجاد می شه. یکی برای متن های ثابت و یکی برای خطاهایی که باید نمایش داده بشه

اینطوری هر وقت بخوام می تونم به این صفحه خطاها رو به زبانهای مختلف اضافه کنم و نیازی به شرطهای زیاد برای پیدا کردن خطا مورد نظر نیست.

فقط چک می کنم که زبان سایت چیه و بعد متغیر مربوط به خطا رو نمایش بدیم.

آیا ایجاد دو فایل برای سایتهای چند زبانه مناسب هست یا نه؟
شما که این قدر قشنگ بلدید ! چرا سوال میپرسید ؟
یکم اعتماد به نفس چاره همه چیزه ! :)
موفق باشید !
 

greencat

Member
اشتباه می‌کنید دوست من این روش کاملا قابل توسعه و انعطاف پذیر و راحت هستش، در اکثر cms ها هم به همین شکلی هستش که گفتم:wink: ، به هر حال از هر روش که راحت ترید استفاده کنید.
موفق باشید.
 

phpweb

Active Member
اشتباه می‌کنید دوست من این روش کاملا قابل توسعه و انعطاف پذیر و راحت هستش، در اکثر cms ها هم به همین شکلی هستش که گفتم:wink: ، به هر حال از هر روش که راحت ترید استفاده کنید.
موفق باشید.
اگر که متغیرهای مربوط به خطاها و متن صفحات رو توی یک فایل قرار بدم کمی سرعت سایت پایین می یاد.

توی همه صفحات که نمی خوایم به کاربر هشدار بدیم. به هیمن دلیل بنظرم بهتره که فایل خطاها رو جدا کنیم.

نظر شما چیه؟
 

Cyletech

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

phpweb

Active Member
دوستان دیگه می دونم که سایتهای چند زبانه چطور کار می کنن.

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

آیا این امکان وجود داره که بدون استفاده از متغیر، متن های ثابت رو در جای مناسب قرار بدیم؟
 

Domanjiri

Well-Known Member
سلام

اگه اجازه بدین یه چند خط هم من توضیح بدم (ممکنه حرفام قبلن گفته شده باشه، ولی می خوام همشون اینجا جمع باشن تا مقایسه کنم)

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

1- ساختن فایل مجزا برای هر زبان ، اینکلود کردن فایل مورد نیاز و استفاده از ترجمه ها بصورت آرایه، متغیر و.. (که بچه ها هم به همین مورد اشاره کردن) حالا این فایل می تونه txt باشه xml یا هر فرمت دیگه ای ، چندان توی کلیت قضیه فرقی ندارن.

یه استفاده ی رایج اینطور هست:
PHP:
//we are now in the persian.xxx
$text['hello user'] = 'سلام کاربر';
$text['this is page %s '] = ...
و بعد هم استفاده ی مستقیم توی برنامه.

2- استفاده از gettext (هم بصورت extension وجود داره و هم بصورت library )

که استفادش هم اینطور هست که زبان مورد استفاده رو مشخص و بعد از خود متنی که قراره ترجمه بشه در کد ِمون استفاده می کنیم. مثال:
PHP:
<?php
$locale = "fa_IR";
if (isSet($_GET["locale"])) $locale = $_GET["locale"];
putenv("LC_ALL=$locale");
setlocale(LC_ALL, $locale);
و حالا توی کدمون :
PHP:
echo _("hello user");
gettext بسیار قدرتمند و گسترده هست، یه جای خوب برای شروع با Gettext

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

خوبی روش دوم توی کد زیر مشخص میشه:
PHP:
printf(_("Hello %s , Welcome"), $username);// second tip

printf($text['welcome'], $username);// first  tip

واضحه دیگه! خط اول خوانا و دلچسب ئه(!) ولی برای دومی اگه خودت برنامه رو ننوشته باشی، کارت تمومه...باید یک ربع وقت صرف کنی تا متوجه بشی جریان چیه.

ممکنه چیزی که گفتم ناقص باشه، اگه کامل ترش کردین که دمتون گرم، خیلی هم عالی!

موفق باشین
 

phpweb

Active Member
سلام

اگه اجازه بدین یه چند خط هم من توضیح بدم (ممکنه حرفام قبلن گفته شده باشه، ولی می خوام همشون اینجا جمع باشن تا مقایسه کنم)

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

1- ساختن فایل مجزا برای هر زبان ، اینکلود کردن فایل مورد نیاز و استفاده از ترجمه ها بصورت آرایه، متغیر و.. (که بچه ها هم به همین مورد اشاره کردن) حالا این فایل می تونه txt باشه xml یا هر فرمت دیگه ای ، چندان توی کلیت قضیه فرقی ندارن.

یه استفاده ی رایج اینطور هست:
PHP:
//we are now in the persian.xxx
$text['hello user'] = 'سلام کاربر';
$text['this is page %s '] = ...
و بعد هم استفاده ی مستقیم توی برنامه.

2- استفاده از gettext (هم بصورت extension وجود داره و هم بصورت library )

که استفادش هم اینطور هست که زبان مورد استفاده رو مشخص و بعد از خود متنی که قراره ترجمه بشه در کد ِمون استفاده می کنیم. مثال:
PHP:
<?php
$locale = "fa_ir";
if (isset($_get["locale"])) $locale = $_get["locale"];
putenv("lc_all=$locale");
setlocale(lc_all, $locale);
و حالا توی کدمون :
PHP:
echo _("hello user");
gettext بسیار قدرتمند و گسترده هست، یه جای خوب برای شروع با gettext

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

خوبی روش دوم توی کد زیر مشخص میشه:
PHP:
printf(_("hello %s , welcome"), $username);// second tip

printf($text['welcome'], $username);// first  tip
واضحه دیگه! خط اول خوانا و دلچسب ئه(!) ولی برای دومی اگه خودت برنامه رو ننوشته باشی، کارت تمومه...باید یک ربع وقت صرف کنی تا متوجه بشی جریان چیه.

ممکنه چیزی که گفتم ناقص باشه، اگه کامل ترش کردین که دمتون گرم، خیلی هم عالی!

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

آیا توی سیستم های استاندارد مثلا جوملا و ورد پرس هم از متغیر برای اینکار استفاده می کنن؟
 

Domanjiri

Well-Known Member
آیا توی سیستم های استاندارد مثلا جوملا و ورد پرس هم از متغیر برای اینکار استفاده می کنن؟
Only Gettext

البته اینطور نیست که حالا چون جوملا از gettext استفاده می کنه، پس ما هم باید استفاده کنیم. الان phpMyAdmin از روش اول استفاده می کنه (می دونید که، تنوع زبانی بسیار بالایی داره!)، یکم اگه توجه کنید دلیلش رو می فهمید، جوملا قراره به دست community _ش گسترش پیدا کنه، پس اون موردی که به عنوان حسن gettext گفتم براش خیلی مهم هست، اما phpMyAdmin ، نه!

موفق باشی
 

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

بالا