mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-04-22 08:44:01 +00:00
Properly localize jukebox popups
This commit is contained in:
parent
0132ff47cb
commit
69967a0e55
@ -26,7 +26,7 @@ namespace pocketmine\block;
|
||||
use pocketmine\block\tile\Jukebox as JukeboxTile;
|
||||
use pocketmine\item\Item;
|
||||
use pocketmine\item\Record;
|
||||
use pocketmine\lang\KnownTranslationKeys;
|
||||
use pocketmine\lang\KnownTranslationFactory;
|
||||
use pocketmine\math\Vector3;
|
||||
use pocketmine\player\Player;
|
||||
use pocketmine\world\sound\RecordSound;
|
||||
@ -45,7 +45,7 @@ class Jukebox extends Opaque{
|
||||
if($this->record !== null){
|
||||
$this->ejectRecord();
|
||||
}elseif($item instanceof Record){
|
||||
$player->sendJukeboxPopup(KnownTranslationKeys::RECORD_NOWPLAYING, [$player->getLanguage()->translate($item->getRecordType()->getTranslatableName())]);
|
||||
$player->sendJukeboxPopup(KnownTranslationFactory::record_nowPlaying($item->getRecordType()->getTranslatableName()));
|
||||
$this->insertRecord($item->pop());
|
||||
}
|
||||
}
|
||||
|
@ -991,26 +991,39 @@ class NetworkSession{
|
||||
$this->sendDataPacket(AvailableCommandsPacket::create($commandData, [], [], []));
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[][]
|
||||
* @phpstan-return array{string, string[]}
|
||||
*/
|
||||
public function prepareClientTranslatableMessage(Translatable $message) : array{
|
||||
//we can't send nested translations to the client, so make sure they are always pre-translated by the server
|
||||
$language = $this->player->getLanguage();
|
||||
$parameters = array_map(fn(string|Translatable $p) => $p instanceof Translatable ? $language->translate($p) : $p, $message->getParameters());
|
||||
return [$language->translateString($message->getText(), $parameters, "pocketmine."), $parameters];
|
||||
}
|
||||
|
||||
public function onChatMessage(Translatable|string $message) : void{
|
||||
if($message instanceof Translatable){
|
||||
$language = $this->player->getLanguage();
|
||||
if(!$this->server->isLanguageForced()){
|
||||
//we can't send nested translations to the client, so make sure they are always pre-translated by the server
|
||||
$parameters = array_map(fn(string|Translatable $p) => $p instanceof Translatable ? $language->translate($p) : $p, $message->getParameters());
|
||||
$this->sendDataPacket(TextPacket::translation($language->translateString($message->getText(), $parameters, "pocketmine."), $parameters));
|
||||
$this->sendDataPacket(TextPacket::translation(...$this->prepareClientTranslatableMessage($message)));
|
||||
}else{
|
||||
$this->sendDataPacket(TextPacket::raw($language->translate($message)));
|
||||
$this->sendDataPacket(TextPacket::raw($this->player->getLanguage()->translate($message)));
|
||||
}
|
||||
}else{
|
||||
$this->sendDataPacket(TextPacket::raw($message));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string[] $parameters
|
||||
*/
|
||||
public function onJukeboxPopup(string $key, array $parameters) : void{
|
||||
$this->sendDataPacket(TextPacket::jukeboxPopup($key, $parameters));
|
||||
public function onJukeboxPopup(Translatable|string $message) : void{
|
||||
$parameters = [];
|
||||
if($message instanceof Translatable){
|
||||
if(!$this->server->isLanguageForced()){
|
||||
[$message, $parameters] = $this->prepareClientTranslatableMessage($message);
|
||||
}else{
|
||||
$message = $this->player->getLanguage()->translate($message);
|
||||
}
|
||||
}
|
||||
$this->sendDataPacket(TextPacket::jukeboxPopup($message, $parameters));
|
||||
}
|
||||
|
||||
public function onPopup(string $message) : void{
|
||||
|
@ -54,9 +54,7 @@ class DeathPacketHandler extends PacketHandler{
|
||||
if($this->deathMessage instanceof Translatable){
|
||||
$language = $this->player->getLanguage();
|
||||
if(!$this->player->getServer()->isLanguageForced()){
|
||||
//we can't send nested translations to the client, so make sure they are always pre-translated by the server
|
||||
$parameters = array_map(fn(string|Translatable $p) => $p instanceof Translatable ? $language->translate($p) : $p, $this->deathMessage->getParameters());
|
||||
$message = $language->translateString($this->deathMessage->getText(), $parameters, "pocketmine.");
|
||||
[$message, $parameters] = $this->session->prepareClientTranslatableMessage($this->deathMessage);
|
||||
}else{
|
||||
$message = $language->translate($this->deathMessage);
|
||||
}
|
||||
|
@ -2014,11 +2014,8 @@ class Player extends Human implements CommandSender, ChunkListener, IPlayer{
|
||||
$this->getNetworkSession()->onChatMessage($message);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string[] $args
|
||||
*/
|
||||
public function sendJukeboxPopup(string $key, array $args) : void{
|
||||
$this->getNetworkSession()->onJukeboxPopup($key, $args);
|
||||
public function sendJukeboxPopup(Translatable|string $message) : void{
|
||||
$this->getNetworkSession()->onJukeboxPopup($message);
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user