dr.fet91

طراحی سایت های چند زبانه به چه صورت است؟

dr.fet91 ۱۳۹۹/۰۴/۱۵ زبان برنامه‌نویسی پی‌اچ‌پی

سلام

من قرار یک وب سایت درست کنم که از چند زبان پشتیبانی کنه!
همچنین قرار این سایت بعدا نسخه اندرویدی و IOS هم داشته باشه یعنی باید تمام امکانات به صورت api باشه!

می تونم بنویسم سایت رو اما نمیدونم چه رویکردی رو دنبال کنم و برنامم با توجه به تجربه ای که دارم می دونم خیلی در هم و برهم میشه!
موضوع اینه که سایت اگر بخواد چند زبانه باشه دو مدل دیدم بعضی سایت ها
www.site.com/en/... هستن بعضی ها www.site.com/...?lang=fa
من قبلا بخش پیج رندر سایت رو به صورت شی گرا نمی نوشتم و هر ماژولی که میخواست لود شه فقط کافی بود توی پوشه ماژول بذاریش اما این بار میخوام از رویکرد شما که در آموزش ام وی سی بود استفاده کنم!
کدوم حالت بهتر از دو حالت بالا و منطقی تره؟ و اگه یه راهنمایی کلی کنید ممنون میشم!
همچنین اگر به صورت کلی بگید که رویکرد استاندارد چندزبانه بودن به چه صورت ممنون میشم. و اصلا به طور کلی اگر بخوام امکان افزودن زبان جدید به سایت یعنی مثلا یک دکمه در پنل مدیر، داشته باشم و سایت چند زبانه باشه باید چه کنم!

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

پاسخ‌ها به این تاپیک
علیرضا جزایری
علیرضا جزایریتوسعه دهنده پی اچ پی
۱۳۹۹/۰۴/۱۵

سلام دوست عزیز

از سوالتون متوجه شدم که یکی از دغدغه های شما استاندارد بودن پروژه‌ تون هست.

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

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

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

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

برای چالش چند زبانه بودن سایت:

https://laravel.com/docs/7.x/localization

برای چالش احراز هویت api (استفاده از sanctum راحت تره وکارتون رو سریع تر راه می ندازه اما passport استاندارد تره)

https://laravel.com/docs/7.x/passport

https://laravel.com/docs/7.x/sanctum

dr.fet91
dr.fet91
۱۳۹۹/۰۴/۱۹

سلام

ممنون از شما!

من رفتم سراغ لاراول خیلی آسون تر از اونچه بود که فکرشو میکردم!

فقط یه سوال دارم؟

من یک سری توابع عمومی برای برنامم دارم که تو برنامه قبلیم توی یه پوشه به اسم lib بود که با حلقه تکرار همشونو include میکردم!

الان سوالم اینه که اگه بخوام این پوشه رو توی لاراول بذارم باید اونو کجا قرار بدم!

البته امتحان کردم هرجا بذارم کار میکنه اما خوب فکر کنم منو شناخته باشین دیگه :d

در پاسخ به

علیرضا جزایری
علیرضا جزایریتوسعه دهنده پی اچ پی
۱۳۹۹/۰۴/۲۱

سلام، خواهش می کنم

همونطور که گفتید شما آزادین هر جا که خواستین توابع helper برنامتون رو بذارین اما بنظر من توی پوشه app یک پوشه درست کنید به نام helpers و اون توابع رو در فایلی مثل helpers.php قرار بدین (میشه گفت این کار به یک best practice توی پروژه های لاراولی تبدیل شده).

برای استفاده هم فایل composer.json پروژه رو به شکل زیر تغییر بدین.

"autoload": {
 "files": [
 "app/Helpers/Helpers.php"
 ],
 "classmap": [
 "database/seeds",
 "database/factories"
 ],
 "psr-4": {
 "App\\": "app/"
 }
},

در پاسخ به

محمدحسین فلاح
محمدحسین فلاح
۱۳۹۹/۰۴/۱۵

با سلام
سئوال شما چند بخش و چالش مهم داره که برای هرکدوم باید ساعت ها مطالعه و بررسی کرد .

با توجه به صحبت های شما و نیازمندی سایتی که فرمودید میتونم چند تا پیشنهاد بهتون بدم

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

پیشنهاد من فریم ورک لاراول هست

شما به راحتی میتونید سامانه تون رو api-based بنویسید . مثلا الان با یکی از spa ها مثل vuejs یا react وب اون رو پیاده سازی کنید و بعدا میتونید کلاینت های دیگه موبایلی یا دسکتاپ رو به همون api ها وصل کنید

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

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

dr.fet91
dr.fet91
۱۳۹۹/۰۴/۱۵

ممنون از پاسختون

ولی مشکل اینه که من هیچ فریم ورکی رو بلد نیستم! و فکر نکنم تو این فرصت بتونم با اونا کار کردنو یاد بگیرم! فرصتی نیست و باید پروژه رو تحویل بدم!

در پاسخ به

فاطمه
فاطمه
۱۳۹۹/۰۴/۱۶

سلام

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

اول اینکه برای چند زبانه بودن هم میشه از دیتابیس استفاده کرد هم از فایل. مثلا روش فایل به این صورت که ترجمه ها تو پوشه ای هم نام با زبان مثلا fa قرار میگیره، در فایلی ذخیره میشه مثلا app.php. بعد تو کانتکست برنامه زبان مشخص میشه که چی هست مثلا en یا fa.

برای احراز هویت هم مبحثی با عنوان OAuth هست که فریم ورک لاراول با استفاده از پکیجی به نام passport اون رو پشتیبانی کرده. (البته می دونم زمان ندارید و صرفا برای آشنایی گفتم. شاید بعد ها بخواین توی این زمینه مطالعه داشته باشید.)

اما الان برای احراز هویت، با توجه به نیازمندی میشه توکن رو تو دیتابیس ذخیره کرد و تو یه فیلد هم تاریخ استارت یا تاریخ پایانش رو ذخیره کرد.

از صحبت های آخرتون این طور متوجه شدم که می خواین همه چیز حالت ایده آل داشته باشه و روش هایی که استفاده کردید راضی کننده نیست. خب مشکلی نیست، پروژتون رو می تونید به ساده ترین شکل بنویسید اما ارجاع بدین که همه این کار ها رو میشه با امکانات یک فریم ورک خیلی بهتر پیاده سازی کرد اما نیاز به زمان برای مطالعه و تمرین داره.

موفق باشید.

در پاسخ به

dr.fet91
dr.fet91
۱۳۹۹/۰۴/۲۱

سلام

ممنون از شما!

من رفتم سراغ لاراول خیلی آسون تر از اونچه بود که فکرشو میکردم!

فقط یه سوال دارم؟

من یک سری توابع عمومی برای برنامم دارم که تو برنامه قبلیم توی یه پوشه به اسم lib بود که با حلقه تکرار همشونو include میکردم!

الان سوالم اینه که اگه بخوام این پوشه رو توی لاراول بذارم باید اونو کجا قرار بدم!

البته امتحان کردم هرجا بذارم کار میکنه اما خوب فکر کنم منو شناخته باشین دیگه :d

در پاسخ به