浏览代码

add broadcast to translation

Laserlicht 10 月之前
父节点
当前提交
78e933a968

+ 37 - 0
Mods/vcmi/Content/config/english.json

@@ -120,6 +120,43 @@
 	"vcmi.lobby.deleteFile" : "Do you want to delete following file?",
 	"vcmi.lobby.deleteFolder" : "Do you want to delete following folder?",
 	"vcmi.lobby.deleteMode" : "Switch to delete mode and back",
+
+	"vcmi.broadcast.command" : "Use '!help' to list available commands",
+	"vcmi.broadcast.simturn.end" : "Simultaneous turns have ended",
+	"vcmi.broadcast.simturn.endbetween" : "Simultaneous turns between players %s and %s have ended",
+	"vcmi.broadcast.serverproblem" : "Server encountered a problem",
+	"vcmi.broadcast.gameterminated" : "game was terminated",
+	"vcmi.broadcast.gamesavedas" : "game saved as",
+	"vcmi.broadcast.nocheater" : "No cheaters registered!",
+	"vcmi.broadcast.playercheater" : "Player %s is cheater!",
+	"vcmi.broadcast.statisticfile" : "Statistic files can be found in %s directory",
+	"vcmi.broadcast.help.commands" : "Available commands to host:",
+	"vcmi.broadcast.help.exit" : "'!exit' - immediately ends current game",
+	"vcmi.broadcast.help.kick" : "'!kick <player>' - kick specified player from the game",
+	"vcmi.broadcast.help.save" : "'!save <filename>' - save game under specified filename",
+	"vcmi.broadcast.help.statistic" : "'!statistic' - save game statistics as csv file",
+	"vcmi.broadcast.help.commandsall" : "Available commands to all players:",
+	"vcmi.broadcast.help.help" : "'!help' - display this help",
+	"vcmi.broadcast.help.cheaters" : "'!cheaters' - list players that entered cheat command during game",
+	"vcmi.broadcast.help.vote" : "'!vote' - allows to change some game settings if all players vote for it",
+	"vcmi.broadcast.vote.allow" : "'!vote simturns allow X' - allow simultaneous turns for specified number of days, or until contact",
+	"vcmi.broadcast.vote.force" : "'!vote simturns force X' - force simultaneous turns for specified number of days, blocking player contacts",
+	"vcmi.broadcast.vote.abort" : "'!vote simturns abort' - abort simultaneous turns once this turn ends",
+	"vcmi.broadcast.vote.timer" : "'!vote timer prolong X' - prolong base timer for all players by specified number of seconds",
+	"vcmi.broadcast.vote.noactive" : "No active voting!",
+	"vcmi.broadcast.vote.yes" : "yes",
+	"vcmi.broadcast.vote.no" : "no",
+	"vcmi.broadcast.vote.notrecognized" : "Voting command not recognized!",
+	"vcmi.broadcast.vote.success.untilcontacts" : "Voting successful. Simultaneous turns will run for %s more days, or until contact",
+	"vcmi.broadcast.vote.success.contactsblocked" : "Voting successful. Simultaneous turns will run for %s more days. Contacts are blocked",
+	"vcmi.broadcast.vote.success.nextday" : "Voting successful. Simultaneous turns will end on next day",
+	"vcmi.broadcast.vote.success.timer" : "Voting successful. Timer for all players has been prolonger for %s seconds",
+	"vcmi.broadcast.vote.aborted" : "Player voted against change. Voting aborted",
+	"vcmi.broadcast.vote.start.untilcontacts" : "Started voting to allow simultaneous turns for %s more days",
+	"vcmi.broadcast.vote.start.contactsblocked" : "Started voting to force simultaneous turns for %s more days",
+	"vcmi.broadcast.vote.start.nextday" : "Started voting to end simultaneous turns starting from next day",
+	"vcmi.broadcast.vote.start.timer" : "Started voting to prolong timer for all players by %s seconds",
+	"vcmi.broadcast.vote.hint" : "Type '!vote yes' to agree to this change or '!vote no' to vote against it",
 		
 	"vcmi.lobby.login.title" : "VCMI Online Lobby",
 	"vcmi.lobby.login.username" : "Username:",

+ 2 - 0
Mods/vcmi/Content/config/german.json

@@ -120,6 +120,8 @@
 	"vcmi.lobby.deleteFile" : "Möchtet Ihr folgende Datei löschen?",
 	"vcmi.lobby.deleteFolder" : "Möchtet Ihr folgenden Ordner löschen?",
 	"vcmi.lobby.deleteMode" : "In den Löschmodus wechseln und zurück",
