1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-12-22 22:13:35 +02:00

add broadcast to translation

This commit is contained in:
Laserlicht 2024-12-01 18:29:07 +01:00
parent d4b2ec5b0b
commit 78e933a968
6 changed files with 105 additions and 38 deletions

View File

@ -120,6 +120,43 @@
"vcmi.lobby.deleteFile" : "Do you want to delete following file?", "vcmi.lobby.deleteFile" : "Do you want to delete following file?",
"vcmi.lobby.deleteFolder" : "Do you want to delete following folder?", "vcmi.lobby.deleteFolder" : "Do you want to delete following folder?",
"vcmi.lobby.deleteMode" : "Switch to delete mode and back", "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.title" : "VCMI Online Lobby",
"vcmi.lobby.login.username" : "Username:", "vcmi.lobby.login.username" : "Username:",

View File

@ -120,6 +120,8 @@
"vcmi.lobby.deleteFile" : "Möchtet Ihr folgende Datei löschen?", "vcmi.lobby.deleteFile" : "Möchtet Ihr folgende Datei löschen?",
"vcmi.lobby.deleteFolder" : "Möchtet Ihr folgenden Ordner löschen?", "vcmi.lobby.deleteFolder" : "Möchtet Ihr folgenden Ordner löschen?",
"vcmi.lobby.deleteMode" : "In den Löschmodus wechseln und zurück", "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.title" : "VCMI Online Lobby",
"vcmi.lobby.login.username" : "Benutzername:", "vcmi.lobby.login.username" : "Benutzername:",

View File

