This commit is contained in:
parent
efc7e1c2a7
commit
dee9bbfbe7
@ -54,6 +54,13 @@ class LanguageController extends Controller
|
||||
return back()->with('success', "Language deleted successfully");
|
||||
}
|
||||
|
||||
public function sync(string $local)
|
||||
{
|
||||
$this->languageService->syncLanguageFromFiles($local);
|
||||
|
||||
return back()->with('success', "Language synced from files successfully");
|
||||
}
|
||||
|
||||
public function edit_property(string $id)
|
||||
{
|
||||
$property = LanguageProperty::where('id', $id)->with(['language:id,code'])->firstOrFail();
|
||||
|
||||
@ -29,22 +29,8 @@ class LanguageService extends MediaService
|
||||
$appLangPath = storage_path('app/lang/default');
|
||||
|
||||
|
||||
$groups = [];
|
||||
foreach ($this->groupNames as $groupName) {
|
||||
$groups[$groupName] = $this->loadLanguageGroup($data['code'], $groupName);
|
||||
}
|
||||
|
||||
$languages = Language::create($data);
|
||||
|
||||
foreach ($groups as $key => $group) {
|
||||
foreach ($group as $value) {
|
||||
LanguageProperty::create([
|
||||
...$value,
|
||||
'group' => $key,
|
||||
'language_id' => $languages->id,
|
||||
]);
|
||||
}
|
||||
}
|
||||
$language = Language::create($data);
|
||||
$this->syncLanguagePropertiesFromFiles($language);
|
||||
|
||||
$alreadyExists = is_dir($langDir);
|
||||
|
||||
@ -59,6 +45,18 @@ class LanguageService extends MediaService
|
||||
Language::find($id)->update($data);
|
||||
}
|
||||
|
||||
public function syncLanguageFromFiles(string $locale): void
|
||||
{
|
||||
$language = Language::where('code', $locale)->first();
|
||||
|
||||
if (! $language) {
|
||||
return;
|
||||
}
|
||||
|
||||
$this->syncLanguagePropertiesFromFiles($language);
|
||||
$this->forgetLanguageCache($locale);
|
||||
}
|
||||
|
||||
protected function loadLanguageGroup(string $locale, string $groupName): array
|
||||
{
|
||||
$defaultGroupPath = storage_path("app/lang/groups/{$groupName}.php");
|
||||
@ -118,6 +116,27 @@ class LanguageService extends MediaService
|
||||
return $groups;
|
||||
}
|
||||
|
||||
protected function syncLanguagePropertiesFromFiles(Language $language): void
|
||||
{
|
||||
foreach ($this->groupNames as $groupName) {
|
||||
$groups = $this->loadLanguageGroup($language->code, $groupName);
|
||||
|
||||
foreach ($groups as $group) {
|
||||
LanguageProperty::updateOrCreate(
|
||||
[
|
||||
'language_id' => $language->id,
|
||||
'group' => $groupName,
|
||||
'slug' => $group['slug'],
|
||||
],
|
||||
[
|
||||
'name' => $group['name'],
|
||||
'properties' => $group['properties'],
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function defaultLanguage($id)
|
||||
{
|
||||
Language::where('is_default', true)->update(['is_default' => false]);
|
||||
|
||||
@ -9,6 +9,7 @@ Route::post('change-direction', [LanguageController::class, 'change_direction'])
|
||||
Route::middleware(['installed', 'appConfig', 'auth', 'role:admin'])->prefix('dashboard/settings')->group(function () {
|
||||
Route::resource('language', LanguageController::class)->except(['create']);
|
||||
Route::post('language/default/{id}', [LanguageController::class, 'default'])->name('language.default');
|
||||
Route::post('language/{local}/sync', [LanguageController::class, 'sync'])->name('language.sync');
|
||||
|
||||
Route::get('/language/property/{property}', [LanguageController::class, 'edit_property'])->name('language.property.edit');
|
||||
Route::put('/language/property/{property}', [LanguageController::class, 'update_property'])->name('language.property.update');
|
||||
|
||||
@ -5,7 +5,7 @@ import { Card } from '@/components/ui/card';
|
||||
import Dashboard from '@/layouts/dashboard/layout';
|
||||
import { SharedData } from '@/types/global';
|
||||
import { Head, Link, router, usePage } from '@inertiajs/react';
|
||||
import { Pencil, Trash2 } from 'lucide-react';
|
||||
import { Pencil, RefreshCw, Trash2 } from 'lucide-react';
|
||||
import { ReactNode } from 'react';
|
||||
import AddLanguage from './partials/add-language';
|
||||
|
||||
@ -30,6 +30,12 @@ const Index = () => {
|
||||
});
|
||||
};
|
||||
|
||||
const syncFromFiles = (lang: Language) => {
|
||||
router.post(route('language.sync', lang.code), {}, {
|
||||
preserveScroll: true,
|
||||
});
|
||||
};
|
||||
|
||||
return (
|
||||
<>
|
||||
<Head title={settings.language_settings} />
|
||||
@ -63,6 +69,9 @@ const Index = () => {
|
||||
<Pencil className="h-4 w-4" />
|
||||
</Button>
|
||||
</Link>
|
||||
<Button size="icon" variant="secondary" className="mr-3 h-7 w-7 rounded-full text-blue-500" onClick={() => syncFromFiles(lang)}>
|
||||
<RefreshCw className="h-4 w-4" />
|
||||
</Button>
|
||||
<Switch disabled checked name={lang.code} />
|
||||
</div>
|
||||
</div>
|
||||
@ -84,6 +93,9 @@ const Index = () => {
|
||||
<Pencil className="h-4 w-4" />
|
||||
</Button>
|
||||
</Link>
|
||||
<Button size="icon" variant="secondary" className="h-7 w-7 rounded-full text-blue-500" onClick={() => syncFromFiles(lang)}>
|
||||
<RefreshCw className="h-4 w-4" />
|
||||
</Button>
|
||||
|
||||
<DeleteModal
|
||||
routePath={route('language.destroy', lang.id)}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user