آخرین فعالیت ٢٣ ساعت پیش

@matin

پارس کلیکی از ١ سال پیش

تجربه

15980

  • ٢ ماه پیش @matin به بحث در آمدزایی به دلار $ جواب داد.

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

  • ٢ ماه پیش @matin به بحث در آمدزایی به دلار $ جواب داد.

    میتونست چیزی خوبی باشه وقتی اصل سایت بازید فراوانی میداشت. ولی بهتره کسی که بخواد فروشگاه بزنه خودش وبسایت خودش رو داشته باشه حالا کی میتونه بگه اون وبسایت سئوی خوبی داره و محصولی رو که برای فروش گذاشتی دیده بشه ، رتبه اش هم الان توی جهان 356,023 اس یعنی خوب نیست برای یه فروشگاه ولی به هر حال از اطلاعاتی که دادید ممنون.

  • 1 - فک نکنم بشه فعالش کرد. با زبان های سمت سرور شما تنها میتونید به سرور تون دسترسی داشته باشید و عملا به سمت کلاینت هیچ دسترسی ندارید. شما هیچ چیزی رو در داخل بروزر کاربر توسط هیچ زبانی فعال کرده نمیتوانید تا خود یوزر نخواد. و شما تنها میتونید از کاربر خواهش کنید تا خودش فعال کنه.

    2 - بهتره از از دو نوع Validation استفاده کنید هم سمت کاربر و هم سمت سرور اگر تنها سمت کاربر باشه بدون اینکه کاربر بخواد javascript رو غیر فعال کنه میتونه به آسانی کد فورم رو تغییر بده و اینجوری از فیلتر تون که سمت کاربر گذاشتید رد میشه.

  • ٣ ماه پیش @matin به بحث مشکل در مورد بهینه سازی سایت جواب داد.

    با گوگل کروم میتونی اینکار رو انجام بدی . باید از تب Coverage در گوگل کروم استفاده کنی . اینجا link آموزش فعال کردن اون تب موجوده

  • ٣ ماه پیش @matin به بحث جلو گیری از دیده شدن id ها جواب داد.

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

  • ٣ ماه پیش @matin به بحث تجربه کاربری و رابط کاربری جواب داد.

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

  • ٣ ماه پیش @matin جوابی زیر بحث تجربه کاربری و رابط کاربری را لایک کرد.
  • اشتراک گذاری تجارب فکر خوبی است. ولی با همین انجمن فعلی هم میتونیم اینکار رو انجام بدیم فقط کافیه برچسپ تجربه رو انتخاب کنیم. به نظرم بخش دیگری برای به اشتراک گذاری تجربه ها و پروژه ها نیاز نیست.

  • ٣ ماه پیش @matin به بحث دیتابیس وبسایت چند زبانه جواب داد.

    @shahryarjb ممنونم مطالعه میکنم. سشن برای وبسایت نیاز هست ولی اون طریقه که من برای تغییر زبان استفاده میکنم اصلا به بودن سشن در تغییر زبان نیازی نداره و اینکار رو لاراول خیلی راحت کرده . من در حال ساخت وبسایتم با این شیوه استم تا الان به مشکلی بر نخوردم و انشاءالله بزودی درین آدرس آنلاین خواهد شد.

  • ٣ ماه پیش @matin به بحث دیتابیس وبسایت چند زبانه جواب داد.

    @tabesh به نظرم گذاشتن lang توی URL خیلی بهتره تا استفاده از SESSION برای تغییر زبان. من وقتی اون وبسایت رو ساختم یه مشکلی رو متوجه شدم. مشکل این بود که موتر های جستجو تنها زبان پیش فرض رو اندیکس میکردند. یعنی اگر زبان پیش فرض وبسایتت فارسی باشه توی گوگل تنها فارسی زبون ها میتونن مطالب سایتت رو پیدا کنن. چون وقتی از SESSION استفاده کنی URL تغییر نمیکنه وقتی URL تغییر نکنه موترهای جستجو متوجه موضوع نمیشن و همچنین نمیتوانی یک Sitemap کامل برای وبسایت خودت بسازی.

    ولی به هر حال و تمام مشکلات اگر خواستی بازهم از AJAX و SESSION برای تغییر زبان استفاده کنی من میتونم Tables و کد هام رو به دسترست قرار بدم یا مشکلت رو حل کنم.

  • ٣ ماه پیش @matin به بحث دیتابیس وبسایت چند زبانه جواب داد.

    @tabesh پوزش ازینکه سوال تون رو دیر دیدم. توی همین انجمن من تشریحاتی رو برای وبسایت چند زبانه که زبانهاش دارای یه تصویر هم باشن دادم به لاراول روی لینک کلید کنین. ولی اونجا از سشن استفاده نکردم. در اونجا ضرورت به استفاده سشن نبوده و منم حد اکثر کوشش رو کردم تا از سشن برای تغییر زبان استفاده نکنم . عوضش از یو آر ال برای تغییر زبان استفاده کردم .با سشن خیلی راحتره تغییر دادن زبان و توی این وبسایت از سشن استفاده کردم. فکر کنم خودت هم میخواهی چنین وبسایتی بسازی.

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

  • ۴ ماه پیش @matin به بحث دریافت پیامک با url جواب داد.

    نمیدونم باید کد تون رو به بینم. شاید چیزی را فراموش کرده باشید اگر تنها با URL بشه اس ام اس فرستاد که همه میفرستن چی کردیت خریده باشند چه نخریده باشند.

  • ۴ ماه پیش @matin به بحث دریافت پیامک با url جواب داد.

    این سیستم پیامک که شما دارید استفاده میکنید رو نمیدونم ولی خودم. از CURL که امن است و پیام هم با شماره در URL ظاهر نمیشود استفاده میکنم. وبسایت https://textbip.com سیستمی که من استفاده میکنم نام کاربری و پسورد را هم میخواهد.

  • ۴ ماه پیش @matin به بحث ساخت یک دسته بندی جواب داد.

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

  • ۴ ماه پیش @matin به بحث ساخت یک دسته بندی جواب داد.

    سوالت خیلی خوانا نیست. هدفت رو نگرفتم. یعنی چی

    از یک قسمت دیگه هم تعریف کالا دارم و در آخرم کالاها رو ارتباط بدم به اون دسته مورد نظر.

  • سلام.

    من یه پروژه داشتم که توی اون از شیوه های مختلف و موءثری برای ایجاد دو جهت rtl و ltr و چندین زبان استفاده نمودم. این شیوه ها رو جایی دیگری برای laravel ندیدم برای همین خواستم با شما در میان بذارم ، امید است که مفید باشد.

    • ذخیره زبانها و ترجمه هاشون توی دیتابس.

    • ایجاد دو جهت طوری که از یه تمپلیت استفاده شده باشه و یو آر ال متفاوت باشه.

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


    ذخیره زبانها توی دیتابس

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

    • درین روش دوتا TABLE بصورت واضح و روشن در نظر گرفته شده که خیلی راحت میشه زبان افزود یا ترجمه رو ویرایش کرد.

    شرح

    جدول اولی که موجوده شامل لیست زبانها است.

    CREATE TABLE `languages` (
      `language_id` int(11) NOT NULL,
      `name` longtext,
      `db_field` longtext,
      `lan_dir` varchar(100) DEFAULT NULL,
      `align` varchar(100) DEFAULT NULL,
      `dif_align` varchar(100) DEFAULT NULL,
      `status` longtext,
      `img` varchar(150) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    INSERT INTO `languages` (`language_id`, `name`, `db_field`, `lan_dir`, `align`, `dif_align`, `status`, `img`) VALUES
    (1, 'English', 'en', 'ltr', 'left', 'right', 'ok', 'language_list_english.jpg'),
    (2, 'Persian', 'fa', 'rtl', 'right', 'left', 'ok', 'language_list_farsi.jpg');
    
    ALTER TABLE `languages`
      ADD PRIMARY KEY (`language_id`);
    
    ALTER TABLE `languages`
      MODIFY `language_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;
    COMMIT;
    

    در جدول زبانها من دوتا Data هم وارد کردم تا بهتر درکش کرد. و ستون های مثل align ، dif_align رو برای استفاده توی css و انداختن باکس ها در جاهای مختلف با تغییر زبان درست کردم، status هم برای نمایش یا عدم نمایش زبان توی View استش.

    جدول بعدی برای ذخیره کردن ترجمه ها استش.

    CREATE TABLE `translates` (
      `word_id` int(11) NOT NULL,
      `word` longtext,
      `en` varchar(500) DEFAULT NULL,
      `fa` varchar(500) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    INSERT INTO `translates` (`word_id`, `word`, `en`, `fa`) VALUES
    (1, 'Home', 'Home', 'صفحه اصلی'),
    (2, 'Who_We_Are', 'Who We Are', 'ما که هستیم'),
    (3, 'About_Us', 'About Us', 'در باره ما'),
    (4, 'Our_Services', 'Our Services', 'خدمات ما');
    
    ALTER TABLE `translates`
      ADD PRIMARY KEY (`word_id`);
    
    ALTER TABLE `translates`
      MODIFY `word_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;
    COMMIT;
    

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

    یک کمک کننده به اسم Translate ساختم که شامل کدهای زیر است.

    class Translate {
        public static function translate($word,$locale) {
            $find_word = DB::table('translates')->where('word', $word);
            if($find_word->count() > 0){
                if($find_word->first()->$locale !== null  && $find_word->first()->$locale !== ''){
                    $return = $find_word->first()->$locale;
                }
                else{
                    $return = ucwords(str_replace('_', ' ', $word));
                }
            }
            else{
                $data['word'] = $word;
                $data['en'] = ucwords(str_replace('_', ' ', $word));
                DB::table('translates')->insert($data);
                $return = ucwords(str_replace('_', ' ', $word));
                $locale = 'en';
            }
            return $return;
        }
    }

    بعد از صدا زدنش همراه دو پارامتر که یکی کلمه است و دومی زبان برای ترجمه لغات. در صورتی که کلمه صدا زده شده توی دیتابس وجود نداشته باشه این کمک کننده قدرت اینو داره تا اون کلمه رو ایجاد کنه. کلمه ها در View باید به زبان انگلیسی نوشته بشه و عوض Space از Underscore باید استفاده کرد.

    برای ایجادhelper از این لینک آموزشی میشه استفاده کرد.بعد از ساخت کمک کننده میریم و یه مشخصه برای صدا زدنش توی config/app.php در قسمت 'aliases' => درست میکنیم. مشخصه که من ساختم اینه Trans یعنی با این کد

    {{'{{'}} Trans::translate('Who_We_Are',$locale) }}

    میشه توی View یه متنی رو به زبانهای موجود هرچی $locale باشه ترجمه کرد. اینکه $locale چه میتوانه باشه و چه هست اینو توی قسمت دوم مقاله شرح میدم.


    ایجاد یو آر ال های جدا گانه برای هر زبان

    فایده ها
    • موتور های جستجو قادر به index کردن همه زبانهای موجود در وبسایت میشن.

    • درین روش دیگه نیازی نیست چندین تیمپلیت استفاده نماییم.

    • اگر وبسایت مون Cache هم شود. بازهم قادر به تغییر زبانش استیم. در حالیکه وقتی یک URL باشه Cache جلو تغییر زبان و جهت رو میگیره.

    شرح

    برای استفاده ازین روش ضرور است هر Route که میسازیم متغییر locale رو هم داشته باشه مثال

    Route::get('/{locale}/about','ViewController@about');

    بعداً توی کنترولر ازین کدها

    public function about($locale='en')
    {
        $language = DB::table('languages')->where('db_field', $locale);
        if ($language->count() > 0){
            $data['dir'] = $dir = $language->first()->lan_dir;
            $data['locale'] = $locale = $locale;
            $data['lan_dir'] = $lan_dir = $language->first()->align;
            $data['dif_lan'] = $dif_lan = $language->first()->dif_align;
        }
        else{
            $data['dir'] = $dir =  'ltr';
            $data['locale'] = $locale = 'en';
            $data['lan_dir'] = $lan_dir = 'left';
            $data['dif_lan'] = $dif_lan = 'right';
        }
        return view('about_us')->with($data);
    }

    استفاده میکنیم، تا ضروریات مون رو برای زبان و جهت مورد نظر از دیتابس بگیریم. بعداً توی View استایل های مختلف رو برای هر جهت که در فولدر های مختلفی موجوده صدا میزنیم، مثلا.

    <link rel="stylesheet" type="text/css" href="{{'{{'}} 'assets/'.$dir.'/style.css' }}">

    لینک های هم که درست میکنیم باید $locale رو توش داشته باشه، مثلاً.

    <a class="nav-link" href="{{'{{'}} URL::to($locale.'/about') }}"> {{'{{'}} Trans::translate('Who_We_Are',$locale) }}</a>

    پایان