@ -3264,7 +3264,11 @@ bool CGameHandler::queryReply(QueryID qid, std::optional<int32_t> answer, Player
bool CGameHandler::complain(const std::string &problem) bool CGameHandler::complain(const std::string &problem)
{ {
#ifndef ENABLE_GOLDMASTER #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 #endif
logGlobal->error(problem); logGlobal->error(problem);
return true; return true;

View File

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

View File

@ -70,7 +70,7 @@ void PlayerMessageProcessor::commandExit(PlayerColor player, const std::vector<s
if(!isHost) if(!isHost)
return; return;
broadcastSystemMessage("game was terminated"); broadcastSystemMessage(MetaString::createFromTextID("vcmi.broadcast.gameterminated"));
gameHandler->gameLobby()->setState(EServerState::SHUTDOWN); gameHandler->gameLobby()->setState(EServerState::SHUTDOWN);
} }
@ -115,7 +115,11 @@ void PlayerMessageProcessor::commandSave(PlayerColor player, const std::vector<s
if(words.size() == 2) if(words.size() == 2)
{ {
gameHandler->save("Saves/" + words[1]); 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) 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++; playersCheated++;
} }
} }
if(!playersCheated) if(!playersCheated)
broadcastSystemMessage("No cheaters registered!"); broadcastSystemMessage(MetaString::createFromTextID("vcmi.broadcast.nocheater"));
} }
void PlayerMessageProcessor::commandStatistic(PlayerColor player, const std::vector<std::string> & words) 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(); 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) void PlayerMessageProcessor::commandHelp(PlayerColor player, const std::vector<std::string> & words)
{ {
broadcastSystemMessage("Available commands to host:"); broadcastSystemMessage(MetaString::createFromTextID("vcmi.broadcast.help.commands"));
broadcastSystemMessage("'!exit' - immediately ends current game"); broadcastSystemMessage(MetaString::createFromTextID("vcmi.broadcast.help.exit"));
broadcastSystemMessage("'!kick <player>' - kick specified player from the game"); broadcastSystemMessage(MetaString::createFromTextID("vcmi.broadcast.help.kick"));
broadcastSystemMessage("'!save <filename>' - save game under specified filename"); broadcastSystemMessage(MetaString::createFromTextID("vcmi.broadcast.help.save"));
broadcastSystemMessage("'!statistic' - save game statistics as csv file"); broadcastSystemMessage(MetaString::createFromTextID("vcmi.broadcast.help.statistic"));
broadcastSystemMessage("Available commands to all players:"); broadcastSystemMessage(MetaString::createFromTextID("vcmi.broadcast.help.commandsall"));
broadcastSystemMessage("'!help' - display this help"); broadcastSystemMessage(MetaString::createFromTextID("vcmi.broadcast.help.help"));
broadcastSystemMessage("'!cheaters' - list players that entered cheat command during game"); broadcastSystemMessage(MetaString::createFromTextID("vcmi.broadcast.help.cheaters"));
broadcastSystemMessage("'!vote' - allows to change some game settings if all players vote for it"); broadcastSystemMessage(MetaString::createFromTextID("vcmi.broadcast.help.vote"));
} }
void PlayerMessageProcessor::commandVote(PlayerColor player, const std::vector<std::string> & words) void PlayerMessageProcessor::commandVote(PlayerColor player, const std::vector<std::string> & words)
{ {
if(words.size() < 2) if(words.size() < 2)
{ {
broadcastSystemMessage("'!vote simturns allow X' - allow simultaneous turns for specified number of days, or until contact"); broadcastSystemMessage(MetaString::createFromTextID("vcmi.broadcast.vote.allow"));
broadcastSystemMessage("'!vote simturns force X' - force simultaneous turns for specified number of days, blocking player contacts"); broadcastSystemMessage(MetaString::createFromTextID("vcmi.broadcast.vote.force"));
broadcastSystemMessage("'!vote simturns abort' - abort simultaneous turns once this turn ends"); broadcastSystemMessage(MetaString::createFromTextID("vcmi.broadcast.vote.abort"));
broadcastSystemMessage("'!vote timer prolong X' - prolong base timer for all players by specified number of seconds"); broadcastSystemMessage(MetaString::createFromTextID("vcmi.broadcast.vote.timer"));
return; 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) if(currentVote == ECurrentChatVote::NONE)
{ {
broadcastSystemMessage("No active voting!"); broadcastSystemMessage(MetaString::createFromTextID("vcmi.broadcast.vote.noactive"));
return; return;
} }
if(words[1] == "yes") if(words[1] == "yes" || words[1] == MetaString::createFromTextID("vcmi.broadcast.vote.yes").toString())
{ {
awaitingPlayers.erase(player); awaitingPlayers.erase(player);
if(awaitingPlayers.empty()) if(awaitingPlayers.empty())
finishVoting(); finishVoting();
return; return;
} }
if(words[1] == "no") if(words[1] == "no" || words[1] == MetaString::createFromTextID("vcmi.broadcast.vote.no").toString())
{ {
abortVoting(); abortVoting();
return; 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() void PlayerMessageProcessor::finishVoting()
{ {
MetaString msg;
switch(currentVote) switch(currentVote)
{ {
case ECurrentChatVote::SIMTURNS_ALLOW: 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); gameHandler->turnOrder->setMaxSimturnsDuration(currentVoteParameter);
break; break;
case ECurrentChatVote::SIMTURNS_FORCE: 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); gameHandler->turnOrder->setMinSimturnsDuration(currentVoteParameter);
break; break;
case ECurrentChatVote::SIMTURNS_ABORT: 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->setMinSimturnsDuration(0);
gameHandler->turnOrder->setMaxSimturnsDuration(0); gameHandler->turnOrder->setMaxSimturnsDuration(0);
break; break;
case ECurrentChatVote::TIMER_PROLONG: 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); gameHandler->turnTimerHandler->prolongTimers(currentVoteParameter * 1000);
break; break;
} }
@ -272,7 +288,7 @@ void PlayerMessageProcessor::finishVoting()
void PlayerMessageProcessor::abortVoting() void PlayerMessageProcessor::abortVoting()
{ {
broadcastSystemMessage("Player voted against change. Voting aborted"); broadcastSystemMessage(MetaString::createFromTextID("vcmi.broadcast.vote.aborted"));
currentVote = ECurrentChatVote::NONE; currentVote = ECurrentChatVote::NONE;
} }
@ -281,25 +297,33 @@ void PlayerMessageProcessor::startVoting(PlayerColor initiator, ECurrentChatVote
currentVote = what; currentVote = what;
currentVoteParameter = parameter; currentVoteParameter = parameter;
MetaString msg;
switch(currentVote) switch(currentVote)
{ {
case ECurrentChatVote::SIMTURNS_ALLOW: 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; break;
case ECurrentChatVote::SIMTURNS_FORCE: 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; break;
case ECurrentChatVote::SIMTURNS_ABORT: 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; break;
case ECurrentChatVote::TIMER_PROLONG: 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; break;
default: default:
return; 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(); awaitingPlayers.clear();
for(PlayerColor player(0); player < PlayerColor::PLAYER_LIMIT; ++player) for(PlayerColor player(0); player < PlayerColor::PLAYER_LIMIT; ++player)

View File

@ -72,7 +72,7 @@ void TurnOrderProcessor::updateAndNotifyContactStatus()
{ {
// Simturns between all players have ended - send single global notification // Simturns between all players have ended - send single global notification
if (!blockedContacts.empty()) if (!blockedContacts.empty())
gameHandler->playerMessages->broadcastSystemMessage("Simultaneous turns have ended"); gameHandler->playerMessages->broadcastSystemMessage(MetaString::createFromTextID("vcmi.broadcast.simturn.end"));
} }
else else
{ {
@ -83,11 +83,11 @@ void TurnOrderProcessor::updateAndNotifyContactStatus()
continue; continue;
MetaString message; 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.a);
message.replaceName(contact.b); message.replaceName(contact.b);
gameHandler->playerMessages->broadcastSystemMessage(message.toString()); gameHandler->playerMessages->broadcastSystemMessage(message);
} }
} }