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

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

ساختار فایل های ترجمه لاراول در روش اول به این صورته:

در فولدر resource فولدر lang یک فولدر با مخفف زبان فارسی fa ایجاد کنید. و داخل اول فایل های ترجمه رو به صورت دسته بندی شده داخل هر فایل قرار میدیم. برای مثال سایت من قسمتی داره با نام  contact و ترجمه های داخل اون متفاوت از سایر قسمت های سایته. برای همین داخل فولدر fa یک فایل با نام contact.php ایجاد میکنم و داخل اون رو به صورت زیر با کلید -> مقدار پر میکنم

همونطور که توجه میکنین فایل فقط یک آرایه از توع associative رو برگشت میزنه که هر کلید یک مقدار ترجمه رو برمیگرونه.

برای استفاده از ترجمه داخل فایل های بلید مثل زیر عمل میکنیم:

همونطور که متوجه شدین این روش خیلی با نظم و دقیقه و مناسب سایت های بزرگ با ترجمه های زیاده. در این روش بهتره حتما از fallback_locale با ترجمه انگلیسی استفاده کرده باشین (اگر نمیدونین جلوتر توضیح میدم)

روش دوم که ساده و خلاصه هست، روش stringمحور که با JSON انجام میشه و برای سایت های کوچیک با ترجمه های کم مناسبه. به این صورت که در مسیر resource/lang یک فایل json با نام مخفف زبان خودمون درست میکنیم برای مثال resource/lang/fa.json که همه ترجمه ها داخل اون قرار میگیره.

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

برای ترجمه حرفه ای تر منبع رو بخونین. اما بریم سراغ راه اندازیش:

فایل در مسیر config/app.php حاوی تنظیمات ترجمه هست که شما با تنظیم اون میتونین زبان سایت خودتون رو تغییر بدین.

اول از همه fallback_locale زبانیه که اگر ترجمه ای پیدا نشد بصورت جایگزین درنظر گرفته میشه. بهتره مقدارش همون en بمونه.

locale متغیری هست که زبان فعلیه برنامست. من اینو منتقل کردم به فایل .env برای اینکار کدتون رو بصورت زیر تغییر بدین:

حالا در فایل .env متغیر زیر رو تعریف کنین

یادتون باشه حتما در آخر از دستور زیر برای دوباره تنظیم کردن کش کانفیگ استفاده کنین

در آخر چند تا از امکاناتی که لاراول بهمون میده رو بگم: میتونیم متغیر وسط متن ترجمه فراخونی کنیم. میشه بصورت داینامیک زبان رو تغییر داد و نیازی نیست داخل کانفیگ تعریف کنین و برای مثال از url پارامتر بگیرین. میتونین بصورت شرطی برای جمع و فرد ترجمه بنویسین و…

منبع :Localization

دلیل باز نشدن برنامه Visual Studio Code یا WhatsDesk در اوبونتو

امروز اومدم با VS Code کار کنم ولی هرچی میزدم برنامه باز نمیشد از دیروز هم whatsdesk اجرا نمیشد! خب این از چالش های Ubuntu هستش و وقتی میخوای اخت بگیری با یک سیستم عامل بهتره همه قلق هاشو یاد بگیری.

مدتی بود VS Code  بهم خطای  “System limit for number of file watchers reached” رو میداد و برطرفش نکردم. تا اینکه امروز کلا Visual Studio Code اجرا نشد نشد و فراموش کردم خطایی که نمایش میداد چی بود! اول فکر میکردم بخاطر فولدر vendor نوتیف میداد اما با سرچ vs code is not runnig ubuntu از اینجا Cannot open Visual Studio Code این نتیجه رسیدم که برای مشاهده لاگ اجرای VS Code از دستور زیر میشه استفاده کرد:

که با اجرای اون به خطای زیر رسیدم:
Error: ENOSPC: System limit for number of file watchers reached, watch '/snap/code'با جستجوی متن خطا “System limit for number of file watchers reached” به صفحه React Native Error: ENOSPC: System limit for number of file watchers reached رسیدم. گویا این خطا ربطی به vs code نداره و بخاطر inotify watch هست. اول بیاین خطا رو درست کنیم بعد بقیه رو توضیح میدم. برای اینکه ببینید تنظیم فعلی سیستمتون برای دنبال کردن فایل ها چقدر هست این دستور رو بزنین:

احتمالا عددی حدود ۸ هزار میده. خب وقتی شروع به نصب برنامه ها مثل whatsdesk (نسخه غیر رسمی whatsapp) یا vscode در اوبونتو میکنین این برنامه نیاز دارن بعضی فایل ها رو دنبال کنن اصطلاحا ترک کنن. اینکار توسط watch انجام میشه و محدودیت هایی براش وجود داره. برای رفع خطا کد زیر رو بزنین

این کد به انتهای فایل /etc/sysctl.conf مقدار fs.inotify.max_user_watches=524288 رو اضافه میکنه.

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

همین! الان برنامه هایی که باز نمیشدن راحت باز میشن!

حالا بریم سراغ اینکه inotify watch چی هست؟
اول از همه باید بدونیم خود inotify چی هست. inotify از ترکیب inode notify تشکیل شده و یک زیر سیستم (subsystem) هسته لینوکسه که تغییرات فایل های سیستم رو مشاهده میکنه و از طریق api اونها رو به برنامه های سطح بالاتر اطلاع میده. watch هم این وسط فایل ها رو برای تغییرات دنبال میکنه و هر تغییری رو ارسال میکنه به inotify.

کد جاواسکریپت کپی متن در کلیپ بورد حافظه

