PDA

View Full Version : سوال: سوال در مورد دو زبانه کردن سایت به زبان php



سميه اميني
شنبه 15 بهمن 1390, 13:39 عصر
برای دو زبانه کردن سایت استاندارد ترین راه چیه ؟
می خوام هم css تغییر کنه هم فیلدهای مختص هر زبان رو از دیتابیس بخونه !

wallfa
شنبه 15 بهمن 1390, 13:41 عصر
خوب بهترین کار استفاده از یه فایل که داخل یه ارایه تعریف بشه نه دیتابیس ، که باعث بالا رفتن مصرف منابع سرور میشه ! هم سرعت بالا هم دقت ، همه کاری هم میشه داخل کرد نمونش براتون میذارم !

wallfa
شنبه 15 بهمن 1390, 13:43 عصر
فکر میکنم متوجه شده باشید ، از این روش گزینه های موجود بهتری هم هست که در سیستم مدریت محتوا بزرگ همچون وردپرس دیده میشه ! اما من این به اونها ترجیح میدهم !
همون طور که میبینید میشه همه چیز داخلش تعریف کرد و در جای مشخص نشونش داد !



<?php



$lang=array();

$lang=array_merge($lang,array(

"ACCOUNT_SPECIFY_USERNAME" => "Please enter your username",
"ACCOUNT_SPECIFY_PASSWORD" => "Please enter your password",

));

function lang($key,$markers = NULL)
{
global $lang;

if($markers == NULL)
{
$str = $lang[$key];
}
else
{
//Replace any dyamic markers
$str = $lang[$key];

$iteration = 1;

foreach($markers as $marker)
{
$str = str_replace("%m".$iteration."%",$marker,$str);

$iteration++;
}
}

//Ensure we have something to return
if($str == "")
{
return ("No language key found");
}
else
{
return $str;
}
}

echo lang("ACCOUNT_SPECIFY_PASSWORD");



?>

سميه اميني
شنبه 15 بهمن 1390, 14:03 عصر
بیشتر توضیح میدین ؟
یعنی بیام تمام تغییرات دو زبانو تو یه فایل مشخص کنم ؟ اینطوری که حجم فایل خیلی زیاد میشه

tux-world
شنبه 15 بهمن 1390, 15:14 عصر
حجم از نظر تعداد خطوط برنامه نویسی؟ خوب مسلما اینطوری خواهد بود البته شما فقط اون آرایه رو بیشتر میکنید نه چیز دیگه. منطقی فکر هم بکنید میبینید باید هم اینطوری باشه. شما به ازای هر عبارت فارسی یه عبارت معادلش مثلا ونزولیایی دارید که ترجمش رو مینویسید
البته حسن سیستمهایی مثل جوملا یا وردپرس برای اینکه متن فایل ترجمه رو جدا قرار میدن اینه که هم دسترسی بهشون آسونتره و هم اینکه مترجم درگیر کدهای برنامه نویسی نیست

سميه اميني
یک شنبه 16 بهمن 1390, 08:21 صبح
لطفا بیشتر در مورد کدی که گذاشتین توضیح بدین ! الان مثلا من می خوام دو تا عبارت نام کاربری را وارد کنید و please enter your username روو بزارم داخل آرایه . و اینکه چطوری مشخص کنم که کدوم css رو بخونه

رضا قربانی
یک شنبه 16 بهمن 1390, 10:04 صبح
برای این کار یک روش دیگه هم وجود داره :
اینه که شما دو فولدر مجزا درست کنی . و در هر یک قالبتون رو بگذارید (یکی فارسی و یکی انگلیسی)

البته این روش اصلا توصیه نمی شه و حجم می ره بالا و و و

ولی کارت رو می تونه به عنوان یک تازه وارد راه بندازه.

wallfa
یک شنبه 16 بهمن 1390, 10:46 صبح
والا من دی روز تاپیک زیر روو کردم اینجا باز پیدا کنم ، ببینم سئوال پرسیده شده یا نه !
پیدا نکردم دیگه رفتم ، حالا نمیدونم چشمام ندید بلاخره خدا عالمه چی شد !

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

اون شرط یه چیزی مثل زیر میشه
مثلا ما دو فایل en.php و fa.php داریم
بالا سایت این میذاریم .


<?php

/**
* @author wallfa
* @copyright 2012
*/
//albateh mitonid be jay in farman agar zaban hay mokhtalef darid az suwich estefadeh konid
if($_POST['lang'] or $_SESSION['lang']){
include 'en.php';
}
else{
include 'fa.php'
}


?>



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

wallfa
یک شنبه 16 بهمن 1390, 10:55 صبح
از این واضح تر نمیتونم توضیح بدم


<?php



