59            $path = \pocketmine\LOCALE_DATA_PATH;
 
   63            $allFiles = scandir($path, SCANDIR_SORT_NONE);
 
   65            if($allFiles !== 
false){
 
   66                $files = array_filter($allFiles, 
function(
string $filename) : 
bool{
 
   67                    return str_ends_with($filename, 
".ini");
 
   72                foreach($files as $file){
 
   74                        $code = explode(
".", $file, limit: 2)[0];
 
   76                        if(isset($strings[KnownTranslationKeys::LANGUAGE_NAME])){
 
   77                            $result[$code] = $strings[KnownTranslationKeys::LANGUAGE_NAME];
 
   79                    }
catch(LanguageNotFoundException $e){
 
   88        throw new LanguageNotFoundException(
"Language directory $path does not exist or is not a directory");
 
 
  106    public function __construct(
string $lang, ?
string $path = 
null, 
string $fallback = self::FALLBACK_LANGUAGE){
 
  107        $this->langName = strtolower($lang);
 
  110            $path = \pocketmine\LOCALE_DATA_PATH;
 
  113        $this->lang = self::loadLang($path, $this->langName);
 
  114        $this->fallbackLang = self::loadLang($path, $fallback);
 
 
  144    public function translateString(
string $str, array $params = [], ?
string $onlyPrefix = 
null) : string{
 
  145        $baseText = ($onlyPrefix === null || str_starts_with($str, $onlyPrefix)) ? $this->internalGet($str) : null;
 
  146        if($baseText === 
null){ 
 
  147            $baseText = $this->parseTranslation($str, $onlyPrefix);
 
  150        foreach(Utils::promoteKeys($params) as $i => $p){
 
  151            $replacement = $p instanceof 
Translatable ? $this->translate($p) : (string) $p;
 
  152            $baseText = str_replace(
"{%$i}", $replacement, $baseText);
 
 
  204        $replaceString = 
null;
 
  206        $len = strlen($text);
 
  207        for($i = 0; $i < $len; ++$i){
 
  209            if($replaceString !== 
null){
 
  212                    ($ord >= 0x30 && $ord <= 0x39) 
 
  213                    || ($ord >= 0x41 && $ord <= 0x5a) 
 
  214                    || ($ord >= 0x61 && $ord <= 0x7a) || 
 
  215                    $c === 
"." || $c === 
"-" 
  217                    $replaceString .= $c;
 
  219                    if(($t = $this->internalGet(substr($replaceString, 1))) !== 
null && ($onlyPrefix === 
null || strpos($replaceString, $onlyPrefix) === 1)){
 
  222                        $newString .= $replaceString;
 
  224                    $replaceString = 
null;
 
  239        if($replaceString !== 
null){
 
  240            if(($t = $this->internalGet(substr($replaceString, 1))) !== 
null && ($onlyPrefix === 
null || strpos($replaceString, $onlyPrefix) === 1)){
 
  243                $newString .= $replaceString;