Added settings.force-language property to force server language on clients

This commit is contained in:
Shoghi Cervantes 2015-04-13 12:02:40 +02:00
parent 31387ff0be
commit 1865622b89
5 changed files with 28 additions and 22 deletions

View File

@ -2440,11 +2440,12 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
*/
public function sendMessage($message){
if($message instanceof TextContainer){
if($message instanceof TranslationContainer){
$this->sendTranslation($message->getText(), $message->getParameters());
return;
}
$message = $message->getText();
if ($message instanceof TranslationContainer) {
$this->sendTranslation($message->getText(), $message->getParameters());
return;
}
$message = $message->getText();
}
$mes = explode("\n", $this->server->getLanguage()->translateString($message));
@ -2460,12 +2461,17 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
public function sendTranslation($message, array $parameters = []){
$pk = new TextPacket();
$pk->type = TextPacket::TYPE_TRANSLATION;
$pk->message = $this->server->getLanguage()->translateString($message, [], "pocketmine.");
foreach($parameters as $i => $p){
$parameters[$i] = $this->server->getLanguage()->translateString($p, [], "pocketmine.");
if(!$this->server->isLanguageForced()){
$pk->type = TextPacket::TYPE_TRANSLATION;
$pk->message = $this->server->getLanguage()->translateString($message, [], "pocketmine.");
foreach($parameters as $i => $p){
$parameters[$i] = $this->server->getLanguage()->translateString($p, [], "pocketmine.");
}
$pk->parameters = $parameters;
}else{
$pk->type = TextPacket::TYPE_RAW;
$pk->message = $this->server->getLanguage()->translateString($message, $parameters);
}
$pk->parameters = $parameters;
$this->dataPacket($pk);
}

View File

@ -201,6 +201,8 @@ class Server{
/** @var BaseLang */
private $baseLang;
private $forceLanguage = false;
private $serverID;
private $autoloader;
@ -1515,6 +1517,7 @@ class Server{
"auto-save" => true,
]);
$this->forceLanguage = $this->getProperty("settings.force-language", false);
$this->baseLang = new BaseLang($this->getProperty("settings.language", BaseLang::FALLBACK_LANGUAGE));
$this->logger->info($this->getLanguage()->translateString("language.selected", [$this->getLanguage()->getName(), $this->getLanguage()->getLang()]));
@ -2262,6 +2265,13 @@ class Server{
return $this->baseLang;
}
/**
* @return bool
*/
public function isLanguageForced(){
return $this->forceLanguage;
}
/**
* @return Network
*/

View File

@ -21,8 +21,6 @@
namespace pocketmine\event;
use pocketmine\Player;
class TextContainer{
/** @var string $text */
@ -43,10 +41,6 @@ class TextContainer{
return $this->text;
}
public function send(Player $p){
$p->sendMessage($this->getText());
}
/**
* @return string
*/

View File

@ -21,8 +21,6 @@
namespace pocketmine\event;
use pocketmine\Player;
class TranslationContainer extends TextContainer{
/** @var string[] $params */
@ -77,8 +75,4 @@ class TranslationContainer extends TextContainer{
++$i;
}
}
public function send(Player $p){
$p->sendTranslation($this->getText(), $this->getParameters());
}
}

View File

@ -7,6 +7,8 @@ settings:
#Three-letter language code for server-side localization
#Check your language code on https://en.wikipedia.org/wiki/List_of_ISO_639-2_codes
language: "eng"
#Whether to send all strings translated to server locale or let the device handle them
force-language: false
shutdown-message: "Server closed"
#Allow listing plugins via Query
query-plugins: true