PDA

View Full Version : پروژه ی چند زبانه...



mrrajabi
شنبه 12 آبان 1386, 22:23 عصر
سلام
من یه پروژه رو قراره طراحی کنم که 3 زبان فارسی ,عربی و انگلیسی داره.

راه هایی که برای پیاده سازی در نظر دارم به شرح زیر است :

1- خواندن از بانک
2- خواندن از یک فایل : بطوریکه با یک ساختار ساده بتونم زبانی که انتخاب شده است رو نمایش بدم.این فایل به نظر خودم باید شامل 4 ستون مثل این شکل باشه .


btnLogin=Login=الورد=ورود
که محتویات قایل رو یبار بخونم و داخل آرایه تقسیم کنم و بر حسب زبان انتخابی مقادیر مورد نظر رو نمایش بدم
3- خواندن از 3 فایل جدا که هر کدام یه زبان را شامل شود.
4- ساخت 3 دایرکتوری مجزا برای هر زبان به طوریکه برای هر زبان یه صفحه ی جدا ساخته بشه.

حالا اگه اساتید این روش هارو تائید می کنید لطف کنید در موردش برام توضیح بدین که چه کار باید کرد خیلی ممنون میشم و اگه راه بهتری سراغ دارید بهم پیشنهاد بدین باز هم خیلی خیلی ممنون میشم.
با تشکر
بای

tabib_m
شنبه 12 آبان 1386, 22:33 عصر
سلام

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

موفق باشید

mrrajabi
شنبه 12 آبان 1386, 23:10 عصر
فکر کنم بهتره از راه سوم استفاده کنی.
تبیب جان ممنونم از توجهتون.
حالا میشه در مورد چگونگی عملکرش توضیح داده بشه.
یعنی اینکه چجوری این مسئلرو پیاده کنم.
مثلاً من اگه ده تا عنصر اچ تی ام ال داشته باشم که باید caption اینا عوض بشه نحوه ی کد نویسیم باید به چه شکلی باشه؟
با تشکر

tabib_m
یک شنبه 13 آبان 1386, 00:23 صبح
خوب من اگه باشم، میام از آرایه استفاده میکنم. یعنی توی یک فایل (با هر پسوندی) یک آرایه میسازم از لغات مورد نیاز و بعد فایل مورد نظر رو همه جا اینکلود میکنم. در نهایت با اشاره به هر اندیس از آرایه، نتیجه ی دلخواهم رو میگیرم:


#fa.inc
$TRANS=array(
'hello'='سلام',
'goodbye'='خدانگهدار',
'open'='باز کن',
'close'='ببند'
);
#

#ar.inc
$TRANS=array(
'hello'='السلام علیکم',
'goodbye'='فی امان الله',
'open'='افتح',
'close'='سد'
);
#

#en.inc
$TRANS=array(
'hello'='Hello',
'goodbye'='Goodbye',
'open'='Open',
'close'='Close'
);
#

این ها سه فایل مجزا بودن.

حالا طریقه استفاده:


#thisPage -> thePage.php?lang=fa
<?php
include($_GET['lang'].".inc");

echo $TRANS['hello'];
?>
<input type="button" onClick="alert('<?=$TRANS['goodbye'];?>'); window.close();" value="<?=$TRANS['close'];?>" />

این صفحه بر اساس lang خیلی راحت تغییر زبان میده.

(البته یادت باشه که در مورد direction هم باید حواست جمع باشه)

موفق باشید.

oxygenws
یک شنبه 13 آبان 1386, 07:51 صبح
همچین کاری نکن :)

یا از gttext استفاده کن. (فکر کنم وردپرس اینطوری باشه)
یا عبارات رو با define تعریف کن و بذار تو برنامه. (مثل سرندیپیتی)

mrrajabi
یک شنبه 13 آبان 1386, 09:41 صبح
یا از gttext استفاده کن. (فکر کنم وردپرس اینطوری باشه)
یا عبارات رو با define تعریف کن و بذار تو برنامه. (مثل سرندیپیتی)
gttext چی هست؟میشه بیشتر راهنمائی کنید یا یه منبع برای مطالعه ی بیشتر معرفی کنید.

