PDA

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



trasilver
شنبه 02 فروردین 1393, 15:46 عصر
سلام خدمت عزیزان.

دوستان من شروع به ساخت یک اسکریپت کردم. این اسکریپت چند زبونس.

من برای تعریف متن ها از define استفاده می کنم.

حالا دوتا سوال داشتم.

1- به نظرتون این تابع از لحاظ performance خوبه؟ از منابع کم استفاده می کنه؟ تابع بهتری هست و ما خبر نداریم ؟ :لبخند:

سوال دومم این بود که من تصمیم دارم کل متن هارو بذارم توی یدونه فایل! حالا سوال اینجاس کار خوبیه؟ یا این که بیام برای هر صفحه از اسکریپت یک فایل php بذارم و فقط متن هایی که لازم دارم رو تعیین کنم؟ بازم از لحاظ performance و استفاده از منابع منظورمه :لبخند: define هایی که قراره تعریف بشه رو شما 2000 تا بگیرید :ناراحت::لبخند:

ممنون.

desatir7316
شنبه 02 فروردین 1393, 15:59 عصر
در مورد چند زبانه بودن قبلا زیاد بحث شده، کافیه جوستجو می کردید:
لینک (http://barnamenevis.org/showthread.php?432765-%D8%A8%D9%87%D8%AA%D8%B1%DB%8C%D9%86-%D8%B1%D8%A7%D9%87-%D8%A8%D8%B1%D8%A7%DB%8C-%D9%BE%DB%8C%D8%A7%D8%AF%D9%87-%D8%B3%D8%A7%D8%B2%DB%8C-%D8%B3%D8%A7%DB%8C%D8%AA-%D9%87%D8%A7%DB%8C-%DA%86%D9%86%D8%AF-%D8%B2%D8%A8%D8%A7%D9%86%D9%87&highlight=%DA%86%D9%86%D8%AF+%D8%B2%D8%A8%D8%A7%D9 %86%D9%87+%D8%A8%D9%88%D8%AF%D9%86)
لینک (http://barnamenevis.org/showthread.php?424316-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%B3%D8%A7%D8%AE%D8%AA-%DB%8C%DA%A9-%D9%88%D8%A8-%D8%B3%D8%A7%DB%8C%D8%AA-%DA%86%D9%86%D8%AF-%D8%B2%D8%A8%D8%A7%D9%86%D9%87-%D8%A8%D8%A7-%D9%82%D8%A7%D8%A8%D9%84%DB%8C%D8%AA-%D8%AA%D8%BA%DB%8C%DB%8C%D8%B1-%D9%82%D8%A7%D9%84%D8%A8&highlight=%DA%86%D9%86%D8%AF+%D8%B2%D8%A8%D8%A7%D9 %86%D9%87+%D8%A8%D9%88%D8%AF%D9%86)
...

trasilver
شنبه 02 فروردین 1393, 16:48 عصر
تشکر. اما به جوابی که می خواستم نرسیدم. اینجا از آرایه استفاده شده که اونم مشکلات خودش رو داره. حتی خود دوستان هم گفتند. یکی از این مورد هم میشه رم رو نام برد. ممکنه یک صفحه بیش از 300 متن طولانی داشته باشه! اینجا آرایه به وضعیت خوبی نمی رسه!

Jarvis
شنبه 02 فروردین 1393, 17:13 عصر
دوست عزیز ، همونطور که توی این تاپیک (http://barnamenevis.org/showthread.php?432765-%D8%A8%D9%87%D8%AA%D8%B1%DB%8C%D9%86-%D8%B1%D8%A7%D9%87-%D8%A8%D8%B1%D8%A7%DB%8C-%D9%BE%DB%8C%D8%A7%D8%AF%D9%87-%D8%B3%D8%A7%D8%B2%DB%8C-%D8%B3%D8%A7%DB%8C%D8%AA-%D9%87%D8%A7%DB%8C-%DA%86%D9%86%D8%AF-%D8%B2%D8%A8%D8%A7%D9%86%D9%87&highlight=%DA%86%D9%86%D8%AF+%D8%B2%D8%A8%D8%A7%D9 %86%D9%87+%D8%A8%D9%88%D8%AF%D9%86) بحث شده ، وقتی فریمورک های معروفی مثل Yii دارن از آرایه استفاده میکنن یعنی به روش بهتری نرسیدن دیگه !!
مطمئنا خیلی روش ها برای چند زبانه بودن سایت وجود داره ، ولی تقریبا میشه گفت آرایه بهترین روش هست که فریمورک Yii اومده استفاده کرده...
حالا شما سعی کنید از روش پیاده سازی اون ایده بگیرید ، به نظر من این راه حل کارتون ممکنه باشه

موفق باشید

trasilver
شنبه 02 فروردین 1393, 17:24 عصر
ممنون بابت راهنمایی هاتون.

من برای این قسمت این کلاس رو نوشتم.

خوب هست و بدرد بخوره استفاده بکنم یا روش بهتری برای نوشتنش هست؟


<?php
class lang {
public function __construct($lang, $file){
if (file_exists(dirname(__FILE__).'/lang/'.$lang.'/'.$file.'.php'))
return $lang = require(dirname(__FILE__).'/lang/'.$lang.'/'.$file.'.php');
}
}
?>

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

البته یک چیزی هم عرض بکنم، ممکنه توی یک فایل چند تا فایل در فولدر lang باز بشه. حالا نمی دونم این کلاسی که نوشتم مناسبش هست یا نه. ممنون میشم راهنمایی کنید. :قلب:

masiha68
شنبه 02 فروردین 1393, 22:06 عصر
ارایه ها بهتر از define هستش .. یک اریه مثل یک کیف بسته و مرتب از اطلاعات می مونه که هر وقت بخاییم می تونیم از اون به راحتی یه چیز رو بیاریم بیرون ولی در مورد 2000 تا define ... میشه اینجوری تصور کرد که کلی اطلاعات پراکنده داریم . در کل شما اگه دقت کنین واسه ارایه ها اونقد تابع نوشتن که فک نکنم نشه با اونا کاری رو انجام داد و همین هم از قدرت و کارایی اریه ها ناشی میشه . من خودم واسه چند زبانه کردن با استفاده از ارایه ها یه کلاس نوشتم و خوب هم جواب داد .

trasilver
یک شنبه 03 فروردین 1393, 00:41 صبح
ارایه ها بهتر از define هستش .. یک اریه مثل یک کیف بسته و مرتب از اطلاعات می مونه که هر وقت بخاییم می تونیم از اون به راحتی یه چیز رو بیاریم بیرون ولی در مورد 2000 تا define ... میشه اینجوری تصور کرد که کلی اطلاعات پراکنده داریم . در کل شما اگه دقت کنین واسه ارایه ها اونقد تابع نوشتن که فک نکنم نشه با اونا کاری رو انجام داد و همین هم از قدرت و کارایی اریه ها ناشی میشه . من خودم واسه چند زبانه کردن با استفاده از ارایه ها یه کلاس نوشتم و خوب هم جواب داد .
ممنون. اگه ممکنه میشه کلاستون رو برای بنده و سایر هم قرار بدید استفاده کنیم؟ یا اینکه کلاسی که من نوشتم کافیه و به درد هم می خوره؟ :لبخند: چون الآن سر همین قضیه پروژه رو قطع کردم از عصری و منتظر یک کلاس هستم واسش :افسرده:

masiha68
یک شنبه 03 فروردین 1393, 01:07 صبح
اینو نگاه کن ... اگه کلاست بهتر بود از مال خودت استفاده کن .... : این یه کلاس سه زبانه است که با کوکی فراخوانی می شد و ...


class lang
{
public $xman;
function lol($name)
{
if($name==en)
{

$xman=array (

'lastcomment'=>'Last Comment',
'newslatter'=>'News Latter',
'ourfrend'=>'Our FrendS',
'search'=>'Search',
'hello'=>'hello',
'links'=>'Links',
'visitor'=>'Visitor',
'lastpost'=>'Last Post',
'home'=>'Home',
'bio'=>'Biogaphi',
'readmore'=>'Read More',
'view'=>'view',
'comment'=>'Comment',
'name'=>'name',
'web'=>'web',
'email'=>'email',
'private'=>'private',
'followithspostwhiscomment'=>'Follow This Post With Comment',
'send'=>'send',
'title'=>'title',
'description'=>'description'
);
}
if($name==ku)
{
$xman=array (

'lastcomment'=>'دوایین بۆچوونه‌کان ',
'newslatter'=>'هه‌واڵدێر',
'ourfrend'=>' لاپه‌ڕه‌ی هه‌واڵان',
'search'=>'گه‌ڕان',
'links'=>' ته‌وه‌ره‌ی به‌نرخ',
'visitor'=>'ڕێژه‌',
'lastpost'=>' دوایین به‌رهه‌مه‌کان',
'home'=>' لاپه‌ڕه‌ی سه‌ره‌کی',
'bio'=>'ژیاننامه‌',
'readmore'=>' درێژه‌ی بابه‌ت',
'view'=>'دیتن',
'comment'=>'بۆچوون',
'name'=>'ناو',
'web'=>'ماڵپه‌ڕ',
'email'=>'نامه‌',
'private'=>'تایبه‌تی',
'followithspostwhiscomment'=>' به‌ دواداچوونی بۆچوونه‌کانی ئه‌م بابه‌ته',
'send'=>'ناردن',
'title'=>'بابه‌ت',
'description'=>'به ناوی'

);

}
if($name==fa)
{
$xman=array(
'lastcomment'=>'آخرین دیدگاه ها',
'newslatter'=>'خبرنامه',
'ourfrend'=>'همسایگان',
'search'=>'جستجو',
'links'=>'لینک مفید',
'visitor'=>'آمار',
'lastpost'=>'آخرین ارسال ها',
'home'=>'خانه',
'bio'=>'زندگی نامه',
'readmore'=>'ادامه ی مطلب',
'view'=>'مشاهده',
'comment'=>'دیدگاه',
'name'=>'نام',
'web'=>'وب',
'email'=>'ایمیل',
'private'=>'خصوصی',
'followithspostwhiscomment'=>'دنبال کردن دیدگاه های این مطلب',
'send'=>'ارسال',
'title'=>'اثر',
'description'=>'عنوان'
);
}

return $this->xman=$xman;
}

}


اینم یه نمونه :

$new->xman['description'];
البته من اینو واسه خودم ساختم و می دونم کلاس های بهتری هم وجود دارن کافیه یه سرچ انگلیسی بزنی
مشکلی داشتی بپرس
موفق باشی

trasilver
یک شنبه 03 فروردین 1393, 01:36 صبح
اینو نگاه کن ... اگه کلاست بهتر بود از مال خودت استفاده کن .... : این یه کلاس سه زبانه است که با کوکی فراخوانی می شد و ...


class lang
{
public $xman;
function lol($name)
{
if($name==en)
{

$xman=array (

'lastcomment'=>'Last Comment',
'newslatter'=>'News Latter',
'ourfrend'=>'Our FrendS',
'search'=>'Search',
'hello'=>'hello',
'links'=>'Links',
'visitor'=>'Visitor',
'lastpost'=>'Last Post',
'home'=>'Home',
'bio'=>'Biogaphi',
'readmore'=>'Read More',
'view'=>'view',
'comment'=>'Comment',
'name'=>'name',
'web'=>'web',
'email'=>'email',
'private'=>'private',
'followithspostwhiscomment'=>'Follow This Post With Comment',
'send'=>'send',
'title'=>'title',
'description'=>'description'
);
}
if($name==ku)
{
$xman=array (

'lastcomment'=>'دوایین بۆچوونه‌کان ',
'newslatter'=>'هه‌واڵدێر',
'ourfrend'=>' لاپه‌ڕه‌ی هه‌واڵان',
'search'=>'گه‌ڕان',
'links'=>' ته‌وه‌ره‌ی به‌نرخ',
'visitor'=>'ڕێژه‌',
'lastpost'=>' دوایین به‌رهه‌مه‌کان',
'home'=>' لاپه‌ڕه‌ی سه‌ره‌کی',
'bio'=>'ژیاننامه‌',
'readmore'=>' درێژه‌ی بابه‌ت',
'view'=>'دیتن',
'comment'=>'بۆچوون',
'name'=>'ناو',
'web'=>'ماڵپه‌ڕ',
'email'=>'نامه‌',
'private'=>'تایبه‌تی',
'followithspostwhiscomment'=>' به‌ دواداچوونی بۆچوونه‌کانی ئه‌م بابه‌ته',
'send'=>'ناردن',
'title'=>'بابه‌ت',
'description'=>'به ناوی'

);

}
if($name==fa)
{
$xman=array(
'lastcomment'=>'آخرین دیدگاه ها',
'newslatter'=>'خبرنامه',
'ourfrend'=>'همسایگان',
'search'=>'جستجو',
'links'=>'لینک مفید',
'visitor'=>'آمار',
'lastpost'=>'آخرین ارسال ها',
'home'=>'خانه',
'bio'=>'زندگی نامه',
'readmore'=>'ادامه ی مطلب',
'view'=>'مشاهده',
'comment'=>'دیدگاه',
'name'=>'نام',
'web'=>'وب',
'email'=>'ایمیل',
'private'=>'خصوصی',
'followithspostwhiscomment'=>'دنبال کردن دیدگاه های این مطلب',
'send'=>'ارسال',
'title'=>'اثر',
'description'=>'عنوان'
);
}

return $this->xman=$xman;
}

}


اینم یه نمونه :

$new->xman['description'];
البته من اینو واسه خودم ساختم و می دونم کلاس های بهتری هم وجود دارن کافیه یه سرچ انگلیسی بزنی
مشکلی داشتی بپرس
موفق باشی
تشکر. پس در واقع میشه گفت تقریبا شده مثل کلاس بنده. بازم ممنون از کمکتون.

trasilver
یک شنبه 03 فروردین 1393, 10:37 صبح
عذر خواهی می کنم بابت اسپم.


کلاس ساخته شده:


<?php
class Language {

public $lang = array();

public function __construct($lang, $file){
if (file_exists(dirname(__FILE__).'/lang/'.$lang.'/'.$file.'.php'))
return $this->lang = require(dirname(__FILE__).'/lang/'.$lang.'/'.$file.'.php');
}
}
?>

مثال:


$new = new Language('fa', 'index');
echo $new->lang['WELCOME'];

اگه کم و کاستی داره ممنون میشم دوستان بگن. اگر هم نداره که به خوبی استفاده کنید :قلب:

masiha68
یک شنبه 03 فروردین 1393, 10:57 صبح
سعی کن echo رو هم بردای ..طوری که وقتی هر واژه فراخوانی می شه خودش هم چاپ بشه ... موفق باشی

trasilver
یک شنبه 03 فروردین 1393, 12:37 عصر
سعی کن echo رو هم بردای ..طوری که وقتی هر واژه فراخوانی می شه خودش هم چاپ بشه ... موفق باشی
ممنون بابت راهنمایی. متاسفانه با همین کلاسی که نوشتم echo رو بر میدارم چیزی نمی نویسه! در واقع نمی دونم باید چی کار کرد که بدون نوشتن echo خودش چاپ هم بکنه. چون قبلا از return استفاده می کردم میشد اما اینجا نمیشه :لبخند:

masiha68
یک شنبه 03 فروردین 1393, 12:46 عصر
function _e($valu)
{
echo $this->xman[$valu] ;
}
یه همچین تابعی رو بهش اضافه کن

trasilver
یک شنبه 03 فروردین 1393, 13:05 عصر
function _e($valu)
{
echo $this->xman[$valu] ;
}
یه همچین تابعی رو بهش اضافه کن
خوب این جوری در نهایت باز هم از تابع خود echo استفاده میشه :لبخند: و این که دوباره باید در خواست رو فرستاد یک تابع دیگه که یجورایی کد هم طولانی میشه هم خسته کننده. :لبخندساده::قلب:

masiha68
یک شنبه 03 فروردین 1393, 13:12 عصر
اینو نگاه کن که روی کلاس خودم نوشتمش


$lang=new lang;
$lang->lol('fa');
$lang-> _e('lastpost');

$lang-> _e('name');

morrning
پنج شنبه 21 فروردین 1393, 14:09 عصر
به نظرم استفاده از فایل های mo/po بهتره چون دیگه با خطای undefined index که در روش آرایه ها ممکنه به وجود بیاد مواجع نمیشید. همچنین استفاده از این روش تقریبا داره به یه استاندارد تبدیل میشه چون در زبان های برنامه نوسی دیگه هم امکاناتی برای کار با این فایل ها فراهم شده.

برای شروع هم میتونید عبارت how to localize php code with mo po files رو جست و جو کنید

masiha68
پنج شنبه 21 فروردین 1393, 16:21 عصر
به نظرم استفاده از فایل های mo/po بهتره چون دیگه با خطای undefined index که در روش آرایه ها ممکنه به وجود بیاد مواجع نمیشید. همچنین استفاده از این روش تقریبا داره به یه استاندارد تبدیل میشه چون در زبان های برنامه نوسی دیگه هم امکاناتی برای کار با این فایل ها فراهم شده.

برای شروع هم میتونید عبارت how to localize php code with mo po files رو جست و جو کنید
حق با شماست و شما هم اگه پست ها رو دنبال کرده باشید می بینید که اینها واسه پروژهای کوچیک و شخصی به کار میان که اهمیتش واسه کاربر زیاد نیست . ممنون

us1234
پنج شنبه 21 فروردین 1393, 16:46 عصر
به نظرم استفاده از فایل های mo/po بهتره چون دیگه با خطای undefined index که در روش آرایه ها ممکنه به وجود بیاد مواجع نمیشید. همچنین استفاده از این روش تقریبا داره به یه استاندارد تبدیل میشه چون در زبان های برنامه نوسی دیگه هم امکاناتی برای کار با این فایل ها فراهم شده.

برای شروع هم میتونید عبارت how to localize php code with mo po files رو جست و جو کنید
این فایل ها را فقط در وردپرس دیدم . دقیق میتونید شرح بدید مزیت اصلیش نسبت به آرایه در چیه ؟

morrning
جمعه 22 فروردین 1393, 17:31 عصر
این فایل ها را فقط در وردپرس دیدم . دقیق میتونید شرح بدید مزیت اصلیش نسبت به آرایه در چیه ؟

مزیت ها در لینک زیر :
http://www.icanlocalize.com/site/tutorials/how-to-translate-with-gettext-po-and-pot-files/

نحوه استفاده در لینک زیر:
http://miniprogrammer.blogfa.com/post-4.aspx

تابع gettext در سایت رسمی php همراه با مثال:
http://www.php.net/manual/en/book.gettext.php