generated from boboko/starter
stoic multilingual
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Spatie\YamlFrontMatter\YamlFrontMatter;
|
||||
use Symfony\Component\Yaml\Yaml;
|
||||
|
||||
class Stoic
|
||||
@@ -29,6 +30,42 @@ public static function presets(): array
|
||||
return static::$presets;
|
||||
}
|
||||
|
||||
// Stoic's default locale (first in i18n.locales), or null when i18n is off.
|
||||
// Its content folder holds every field; other locales only translatable ones.
|
||||
public static function defaultLocale(): ?string
|
||||
{
|
||||
static::loadConfig();
|
||||
return static::$config["i18n"]["locales"][0]["code"] ?? null;
|
||||
}
|
||||
|
||||
// The current locale's translated fields for a content file (path relative
|
||||
// to a locale folder, e.g. "pages/home.md"), with the markdown body as
|
||||
// `content`. Empty when the current locale is the default one (or i18n is
|
||||
// off), the file doesn't exist, or a field is left blank — so layering this
|
||||
// over the default-locale values falls back to them field by field.
|
||||
public static function localeOverrides(string $file): array
|
||||
{
|
||||
$default = static::defaultLocale();
|
||||
$locale = app()->getLocale();
|
||||
|
||||
if ($default === null || $locale === $default) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$path = resource_path("stoic/content/{$locale}/{$file}");
|
||||
|
||||
if (!is_file($path)) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$document = YamlFrontMatter::parse(file_get_contents($path));
|
||||
|
||||
return array_filter(
|
||||
[...$document->matter(), "content" => trim($document->body())],
|
||||
fn($value) => filled($value),
|
||||
);
|
||||
}
|
||||
|
||||
// Returns the public URL for a stoic image at a given preset.
|
||||
public static function image(string $filename, string $preset): string
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user