JFIF x x C C " } !1AQa "q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w !1AQ aq"2B #3Rbr{
File "StringFormatter.php"
Full Path: /home/palsarh/web/palsarh.in/public_html/vendor/cuyz/valinor/src/Utility/String/StringFormatter.php
File size: 1.74 KB
MIME-type: text/x-php
Charset: utf-8
<?php
declare(strict_types=1);
namespace CuyZ\Valinor\Utility\String;
use IntlException;
use MessageFormatter;
use function class_exists;
use function preg_match;
use function preg_quote;
use function preg_replace;
/** @internal */
final class StringFormatter
{
public const DEFAULT_LOCALE = 'en';
/**
* @param array<string, string> $parameters
*/
public static function format(string $locale, string $body, array $parameters = []): string
{
return class_exists(MessageFormatter::class)
? self::formatWithIntl($locale, $body, $parameters)
: self::formatWithRegex($body, $parameters);
}
/**
* @param array<string, string> $parameters
*/
private static function formatWithIntl(string $locale, string $body, array $parameters): string
{
try {
$formatted = MessageFormatter::formatMessage($locale, $body, $parameters);
if ($formatted === false) {
throw new StringFormatterError($body, intl_get_error_message());
}
return $formatted;
} catch (IntlException $e) {
throw new StringFormatterError($body, $e->getMessage(), $e);
}
}
/**
* @param array<string, string> $parameters
*/
private static function formatWithRegex(string $body, array $parameters): string
{
$message = $body;
if (preg_match('/{\s*[^}]*[^}a-z_]+\s*}?/', $body)) {
throw new StringFormatterError($body);
}
foreach ($parameters as $name => $value) {
$name = preg_quote($name, '/');
/** @var string $message */
$message = preg_replace("/{\s*$name\s*}/", $value, $message);
}
return $message;
}
}