TDoG-Skin/app/Services/Translations/JavaScript.php
2024-08-17 19:13:54 +08:00

63 lines
1.9 KiB
PHP
Executable File

<?php
namespace App\Services\Translations;
use App\Services\Plugin;
use App\Services\PluginManager;
use Illuminate\Cache\Repository;
use Illuminate\Filesystem\Filesystem;
class JavaScript
{
protected Filesystem $filesystem;
protected Repository $cache;
protected PluginManager $plugins;
protected $prefix = 'front-end-trans-';
public function __construct(
Filesystem $filesystem,
Repository $cache,
PluginManager $plugins
) {
$this->filesystem = $filesystem;
$this->cache = $cache;
$this->plugins = $plugins;
}
public function generate(string $locale): string
{
$plugins = $this->plugins->getEnabledPlugins();
$sourceFiles = $plugins
->map(fn (Plugin $plugin) => $plugin->getPath()."/lang/$locale/front-end.yml")
->filter(fn ($path) => $this->filesystem->exists($path));
$sourceFiles->push(resource_path("lang/$locale/front-end.yml"));
$sourceModified = $sourceFiles->max(fn ($path) => $this->filesystem->lastModified($path));
$compiled = public_path("lang/$locale.js");
$compiledModified = (int) $this->cache->get($this->prefix.$locale, 0);
if ($sourceModified > $compiledModified || !$this->filesystem->exists($compiled)) {
$translations = trans('front-end');
foreach ($plugins as $plugin) {
$translations[$plugin->name] = trans($plugin->namespace.'::front-end');
}
$content = 'blessing.i18n = '.json_encode($translations, JSON_UNESCAPED_UNICODE);
$this->filesystem->put($compiled, $content);
$this->cache->put($this->prefix.$locale, $sourceModified);
return url()->asset("lang/$locale.js?t=$sourceModified");
}
return url()->asset("lang/$locale.js?t=$compiledModified");
}
public function resetTime(string $locale): void
{
$this->cache->put($this->prefix.$locale, 0);
}
}