cybercoder
یک شنبه 13 آبان 1386, 11:05 صبح
بهترین راه همون Defne‌کردنه

armin390
یک شنبه 13 آبان 1386, 12:35 عصر
gttext چی هست؟میشه بیشتر راهنمائی کنید یا یه منبع برای مطالعه ی بیشتر معرفی کنید.
http://www.gnu.org/software/gettext/manual/gettext.html
http://www.php.net/manual/en/ref.gettext.php

sweb
یک شنبه 13 آبان 1386, 16:24 عصر
بهتره به پروژه phpBB (http://www.phpbb.com/) یک نگاه بندازی یک نمونه خوب از یک پرتال چند زبانه هستش!

amirhosein
یک شنبه 13 آبان 1386, 20:05 عصر
منم استفاده از روش define رو توصیه میکنم.اگه یه نگاه به کدهای cms های چون phpnuke هم بندازی کارت خیلی راه میفته.

roze_sepideh
دوشنبه 14 آبان 1386, 13:14 عصر
خوب یک سوال برای من پیش اومده...شاید خیلی هم ربط نداشته باشه... اما اگر قرار باشه پروژه چند زبانه باشه و تعداد زبان نامحدود و خود کاربر ما باید این اطلاعات رو وارد کنه...اونوقت چه روشی بهتره؟ دیتابیس رو چجوری باید سازمان داد؟

tabib_m
دوشنبه 14 آبان 1386, 16:33 عصر
خوب توی دیتابیس میتونی فقط اسم زبان ها رو لیست کنی با آدرس فایلهای لغت هاشون.
بقیه ی کارها دیگه فقط کار با فایلها و دیگر کارهای طبیعیه.

oxygenws
دوشنبه 14 آبان 1386, 18:50 عصر
بهترین راه همون Defne‌کردنه

هیچ راه «بهترین»ی وجود نداره. در هیچ جایی و در هیچ مسئله ای. سعی کن دیگه از این کلمات استفاده نکنی :)

musiox
دوشنبه 14 آبان 1386, 20:36 عصر
xml برای این کار بد نیست .

oxygenws
دوشنبه 14 آبان 1386, 21:47 عصر
xml برای این کار بد نیست .
به نظر من اصلا راه مناسبی نیست :) سرعت خیلی خیلی کمی خواهد داشت.

cybercoder
چهارشنبه 16 آبان 1386, 16:38 عصر
هیچ راه «بهترین»ی وجود نداره. در هیچ جایی و در هیچ مسئله ای.

چرا در این مسئله همین بهترینه برو یک کم تحقیق کن بعد پست بزن


سعی کن دیگه از این کلمات استفاده نکنی

زیاد تند نرو

oxygenws
چهارشنبه 16 آبان 1386, 19:25 عصر
چرا در این مسئله همین بهترینه برو یک کم تحقیق کن بعد پست بزن
ممنون میشم این «بهترین» بودن رو بهم اثبات کنی.
یا حداقل بهم معرفی کنی که از چه لینک هایی می تونم اطلاعات کسب کنم!

armin390
چهارشنبه 16 آبان 1386, 23:09 عصر
چرا در این مسئله همین بهترینه برو یک کم تحقیق کن بعد پست بزن
یعنی بهترین راهی که شما بهش رسیدی! یعنی در نتیجه تفکرات و تحقیقات درست یا غلطتت به این نتیجه رسیدی که این بهترین راه حلت هست!!
ولی این دلیل نمیشه این رو تعمیم بدی! چون این مثلاً بهترین با توجه به سطح برداشتتون از مساله نتیجه میشه! و طبیعی هست که افراد مختلف بهترین های مختلف داشته باشن شاید برخی بهترینشون مشترک باشه!! پس در واقع این بهترین بهترین نیست...
در ضمن اونی که بهش خطاب کردی اول تحقیق کن مطمئن باش نیازی به تذکر شما نداشت چون به موقعش تحقیقاتش رو کرده و می کنه...

cybercoder
پنج شنبه 17 آبان 1386, 17:13 عصر
ممنون میشم این «بهترین» بودن رو بهم اثبات کنی.
یا حداقل بهم معرفی کنی که از چه لینک هایی می تونم اطلاعات کسب کنم!

