Skip to content

Commit

Permalink
Register language keys in server language
Browse files Browse the repository at this point in the history
  • Loading branch information
jasonw4331 committed Apr 10, 2023
1 parent 33b9caf commit 7087f62
Showing 1 changed file with 53 additions and 0 deletions.
53 changes: 53 additions & 0 deletions src/Main.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,10 @@
use jasonwynn10\VanillaEntityAI\event\EventListener;
use jasonwynn10\VanillaEntityAI\event\TaskCleanupListener;
use pocketmine\entity\EntityFactory;
use pocketmine\lang\Language;
use pocketmine\plugin\PluginBase;
use pocketmine\utils\SingletonTrait;
use Symfony\Component\Filesystem\Path;

final class Main extends PluginBase{
use SingletonTrait{
Expand Down Expand Up @@ -38,5 +40,56 @@ public function onEnable() : void{

new EventListener($this);
new TaskCleanupListener($this);

$this->saveResource('/lang/config.yml', true);
/** @var string[][] $contents */
$contents = yaml_parse_file(Path::join($this->getDataFolder(), "lang", 'config.yml'));
$languageAliases = [];
foreach($contents as $language => $aliases){
$mini = mb_strtolower($aliases['mini']);
$this->saveResource('/lang/data/' . $mini . '.ini', true);
$languageAliases[$mini] = $language;
}

$languages = [];
$dir = scandir(Path::join($this->getDataFolder(), "lang", "data"));
if($dir !== false){
foreach($dir as $file){
/** @phpstan-var array{dirname: string, basename: string, extension?: string, filename: string} $fileData */
$fileData = pathinfo($file);
if(!isset($fileData["extension"]) || $fileData["extension"] !== "ini"){
continue;
}
$languageName = mb_strtolower($fileData["filename"]);
$language = new Language(
$languageName,
Path::join($this->getDataFolder(), "lang", "data")
);
$languages[$languageName] = $language;
foreach($languageAliases as $mini => $full){
if(mb_strtolower($full) === $languageName){
$languages[mb_strtolower($mini)] = $language;
unset($languageAliases[$mini]);
}
}
}
}

// add translations to existing server language instance
$serverLanguage = $this->getServer()->getLanguage();
$refClass = new \ReflectionClass($serverLanguage);
$refPropA = $refClass->getProperty('lang');
$refPropA->setAccessible(true);
/** @var string[] $serverLanguageList */
$serverLanguageList = $refPropA->getValue($serverLanguage);

$pluginLanguage = $languages[$serverLanguage->getLang()];
$refClass = new \ReflectionClass($pluginLanguage);
$refPropB = $refClass->getProperty('lang');
$refPropB->setAccessible(true);
/** @var string[] $pluginLanguageList */
$pluginLanguageList = $refPropB->getValue($pluginLanguage);

$refPropA->setValue($serverLanguage, array_merge($serverLanguageList, $pluginLanguageList));
}
}

0 comments on commit 7087f62

Please sign in to comment.