PDA

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



zahra-j
شنبه 11 مرداد 1393, 13:26 عصر
میشه در مورد ساخت سایت چند زبانه به زبان php راهنمایی کنید.
باید برای هر زبان پوشه جداگانه بزارم و همه صفحات در اون پوشه ها به اون زبان طراحی بشه؟
اگه آموزشی سراغ دارید میشه بزارید؟

کامبیز اسدزاده
شنبه 11 مرداد 1393, 15:07 عصر
میشه در مورد ساخت سایت چند زبانه به زبان php راهنمایی کنید.
باید برای هر زبان پوشه جداگانه بزارم و همه صفحات در اون پوشه ها به اون زبان طراحی بشه؟
اگه آموزشی سراغ دارید میشه بزارید؟

سلام

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

معمولا برای اینکار از خود php استفاده میکنند و یا از فناوری های دیگری مثل xml و json هم استفاده میکنند که پیشنهاد من استفاده از xml برای فایل های زبان هستش.

zahra-j
شنبه 11 مرداد 1393, 21:53 عصر
برای مثال یه فایل en.php ساختم

$lang['hello'] = 'hello';
$lang['goodbye'] = 'Goodbye';
$lang['home'] = 'home';
$lang['about'] = 'about us';
$lang['contact'] = 'contact with us';

و یه فایل fa.php

$lang['hello'] = 'سلام';
$lang['goodbye'] = 'خدانگهدار';
$lang['home'] = 'خانه';
$lang['about'] = 'درباره ما';
$lang['contact'] = 'تماس با ما';

و این هم فایل اصلی

<a href="?lang=fa">Farsi</a>
</br></br>
<a href="?lang=en">English</a>

<?php
if(isset($_GET['lang']))
{
include $_GET['lang'].'.php';
}
else
{
include 'fa.php';
}
echo "</br></br>".$lang['hello'];
echo "</br></br>".$lang['goodbye'];


حالا می خوام بدونم وقتی انگلیسی میشه چطور css آن تغییر می کنه یعنی چطور چپ چین میشه؟

under22
شنبه 11 مرداد 1393, 22:01 عصر
برای مثال یه فایل en.php ساختم

$lang['hello'] = 'hello';
$lang['goodbye'] = 'Goodbye';
$lang['home'] = 'home';
$lang['about'] = 'about us';
$lang['contact'] = 'contact with us';

و یه فایل fa.php

$lang['hello'] = 'سلام';
$lang['goodbye'] = 'خدانگهدار';
$lang['home'] = 'خانه';
$lang['about'] = 'درباره ما';
$lang['contact'] = 'تماس با ما';

و این هم فایل اصلی

<a href="?lang=fa">Farsi</a>
</br></br>
<a href="?lang=en">English</a>

<?php
if(isset($_GET['lang']))
{
include $_GET['lang'].'.php';
}
else
{
include 'fa.php';
}
echo "</br></br>".$lang['hello'];
echo "</br></br>".$lang['goodbye'];


حالا می خوام بدونم وقتی انگلیسی میشه چطور css آن تغییر می کنه یعنی چطور چپ چین میشه؟
من قبلا این کارو کردم البته با فریمورک خیلی آسون تر بود تقریبا همین کاری که شما کردید رو میکرد ولی بهینه تر بود .
من یه کوکی واسه ذخیره کردن نوع زبان میزاشتم . اگه کوکی نبود زبان پیشفرض فارسی بود اگه کاربر زبان رو عوض میکرد کوکی رو هم عوض میکردم . البته بنده رو همون css زبان رو عوض میکردم . حالا شما میخای css رو عوض کنی یه شرط واسه کوکی بزار همین

zahra-j
شنبه 11 مرداد 1393, 22:30 عصر
ببخشید میشه واضح تر توضیح دهید و یه مثال بزنید می خوام با session کار کنم

کامبیز اسدزاده
شنبه 11 مرداد 1393, 22:36 عصر
روش ساده تری وجود داره ! برای مثال شما حتما یک تابعی دارید که زبان جاری رو تشخصی میده در این صورت میتونید با یک دستور if در قالب سایت 2 نوع استایل فراخوانی کنید به این صورت که وقتی زبان فارسی هست مثلا main-rtl.css رو بخونه و وقتی انگلیسی هست و یا هر زبان به جز فارسی main-ltr.css رو بخونه.

