none
7 سال پیش توسط none مطرح شد
10 پاسخ

فارسی سازی اسلاگ در لاراول 5.5

سلام -
دوستانی که با لاراول 5.5 کار کردن میدونن که استراکچر پکیج elequent-sluggable عوض شده
سوالی که من داشتم اینکه چطور بخش فارسی رو بهش اضافه کنم — الان من از قسمت vendor/cviebtock/elequent-sluggable/reaource/config/sluggable.php بخش methode رو عوض کردم ولی باز اسلاگ فارسی نشد — منون میشم اگه کمک کنید


ثبت پرسش جدید
حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 7 سال پیش مطرح شد
10

من الان دارم از این پکیج در لاراول ۵.۵ بدونه مشکل استفاده میکنم
بعد از نصب این پکیج و اضافه کردن provider به app.php باید دستور زیر رو وارد کنید

php artisan vendor:publish

با وارد کردن این دستور یک فایل config به فولدر config روت اصلی اضافه میشه
که اونو باز میکنید و قطعه کد پایین رو دقیقا در دقیقا در بخش method میزارید البته من کد کامل فایل config رو در پایین قرار میدم

<?php

return [

    /**
     * What attributes do we use to build the slug?
     * This can be a single field, like "name" which will build a slug from:
     *
     *     $model->name;
     *
     * Or it can be an array of fields, like ("name", "company"), which builds a slug from:
     *
     *     $model->name . ' ' . $model->company;
     *
     * If you've defined custom getters in your model, you can use those too,
     * since Eloquent will call them when you request a custom attribute.
     *
     * Defaults to null, which uses the toString() method on your model.
     */

    'source' => null,

    /**
     * The maximum length of a generated slug.  Defaults to "null", which means
     * no length restrictions are enforced.  Set it to a positive integer if you
     * want to make sure your slugs aren't too long.
     */

    'maxLength' => null,

    /**
     * If left to "null", then use the cocur/slugify package to generate the slug
     * (with the separator defined below).
     *
     * Set this to a closure that accepts two parameters (string and separator)
     * to define a custom slugger.  e.g.:
     *
     *    'method' => function( $string, $sep ) {
     *       return preg_replace('/[^a-z]+/i', $sep, $string);
     *    },
     *
     * Otherwise, this will be treated as a callable to be used.  e.g.:
     *
     *    'method' => array('Str','slug'),
     */

    'method' => function($string, $separator = '-') {
        $_transliteration = ["/ö|œ/" => "e",
            "/ü/" => "e",
            "/Ä/" => "e",
            "/Ü/" => "e",
            "/Ö/" => "e",
            "/À|Á|Â|Ã|Å|Ǻ|Ā|Ă|Ą|Ǎ/" => "",
            "/à|á|â|ã|å|ǻ|ā|ă|ą|ǎ|ª/" => "",
            "/Ç|Ć|Ĉ|Ċ|Č/" => "",
            "/ç|ć|ĉ|ċ|č/" => "",
            "/Ð|Ď|Đ/" => "",
            "/ð|ď|đ/" => "",
            "/È|É|Ê|Ë|Ē|Ĕ|Ė|Ę|Ě/" => "",
            "/è|é|ê|ë|ē|ĕ|ė|ę|ě/" => "",
            "/Ĝ|Ğ|Ġ|Ģ/" => "",
            "/ĝ|ğ|ġ|ģ/" => "",
            "/Ĥ|Ħ/" => "",
            "/ĥ|ħ/" => "",
            "/Ì|Í|Î|Ï|Ĩ|Ī| Ĭ|Ǐ|Į|İ/" => "",
            "/ì|í|î|ï|ĩ|ī|ĭ|ǐ|į|ı/" => "",
            "/Ĵ/" => "",
            "/ĵ/" => "",
            "/Ķ/" => "",
            "/ķ/" => "",
            "/Ĺ|Ļ|Ľ|Ŀ|Ł/" => "",
            "/ĺ|ļ|ľ|ŀ|ł/" => "",
            "/Ñ|Ń|Ņ|Ň/" => "",
            "/ñ|ń|ņ|ň|ʼn/" => "",
            "/Ò|Ó|Ô|Õ|Ō|Ŏ|Ǒ|Ő|Ơ|Ø|Ǿ/" => "",
            "/ò|ó|ô|õ|ō|ŏ|ǒ|ő|ơ|ø|ǿ|º/" => "",
            "/Ŕ|Ŗ|Ř/" => "",
            "/ŕ|ŗ|ř/" => "",
            "/Ś|Ŝ|Ş|Ș|Š/" => "",
            "/ś|ŝ|ş|ș|š|ſ/" => "",
            "/Ţ|Ț|Ť|Ŧ/" => "",
            "/ţ|ț|ť|ŧ/" => "",
            "/Ù|Ú|Û|Ũ|Ū|Ŭ|Ů|Ű|Ų|Ư|Ǔ|Ǖ|Ǘ|Ǚ|Ǜ/" => "",
            "/ù|ú|û|ũ|ū|ŭ|ů|ű|ų|ư|ǔ|ǖ|ǘ|ǚ|ǜ/" => "",
            "/Ý|Ÿ|Ŷ/" => "",
            "/ý|ÿ|ŷ/" => "",
            "/Ŵ/" => "",
            "/ŵ/" => "",
            "/Ź|Ż|Ž/" => "",
            "/ź|ż|ž/" => "",
            "/Æ|Ǽ/" => "E",
            "/ß/" => "s",
            "/IJ/" => "J",
            "/ij/" => "j",
            "/Œ/" => "E",
            "/ƒ/" => ""];
        $quotedReplacement = preg_quote($separator, '/');
        $merge = [
            '/[^\s\p{Zs}\p{Ll}\p{Lm}\p{Lo}\p{Lt}\p{Lu}\p{Nd}]/mu' => ' ',
            '/[\s\p{Zs}]+/mu' => $separator,
            sprintf('/^[%s]+|[%s]+$/', $quotedReplacement, $quotedReplacement) => '',
        ];
        $map = $_transliteration + $merge;
        unset($_transliteration);
        return preg_replace(array_keys($map), array_values($map), $string);
    },

    /**
     * Separator to use when generating slugs.  Defaults to a hyphen.
     */

    'separator' => '-',

    /**
     * Enforce uniqueness of slugs?  Defaults to true.
     * If a generated slug already exists, an incremental numeric
     * value will be appended to the end until a unique slug is found.  e.g.:
     *
     *     my-slug
     *     my-slug-1
     *     my-slug-2
     */

    'unique' => true,

    /**
     * If you are enforcing unique slugs, the default is to add an
     * incremental value to the end of the base slug.  Alternatively, you
     * can change this value to a closure that accepts three parameters:
     * the base slug, the separator, and a Collection of the other
     * "similar" slugs.  The closure should return the new unique
     * suffix to append to the slug.
     */

    'uniqueSuffix' => null,

    /**
     * Should we include the trashed items when generating a unique slug?
     * This only applies if the softDelete property is set for the Eloquent model.
     * If set to "false", then a new slug could duplicate one that exists on a trashed model.
     * If set to "true", then uniqueness is enforced across trashed and existing models.
     */

    'includeTrashed' => false,

    /**
     * An array of slug names that can never be used for this model,
     * e.g. to prevent collisions with existing routes or controller methods, etc..
     * Defaults to null (i.e. no reserved names).
     * Can be a static array, e.g.:
     *
     *    'reserved' => array('add', 'delete'),
     *
     * or a closure that returns an array of reserved names.
     * If using a closure, it will accept one parameter: the model itself, and should
     * return an array of reserved names, or null. e.g.
     *
     *    'reserved' => function( Model $model) {
     *      return $model->some_method_that_returns_an_array();
     *    }
     *
     * In the case of a slug that gets generated with one of these reserved names,
     * we will do:
     *
     *    $slug .= $separator + "1"
     *
     * and continue from there.
     */

    'reserved' => null,

    /**
     * Whether to update the slug value when a model is being
     * re-saved (i.e. already exists).  Defaults to false, which
     * means slugs are not updated.
     *
     * Be careful! If you are using slugs to generate URLs, then
     * updating your slug automatically might change your URLs which
     * is probably not a good idea from an SEO point of view.
     * Only set this to true if you understand the possible consequences.
     */

    'onUpdate' => true,

];

