<?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);
}
}