برای اینکه متنی رو توی حافظه کپی کنین کافیه متنشتون رو به تابع زیر ارسال کنین:

تابع بالا از فیلد input استفاده میکنه که ممکنه واسه همه جالب نباشه و بکارمون نیاد. من خودم بعد کمی تست و گشتن به این نتیجه رسیدم که از clipboardjs (این کتابخونه هم خوبه: https://clipboardjs.com)  استفاده کنم. متاسفانه کد من با این کتابخونه تداخل داشته و ناچارا رفتم سراغ جستجو و کد زیر رو پیدا کردم که بسیار هم عالی بود.

 

منبع:
How TO – Copy Text to Clipboard
How to copy the div content to Clipboard

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

در اوبونتو وقتی print screen یا prtsc رو روی کیبورد میزنیم مثل ویندوز از صفحه عکس نمیگیره که تو کلیپبورد ذخیره کنه و بتونیم اونو تو شبکه های اجتماعی مثل تلگرام کپی پیست کنیم! البته که عکس رو مستقیم ذخیره میکنه ولی برای سرعت کار ترجه میدم عکس رو بعد اسکرین شات بتونم تو تلگرام کپی کنم.

وارد Settings بشین و بعد Keyboard و بعد تایپ کنین کپی، نوع اسکرین شاتی که میخواین رو انتخاب کنین. در حالت کلی از Ctrl + PrtSc استفاده کنین

تنظیم اسکرینشات در اوبونتو

منبع: Ubuntu 18.04 Desktop – How to printscreen direct to clipboard

ریفرش کردن دسکتاپ قفل شده در گنوم اوبونتو ۱۸

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

 

چطور نام کاربری و رمز عبور رو هنگام pull و push یک بار وارد کنم و برای همیشه ذخیره بشه؟

من دارم از اوبونتو ۱۸ استفاده میکنم. چطور نام کاربری و رمز عبور رو هنگام پول و پوش یک بار وارد کنم و ذخیره بشه و هر بار از من اینو نپرسه که رمز عبورت و نام کاربریت چیه؟

به سادگی:

بعد پول کنین. این کار نام کربری و رمز شمارو در یک فایل با نام ~/.git-credentials ذخیره میکنه که خیلی امن نیست. راحت همه میبینن حتی هش هم نمیشه. ولی راه حل بهتری اگر میشناسین بیگین یا خودم اینجا بعدا آپدیت میکنم.

منبع: How to save username and password in git?

نصب node.js و npm ورژن ۱۳ در اوبونتو ۱۸

از دستور زیر برای نصب پکیج منیجر نود و خود نود استفاده کنین:

یادتون باشه اگه نود نسخه قبلی دارین حتما اونو اول پاک کنین. برای توضیحات بیشتر سری به منبع بزنین یا اگر نسخه های قدیمی تر رو میخواین

مبع: NodeSource Node.js Binary Distributions

گرفتن جمع رکورد های برگشتی در لاراول ۵.۸

گاهی لازمه بدونیم یک مدل ما در رابطه با مدل دیگه ای (چند به چند و یک به چند) چه تعداد نتیجه داره؟ برای مثال میخوایم بدونیم این پست من چه تعداد کامنت داره؟ یک عدد میخوام.

برای یک مدل فقط کافیه از متد count بصورت زیر استفاده کنم. (چند نمونه مثال)

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

یا شمارنده های با فیلتر بیشتر یا چند شمارنده

 

منبع: Counting Related Models

چطور در جاوااسکریپت آرایه ها را با هم یکی کنیم و به هم بچسبانیم؟

در جاوا اسکریپت متدی وجود داره که با اون میتونیم دو یا چند آرایه رو به هم متصل کنیم. نتیجه این متد آرایه فعلی را تغییری نمیدهد بلکه آرایه جدیدی به return میکنه که شامل آرایه های جمع شدست.

قائده کلیش به این صورت بالاست. آرایه ای رو در ابتدا concat میکنیم و بعد آرایه های دیگه رو بعنوان پارامتر به اون میدیم. اگر فهرست آرایه هارو میخواین بصورت پارامتر وارد کنین، ابتدا یک آرایه خالی تعریف کنین که با فهرست آرایه هاتون concat میشه.

 

منبع: JavaScript Array concat() Method

نصب Vue با مدیریت بسته yarn

Vue برای نصب نیاز به مدیریت بسته Node.js همون npm داره یا اینکه میتونین اون رو از طریق یارن هم نصب کنین. از اینجا یاد بگیرید چطور مدیریت بسته یارن yarn رو نصب کنین

نکته: اگر قبلا vue رو نصب کردین حتما اون رو پاک کنین خصوصا اگر نسخه ۱ اونو دارین با دستور  remove vue-cli پاکش کنین.
نکته۲: vue قبلا با نام بسته vue-cli شناخته میشد و الان نام اون تغییر کرده به @vue/cli

برای نصب vue یکی از دو دستور زیر npm یا yarn رو استفاده کنین که من یارن رو ترجیح میدم چون خیلی سریعتر و بهتره.

برای نصب این بسته ها با دسترسی ادمین باشین تا بتونین نصبش کنین.

این دستور vue رو بصورت global رو سیستم شما نصب میکنه و بعد نصب شما به دستور vue دسترسی دارین. برای اینکه چک کنین آیا نصب شده یا نه به راحتی فقط نام اون رو تایپ کنین vue. که بهتون راهنمای کار با دستور vue و لیستی از دستورات موجود رو نشون میده.

با دستور زیر میتونین ببینین که چه نسخه ای رو نصب کردین

یا اگر قبلا یارن رو رنصب کردین با دستور زیر اون رو آپدیت کنین: