سلام دوستان وققتون بخیر باشه
من میخام ی دکمه بزارم توی سایتم که کاربر با کلیک روی اون بتونه زبانه سایتا تغییر بده اما مشکلم در اجرا نشدن ساختار شرطیه که نوشتم
این متد
public function updatelang()
{
if($lang = App::getlocale())
{
switch($lang)
{
case 'fa';
App::setlocale('en');
$lang = App::getlocale();
break;
case 'en';
App::setlocale('fa');
$lang = App::getlocale();
break;
}
}
return redirect()->back()->with('lang', $lang);
}
این ویو
session('lang')
session('lang'=='fa')
<li><a href="{{ route('updatelang') }}" class="btn btn-danger">فارسی</a></li>
@else
<li>1 <a href="{{ route('updatelang') }}" class="btn btn-info"> English </a></li>
@endif
@else
<li> 2<a href="{{ route('updatelang') }}" class="btn btn-info"> English </a></li>
@endif
ببینید دفعه اولی که وارد سایت میشه پیشفرض زبان انگلیسی هست اما بعد از کلیک روی دکمه فارسی میشه اما وقتی بازم کلیک میکنم دیگه انگلیسی نمیشه در واقع با اینکه مقدار متغیر lang برابر fa هست اما برنامه وارد قسمت 'case 'fa نمیشه
ممنون میشم راهنمایی کنید..
خب پس حدس بنده درست بوده ، مشکل از SetLocal هستش
احتمالا وقتی یکبار یه چیزی Set میشه نمیاد روی اون دوباره تغییری ایجاد بکنه و دوباره داره مقدار جدیدی رو Set میکنه برای همین هرچی ما Set میکنیم و حالا میخوایم بگیریمش در اصل میاد مقدار اولی که ست شده رو میخونه.
بهترین کار چیه ؟ استفاده از کوکی ، معمولا تنظیمات زبان رو در کوکی ست میکنن ، شما فرض کن این سایت رو 1000 نفر همزمان میخوان استفاده بکنن ، خب 1000 تا سشن ست بشه ؟؟ میدونید چقدر رم میگیره از سرور و سرور رو کند میکنه ؟؟ شما باید از کوکی ها استفاده بکنید. باید یک کوکی در مرورگر کاربر ذخیره بکنید و اون رو هربار چک بکنید.
درود بر شما
$lang رو خارج از بلاک شرطی تعریف کنید
public function updatelang()
{
$lang = App::getlocale()
if($lang)
{
switch($lang)
{
case 'fa';
App::setlocale('en');
$lang = App::getlocale();
break;
case 'en';
App::setlocale('fa');
$lang = App::getlocale();
break;
}
}
return redirect()->back()->with('lang', $lang);
}
@Reza.7
فرقی نکرد دوباره از اول که وارد سایت میشی انگلیسیه چون سشنی وجود نداره بعد از کلیک فارسی میشه اما دیگه هرچی کلیک کنم تغییری نمیکنه یا همون وارد قسمت case 'fa'; نمیشه
این قسمت ها dd بگیرید اصلا اجرا میشن؟
case 'fa';
dd('fa');
App::setlocale('en');
$lang = App::getlocale();
break;
case 'en';
dd('en');
App::setlocale('fa');
$lang = App::getlocale();
break;
@Reza.7
dd گرفتم قسمت en اجرا میشه اما fa نه واردش نمیشه که بخاد dd کنه..بازم اول موقع ورود سشن که وجود نداره وارد en میشه و اونا dd میکنه اما بعد از اینکه dd اون قسمتا برمیدارم هر چقدر کلیک میکنم وارد fa دیگه نمیشه که بخادdd کنه..
خب شرط if رو بردارید و حالا ببینید dd اجرا میشه؟
public function updatelang()
{
$lang = App::getlocale()
switch($lang)
{
case 'fa';
dd('fa');
App::setlocale('en');
$lang = App::getlocale();
break;
case 'en';
dd('en');
App::setlocale('fa');
$lang = App::getlocale();
break;
}
return redirect()->back()->with('lang', $lang);
}
سلام.
کدتونو به صورت زیر بنویسید.
public function updatelang() {
$lang = App::getlocale()
if($lang) {
switch($lang) {
case 'fa';
$en = App::setlocale('en');
$lang = $en;
break;
case 'en';
$fa = App::setlocale('fa');
$lang = $fa;
break;
}
}
return redirect()->back()->with('lang', $lang);
}
با سلام خدمت شما اولا اینکه حتما بررسی کنید که آیا بعد از اینکه روی دکمه فارسی میزنید اصلا مقدار 'fa' ثبت میشه ؟؟ شاید فقط شما میتونید یکبار یه چیزی رو توی AppLocal ثبت کنید. و شاید مشکل از اون باشه پس چیکار کنید؟ اولا که بهتره کدتون رو اینطوری بنویسید.
public function updatelang() {
$lang = App::getlocale();
if($lang) {
switch($lang) {
case 'fa':
App::setlocale('en');
$lang = 'en';
break;
case 'en':
App::setlocale('fa');
$lang = 'fa';
break;
}
}
return redirect()->back()->with('lang', $lang);
}
حالا شما باید 2 جا dd بزارید یکی قبل از اینکه switch case خونده بشه و یکی بد از اینکه switch case خونده شد. یعنی :
public function updatelang() {
$lang = App::getlocale();
dd($lang)
if($lang) {
switch($lang) {
case 'fa':
App::setlocale('en');
$lang = 'en';
break;
case 'en':
App::setlocale('fa');
$lang = 'fa';
break;
}
}
dd(App::getlocale())
return redirect()->back()->with('lang', $lang);
}
خب یکبار که شما دفه اول یک مقادر پیفرض ثبت میکنید ، یکبار هم وقتی کاربر کلیک میکنه ، دفه دوم رو باید قشنگ با dd ها بررسی کنید ببینید چه مقداری نمایش داده میشه. اگر مقادیر فرق بکنه و درست ثبت شده یعنی سوتی یه جای دیگست. اما اگر مقدار ها تغییر نکنه میفهمیم که احتمالا مشکل از SetLocal هستش.
@ehsndvr
ممنون ببینید دوست عزیز موقع dd اولی که گفتید مقدار en را نشون میده که پیشفرض خوده سیستم هستش و بعد تویdd دومی مقدار fa را نشون میده پس یعنی تغییر میکنه..همون موقع هم تغییر میکرد اما مشکل چه الان و چه اونموقع اینه که وقتی از en به fa تبدیل میشه دیگه تغییر نمیکنه و از fa به en تغییر پیدا نمیکنه و روی همون fa دیگه میمونه.
آقا اصلا شما چرا انقدر کدتون رو سخت نوشتید
کاربر هرموقع این تابع رو صدا بزنه یعنی میخواد از فارسی به انگلیسی و از انگلیسی به فارسی بره پس بهتره بنویسید:
$lang = App::getlocale() == "en" ? App::setlocale("fa") : App::setlocale("en");
$lang = App::getlocale();
return redirect()->back()->with('lang', $lang);
لطفا این کد رو تست کنید.
@ehsndvr
ممنون از وقتی که میزاری
اما مثه قبله با کلیک از انگلیسی میشه فارسی اما دیگه تغییر نمیکنه نمیدونم کجای کارم اشتباهه
🤔🤦
@mirzamohammad.com قربون شما، خواهش میکنم
شما لطف کنید 2 تا عکس برای بنده بزارید از مقدار dd :
$lang = App::getlocale() == "en" ? App::setlocale("fa") : App::setlocale("en");
$lang = App::getlocale();
dd($lang)
return redirect()->back()->with('lang', $lang);
یکی بعد از اینکه فارسی رو انتخاب میکنید و یکی بعد از اینکه انگلیسی رو انتخاب میکنید و همون فارسی میمونه.
@ehsndvr
ی توضیحی بهتون بدم من اومدم روی config بصورت دستی زبانا fa کردم و واسه ی حالت انگلیسی دوتا حالت مختلف گذاشتم یکی انگلیسی 1 که همون موقع که کاربر وارد سایت میشه بهش نشون میده زمانی که روی دکمه کلیک نکرده تا سشنی وجود داشته باشه و بعد از کلیک حالت انگلیسی ۲ میشه زمانی که کاربر روی دکمه کلیک میکنه حالا اینجا چون توی config اول fa بوده تغییر میکنه و حالت انگلیسی ۲ بوجود میاد اما دیگه فارسی نمیشه یعنی دقیقا مثله قبل فقط ی بار تبدیل میشه اونم اینبار از fa به en .. اگه متوجه نشدید تا از اینم عکس بدم
@ehsndvr
با این کدی که گفتید
$lang = App::getlocale() == "en" ? App::setlocale("fa") : App::setlocale("en");
$lang = App::getlocale();
dd($lang);
return redirect()->back()->with('lang', $lang);
عکسش میشه این
من طبق صحبت شما اینکارا کردم اگه اشتباهه بگید اول کده شما را نوشتم و بعد اومدم روی دکمه انگلیسی زدم که فارسی شه که خروجی همین بود و یکی دیگه اومدم dd را حذف کردم و امتحان کردم تا سایت فارسی شه و بعد dd را اضافه کردم و روی دکمه زدم تا انگلیسی بشه و خروجی بازم همونه
خب پس حدس بنده درست بوده ، مشکل از SetLocal هستش
احتمالا وقتی یکبار یه چیزی Set میشه نمیاد روی اون دوباره تغییری ایجاد بکنه و دوباره داره مقدار جدیدی رو Set میکنه برای همین هرچی ما Set میکنیم و حالا میخوایم بگیریمش در اصل میاد مقدار اولی که ست شده رو میخونه.
بهترین کار چیه ؟ استفاده از کوکی ، معمولا تنظیمات زبان رو در کوکی ست میکنن ، شما فرض کن این سایت رو 1000 نفر همزمان میخوان استفاده بکنن ، خب 1000 تا سشن ست بشه ؟؟ میدونید چقدر رم میگیره از سرور و سرور رو کند میکنه ؟؟ شما باید از کوکی ها استفاده بکنید. باید یک کوکی در مرورگر کاربر ذخیره بکنید و اون رو هربار چک بکنید.
@ehsndvr
اها خیلی ممنون از وقتی که گذاشتید
در مورد این مقدار رم مصرفی و اینا که گفتید اطلاعاتی ندارم در موردش مطالعه میکنم به خاطر همین ذهنم رفته بود سمت سشن
در کل ممنون
@mirzamohammad.com خواهش میکنم.
اما اگر میخواید براتون همین رو درست بکنم لطف کنید داخل تلگرام به بنده پیام بدین که با Any Desk بیام روی سیستمتون بررسی بکنم، چون اینطوری من باید همش به شما بگم و شما بزنید ، سخته !
آیدی تلگرام بنده : @ehsndvr
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