+
+	"vcmi.broadcast.command" : "Benutze '!help' um alle verfügbaren Befehle aufzulisten",
 		
 	"vcmi.lobby.login.title" : "VCMI Online Lobby",
 	"vcmi.lobby.login.username" : "Benutzername:",

+ 5 - 1
server/CGameHandler.cpp

@@ -3264,7 +3264,11 @@ bool CGameHandler::queryReply(QueryID qid, std::optional<int32_t> answer, Player
 bool CGameHandler::complain(const std::string &problem)
 {
 #ifndef ENABLE_GOLDMASTER
-	playerMessages->broadcastSystemMessage("Server encountered a problem: " + problem);
+	MetaString str;
+	str.appendTextID("vcmi.broadcast.serverproblem");
+	str.appendRawString(": ");
+	str.appendRawString(problem);
+	playerMessages->broadcastSystemMessage(str);
 #endif
 	logGlobal->error(problem);
 	return true;

+ 1 - 1
server/CVCMIServer.cpp

@@ -1016,7 +1016,7 @@ void CVCMIServer::multiplayerWelcomeMessage()
 	if(humanPlayer < 2) // Singleplayer
 		return;
 
-	gh->playerMessages->broadcastSystemMessage("Use '!help' to list available commands");
+	gh->playerMessages->broadcastSystemMessage(MetaString::createFromTextID("vcmi.broadcast.command"));
 
 	for (const auto & pi : si->playerInfos)
 		if(!pi.second.handicap.startBonus.empty() || pi.second.handicap.percentIncome != 100 || pi.second.handicap.percentGrowth != 100)

+ 57 - 33
server/processors/PlayerMessageProcessor.cpp

@@ -70,7 +70,7 @@ void PlayerMessageProcessor::commandExit(PlayerColor player, const std::vector<s
 	if(!isHost)
 		return;
 
-	broadcastSystemMessage("game was terminated");
+	broadcastSystemMessage(MetaString::createFromTextID("vcmi.broadcast.gameterminated"));
 	gameHandler->gameLobby()->setState(EServerState::SHUTDOWN);
 }
 
@@ -115,7 +115,11 @@ void PlayerMessageProcessor::commandSave(PlayerColor player, const std::vector<s
 	if(words.size() == 2)
 	{
 		gameHandler->save("Saves/" + words[1]);
-		broadcastSystemMessage("game saved as " + words[1]);
+		MetaString str;
+		str.appendTextID("vcmi.broadcast.gamesavedas");
+		str.appendRawString(" ");
+		str.appendRawString(words[1]);
+		broadcastSystemMessage(str);
 	}
 }
 
@@ -126,13 +130,15 @@ void PlayerMessageProcessor::commandCheaters(PlayerColor player, const std::vect
 	{
 		if(player.second.cheated)
 		{
-			broadcastSystemMessage("Player " + player.first.toString() + " is cheater!");
+			auto str = MetaString::createFromTextID("vcmi.broadcast.playercheater");
+			str.replaceName(player.first);
+			broadcastSystemMessage(str);
 			playersCheated++;
 		}
 	}
 
 	if(!playersCheated)
-		broadcastSystemMessage("No cheaters registered!");
+		broadcastSystemMessage(MetaString::createFromTextID("vcmi.broadcast.nocheater"));
 }
 
 void PlayerMessageProcessor::commandStatistic(PlayerColor player, const std::vector<std::string> & words)
@@ -143,49 +149,51 @@ void PlayerMessageProcessor::commandStatistic(PlayerColor player, const std::vec
 
 	std::string path = gameHandler->gameState()->statistic.writeCsv();
 
-	broadcastSystemMessage("Statistic files can be found in " + path + " directory\n");
+	auto str = MetaString::createFromTextID("vcmi.broadcast.statisticfile");
+	str.replaceRawString(path);
+	broadcastSystemMessage(str);
 }
 
 void PlayerMessageProcessor::commandHelp(PlayerColor player, const std::vector<std::string> & words)
 {
-	broadcastSystemMessage("Available commands to host:");
-	broadcastSystemMessage("'!exit' - immediately ends current game");
-	broadcastSystemMessage("'!kick <player>' - kick specified player from the game");
-	broadcastSystemMessage("'!save <filename>' - save game under specified filename");
-	broadcastSystemMessage("'!statistic' - save game statistics as csv file");
-	broadcastSystemMessage("Available commands to all players:");
-	broadcastSystemMessage("'!help' - display this help");
-	broadcastSystemMessage("'!cheaters' - list players that entered cheat command during game");
-	broadcastSystemMessage("'!vote' - allows to change some game settings if all players vote for it");
+	broadcastSystemMessage(MetaString::createFromTextID("vcmi.broadcast.help.commands"));
+	broadcastSystemMessage(MetaString::createFromTextID("vcmi.broadcast.help.exit"));
+	broadcastSystemMessage(MetaString::createFromTextID("vcmi.broadcast.help.kick"));
+	broadcastSystemMessage(MetaString::createFromTextID("vcmi.broadcast.help.save"));
+	broadcastSystemMessage(MetaString::createFromTextID("vcmi.broadcast.help.statistic"));
+	broadcastSystemMessage(MetaString::createFromTextID("vcmi.broadcast.help.commandsall"));
+	broadcastSystemMessage(MetaString::createFromTextID("vcmi.broadcast.help.help"));
+	broadcastSystemMessage(MetaString::createFromTextID("vcmi.broadcast.help.cheaters"));
+	broadcastSystemMessage(MetaString::createFromTextID("vcmi.broadcast.help.vote"));
 }
 
 void PlayerMessageProcessor::commandVote(PlayerColor player, const std::vector<std::string> & words)
 {
 	if(words.size() < 2)
 	{
-		broadcastSystemMessage("'!vote simturns allow X' - allow simultaneous turns for specified number of days, or until contact");
-		broadcastSystemMessage("'!vote simturns force X' - force simultaneous turns for specified number of days, blocking player contacts");
-		broadcastSystemMessage("'!vote simturns abort' - abort simultaneous turns once this turn ends");
-		broadcastSystemMessage("'!vote timer prolong X' - prolong base timer for all players by specified number of seconds");
+		broadcastSystemMessage(MetaString::createFromTextID("vcmi.broadcast.vote.allow"));
+		broadcastSystemMessage(MetaString::createFromTextID("vcmi.broadcast.vote.force"));
+		broadcastSystemMessage(MetaString::createFromTextID("vcmi.broadcast.vote.abort"));
+		broadcastSystemMessage(MetaString::createFromTextID("vcmi.broadcast.vote.timer"));
 		return;
 	}
 
-	if(words[1] == "yes" || words[1] == "no")
+	if(words[1] == "yes" || words[1] == "no" || words[1] == MetaString::createFromTextID("vcmi.broadcast.vote.yes").toString() || words[1] == MetaString::createFromTextID("vcmi.broadcast.vote.no").toString())
 	{
 		if(currentVote == ECurrentChatVote::NONE)
 		{
-			broadcastSystemMessage("No active voting!");
+			broadcastSystemMessage(MetaString::createFromTextID("vcmi.broadcast.vote.noactive"));
 			return;
 		}
 
-		if(words[1] == "yes")
+		if(words[1] == "yes" || words[1] == MetaString::createFromTextID("vcmi.broadcast.vote.yes").toString())
 		{
 			awaitingPlayers.erase(player);
 			if(awaitingPlayers.empty())
 				finishVoting();
 			return;
 		}
-		if(words[1] == "no")
+		if(words[1] == "no" || words[1] == MetaString::createFromTextID("vcmi.broadcast.vote.no").toString())
 		{
 			abortVoting();
 			return;
@@ -240,28 +248,36 @@ void PlayerMessageProcessor::commandVote(PlayerColor player, const std::vector<s
 		}
 	}
 
-	broadcastSystemMessage("Voting command not recognized!");
+	broadcastSystemMessage(MetaString::createFromTextID("vcmi.broadcast.vote.notrecognized"));
 }
 
 void PlayerMessageProcessor::finishVoting()
 {
+	MetaString msg;
 	switch(currentVote)
 	{
 		case ECurrentChatVote::SIMTURNS_ALLOW:
-			broadcastSystemMessage("Voting successful. Simultaneous turns will run for " + std::to_string(currentVoteParameter) + " more days, or until contact");
+			msg.appendTextID("vcmi.broadcast.vote.success.untilcontacts");
+			msg.replaceRawString(std::to_string(currentVoteParameter));
+			broadcastSystemMessage(msg);
 			gameHandler->turnOrder->setMaxSimturnsDuration(currentVoteParameter);
 			break;
 		case ECurrentChatVote::SIMTURNS_FORCE:
-			broadcastSystemMessage("Voting successful. Simultaneous turns will run for " + std::to_string(currentVoteParameter) + " more days. Contacts are blocked");
+			msg.appendTextID("vcmi.broadcast.vote.success.contactsblocked");
+			msg.replaceRawString(std::to_string(currentVoteParameter));
+			broadcastSystemMessage(msg);
 			gameHandler->turnOrder->setMinSimturnsDuration(currentVoteParameter);
 			break;
 		case ECurrentChatVote::SIMTURNS_ABORT:
-			broadcastSystemMessage("Voting successful. Simultaneous turns will end on next day");
+			msg.appendTextID("vcmi.broadcast.vote.success.nextday");
+			broadcastSystemMessage(msg);
 			gameHandler->turnOrder->setMinSimturnsDuration(0);
 			gameHandler->turnOrder->setMaxSimturnsDuration(0);
 			break;
 		case ECurrentChatVote::TIMER_PROLONG:
-			broadcastSystemMessage("Voting successful. Timer for all players has been prolonger for " + std::to_string(currentVoteParameter) + " seconds");
+			msg.appendTextID("vcmi.broadcast.vote.success.timer");
+			msg.replaceRawString(std::to_string(currentVoteParameter));
+			broadcastSystemMessage(msg);
 			gameHandler->turnTimerHandler->prolongTimers(currentVoteParameter * 1000);
 			break;
 	}
@@ -272,7 +288,7 @@ void PlayerMessageProcessor::finishVoting()
 
 void PlayerMessageProcessor::abortVoting()
 {
-	broadcastSystemMessage("Player voted against change. Voting aborted");
+	broadcastSystemMessage(MetaString::createFromTextID("vcmi.broadcast.vote.aborted"));
 	currentVote = ECurrentChatVote::NONE;
 }
 
@@ -281,25 +297,33 @@ void PlayerMessageProcessor::startVoting(PlayerColor initiator, ECurrentChatVote
 	currentVote = what;
 	currentVoteParameter = parameter;
 
+	MetaString msg;
 	switch(currentVote)
 	{
 		case ECurrentChatVote::SIMTURNS_ALLOW:
-			broadcastSystemMessage("Started voting to allow simultaneous turns for " + std::to_string(parameter) + " more days");
+			msg.appendTextID("vcmi.broadcast.vote.start.untilcontacts");
+			msg.replaceRawString(std::to_string(parameter));
+			broadcastSystemMessage(msg);
 			break;
 		case ECurrentChatVote::SIMTURNS_FORCE:
-			broadcastSystemMessage("Started voting to force simultaneous turns for " + std::to_string(parameter) + " more days");
+			msg.appendTextID("vcmi.broadcast.vote.start.contactsblocked");
+			msg.replaceRawString(std::to_string(parameter));
+			broadcastSystemMessage(msg);
 			break;
 		case ECurrentChatVote::SIMTURNS_ABORT:
-			broadcastSystemMessage("Started voting to end simultaneous turns starting from next day");
+			msg.appendTextID("vcmi.broadcast.vote.start.nextday");
+			broadcastSystemMessage(msg);
 			break;
 		case ECurrentChatVote::TIMER_PROLONG:
-			broadcastSystemMessage("Started voting to prolong timer for all players by " + std::to_string(parameter) + " seconds");
+			msg.appendTextID("vcmi.broadcast.vote.start.timer");
+			msg.replaceRawString(std::to_string(parameter));
+			broadcastSystemMessage(msg);
 			break;
 		default:
 			return;
 	}
 
-	broadcastSystemMessage("Type '!vote yes' to agree to this change or '!vote no' to vote against it");
+	broadcastSystemMessage(MetaString::createFromTextID("vcmi.broadcast.vote.hint"));
 	awaitingPlayers.clear();
 
 	for(PlayerColor player(0); player < PlayerColor::PLAYER_LIMIT; ++player)

+ 3 - 3
server/processors/TurnOrderProcessor.cpp

@@ -72,7 +72,7 @@ void TurnOrderProcessor::updateAndNotifyContactStatus()
 	{
 		// Simturns between all players have ended - send single global notification
 		if (!blockedContacts.empty())
-			gameHandler->playerMessages->broadcastSystemMessage("Simultaneous turns have ended");
+			gameHandler->playerMessages->broadcastSystemMessage(MetaString::createFromTextID("vcmi.broadcast.simturn.end"));
 	}
 	else
 	{
@@ -83,11 +83,11 @@ void TurnOrderProcessor::updateAndNotifyContactStatus()
 				continue;
 
 			MetaString message;
-			message.appendRawString("Simultaneous turns between players %s and %s have ended"); // FIXME: we should send MetaString itself and localize it on client side
+			message.appendTextID("vcmi.broadcast.simturn.endbetween");
 			message.replaceName(contact.a);
 			message.replaceName(contact.b);
 
-			gameHandler->playerMessages->broadcastSystemMessage(message.toString());
+			gameHandler->playerMessages->broadcastSystemMessage(message);
 		}
 	}