محسن صادقی
تخصص : برنامه نویس
@sadeqi 7 سال پیش مطرح شد
0

سلام من سایت رو فرستادم روی سرور
توی لوکال slug ها توی مدیریت ساخته میشن و توی دیتا بیس میشینن
ولی توی سرور که بارگزاری کردم توی بخش ادمین slug ها ساخته نمیشن حروف الفبا چه فارسی چه انگلیسی ساخته نمیشن و فقط در صورت دو عنوان مشابه عدد اضافه میشه . سرور centos 7 با دایرکت ادمین
ممنون میشم راهنمایی کنید


حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 7 سال پیش مطرح شد
0

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


مهدی
تخصص : برنامه نویس و طراح وب
@mrmmg 4 سال پیش مطرح شد
0

@hesammousavi با سلام
آیا در لاراول 7 و آخرین نسخه این پکیج تنظیماتی که گفتید قابل اعمال هست؟ و یک سوال دیگر این تنظیماتی که شما دادید از روی عنوان (title) یا هر فیلد دیگه ای فارسی اسلاگ انگلیسی میسازه دیگه؟


حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 4 سال پیش مطرح شد
0

@mrmmg
سلام بله مشکلی نداره
البته این مربوط به پکیج sluggable میشه و این تنظمیات هم مربوط به همونه


