1
0
This commit is contained in:
Philip Wagner
2024-08-31 10:01:49 +02:00
commit 78b6c0d381
1169 changed files with 235103 additions and 0 deletions

View File

@@ -0,0 +1,156 @@
<?php
namespace Kirby\Cms;
use Exception;
use Kirby\Data\Data;
use Kirby\Toolkit\Str;
/**
* Wrapper around Kirby's localization files,
* which are stored in `kirby/translations`.
*
* @package Kirby Cms
* @author Bastian Allgeier <bastian@getkirby.com>
* @link https://getkirby.com
* @copyright Bastian Allgeier
* @license https://getkirby.com/license
*/
class Translation
{
public function __construct(
protected string $code,
protected array $data
) {
}
/**
* Improved `var_dump` output
* @codeCoverageIgnore
*/
public function __debugInfo(): array
{
return $this->toArray();
}
/**
* Returns the translation author
*/
public function author(): string
{
return $this->get('translation.author', 'Kirby');
}
/**
* Returns the official translation code
*/
public function code(): string
{
return $this->code;
}
/**
* Returns an array with all
* translation strings
*/
public function data(): array
{
return $this->data;
}
/**
* Returns the translation data and merges
* it with the data from the default translation
*/
public function dataWithFallback(): array
{
if ($this->code === 'en') {
return $this->data;
}
// get the fallback array
$fallback = App::instance()->translation('en')->data();
return array_merge($fallback, $this->data);
}
/**
* Returns the writing direction
* (ltr or rtl)
*/
public function direction(): string
{
return $this->get('translation.direction', 'ltr');
}
/**
* Returns a single translation
* string by key
*/
public function get(string $key, string $default = null): string|null
{
return $this->data[$key] ?? $default;
}
/**
* Returns the translation id,
* which is also the code
*/
public function id(): string
{
return $this->code;
}
/**
* Loads the translation from the
* json file in Kirby's translations folder
*/
public static function load(
string $code,
string $root,
array $inject = []
): static {
try {
$data = array_merge(Data::read($root), $inject);
} catch (Exception) {
$data = [];
}
return new static($code, $data);
}
/**
* Returns the PHP locale of the translation
*/
public function locale(): string
{
$default = $this->code;
if (Str::contains($default, '_') !== true) {
$default .= '_' . strtoupper($this->code);
}
return $this->get('translation.locale', $default);
}
/**
* Returns the human-readable translation name.
*/
public function name(): string
{
return $this->get('translation.name', $this->code);
}
/**
* Converts the most important
* properties to an array
*/
public function toArray(): array
{
return [
'code' => $this->code(),
'data' => $this->data(),
'name' => $this->name(),
'author' => $this->author(),
];
}
}