diff --git a/app/Facades/Plugins.php b/app/Facades/Plugins.php index 7eb2ad6d5..6d76d69bc 100644 --- a/app/Facades/Plugins.php +++ b/app/Facades/Plugins.php @@ -21,6 +21,7 @@ use Filament\Panel; * @method static void disablePlugin(string|Plugin $plugin) * @method static void updateLoadOrder(array $order) * @method static bool hasThemePluginEnabled() + * @method static string[] getPluginLanguages() * * @see \App\Services\Helpers\PluginService */ diff --git a/app/Models/Plugin.php b/app/Models/Plugin.php index bc3fc99da..af1f2cb59 100644 --- a/app/Models/Plugin.php +++ b/app/Models/Plugin.php @@ -248,6 +248,11 @@ class Plugin extends Model implements HasPluginSettings return $this->category === 'theme'; } + public function isLanguage(): bool + { + return $this->category === 'language'; + } + /** @return null|array */ private function getUpdateData(): ?array { diff --git a/app/Services/Helpers/LanguageService.php b/app/Services/Helpers/LanguageService.php index 41c91e2b0..8ddc87678 100644 --- a/app/Services/Helpers/LanguageService.php +++ b/app/Services/Helpers/LanguageService.php @@ -2,6 +2,7 @@ namespace App\Services\Helpers; +use App\Facades\Plugins; use Illuminate\Support\Facades\File; use Locale; @@ -21,10 +22,14 @@ class LanguageService */ public function getAvailableLanguages(string $path = 'lang'): array { - return collect(File::directories(base_path($path)))->mapWithKeys(function ($path) { + $baseLanguages = collect(File::directories(base_path($path)))->mapWithKeys(function ($path) { $code = basename($path); return [$code => title_case(Locale::getDisplayName($code, $code))]; })->toArray(); + + $pluginLanguages = collect(Plugins::getPluginLanguages())->mapWithKeys(fn ($code) => [$code => title_case(Locale::getDisplayName($code, $code))])->toArray(); + + return array_unique(array_merge($baseLanguages, $pluginLanguages)); } } diff --git a/app/Services/Helpers/PluginService.php b/app/Services/Helpers/PluginService.php index 411907daf..c71417142 100644 --- a/app/Services/Helpers/PluginService.php +++ b/app/Services/Helpers/PluginService.php @@ -64,7 +64,11 @@ class PluginService $translations = plugin_path($plugin->id, 'lang'); if (file_exists($translations)) { $this->app->afterResolving('translator', function ($translator) use ($plugin, $translations) { - $translator->addNamespace($plugin->id, $translations); + if ($plugin->isLanguage()) { + $translator->addPath($translations); + } else { + $translator->addNamespace($plugin->id, $translations); + } }); } @@ -309,4 +313,11 @@ class PluginService return false; } + + /** @return string[] */ + public function getPluginLanguages(): array + { + // TODO + return ['pirate']; + } }