julienmonnerie/kirby/src/Cms/Translations.php

57 lines
1.3 KiB
PHP
Raw Normal View History

2022-06-17 17:51:59 +02:00
<?php
namespace Kirby\Cms;
use Kirby\Filesystem\Dir;
use Kirby\Filesystem\F;
/**
* A collection of all available Translations.
* Provides a factory method to convert an array
* to a collection of Translation objects and load
* method to load all translations from disk
*
* @package Kirby Cms
* @author Bastian Allgeier <bastian@getkirby.com>
* @link https://getkirby.com
* @copyright Bastian Allgeier
* @license https://getkirby.com/license
*/
class Translations extends Collection
{
2023-06-01 16:54:20 +02:00
/**
* All registered translations methods
*/
2025-04-21 18:57:21 +02:00
public static array $methods = [];
2023-06-01 16:54:20 +02:00
2025-04-21 18:57:21 +02:00
public static function factory(array $translations): static
2022-08-31 15:02:43 +02:00
{
$collection = new static();
2022-06-17 17:51:59 +02:00
2022-08-31 15:02:43 +02:00
foreach ($translations as $code => $props) {
$translation = new Translation($code, $props);
$collection->data[$translation->code()] = $translation;
}
2022-06-17 17:51:59 +02:00
2022-08-31 15:02:43 +02:00
return $collection;
}
2022-06-17 17:51:59 +02:00
2025-04-21 18:57:21 +02:00
public static function load(string $root, array $inject = []): static
2022-08-31 15:02:43 +02:00
{
$collection = new static();
2022-06-17 17:51:59 +02:00
2022-08-31 15:02:43 +02:00
foreach (Dir::read($root) as $filename) {
if (F::extension($filename) !== 'json') {
continue;
}
2022-06-17 17:51:59 +02:00
2022-08-31 15:02:43 +02:00
$locale = F::name($filename);
$translation = Translation::load($locale, $root . '/' . $filename, $inject[$locale] ?? []);
2022-06-17 17:51:59 +02:00
2022-08-31 15:02:43 +02:00
$collection->data[$locale] = $translation;
}
2022-06-17 17:51:59 +02:00
2022-08-31 15:02:43 +02:00
return $collection;
}
2022-06-17 17:51:59 +02:00
}