استفاده از روش Define کردن متغیرها در یک فایل و include کردن فایل روش ساده تریه
استفاده از Gettext شاید سریع تر از روش های دیگه به نظر برسه اما زمانی که کش انجام می شه این طوریه وقتی که کش غیر فعال باشه اونوقت وحشتناکه. ( افراد زیادی این Benchmark رو انجام دادن من خودم هم برای اطمینان بر روی یکی از سیستم هام این benchmark رو انجام دادم می تونید تو اینترنت نمونه هایی رو ببینید) اشکال استفاده از Gettext زمانی که کش انجام میشه اینه که برای اینکه یک Translation اضافه شده درست کار کنه نیازمند Restart وب سرور هستیم. از اونجایی که اکثرا از هاست های Share استفاده می کنن فکر نمی کنم کسی بتونه Webserver رو ریستارت کنه. اما اگر یک هاست Dedicate دارید شدیدا پیشنهاد می شه که از GETTEXT استفاده کنید.
استفاده از آرایه ها هم باعث درهم ریختگی کد می شه و خوانایی توسط یک غیر برنامه نویس خیلی پایینه.
در مجموع همه روش ها به غیر از Define کردن متغیرها در یک فایل از کسانی که از PHP هیچ گونه سر رشته ای ندارند قدرت Translate رو تا حدودی می گیره. مثلا به همین پروژه های فارسی شده مثل مامبو یا جوملا و ... رو نگاه کنید برخی گرافیست ها حتی ترجمه رو انجام دادن.
سرعت سادگی در کد نویسی امکانات و سرعت و سادگی در توسعه زبان ( Locale ) آیتم هایی هستند که باعث می شه من بگم این روش بهترینه.

موفق باشید.

oxygenws
پنج شنبه 17 آبان 1386, 18:21 عصر
خوب می دونی سیستم ها توسعه پیدا می کنند و رشته ها روز به روز زیاد میشن یا تغییر می کنند، اینها رو با define چطوری کنترل می کنی؟؟ به نظرت در صورت نیاز به این سیستم «بهترین» روش define کردنه؟!

اگر داشتن یک سیستم مجتمع برای اسامی مفرد و جمع نیاز باشه چی؟ اون موقع باز هم «بهترین» Define است؟!!

اگر به قول تو، سرور اختصاصی وجود داشت، باز هم «بهترین» define است؟!

=====

شاید بشه گفت از نظر سرعت، در حالتی که (۱) شما سرور اشتراکی دارید (۲) تعداد رشته هایی که نمایش داده میشه نسبت به کل فایل خیلی کم نباشه (۳) در حالتی که لازم باشه فقط یک فایل زبان رو وارد کنید (که معمولا مجبوریم حداقل دو زبان رو وارد کنیم) (۴) ....
در این حالت، define «بهترین» خواهد بود. اما در مابقی حالات مسلما «بهترین» نمی باشد!!!!!!!!!

=====

«بهترین»، بسته به موقعیت برنامه و به قول معروف شرایط محیطی شدیدا متغیره. این بحث همونقدر مسخره است و بی خود که بحث PHP بهتر است یا ASPX!!!

=====

در نهایت خیلی آدم یا باید خودخواه باشه یا کوته نظر و یا خیلی خیلی دانا که از اینچنین کلماتی استفاده کنه. به هر ترتیب، کاملا دوستانه بهت توصیه می کنم از این کلمات استفاده نکنی و باور کن این توصیه رو به همه می کنم و خودم هم رعایت می کنم.

(البته این بحث فلسفی ته دراز داره و از حوصلهء این بحث و حوصلهء من خارجه و احتمالش زیاده دیگه این تاپیک رو ادامه ندم)

cybercoder
شنبه 19 آبان 1386, 12:26 عصر
در نهایت خیلی آدم یا باید خودخواه باشه یا کوته نظر و یا خیلی خیلی دانا که از اینچنین کلماتی استفاده کنه

شاید هم شرایط پرسنده سوال محدود به چند روش. در هر صورت منم به احترام شما و خودم ادامه نمی دم.

موفق باشید.