added multi lang to models

update translates
fixed product search
update starterkit
WIP: search for models have translate
main
A1Gard 3 months ago
parent 4716945aab
commit 54e1d13337

@ -19,7 +19,7 @@ jobs:
- name: Copy .env
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
- name: Install Dependencies
run: composer update -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist
run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist
- name: Generate key
run: php artisan key:generate
- name: Directory Permissions

@ -4,6 +4,7 @@ namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Http\Requests\XlangSaveRequest;
use App\Models\Product;
use App\Models\Xlang;
use Illuminate\Http\Request;
use GuzzleHttp\Client;
@ -22,6 +23,13 @@ class XlangController extends Controller
$xlang->tag = $request->input('tag');
$xlang->rtl = $request->has('rtl');
$xlang->is_default = $request->has('is_default');
if ($xlang->is_default){
Xlang::where('is_default','1')->update([
'is_default' => 0,
]);
}
if ($request->hasFile('img')) {
$name = time() . '.' . request()->img->getClientOriginalExtension();
@ -65,19 +73,22 @@ class XlangController extends Controller
public function store(XlangSaveRequest $request)
{
//
define("TRANSLATE_CONFIG_PATH", PREFIX_PATH . 'config/translator.php');
define("TRANSLATE_NEW_FILE", PREFIX_PATH . 'resources/lang/' . $request->tag . '.json');
$config = file_get_contents(TRANSLATE_CONFIG_PATH);
$re = '/\'languages\' \=\> (.*)\,/m';
preg_match_all($re, $config, $matches, PREG_SET_ORDER, 0);
$oldLangs = $matches[0][1];
$newLans = json_encode(array_unique(array_merge(json_decode($oldLangs), [$request->tag])));
$newConfig = (str_replace($oldLangs, $newLans, $config));
file_put_contents(TRANSLATE_CONFIG_PATH, $newConfig);
if (!file_exists(TRANSLATE_NEW_FILE)) {
file_put_contents(TRANSLATE_NEW_FILE, '{}');
if ($request->tag != 'en'){
define("TRANSLATE_CONFIG_PATH", PREFIX_PATH . 'config/translator.php');
define("TRANSLATE_NEW_FILE", PREFIX_PATH . 'resources/lang/' . $request->tag . '.json');
$config = file_get_contents(TRANSLATE_CONFIG_PATH);
$re = '/\'languages\' \=\> (.*)\,/m';
preg_match_all($re, $config, $matches, PREG_SET_ORDER, 0);
$oldLangs = $matches[0][1];
$newLans = json_encode(array_unique(array_merge(json_decode($oldLangs), [$request->tag])));
$newConfig = (str_replace($oldLangs, $newLans, $config));
file_put_contents(TRANSLATE_CONFIG_PATH, $newConfig);
if (!file_exists(TRANSLATE_NEW_FILE)) {
file_put_contents(TRANSLATE_NEW_FILE, '{}');
}
}
$xlang = new Xlang();
@ -141,6 +152,7 @@ class XlangController extends Controller
public function translate()
{
$langs = Xlang::all();
// return Product::where('name->en',null)->get();
return view('admin.langs.translateIndex', compact('langs'));
}

@ -9,6 +9,8 @@ use Spatie\Image\Manipulations;
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;
use Spatie\MediaLibrary\MediaCollections\Models\Media;
use Spatie\Translatable\HasTranslations;
/**
* App\Models\Cat
@ -57,7 +59,10 @@ use Spatie\MediaLibrary\MediaCollections\Models\Media;
*/
class Cat extends Model implements HasMedia
{
use HasFactory, SoftDeletes, InteractsWithMedia;
use HasFactory, SoftDeletes, InteractsWithMedia,HasTranslations;
public $translatable = ['name','description'];
public function registerMediaConversions(Media $media = null): void
{

@ -12,6 +12,7 @@ use Spatie\Image\Manipulations;
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;
use Spatie\MediaLibrary\MediaCollections\Models\Media;
use Spatie\Translatable\HasTranslations;
use Xmen\StarterKit\Models\Category;
use Xmen\StarterKit\Models\Comment;
use function App\Helpers\getSetting;
@ -123,11 +124,13 @@ use function App\Helpers\getSetting;
*/
class Product extends Model implements HasMedia
{
use SoftDeletes, InteractsWithMedia, Taggable, Metable, HasFactory;
use SoftDeletes, InteractsWithMedia, Taggable, Metable, HasFactory,HasTranslations;
protected $guarded = [];
protected $appends = ['url'];
public $translatable = ['name','excerpt','description'];
public function getTitle()
{
return $this->name . getSetting('prefix') . $this->id;

@ -5,6 +5,7 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Spatie\Translatable\HasTranslations;
/**
* App\Models\Prop
@ -52,10 +53,12 @@ use Illuminate\Database\Eloquent\SoftDeletes;
*/
class Prop extends Model
{
use HasFactory,SoftDeletes;
use HasFactory, SoftDeletes, HasTranslations;
protected $guarded = [];
protected $dates = ['created_at', 'updated_at', 'deleted_at'];
public $translatable = ['label'];
public function category()
{

1001
composer.lock generated

File diff suppressed because it is too large Load Diff

@ -16,7 +16,7 @@ return new class extends Migration
Schema::create('props', function (Blueprint $table) {
$table->id();
$table->string('name',90)->unique();
$table->string('label',90);
$table->string('label');
$table->string('width',300)->default('col-md-6');
$table->boolean('required')->default(false);
$table->boolean('searchable')->default(true);

@ -36,7 +36,6 @@ class DatabaseSeeder extends Seeder
CatSeeder::class,
]);
if (env('NO_SEED_PRODUCT', 'false') != 'true') {
$this->call([
PostSeeder::class,
MenuSeeder::class,
@ -45,12 +44,13 @@ class DatabaseSeeder extends Seeder
// InvoiceSeeder::class,
// SliderSeeder::class,
]);
$this->call([
CustomerSeeder::class,
SettingSeeder::class,
MenuSeeder::class,
]);
}
$this->call([
CustomerSeeder::class,
SettingSeeder::class,
MenuSeeder::class,
]);
}
}

@ -17,10 +17,10 @@ class XlangSeeder extends Seeder
{
//
$lang = new Xlang();
$lang->tag = 'fa';
$lang->rtl = true;
$lang->tag = config('app.xlang_main');
$lang->rtl = true;
$lang->is_default = true;
$lang->name = 'پارسی';
$lang->name = __("Default");
$lang->save();
}
}

@ -153,6 +153,7 @@
"Deactivate": "غیرفعال",
"Deactive": "غیرفعال",
"Dear customer, Please complete your information": "مشتری عزیز، لطفا اطلاعات خود را تکمیل کنید",
"Default": "",
"Delete": "حذف",
"Description": "توضیحات",
"Description Text": "توضیحات کامل",
@ -172,7 +173,7 @@
"Draft": "پیش‌نویس",
"Draft now": "پیش‌نویس کن",
"Drafted": "پیش‌نویس شده",
"E-Mail Address": "رایانامه|ایمیل",
"E-Mail Address": "رایانامه\/ایمیل",
"Edit": "ویرایش",
"Edit Discount": "ویرایش تخفیف",
"Edit Menu": "ویرایش منو",
@ -278,13 +279,14 @@
"Main product category": "دسته اصلی محصول",
"Manage": "مدیریت",
"Max click": "حداکثر تعداد کلیک",
"Menu": "منو",
"Menus": "منو",
"Menus list": "فهرست منو ها",
"Menu": "فهرست\/منو",
"Menus": "فهرست‌ها",
"Menus list": "فهرست منوها",
"Menus preview": "پیش نمایش منو",
"Message": "پیام",
"Metas and publish": "ویژگی ها و انتشار",
"Mobile": "موبایل",
"Model": "",
"Monday": "دوشنبه",
"Multi level select type": "نوع چند مرحله ای",
"Multi select type": "نوع انتخالی چند گانه",
@ -415,8 +417,8 @@
"Quantity": "موجودی",
"Question": "سوال",
"Question \/ Answer": "سوال \/ جواب",
"Question\/Message": "سوال \/ پیام",
"Questions": "سوال‌ها",
"Question|Message": "سوال \/ پیام",
"RTL": "راست به چپ",
"Radio type": "نوع دکه رادیو",
"Ref ID": "",
@ -597,7 +599,7 @@
"logs": "لاگ کاربران",
"menu": "منو",
"minute": "دقیقه",
"name \/ email": "نام | ایمیل",
"name \/ email": "نام \/ ایمیل",
"not Required": "غیر ضروری",
"not searchable": "غیر قابل سرچ",
"one second ago": " یک ثانیه پیش",

@ -50,6 +50,7 @@
"Call us!": "Позвоните нам!",
"Canceled": "Отменено",
"Card cleared": "Карта очищена",
"Cat": "",
"Catalog": "Каталог",
"Categories": "Категории",
"Categories deleted successfully": "Категории успешно удалены",
@ -104,6 +105,7 @@
"Date": "Дата",
"Deactive": "Неактивный",
"Dear customer, Please complete your information": "Уважаемый клиент, пожалуйста, заполните информацию",
"Default": "",
"Delete": "Удалить",
"Description": "Описание",
"Description Text": "Текст описания",
@ -212,11 +214,13 @@
"Main product category": "«Основная категория товаров»",
"Manage": "Управлять",
"Max click": "«Макс клик»",
"Menu": "",
"Menus": "«Меню»",
"Menus list": "«Список меню»",
"Menus preview": "«Предварительный просмотр меню»",
"Metas and publish": "«Метаинформация и публикация»",
"Mobile": "«Мобильный»",
"Model": "",
"Monday": "Понедельник",
"Multi select type": "«Множественный выбор типа»",
"Name": "Имя",
@ -320,8 +324,8 @@
"Quantity": "Количество",
"Question": "Вопрос",
"Question \/ Answer": "Вопрос ответ",
"Question\/Message": "«Вопрос\/Сообщение»",
"Questions": "Вопросы",
"Question|Message": "«Вопрос|Сообщение»",
"RTL": "РТЛ",
"Ref ID": "«Реферальный идентификатор»",
"Register": "Регистр",

@ -46,7 +46,7 @@
</tr>
<tr>
<th>
{{__("Question|Message")}}
{{__("Question/Message")}}
</th>
<td>
{{($con->body)}}

@ -49,7 +49,7 @@
<input name="img" type="file" class="form-control @error('img') is-invalid @enderror" id="flag" placeholder="{{__('Flag')}}" value="{{old('img',$xlang->img??null)}}" />
</div>
</div>
<div class="col-md-4 mt-3">
<div class="col-md-2 mt-3">
<div class="form-check form-switch mt-1">
<br>
<input class="form-check-input @error('rtl') is-invalid @enderror"
@ -60,6 +60,17 @@
</label>
</div>
</div>
<div class="col-md-2 mt-3">
<div class="form-check form-switch mt-1">
<br>
<input class="form-check-input @error('is_default') is-invalid @enderror"
name="is_default" type="checkbox" id="is_default" @if(old('is_default',$xlang->is_default??null) == 1) checked="" @endif
value="1" >
<label for="is_default">
{{__('Default')}}
</label>
</div>
</div>
<div class="col-12 mt-4">
<label> &nbsp; </label>
<input name="" id="" type="submit" class="btn btn-primary mt-2" value="{{__('Save')}}" />

@ -9,7 +9,50 @@
@include('starter-kit::component.err')
<div class="text-center pt-3">
{{-- <div class="card my-3">--}}
{{-- <div class="card-header">--}}
{{-- {{__("Filter")}}--}}
{{-- </div>--}}
{{-- <form class="card-body text-start">--}}
{{-- <div class="row">--}}
{{-- <div class="col-md">--}}
{{-- <label for="lang">--}}
{{-- {{__("Lang")}}--}}
{{-- </label>--}}
{{-- <select name="lang" id="lang" class="form-control">--}}
{{-- <option value=""> {{__("All")}} </option>--}}
{{-- @foreach($langs as $lang)--}}
{{-- @if($lang->is_default == '0')--}}
{{-- <option value="{{$lang->id}}">--}}
{{-- {{$lang->name}}--}}
{{-- </option>--}}
{{-- @endif--}}
{{-- @endforeach--}}
{{-- </select>--}}
{{-- </div>--}}
{{-- <div class="col-md">--}}
{{-- <label for="lang">--}}
{{-- {{__("Model")}}--}}
{{-- </label>--}}
{{-- <select name="lang" id="lang" class="form-control">--}}
{{-- <option value=""> {{__("All")}} </option>--}}
{{-- <option value="Product"> {{__("Product")}} </option>--}}
{{-- <option value="Cat"> {{__("Cat")}} </option>--}}
{{-- <option value="Post"> {{__("Post")}} </option>--}}
{{-- <option value="Category"> {{__("Category")}} </option>--}}
{{-- <option value="Slider"> {{__("Slider")}} </option>--}}
{{-- <option value="Meta"> {{__("Props")}} </option>--}}
{{-- <option value="Clip"> {{__("Clip")}} </option>--}}
{{-- <option value="Gallery"> {{__("Gallery")}} </option>--}}
{{-- <option value="Menu"> {{__("Menu")}} </option>--}}
{{-- <option value="Setting"> {{__("Setting")}} </option>--}}
{{-- </select>--}}
{{-- </div>--}}
{{-- </div>--}}
{{-- </form>--}}
{{-- </div>--}}
<div class="row">
@foreach($langs as $lang)
<div class="col-md-4">
<div class="lang-item">

@ -82,7 +82,7 @@
</label>
<textarea name="bodya" style=" height: 150px;"
class="form-control @error('bodya') is-invalid @enderror"
placeholder="{{__('Question|Message')}}">{{old('body',$item->body??null)}}</textarea>
placeholder="{{__('Question/Message')}}">{{old('body',$item->body??null)}}</textarea>
</div>
</div>
<div class="col-md-10">

Loading…
Cancel
Save