Files
conservatorio-tomadini/libraries/vendor/joomla/language/src/Text.php
2024-12-17 17:34:10 +01:00

256 lines
7.4 KiB
PHP

<?php
/**
* Part of the Joomla Framework Language Package
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
*/
namespace Joomla\Language;
/**
* Text handling class.
*
* @since 1.0
*/
class Text
{
/**
* Language instance
*
* @var Language
* @since 1.0
*/
private $language;
/**
* Constructor
*
* @param Language $language Language instance to use in translations
*
* @since 2.0.0-alpha
*/
public function __construct(Language $language)
{
$this->setLanguage($language);
}
/**
* Retrieve the current Language instance
*
* @return Language
*
* @since 2.0.0-alpha
*/
public function getLanguage(): Language
{
return $this->language;
}
/**
* Set the Language object
*
* @param Language $language Language instance
*
* @return $this
*
* @since 2.0.0-alpha
*/
public function setLanguage(Language $language): self
{
$this->language = $language;
return $this;
}
/**
* Translates a string into the current language.
*
* @param string $string The string to translate.
* @param array $parameters Array of parameters for the string
* @param boolean $jsSafe True to escape the string for JavaScript output
* @param boolean $interpretBackSlashes To interpret backslashes (\\=\, \n=carriage return, \t=tabulation)
*
* @return string The translated string or the key if $script is true
*
* @since 2.0.0-alpha
*/
public function translate(string $string, array $parameters = [], bool $jsSafe = false, bool $interpretBackSlashes = true): string
{
$translated = $this->getLanguage()->translate($string, $jsSafe, $interpretBackSlashes);
if (!empty($parameters)) {
$translated = strtr($translated, $parameters);
}
return $translated;
}
/**
* Translates a string into the current language.
*
* @param string $string The string to translate.
* @param string $alt The alternate option for global string
* @param array $parameters Array of parameters for the string
* @param mixed $jsSafe Boolean: Make the result javascript safe.
* @param boolean $interpretBackSlashes To interpret backslashes (\\=\, \n=carriage return, \t=tabulation)
*
* @return string The translated string or the key if $script is true
*
* @since 1.0
*/
public function alt($string, $alt, array $parameters = [], $jsSafe = false, $interpretBackSlashes = true)
{
if ($this->getLanguage()->hasKey($string . '_' . $alt)) {
return $this->translate($string . '_' . $alt, $parameters, $jsSafe, $interpretBackSlashes);
}
return $this->translate($string, $parameters, $jsSafe, $interpretBackSlashes);
}
/**
* Pluralises a string in the current language
*
* The last argument can take an array of options to configure the call to `Joomla\Language\Language::translate()`:
*
* array(
* 'jsSafe' => boolean,
* 'interpretBackSlashes' =>boolean
* )
*
* where:
*
* jsSafe is a boolean to specify whether to make the result JavaScript safe.
* interpretBackSlashes is a boolean to specify whether backslashes are interpreted (\\ -> \, \n -> new line, \t -> tab character).
*
* @param string $string The format string.
* @param integer $n The number of items
*
* @return string The translated string
*
* @note This method can take a mixed number of arguments for the sprintf function
* @since 1.0
*/
public function plural($string, $n)
{
$lang = $this->getLanguage();
$args = \func_get_args();
$count = \count($args);
// Try the key from the language plural potential suffixes
$found = false;
$suffixes = $lang->getPluralSuffixes((int) $n);
array_unshift($suffixes, (int) $n);
foreach ($suffixes as $suffix) {
$key = $string . '_' . $suffix;
if ($lang->hasKey($key)) {
$found = true;
break;
}
}
if (!$found) {
// Not found so revert to the original.
$key = $string;
}
if (\is_array($args[$count - 1])) {
$args[0] = $lang->translate(
$key,
$args[$count - 1]['jsSafe'] ?? false,
$args[$count - 1]['interpretBackSlashes'] ?? true
);
} else {
$args[0] = $lang->translate($key);
}
return \sprintf(...$args);
}
/**
* Passes a string thru a sprintf.
*
* The last argument can take an array of options to configure the call to `Joomla\Language\Language::translate()`:
*
* array(
* 'jsSafe' => boolean,
* 'interpretBackSlashes' =>boolean
* )
*
* where:
*
* jsSafe is a boolean to specify whether to make the result JavaScript safe.
* interpretBackSlashes is a boolean to specify whether backslashes are interpreted (\\ -> \, \n -> new line, \t -> tab character).
*
* @param string $string The format string.
*
* @return string|null The translated string
*
* @note This method can take a mixed number of arguments for the sprintf function
* @since 1.0
*/
public function sprintf($string)
{
$lang = $this->getLanguage();
$args = \func_get_args();
$count = \count($args);
if (\is_array($args[$count - 1])) {
$args[0] = $lang->translate(
$string,
$args[$count - 1]['jsSafe'] ?? false,
$args[$count - 1]['interpretBackSlashes'] ?? true
);
} else {
$args[0] = $lang->translate($string);
}
return \sprintf(...$args);
}
/**
* Passes a string thru an printf.
*
* The last argument can take an array of options to configure the call to `Joomla\Language\Language::translate()`:
*
* array(
* 'jsSafe' => boolean,
* 'interpretBackSlashes' =>boolean
* )
*
* where:
*
* jsSafe is a boolean to specify whether to make the result JavaScript safe.
* interpretBackSlashes is a boolean to specify whether backslashes are interpreted (\\ -> \, \n -> new line, \t -> tab character).
*
* @param string $string The format string.
*
* @return string|null The translated string
*
* @note This method can take a mixed number of arguments for the printf function
* @since 1.0
*/
public function printf($string)
{
$lang = $this->getLanguage();
$args = \func_get_args();
$count = \count($args);
if (\is_array($args[$count - 1])) {
$args[0] = $lang->translate(
$string,
$args[$count - 1]['jsSafe'] ?? false,
$args[$count - 1]['interpretBackSlashes'] ?? true
);
} else {
$args[0] = $lang->translate($string);
}
return \printf(...$args);
}
}