Translate format text

This commit is contained in:
Shoghi Cervantes 2015-04-11 02:15:46 +02:00
parent 0c041ebca3
commit c29ae333a2
No known key found for this signature in database
GPG Key ID: 78464DB0A7837F89
8 changed files with 42 additions and 32 deletions

View File

@ -2194,7 +2194,7 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
}else{
$this->server->getPluginManager()->callEvent($ev = new PlayerChatEvent($this, $ev->getMessage()));
if(!$ev->isCancelled()){
$this->server->broadcastMessage(sprintf($ev->getFormat(), $ev->getPlayer()->getDisplayName(), $ev->getMessage()), $ev->getRecipients());
$this->server->broadcastMessage($this->getServer()->getLanguage()->translateString($ev->getFormat(), [$ev->getPlayer()->getDisplayName(), $ev->getMessage()]), $ev->getRecipients());
}
}
}

View File

@ -407,26 +407,22 @@ class Server{
case (string) Player::SURVIVAL:
case "survival":
case "s":
case strtolower(Server::getInstance()->getLanguage()->get("gameMode.survival")):
return Player::SURVIVAL;
case (string) Player::CREATIVE:
case "creative":
case "c":
case strtolower(Server::getInstance()->getLanguage()->get("gameMode.creative")):
return Player::CREATIVE;
case (string) Player::ADVENTURE:
case "adventure":
case "a":
case strtolower(Server::getInstance()->getLanguage()->get("gameMode.adventure")):
return Player::ADVENTURE;
case (string) Player::SPECTATOR:
case "spectator":
case "view":
case "v":
case strtolower(Server::getInstance()->getLanguage()->get("gameMode.spectator")):
return Player::SPECTATOR;
}
return -1;

View File

@ -289,23 +289,21 @@ abstract class Command{
public static function broadcastCommandMessage(CommandSender $source, $message, $sendToSource = true){
if($message instanceof TextContainer){
$m = clone $message;
$result = $source->getName() . ": " . $m->getText();
$result = "[".$source->getName().": ".$m->getText()."]";
$users = Server::getInstance()->getPluginManager()->getPermissionSubscriptions(Server::BROADCAST_CHANNEL_ADMINISTRATIVE);
$colored = TextFormat::GRAY . TextFormat::ITALIC . "[$result" . TextFormat::GRAY . TextFormat::ITALIC . "]";
$colored = TextFormat::GRAY . TextFormat::ITALIC . $result;
$m->setText($result);
$result = clone $m;
$m->setText($colored);
$colored = clone $m;
}else{
$result = $source->getName() . ": " . $message;
//Command minecarts or command blocks are not implemented
$users = Server::getInstance()->getPluginManager()->getPermissionSubscriptions(Server::BROADCAST_CHANNEL_ADMINISTRATIVE);
$colored = TextFormat::GRAY . TextFormat::ITALIC . "[$result" . TextFormat::GRAY . TextFormat::ITALIC . "]";
$result = new TranslationContainer("chat.type.admin", [$source->getName(), $message]);
$colored = new TranslationContainer(TextFormat::GRAY . TextFormat::ITALIC . "%chat.type.admin", [$source->getName(), $message]);
}
if($sendToSource === true and !($source instanceof ConsoleCommandSender)){
$source->sendMessage($message);
}

View File

@ -48,14 +48,7 @@ class MeCommand extends VanillaCommand{
return false;
}
$message = "* ";
if($sender instanceof Player){
$message .= $sender->getDisplayName();
}else{
$message .= $sender->getName();
}
$sender->getServer()->broadcastMessage($message . " " . implode(" ", $args));
$sender->getServer()->broadcastMessage(new TranslationContainer("chat.type.emote", [$sender instanceof Player ? $sender->getDisplayName() : $sender->getName(), TextFormat::WHITE . implode(" ", $args)]));
return true;
}

View File

@ -49,17 +49,7 @@ class SayCommand extends VanillaCommand{
return false;
}
$message = TextFormat::LIGHT_PURPLE . "[";
if($sender instanceof ConsoleCommandSender){
$message .= "Server";
}elseif($sender instanceof Player){
$message .= $sender->getDisplayName();
}else{
$message .= $sender->getName();
}
$message .= TextFormat::LIGHT_PURPLE . "] " . implode(" ", $args);
$sender->getServer()->broadcastMessage($message);
$sender->getServer()->broadcastMessage(new TranslationContainer(TextFormat::LIGHT_PURPLE . "%chat.type.announcement", [$sender instanceof Player ? $sender->getDisplayName() : ($sender instanceof ConsoleCommandSender ? "Server" : $sender->getName()), TextFormat::LIGHT_PURPLE . implode(" ", $args)]));
return true;
}
}

View File

@ -42,10 +42,19 @@ class PlayerChatEvent extends PlayerEvent implements Cancellable{
*/
protected $recipients = [];
public function __construct(Player $player, $message, $format = "<%s> %s", array $recipients = null){
public function __construct(Player $player, $message, $format = "chat.type.text", array $recipients = null){
$this->player = $player;
$this->message = $message;
//TODO: @deprecated (backwards-compativility)
$i = 0;
while(($pos = strpos($format, "%s")) !== false){
$format = substr($format, 0, $pos) . "{%$i}" . substr($format, $pos + 2);
++$i;
}
$this->format = $format;
if($recipients === null){
$this->recipients = Server::getInstance()->getPluginManager()->getPermissionSubscriptions(Server::BROADCAST_CHANNEL_USERS);
}else{

View File

@ -78,6 +78,23 @@ class BaseLang{
}
}
/**
* @param string $str
* @param string[] $params
*
* @return string
*/
public function translateString($str, array $params = []){
$baseText = $this->get($str);
$baseText = $this->parseTranslation( $baseText !== null ? $baseText : $str);
foreach($params as $i => $p){
$baseText = str_replace("{%$i}", $this->parseTranslation($p), $baseText);
}
return $baseText;
}
public function translate(TextContainer $c){
if($c instanceof TranslationContainer){
$baseText = $this->get($c->getText());

View File

@ -8,6 +8,13 @@ language.name=English
multiplayer.player.joined={%0} joined the game
multiplayer.player.leave={%0} left the game
chat.type.text=<{%0}> {%1}
chat.type.emote=* {%0} {%1}
chat.type.announcement=[{%0}] {%1}
chat.type.admin=[{%0}: {%1}]
chat.type.achievement={%0} has just earned the achievement {%1}
death.fell.accident.generic={%0} fell from a high place
death.attack.inFire={%0} went up in flames
death.attack.onFire={%0} burned to death