under22
شنبه 11 مرداد 1393, 22:41 عصر
با سشن هم میشه کارکرد ولی با کوکی بهتره چون کسی که زبان سایت رو عوض میکنه واسه یه مدتی اینکارو میکنه یا واسه همیشه ولی اگه سشن باشه تا مرورگرو ببنده زبان سایت برمیگرده با کوکی کار کنید و مثلا مدت اون رو یه هفته بزارید .
دو تا فایل ایجاد کنید که هر فایل یک آرایه انجمنی مثل همین آرایه ها که نوشتید داشه باشه . یکی فارسی دومی انگلیسی و یه تابع بنویسید که سه ورودی بگیره ابتدا اسم زبان دوم هم اسم فایل سوم هم کلمه رو بگیره و بره فایل رو لود کنه و معنی اون کلمه رو بهتون برگردونه . اینکه گفتم سه ورودی داشه باشه بخاطر این هست شما می تونید برای قسمت admin فایل ترجمتون رو جدا کنید .
روش آقای
کامبیز اسدزاده (http://barnamenevis.org/member.php?219337-%DA%A9%D8%A7%D9%85%D8%A8%DB%8C%D8%B2-%D8%A7%D8%B3%D8%AF%D8%B2%D8%A7%D8%AF%D9%87) هم خوبه ولی اون روش ترجمه کلی ولی این روش ترجمه تکه ایی است خوبی روش تکه ایی اینه که اگه بخواهید ترجمه یه متن رو عوض کنید خیلی راحت و سریع تر می تونید اینکارو بکنید و مزیت دومش اینه که حجم کد نویسش کمتر میشه و مزیت سوم اینه که خیلی راحت زبان سوم رو اضافه کنید .

zahra-j
شنبه 11 مرداد 1393, 23:06 عصر
ممنون از راهنمایی هاتون .
یه سوال دیگه در صورت نیاز به جدول برای هر زبان باید جدول جداگانه بسازم

under22
شنبه 11 مرداد 1393, 23:22 عصر
اگه نمی خواهید همش دینامیک باشه داخل فایل ذخیره کنید بهتره وی اگه می خواهید کاملا دینامیک باشه می تونید واسه هر زبان یه جدول بسازید این چیزه که الآن به فکرم میرسه شاید بشه بهینه ترش کرد

zahra-j
شنبه 11 مرداد 1393, 23:32 عصر
یه سوال ابتدایی این css را با چه دستوری توی if فراخوانی کنم توی php میشه یا باید از jquery کمک بگیرم؟

کامبیز اسدزاده
یک شنبه 12 مرداد 1393, 09:25 صبح
یه سوال ابتدایی این css را با چه دستوری توی if فراخوانی کنم توی php میشه یا باید از jquery کمک بگیرم؟

باید با استفاده از PHP این کار رو انجام بدین...
روشش هم بستگی داره به نوع بازگشتی که زبان جاری شمارو مشخص میکنه مثلا به روش من در یکی از پروژه هام استفاده کردم:

اینکه اگر فارسی بود کلا راست چین همراه با زبان فارسی و اگر ب غیر از فارسی بود چپ چین و نوع زبانش...
در داخل HTML به این روش :


<?php if(MyClass::$Language=='persian'):?>
<link rel="stylesheet" type="text/css" href="<?php echo$theme?>css/style-rtl.css" />
$GLOBALS['jscripts'][]='js/main-rtl.js';
<?php else:?>
<link rel="stylesheet" type="text/css" href="<?php echo$theme?>css/style-ltr.css" />
$GLOBALS['jscripts'][]='js/main-ltr.js';
<?php endif?>


و در داخل خود PHP به این روش :


if(MyClass::$Language=='persian')
{

<link rel="stylesheet" type="text/css" href="css/style-rtl.css" />
$GLOBALS['jscripts'][]='js/style-rtl.js';


}

else
{

<link rel="stylesheet" type="text/css" href="css/style-ltr.css" />
$GLOBALS['jscripts'][]='js/style-ltr.js';


}

zahra-j
یک شنبه 12 مرداد 1393, 17:21 عصر
من این کد نوشتم ولی جواب نمیده از ابتدا ltr.css می گیرد و دیگه تغییر نمی کنه css قسمت else اجرا نمیشه


<?php
if(isset($_GET['lang'])== 'en')
{
include $_GET['lang'].'.php';?>
<link rel="stylesheet" type="text/css" href="ltr.css" />
<?php
}
else
{
include 'fa.php';?>
<link rel="stylesheet" type="text/css" href="rtl.css" />
<?php
}
?>

zahra-j
دوشنبه 13 مرداد 1393, 12:24 عصر
میشه کمکم کنید
این کد تشخیص نمیده که فراخوانی css ها بین if و else است

SadeghPro19
دوشنبه 13 مرداد 1393, 14:58 عصر
<?php
if(isset($_GET['lang'])== 'en')
{
include 'en.php';
echo '<link rel="stylesheet" type="text/css" href="ltr.css" />';
}
else
{
include 'fa.php';
echo '<link rel="stylesheet" type="text/css" href="rtl.css" />';
}