$lang=array();

$lang=array_merge($lang,array(
///array nesbat be nyaz tayin konid
//be onvan mesl na do fild user password va ye file css darim .
"FILE_CSS" => "styleen.css",
"ACCOUNT_SPECIFY_USERNAME" => "Please enter your username",
"ACCOUNT_SPECIFY_PASSWORD" => "Please enter your password",

));
// in ghesmat dar hasteh system gharar begireh ya ye file ke hame ja dar dastress bashe
function lang($key,$markers = NULL)
{
global $lang;

if($markers == NULL)
{
$str = $lang[$key];
}
else
{
//Replace any dyamic markers
$str = $lang[$key];

$iteration = 1;

foreach($markers as $marker)
{
$str = str_replace("%m".$iteration."%",$marker,$str);

$iteration++;
}
}

//Ensure we have something to return
if($str == "")
{
return ("No language key found");
}
else
{
return $str;
}
}




?>

<html>

<head>
<link rel="stylesheet" href="<?php echo lang("FILE_CSS") ?>" />
</head>


<body>
<form>
<span><?php echo lang("ACCOUNT_SPECIFY_USERNAME") ?></span> <input type="text" />
<span><?php echo lang("ACCOUNT_SPECIFY_PASSWORD") ?></span> <input type="password" />
</form>

</body>


</html>

tux-world
یک شنبه 16 بهمن 1390, 11:57 صبح
ببينيد اول تصميم بگيريد كه ميخوايين فايل ترجمه همانند كدي كه دوستمون نوشتن ميخواييد باشه يا جدا. اگه جدا باشه كه ميتونين يه مستغير رشته اي تعريف و ازش استفاده كنيد بعد اينكلود كردن فايلهاي ترجمه

سميه اميني
یک شنبه 16 بهمن 1390, 14:10 عصر
ممنون راهنمایی تون کامل بود اگه سوالی بود بازم می پرسم

eshpilen
سه شنبه 18 بهمن 1390, 10:02 صبح
منم پروژم نزدیک آخراش باشه میخوام دوزبانه کنم (اومدم ببینم توی این تاپیک روش و ایدهء خوبی پیدا میکنم یا نه).
اما هم کد ناخوانا میشه هم پرفورمنس پایین میاد (الانش هم سنگین شده بنظرم). گذشته از سیستمی که باید برای دوزبانه کردن طراحی و پیاده سازی کنم.
فقط میخوام دو زبان فارسی و انگلیسی رو داشته باشه.

الان به این فکر افتادم که چطوره بسادگی دو کپی کامل از برنامه داشته باشم که متن و پیغامها و Layout یکی به زبان انگلیسی باشه و دیگری به زبان فارسی.
راه ساده ای هست و بنظرم مشکل خاصی هم نداره. خب هرکس خواست نسخهء فارسی رو نصب میکنه و هرکس انگلیسی نیاز داشت نسخهء انگلیسی رو نصب میکنه! نه؟
شاید برای یک پروژهء واقعا بزرگ و بخصوص که بخواد بیش از دو زبان رو پشتیبانی کنه این روش مناسب نباشه، اما برای پروژهء من که زیاد بزرگ نیست و فقط دو زبان اصلی رو میخوام پشتیبانی کنم بنظرم راهکار به صرفه ای باشه! کار منهم کمتر میشه بنظرم. زیاد کار داره خسته شدم از بس سیستم طراحی و کدنویسی کردم :ناراحت:

البته این روش برای جاهایی خوبه که نیاز نیست همزمان دو زبان ساپورت بشن.
قصدم از اینکه دو زبان فارسی و انگلیسی رو ساپورت کنم این بود که هم برای خودم قابل استفاده باشه و هم چون احتمالا تحت GPL منتشرش میکنم، انگلیسی زبانها هم بتونن ازش استفاده کنن. بازمتن و نرم افزار آزاد نمیشه نسخهء زبان انگلیسی نداشته باشه! اینطوری گسترهء استفادش خیلی محدود میشه.

راستی بعضی نرم افزارهای حتی بزرگ و معروف هم ظاهرا به همین شکل هستن.
مثلا CMS مامبو تاجاییکه دیدم نسخهء فارسیش جداست.

idocsidocs
سه شنبه 18 بهمن 1390, 10:51 صبح
اگر قرار باشه که متن همه صفحات رو توی متغیرهای پی اچ پی قرار بدیم، حجم حافظه مصرف شده بالا می ره.

از طرفی خیلی از وب سایتها نهایتا 2 یا 3 زبان رو پشتیبانی می کنن و اگر برای زبانهای مختلف پوشه های جداگانه در نظر بگیریم حجم کار اونقدرها که دوستان می گن بالا نمی ره.