<?php namespace App\Models; use Illuminate\Contracts\Filesystem\FileNotFoundException; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Facades\File; use Symfony\Component\Yaml\Yaml; /** * @method static where(string $string, $uid) * @method static cursor() * @method static create(string[] $lan) * @method static truncate() * @property mixed name * @property false|mixed status * @property mixed code */ class Language extends Model { /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'name', 'code', 'iso_code', 'status', ]; /** * Bootstrap any application services. */ public static function boot() { parent::boot(); // Create uid when creating list. static::creating(function ($item) { $item->status = true; }); } /** * The attributes that should be cast to native types. * * @var array */ protected $casts = [ 'status' => 'boolean', ]; /** * all language code. * * @return array */ public static function languageCodes(): array { $arr = [ 'af' => 'Afrikaans', 'sq' => 'Albanian', 'am' => 'Amharic', 'ar' => 'Arabic', 'hy' => 'Armenian', 'az' => 'Azerbaijan', 'bn' => 'Bengali', 'eu' => 'Basque', 'be' => 'Belarusian', 'bg' => 'Bulgarian', 'ca' => 'Catalan', 'zh' => 'Chinese', 'hr' => 'Croatian', 'cs' => 'Czech', 'da' => 'Danish', 'nl' => 'Dutch', 'en' => 'English', 'et' => 'Estonian', 'fi' => 'Finnish', 'fr' => 'French', 'gl' => 'Galician', 'ka' => 'Georgian', 'de' => 'German', 'el' => 'Greek', 'gu' => 'Gujarati', 'he' => 'Hebrew', 'hi' => 'Hindi', 'hu' => 'Hungarian', 'is' => 'Icelandic', 'id' => 'Indonesian', 'ga' => 'Irish', 'it' => 'Italian', 'ja' => 'Japanese', 'kk' => 'Kazakh', 'ko' => 'Korean', 'lv' => 'Latvian', 'lt' => 'Lithuanian', 'mk' => 'Macedonian', 'ms' => 'Malay', 'mn' => 'Mongolian', 'ne' => 'Nepali', 'nb' => 'Norwegian-Bokmal', 'nn' => 'Norwegian-Nynorsk', 'fa' => 'Persian', 'pl' => 'Polish', 'pt' => 'Portuguese', 'ro' => 'Romanian', 'ru' => 'Russian', 'sr' => 'Serbian', 'si' => 'Sinhala', 'sk' => 'Slovak', 'sl' => 'Slovenian', 'es' => 'Spanish', 'sw' => 'Swahili', 'sv' => 'Swedish', 'ta' => 'Tamil', 'te' => 'Telugu', 'th' => 'Thai', 'tr' => 'Turkish', 'uk' => 'Ukrainian', 'ur' => 'Urdu', 'uz' => 'Uzbek', 'vi' => 'Vietnamese', 'cy' => 'Welsh', ]; $result = []; foreach ($arr as $key => $name) { $result[] = [ 'name' => $name, 'code' => $key, ]; } return $result; } /** * Disable language * * @return void */ public function disable(): void { $this->status = false; $this->save(); } /** * Enable language * * @return void */ public function enable(): void { $this->status = true; $this->save(); } /** * Language folder path. * * @return string */ public function languageDir(): string { return base_path('resources/lang/'.$this->code.'/'); } /** *get local array from file * * @return mixed * @throws FileNotFoundException */ public function getLocaleArrayFromFile(): mixed { return File::getRequire($this->languageDir().'locale.php'); } /** * Update language file from yaml. * * * @param $yaml * * @return bool|int */ public function updateFromYaml($yaml): bool|int { $content = '<?php return '.var_export(Yaml::parse($yaml), true).';'; return File::put($this->languageDir().'locale.php', $content); } }