256 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			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);
 | |
|     }
 | |
| }
 |