مهدی
تخصص : برنامه نویس و طراح وب
@mrmmg 4 سال پیش مطرح شد
0

@hesammousavi
تشکر میکنم از شما، من از این پکیج با تنظیماتی که شما فرستادید انجام دادم و کار هم کرد منتهی چیزی که مد نظر من بود میخواستم اگه title یا هرچیز دیگری وارد شد معادل انگلیسی آن به عنوان slug ذخیره بشه، مثلا:
title => وبسایت
slug => website
آیا چنین کاری امکان پذیره؟ اگر هست لطفا مرا راهنمایی کنید که چطوری اینکار امکان پذیره؟


حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 4 سال پیش مطرح شد
0

@mrmmg
مترجم که نیست، این فقط میاد به شکل slug تبدیل میکنه یک متن رو


coarad supp
تخصص : برنامه نویس لاراول
@coaradsupp 4 سال پیش مطرح شد
0

@mrmmg

سلام؛ یه سری من تست کردم به همین شکلی که میخواین انجام داد، ولی نه دقیق، به درستی تبدیل نمیکرد، توی همین فیال کانفیگ متد رو خالی بذارین، خودش تبدیل رو انجام میده، تست کنید ببینید به چه شکل هست


صادق مرادی
تخصص : توسعه دهنده لاراول و برنامه نو...
@moradiemails 4 سال پیش مطرح شد
0

دوستان شما وقتی بخوایید دستور php artisan config:cache رو بزنید خب بهتون خطای کلوژر میده خب. چرا متد رو بصورت مستقیم استفاده کردید تو فایل کانفیگ!؟؟؟

 LogicException

  Your configuration files are not serializable.

  at C:\Users\Shaparak\Desktop\laravel\vendor\laravel\framework\src\Illuminate\Foundation\Console\ConfigCacheCommand.php:71
    67|             require $configPath;
    68|         } catch (Throwable $e) {
    69|             $this->files->delete($configPath);
    70|
  > 71|             throw new LogicException('Your configuration files are not serializable.', 0, $e);
    72|         }
    73|
    74|         $this->info('Configuration cached successfully!');
    75|     }

reza kamali
تخصص : PHP &amp; WordPress
@reza.kamali 4 سال پیش مطرح شد
0

برای حل مشکل فارسی سازی اسلاگ میشه یک helper دلخواه نوشت
ابتدا پوشه ی Helper رو در app ایجاد و در ان پوشه ی ایجاد فایل help.php
نوشنن متد مورد نظر در ان سپس معرفی فایل help به composer.json
سپس در cmd دستور composer dump-autoload


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

ورود یا ثبت‌نام