diff options
Diffstat (limited to 'modules')
183 files changed, 5848 insertions, 2114 deletions
diff --git a/modules/CMakeLists.txt b/modules/CMakeLists.txt index a9a73e775..0ee3806d0 100644 --- a/modules/CMakeLists.txt +++ b/modules/CMakeLists.txt @@ -1,3 +1,5 @@ +add_subdirectory("extra/language") + # Get a list of ALL files and directories within the current directory file(GLOB MODULES_FOLDERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*") remove_item_from_list(MODULES_FOLDERS "CMakeFiles") @@ -75,7 +77,7 @@ foreach(MODULE_FOLDER ${MODULES_FOLDERS}) set(WIN32_NO_LIBS) endif(WIN32) set_target_properties(${SO} PROPERTIES LINKER_LANGUAGE CXX PREFIX "" SUFFIX "" LINK_FLAGS "${TEMP_LDFLAGS} ${WIN32_NO_LIBS}") - add_dependencies(${SO} ${PROGRAM_NAME}) + add_dependencies(${SO} ${PROGRAM_NAME} module_language) # For Windows only, have the module link to the export library of Anope as well as wsock32 and Ws2_32 libraries (most of the modules probably don't need this, but this is to be on the safe side), also set it's version if(WIN32) target_link_libraries(${SO} ${PROGRAM_NAME} wsock32 Ws2_32 ${WIN32_MEMORY} ${TEMP_DEPENDENCIES}) @@ -92,6 +94,7 @@ foreach(MODULE_FOLDER ${MODULES_FOLDERS}) # Get a list of ALL files and directories within this modules directory file(GLOB SUBMODULE_DIRS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "${MODULE_FOLDER}/*") remove_item_from_list(SUBMODULE_DIRS "CMakeFiles") + remove_item_from_list(SUBMODULE_DIRS "extra/language") foreach(SUBDIR ${SUBMODULE_DIRS}) if(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIR}") @@ -169,7 +172,7 @@ foreach(MODULE_FOLDER ${MODULES_FOLDERS}) # Generate the module and set it's linker flags, also set it to depend on the main Anope executable to be built beforehand add_library(${SO} MODULE ${MODULES_SUBDIR_SRCS}) set_target_properties(${SO} PROPERTIES LINKER_LANGUAGE CXX PREFIX "" SUFFIX "" LINK_FLAGS "${SUBDIR_LDFLAGS}") - add_dependencies(${SO} ${PROGRAM_NAME}) + add_dependencies(${SO} ${PROGRAM_NAME} module_language) # For Windows only, have the module link to the export library of Anope as well as wsock32 and Ws2_32 libraries (most of the modules probably don't need this, but this is to be on the safe side), also set it's version if(WIN32) target_link_libraries(${SO} ${PROGRAM_NAME} wsock32 Ws2_32 ${WIN32_MEMORY} ${SUBDIR_EXTRA_DEPENDS}) diff --git a/modules/core/bs_act.cpp b/modules/core/bs_act.cpp index c1710c26b..b29e99fac 100644 --- a/modules/core/bs_act.cpp +++ b/modules/core/bs_act.cpp @@ -28,19 +28,19 @@ class CommandBSAct : public Command if (!check_access(u, ci, CA_SAY)) { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); return MOD_CONT; } if (!ci->bi) { - source.Reply(BOT_NOT_ASSIGNED); + source.Reply(LanguageString::BOT_NOT_ASSIGNED); return MOD_CONT; } if (!ci->c || !ci->c->FindUser(ci->bi)) { - source.Reply(BOT_NOT_ON_CHANNEL, ci->name.c_str()); + source.Reply(LanguageString::BOT_NOT_ON_CHANNEL, ci->name.c_str()); return MOD_CONT; } @@ -59,18 +59,21 @@ class CommandBSAct : public Command void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "ACT", BOT_ACT_SYNTAX); + SyntaxError(source, "ACT", _("ACT \037channel\037 \037text\037")); } bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(BOT_HELP_ACT); + source.Reply(_("Syntax: \002ACT \037channel\037 \037text\037\002\n" + " \n" + "Makes the bot do the equivalent of a \"/me\" command\n" + "on the given channel using the given text.")); return true; } void OnServHelp(CommandSource &source) { - source.Reply(BOT_HELP_CMD_ACT); + source.Reply(_(" ACT Makes the bot do the equivalent of a \"/me\" command")); } }; diff --git a/modules/core/bs_assign.cpp b/modules/core/bs_assign.cpp index 38762259d..4a32c4330 100644 --- a/modules/core/bs_assign.cpp +++ b/modules/core/bs_assign.cpp @@ -29,32 +29,32 @@ class CommandBSAssign : public Command if (readonly) { - source.Reply(BOT_ASSIGN_READONLY); + source.Reply(LanguageString::BOT_ASSIGN_READONLY); return MOD_CONT; } BotInfo *bi = findbot(nick); if (!bi) { - source.Reply(BOT_DOES_NOT_EXIST, nick.c_str()); + source.Reply(LanguageString::BOT_DOES_NOT_EXIST, nick.c_str()); return MOD_CONT; } if (ci->botflags.HasFlag(BS_NOBOT) || (!check_access(u, ci, CA_ASSIGN) && !u->Account()->HasPriv("botserv/administration"))) { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); return MOD_CONT; } if (bi->HasFlag(BI_PRIVATE) && !u->Account()->HasCommand("botserv/assign/private")) { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); return MOD_CONT; } if (ci->bi && nick.equals_ci(ci->bi->nick)) { - source.Reply(BOT_ASSIGN_ALREADY, ci->bi->nick.c_str(), chan.c_str()); + source.Reply(_("Bot \002%s\002 is already assigned to channel \002%s\002."), ci->bi->nick.c_str(), chan.c_str()); return MOD_CONT; } @@ -62,24 +62,28 @@ class CommandBSAssign : public Command Log(override ? LOG_OVERRIDE : LOG_COMMAND, u, this, ci) << "for " << bi->nick; bi->Assign(u, ci); - source.Reply(BOT_ASSIGN_ASSIGNED, bi->nick.c_str(), ci->name.c_str()); + source.Reply(_("Bot \002%s\002 has been assigned to %s."), bi->nick.c_str(), ci->name.c_str()); return MOD_CONT; } bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(BOT_HELP_ASSIGN); + source.Reply(_("Syntax: \002ASSIGN \037chan\037 \037nick\037\002\n" + " \n" + "Assigns a bot pointed out by nick to the channel chan. You\n" + "can then configure the bot for the channel so it fits\n" + "your needs.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "ASSIGN", BOT_ASSIGN_SYNTAX); + SyntaxError(source, "ASSIGN", _("ASSIGN \037chan\037 \037nick\037")); } void OnServHelp(CommandSource &source) { - source.Reply(BOT_HELP_CMD_ASSIGN); + source.Reply(_(" ASSIGN Assigns a bot to a channel")); } }; diff --git a/modules/core/bs_badwords.cpp b/modules/core/bs_badwords.cpp index a9b0474c8..5c6dc3efd 100644 --- a/modules/core/bs_badwords.cpp +++ b/modules/core/bs_badwords.cpp @@ -25,7 +25,7 @@ class BadwordsListCallback : public NumberList ~BadwordsListCallback() { if (!SentHeader) - source.Reply(BOT_BADWORDS_NO_MATCH, source.ci->name.c_str()); + source.Reply(_("No matching entries on %s bad words list."), source.ci->name.c_str()); } void HandleNumber(unsigned Number) @@ -36,7 +36,8 @@ class BadwordsListCallback : public NumberList if (!SentHeader) { SentHeader = true; - source.Reply(BOT_BADWORDS_LIST_HEADER, source.ci->name.c_str()); + source.Reply(_("Bad words list for %s:\n" + " Num Word Type"), source.ci->name.c_str()); } DoList(source, Number - 1, source.ci->GetBadWord(Number - 1)); @@ -44,7 +45,7 @@ class BadwordsListCallback : public NumberList static void DoList(CommandSource &source, unsigned Number, BadWord *bw) { - source.Reply(BOT_BADWORDS_LIST_FORMAT, Number + 1, bw->word.c_str(), bw->type == BW_SINGLE ? "(SINGLE)" : (bw->type == BW_START ? "(START)" : (bw->type == BW_END ? "(END)" : ""))); + source.Reply(_(" %3d %-30s %s"), Number + 1, bw->word.c_str(), bw->type == BW_SINGLE ? "(SINGLE)" : (bw->type == BW_START ? "(START)" : (bw->type == BW_END ? "(END)" : ""))); } }; @@ -64,11 +65,11 @@ class BadwordsDelCallback : public NumberList ~BadwordsDelCallback() { if (!Deleted) - source.Reply(BOT_BADWORDS_NO_MATCH, source.ci->name.c_str()); + source.Reply(_("No matching entries on %s bad words list."), source.ci->name.c_str()); else if (Deleted == 1) - source.Reply(BOT_BADWORDS_DELETED_ONE, source.ci->name.c_str()); + source.Reply(_("Deleted 1 entry from %s bad words list."), source.ci->name.c_str()); else - source.Reply(BOT_BADWORDS_DELETED_SEVERAL, Deleted, source.ci->name.c_str()); + source.Reply(_("Deleted %d entries from %s bad words list."), Deleted, source.ci->name.c_str()); } void HandleNumber(unsigned Number) @@ -92,7 +93,7 @@ class CommandBSBadwords : public Command Log(override ? LOG_OVERRIDE : LOG_COMMAND, source.u, this, ci) << "LIST"; if (!ci->GetBadWordCount()) - source.Reply(BOT_BADWORDS_LIST_EMPTY, ci->name.c_str()); + source.Reply(_("%s bad words list is empty."), ci->name.c_str()); else if (!word.empty() && word.find_first_not_of("1234567890,-") == Anope::string::npos) { BadwordsListCallback list(source, word); @@ -112,14 +113,16 @@ class CommandBSBadwords : public Command if (!SentHeader) { SentHeader = true; - source.Reply(BOT_BADWORDS_LIST_HEADER, ci->name.c_str()); + source.Reply(_("Bad words list for %s:\n" + " Num Word Type"), ci->name.c_str()); + } BadwordsListCallback::DoList(source, i, bw); } if (!SentHeader) - source.Reply(BOT_BADWORDS_NO_MATCH, ci->name.c_str()); + source.Reply(_("No matching entries on %s bad words list."), ci->name.c_str()); } return MOD_CONT; @@ -149,7 +152,7 @@ class CommandBSBadwords : public Command if (ci->GetBadWordCount() >= Config->BSBadWordsMax) { - source.Reply(BOT_BADWORDS_REACHED_LIMIT, Config->BSBadWordsMax); + source.Reply(_("Sorry, you can only have %d bad words entries on a channel."), Config->BSBadWordsMax); return MOD_CONT; } @@ -159,7 +162,7 @@ class CommandBSBadwords : public Command if (!bw->word.empty() && ((Config->BSCaseSensitive && realword.equals_cs(bw->word)) || (!Config->BSCaseSensitive && realword.equals_ci(bw->word)))) { - source.Reply(BOT_BADWORDS_ALREADY_EXISTS, bw->word.c_str(), ci->name.c_str()); + source.Reply(_("\002%s\002 already exists in %s bad words list."), bw->word.c_str(), ci->name.c_str()); return MOD_CONT; } } @@ -168,7 +171,7 @@ class CommandBSBadwords : public Command Log(override ? LOG_OVERRIDE : LOG_COMMAND, source.u, this, ci) << "ADD " << realword; ci->AddBadWord(realword, type); - source.Reply(BOT_BADWORDS_ADDED, realword.c_str(), ci->name.c_str()); + source.Reply(_("\002%s\002 added to %s bad words list."), realword.c_str(), ci->name.c_str()); return MOD_CONT; } @@ -197,7 +200,7 @@ class CommandBSBadwords : public Command if (i == end) { - source.Reply(BOT_BADWORDS_NOT_FOUND, word.c_str(), ci->name.c_str()); + source.Reply(_("\002%s\002 not found on %s bad words list."), word.c_str(), ci->name.c_str()); return MOD_CONT; } @@ -205,7 +208,7 @@ class CommandBSBadwords : public Command Log(override ? LOG_OVERRIDE : LOG_COMMAND, source.u, this, ci) << "DEL " << badword->word; ci->EraseBadWord(i); - source.Reply(BOT_BADWORDS_DELETED, badword->word.c_str(), ci->name.c_str()); + source.Reply(_("\002%s\002 deleted from %s bad words list."), badword->word.c_str(), ci->name.c_str()); } return MOD_CONT; @@ -218,7 +221,7 @@ class CommandBSBadwords : public Command Log(override ? LOG_OVERRIDE : LOG_COMMAND, source.u, this, ci) << "CLEAR"; ci->ClearBadWords(); - source.Reply(BOT_BADWORDS_CLEAR); + source.Reply(_("Bad words list is now empty.")); return MOD_CONT; } public: @@ -242,13 +245,13 @@ class CommandBSBadwords : public Command if (!check_access(u, ci, CA_BADWORDS) && (!need_args || !u->Account()->HasPriv("botserv/administration"))) { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); return MOD_CONT; } if (readonly) { - source.Reply(BOT_BADWORDS_DISABLED); + source.Reply(_("Sorry, channel bad words list modification is temporarily disabled.")); return MOD_CONT; } @@ -268,18 +271,50 @@ class CommandBSBadwords : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(BOT_HELP_BADWORDS); + source.Reply(_("Syntax: \002BADWORDS \037channel\037 ADD \037word\037 [\037SINGLE\037 | \037START\037 | \037END\037]\002\n" + " \002BADWORDS \037channel\037 DEL {\037word\037 | \037entry-num\037 | \037list\037}\002\n" + " \002BADWORDS \037channel\037 LIST [\037mask\037 | \037list\037]\002\n" + " \002BADWORDS \037channel\037 CLEAR\002\n" + " \n" + "Maintains the \002bad words list\002 for a channel. The bad\n" + "words list determines which words are to be kicked\n" + "when the bad words kicker is enabled. For more information,\n" + "type \002%R%S HELP KICK BADWORDS\002.\n" + " \n" + "The \002BADWORDS ADD\002 command adds the given word to the\n" + "badword list. If SINGLE is specified, a kick will be\n" + "done only if a user says the entire word. If START is \n" + "specified, a kick will be done if a user says a word\n" + "that starts with \037word\037. If END is specified, a kick\n" + "will be done if a user says a word that ends with\n" + "\037word\037. If you don't specify anything, a kick will\n" + "be issued every time \037word\037 is said by a user.\n" + " \n" + "The \002BADWORDS DEL\002 command removes the given word from the\n" + "bad words list. If a list of entry numbers is given, those\n" + "entries are deleted. (See the example for LIST below.)\n" + " \n" + "The \002BADWORDS LIST\002 command displays the bad words list. If\n" + "a wildcard mask is given, only those entries matching the\n" + "mask are displayed. If a list of entry numbers is given,\n" + "only those entries are shown; for example:\n" + " \002BADWORDS #channel LIST 2-5,7-9\002\n" + " Lists bad words entries numbered 2 through 5 and\n" + " 7 through 9.\n" + " \n" + "The \002BADWORDS CLEAR\002 command clears all entries of the\n" + "bad words list.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "BADWORDS", BOT_BADWORDS_SYNTAX); + SyntaxError(source, "BADWORDS", _("BADWORDS \037channel\037 {ADD|DEL|LIST|CLEAR} [\037word\037 | \037entry-list\037] [SINGLE|START|END]")); } void OnServHelp(CommandSource &source) { - source.Reply(BOT_HELP_CMD_BADWORDS); + source.Reply(_(" BADWORDS Maintains bad words list")); } }; diff --git a/modules/core/bs_bot.cpp b/modules/core/bs_bot.cpp index 47db2c4ed..a2fa32f0b 100644 --- a/modules/core/bs_bot.cpp +++ b/modules/core/bs_bot.cpp @@ -26,60 +26,60 @@ class CommandBSBot : public Command if (findbot(nick)) { - source.Reply(BOT_BOT_ALREADY_EXISTS, nick.c_str()); + source.Reply(_("Bot \002%s\002 already exists."), nick.c_str()); return MOD_CONT; } if (nick.length() > Config->NickLen) { - source.Reply(BOT_BAD_NICK); + source.Reply(_("Bot Nicks may only contain valid nick characters.")); return MOD_CONT; } if (user.length() > Config->UserLen) { - source.Reply(BOT_LONG_IDENT, Config->UserLen); + source.Reply(_("Bot Idents may only contain %d characters."), Config->UserLen); return MOD_CONT; } if (host.length() > Config->HostLen) { - source.Reply(BOT_LONG_HOST, Config->HostLen); + source.Reply(_("Bot Hosts may only contain %d characters."), Config->HostLen); return MOD_CONT; } /* Check the nick is valid re RFC 2812 */ if (isdigit(nick[0]) || nick[0] == '-') { - source.Reply(BOT_BAD_NICK); + source.Reply(_("Bot Nicks may only contain valid nick characters.")); return MOD_CONT; } for (unsigned i = 0, end = nick.length(); i < end && i < Config->NickLen; ++i) if (!isvalidnick(nick[i])) { - source.Reply(BOT_BAD_NICK); + source.Reply(_("Bot Nicks may only contain valid nick characters.")); return MOD_CONT; } /* check for hardcored ircd forbidden nicks */ if (!ircdproto->IsNickValid(nick)) { - source.Reply(BOT_BAD_NICK); + source.Reply(_("Bot Nicks may only contain valid nick characters.")); return MOD_CONT; } /* Check the host is valid re RFC 2812 */ if (!isValidHost(host, 3)) { - source.Reply(BOT_BAD_HOST); + source.Reply(_("Bot Hosts may only contain valid host characters.")); return MOD_CONT; } for (unsigned i = 0, end = user.length(); i < end && i < Config->UserLen; ++i) if (!isalnum(user[i])) { - source.Reply(BOT_BAD_IDENT, Config->UserLen); + source.Reply(_("Bot Idents may only contain valid characters."), Config->UserLen); return MOD_CONT; } @@ -89,20 +89,20 @@ class CommandBSBot : public Command */ if (findnick(nick)) { - source.Reply(NICK_ALREADY_REGISTERED, nick.c_str()); + source.Reply(LanguageString::NICK_ALREADY_REGISTERED, nick.c_str()); return MOD_CONT; } if (!(bi = new BotInfo(nick, user, host, real))) { // XXX this cant happen? - source.Reply(BOT_BOT_CREATION_FAILED); + source.Reply(_("Sorry, bot creation failed.")); return MOD_CONT; } Log(LOG_ADMIN, source.u, this) << "ADD " << bi->GetMask() << " " << bi->realname; - source.Reply(BOT_BOT_ADDED, bi->nick.c_str(), bi->GetIdent().c_str(), bi->host.c_str(), bi->realname.c_str()); + source.Reply(_("%s!%s@%s (%s) added to the bot list."), bi->nick.c_str(), bi->GetIdent().c_str(), bi->host.c_str(), bi->realname.c_str()); FOREACH_MOD(I_OnBotCreate, OnBotCreate(bi)); return MOD_CONT; @@ -125,37 +125,37 @@ class CommandBSBot : public Command if (!(bi = findbot(oldnick))) { - source.Reply(BOT_DOES_NOT_EXIST, oldnick.c_str()); + source.Reply(LanguageString::BOT_DOES_NOT_EXIST, oldnick.c_str()); return MOD_CONT; } if (!oldnick.equals_ci(nick) && nickIsServices(oldnick, false)) { - source.Reply(BOT_DOES_NOT_EXIST, oldnick.c_str()); + source.Reply(LanguageString::BOT_DOES_NOT_EXIST, oldnick.c_str()); return MOD_CONT; } if (nick.length() > Config->NickLen) { - source.Reply(BOT_BAD_NICK); + source.Reply(_("Bot Nicks may only contain valid nick characters.")); return MOD_CONT; } if (!user.empty() && user.length() > Config->UserLen) { - source.Reply(BOT_LONG_IDENT, Config->UserLen); + source.Reply(_("Bot Idents may only contain %d characters."), Config->UserLen); return MOD_CONT; } if (!host.empty() && host.length() > Config->HostLen) { - source.Reply(BOT_LONG_HOST, Config->HostLen); + source.Reply(_("Bot Hosts may only contain %d characters."), Config->HostLen); return MOD_CONT; } if (!oldnick.equals_ci(nick) && nickIsServices(nick, false)) { - source.Reply(BOT_DOES_NOT_EXIST, oldnick.c_str()); + source.Reply(LanguageString::BOT_DOES_NOT_EXIST, oldnick.c_str()); return MOD_CONT; } @@ -166,34 +166,34 @@ class CommandBSBot : public Command */ if (nick.equals_cs(bi->nick) && (!user.empty() ? user.equals_cs(bi->GetIdent()) : 1) && (!host.empty() ? host.equals_cs(bi->host) : 1) && (!real.empty() ? real.equals_cs(bi->realname) : 1)) { - source.Reply(BOT_BOT_ANY_CHANGES); + source.Reply(_("Old info is equal to the new one.")); return MOD_CONT; } /* Check the nick is valid re RFC 2812 */ if (isdigit(nick[0]) || nick[0] == '-') { - source.Reply(BOT_BAD_NICK); + source.Reply(_("Bot Nicks may only contain valid nick characters.")); return MOD_CONT; } for (unsigned i = 0, end = nick.length(); i < end && i < Config->NickLen; ++i) if (!isvalidnick(nick[i])) { - source.Reply(BOT_BAD_NICK); + source.Reply(_("Bot Nicks may only contain valid nick characters.")); return MOD_CONT; } /* check for hardcored ircd forbidden nicks */ if (!ircdproto->IsNickValid(nick)) { - source.Reply(BOT_BAD_NICK); + source.Reply(_("Bot Nicks may only contain valid nick characters.")); return MOD_CONT; } if (!host.empty() && !isValidHost(host, 3)) { - source.Reply(BOT_BAD_HOST); + source.Reply(_("Bot Hosts may only contain valid host characters.")); return MOD_CONT; } @@ -201,13 +201,13 @@ class CommandBSBot : public Command for (unsigned i = 0, end = user.length(); i < end && i < Config->UserLen; ++i) if (!isalnum(user[i])) { - source.Reply(BOT_BAD_IDENT, Config->UserLen); + source.Reply(_("Bot Idents may only contain valid characters."), Config->UserLen); return MOD_CONT; } if (!nick.equals_ci(bi->nick) && findbot(nick)) { - source.Reply(BOT_BOT_ALREADY_EXISTS, nick.c_str()); + source.Reply(_("Bot \002%s\002 already exists."), nick.c_str()); return MOD_CONT; } @@ -219,7 +219,7 @@ class CommandBSBot : public Command */ if (findnick(nick)) { - source.Reply(NICK_ALREADY_REGISTERED, nick.c_str()); + source.Reply(LanguageString::NICK_ALREADY_REGISTERED, nick.c_str()); return MOD_CONT; } @@ -262,7 +262,7 @@ class CommandBSBot : public Command bi->RejoinAll(); } - source.Reply(BOT_BOT_CHANGED, oldnick.c_str(), bi->nick.c_str(), bi->GetIdent().c_str(), bi->host.c_str(), bi->realname.c_str()); + source.Reply(_("Bot \002%s\002 has been changed to %s!%s@%s (%s)"), oldnick.c_str(), bi->nick.c_str(), bi->GetIdent().c_str(), bi->host.c_str(), bi->realname.c_str()); Log(LOG_ADMIN, source.u, this) << "CHANGE " << oldnick << " to " << bi->GetMask() << " " << bi->realname; FOREACH_MOD(I_OnBotChange, OnBotChange(bi)); @@ -282,13 +282,13 @@ class CommandBSBot : public Command if (!(bi = findbot(nick))) { - source.Reply(BOT_DOES_NOT_EXIST, nick.c_str()); + source.Reply(LanguageString::BOT_DOES_NOT_EXIST, nick.c_str()); return MOD_CONT; } if (nickIsServices(nick, false)) { - source.Reply(BOT_DOES_NOT_EXIST, nick.c_str()); + source.Reply(LanguageString::BOT_DOES_NOT_EXIST, nick.c_str()); return MOD_CONT; } @@ -296,7 +296,7 @@ class CommandBSBot : public Command Log(LOG_ADMIN, source.u, this) << "DEL " << bi->nick; - source.Reply(BOT_BOT_DELETED, nick.c_str()); + source.Reply(_("Bot \002%s\002 has been deleted."), nick.c_str()); delete bi; return MOD_CONT; } @@ -313,7 +313,7 @@ class CommandBSBot : public Command if (readonly) { - source.Reply(BOT_BOT_READONLY); + source.Reply(_("Sorry, bot modification is temporarily disabled.")); return MOD_CONT; } @@ -322,7 +322,7 @@ class CommandBSBot : public Command // ADD nick user host real - 5 if (!u->Account()->HasCommand("botserv/bot/add")) { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); return MOD_CONT; } @@ -345,7 +345,7 @@ class CommandBSBot : public Command // but only oldn and newn are required if (!u->Account()->HasCommand("botserv/bot/change")) { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); return MOD_CONT; } @@ -362,7 +362,7 @@ class CommandBSBot : public Command // DEL nick if (!u->Account()->HasCommand("botserv/bot/del")) { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); return MOD_CONT; } @@ -382,18 +382,38 @@ class CommandBSBot : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(BOT_SERVADMIN_HELP_BOT); + source.Reply(_("Syntax: \002BOT ADD \037nick\037 \037user\037 \037host\037 \037real\037\002\n" + " \002BOT CHANGE \037oldnick\037 \037newnick\037 [\037user\037 [\037host\037 [\037real\037]]]\002\n" + " \002BOT DEL \037nick\037\002\n" + " \n" + "Allows Services Operators to create, modify, and delete\n" + "bots that users will be able to use on their own\n" + "channels.\n" + " \n" + "\002BOT ADD\002 adds a bot with the given nickname, username,\n" + "hostname and realname. Since no integrity checks are done \n" + "for these settings, be really careful.\n" + "\002BOT CHANGE\002 allows to change nickname, username, hostname\n" + "or realname of a bot without actually delete it (and all\n" + "the data associated with it).\n" + "\002BOT DEL\002 removes the given bot from the bot list. \n" + " \n" + "\002Note\002: you cannot create a bot that has a nick that is\n" + "currently registered. If an unregistered user is currently\n" + "using the nick, they will be killed.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "BOT", BOT_BOT_SYNTAX); + SyntaxError(source, "BOT", _("BOT ADD \037nick\037 \037user\037 \037host\037 \037real\037\n" + "\002BOT CHANGE \037oldnick\037 \037newnick\037 [\037user\037 [\037host\037 [\037real\037]]]\002\n" + "\002BOT DEL \037nick\037\002")); } void OnServHelp(CommandSource &source) { - source.Reply(BOT_HELP_CMD_BOT); + source.Reply(_(" BOT Maintains network bot list")); } }; diff --git a/modules/core/bs_botlist.cpp b/modules/core/bs_botlist.cpp index 37901a4a0..5166e4365 100644 --- a/modules/core/bs_botlist.cpp +++ b/modules/core/bs_botlist.cpp @@ -25,12 +25,6 @@ class CommandBSBotList : public Command User *u = source.u; unsigned count = 0; - if (BotListByNick.empty()) - { - source.Reply(BOT_BOTLIST_EMPTY); - return MOD_CONT; - } - for (patricia_tree<BotInfo *, ci::ci_char_traits>::iterator it(BotListByNick); it.next();) { BotInfo *bi = *it; @@ -38,7 +32,7 @@ class CommandBSBotList : public Command if (!bi->HasFlag(BI_PRIVATE)) { if (!count) - source.Reply(BOT_BOTLIST_HEADER); + source.Reply(_("Bot list:")); ++count; source.Reply(" %-15s (%s@%s)", bi->nick.c_str(), bi->GetIdent().c_str(), bi->host.c_str()); } @@ -46,7 +40,7 @@ class CommandBSBotList : public Command if (u->Account()->HasCommand("botserv/botlist") && count < BotListByNick.size()) { - source.Reply(BOT_BOTLIST_PRIVATE_HEADER); + source.Reply(_("Bots reserved to IRC operators:")); for (patricia_tree<BotInfo *, ci::ci_char_traits>::iterator it(BotListByNick); it.next();) { @@ -61,22 +55,25 @@ class CommandBSBotList : public Command } if (!count) - source.Reply(BOT_BOTLIST_EMPTY); + source.Reply(_("There are no bots available at this time.\n" + "Ask a Services Operator to create one!")); else - source.Reply(BOT_BOTLIST_FOOTER, count); + source.Reply(_("%d bots available."), count); return MOD_CONT; } bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(BOT_HELP_BOTLIST); + source.Reply(_("Syntax: \002BOTLIST\002\n" + " \n" + "Lists all available bots on this network.")); return true; } void OnServHelp(CommandSource &source) { - source.Reply(BOT_HELP_CMD_BOTLIST); + source.Reply(_(" BOTLIST Lists available bots")); } }; diff --git a/modules/core/bs_help.cpp b/modules/core/bs_help.cpp index 9c2998342..ff669e82a 100644 --- a/modules/core/bs_help.cpp +++ b/modules/core/bs_help.cpp @@ -32,11 +32,20 @@ class CommandBSHelp : public Command { // Abuse syntax error to display general list help. User *u = source.u; - source.Reply(BOT_HELP); + source.Reply(_("\002%S\002 allows you to have a bot on your own channel.\n" + "It has been created for users that can't host or\n" + "configure a bot, or for use on networks that don't\n" + "allow user bots. Available commands are listed \n" + "below; to use them, type \002%R%S \037command\037\002. For \n" + "more information on a specific command, type \002%R\n" + "%S HELP \037command\037\002.")); for (CommandMap::const_iterator it = BotServ->Commands.begin(), it_end = BotServ->Commands.end(); it != it_end; ++it) if (!Config->HidePrivilegedCommands || it->second->permission.empty() || (u->Account() && u->Account()->HasCommand(it->second->permission))) it->second->OnServHelp(source); - source.Reply(BOT_HELP_FOOTER, Config->BSMinUsers, Config->s_ChanServ.c_str(), Config->BSFantasyCharacter[0]); + source.Reply(_("Bot will join a channel whenever there is at least\n" + "\002%d\002 user(s) on it. Additionally, all %s commands\n" + "can be used if fantasy is enabled by prefixing the command\n" + "name with a %c."), Config->BSMinUsers, Config->s_ChanServ.c_str(), Config->BSFantasyCharacter[0]); } }; diff --git a/modules/core/bs_info.cpp b/modules/core/bs_info.cpp index f9dc499ed..123083f41 100644 --- a/modules/core/bs_info.cpp +++ b/modules/core/bs_info.cpp @@ -57,12 +57,12 @@ class CommandBSInfo : public Command ChannelInfo *ci; if (bi) { - source.Reply(BOT_INFO_BOT_HEADER, bi->nick.c_str()); - source.Reply(BOT_INFO_BOT_MASK, bi->GetIdent().c_str(), bi->host.c_str()); - source.Reply(BOT_INFO_BOT_REALNAME, bi->realname.c_str()); - source.Reply(BOT_INFO_BOT_CREATED, do_strftime(bi->created).c_str()); - source.Reply(BOT_INFO_BOT_OPTIONS, GetString(u, (bi->HasFlag(BI_PRIVATE) ? NICK_INFO_OPT_PRIVATE : NICK_INFO_OPT_NONE)).c_str()); - source.Reply(BOT_INFO_BOT_USAGE, bi->chancount); + source.Reply(_("Information for bot \002%s\002:"), bi->nick.c_str()); + source.Reply(_(" Mask : %s@%s"), bi->GetIdent().c_str(), bi->host.c_str()); + source.Reply(_(" Real name : %s"), bi->realname.c_str()); + source.Reply(_(" Created : %s"), do_strftime(bi->created).c_str()); + source.Reply(_(" Options : %s"), bi->HasFlag(BI_PRIVATE) ? _("Private") : _("None")); + source.Reply(_(" Used on : %d channel(s)"), bi->chancount); if (u->Account()->HasPriv("botserv/administration")) this->send_bot_channels(source, bi); @@ -71,167 +71,173 @@ class CommandBSInfo : public Command { if (!check_access(u, ci, CA_FOUNDER) && !u->Account()->HasPriv("botserv/administration")) { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); return MOD_CONT; } - source.Reply(CHAN_INFO_HEADER, ci->name.c_str()); + source.Reply(LanguageString::CHAN_INFO_HEADER, ci->name.c_str()); if (ci->bi) - source.Reply(BOT_INFO_CHAN_BOT, ci->bi->nick.c_str()); + source.Reply(_(" Bot nick : %s"), ci->bi->nick.c_str()); else - source.Reply(BOT_INFO_CHAN_BOT_NONE); + source.Reply(_(" Bot nick : not assigned yet.")); if (ci->botflags.HasFlag(BS_KICK_BADWORDS)) { if (ci->ttb[TTB_BADWORDS]) - source.Reply(BOT_INFO_CHAN_KICK_BADWORDS_BAN, GetString(u, BOT_INFO_ACTIVE).c_str(), ci->ttb[TTB_BADWORDS]); + source.Reply(_(" Bad words kicker : %s (%d kick(s) to ban)"), GetString(u->Account(), LanguageString::ENABLED).c_str(), ci->ttb[TTB_BADWORDS]); else - source.Reply(BOT_INFO_CHAN_KICK_BADWORDS, GetString(u, BOT_INFO_ACTIVE).c_str()); + source.Reply(_(" Bad words kicker : %s"), GetString(u->Account(), LanguageString::ENABLED).c_str()); } else - source.Reply(BOT_INFO_CHAN_KICK_BADWORDS, GetString(u, BOT_INFO_INACTIVE).c_str()); + source.Reply(_(" Bad words kicker : %s"), GetString(u->Account(), LanguageString::DISABLED).c_str()); if (ci->botflags.HasFlag(BS_KICK_BOLDS)) { if (ci->ttb[TTB_BOLDS]) - source.Reply(BOT_INFO_CHAN_KICK_BOLDS_BAN, GetString(u, BOT_INFO_ACTIVE).c_str(), ci->ttb[TTB_BOLDS]); + source.Reply(_(" Bolds kicker : %s (%d kick(s) to ban)"), GetString(u->Account(), LanguageString::ENABLED).c_str(), ci->ttb[TTB_BOLDS]); else - source.Reply(BOT_INFO_CHAN_KICK_BOLDS, GetString(u, BOT_INFO_ACTIVE).c_str()); + source.Reply(_(" Bolds kicker : %s"), GetString(u->Account(), LanguageString::ENABLED).c_str()); } else - source.Reply(BOT_INFO_CHAN_KICK_BOLDS, GetString(u, BOT_INFO_INACTIVE).c_str()); + source.Reply(_(" Bolds kicker : %s"), GetString(u->Account(), LanguageString::DISABLED).c_str()); if (ci->botflags.HasFlag(BS_KICK_CAPS)) { if (ci->ttb[TTB_CAPS]) - source.Reply(BOT_INFO_CHAN_KICK_CAPS_BAN, GetString(u, BOT_INFO_ACTIVE).c_str(), ci->ttb[TTB_CAPS], ci->capsmin, ci->capspercent); + source.Reply(_(" Caps kicker : %s (%d kick(s) to ban; minimum %d/%d%%)"), GetString(u->Account(), LanguageString::ENABLED).c_str(), ci->ttb[TTB_CAPS], ci->capsmin, ci->capspercent); else - source.Reply(BOT_INFO_CHAN_KICK_CAPS_ON, GetString(u, BOT_INFO_ACTIVE).c_str(), ci->capsmin, ci->capspercent); + source.Reply(_(" Caps kicker : %s (minimum %d/%d%%)"), GetString(u->Account(), LanguageString::ENABLED).c_str(), ci->capsmin, ci->capspercent); } else - source.Reply(BOT_INFO_CHAN_KICK_CAPS_OFF, GetString(u, BOT_INFO_INACTIVE).c_str()); + source.Reply(_(" Caps kicker : %s"), GetString(u->Account(), LanguageString::DISABLED).c_str()); if (ci->botflags.HasFlag(BS_KICK_COLORS)) { if (ci->ttb[TTB_COLORS]) - source.Reply(BOT_INFO_CHAN_KICK_COLORS_BAN, GetString(u, BOT_INFO_ACTIVE).c_str(), ci->ttb[TTB_COLORS]); + source.Reply(_(" Colors kicker : %s (%d kick(s) to ban)"), GetString(u->Account(), LanguageString::ENABLED).c_str(), ci->ttb[TTB_COLORS]); else - source.Reply(BOT_INFO_CHAN_KICK_COLORS, GetString(u, BOT_INFO_ACTIVE).c_str()); + source.Reply(_(" Colors kicker : %s"), GetString(u->Account(), LanguageString::ENABLED).c_str()); } else - source.Reply(BOT_INFO_CHAN_KICK_COLORS, GetString(u, BOT_INFO_INACTIVE).c_str()); + source.Reply(_(" Colors kicker : %s"), GetString(u->Account(), LanguageString::DISABLED).c_str()); if (ci->botflags.HasFlag(BS_KICK_FLOOD)) { if (ci->ttb[TTB_FLOOD]) - source.Reply(BOT_INFO_CHAN_KICK_FLOOD_BAN, GetString(u, BOT_INFO_ACTIVE).c_str(), ci->ttb[TTB_FLOOD], ci->floodlines, ci->floodsecs); + source.Reply(_(" Flood kicker : %s (%d kick(s) to ban; %d lines in %ds)"), GetString(u->Account(), LanguageString::ENABLED).c_str(), ci->ttb[TTB_FLOOD], ci->floodlines, ci->floodsecs); else - source.Reply(BOT_INFO_CHAN_KICK_FLOOD_ON, GetString(u, BOT_INFO_ACTIVE).c_str(), ci->floodlines, ci->floodsecs); + source.Reply(_(" Flood kicker : %s (%d lines in %ds)"), GetString(u->Account(), LanguageString::ENABLED).c_str(), ci->floodlines, ci->floodsecs); } else - source.Reply(BOT_INFO_CHAN_KICK_FLOOD_OFF, GetString(u, BOT_INFO_INACTIVE).c_str()); + source.Reply(_(" Flood kicker : %s"), GetString(u->Account(), LanguageString::DISABLED).c_str()); if (ci->botflags.HasFlag(BS_KICK_REPEAT)) { if (ci->ttb[TTB_REPEAT]) - source.Reply(BOT_INFO_CHAN_KICK_REPEAT_BAN, GetString(u, BOT_INFO_ACTIVE).c_str(), ci->ttb[TTB_REPEAT], ci->repeattimes); + source.Reply(_(" Repeat kicker : %s (%d kick(s) to ban; %d times)"), GetString(u->Account(), LanguageString::ENABLED).c_str(), ci->ttb[TTB_REPEAT], ci->repeattimes); else - source.Reply(BOT_INFO_CHAN_KICK_REPEAT_ON, GetString(u, BOT_INFO_ACTIVE).c_str(), ci->repeattimes); + source.Reply(_(" Repeat kicker : %s (%d times)"), GetString(u->Account(), LanguageString::ENABLED).c_str(), ci->repeattimes); } else - source.Reply(BOT_INFO_CHAN_KICK_REPEAT_OFF, GetString(u, BOT_INFO_INACTIVE).c_str()); + source.Reply(_(" Repeat kicker : %s"), GetString(u->Account(), LanguageString::DISABLED).c_str()); if (ci->botflags.HasFlag(BS_KICK_REVERSES)) { if (ci->ttb[TTB_REVERSES]) - source.Reply(BOT_INFO_CHAN_KICK_REVERSES_BAN, GetString(u, BOT_INFO_ACTIVE).c_str(), ci->ttb[TTB_REVERSES]); + source.Reply(_(" Reverses kicker : %s (%d kick(s) to ban)"), GetString(u->Account(), LanguageString::ENABLED).c_str(), ci->ttb[TTB_REVERSES]); else - source.Reply(BOT_INFO_CHAN_KICK_REVERSES, GetString(u, BOT_INFO_ACTIVE).c_str()); + source.Reply(_(" Reverses kicker : %s"), GetString(u->Account(), LanguageString::ENABLED).c_str()); } else - source.Reply(BOT_INFO_CHAN_KICK_REVERSES, GetString(u, BOT_INFO_INACTIVE).c_str()); + source.Reply(_(" Reverses kicker : %s"), GetString(u->Account(), LanguageString::DISABLED).c_str()); if (ci->botflags.HasFlag(BS_KICK_UNDERLINES)) { if (ci->ttb[TTB_UNDERLINES]) - source.Reply(BOT_INFO_CHAN_KICK_UNDERLINES_BAN, GetString(u, BOT_INFO_ACTIVE).c_str(), ci->ttb[TTB_UNDERLINES]); + source.Reply(_(" Underlines kicker : %s (%d kick(s) to ban)"), GetString(u->Account(), LanguageString::ENABLED).c_str(), ci->ttb[TTB_UNDERLINES]); else - source.Reply(BOT_INFO_CHAN_KICK_UNDERLINES, GetString(u, BOT_INFO_ACTIVE).c_str()); + source.Reply(_(" Underlines kicker : %s"), GetString(u->Account(), LanguageString::ENABLED).c_str()); } else - source.Reply(BOT_INFO_CHAN_KICK_UNDERLINES, GetString(u, BOT_INFO_INACTIVE).c_str()); + source.Reply(_(" Underlines kicker : %s"), GetString(u->Account(), LanguageString::DISABLED).c_str()); if (ci->botflags.HasFlag(BS_KICK_ITALICS)) { if (ci->ttb[TTB_ITALICS]) - source.Reply(BOT_INFO_CHAN_KICK_ITALICS_BAN, GetString(u, BOT_INFO_ACTIVE).c_str(), ci->ttb[TTB_ITALICS]); + source.Reply(_(" Italics kicker : %s (%d kick(s) to ban)"), GetString(u->Account(), LanguageString::ENABLED).c_str(), ci->ttb[TTB_ITALICS]); else - source.Reply(BOT_INFO_CHAN_KICK_ITALICS, GetString(u, BOT_INFO_ACTIVE).c_str()); + source.Reply(_(" Italics kicker : %s"), GetString(u->Account(), LanguageString::ENABLED).c_str()); } else - source.Reply(BOT_INFO_CHAN_KICK_ITALICS, GetString(u, BOT_INFO_INACTIVE).c_str()); + source.Reply(_(" Italics kicker : %s"), GetString(u->Account(), LanguageString::DISABLED).c_str()); if (ci->botflags.HasFlag(BS_KICK_AMSGS)) { if (ci->ttb[TTB_AMSGS]) - source.Reply(BOT_INFO_CHAN_KICK_AMSGS_BAN, GetString(u, BOT_INFO_ACTIVE).c_str(), ci->ttb[TTB_AMSGS]); + source.Reply(_(" AMSG kicker : %s (%d kick(s) to ban)"), GetString(u->Account(), LanguageString::ENABLED).c_str(), ci->ttb[TTB_AMSGS]); else - source.Reply(BOT_INFO_CHAN_KICK_AMSGS, GetString(u, BOT_INFO_ACTIVE).c_str()); + source.Reply(_(" AMSG kicker : %s"), GetString(u->Account(), LanguageString::ENABLED).c_str()); } else - source.Reply(BOT_INFO_CHAN_KICK_AMSGS, GetString(u, BOT_INFO_INACTIVE).c_str()); + source.Reply(_(" AMSG kicker : %s"), GetString(u->Account(), LanguageString::DISABLED).c_str()); if (ci->botflags.HasFlag(BS_MSG_PRIVMSG)) - source.Reply(BOT_INFO_CHAN_MSG, "PRIVMSG"); + source.Reply(_(" Fantasy reply : %s"), "PRIVMSG"); else if (ci->botflags.HasFlag(BS_MSG_NOTICE)) - source.Reply(BOT_INFO_CHAN_MSG, "NOTICE"); + source.Reply(_(" Fantasy reply : %s"), "NOTICE"); else if (ci->botflags.HasFlag(BS_MSG_NOTICEOPS)) - source.Reply(BOT_INFO_CHAN_MSG, "NOTICEOPS"); + source.Reply(_(" Fantasy reply : %s"), "NOTICEOPS"); end = buf; *end = 0; if (ci->botflags.HasFlag(BS_DONTKICKOPS)) { - end += snprintf(end, sizeof(buf) - (end - buf), "%s", GetString(u, BOT_INFO_OPT_DONTKICKOPS).c_str()); + end += snprintf(end, sizeof(buf) - (end - buf), "%s", GetString(u->Account(), _("Ops protection")).c_str()); need_comma = true; } if (ci->botflags.HasFlag(BS_DONTKICKVOICES)) { - end += snprintf(end, sizeof(buf) - (end - buf), "%s%s", need_comma ? ", " : "", GetString(u, BOT_INFO_OPT_DONTKICKVOICES).c_str()); + end += snprintf(end, sizeof(buf) - (end - buf), "%s%s", need_comma ? ", " : "", GetString(u->Account(), _("Voices protection")).c_str()); need_comma = true; } if (ci->botflags.HasFlag(BS_FANTASY)) { - end += snprintf(end, sizeof(buf) - (end - buf), "%s%s", need_comma ? ", " : "", GetString(u, BOT_INFO_OPT_FANTASY).c_str()); + end += snprintf(end, sizeof(buf) - (end - buf), "%s%s", need_comma ? ", " : "", GetString(u->Account(), _("Fantasy")).c_str()); need_comma = true; } if (ci->botflags.HasFlag(BS_GREET)) { - end += snprintf(end, sizeof(buf) - (end - buf), "%s%s", need_comma ? ", " : "", GetString(u, BOT_INFO_OPT_GREET).c_str()); + end += snprintf(end, sizeof(buf) - (end - buf), "%s%s", need_comma ? ", " : "", GetString(u->Account(), _("Greet")).c_str()); need_comma = true; } if (ci->botflags.HasFlag(BS_NOBOT)) { - end += snprintf(end, sizeof(buf) - (end - buf), "%s%s", need_comma ? ", " : "", GetString(u, BOT_INFO_OPT_NOBOT).c_str()); + end += snprintf(end, sizeof(buf) - (end - buf), "%s%s", need_comma ? ", " : "", GetString(u->Account(), _("No bot")).c_str()); need_comma = true; } if (ci->botflags.HasFlag(BS_SYMBIOSIS)) { - end += snprintf(end, sizeof(buf) - (end - buf), "%s%s", need_comma ? ", " : "", GetString(u, BOT_INFO_OPT_SYMBIOSIS).c_str()); + end += snprintf(end, sizeof(buf) - (end - buf), "%s%s", need_comma ? ", " : "", GetString(u->Account(), _("Symbiosis")).c_str()); need_comma = true; } - source.Reply(BOT_INFO_CHAN_OPTIONS, *buf ? buf : GetString(u, BOT_INFO_OPT_NONE).c_str()); + source.Reply(_(" Options : %s"), *buf ? buf : GetString(u->Account(), _("None")).c_str()); } else - source.Reply(BOT_INFO_NOT_FOUND, query.c_str()); + source.Reply(_("\002%s\002 is not a valid bot or registered channel."), query.c_str()); return MOD_CONT; } bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(BOT_HELP_INFO); + source.Reply(_("Syntax: \002INFO {\037chan\037 | \037nick\037}\002\n" + " \n" + "Allows you to see %S information about a channel or a bot.\n" + "If the parameter is a channel, then you'll get information\n" + "such as enabled kickers. If the parameter is a nick,\n" + "you'll get information about a bot, such as creation\n" + "time or number of channels it is on.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "INFO", BOT_INFO_SYNTAX); + SyntaxError(source, "INFO", _("INFO {\037chan\037 | \037nick\037}")); } void OnServHelp(CommandSource &source) { - source.Reply(BOT_HELP_CMD_INFO); + source.Reply(_(" INFO Allows you to see BotServ information about a channel or a bot")); } }; diff --git a/modules/core/bs_kick.cpp b/modules/core/bs_kick.cpp index eba5de508..67bd2ca05 100644 --- a/modules/core/bs_kick.cpp +++ b/modules/core/bs_kick.cpp @@ -32,15 +32,15 @@ class CommandBSKick : public Command ChannelInfo *ci = source.ci; if (readonly) - source.Reply(BOT_KICK_DISABLED); + source.Reply(_("Sorry, kicker configuration is temporarily disabled.")); else if (chan.empty() || option.empty() || value.empty()) - SyntaxError(source, "KICK", BOT_KICK_SYNTAX); + SyntaxError(source, "KICK", _("KICK \037channel\037 \037option\037 {\037ON|\037} [\037settings\037]")); else if (!value.equals_ci("ON") && !value.equals_ci("OFF")) - SyntaxError(source, "KICK", BOT_KICK_SYNTAX); + SyntaxError(source, "KICK", _("KICK \037channel\037 \037option\037 {\037ON|\037} [\037settings\037]")); else if (!check_access(u, ci, CA_SET) && !u->Account()->HasPriv("botserv/administration")) - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); else if (!ci->bi) - source.Reply(BOT_NOT_ASSIGNED); + source.Reply(LanguageString::BOT_NOT_ASSIGNED); else { bool override = !check_access(u, ci, CA_SET); @@ -61,7 +61,7 @@ class CommandBSKick : public Command Log(LOG_DEBUG) << "remainder of ttb " << error << " ttb " << ci->ttb[TTB_BADWORDS]; /* reset the value back to 0 - TSL */ ci->ttb[TTB_BADWORDS] = 0; - source.Reply(BOT_KICK_BAD_TTB, ttb.c_str()); + source.Reply(_("\002%s\002 cannot be taken as times to ban."), ttb.c_str()); return MOD_CONT; } } @@ -69,14 +69,17 @@ class CommandBSKick : public Command ci->ttb[TTB_BADWORDS] = 0; ci->botflags.SetFlag(BS_KICK_BADWORDS); if (ci->ttb[TTB_BADWORDS]) - source.Reply(BOT_KICK_BADWORDS_ON_BAN, ci->ttb[TTB_BADWORDS]); + source.Reply(_("Bot will now kick \002bad words\002, and will place a ban after \n" + "%d kicks for the same user. Use the BADWORDS command\n" + "to add or remove a bad word."), ci->ttb[TTB_BADWORDS]); else - source.Reply(BOT_KICK_BADWORDS_ON); + source.Reply(_("Bot will now kick \002bad words\002. Use the BADWORDS command\n" + "to add or remove a bad word.")); } else { ci->botflags.UnsetFlag(BS_KICK_BADWORDS); - source.Reply(BOT_KICK_BADWORDS_OFF); + source.Reply(_("Bot won't kick \002bad words\002 anymore.")); } } else if (option.equals_ci("BOLDS")) @@ -91,7 +94,7 @@ class CommandBSKick : public Command { Log(LOG_DEBUG) << "remainder of ttb " << error << " ttb " << ci->ttb[TTB_BOLDS]; ci->ttb[TTB_BOLDS] = 0; - source.Reply(BOT_KICK_BAD_TTB, ttb.c_str()); + source.Reply(_("\002%s\002 cannot be taken as times to ban."), ttb.c_str()); return MOD_CONT; } } @@ -99,14 +102,14 @@ class CommandBSKick : public Command ci->ttb[TTB_BOLDS] = 0; ci->botflags.SetFlag(BS_KICK_BOLDS); if (ci->ttb[TTB_BOLDS]) - source.Reply(BOT_KICK_BOLDS_ON_BAN, ci->ttb[TTB_BOLDS]); + source.Reply(_("Bot will now kick \002bolds\002, and will place a ban after\n%d kicks to the same user."), ci->ttb[TTB_BOLDS]); else - source.Reply(BOT_KICK_BOLDS_ON); + source.Reply(_("Bot will now kick \002bolds\002.")); } else { ci->botflags.UnsetFlag(BS_KICK_BOLDS); - source.Reply(BOT_KICK_BOLDS_OFF); + source.Reply(_("Bot won't kick \002bolds\002 anymore.")); } } else if (option.equals_ci("CAPS")) @@ -124,7 +127,7 @@ class CommandBSKick : public Command { Log(LOG_DEBUG) << "remainder of ttb " << error << " ttb " << ci->ttb[TTB_CAPS]; ci->ttb[TTB_CAPS] = 0; - source.Reply(BOT_KICK_BAD_TTB, ttb.c_str()); + source.Reply(_("\002%s\002 cannot be taken as times to ban."), ttb.c_str()); return MOD_CONT; } } @@ -147,14 +150,17 @@ class CommandBSKick : public Command ci->botflags.SetFlag(BS_KICK_CAPS); if (ci->ttb[TTB_CAPS]) - source.Reply(BOT_KICK_CAPS_ON_BAN, ci->capsmin, ci->capspercent, ci->ttb[TTB_CAPS]); + source.Reply(_("Bot will now kick \002caps\002 (they must constitute at least\n" + "%d characters and %d%% of the entire message), and will \n" + "place a ban after %d kicks for the same user."), ci->capsmin, ci->capspercent, ci->ttb[TTB_CAPS]); else - source.Reply(BOT_KICK_CAPS_ON, ci->capsmin, ci->capspercent); + source.Reply(_("Bot will now kick \002caps\002 (they must constitute at least\n" + "%d characters and %d%% of the entire message)."), ci->capsmin, ci->capspercent); } else { ci->botflags.UnsetFlag(BS_KICK_CAPS); - source.Reply(BOT_KICK_CAPS_OFF); + source.Reply(_("Bot won't kick \002caps\002 anymore.")); } } else if (option.equals_ci("COLORS")) @@ -169,7 +175,7 @@ class CommandBSKick : public Command { Log(LOG_DEBUG) << "remainder of ttb " << error << " ttb " << ci->ttb[TTB_COLORS]; ci->ttb[TTB_COLORS] = 0; - source.Reply(BOT_KICK_BAD_TTB, ttb.c_str()); + source.Reply(_("\002%s\002 cannot be taken as times to ban."), ttb.c_str()); return MOD_CONT; } } @@ -177,14 +183,14 @@ class CommandBSKick : public Command ci->ttb[TTB_COLORS] = 0; ci->botflags.SetFlag(BS_KICK_COLORS); if (ci->ttb[TTB_COLORS]) - source.Reply(BOT_KICK_COLORS_ON_BAN, ci->ttb[TTB_COLORS]); + source.Reply(_("Bot will now kick \002colors\002, and will place a ban after %d\nkicks for the same user."), ci->ttb[TTB_COLORS]); else - source.Reply(BOT_KICK_COLORS_ON); + source.Reply(_("Bot will now kick \002colors\002.")); } else { ci->botflags.UnsetFlag(BS_KICK_COLORS); - source.Reply(BOT_KICK_COLORS_OFF); + source.Reply(_("Bot won't kick \002colors\002 anymore.")); } } else if (option.equals_ci("FLOOD")) @@ -202,7 +208,7 @@ class CommandBSKick : public Command { Log(LOG_DEBUG) << "remainder of ttb " << error << " ttb " << ci->ttb[TTB_FLOOD]; ci->ttb[TTB_FLOOD] = 0; - source.Reply(BOT_KICK_BAD_TTB, ttb.c_str()); + source.Reply(_("\002%s\002 cannot be taken as times to ban."), ttb.c_str()); return MOD_CONT; } } @@ -225,14 +231,14 @@ class CommandBSKick : public Command ci->botflags.SetFlag(BS_KICK_FLOOD); if (ci->ttb[TTB_FLOOD]) - source.Reply(BOT_KICK_FLOOD_ON_BAN, ci->floodlines, ci->floodsecs, ci->ttb[TTB_FLOOD]); + source.Reply(_("Bot will now kick \002flood\002 (%d lines in %d seconds and\nwill place a ban after %d kicks for the same user."), ci->floodlines, ci->floodsecs, ci->ttb[TTB_FLOOD]); else - source.Reply(BOT_KICK_FLOOD_ON, ci->floodlines, ci->floodsecs); + source.Reply(_("Bot will now kick \002flood\002 (%d lines in %d seconds)."), ci->floodlines, ci->floodsecs); } else { ci->botflags.UnsetFlag(BS_KICK_FLOOD); - source.Reply(BOT_KICK_FLOOD_OFF); + source.Reply(_("Bot won't kick \002flood\002 anymore.")); } } else if (option.equals_ci("REPEAT")) @@ -249,7 +255,7 @@ class CommandBSKick : public Command { Log(LOG_DEBUG) << "remainder of ttb " << error << " ttb " << ci->ttb[TTB_REPEAT]; ci->ttb[TTB_REPEAT] = 0; - source.Reply(BOT_KICK_BAD_TTB, ttb.c_str()); + source.Reply(_("\002%s\002 cannot be taken as times to ban."), ttb.c_str()); return MOD_CONT; } } @@ -265,14 +271,17 @@ class CommandBSKick : public Command ci->botflags.SetFlag(BS_KICK_REPEAT); if (ci->ttb[TTB_REPEAT]) - source.Reply(BOT_KICK_REPEAT_ON_BAN, ci->repeattimes, ci->ttb[TTB_REPEAT]); + source.Reply(_("Bot will now kick \002repeats\002 (users that say %d times\n" + "the same thing), and will place a ban after %d \n" + "kicks for the same user."), ci->repeattimes, ci->ttb[TTB_REPEAT]); else - source.Reply(BOT_KICK_REPEAT_ON, ci->repeattimes); + source.Reply(_("Bot will now kick \002repeats\002 (users that say %d times\n" + "the same thing)."), ci->repeattimes); } else { ci->botflags.UnsetFlag(BS_KICK_REPEAT); - source.Reply(BOT_KICK_REPEAT_OFF); + source.Reply(_("Bot won't kick \002repeats\002 anymore.")); } } else if (option.equals_ci("REVERSES")) @@ -287,7 +296,7 @@ class CommandBSKick : public Command { Log(LOG_DEBUG) << "remainder of ttb " << error << " ttb " << ci->ttb[TTB_REVERSES]; ci->ttb[TTB_REVERSES] = 0; - source.Reply(BOT_KICK_BAD_TTB, ttb.c_str()); + source.Reply(_("\002%s\002 cannot be taken as times to ban."), ttb.c_str()); return MOD_CONT; } } @@ -295,14 +304,14 @@ class CommandBSKick : public Command ci->ttb[TTB_REVERSES] = 0; ci->botflags.SetFlag(BS_KICK_REVERSES); if (ci->ttb[TTB_REVERSES]) - source.Reply(BOT_KICK_REVERSES_ON_BAN, ci->ttb[TTB_REVERSES]); + source.Reply(_("Bot will now kick \002reverses\002, and will place a ban after %d\nkicks for the same user."), ci->ttb[TTB_REVERSES]); else - source.Reply(BOT_KICK_REVERSES_ON); + source.Reply(_("Bot will now kick \002reverses\002.")); } else { ci->botflags.UnsetFlag(BS_KICK_REVERSES); - source.Reply(BOT_KICK_REVERSES_OFF); + source.Reply(_("Bot won't kick \002reverses\002 anymore.")); } } else if (option.equals_ci("UNDERLINES")) @@ -317,7 +326,7 @@ class CommandBSKick : public Command { Log(LOG_DEBUG) << "remainder of ttb " << error << " ttb " << ci->ttb[TTB_UNDERLINES]; ci->ttb[TTB_UNDERLINES] = 0; - source.Reply(BOT_KICK_BAD_TTB, ttb.c_str()); + source.Reply(_("\002%s\002 cannot be taken as times to ban."), ttb.c_str()); return MOD_CONT; } } @@ -325,14 +334,14 @@ class CommandBSKick : public Command ci->ttb[TTB_UNDERLINES] = 0; ci->botflags.SetFlag(BS_KICK_UNDERLINES); if (ci->ttb[TTB_UNDERLINES]) - source.Reply(BOT_KICK_UNDERLINES_ON_BAN, ci->ttb[TTB_UNDERLINES]); + source.Reply(_("Bot will now kick \002underlines\002, and will place a ban after %d\nkicks for the same user."), ci->ttb[TTB_UNDERLINES]); else - source.Reply(BOT_KICK_UNDERLINES_ON); + source.Reply(_("Bot will now kick \002underlines\002.")); } else { ci->botflags.UnsetFlag(BS_KICK_UNDERLINES); - source.Reply(BOT_KICK_UNDERLINES_OFF); + source.Reply(_("Bot won't kick \002underlines\002 anymore.")); } } else if (option.equals_ci("ITALICS")) @@ -347,7 +356,7 @@ class CommandBSKick : public Command { Log(LOG_DEBUG) << "remainder of ttb " << error << " ttb " << ci->ttb[TTB_ITALICS]; ci->ttb[TTB_ITALICS] = 0; - source.Reply(BOT_KICK_BAD_TTB, ttb.c_str()); + source.Reply(_("\002%s\002 cannot be taken as times to ban."), ttb.c_str()); return MOD_CONT; } } @@ -355,14 +364,14 @@ class CommandBSKick : public Command ci->ttb[TTB_ITALICS] = 0; ci->botflags.SetFlag(BS_KICK_ITALICS); if (ci->ttb[TTB_ITALICS]) - source.Reply(BOT_KICK_ITALICS_ON_BAN, ci->ttb[TTB_ITALICS]); + source.Reply(_("Bot will now kick \002italics\002, and will place a ban after\n%d kicks for the same user."), ci->ttb[TTB_ITALICS]); else - source.Reply(BOT_KICK_ITALICS_ON); + source.Reply(_("Bot will now kick \002italics\002.")); } else { ci->botflags.UnsetFlag(BS_KICK_ITALICS); - source.Reply(BOT_KICK_ITALICS_OFF); + source.Reply(_("Bot won't kick \002italics\002 anymore.")); } } else if (option.equals_ci("AMSGS")) @@ -377,7 +386,6 @@ class CommandBSKick : public Command { Log(LOG_DEBUG) << "remainder of ttb " << error << " ttb " << ci->ttb[TTB_ITALICS]; ci->ttb[TTB_AMSGS] = 0; - source.Reply(BOT_KICK_AMSGS_ON_BAN, ci->ttb[TTB_AMSGS]); return MOD_CONT; } } @@ -385,18 +393,18 @@ class CommandBSKick : public Command ci->ttb[TTB_AMSGS] = 0; ci->botflags.SetFlag(BS_KICK_AMSGS); if (ci->ttb[TTB_AMSGS]) - source.Reply(BOT_KICK_AMSGS_ON_BAN, ci->ttb[TTB_AMSGS]); + source.Reply(_("Bot will now kick for \002amsgs\002, and will place a ban after %d\nkicks for the same user."), ci->ttb[TTB_AMSGS]); else - source.Reply(BOT_KICK_AMSGS_ON); + source.Reply(_("Bot will now kick for \002amsgs\002")); } else { ci->botflags.UnsetFlag(BS_KICK_AMSGS); - source.Reply(BOT_KICK_AMSGS_OFF); + source.Reply(_("Bot won't kick for \002amsgs\002 anymore.")); } } else - source.Reply(BOT_KICK_UNKNOWN, option.c_str()); + source.Reply(LanguageString::UNKNOWN_OPTION, option.c_str(), this->name.c_str()); } return MOD_CONT; } @@ -404,27 +412,112 @@ class CommandBSKick : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { if (subcommand.empty()) - source.Reply(BOT_HELP_KICK); + source.Reply(_("Syntax: \002KICK \037channel\037 \037option\037 \037parameters\037\002\n" + " \n" + "Configures bot kickers. \037option\037 can be one of:\n" + " \n" + " AMSGS Sets if the bot kicks for amsgs\n" + " BOLDS Sets if the bot kicks bolds\n" + " BADWORDS Sets if the bot kicks bad words\n" + " CAPS Sets if the bot kicks caps\n" + " COLORS Sets if the bot kicks colors\n" + " FLOOD Sets if the bot kicks flooding users\n" + " REPEAT Sets if the bot kicks users who repeat\n" + " themselves\n" + " REVERSES Sets if the bot kicks reverses\n" + " UNDERLINES Sets if the bot kicks underlines\n" + " ITALICS Sets if the bot kicks italics\n" + " \n" + "Type \002%R%S HELP KICK \037option\037\002 for more information\n" + "on a specific option.\n" + " \n" + "Note: access to this command is controlled by the\n" + "level SET.")); else if (subcommand.equals_ci("BADWORDS")) - source.Reply(BOT_HELP_KICK_BADWORDS); + source.Reply(_("Syntax: \002KICK \037#channel\037 BADWORDS {\037ON|OFF\037} [\037ttb\037]\002\n" + "Sets the bad words kicker on or off. When enabled, this\n" + "option tells the bot to kick users who say certain words\n" + "on the channels.\n" + "You can define bad words for your channel using the\n" + "\002BADWORDS\002 command. Type \002%R%S HELP BADWORDS\002 for\n" + "more information.\n" + "ttb is the number of times a user can be kicked\n" + "before it get banned. Don't give ttb to disable\n" + "the ban system once activated.")); else if (subcommand.equals_ci("BOLDS")) - source.Reply(BOT_HELP_KICK_BOLDS); + source.Reply(_("Syntax: \002KICK \037channel\037 BOLDS {\037ON|OFF\037} [\037ttb\037]\002\n" + "Sets the bolds kicker on or off. When enabled, this\n" + "option tells the bot to kick users who use bolds.\n" + "ttb is the number of times a user can be kicked\n" + "before it get banned. Don't give ttb to disable\n" + "the ban system once activated.")); else if (subcommand.equals_ci("CAPS")) - source.Reply(BOT_HELP_KICK_CAPS); + source.Reply(_("Syntax: \002KICK \037channel\037 CAPS {\037ON|OFF\037} [\037ttb\037 [\037min\037 [\037percent\037]]]\002\n" + "Sets the caps kicker on or off. When enabled, this\n" + "option tells the bot to kick users who are talking in\n" + "CAPS.\n" + "The bot kicks only if there are at least \002min\002 caps\n" + "and they constitute at least \002percent\002%% of the total \n" + "text line (if not given, it defaults to 10 characters\n" + "and 25%%).\n" + "ttb is the number of times a user can be kicked\n" + "before it get banned. Don't give ttb to disable\n" + "the ban system once activated.")); else if (subcommand.equals_ci("COLORS")) - source.Reply(BOT_HELP_KICK_COLORS); + source.Reply(_("Syntax: \002KICK \037channel\037 COLORS {\037ON|OFF\037} [\037ttb\037]\002\n" + "Sets the colors kicker on or off. When enabled, this\n" + "option tells the bot to kick users who use colors.\n" + "ttb is the number of times a user can be kicked\n" + "before it get banned. Don't give ttb to disable\n" + "the ban system once activated.")); else if (subcommand.equals_ci("FLOOD")) - source.Reply(BOT_HELP_KICK_FLOOD); + source.Reply(_("Syntax: \002KICK \037channel\037 FLOOD {\037ON|OFF\037} [\037ttb\037 [\037ln\037 [\037secs\037]]]\002\n" + "Sets the flood kicker on or off. When enabled, this\n" + "option tells the bot to kick users who are flooding\n" + "the channel using at least \002ln\002 lines in \002secs\002 seconds\n" + "(if not given, it defaults to 6 lines in 10 seconds).\n" + " \n" + "ttb is the number of times a user can be kicked\n" + "before it get banned. Don't give ttb to disable\n" + "the ban system once activated.")); else if (subcommand.equals_ci("REPEAT")) - source.Reply(BOT_HELP_KICK_REPEAT); + source.Reply(_("Syntax: \002KICK \037#channel\037 REPEAT {\037ON|OFF\037} [\037ttb\037 [\037num\037]]\002\n" + "Sets the repeat kicker on or off. When enabled, this\n" + "option tells the bot to kick users who are repeating\n" + "themselves \002num\002 times (if num is not given, it\n" + "defaults to 3).\n" + "ttb is the number of times a user can be kicked\n" + "before it get banned. Don't give ttb to disable\n" + "the ban system once activated.")); else if (subcommand.equals_ci("REVERSES")) - source.Reply(BOT_HELP_KICK_REVERSES); + source.Reply(_("Syntax: \002KICK \037channel\037 REVERSES {\037ON|OFF\037} [\037ttb\037]\002\n" + "Sets the reverses kicker on or off. When enabled, this\n" + "option tells the bot to kick users who use reverses.\n" + "ttb is the number of times a user can be kicked\n" + "before it get banned. Don't give ttb to disable\n" + "the ban system once activated.")); else if (subcommand.equals_ci("UNDERLINES")) - source.Reply(BOT_HELP_KICK_UNDERLINES); + source.Reply(_("Syntax: \002KICK \037channel\037 UNDERLINES {\037ON|OFF\037} [\037ttb\037]\002\n" + "Sets the underlines kicker on or off. When enabled, this\n" + "option tells the bot to kick users who use underlines.\n" + "ttb is the number of times a user can be kicked\n" + "before it get banned. Don't give ttb to disable\n" + "the ban system once activated.")); else if (subcommand.equals_ci("ITALICS")) - source.Reply(BOT_HELP_KICK_ITALICS); + source.Reply(_("Syntax: \002KICK \037channel\037 ITALICS {\037ON|OFF\037} [\037ttb\037]\002\n" + "Sets the italics kicker on or off. When enabled, this\n" + "option tells the bot to kick users who use italics.\n" + "ttb is the number of times a user can be kicked\n" + "before it get banned. Don't give ttb to disable\n" + "the ban system once activated.")); else if (subcommand.equals_ci("AMSGS")) - source.Reply(BOT_HELP_KICK_AMSGS); + source.Reply(_("Syntax: \002KICK \037channel\037 AMSGS {\037ON|OFF\037} [\037ttb\037]\002\n" + "Sets the amsg kicker on or off. When enabled, the bot will\n" + "kick users who send the same message to multiple channels\n" + "where BotServ bots are.\n" + "Ttb is the number of times a user can be kicked\n" + "before it get banned. Don't give ttb to disable\n" + "the ban system once activated.")); else return false; @@ -433,12 +526,12 @@ class CommandBSKick : public Command void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "KICK", BOT_KICK_SYNTAX); + SyntaxError(source, "KICK", _("KICK \037channel\037 \037option\037 {\037ON|\037} [\037settings\037]")); } void OnServHelp(CommandSource &source) { - source.Reply(BOT_HELP_CMD_KICK); + source.Reply(_(" KICK Configures kickers")); } }; @@ -474,7 +567,7 @@ class BSKick : public Module if (c->ci != NULL && c->ci->botflags.HasFlag(BS_KICK_AMSGS)) { check_ban(c->ci, u, TTB_AMSGS); - bot_kick(c->ci, u, BOT_REASON_AMSGS); + bot_kick(c->ci, u, _("Don't use AMSGs!")); } } diff --git a/modules/core/bs_say.cpp b/modules/core/bs_say.cpp index 6da763f1a..015ac036e 100644 --- a/modules/core/bs_say.cpp +++ b/modules/core/bs_say.cpp @@ -29,19 +29,19 @@ class CommandBSSay : public Command if (!check_access(u, ci, CA_SAY)) { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); return MOD_CONT; } if (!ci->bi) { - source.Reply(BOT_NOT_ASSIGNED); + source.Reply(LanguageString::BOT_NOT_ASSIGNED); return MOD_CONT; } if (!ci->c || !ci->c->FindUser(ci->bi)) { - source.Reply(BOT_NOT_ON_CHANNEL, ci->name.c_str()); + source.Reply(LanguageString::BOT_NOT_ON_CHANNEL, ci->name.c_str()); return MOD_CONT; } @@ -62,18 +62,20 @@ class CommandBSSay : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(BOT_HELP_SAY); + source.Reply(_("Syntax: \002SAY \037channel\037 \037text\037\002\n" + " \n" + "Makes the bot say the given text on the given channel.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "SAY", BOT_SAY_SYNTAX); + SyntaxError(source, "SAY", _("SAY \037channel\037 \037text\037")); } void OnServHelp(CommandSource &source) { - source.Reply(BOT_HELP_CMD_SAY); + source.Reply(_(" SAY Makes the bot say the given text on the given channel")); } }; diff --git a/modules/core/bs_set.cpp b/modules/core/bs_set.cpp index 49acae06b..ce5377878 100644 --- a/modules/core/bs_set.cpp +++ b/modules/core/bs_set.cpp @@ -31,35 +31,35 @@ class CommandBSSet : public Command ChannelInfo *ci; if (readonly) - source.Reply(BOT_SET_DISABLED); + source.Reply(_("Sorry, bot option setting is temporarily disabled.")); else if (u->Account()->HasCommand("botserv/set/private") && option.equals_ci("PRIVATE")) { BotInfo *bi; if (!(bi = findbot(chan))) { - source.Reply(BOT_DOES_NOT_EXIST, chan.c_str()); + source.Reply(LanguageString::BOT_DOES_NOT_EXIST, chan.c_str()); return MOD_CONT; } if (value.equals_ci("ON")) { bi->SetFlag(BI_PRIVATE); - source.Reply(BOT_SET_PRIVATE_ON, bi->nick.c_str()); + source.Reply(_("Private mode of bot %s is now \002\002."), bi->nick.c_str()); } else if (value.equals_ci("OFF")) { bi->UnsetFlag(BI_PRIVATE); - source.Reply(BOT_SET_PRIVATE_OFF, bi->nick.c_str()); + source.Reply(_("Private mode of bot %s is now \002\002."), bi->nick.c_str()); } else - SyntaxError(source, "SET PRIVATE", BOT_SET_PRIVATE_SYNTAX); + SyntaxError(source, "SET PRIVATE", _("SET \037botname\037 PRIVATE {\037ON|\037}")); return MOD_CONT; } else if (!(ci = cs_findchan(chan))) - source.Reply(CHAN_X_NOT_REGISTERED, chan.c_str()); + source.Reply(LanguageString::CHAN_X_NOT_REGISTERED, chan.c_str()); else if (!u->Account()->HasPriv("botserv/administration") && !check_access(u, ci, CA_SET)) - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); else { bool override = !check_access(u, ci, CA_SET); @@ -70,60 +70,60 @@ class CommandBSSet : public Command if (value.equals_ci("ON")) { ci->botflags.SetFlag(BS_DONTKICKOPS); - source.Reply(BOT_SET_DONTKICKOPS_ON, ci->name.c_str()); + source.Reply(_("Bot \002won't kick ops\002 on channel %s."), ci->name.c_str()); } else if (value.equals_ci("OFF")) { ci->botflags.UnsetFlag(BS_DONTKICKOPS); - source.Reply(BOT_SET_DONTKICKOPS_OFF, ci->name.c_str()); + source.Reply(_("Bot \002will kick ops\002 on channel %s."), ci->name.c_str()); } else - SyntaxError(source, "SET DONTKICKOPS", BOT_SET_DONTKICKOPS_SYNTAX); + SyntaxError(source, "SET DONTKICKOPS", _("SET \037channel\037 DONTKICKOPS {\037ON|\037}")); } else if (option.equals_ci("DONTKICKVOICES")) { if (value.equals_ci("ON")) { ci->botflags.SetFlag(BS_DONTKICKVOICES); - source.Reply(BOT_SET_DONTKICKVOICES_ON, ci->name.c_str()); + source.Reply(_("Bot \002won't kick voices\002 on channel %s."), ci->name.c_str()); } else if (value.equals_ci("OFF")) { ci->botflags.UnsetFlag(BS_DONTKICKVOICES); - source.Reply(BOT_SET_DONTKICKVOICES_OFF, ci->name.c_str()); + source.Reply(_("Bot \002will kick voices\002 on channel %s."), ci->name.c_str()); } else - SyntaxError(source, "SET DONTKICKVOICES", BOT_SET_DONTKICKVOICES_SYNTAX); + SyntaxError(source, "SET DONTKICKVOICES", _("SET \037channel\037 DONTKICKVOICES {\037ON|\037}")); } else if (option.equals_ci("FANTASY")) { if (value.equals_ci("ON")) { ci->botflags.SetFlag(BS_FANTASY); - source.Reply(BOT_SET_FANTASY_ON, ci->name.c_str()); + source.Reply(_("Fantasy mode is now \002\002 on channel %s."), ci->name.c_str()); } else if (value.equals_ci("OFF")) { ci->botflags.UnsetFlag(BS_FANTASY); - source.Reply(BOT_SET_FANTASY_OFF, ci->name.c_str()); + source.Reply(_("Fantasy mode is now \002\002 on channel %s."), ci->name.c_str()); } else - SyntaxError(source, "SET FANTASY", BOT_SET_FANTASY_SYNTAX); + SyntaxError(source, "SET FANTASY", _("SET \037channel\037 FANTASY {\037ON|\037}")); } else if (option.equals_ci("GREET")) { if (value.equals_ci("ON")) { ci->botflags.SetFlag(BS_GREET); - source.Reply(BOT_SET_GREET_ON, ci->name.c_str()); + source.Reply(_("Greet mode is now \002\002 on channel %s."), ci->name.c_str()); } else if (value.equals_ci("OFF")) { ci->botflags.UnsetFlag(BS_GREET); - source.Reply(BOT_SET_GREET_OFF, ci->name.c_str()); + source.Reply(_("Greet mode is now \002\002 on channel %s."), ci->name.c_str()); } else - SyntaxError(source, "SET GREET", BOT_SET_GREET_SYNTAX); + SyntaxError(source, "SET GREET", _("SET \037channel\037 GREET {\037ON|\037}")); } else if (u->Account()->HasCommand("botserv/set/nobot") && option.equals_ci("NOBOT")) { @@ -132,30 +132,30 @@ class CommandBSSet : public Command ci->botflags.SetFlag(BS_NOBOT); if (ci->bi) ci->bi->UnAssign(u, ci); - source.Reply(BOT_SET_NOBOT_ON, ci->name.c_str()); + source.Reply(_("No Bot mode is now \002\002 on channel %s."), ci->name.c_str()); } else if (value.equals_ci("OFF")) { ci->botflags.UnsetFlag(BS_NOBOT); - source.Reply(BOT_SET_NOBOT_OFF, ci->name.c_str()); + source.Reply(_("No Bot mode is now \002\002 on channel %s."), ci->name.c_str()); } else - SyntaxError(source, "SET NOBOT", BOT_SET_NOBOT_SYNTAX); + SyntaxError(source, "SET NOBOT", _("SET \037botname\037 NOBOT {\037ON|\037}")); } else if (option.equals_ci("SYMBIOSIS")) { if (value.equals_ci("ON")) { ci->botflags.SetFlag(BS_SYMBIOSIS); - source.Reply(BOT_SET_SYMBIOSIS_ON, ci->name.c_str()); + source.Reply(_("Symbiosis mode is now \002\002 on channel %s."), ci->name.c_str()); } else if (value.equals_ci("OFF")) { ci->botflags.UnsetFlag(BS_SYMBIOSIS); - source.Reply(BOT_SET_SYMBIOSIS_OFF, ci->name.c_str()); + source.Reply(_("Symbiosis mode is now \002\002 on channel %s."), ci->name.c_str()); } else - SyntaxError(source, "SET SYMBIOSIS", BOT_SET_SYMBIOSIS_SYNTAX); + SyntaxError(source, "SET SYMBIOSIS", _("SET \037channel\037 SYMBIOSIS {\037ON|\037}")); } else if (option.equals_ci("MSG")) { @@ -164,34 +164,34 @@ class CommandBSSet : public Command ci->botflags.UnsetFlag(BS_MSG_PRIVMSG); ci->botflags.UnsetFlag(BS_MSG_NOTICE); ci->botflags.UnsetFlag(BS_MSG_NOTICEOPS); - source.Reply(BOT_SET_MSG_OFF, ci->name.c_str()); + source.Reply(_("Fantasy replies will no longer be sent to %s."), ci->name.c_str()); } else if (value.equals_ci("PRIVMSG")) { ci->botflags.SetFlag(BS_MSG_PRIVMSG); ci->botflags.UnsetFlag(BS_MSG_NOTICE); ci->botflags.UnsetFlag(BS_MSG_NOTICEOPS); - source.Reply(BOT_SET_MSG_PRIVMSG, ci->name.c_str()); + source.Reply(_("Fantasy replies will be sent via PRIVMSG to %s."), ci->name.c_str()); } else if (value.equals_ci("NOTICE")) { ci->botflags.UnsetFlag(BS_MSG_PRIVMSG); ci->botflags.SetFlag(BS_MSG_NOTICE); ci->botflags.UnsetFlag(BS_MSG_NOTICEOPS); - source.Reply(BOT_SET_MSG_NOTICE, ci->name.c_str()); + source.Reply(_("Fantasy replies will be sent via NOTICE to %s."), ci->name.c_str()); } else if (value.equals_ci("NOTICEOPS")) { ci->botflags.UnsetFlag(BS_MSG_PRIVMSG); ci->botflags.UnsetFlag(BS_MSG_NOTICE); ci->botflags.SetFlag(BS_MSG_NOTICEOPS); - source.Reply(BOT_SET_MSG_NOTICEOPS, ci->name.c_str()); + source.Reply(_("Fantasy replies will be sent via NOTICE to channel ops on %s."), ci->name.c_str()); } else - SyntaxError(source, "SET MSG", BOT_SET_MSG_SYNTAX); + SyntaxError(source, "SET MSG", _("SET \037channel\037 MSG {\037OFF|PRIVMSG|NOTICE|\037}")); } else - source.Reply(BOT_SET_UNKNOWN, option.c_str()); + source.Reply(LanguageString::UNKNOWN_OPTION, option.c_str(), this->name.c_str()); } return MOD_CONT; @@ -201,27 +201,90 @@ class CommandBSSet : public Command { if (subcommand.empty()) { - source.Reply(BOT_HELP_SET); + source.Reply(_("Syntax: \002SET \037(channel | bot)\037 \037option\037 \037parameters\037\002\n" + " \n" + "Configures bot options. \037option\037 can be one of:\n" + " \n" + " DONTKICKOPS To protect ops against bot kicks\n" + " DONTKICKVOICES To protect voices against bot kicks\n" + " GREET Enable greet messages\n" + " FANTASY Enable fantaisist commands\n" + " SYMBIOSIS Allow the bot to act as a real bot\n" + " MSG Configure how fantasy commands should be replied to\n" + " \n" + "Type \002%R%S HELP SET \037option\037\002 for more information\n" + "on a specific option.\n" + "Note: access to this command is controlled by the\n" + "level SET.")); User *u = source.u; if (u->Account() && u->Account()->IsServicesOper()) - source.Reply(BOT_SERVADMIN_HELP_SET); + source.Reply(_("These options are reserved to Services Operators:\n" + " \n" + " NOBOT Prevent a bot from being assigned to \n" + " a channel\n" + " PRIVATE Prevent a bot from being assigned by\n" + " non IRC operators")); } else if (subcommand.equals_ci("DONTKICKOPS")) - source.Reply(BOT_HELP_SET_DONTKICKOPS); + source.Reply(_("Syntax: \002SET \037channel\037 DONTKICKOPS {\037ON|OFF\037}\n" + " \n" + "Enables or disables \002ops protection\002 mode on a channel.\n" + "When it is enabled, ops won't be kicked by the bot\n" + "even if they don't match the NOKICK level.")); else if (subcommand.equals_ci("DONTKICKVOICES")) - source.Reply(BOT_HELP_SET_DONTKICKVOICES); + source.Reply(_("Syntax: \002SET \037channel\037 DONTKICKVOICES {\037ON|OFF\037}\n" + " \n" + "Enables or disables \002voices protection\002 mode on a channel.\n" + "When it is enabled, voices won't be kicked by the bot\n" + "even if they don't match the NOKICK level.")); else if (subcommand.equals_ci("FANTASY")) - source.Reply(BOT_HELP_SET_FANTASY); + source.Reply(_("Syntax: \002SET \037channel\037 FANTASY {\037ON|OFF\037}\n" + "Enables or disables \002fantasy\002 mode on a channel.\n" + "When it is enabled, users will be able to use\n" + "commands !op, !deop, !voice, !devoice,\n" + "!kick, !kb, !unban, !seen on a channel (find how \n" + "to use them; try with or without nick for each, \n" + "and with a reason for some?).\n" + " \n" + "Note that users wanting to use fantaisist\n" + "commands MUST have enough level for both\n" + "the FANTASIA and another level depending\n" + "of the command if required (for example, to use \n" + "!op, user must have enough access for the OPDEOP\n" + "level).")); else if (subcommand.equals_ci("GREET")) - source.Reply(BOT_HELP_SET_GREET); + source.Reply(_("Syntax: \002SET \037channel\037 GREET {\037ON|OFF\037}\n" + " \n" + "Enables or disables \002greet\002 mode on a channel.\n" + "When it is enabled, the bot will display greet\n" + "messages of users joining the channel, provided\n" + "they have enough access to the channel.")); else if (subcommand.equals_ci("SYMBIOSIS")) - source.Reply(BOT_HELP_SET_SYMBIOSIS, Config->s_ChanServ.c_str()); + source.Reply(_("Syntax: \002SET \037channel\037 SYMBIOSIS {\037ON|OFF\037}\n" + " \n" + "Enables or disables \002symbiosis\002 mode on a channel.\n" + "When it is enabled, the bot will do everything\n" + "normally done by %s on channels, such as MODEs,\n" + "KICKs, and even the entry message."), Config->s_ChanServ.c_str()); else if (subcommand.equals_ci("NOBOT")) - source.Reply(BOT_SERVADMIN_HELP_SET_NOBOT); + source.Reply(_("Syntax: \002SET \037channel\037 NOBOT {\037ON|OFF\037}\002\n" + " \n" + "This option makes a channel be unassignable. If a bot \n" + "is already assigned to the channel, it is unassigned\n" + "automatically when you enable the option.")); else if (subcommand.equals_ci("PRIVATE")) - source.Reply(BOT_SERVADMIN_HELP_SET_PRIVATE); + source.Reply(_("Syntax: \002SET \037bot-nick\037 PRIVATE {\037ON|OFF\037}\002\n" + "This option prevents a bot from being assigned to a\n" + "channel by users that aren't IRC operators.")); else if (subcommand.equals_ci("MSG")) - source.Reply(BOT_HELP_SET_MSG); + source.Reply(_("Syntax: \002SET \037channel\037 MSG {\037OFF|PRIVMSG|NOTICE|NOTICEOPS\037}\002\n" + " \n" + "Configures how fantasy commands should be returned to the channel. Off disables\n" + "fantasy from replying to the channel. Privmsg, notice, and noticeops message the\n" + "channel, notice the channel, and notice the channel ops respectively.\n" + " \n" + "Note that replies over one line will not use this setting to prevent spam, and will\n" + "go directly to the user who executed it.")); else return false; @@ -230,12 +293,12 @@ class CommandBSSet : public Command void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "SET", BOT_SET_SYNTAX); + SyntaxError(source, "SET", _("SET \037(channel | bot)\037 \037option\037 \037settings\037")); } void OnServHelp(CommandSource &source) { - source.Reply(BOT_HELP_CMD_SET); + source.Reply(_(" SET Configures bot options")); } }; diff --git a/modules/core/bs_unassign.cpp b/modules/core/bs_unassign.cpp index 41479f0a3..40a67d9a9 100644 --- a/modules/core/bs_unassign.cpp +++ b/modules/core/bs_unassign.cpp @@ -28,38 +28,44 @@ class CommandBSUnassign : public Command ChannelInfo *ci = source.ci; if (readonly) - source.Reply(BOT_ASSIGN_READONLY); + source.Reply(LanguageString::BOT_ASSIGN_READONLY); else if (!u->Account()->HasPriv("botserv/administration") && !check_access(u, ci, CA_ASSIGN)) - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); else if (!ci->bi) - source.Reply(BOT_NOT_ASSIGNED); + source.Reply(LanguageString::BOT_NOT_ASSIGNED); else if (ci->HasFlag(CI_PERSIST) && !cm) - source.Reply(BOT_UNASSIGN_PERSISTANT_CHAN); + source.Reply(_("You can not unassign bots while persist is set on the channel.")); else { bool override = !check_access(u, ci, CA_ASSIGN); Log(override ? LOG_OVERRIDE : LOG_COMMAND, u, this, ci) << "for " << ci->bi->nick; ci->bi->UnAssign(u, ci); - source.Reply(BOT_UNASSIGN_UNASSIGNED, ci->name.c_str()); + source.Reply(_("There is no bot assigned to %s anymore."), ci->name.c_str()); } return MOD_CONT; } bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(BOT_HELP_UNASSIGN); + source.Reply(_("Syntax: \002UNASSIGN \037chan\037\002\n" + " \n" + "Unassigns a bot from a channel. When you use this command,\n" + "the bot won't join the channel anymore. However, bot\n" + "configuration for the channel is kept, so you will always\n" + "be able to reassign a bot later without have to reconfigure\n" + "it entirely.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "UNASSIGN", BOT_UNASSIGN_SYNTAX); + SyntaxError(source, "UNASSIGN", _("UNASSIGN \037chan\037")); } void OnServHelp(CommandSource &source) { - source.Reply(BOT_HELP_CMD_UNASSIGN); + source.Reply(_(" UNASSIGN Unassigns a bot from a channel")); } }; diff --git a/modules/core/cs_access.cpp b/modules/core/cs_access.cpp index a13d1d488..4eb4974fe 100644 --- a/modules/core/cs_access.cpp +++ b/modules/core/cs_access.cpp @@ -26,9 +26,9 @@ class AccessListCallback : public NumberList ~AccessListCallback() { if (SentHeader) - source.Reply(CHAN_ACCESS_LIST_FOOTER, source.ci->name.c_str()); + source.Reply(_("End of access list."), source.ci->name.c_str()); else - source.Reply(CHAN_ACCESS_NO_MATCH, source.ci->name.c_str()); + source.Reply(_("No matching entries on %s access list."), source.ci->name.c_str()); } virtual void HandleNumber(unsigned Number) @@ -39,7 +39,7 @@ class AccessListCallback : public NumberList if (!SentHeader) { SentHeader = true; - source.Reply(CHAN_ACCESS_LIST_HEADER, source.ci->name.c_str()); + source.Reply(LanguageString::CHAN_ACCESS_LIST_HEADER, source.ci->name.c_str()); } DoList(source, Number - 1, source.ci->GetAccess(Number - 1)); @@ -50,10 +50,10 @@ class AccessListCallback : public NumberList if (source.ci->HasFlag(CI_XOP)) { Anope::string xop = get_xop_level(access->level); - source.Reply(CHAN_ACCESS_LIST_XOP_FORMAT, Number + 1, xop.c_str(), access->mask.c_str()); + source.Reply(_(" %3d %s %s"), Number + 1, xop.c_str(), access->mask.c_str()); } else - source.Reply(CHAN_ACCESS_LIST_AXS_FORMAT, Number + 1, access->level, access->mask.c_str()); + source.Reply(_(" %3d %4d %s"), Number + 1, access->level, access->mask.c_str()); } }; @@ -72,7 +72,7 @@ class AccessViewCallback : public AccessListCallback if (!SentHeader) { SentHeader = true; - source.Reply(CHAN_ACCESS_LIST_HEADER, source.ci->name.c_str()); + source.Reply(LanguageString::CHAN_ACCESS_LIST_HEADER, source.ci->name.c_str()); } DoList(source, Number - 1, source.ci->GetAccess(Number - 1)); @@ -92,10 +92,10 @@ class AccessViewCallback : public AccessListCallback if (ci->HasFlag(CI_XOP)) { Anope::string xop = get_xop_level(access->level); - source.Reply(CHAN_ACCESS_VIEW_XOP_FORMAT, Number + 1, xop.c_str(), access->mask.c_str(), access->creator.c_str(), timebuf.c_str()); + source.Reply(LanguageString::CHAN_ACCESS_VIEW_XOP_FORMAT, Number + 1, xop.c_str(), access->mask.c_str(), access->creator.c_str(), timebuf.c_str()); } else - source.Reply(CHAN_ACCESS_VIEW_AXS_FORMAT, Number + 1, access->level, access->mask.c_str(), access->creator.c_str(), timebuf.c_str()); + source.Reply(LanguageString::CHAN_ACCESS_VIEW_AXS_FORMAT, Number + 1, access->level, access->mask.c_str(), access->creator.c_str(), timebuf.c_str()); } }; @@ -117,17 +117,17 @@ class AccessDelCallback : public NumberList ~AccessDelCallback() { if (Denied && !Deleted) - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); else if (!Deleted) - source.Reply(CHAN_ACCESS_NO_MATCH, source.ci->name.c_str()); + source.Reply(_("No matching entries on %s access list."), source.ci->name.c_str()); else { Log(override ? LOG_OVERRIDE : LOG_COMMAND, source.u, c, source.ci) << "for user" << (Deleted == 1 ? " " : "s ") << Nicks; if (Deleted == 1) - source.Reply(CHAN_ACCESS_DELETED_ONE, source.ci->name.c_str()); + source.Reply(_("Deleted 1 entry from %s access list."), source.ci->name.c_str()); else - source.Reply(CHAN_ACCESS_DELETED_SEVERAL, Deleted, source.ci->name.c_str()); + source.Reply(_("Deleted %d entries from %s access list."), Deleted, source.ci->name.c_str()); } } @@ -175,18 +175,18 @@ class CommandCSAccess : public Command int16 u_level = u_access ? u_access->level : 0; if (level >= u_level && !u->Account()->HasPriv("chanserv/access/modify")) { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); return MOD_CONT; } if (!level) { - source.Reply(CHAN_ACCESS_LEVEL_NONZERO); + source.Reply(_("Access level must be non-zero.")); return MOD_CONT; } else if (level <= ACCESS_INVALID || level >= ACCESS_FOUNDER) { - source.Reply(CHAN_ACCESS_LEVEL_RANGE, ACCESS_INVALID + 1, ACCESS_FOUNDER - 1); + source.Reply(LanguageString::CHAN_ACCESS_LEVEL_RANGE, ACCESS_INVALID + 1, ACCESS_FOUNDER - 1); return MOD_CONT; } @@ -197,7 +197,7 @@ class CommandCSAccess : public Command mask += "!*@*"; else if (na && na->HasFlag(NS_FORBIDDEN)) { - source.Reply(NICK_X_FORBIDDEN, mask.c_str()); + source.Reply(LanguageString::NICK_X_FORBIDDEN, mask.c_str()); return MOD_CONT; } @@ -207,12 +207,12 @@ class CommandCSAccess : public Command /* Don't allow lowering from a level >= u_level */ if (access->level >= u_level && !u->Account()->HasPriv("chanserv/access/modify")) { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); return MOD_CONT; } if (access->level == level) { - source.Reply(CHAN_ACCESS_LEVEL_UNCHANGED, access->mask.c_str(), ci->name.c_str(), level); + source.Reply(_("Access level for \002%s\002 on %s unchanged from \002%d\002."), access->mask.c_str(), ci->name.c_str(), level); return MOD_CONT; } access->level = level; @@ -220,13 +220,13 @@ class CommandCSAccess : public Command FOREACH_MOD(I_OnAccessChange, OnAccessChange(ci, u, access)); Log(override ? LOG_OVERRIDE : LOG_COMMAND, u, this, ci) << "ADD " << mask << " (level: " << level << ") as level " << u_level; - source.Reply(CHAN_ACCESS_LEVEL_CHANGED, access->mask.c_str(), ci->name.c_str(), level); + source.Reply(_("Access level for \002%s\002 on %s changed to \002%d\002."), access->mask.c_str(), ci->name.c_str(), level); return MOD_CONT; } if (ci->GetAccessCount() >= Config->CSAccessMax) { - source.Reply(CHAN_ACCESS_REACHED_LIMIT, Config->CSAccessMax); + source.Reply(_("Sorry, you can only have %d access entries on a channel."), Config->CSAccessMax); return MOD_CONT; } @@ -235,7 +235,7 @@ class CommandCSAccess : public Command FOREACH_MOD(I_OnAccessAdd, OnAccessAdd(ci, u, access)); Log(override ? LOG_OVERRIDE : LOG_COMMAND, u, this, ci) << "ADD " << mask << " (level: " << level << ") as level " << u_level; - source.Reply(CHAN_ACCESS_ADDED, access->mask.c_str(), ci->name.c_str(), level); + source.Reply(_("\002%s\002 added to %s access list at level \002%d\002."), access->mask.c_str(), ci->name.c_str(), level); return MOD_CONT; } @@ -248,7 +248,7 @@ class CommandCSAccess : public Command const Anope::string &mask = params[2]; if (!ci->GetAccessCount()) - source.Reply(CHAN_ACCESS_LIST_EMPTY, ci->name.c_str()); + source.Reply(_("%s access list is empty."), ci->name.c_str()); else if (isdigit(mask[0]) && mask.find_first_not_of("1234567890,-") == Anope::string::npos) { AccessDelCallback list(source, this, mask); @@ -260,12 +260,12 @@ class CommandCSAccess : public Command ChanAccess *u_access = ci->GetAccess(u); int16 u_level = u_access ? u_access->level : 0; if (!access) - source.Reply(CHAN_ACCESS_NOT_FOUND, mask.c_str(), ci->name.c_str()); + source.Reply(_("\002%s\002 not found on %s access list."), mask.c_str(), ci->name.c_str()); else if (access->nc != u->Account() && check_access(u, ci, CA_NOJOIN) && u_level <= access->level && !u->Account()->HasPriv("chanserv/access/modify")) - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); else { - source.Reply(CHAN_ACCESS_DELETED, access->mask.c_str(), ci->name.c_str()); + source.Reply(_("\002%s\002 deleted from %s access list."), access->mask.c_str(), ci->name.c_str()); bool override = !check_access(u, ci, CA_ACCESS_CHANGE) && access->nc != u->Account(); Log(override ? LOG_OVERRIDE : LOG_COMMAND, u, this, ci) << "DEL " << access->mask << " from level " << access->level; @@ -285,7 +285,7 @@ class CommandCSAccess : public Command const Anope::string &nick = params.size() > 2 ? params[2] : ""; if (!ci->GetAccessCount()) - source.Reply(CHAN_ACCESS_LIST_EMPTY, ci->name.c_str()); + source.Reply(_("%s access list is empty."), ci->name.c_str()); else if (!nick.empty() && nick.find_first_not_of("1234567890,-") == Anope::string::npos) { AccessListCallback list(source, nick); @@ -305,16 +305,16 @@ class CommandCSAccess : public Command if (!SentHeader) { SentHeader = true; - source.Reply(CHAN_ACCESS_LIST_HEADER, ci->name.c_str()); + source.Reply(LanguageString::CHAN_ACCESS_LIST_HEADER, ci->name.c_str()); } AccessListCallback::DoList(source, i, access); } if (SentHeader) - source.Reply(CHAN_ACCESS_LIST_FOOTER, ci->name.c_str()); + source.Reply(_("End of access list."), ci->name.c_str()); else - source.Reply(CHAN_ACCESS_NO_MATCH, ci->name.c_str()); + source.Reply(_("No matching entries on %s access list."), ci->name.c_str()); } return MOD_CONT; @@ -327,7 +327,7 @@ class CommandCSAccess : public Command const Anope::string &nick = params.size() > 2 ? params[2] : ""; if (!ci->GetAccessCount()) - source.Reply(CHAN_ACCESS_LIST_EMPTY, ci->name.c_str()); + source.Reply(_("%s access list is empty."), ci->name.c_str()); else if (!nick.empty() && nick.find_first_not_of("1234567890,-") == Anope::string::npos) { AccessViewCallback list(source, nick); @@ -347,16 +347,16 @@ class CommandCSAccess : public Command if (!SentHeader) { SentHeader = true; - source.Reply(CHAN_ACCESS_LIST_HEADER, ci->name.c_str()); + source.Reply(LanguageString::CHAN_ACCESS_LIST_HEADER, ci->name.c_str()); } AccessViewCallback::DoList(source, i, access); } if (SentHeader) - source.Reply(CHAN_ACCESS_LIST_FOOTER, ci->name.c_str()); + source.Reply(_("End of access list."), ci->name.c_str()); else - source.Reply(CHAN_ACCESS_NO_MATCH, ci->name.c_str()); + source.Reply(_("No matching entries on %s access list."), ci->name.c_str()); } return MOD_CONT; @@ -368,14 +368,14 @@ class CommandCSAccess : public Command ChannelInfo *ci = source.ci; if (!IsFounder(u, ci) && !u->Account()->HasPriv("chanserv/access/modify")) - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); else { ci->ClearAccess(); FOREACH_MOD(I_OnAccessClear, OnAccessClear(ci, u)); - source.Reply(CHAN_ACCESS_CLEAR, ci->name.c_str()); + source.Reply(_("Channel %s access list has been cleared."), ci->name.c_str()); bool override = !IsFounder(u, ci); Log(override ? LOG_OVERRIDE : LOG_COMMAND, u, this, ci) << "CLEAR"; @@ -420,17 +420,21 @@ class CommandCSAccess : public Command if (is_list || is_clear ? 0 : (cmd.equals_ci("DEL") ? (nick.empty() || !s.empty()) : s.empty())) this->OnSyntaxError(source, cmd); else if (!has_access) - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); /* We still allow LIST and CLEAR in xOP mode, but not others */ else if (ci->HasFlag(CI_XOP) && !is_list && !is_clear) { if (ModeManager::FindChannelModeByName(CMODE_HALFOP)) - source.Reply(CHAN_ACCESS_XOP_HOP, Config->s_ChanServ.c_str()); + source.Reply(_("You can't use this command. \n" + "Use the AOP, SOP, HOP and VOP commands instead.\n" + "Type \002%R%s HELP \037command\037\002 for more information."), Config->s_ChanServ.c_str()); else - source.Reply(CHAN_ACCESS_XOP, Config->s_ChanServ.c_str()); + source.Reply(_("You can't use this command. \n" + "Use the AOP, SOP and VOP commands instead.\n" + "Type \002%R%s HELP \037command\037\002 for more information."), Config->s_ChanServ.c_str()); } else if (readonly && !is_list) - source.Reply(CHAN_ACCESS_DISABLED); + source.Reply(_("Sorry, channel access list modification is temporarily disabled.")); else if (cmd.equals_ci("ADD")) this->DoAdd(source, params); else if (cmd.equals_ci("DEL")) @@ -449,14 +453,75 @@ class CommandCSAccess : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(CHAN_HELP_ACCESS); - source.Reply(CHAN_HELP_ACCESS_LEVELS); + source.Reply(_("Syntax: \002ACCESS \037channel\037 ADD \037mask\037 \037level\037\002\n" + " \002ACCESS \037channel\037 DEL {\037mask\037 | \037entry-num\037 | \037list\037}\002\n" + " \002ACCESS \037channel\037 LIST [\037mask\037 | \037list\037]\002\n" + " \002ACCESS \037channel\037 VIEW [\037mask\037 | \037list\037]\002\n" + " \002ACCESS \037channel\037 CLEAR\002\n" + " \n" + "Maintains the \002access list\002 for a channel. The access\n" + "list specifies which users are allowed chanop status or\n" + "access to %S commands on the channel. Different\n" + "user levels allow for access to different subsets of\n" + "privileges; \002%R%S HELP ACCESS LEVELS\002 for more\n" + "specific information. Any nick not on the access list has\n" + "a user level of 0.\n" + " \n" + "The \002ACCESS ADD\002 command adds the given mask to the\n" + "access list with the given user level; if the mask is\n" + "already present on the list, its access level is changed to\n" + "the level specified in the command. The \037level\037 specified\n" + "must be less than that of the user giving the command, and\n" + "if the \037mask\037 is already on the access list, the current\n" + "access level of that nick must be less than the access level\n" + "of the user giving the command. When a user joins the channel\n" + "the access they receive is from the highest level entry in the\n" + "access list.\n" + " \n" + "The \002ACCESS DEL\002 command removes the given nick from the\n" + "access list. If a list of entry numbers is given, those\n" + "entries are deleted. (See the example for LIST below.)\n" + "You may remove yourself from an access list, even if you\n" + "do not have access to modify that list otherwise.\n" + " \n" + "The \002ACCESS LIST\002 command displays the access list. If\n" + "a wildcard mask is given, only those entries matching the\n" + "mask are displayed. If a list of entry numbers is given,\n" + "only those entries are shown; for example:\n" + " \002ACCESS #channel LIST 2-5,7-9\002\n" + " Lists access entries numbered 2 through 5 and\n" + " 7 through 9.\n" + " \n" + "The \002ACCESS VIEW\002 command displays the access list similar\n" + "to \002ACCESS LIST\002 but shows the creator and last used time.\n" + " \n" + "The \002ACCESS CLEAR\002 command clears all entries of the\n" + "access list.")); + source.Reply(_("\002User access levels\002\n" + " \n" + "By default, the following access levels are defined:\n" + " \n" + " \002Founder\002 Full access to %S functions; automatic\n" + " opping upon entering channel. Note\n" + " that only one person may have founder\n" + " status (it cannot be given using the\n" + " \002ACCESS\002 command).\n" + " \002 10\002 Access to AKICK command; automatic opping.\n" + " \002 5\002 Automatic opping.\n" + " \002 3\002 Automatic voicing.\n" + " \002 0\002 No special privileges; can be opped by other\n" + " ops (unless \002secure-ops\002 is set).\n" + " \002 <0\002 May not be opped.\n" + " \n" + "These levels may be changed, or new ones added, using the\n" + "\002LEVELS\002 command; type \002%R%S HELP LEVELS\002 for\n" + "information.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "ACCESS", CHAN_ACCESS_SYNTAX); + SyntaxError(source, "ACCESS", _("ACCESS \037channel\037 {ADD|DEL|LIST|VIEW|CLEAR} [\037mask\037 [\037level\037] | \037entry-list\037]")); } }; @@ -484,7 +549,7 @@ class CommandCSLevels : public Command if (!error.empty()) this->OnSyntaxError(source, "SET"); else if (level <= ACCESS_INVALID || level > ACCESS_FOUNDER) - source.Reply(CHAN_LEVELS_RANGE, ACCESS_INVALID + 1, ACCESS_FOUNDER - 1); + source.Reply(_("Level must be between %d and %d inclusive."), ACCESS_INVALID + 1, ACCESS_FOUNDER - 1); else { for (int i = 0; levelinfo[i].what >= 0; ++i) @@ -498,14 +563,14 @@ class CommandCSLevels : public Command Log(override ? LOG_OVERRIDE : LOG_COMMAND, u, this, ci) << "SET " << levelinfo[i].name << " to " << level; if (level == ACCESS_FOUNDER) - source.Reply(CHAN_LEVELS_CHANGED_FOUNDER, levelinfo[i].name.c_str(), ci->name.c_str()); + source.Reply(_("Level for %s on channel %s changed to founder only."), levelinfo[i].name.c_str(), ci->name.c_str()); else - source.Reply(CHAN_LEVELS_CHANGED, levelinfo[i].name.c_str(), ci->name.c_str(), level); + source.Reply(_("Level for \002%s\002 on channel %s changed to \002%d\002."), levelinfo[i].name.c_str(), ci->name.c_str(), level); return MOD_CONT; } } - source.Reply(CHAN_LEVELS_UNKNOWN, what.c_str(), Config->s_ChanServ.c_str()); + source.Reply(_("Setting \002%s\002 not known. Type \002%R%s HELP LEVELS \002 for a list of valid settings."), what.c_str(), Config->s_ChanServ.c_str()); } return MOD_CONT; @@ -530,12 +595,12 @@ class CommandCSLevels : public Command bool override = !check_access(u, ci, CA_FOUNDER); Log(override ? LOG_OVERRIDE : LOG_COMMAND, u, this, ci) << "DISABLE " << levelinfo[i].name; - source.Reply(CHAN_LEVELS_DISABLED, levelinfo[i].name.c_str(), ci->name.c_str()); + source.Reply(_("\002%s\002 disabled on channel %s."), levelinfo[i].name.c_str(), ci->name.c_str()); return MOD_CONT; } } - source.Reply(CHAN_LEVELS_UNKNOWN, what.c_str(), Config->s_ChanServ.c_str()); + source.Reply(_("Setting \002%s\002 not known. Type \002%R%s HELP LEVELS \002 for a list of valid settings."), what.c_str(), Config->s_ChanServ.c_str()); return MOD_CONT; } @@ -544,7 +609,7 @@ class CommandCSLevels : public Command { ChannelInfo *ci = source.ci; - source.Reply(CHAN_LEVELS_LIST_HEADER, ci->name.c_str()); + source.Reply(_("Access level settings for channel %s:"), ci->name.c_str()); if (!levelinfo_maxwidth) for (int i = 0; levelinfo[i].what >= 0; ++i) @@ -562,12 +627,12 @@ class CommandCSLevels : public Command { j = levelinfo[i].what; - source.Reply(CHAN_LEVELS_LIST_DISABLED, levelinfo_maxwidth, levelinfo[i].name.c_str()); + source.Reply(_(" %-*s (disabled)"), levelinfo_maxwidth, levelinfo[i].name.c_str()); } else if (j == ACCESS_FOUNDER) - source.Reply(CHAN_LEVELS_LIST_FOUNDER, levelinfo_maxwidth, levelinfo[i].name.c_str()); + source.Reply(_(" %-*s (founder only)"), levelinfo_maxwidth, levelinfo[i].name.c_str()); else - source.Reply(CHAN_LEVELS_LIST_NORMAL, levelinfo_maxwidth, levelinfo[i].name.c_str(), j); + source.Reply(_(" %-*s %d"), levelinfo_maxwidth, levelinfo[i].name.c_str(), j); } return MOD_CONT; @@ -584,7 +649,7 @@ class CommandCSLevels : public Command bool override = !check_access(u, ci, CA_FOUNDER); Log(override ? LOG_OVERRIDE : LOG_COMMAND, u, this, ci) << "RESET"; - source.Reply(CHAN_LEVELS_RESET, ci->name.c_str()); + source.Reply(_("Access levels for \002%s\002 reset to defaults."), ci->name.c_str()); return MOD_CONT; } @@ -608,9 +673,9 @@ class CommandCSLevels : public Command if (cmd.equals_ci("SET") ? s.empty() : (cmd.substr(0, 3).equals_ci("DIS") ? (what.empty() || !s.empty()) : !what.empty())) this->OnSyntaxError(source, cmd); else if (ci->HasFlag(CI_XOP)) - source.Reply(CHAN_LEVELS_XOP); + source.Reply(_("Levels are not available as xOP is enabled on this channel.")); else if (!check_access(u, ci, CA_FOUNDER) && !u->Account()->HasPriv("chanserv/access/modify")) - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); else if (cmd.equals_ci("SET")) this->DoSet(source, params); else if (cmd.equals_ci("DIS") || cmd.equals_ci("DISABLE")) @@ -630,7 +695,9 @@ class CommandCSLevels : public Command if (subcommand.equals_ci("DESC")) { int i; - source.Reply(CHAN_HELP_LEVELS_DESC); + source.Reply(_("The following feature/function names are understood. Note\n" + "that the leves for NOJOIN is the maximum level,\n" + "while all others are minimum levels.")); if (!levelinfo_maxwidth) for (i = 0; levelinfo[i].what >= 0; ++i) { @@ -639,22 +706,45 @@ class CommandCSLevels : public Command levelinfo_maxwidth = len; } for (i = 0; levelinfo[i].what >= 0; ++i) - source.Reply(CHAN_HELP_LEVELS_DESC_FORMAT, levelinfo_maxwidth, levelinfo[i].name.c_str(), GetString(source.u, levelinfo[i].desc).c_str()); + source.Reply(_(" %-*s %s"), levelinfo_maxwidth, levelinfo[i].name.c_str(), GetString(source.u->Account(), levelinfo[i].desc).c_str()); } else - source.Reply(CHAN_HELP_LEVELS); + source.Reply(_("Syntax: \002LEVELS \037channel\037 SET \037type\037 \037level\037\002\n" + " \002LEVELS \037channel\037 {DIS | DISABLE} \037type\037\002\n" + " \002LEVELS \037channel\037 LIST\002\n" + " \002LEVELS \037channel\037 RESET\002\n" + " \n" + "The \002LEVELS\002 command allows fine control over the meaning of\n" + "the numeric access levels used for channels. With this\n" + "command, you can define the access level required for most\n" + "of %S's functions. (The \002SET FOUNDER\002 and this command\n" + "are always restricted to the channel founder.)\n" + " \n" + "\002LEVELS SET\002 allows the access level for a function or group of\n" + "functions to be changed. \002LEVELS DISABLE\002 (or \002DIS\002 for short)\n" + "disables an automatic feature or disallows access to a\n" + "function by anyone, INCLUDING the founder (although, the founder\n" + "can always reenable it).\n" + " \n" + "\002LEVELS LIST\002 shows the current levels for each function or\n" + "group of functions. \002LEVELS RESET\002 resets the levels to the\n" + "default levels of a newly-created channel (see\n" + "\002HELP ACCESS LEVELS\002).\n" + " \n" + "For a list of the features and functions whose levels can be\n" + "set, see \002HELP LEVELS DESC\002.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "LEVELS", CHAN_LEVELS_SYNTAX); + SyntaxError(source, "LEVELS", _("LEVELS \037channel\037 {SET | DIS[ABLE] | LIST | RESET} [\037item\037 [\037level\037]]")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_ACCESS); - source.Reply(CHAN_HELP_CMD_LEVELS); + source.Reply(_(" ACCESS Modify the list of privileged users")); + source.Reply(_(" LEVELS Redefine the meanings of access levels")); } }; diff --git a/modules/core/cs_akick.cpp b/modules/core/cs_akick.cpp index 34d3c8369..11b5485ff 100644 --- a/modules/core/cs_akick.cpp +++ b/modules/core/cs_akick.cpp @@ -64,7 +64,7 @@ class AkickListCallback : public NumberList ~AkickListCallback() { if (!SentHeader) - source.Reply(CHAN_AKICK_NO_MATCH, source.ci->name.c_str()); + source.Reply(_("No matching entries on %s autokick list."), source.ci->name.c_str()); } virtual void HandleNumber(unsigned Number) @@ -75,7 +75,7 @@ class AkickListCallback : public NumberList if (!SentHeader) { SentHeader = true; - source.Reply(CHAN_AKICK_LIST_HEADER, source.ci->name.c_str()); + source.Reply(_("Autokick list for %s:"), source.ci->name.c_str()); } DoList(source, Number - 1, source.ci->GetAkick(Number - 1)); @@ -83,7 +83,7 @@ class AkickListCallback : public NumberList static void DoList(CommandSource &source, unsigned index, AutoKick *akick) { - source.Reply(CHAN_AKICK_LIST_FORMAT, index + 1, akick->HasFlag(AK_ISNICK) ? akick->nc->display.c_str() : akick->mask.c_str(), !akick->reason.empty() ? akick->reason.c_str() : GetString(source.u, NO_REASON).c_str()); + source.Reply(_(" %3d %s (%s)"), index + 1, akick->HasFlag(AK_ISNICK) ? akick->nc->display.c_str() : akick->mask.c_str(), !akick->reason.empty() ? akick->reason.c_str() : GetString(source.u->Account(), LanguageString::NO_REASON).c_str()); } }; @@ -102,7 +102,7 @@ class AkickViewCallback : public AkickListCallback if (!SentHeader) { SentHeader = true; - source.Reply(CHAN_AKICK_LIST_HEADER, source.ci->name.c_str()); + source.Reply(_("Autokick list for %s:"), source.ci->name.c_str()); } DoList(source, Number - 1, source.ci->GetAkick(Number - 1)); @@ -116,12 +116,12 @@ class AkickViewCallback : public AkickListCallback if (akick->addtime) timebuf = do_strftime(akick->addtime); else - timebuf = GetString(u, UNKNOWN); + timebuf = GetString(u->Account(), LanguageString::UNKNOWN); - source.Reply(CHAN_AKICK_VIEW_FORMAT, index + 1, akick->HasFlag(AK_ISNICK) ? akick->nc->display.c_str() : akick->mask.c_str(), !akick->creator.empty() ? akick->creator.c_str() : GetString(u, UNKNOWN).c_str(), timebuf.c_str(), !akick->reason.empty() ? akick->reason.c_str() : GetString(u, NO_REASON).c_str()); + source.Reply(LanguageString::CHAN_AKICK_VIEW_FORMAT, index + 1, akick->HasFlag(AK_ISNICK) ? akick->nc->display.c_str() : akick->mask.c_str(), !akick->creator.empty() ? akick->creator.c_str() : GetString(u->Account(), LanguageString::UNKNOWN).c_str(), timebuf.c_str(), !akick->reason.empty() ? akick->reason.c_str() : GetString(u->Account(), LanguageString::NO_REASON).c_str()); if (akick->last_used) - source.Reply(CHAN_AKICK_LAST_USED, do_strftime(akick->last_used).c_str()); + source.Reply(_(" Last used %s"), do_strftime(akick->last_used).c_str()); } }; @@ -143,11 +143,11 @@ class AkickDelCallback : public NumberList Log(override ? LOG_OVERRIDE : LOG_COMMAND, u, c, ci) << "DEL on " << Deleted << " users"; if (!Deleted) - source.Reply(CHAN_AKICK_NO_MATCH, ci->name.c_str()); + source.Reply(_("No matching entries on %s autokick list."), ci->name.c_str()); else if (Deleted == 1) - source.Reply(CHAN_AKICK_DELETED_ONE, ci->name.c_str()); + source.Reply(_("Deleted 1 entry from %s autokick list."), ci->name.c_str()); else - source.Reply(CHAN_AKICK_DELETED_SEVERAL, Deleted, ci->name.c_str()); + source.Reply(_("Deleted %d entries from %s autokick list."), Deleted, ci->name.c_str()); } void HandleNumber(unsigned Number) @@ -184,7 +184,7 @@ class CommandCSAKick : public Command { if (na->HasFlag(NS_FORBIDDEN)) { - source.Reply(NICK_X_FORBIDDEN, mask.c_str()); + source.Reply(LanguageString::NICK_X_FORBIDDEN, mask.c_str()); return; } @@ -194,7 +194,7 @@ class CommandCSAKick : public Command /* Check excepts BEFORE we get this far */ if (ModeManager::FindChannelModeByName(CMODE_EXCEPT) && is_excepted_mask(ci, mask)) { - source.Reply(CHAN_EXCEPTED, mask.c_str(), ci->name.c_str()); + source.Reply(LanguageString::CHAN_EXCEPTED, mask.c_str(), ci->name.c_str()); return; } @@ -206,7 +206,7 @@ class CommandCSAKick : public Command int16 nc_level = nc_access ? nc_access->level : 0, u_level = u_access ? u_access->level : 0; if (nc == ci->founder || nc_level >= u_level) { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); return; } } @@ -224,7 +224,7 @@ class CommandCSAKick : public Command if ((check_access(u2, ci, CA_FOUNDER) || u2_level >= u_level) && entry_mask.Matches(u2)) { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); return; } } @@ -245,7 +245,7 @@ class CommandCSAKick : public Command Anope::string buf = na2->nick + "!" + na2->last_usermask; if (Anope::Match(buf, mask)) { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); return; } } @@ -257,14 +257,14 @@ class CommandCSAKick : public Command akick = ci->GetAkick(j); if (akick->HasFlag(AK_ISNICK) ? akick->nc == nc : mask.equals_ci(akick->mask)) { - source.Reply(CHAN_AKICK_ALREADY_EXISTS, akick->HasFlag(AK_ISNICK) ? akick->nc->display.c_str() : akick->mask.c_str(), ci->name.c_str()); + source.Reply(_("\002%s\002 already exists on %s autokick list."), akick->HasFlag(AK_ISNICK) ? akick->nc->display.c_str() : akick->mask.c_str(), ci->name.c_str()); return; } } if (ci->GetAkickCount() >= Config->CSAutokickMax) { - source.Reply(CHAN_AKICK_REACHED_LIMIT, Config->CSAutokickMax); + source.Reply(_("Sorry, you can only have %d autokick masks on a channel."), Config->CSAutokickMax); return; } @@ -278,7 +278,7 @@ class CommandCSAKick : public Command FOREACH_MOD(I_OnAkickAdd, OnAkickAdd(u, ci, akick)); - source.Reply(CHAN_AKICK_ADDED, mask.c_str(), ci->name.c_str()); + source.Reply(_("\002%s\002 added to %s autokick list."), mask.c_str(), ci->name.c_str()); this->DoEnforce(source); } @@ -294,7 +294,7 @@ class CommandCSAKick : public Command if (!ci->GetAkickCount()) { - source.Reply(CHAN_AKICK_LIST_EMPTY, ci->name.c_str()); + source.Reply(_("%s autokick list is empty."), ci->name.c_str()); return; } @@ -319,7 +319,7 @@ class CommandCSAKick : public Command if (i == ci->GetAkickCount()) { - source.Reply(CHAN_AKICK_NOT_FOUND, mask.c_str(), ci->name.c_str()); + source.Reply(_("\002%s\002 not found on %s autokick list."), mask.c_str(), ci->name.c_str()); return; } @@ -328,7 +328,7 @@ class CommandCSAKick : public Command ci->EraseAkick(i); - source.Reply(CHAN_AKICK_DELETED, mask.c_str(), ci->name.c_str()); + source.Reply(_("\002%s\002 deleted from %s autokick list."), mask.c_str(), ci->name.c_str()); } } @@ -344,7 +344,7 @@ class CommandCSAKick : public Command if (!ci->GetAkickCount()) { - source.Reply(CHAN_AKICK_LIST_EMPTY, ci->name.c_str()); + source.Reply(_("%s autokick list is empty."), ci->name.c_str()); return; } @@ -372,14 +372,14 @@ class CommandCSAKick : public Command if (!SentHeader) { SentHeader = true; - source.Reply(CHAN_AKICK_LIST_HEADER, ci->name.c_str()); + source.Reply(_("Autokick list for %s:"), ci->name.c_str()); } AkickListCallback::DoList(source, i, akick); } if (!SentHeader) - source.Reply(CHAN_AKICK_NO_MATCH, ci->name.c_str()); + source.Reply(_("No matching entries on %s autokick list."), ci->name.c_str()); } } @@ -395,7 +395,7 @@ class CommandCSAKick : public Command if (!ci->GetAkickCount()) { - source.Reply(CHAN_AKICK_LIST_EMPTY, ci->name.c_str()); + source.Reply(_("%s autokick list is empty."), ci->name.c_str()); return; } @@ -423,14 +423,14 @@ class CommandCSAKick : public Command if (!SentHeader) { SentHeader = true; - source.Reply(CHAN_AKICK_LIST_HEADER, ci->name.c_str()); + source.Reply(_("Autokick list for %s:"), ci->name.c_str()); } AkickViewCallback::DoList(source, i, akick); } if (!SentHeader) - source.Reply(CHAN_AKICK_NO_MATCH, ci->name.c_str()); + source.Reply(_("No matching entries on %s autokick list."), ci->name.c_str()); } } @@ -443,7 +443,7 @@ class CommandCSAKick : public Command if (!c) { - source.Reply(CHAN_X_NOT_IN_USE, ci->name.c_str()); + source.Reply(LanguageString::CHAN_X_NOT_IN_USE, ci->name.c_str()); return; } @@ -458,7 +458,7 @@ class CommandCSAKick : public Command bool override = !check_access(u, ci, CA_AKICK); Log(override ? LOG_OVERRIDE : LOG_COMMAND, u, this, ci) << "ENFORCE, affects " << count << " users"; - source.Reply(CHAN_AKICK_ENFORCE_DONE, ci->name.c_str(), count); + source.Reply(_("AKICK ENFORCE for \002%s\002 complete; \002%d\002 users were affected."), ci->name.c_str(), count); } void DoClear(CommandSource &source) @@ -469,7 +469,7 @@ class CommandCSAKick : public Command Log(override ? LOG_OVERRIDE : LOG_COMMAND, u, this, ci) << "CLEAR"; ci->ClearAkick(); - source.Reply(CHAN_AKICK_CLEAR, ci->name.c_str()); + source.Reply(_("Channel %s akick list has been cleared."), ci->name.c_str()); } public: @@ -489,9 +489,9 @@ class CommandCSAKick : public Command if (mask.empty() && (cmd.equals_ci("ADD") || cmd.equals_ci("DEL"))) this->OnSyntaxError(source, cmd); else if (!check_access(u, ci, CA_AKICK) && !u->Account()->HasPriv("chanserv/access/modify")) - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); else if (!cmd.equals_ci("LIST") && !cmd.equals_ci("VIEW") && !cmd.equals_ci("ENFORCE") && readonly) - source.Reply(CHAN_AKICK_DISABLED); + source.Reply(_("Sorry, channel autokick list modification is temporarily disabled.")); else if (cmd.equals_ci("ADD")) this->DoAdd(source, params); else if (cmd.equals_ci("DEL")) @@ -512,18 +512,56 @@ class CommandCSAKick : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(CHAN_HELP_AKICK); + source.Reply(_("Syntax: \002AKICK \037channel\037 ADD {\037nick\037 | \037mask\037} [\037reason\037]\002\n" + " \002AKICK \037channel\037 DEL {\037nick\037 | \037mask\037 | \037entry-num\037 | \037list\037}\002\n" + " \002AKICK \037channel\037 LIST [\037mask\037 | \037entry-num\037 | \037list\037]\002\n" + " \002AKICK \037channel\037 VIEW [\037mask\037 | \037entry-num\037 | \037list\037]\002\n" + " \002AKICK \037channel\037 ENFORCE\002\n" + " \002AKICK \037channel\037 CLEAR\002\n" + " \n" + "Maintains the \002AutoKick list\002 for a channel. If a user\n" + "on the AutoKick list attempts to join the channel,\n" + "%S will ban that user from the channel, then kick\n" + "the user.\n" + " \n" + "The \002AKICK ADD\002 command adds the given nick or usermask\n" + "to the AutoKick list. If a \037reason\037 is given with\n" + "the command, that reason will be used when the user is\n" + "kicked; if not, the default reason is \"You have been\n" + "banned from the channel\".\n" + "When akicking a \037registered nick\037 the nickserv account\n" + "will be added to the akick list instead of the mask.\n" + "All users within that nickgroup will then be akicked.\n" + " \n" + "The \002AKICK DEL\002 command removes the given nick or mask\n" + "from the AutoKick list. It does not, however, remove any\n" + "bans placed by an AutoKick; those must be removed\n" + "manually.\n" + " \n" + "The \002AKICK LIST\002 command displays the AutoKick list, or\n" + "optionally only those AutoKick entries which match the\n" + "given mask.\n" + " \n" + "The \002AKICK VIEW\002 command is a more verbose version of\n" + "\002AKICK LIST\002 command.\n" + " \n" + "The \002AKICK ENFORCE\002 command causes %S to enforce the\n" + "current AKICK list by removing those users who match an\n" + "AKICK mask.\n" + " \n" + "The \002AKICK CLEAR\002 command clears all entries of the\n" + "akick list.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "AKICK", CHAN_AKICK_SYNTAX); + SyntaxError(source, "AKICK", _("AKICK \037channel\037 {ADD | DEL | LIST | VIEW | ENFORCE | CLEAR} [\037nick-or-usermask\037] [\037reason\037]")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_AKICK); + source.Reply(_(" AKICK Maintain the AutoKick list")); } }; diff --git a/modules/core/cs_ban.cpp b/modules/core/cs_ban.cpp index 8ff5319fb..9d2291771 100644 --- a/modules/core/cs_ban.cpp +++ b/modules/core/cs_ban.cpp @@ -36,21 +36,21 @@ class CommandCSBan : public Command uint16 u_level = u_access ? u_access->level : 0, u2_level = u2_access ? u2_access->level : 0; if (!c) - source.Reply(CHAN_X_NOT_IN_USE, chan.c_str()); + source.Reply(LanguageString::CHAN_X_NOT_IN_USE, chan.c_str()); else if (!u2) - source.Reply(NICK_X_NOT_IN_USE, target.c_str()); + source.Reply(LanguageString::NICK_X_NOT_IN_USE, target.c_str()); else if (!is_same ? !check_access(u, ci, CA_BAN) : !check_access(u, ci, CA_BANME)) - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); else if (!is_same && ci->HasFlag(CI_PEACE) && u2_level >= u_level) - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); /* * Dont ban/kick the user on channels where he is excepted * to prevent services <-> server wars. */ else if (matches_list(ci->c, u2, CMODE_EXCEPT)) - source.Reply(CHAN_EXCEPTED, u2->nick.c_str(), ci->name.c_str()); + source.Reply(LanguageString::CHAN_EXCEPTED, u2->nick.c_str(), ci->name.c_str()); else if (u2->IsProtected()) - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); else { Anope::string mask; @@ -76,18 +76,23 @@ class CommandCSBan : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(CHAN_HELP_BAN); + source.Reply(_("Syntax: \002BAN \037#channel\037 \037nick\037 [\037reason\037]\002\n" + " \n" + "Bans a selected nick on a channel.\n" + " \n" + "By default, limited to AOPs or those with level 5 access \n" + "and above on the channel.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "BAN", CHAN_BAN_SYNTAX); + SyntaxError(source, "BAN", _("BAN \037#channel\037 \037nick\037 [\037reason\037]")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_BAN); + source.Reply(_(" BAN Bans a selected nick on a channel")); } }; diff --git a/modules/core/cs_clearusers.cpp b/modules/core/cs_clearusers.cpp index e171814dd..b4786209c 100644 --- a/modules/core/cs_clearusers.cpp +++ b/modules/core/cs_clearusers.cpp @@ -31,9 +31,9 @@ class CommandCSClearUsers : public Command Anope::string modebuf; if (!c) - source.Reply(CHAN_X_NOT_IN_USE, chan.c_str()); + source.Reply(LanguageString::CHAN_X_NOT_IN_USE, chan.c_str()); else if (!check_access(u, ci, CA_FOUNDER)) - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); Anope::string buf = "CLEARUSERS command from " + u->nick + " (" + u->Account()->display + ")"; @@ -44,25 +44,30 @@ class CommandCSClearUsers : public Command c->Kick(NULL, uc->user, "%s", buf.c_str()); } - source.Reply(CHAN_CLEARED_USERS, chan.c_str()); + source.Reply(_("All users have been kicked from \2%s\2."), chan.c_str()); return MOD_CONT; } bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(CHAN_HELP_CLEARUSERS); + source.Reply(_("Syntax: \002CLEARUSERS \037channel\037\002\n" + " \n" + "Tells %S to clear (kick) all users certain settings on a channel." + " \n" + "By default, limited to those with founder access on the\n" + "channel.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "CLEAR", CHAN_CLEARUSERS_SYNTAX); + SyntaxError(source, "CLEAR", _("CLEARUSERS \037channel\037")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_CLEARUSERS); + source.Reply(_(" CLEARUSERS Tells ChanServ to clear (kick) all users on a channel")); } }; diff --git a/modules/core/cs_clone.cpp b/modules/core/cs_clone.cpp index 7f4d3ca89..9222819fe 100644 --- a/modules/core/cs_clone.cpp +++ b/modules/core/cs_clone.cpp @@ -31,24 +31,24 @@ public: if (!check_access(u, ci, CA_SET)) { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); return MOD_CONT; } ChannelInfo *target_ci = cs_findchan(target); if (!target_ci) { - source.Reply(CHAN_X_NOT_REGISTERED, target.c_str()); + source.Reply(LanguageString::CHAN_X_NOT_REGISTERED, target.c_str()); return MOD_CONT; } if (!IsFounder(u, ci) || !IsFounder(u, target_ci)) { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); return MOD_CONT; } if (Config->CSMaxReg && u->Account()->channelcount >= Config->CSMaxReg && !u->Account()->HasPriv("chanserv/no-register-limit")) { - source.Reply(u->Account()->channelcount > Config->CSMaxReg ? CHAN_EXCEEDED_CHANNEL_LIMIT : CHAN_REACHED_CHANNEL_LIMIT, Config->CSMaxReg); + source.Reply(u->Account()->channelcount > Config->CSMaxReg ? LanguageString::CHAN_EXCEEDED_CHANNEL_LIMIT : LanguageString::CHAN_REACHED_CHANNEL_LIMIT, Config->CSMaxReg); return MOD_CONT; } @@ -100,7 +100,7 @@ public: FOREACH_MOD(I_OnChanRegistered, OnChanRegistered(target_ci)); - source.Reply(CHAN_CLONED, channel.c_str(), target.c_str()); + source.Reply(_("All settings from \002%s\002 have been transferred to \002%s\002"), channel.c_str(), target.c_str()); } else if (what.equals_ci("ACCESS")) { @@ -111,7 +111,7 @@ public: target_ci->AddAccess(access->mask, access->level, access->creator, access->last_seen); } - source.Reply(CHAN_CLONED_ACCESS, channel.c_str(), target.c_str()); + source.Reply(_("All access entries from \002%s\002 have been transferred to \002%s\002"), channel.c_str(), target.c_str()); } else if (what.equals_ci("AKICK")) { @@ -125,7 +125,7 @@ public: target_ci->AddAkick(akick->creator, akick->mask, akick->reason, akick->addtime, akick->last_used); } - source.Reply(CHAN_CLONED_AKICK, channel.c_str(), target.c_str()); + source.Reply(_("All akick entries from \002%s\002 have been transferred to \002%s\002"), channel.c_str(), target.c_str()); } else if (what.equals_ci("BADWORDS")) { @@ -136,7 +136,7 @@ public: target_ci->AddBadWord(bw->word, bw->type); } - source.Reply(CHAN_CLONED_BADWORDS, channel.c_str(), target.c_str()); + source.Reply(_("All badword entries from \002%s\002 have been transferred to \002%s\002"), channel.c_str(), target.c_str()); } else { @@ -151,18 +151,23 @@ public: bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(CHAN_HELP_CLONE); + source.Reply(_("Syntax: \002CLONE \037channel\037 \037target\037 [all | access | akick | badwords]\002\n" + " \n" + "Copies all settings, access, akicks, etc from channel to the\n" + "target channel. If access, akick, or badwords is specified then only\n" + "the respective settings are transferred. You must have founder level\n" + "access to \037channel\037 and \037target\037.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "CLONE", CHAN_CLONE_SYNTAX); + SyntaxError(source, "CLONE", _("CLONE \037channel\037 \037target\037")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_CLONE); + source.Reply(_(" CLONE Copy all settings from one channel to another")); } }; diff --git a/modules/core/cs_drop.cpp b/modules/core/cs_drop.cpp index b5ab4f981..af01b9726 100644 --- a/modules/core/cs_drop.cpp +++ b/modules/core/cs_drop.cpp @@ -31,7 +31,7 @@ class CommandCSDrop : public Command if (readonly) { - source.Reply(CHAN_DROP_DISABLED); // XXX: READ_ONLY_MODE? + source.Reply(_("Sorry, channel de-registration is temporarily disabled.")); // XXX: READ_ONLY_MODE? return MOD_CONT; } @@ -39,19 +39,19 @@ class CommandCSDrop : public Command if (ci->HasFlag(CI_FORBIDDEN) && !u->Account()->HasCommand("chanserv/drop")) { - source.Reply(CHAN_X_FORBIDDEN, chan.c_str()); + source.Reply(LanguageString::CHAN_X_FORBIDDEN, chan.c_str()); return MOD_CONT; } if (ci->HasFlag(CI_SUSPENDED) && !u->Account()->HasCommand("chanserv/drop")) { - source.Reply(CHAN_X_FORBIDDEN, chan.c_str()); + source.Reply(LanguageString::CHAN_X_FORBIDDEN, chan.c_str()); return MOD_CONT; } if ((ci->HasFlag(CI_SECUREFOUNDER) ? !IsFounder(u, ci) : !check_access(u, ci, CA_FOUNDER)) && !u->Account()->HasCommand("chanserv/drop")) { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); return MOD_CONT; } @@ -71,7 +71,7 @@ class CommandCSDrop : public Command delete ci; - source.Reply(CHAN_DROPPED, chan.c_str()); + source.Reply(_("Channel \002%s\002 has been dropped."), chan.c_str()); FOREACH_MOD(I_OnChanDrop, OnChanDrop(chan)); @@ -82,21 +82,27 @@ class CommandCSDrop : public Command { User *u = source.u; if (u->Account() && u->Account()->IsServicesOper()) - source.Reply(CHAN_SERVADMIN_HELP_DROP); + source.Reply(_("Syntax: \002DROP \037channel\037\002\n" + " \n" + "Unregisters the named channel. Only \002Services Operators\002\n" + "can drop a channel for which they have not identified.")); else - source.Reply(CHAN_HELP_DROP); + source.Reply(_("Syntax: \002DROP \037channel\037\002\n" + " \n" + "Unregisters the named channel. Can only be used by\n" + "\002channel founder\002.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "DROP", CHAN_DROP_SYNTAX); + SyntaxError(source, "DROP", _("DROP \037channel\037")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_DROP); + source.Reply(_(" DROP Cancel the registration of a channel")); } }; diff --git a/modules/core/cs_forbid.cpp b/modules/core/cs_forbid.cpp index b6246c578..3fc054a73 100644 --- a/modules/core/cs_forbid.cpp +++ b/modules/core/cs_forbid.cpp @@ -31,19 +31,19 @@ class CommandCSForbid : public Command if (Config->ForceForbidReason && reason.empty()) { - SyntaxError(source, "FORBID", CHAN_FORBID_SYNTAX_REASON); + SyntaxError(source, "FORBID", _("FORBID \037channel\037 \037reason\037")); return MOD_CONT; } if (chan[0] != '#') { - source.Reply(CHAN_SYMBOL_REQUIRED); + source.Reply(LanguageString::CHAN_SYMBOL_REQUIRED); return MOD_CONT; } if (readonly) { - source.Reply(READ_ONLY_MODE); + source.Reply(LanguageString::READ_ONLY_MODE); return MOD_CONT; } @@ -74,7 +74,7 @@ class CommandCSForbid : public Command if (uc->user->HasMode(UMODE_OPER)) continue; - c->Kick(ChanServ, uc->user, "%s", !reason.empty() ? reason.c_str() : GetString(uc->user, CHAN_FORBID_REASON).c_str()); + c->Kick(ChanServ, uc->user, "%s", !reason.empty() ? reason.c_str() : GetString(uc->user->Account(), _("This channel has been forbidden.")).c_str()); } } @@ -88,7 +88,7 @@ class CommandCSForbid : public Command ircdproto->SendGlobops(ChanServ, "\2%s\2 used FORBID on channel \2%s\2", u->nick.c_str(), ci->name.c_str()); Log(LOG_ADMIN, u, this, ci) << (!ci->forbidreason.empty() ? ci->forbidreason : "No reason"); - source.Reply(CHAN_FORBID_SUCCEEDED, chan.c_str()); + source.Reply(_("Channel \002%s\002 is now forbidden."), chan.c_str()); FOREACH_MOD(I_OnChanForbidden, OnChanForbidden(ci)); @@ -97,18 +97,23 @@ class CommandCSForbid : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(CHAN_SERVADMIN_HELP_FORBID); + source.Reply(_("Syntax: \002FORBID \037channel\037 [\037reason\037]\002\n" + " \n" + "Disallows anyone from registering or using the given\n" + "channel. May be cancelled by dropping the channel.\n" + " \n" + "Reason may be required on certain networks.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "FORBID", CHAN_FORBID_SYNTAX); + SyntaxError(source, "FORBID", _("FORBID \037channel\037 [\037reason\037]")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_FORBID); + source.Reply(_(" FORBID Prevent a channel from being used")); } }; diff --git a/modules/core/cs_getkey.cpp b/modules/core/cs_getkey.cpp index cde4e7bb7..0842d2caf 100644 --- a/modules/core/cs_getkey.cpp +++ b/modules/core/cs_getkey.cpp @@ -29,38 +29,40 @@ class CommandCSGetKey : public Command if (!check_access(u, ci, CA_GETKEY) && !u->Account()->HasCommand("chanserv/getkey")) { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); return MOD_CONT; } Anope::string key; if (!ci->c || !ci->c->GetParam(CMODE_KEY, key)) { - source.Reply(CHAN_GETKEY_NOKEY, chan.c_str()); + source.Reply(_("The channel \002%s\002 has no key."), chan.c_str()); return MOD_CONT; } bool override = !check_access(u, ci, CA_GETKEY); Log(override ? LOG_OVERRIDE : LOG_COMMAND, u, this, ci); - source.Reply(CHAN_GETKEY_KEY, chan.c_str(), key.c_str()); + source.Reply(_("Key for channel \002%s\002 is \002%s\002."), chan.c_str(), key.c_str()); return MOD_CONT; } bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(CHAN_HELP_GETKEY); + source.Reply(_("Syntax: \002GETKEY \037channel\037\002\n" + " \n" + "Returns the key of the given channel.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "GETKEY", CHAN_GETKEY_SYNTAX); + SyntaxError(source, "GETKEY", _("GETKEY \037channel\037")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_GETKEY); + source.Reply(_(" GETKEY Returns the key of the given channel")); } }; diff --git a/modules/core/cs_help.cpp b/modules/core/cs_help.cpp index d74c7b2d5..b1916bace 100644 --- a/modules/core/cs_help.cpp +++ b/modules/core/cs_help.cpp @@ -32,14 +32,25 @@ class CommandCSHelp : public Command void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { User *u = source.u; - source.Reply(CHAN_HELP); + source.Reply(_("\002%S\002 allows you to register and control various\n" + "aspects of channels. %S can often prevent\n" + "malicious users from \"taking over\" channels by limiting\n" + "who is allowed channel operator privileges. Available\n" + "commands are listed below; to use them, type\n" + "\002%R%S \037command\037\002. For more information on a\n" + "specific command, type \002%R%S HELP \037command\037\002.")); for (CommandMap::const_iterator it = ChanServ->Commands.begin(); it != ChanServ->Commands.end(); ++it) if (!Config->HidePrivilegedCommands || it->second->permission.empty() || (u->Account() && u->Account()->HasCommand(it->second->permission))) it->second->OnServHelp(source); if (Config->CSExpire >= 86400) - source.Reply(CHAN_HELP_EXPIRES, Config->CSExpire / 86400); + source.Reply(_("Note that any channel which is not used for %d days\n" + "(i.e. which no user on the channel's access list enters\n" + "for that period of time) will be automatically dropped."), Config->CSExpire / 86400); if (u->Account() && u->Account()->IsServicesOper()) - source.Reply(CHAN_SERVADMIN_HELP); + source.Reply(_(" \n" + "Services Operators can also drop any channel without needing\n" + "to identify via password, and may view the access, AKICK,\n" + "and level setting lists for any channel.")); } }; diff --git a/modules/core/cs_info.cpp b/modules/core/cs_info.cpp index dade872c0..b7b4ffacd 100644 --- a/modules/core/cs_info.cpp +++ b/modules/core/cs_info.cpp @@ -47,9 +47,9 @@ class CommandCSInfo : public Command if (ci->HasFlag(CI_FORBIDDEN)) { if (u->HasMode(UMODE_OPER) && !ci->forbidby.empty()) - source.Reply(CHAN_X_FORBIDDEN_OPER, chan.c_str(), ci->forbidby.c_str(), !ci->forbidreason.empty() ? ci->forbidreason.c_str() : GetString(u, NO_REASON).c_str()); + source.Reply(LanguageString::CHAN_X_FORBIDDEN_OPER, chan.c_str(), ci->forbidby.c_str(), !ci->forbidreason.empty() ? ci->forbidreason.c_str() : GetString(u->Account(), LanguageString::NO_REASON).c_str()); else - source.Reply(CHAN_X_FORBIDDEN, chan.c_str()); + source.Reply(LanguageString::CHAN_X_FORBIDDEN, chan.c_str()); return MOD_CONT; } @@ -58,55 +58,55 @@ class CommandCSInfo : public Command if (has_auspex || check_access(u, ci, CA_INFO)) show_all = true; - source.Reply(CHAN_INFO_HEADER, chan.c_str()); - source.Reply(CHAN_INFO_NO_FOUNDER, ci->founder->display.c_str()); + source.Reply(LanguageString::CHAN_INFO_HEADER, chan.c_str()); + source.Reply(_(" Founder: %s"), ci->founder->display.c_str()); if (show_all && ci->successor) - source.Reply(CHAN_INFO_NO_SUCCESSOR, ci->successor->display.c_str()); + source.Reply(_(" Successor: %s"), ci->successor->display.c_str()); - source.Reply(CHAN_INFO_DESCRIPTION, ci->desc.c_str()); - source.Reply(CHAN_INFO_TIME_REGGED, do_strftime(ci->time_registered).c_str()); - source.Reply(CHAN_INFO_LAST_USED, do_strftime(ci->last_used).c_str()); + source.Reply(_(" Description: %s"), ci->desc.c_str()); + source.Reply(_(" Registered: %s"), do_strftime(ci->time_registered).c_str()); + source.Reply(_(" Last used: %s"), do_strftime(ci->last_used).c_str()); ModeLock *secret = ci->GetMLock(CMODE_SECRET); if (!ci->last_topic.empty() && (show_all || ((!secret || secret->set == false) && (!ci->c || !ci->c->HasMode(CMODE_SECRET))))) { - source.Reply(CHAN_INFO_LAST_TOPIC, ci->last_topic.c_str()); - source.Reply(CHAN_INFO_TOPIC_SET_BY, ci->last_topic_setter.c_str()); + source.Reply(_(" Last topic: %s"), ci->last_topic.c_str()); + source.Reply(_(" Topic set by: %s"), ci->last_topic_setter.c_str()); } if (show_all) { - source.Reply(CHAN_INFO_BANTYPE, ci->bantype); + source.Reply(_(" Ban type: %d"), ci->bantype); Anope::string optbuf; - CheckOptStr(optbuf, CI_KEEPTOPIC, GetString(u, CHAN_INFO_OPT_KEEPTOPIC), ci, u->Account()); - CheckOptStr(optbuf, CI_OPNOTICE, GetString(u, CHAN_INFO_OPT_OPNOTICE), ci, u->Account()); - CheckOptStr(optbuf, CI_PEACE, GetString(u, CHAN_INFO_OPT_PEACE), ci, u->Account()); - CheckOptStr(optbuf, CI_PRIVATE, GetString(u, NICK_INFO_OPT_PRIVATE), ci, u->Account()); - CheckOptStr(optbuf, CI_RESTRICTED, GetString(u, CHAN_INFO_OPT_RESTRICTED), ci, u->Account()); - CheckOptStr(optbuf, CI_SECURE, GetString(u, CHAN_INFO_OPT_SECURE), ci, u->Account()); - CheckOptStr(optbuf, CI_SECUREFOUNDER, GetString(u, CHAN_INFO_OPT_SECUREFOUNDER), ci, u->Account()); - CheckOptStr(optbuf, CI_SECUREOPS, GetString(u, CHAN_INFO_OPT_SECUREOPS), ci, u->Account()); + CheckOptStr(optbuf, CI_KEEPTOPIC, GetString(u->Account(), _("Topic Retention")), ci, u->Account()); + CheckOptStr(optbuf, CI_OPNOTICE, GetString(u->Account(), _("OP Notice")), ci, u->Account()); + CheckOptStr(optbuf, CI_PEACE, GetString(u->Account(), _("Peace")), ci, u->Account()); + CheckOptStr(optbuf, CI_PRIVATE, GetString(u->Account(), _("Private")), ci, u->Account()); + CheckOptStr(optbuf, CI_RESTRICTED, GetString(u->Account(), _("Restricted Access")), ci, u->Account()); + CheckOptStr(optbuf, CI_SECURE, GetString(u->Account(), _("Secure")), ci, u->Account()); + CheckOptStr(optbuf, CI_SECUREFOUNDER, GetString(u->Account(), _("Secure Founder")), ci, u->Account()); + CheckOptStr(optbuf, CI_SECUREOPS, GetString(u->Account(), _("Secure Ops")), ci, u->Account()); if (ci->HasFlag(CI_SIGNKICK)) - CheckOptStr(optbuf, CI_SIGNKICK, GetString(u, CHAN_INFO_OPT_SIGNKICK), ci, u->Account()); + CheckOptStr(optbuf, CI_SIGNKICK, GetString(u->Account(), _("Signed kicks")), ci, u->Account()); else - CheckOptStr(optbuf, CI_SIGNKICK_LEVEL, GetString(u, CHAN_INFO_OPT_SIGNKICK), ci, u->Account()); - CheckOptStr(optbuf, CI_TOPICLOCK, GetString(u, CHAN_INFO_OPT_TOPICLOCK), ci, u->Account()); - CheckOptStr(optbuf, CI_XOP, GetString(u, CHAN_INFO_OPT_XOP), ci, u->Account()); - CheckOptStr(optbuf, CI_PERSIST, GetString(u, CHAN_INFO_OPT_PERSIST), ci, u->Account()); + CheckOptStr(optbuf, CI_SIGNKICK_LEVEL, GetString(u->Account(), _("Signed kicks")), ci, u->Account()); + CheckOptStr(optbuf, CI_TOPICLOCK, GetString(u->Account(), _("Topic Lock")), ci, u->Account()); + CheckOptStr(optbuf, CI_XOP, GetString(u->Account(), _("xOP lists system")), ci, u->Account()); + CheckOptStr(optbuf, CI_PERSIST, GetString(u->Account(), _("Persistant")), ci, u->Account()); - source.Reply(NICK_INFO_OPTIONS, optbuf.empty() ? GetString(u, NICK_INFO_OPT_NONE).c_str() : optbuf.c_str()); - source.Reply(CHAN_INFO_MODE_LOCK, get_mlock_modes(ci, 1).c_str()); + source.Reply(LanguageString::NICK_INFO_OPTIONS, optbuf.empty() ? _("None") : optbuf.c_str()); + source.Reply(_(" Mode lock: %s"), get_mlock_modes(ci, 1).c_str()); // XXX: we could just as easily (and tidily) merge this in with the flags display above. if (ci->HasFlag(CI_NO_EXPIRE)) - source.Reply(CHAN_INFO_NO_EXPIRE); + source.Reply(_("This channel will not expire.")); else - source.Reply(CHAN_INFO_EXPIRE, do_strftime(ci->last_used + Config->CSExpire).c_str()); + source.Reply(_(" Expires on: %s"), do_strftime(ci->last_used + Config->CSExpire).c_str()); } if (ci->HasFlag(CI_SUSPENDED)) - source.Reply(CHAN_X_SUSPENDED, ci->forbidby.c_str(), !ci->forbidreason.empty() ? ci->forbidreason.c_str() : GetString(u, NO_REASON).c_str()); + source.Reply(_(" Suspended: [%s] %s"), ci->forbidby.c_str(), !ci->forbidreason.empty() ? ci->forbidreason.c_str() : GetString(u->Account(), LanguageString::NO_REASON).c_str()); FOREACH_MOD(I_OnChanInfo, OnChanInfo(u, ci, show_all)); @@ -115,19 +115,24 @@ class CommandCSInfo : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(CHAN_HELP_INFO); - + source.Reply(_("Syntax: \002INFO \037channel\037\002\n" + " \n" + "Lists information about the named registered channel,\n" + "including its founder, time of registration, last time\n" + "used, description, and mode lock, if any. If \002ALL\002 is \n" + "specified, the entry message and successor will also \n" + "be displayed.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "INFO", CHAN_INFO_SYNTAX); + SyntaxError(source, "INFO", _("INFO \037channel\037")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_INFO); + source.Reply(_(" INFO Lists information about the named registered channel")); } }; diff --git a/modules/core/cs_invite.cpp b/modules/core/cs_invite.cpp index a7a3a6e40..0f55c1e1e 100644 --- a/modules/core/cs_invite.cpp +++ b/modules/core/cs_invite.cpp @@ -30,7 +30,7 @@ class CommandCSInvite : public Command if (!(c = findchan(chan))) { - source.Reply(CHAN_X_NOT_IN_USE, chan.c_str()); + source.Reply(LanguageString::CHAN_X_NOT_IN_USE, chan.c_str()); return MOD_CONT; } @@ -38,7 +38,7 @@ class CommandCSInvite : public Command if (!check_access(u, ci, CA_INVITE)) { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); return MOD_CONT; } @@ -49,7 +49,7 @@ class CommandCSInvite : public Command { if (!(u2 = finduser(params[1]))) { - source.Reply(NICK_X_NOT_IN_USE, params[1].c_str()); + source.Reply(LanguageString::NICK_X_NOT_IN_USE, params[1].c_str()); return MOD_CONT; } } @@ -58,30 +58,35 @@ class CommandCSInvite : public Command Log(LOG_COMMAND, u, this, ci) << "for " << u2->nick; if (c->FindUser(u2)) - source.Reply(CHAN_INVITE_ALREADY_IN, c->name.c_str()); + source.Reply(_("You are already in \002%s\002! "), c->name.c_str()); else { ircdproto->SendInvite(whosends(ci), chan, u2->nick); - source.Reply(CHAN_INVITE_OTHER_SUCCESS, u2->nick.c_str(), c->name.c_str()); - u2->SendMessage(whosends(ci), CHAN_INVITE_SUCCESS, c->name.c_str()); + source.Reply(_("\002%s\002 has been invited to \002%s\002."), u2->nick.c_str(), c->name.c_str()); + u2->SendMessage(whosends(ci), _("You have been invited to \002%s\002."), c->name.c_str()); } return MOD_CONT; } bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(CHAN_HELP_INVITE); + source.Reply(_("Syntax: \002INVITE \037channel\037\002\n" + " \n" + "Tells %S to invite you into the given channel.\n" + " \n" + "By default, limited to AOPs or those with level 5 and above\n" + "on the channel.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "INVITE", CHAN_INVITE_SYNTAX); + SyntaxError(source, "INVITE", _("INVITE \037channel\037")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_INVITE); + source.Reply(_(" INVITE Tells ChanServ to invite you into a channel")); } }; diff --git a/modules/core/cs_kick.cpp b/modules/core/cs_kick.cpp index 1e7b5970d..5f89d6b16 100644 --- a/modules/core/cs_kick.cpp +++ b/modules/core/cs_kick.cpp @@ -36,17 +36,17 @@ class CommandCSKick : public Command uint16 u_level = u_access ? u_access->level : 0, u2_level = u2_access ? u2_access->level : 0; if (!c) - source.Reply(CHAN_X_NOT_IN_USE, chan.c_str()); + source.Reply(LanguageString::CHAN_X_NOT_IN_USE, chan.c_str()); else if (!u2) - source.Reply(NICK_X_NOT_IN_USE, target.c_str()); + source.Reply(LanguageString::NICK_X_NOT_IN_USE, target.c_str()); else if (!is_same ? !check_access(u, ci, CA_KICK) : !check_access(u, ci, CA_KICKME)) - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); else if (!is_same && (ci->HasFlag(CI_PEACE)) && u2_level >= u_level) - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); else if (u2->IsProtected()) - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); else if (!c->FindUser(u2)) - source.Reply(NICK_X_NOT_ON_CHAN, u2->nick.c_str(), c->name.c_str()); + source.Reply(LanguageString::NICK_X_NOT_ON_CHAN, u2->nick.c_str(), c->name.c_str()); else { // XXX @@ -62,18 +62,23 @@ class CommandCSKick : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(CHAN_HELP_KICK); + source.Reply(_("Syntax: \002KICK \037#channel\037 \037nick\037 [\037reason\037]\002\n" + " \n" + "Kicks a selected nick on a channel.\n" + " \n" + "By default, limited to AOPs or those with level 5 access \n" + "and above on the channel.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "KICK", CHAN_KICK_SYNTAX); + SyntaxError(source, "KICK", _("KICK \037#channel\037 \037nick\037 [\037reason\037]")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_KICK); + source.Reply(_(" KICK Kicks a selected nick from a channel")); } }; diff --git a/modules/core/cs_list.cpp b/modules/core/cs_list.cpp index f5773a901..b95bc3144 100644 --- a/modules/core/cs_list.cpp +++ b/modules/core/cs_list.cpp @@ -35,37 +35,27 @@ public: if (Config->CSListOpersOnly && !u->HasMode(UMODE_OPER)) { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); return MOD_STOP; } if (pattern[0] == '#') { Anope::string tmp = myStrGetToken(pattern.substr(1), '-', 0); /* Read FROM out */ - if (tmp.empty()) + if (tmp.empty() || !tmp.is_number_only()) { - source.Reply(LIST_INCORRECT_RANGE); - source.Reply(CS_LIST_INCORRECT_RANGE); - return MOD_CONT; - } - if (!tmp.is_number_only()) - { - source.Reply(LIST_INCORRECT_RANGE); - source.Reply(CS_LIST_INCORRECT_RANGE); + source.Reply(LanguageString::LIST_INCORRECT_RANGE); + source.Reply(_("To search for channels starting with #, search for the channel\n" + "name without the #-sign prepended (\002anope\002 instead of \002#anope\002).")); return MOD_CONT; } from = convertTo<int>(tmp); tmp = myStrGetTokenRemainder(pattern, '-', 1); /* Read TO out */ - if (tmp.empty()) - { - source.Reply(LIST_INCORRECT_RANGE); - source.Reply(CS_LIST_INCORRECT_RANGE); - return MOD_CONT; - } - if (!tmp.is_number_only()) + if (tmp.empty() || !tmp.is_number_only()) { - source.Reply(LIST_INCORRECT_RANGE); - source.Reply(CS_LIST_INCORRECT_RANGE); + source.Reply(LanguageString::LIST_INCORRECT_RANGE); + source.Reply(_("To search for channels starting with #, search for the channel\n" + "name without the #-sign prepended (\002anope\002 instead of \002#anope\002).")); return MOD_CONT; } to = convertTo<int>(tmp); @@ -91,7 +81,7 @@ public: Anope::string spattern = "#" + pattern; - source.Reply(NICK_LIST_HEADER, pattern.c_str()); + source.Reply(LanguageString::LIST_HEADER, pattern.c_str()); for (registered_channel_map::const_iterator it = RegisteredChannelList.begin(), it_end = RegisteredChannelList.end(); it != it_end; ++it) { @@ -127,24 +117,29 @@ public: } } - source.Reply(CHAN_LIST_END, nchans > Config->CSListMax ? Config->CSListMax : nchans, nchans); + source.Reply(_("End of list - %d/%d matches shown."), nchans > Config->CSListMax ? Config->CSListMax : nchans, nchans); return MOD_CONT; } bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(CHAN_HELP_LIST); + source.Reply(_("Syntax: \002LIST \037pattern\037\002\n" + " \n" + "Lists all registered channels matching the given pattern.\n" + "(Channels with the \002PRIVATE\002 option set are not listed.)\n" + "Note that a preceding '#' specifies a range, channel names\n" + "are to be written without '#'.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "LIST", NICK_LIST_SYNTAX); + SyntaxError(source, "LIST", LanguageString::NICK_LIST_SYNTAX); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_LIST); + source.Reply(_(" LIST Lists all registered channels matching the given pattern")); } }; diff --git a/modules/core/cs_mode.cpp b/modules/core/cs_mode.cpp index 7a2005688..dce1d4206 100644 --- a/modules/core/cs_mode.cpp +++ b/modules/core/cs_mode.cpp @@ -46,18 +46,18 @@ class CommandCSMode : public Command ChannelMode *cm = ModeManager::FindChannelModeByChar(modes[i]); if (!cm || !cm->CanSet(u)) { - source.Reply(CHAN_MODE_LOCK_UNKNOWN, modes[i]); + source.Reply(_("Unknown mode character %c ignored."), modes[i]); break; } Anope::string mode_param; if (((cm->Type == MODE_STATUS || cm->Type == MODE_LIST) && !sep.GetToken(mode_param)) || (cm->Type == MODE_PARAM && adding && !sep.GetToken(mode_param))) - source.Reply(CHAN_MODE_LOCK_MISSING_PARAM, cm->ModeChar); + source.Reply(_("Missing parameter for mode %c."), cm->ModeChar); else { ci->SetMLock(cm, adding, mode_param, u->nick); if (!mode_param.empty()) mode_param = " " + mode_param; - source.Reply(CHAN_MODE_LOCKED, adding ? '+' : '-', cm->ModeChar, mode_param.c_str(), ci->name.c_str()); + source.Reply(_("%c%c%s locked on %s"), adding ? '+' : '-', cm->ModeChar, mode_param.c_str(), ci->name.c_str()); } } } @@ -89,22 +89,22 @@ class CommandCSMode : public Command ChannelMode *cm = ModeManager::FindChannelModeByChar(modes[i]); if (!cm || !cm->CanSet(u)) { - source.Reply(CHAN_MODE_LOCK_UNKNOWN, modes[i]); + source.Reply(_("Unknown mode character %c ignored."), modes[i]); break; } Anope::string mode_param; if (!cm->Type == MODE_REGULAR && !sep.GetToken(mode_param)) - source.Reply(CHAN_MODE_LOCK_MISSING_PARAM, cm->ModeChar); + source.Reply(_("Missing parameter for mode %c."), cm->ModeChar); else { if (ci->RemoveMLock(cm, mode_param)) { if (!mode_param.empty()) mode_param = " " + mode_param; - source.Reply(CHAN_MODE_UNLOCKED, adding == 1 ? '+' : '-', cm->ModeChar, mode_param.c_str(), ci->name.c_str()); + source.Reply(_("%c%c%s has been unlocked from %s."), adding == 1 ? '+' : '-', cm->ModeChar, mode_param.c_str(), ci->name.c_str()); } else - source.Reply(CHAN_MODE_NOT_LOCKED, cm->ModeChar, ci->name.c_str()); + source.Reply(_("%c is not locked on %s."), cm->ModeChar, ci->name.c_str()); } } } @@ -114,11 +114,11 @@ class CommandCSMode : public Command const std::multimap<ChannelModeName, ModeLock> &mlocks = ci->GetMLock(); if (mlocks.empty()) { - source.Reply(CHAN_MODE_LOCK_NONE, ci->name.c_str()); + source.Reply(_("Channel %s has no mode locks."), ci->name.c_str()); } else { - source.Reply(CHAN_MODE_LOCK_HEADER, ci->name.c_str()); + source.Reply(_("Mode locks for %s:"), ci->name.c_str()); for (std::multimap<ChannelModeName, ModeLock>::const_iterator it = mlocks.begin(), it_end = mlocks.end(); it != it_end; ++it) { const ModeLock &ml = it->second; @@ -132,7 +132,7 @@ class CommandCSMode : public Command Anope::string setter = ml.setter; if (setter.empty()) setter = ci->founder ? ci->founder->display : "Unknown"; - source.Reply(CHAN_MODE_LIST_FMT, ml.set ? '+' : '-', cm->ModeChar, modeparam.c_str(), setter.c_str(), do_strftime(ml.created).c_str()); + source.Reply(_("%c%c%s, by %s on %s"), ml.set ? '+' : '-', cm->ModeChar, modeparam.c_str(), setter.c_str(), do_strftime(ml.created).c_str()); } } } @@ -265,9 +265,9 @@ class CommandCSMode : public Command ChannelInfo *ci = source.ci; if (!ci || !ci->c) - source.Reply(CHAN_X_NOT_IN_USE, ci->name.c_str()); + source.Reply(LanguageString::CHAN_X_NOT_IN_USE, ci->name.c_str()); else if (!check_access(u, ci, CA_MODE) && !u->Account()->HasCommand("chanserv/mode")) - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); else if (subcommand.equals_ci("LOCK")) this->DoLock(source, params); else if (subcommand.equals_ci("SET")) @@ -280,18 +280,36 @@ class CommandCSMode : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(CHAN_HELP_MODE); + source.Reply(_("Syntax: \002MODE \037channel\037 LOCK {ADD|DEL|LIST} [\037what\037]\002\n" + " \002MODE \037channel\037 SET \037modes\037\002\n" + " \n" + "Mainly controls mode locks and mode access (which is different from channel access)\n" + "on a channel.\n" + " \n" + "The \002MODE LOCK\002 command allows you to add, delete, and view mode locks on a channel.\n" + "If a mode is locked on or off, services will not allow that mode to be changed.\n" + "Example:\n" + " \002MODE #channel LOCK ADD +bmnt *!*@*aol*\002\n" + " \n" + "The \002MODE SET\002 command allows you to set modes through services. Wildcards * and ? may\n" + "be given as parameters for list and status modes.\n" + "Example:\n" + " \002MODE #channel SET +v *\002\n" + " Sets voice status to all users in the channel.\n" + " \n" + " \002MODE #channel SET -b ~c:*\n" + " Clears all extended bans that start with ~c:")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "MODE", CHAN_MODE_SYNTAX); + SyntaxError(source, "MODE", _("MODE \037channel\037 {LOCK|SET} [\037modes\037 | {ADD|DEL|LIST} [\037what\037]]")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_MODE); + source.Reply(_(" MODE Control modes and mode locks on a channel")); } }; diff --git a/modules/core/cs_modes.cpp b/modules/core/cs_modes.cpp index 71210bfef..91748b941 100644 --- a/modules/core/cs_modes.cpp +++ b/modules/core/cs_modes.cpp @@ -54,19 +54,19 @@ class CommandModeBase : public Command uint16 u_level = u_access ? u_access->level : 0, u2_level = u2_access ? u2_access->level : 0; if (!c) - source.Reply(CHAN_X_NOT_IN_USE, chan.c_str()); + source.Reply(LanguageString::CHAN_X_NOT_IN_USE, chan.c_str()); else if (!ci) - source.Reply(CHAN_X_NOT_REGISTERED, chan.c_str()); + source.Reply(LanguageString::CHAN_X_NOT_REGISTERED, chan.c_str()); else if (!u2) - source.Reply(NICK_X_NOT_IN_USE, nick.c_str()); + source.Reply(LanguageString::NICK_X_NOT_IN_USE, nick.c_str()); else if (is_same ? !check_access(u, ci, levelself) : !check_access(u, ci, level)) - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); else if (!set && !is_same && ci->HasFlag(CI_PEACE) && u2_level >= u_level) - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); else if (!set && u2->IsProtected() && !is_same) - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); else if (!c->FindUser(u2)) - source.Reply(NICK_X_NOT_ON_CHAN, u2->nick.c_str(), c->name.c_str()); + source.Reply(LanguageString::NICK_X_NOT_ON_CHAN, u2->nick.c_str(), c->name.c_str()); else { if (set) @@ -101,18 +101,25 @@ class CommandCSOp : public CommandModeBase bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(CHAN_HELP_OP); + source.Reply(_("Syntax: \002OP [\037#channel\037] [\037nick\037]\002\n" + " \n" + "Ops a selected nick on a channel. If nick is not given,\n" + "it will op you. If channel is not given, it will op you\n" + "on every channel.\n" + " \n" + "By default, limited to AOPs or those with level 5 access \n" + "and above on the channel.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "OP", CHAN_OP_SYNTAX); + SyntaxError(source, "OP", _("OP [\037#channel\037] [\037nick\037]\002")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_OP); + source.Reply(_(" OP Gives Op status to a selected nick on a channel")); } }; @@ -132,18 +139,25 @@ class CommandCSDeOp : public CommandModeBase bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(CHAN_HELP_DEOP); + source.Reply(_("Syntax: \002DEOP [\037#channel\037] [\037nick\037]\002\n" + " \n" + "Deops a selected nick on a channel. If nick is not given,\n" + "it will deop you. If channel is not given, it will deop\n" + "you on every channel.\n" + " \n" + "By default, limited to AOPs or those with level 5 access \n" + "and above on the channel.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "DEOP", CHAN_DEOP_SYNTAX); + SyntaxError(source, "DEOP", _("DEOP [\037#channel\037] [\037nick\037]\002")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_DEOP); + source.Reply(_(" DEOP Deops a selected nick on a channel")); } }; @@ -163,18 +177,26 @@ class CommandCSVoice : public CommandModeBase bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(CHAN_HELP_VOICE); + source.Reply(_("Syntax: \002VOICE [\037#channel\037] [\037nick\037]\002\n" + " \n" + "Voices a selected nick on a channel. If nick is not given,\n" + "it will voice you. If channel is not given, it will voice you\n" + "on every channel.\n" + " \n" + "By default, limited to AOPs or those with level 5 access \n" + "and above on the channel, or to VOPs or those with level 3 \n" + "and above for self voicing.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "VOICE", CHAN_VOICE_SYNTAX); + SyntaxError(source, "VOICE", _("VOICE [\037#channel\037] [\037nick\037]\002")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_VOICE); + source.Reply(_(" VOICE Voices a selected nick on a channel")); } }; @@ -194,18 +216,26 @@ class CommandCSDeVoice : public CommandModeBase bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(CHAN_HELP_DEVOICE); + source.Reply(_("Syntax: \002DEVOICE [\037#channel\037] [\037nick\037]\002\n" + " \n" + "Devoices a selected nick on a channel. If nick is not given,\n" + "it will devoice you. If channel is not given, it will devoice\n" + "you on every channel.\n" + " \n" + "By default, limited to AOPs or those with level 5 access \n" + "and above on the channel, or to VOPs or those with level 3 \n" + "and above for self devoicing.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "DEVOICE", CHAN_DEVOICE_SYNTAX); + SyntaxError(source, "DEVOICE", _("DEVOICE [\037#channel\037] [\037nick\037]\002")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_DEVOICE); + source.Reply(_(" DEVOICE Devoices a selected nick on a channel")); } }; @@ -228,18 +258,25 @@ class CommandCSHalfOp : public CommandModeBase bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(CHAN_HELP_HALFOP); + source.Reply(_("Syntax: \002HALFOP [\037#channel\037] [\037nick\037]\002\n" + " \n" + "Halfops a selected nick on a channel. If nick is not given,\n" + "it will halfop you. If channel is not given, it will halfop\n" + "you on every channel.\n" + " \n" + "By default, limited to AOPs and those with level 5 access \n" + "and above on the channel, or to HOPs or those with level 4 \n")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "HALFOP", CHAN_HALFOP_SYNTAX); + SyntaxError(source, "HALFOP", _("HALFOP [\037#channel\037] [\037nick\037]\002")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_HALFOP); + source.Reply(_(" HALFOP Halfops a selected nick on a channel")); } }; @@ -262,18 +299,26 @@ class CommandCSDeHalfOp : public CommandModeBase bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(CHAN_HELP_DEHALFOP); + source.Reply(_("Syntax: \002DEHALFOP [\037#channel\037] [\037nick\037]\002\n" + " \n" + "Dehalfops a selected nick on a channel. If nick is not given,\n" + "it will dehalfop you. If channel is not given, it will dehalfop\n" + "you on every channel.\n" + " \n" + "By default, limited to AOPs and those with level 5 access \n" + "and above on the channel, or to HOPs or those with level 4 \n" + "and above for self dehalfopping.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "DEHALFOP", CHAN_DEHALFOP_SYNTAX); + SyntaxError(source, "DEHALFOP", _("DEHALFOP [\037#channel\037] [\037nick\037]\002")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_DEHALFOP); + source.Reply(_(" DEHALFOP Dehalfops a selected nick on a channel")); } }; @@ -296,18 +341,25 @@ class CommandCSProtect : public CommandModeBase bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(CHAN_HELP_PROTECT); + source.Reply(_("Syntax: \002PROTECT [\037#channel\037] [\037nick\037]\002\n" + " \n" + "Protects a selected nick on a channel. If nick is not given,\n" + "it will protect you. If channel is not given, it will protect\n" + "you on every channel.\n" + " \n" + "By default, limited to the founder, or to SOPs or those with \n" + "level 10 and above on the channel for self protecting.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "PROTECT", CHAN_PROTECT_SYNTAX); + SyntaxError(source, "PROTECT", _("PROTECT [\037#channel\037] [\037nick\037]\002")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_PROTECT); + source.Reply(_(" PROTECT Protects a selected nick on a channel")); } }; @@ -330,18 +382,24 @@ class CommandCSDeProtect : public CommandModeBase bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(CHAN_HELP_DEPROTECT); + source.Reply(_("Syntax: \002DEPROTECT [\037#channel\037] [\037nick\037]\002\n" + " \n" + "Deprotects a selected nick on a channel. If nick is not given,\n" + "it will deprotect you. If channel is not given, it will deprotect\n" + "you on every channel.\n" + " \n" + "By default, limited to the founder, or to SOPs or those with \n")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "DEPROTECT", CHAN_DEPROTECT_SYNTAX); + SyntaxError(source, "DEPROTECT", _("DEROTECT [\037#channel\037] [\037nick\037]\002")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_DEPROTECT); + source.Reply(_(" DEPROTECT Deprotects a selected nick on a channel")); } }; @@ -364,18 +422,24 @@ class CommandCSOwner : public CommandModeBase bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(CHAN_HELP_OWNER); + source.Reply(_("Syntax: \002OWNER [\037#channel\037] [\037nick\037]\002\n" + " \n" + "Gives the selected nick owner status on \002channel\002. If nick is not\n" + "given, it will give you owner. If channel is not given, it will\n" + "give you owner on every channel.\n" + " \n" + "Limited to those with founder access on the channel.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "OWNER", CHAN_OWNER_SYNTAX); + SyntaxError(source, "OWNER", _("OWNER [\037#channel\037] [\037nick\037]\002")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_OWNER); + source.Reply(_(" OWNER Gives you owner status on channel")); } }; @@ -398,18 +462,24 @@ class CommandCSDeOwner : public CommandModeBase bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(CHAN_HELP_DEOWNER); + source.Reply(_("Syntax: \002DEOWNER [\037#channel\037] [\037nick\037]\002\n" + " \n" + "Removes owner status from the selected nick on \002channel\002. If nick\n" + "is not given, it will deowner you. If channel is not given, it will\n" + "deowner you on every channel.\n" + " \n" + "Limited to those with founder access on the channel.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "DEOWNER", CHAN_DEOWNER_SYNTAX); + SyntaxError(source, "DEOWNER", _("DEOWNER [\037#channel\037] [\037nick\037]\002")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_DEOWNER); + source.Reply(_(" DEOWNER Removes your owner status on a channel")); } }; diff --git a/modules/core/cs_register.cpp b/modules/core/cs_register.cpp index 8407986e4..92d1746cb 100644 --- a/modules/core/cs_register.cpp +++ b/modules/core/cs_register.cpp @@ -32,22 +32,22 @@ class CommandCSRegister : public Command if (readonly) { - source.Reply(CHAN_REGISTER_DISABLED); + source.Reply(_("Sorry, channel registration is temporarily disabled.")); return MOD_CONT; } if (chan[0] == '&') - source.Reply(CHAN_REGISTER_NOT_LOCAL); + source.Reply(_("Local channels cannot be registered.")); else if (chan[0] != '#') - source.Reply(CHAN_SYMBOL_REQUIRED); + source.Reply(LanguageString::CHAN_SYMBOL_REQUIRED); else if (!ircdproto->IsChannelValid(chan)) - source.Reply(CHAN_X_INVALID, chan.c_str()); + source.Reply(LanguageString::CHAN_X_INVALID, chan.c_str()); else if (ci) - source.Reply(CHAN_ALREADY_REGISTERED, chan.c_str()); + source.Reply(_("Channel \002%s\002 is already registered!"), chan.c_str()); else if (c && !c->HasUserStatus(u, CMODE_OP)) - source.Reply(CHAN_MUST_BE_CHANOP); + source.Reply(_("You must be a channel operator to register the channel.")); else if (Config->CSMaxReg && u->Account()->channelcount >= Config->CSMaxReg && !u->Account()->HasPriv("chanserv/no-register-limit")) - source.Reply(u->Account()->channelcount > Config->CSMaxReg ? CHAN_EXCEEDED_CHANNEL_LIMIT : CHAN_REACHED_CHANNEL_LIMIT, Config->CSMaxReg); + source.Reply(u->Account()->channelcount > Config->CSMaxReg ? LanguageString::CHAN_EXCEEDED_CHANNEL_LIMIT : LanguageString::CHAN_REACHED_CHANNEL_LIMIT, Config->CSMaxReg); else { ci = new ChannelInfo(chan); @@ -66,7 +66,7 @@ class CommandCSRegister : public Command ci->bi = NULL; ++ci->founder->channelcount; Log(LOG_COMMAND, u, this, ci); - source.Reply(CHAN_REGISTERED, chan.c_str(), u->nick.c_str()); + source.Reply(_("Channel \002%s\002 registered under your nickname: %s"), chan.c_str(), u->nick.c_str()); /* Implement new mode lock */ if (c) @@ -98,18 +98,37 @@ class CommandCSRegister : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(CHAN_HELP_REGISTER, Config->s_ChanServ.c_str()); + source.Reply(_("Syntax: \002REGISTER \037channel\037 \037description\037\002\n" + " \n" + "Registers a channel in the %S database. In order\n" + "to use this command, you must first be a channel operator\n" + "on the channel you're trying to register.\n" + "The description, which \002must\002 be included, is a\n" + "general description of the channel's purpose.\n" + " \n" + "When you register a channel, you are recorded as the\n" + "\"founder\" of the channel. The channel founder is allowed\n" + "to change all of the channel settings for the channel;\n" + "%S will also automatically give the founder\n" + "channel-operator privileges when s/he enters the channel.\n" + "See the \002ACCESS\002 command (\002%R%S HELP ACCESS\002) for\n" + "information on giving a subset of these privileges to\n" + "other channel users.\n" + " \n" + "NOTICE: In order to register a channel, you must have\n" + "first registered your nickname. If you haven't,\n" + "\002%R%s HELP\002 for information on how to do so.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "REGISTER", CHAN_REGISTER_SYNTAX); + SyntaxError(source, "REGISTER", _("REGISTER \037channel\037 \037description\037")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_REGISTER); + source.Reply(_(" REGISTER Register a channel")); } }; diff --git a/modules/core/cs_saset.cpp b/modules/core/cs_saset.cpp index 56329b37d..896f23971 100644 --- a/modules/core/cs_saset.cpp +++ b/modules/core/cs_saset.cpp @@ -34,14 +34,14 @@ class CommandCSSASet : public Command if (readonly) { - source.Reply(CHAN_SET_DISABLED); + source.Reply(LanguageString::CHAN_SET_DISABLED); return MOD_CONT; } // XXX Remove after 1.9.4 release if (params[1].equals_ci("MLOCK")) { - source.Reply(CHAN_SET_MLOCK_DEPRECATED); + source.Reply(LanguageString::CHAN_SET_MLOCK_DEPRECATED); return MOD_CONT; } @@ -58,8 +58,8 @@ class CommandCSSASet : public Command } else { - source.Reply(NICK_SET_UNKNOWN_OPTION, params[1].c_str()); - source.Reply(MORE_INFO, Config->s_ChanServ.c_str(), "SET"); + source.Reply(_("Unknown SASET option \002%s\002."), params[1].c_str()); + source.Reply(LanguageString::MORE_INFO, Config->s_ChanServ.c_str(), "SET"); } return MOD_CONT; @@ -69,10 +69,16 @@ class CommandCSSASet : public Command { if (subcommand.empty()) { - source.Reply(CHAN_HELP_SASET_HEAD); + source.Reply(_("Syntax: SASET \002channel\002 \037option\037 \037parameters\037\n" + " \n" + "Allows Services Operators to forcefully change settings\n" + "on channels.\n" + " \n" + "Available options:")); for (subcommand_map::iterator it = this->subcommands.begin(), it_end = this->subcommands.end(); it != it_end; ++it) it->second->OnServHelp(source); - source.Reply(CHAN_HELP_SASET_TAIL); + source.Reply(_("Type \002%R%S HELP SASET \037option\037\002 for more information on a\n" + "particular option.")); return true; } else @@ -88,12 +94,12 @@ class CommandCSSASet : public Command void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "SASET", CHAN_SASET_SYNTAX); + SyntaxError(source, "SASET", LanguageString::CHAN_SASET_SYNTAX); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_SASET); + source.Reply(_(" SASET Forcefully set channel options and information")); } bool AddSubcommand(Module *creator, Command *c) diff --git a/modules/core/cs_saset_noexpire.cpp b/modules/core/cs_saset_noexpire.cpp index 53f32210a..0c769ad08 100644 --- a/modules/core/cs_saset_noexpire.cpp +++ b/modules/core/cs_saset_noexpire.cpp @@ -29,12 +29,12 @@ class CommandCSSASetNoexpire : public Command if (params[1].equals_ci("ON")) { ci->SetFlag(CI_NO_EXPIRE); - source.Reply(CHAN_SET_NOEXPIRE_ON, ci->name.c_str()); + source.Reply(_("Channel %s \002will not\002 expire."), ci->name.c_str()); } else if (params[1].equals_ci("OFF")) { ci->UnsetFlag(CI_NO_EXPIRE); - source.Reply(CHAN_SET_NOEXPIRE_OFF, ci->name.c_str()); + source.Reply(_("Channel %s \002will\002 expire."), ci->name.c_str()); } else this->OnSyntaxError(source, "NOEXPIRE"); @@ -44,18 +44,21 @@ class CommandCSSASetNoexpire : public Command bool OnHelp(CommandSource &source, const Anope::string &) { - source.Reply(CHAN_SERVADMIN_HELP_SET_NOEXPIRE); + source.Reply(_("Syntax: \002SET \037channel\037 NOEXPIRE {ON | OFF}\002\n" + " \n" + "Sets whether the given channel will expire. Setting this\n" + "to ON prevents the channel from expiring.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SET NOEXPIRE", CHAN_SET_NOEXPIRE_SYNTAX); + SyntaxError(source, "SET NOEXPIRE", _("SET \037channel\037 NOEXPIRE {ON | OFF}")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_SET_NOEXPIRE); + source.Reply(_(" NOEXPIRE Prevent the channel from expiring")); } }; diff --git a/modules/core/cs_set.cpp b/modules/core/cs_set.cpp index a9db50cb2..489314e3c 100644 --- a/modules/core/cs_set.cpp +++ b/modules/core/cs_set.cpp @@ -34,19 +34,19 @@ class CommandCSSet : public Command if (readonly) { - source.Reply(CHAN_SET_DISABLED); + source.Reply(LanguageString::CHAN_SET_DISABLED); return MOD_CONT; } if (!check_access(u, cs_findchan(params[0]), CA_SET)) { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); return MOD_CONT; } // XXX Remove after 1.9.4 release if (params[1].equals_ci("MLOCK")) { - source.Reply(CHAN_SET_MLOCK_DEPRECATED, Config->s_ChanServ.c_str()); + source.Reply(LanguageString::CHAN_SET_MLOCK_DEPRECATED, Config->s_ChanServ.c_str()); return MOD_CONT; } @@ -62,8 +62,8 @@ class CommandCSSet : public Command } else { - source.Reply(NICK_SET_UNKNOWN_OPTION, params[1].c_str()); - source.Reply(MORE_INFO, Config->s_ChanServ.c_str(), "SET"); + source.Reply(LanguageString::NICK_SET_UNKNOWN_OPTION, params[1].c_str()); + source.Reply(LanguageString::MORE_INFO, Config->s_ChanServ.c_str(), "SET"); } return MOD_CONT; @@ -73,10 +73,16 @@ class CommandCSSet : public Command { if (subcommand.empty()) { - source.Reply(CHAN_HELP_SET_HEAD); + source.Reply(_("Syntax: \002SET \037channel\037 \037option\037 \037parameters\037\002\n" + " \n" + "Allows the channel founder to set various channel options\n" + "and other information.\n" + " \n" + "Available options:")); for (subcommand_map::iterator it = this->subcommands.begin(), it_end = this->subcommands.end(); it != it_end; ++it) it->second->OnServHelp(source); - source.Reply(CHAN_HELP_SET_TAIL); + source.Reply(_("Type \002%R%S HELP SET \037option\037\002 for more information on a\n" + "particular option.")); return true; } else @@ -92,12 +98,12 @@ class CommandCSSet : public Command void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "SET", CHAN_SET_SYNTAX); + SyntaxError(source, "SET", LanguageString::CHAN_SET_SYNTAX); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_SET); + source.Reply(_(" SET Set channel options and information")); } bool AddSubcommand(Module *creator, Command *c) diff --git a/modules/core/cs_set_bantype.cpp b/modules/core/cs_set_bantype.cpp index 6ba41bf15..a3c6decb5 100644 --- a/modules/core/cs_set_bantype.cpp +++ b/modules/core/cs_set_bantype.cpp @@ -31,11 +31,11 @@ class CommandCSSetBanType : public Command int16 bantype = convertTo<int16>(params[1], end, false); if (!end.empty() || bantype < 0 || bantype > 3) - source.Reply(CHAN_SET_BANTYPE_INVALID, params[1].c_str()); + source.Reply(_("\002%s\002 is not a valid ban type."), params[1].c_str()); else { ci->bantype = bantype; - source.Reply(CHAN_SET_BANTYPE_CHANGED, ci->name.c_str(), ci->bantype); + source.Reply(_("Ban type for channel %s is now #%d."), ci->name.c_str(), ci->bantype); } return MOD_CONT; @@ -43,19 +43,29 @@ class CommandCSSetBanType : public Command bool OnHelp(CommandSource &source, const Anope::string &) { - source.Reply(CHAN_HELP_SET_BANTYPE, "SET"); + source.Reply(_("Syntax: \002%s \037channel\037 BANTYPE \037bantype\037\002\n" + " \n" + "Sets the ban type that will be used by services whenever\n" + "they need to ban someone from your channel.\n" + " \n" + "bantype is a number between 0 and 3 that means:\n" + " \n" + "0: ban in the form *!user@host\n" + "1: ban in the form *!*user@host\n" + "2: ban in the form *!*@host\n" + "3: ban in the form *!*user@*.domain"), this->name.c_str()); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &) { // XXX - SyntaxError(source, "SET", CHAN_SET_SYNTAX); + SyntaxError(source, "SET", LanguageString::CHAN_SET_SYNTAX); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_SET_BANTYPE); + source.Reply(_(" BANTYPE Set how Services make bans on the channel")); } }; @@ -66,16 +76,10 @@ class CommandCSSASetBanType : public CommandCSSetBanType { } - bool OnHelp(CommandSource &source, const Anope::string &) - { - source.Reply(CHAN_HELP_SET_BANTYPE, "SASET"); - return true; - } - void OnSyntaxError(CommandSource &source, const Anope::string &) { // XXX - SyntaxError(source, "SASET", CHAN_SASET_SYNTAX); + SyntaxError(source, "SASET", LanguageString::CHAN_SASET_SYNTAX); } }; diff --git a/modules/core/cs_set_description.cpp b/modules/core/cs_set_description.cpp index a36b1150f..aee4144d9 100644 --- a/modules/core/cs_set_description.cpp +++ b/modules/core/cs_set_description.cpp @@ -28,26 +28,29 @@ class CommandCSSetDescription : public Command ci->desc = params[1]; - source.Reply(CHAN_DESC_CHANGED, ci->name.c_str(), ci->desc.c_str()); + source.Reply(_("Description of %s changed to \002%s\002."), ci->name.c_str(), ci->desc.c_str()); return MOD_CONT; } bool OnHelp(CommandSource &source, const Anope::string &) { - source.Reply(CHAN_HELP_SET_DESC, "SET"); + source.Reply(_("Syntax: \002%s \037channel\037 DESC \037description\037\002\n" + " \n" + "Sets the description for the channel, which shows up with\n" + "the \002LIST\002 and \002INFO\002 commands."), this->name.c_str()); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &) { // XXX - SyntaxError(source, "SET", CHAN_SET_SYNTAX); + SyntaxError(source, "SET", LanguageString::CHAN_SET_SYNTAX); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_SET_DESC); + source.Reply(_(" DESC Set the channel description")); } }; @@ -58,16 +61,10 @@ class CommandCSSASetDescription : public CommandCSSetDescription { } - bool OnHelp(CommandSource &source, const Anope::string &) - { - source.Reply(CHAN_HELP_SET_DESC, "SASET"); - return true; - } - void OnSyntaxError(CommandSource &source, const Anope::string &) { // XXX - SyntaxError(source, "SASET", CHAN_SASET_SYNTAX); + SyntaxError(source, "SASET", LanguageString::CHAN_SASET_SYNTAX); } }; diff --git a/modules/core/cs_set_founder.cpp b/modules/core/cs_set_founder.cpp index c36f3c841..130117ff4 100644 --- a/modules/core/cs_set_founder.cpp +++ b/modules/core/cs_set_founder.cpp @@ -29,7 +29,7 @@ class CommandCSSetFounder : public Command if (this->permission.empty() && (ci->HasFlag(CI_SECUREFOUNDER) ? !IsFounder(u, ci) : !check_access(u, ci, CA_FOUNDER))) { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); return MOD_CONT; } @@ -38,19 +38,19 @@ class CommandCSSetFounder : public Command if (!na) { - source.Reply(NICK_X_NOT_REGISTERED, params[1].c_str()); + source.Reply(LanguageString::NICK_X_NOT_REGISTERED, params[1].c_str()); return MOD_CONT; } else if (na->HasFlag(NS_FORBIDDEN)) { - source.Reply(NICK_X_FORBIDDEN, na->nick.c_str()); + source.Reply(LanguageString::NICK_X_FORBIDDEN, na->nick.c_str()); return MOD_CONT; } nc = na->nc; if (Config->CSMaxReg && nc->channelcount >= Config->CSMaxReg && !u->Account()->HasPriv("chanserv/no-register-limit")) { - source.Reply(CHAN_SET_FOUNDER_TOO_MANY_CHANS, na->nick.c_str()); + source.Reply(_("\002%s\002 has too many channels registered."), na->nick.c_str()); return MOD_CONT; } @@ -64,26 +64,29 @@ class CommandCSSetFounder : public Command ci->founder = nc; ++nc->channelcount; - source.Reply(CHAN_FOUNDER_CHANGED, ci->name.c_str(), na->nick.c_str()); + source.Reply(_("Founder of %s changed to \002%s\002."), ci->name.c_str(), na->nick.c_str()); return MOD_CONT; } bool OnHelp(CommandSource &source, const Anope::string &) { - source.Reply(CHAN_HELP_SET_FOUNDER, "SET"); + source.Reply(_("Syntax: \002%s \037channel\037 FOUNDER \037nick\037\002\n" + " \n" + "Changes the founder of a channel. The new nickname must\n" + "be a registered one."), this->name.c_str()); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &) { // XXX - SyntaxError(source, "SET", CHAN_SET_SYNTAX); + SyntaxError(source, "SET", LanguageString::CHAN_SET_SYNTAX); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_SET_FOUNDER); + source.Reply(_(" FOUNDER Set the founder of a channel")); } }; @@ -94,16 +97,10 @@ class CommandCSSASetFounder : public CommandCSSetFounder { } - bool OnHelp(CommandSource &source, const Anope::string &) - { - source.Reply(CHAN_HELP_SET_FOUNDER, "SASET"); - return true; - } - void OnSyntaxError(CommandSource &source, const Anope::string &) { // XXX - SyntaxError(source, "SASET", CHAN_SASET_SYNTAX); + SyntaxError(source, "SASET", LanguageString::CHAN_SASET_SYNTAX); } }; diff --git a/modules/core/cs_set_keeptopic.cpp b/modules/core/cs_set_keeptopic.cpp index 6ea297010..5a7bbd334 100644 --- a/modules/core/cs_set_keeptopic.cpp +++ b/modules/core/cs_set_keeptopic.cpp @@ -29,12 +29,12 @@ class CommandCSSetKeepTopic : public Command if (params[1].equals_ci("ON")) { ci->SetFlag(CI_KEEPTOPIC); - source.Reply(CHAN_SET_KEEPTOPIC_ON, ci->name.c_str()); + source.Reply(_("Topic retention option for %s is now \002\002."), ci->name.c_str()); } else if (params[1].equals_ci("OFF")) { ci->UnsetFlag(CI_KEEPTOPIC); - source.Reply(CHAN_SET_KEEPTOPIC_OFF, ci->name.c_str()); + source.Reply(_("Topic retention option for %s is now \002\002."), ci->name.c_str()); } else this->OnSyntaxError(source, "KEEPTOPIC"); @@ -44,18 +44,24 @@ class CommandCSSetKeepTopic : public Command bool OnHelp(CommandSource &source, const Anope::string &) { - source.Reply(CHAN_HELP_SET_KEEPTOPIC, "SET"); + source.Reply(_("Syntax: \002%s \037channel\037 KEEPTOPIC {ON | OFF}\002\n" + " \n" + "Enables or disables the \002topic retention\002 option for a \n" + "channel. When \002topic retention\002 is set, the topic for the\n" + "channel will be remembered by %S even after the\n" + "last user leaves the channel, and will be restored the\n" + "next time the channel is created."), this->name.c_str()); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SET KEEPTOPIC", CHAN_SET_KEEPTOPIC_SYNTAX); + SyntaxError(source, "SET KEEPTOPIC", _("SET \037channel\037 KEEPTOPIC {ON | OFF}")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_SET_KEEPTOPIC); + source.Reply(_(" KEEPTOPIC Retain topic when channel is not in use")); } }; @@ -66,15 +72,9 @@ class CommandCSSASetKeepTopic : public CommandCSSetKeepTopic { } - bool OnHelp(CommandSource &source, const Anope::string &) - { - source.Reply(CHAN_HELP_SET_KEEPTOPIC, "SASET"); - return true; - } - void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SET KEEPTOPIC", CHAN_SASET_KEEPTOPIC_SYNTAX); + SyntaxError(source, "SET KEEPTOPIC", _("SASET \002channel\002 KEEPTOPIC {ON | OFF}")); } }; diff --git a/modules/core/cs_set_opnotice.cpp b/modules/core/cs_set_opnotice.cpp index 6efe94b83..e55607ca3 100644 --- a/modules/core/cs_set_opnotice.cpp +++ b/modules/core/cs_set_opnotice.cpp @@ -29,12 +29,12 @@ class CommandCSSetOpNotice : public Command if (params[1].equals_ci("ON")) { ci->SetFlag(CI_OPNOTICE); - source.Reply(CHAN_SET_OPNOTICE_ON, ci->name.c_str()); + source.Reply(_("Op-notice option for %s is now \002\002."), ci->name.c_str()); } else if (params[1].equals_ci("OFF")) { ci->UnsetFlag(CI_OPNOTICE); - source.Reply(CHAN_SET_OPNOTICE_OFF, ci->name.c_str()); + source.Reply(_("Op-notice option for %s is now \002\002."), ci->name.c_str()); } else this->OnSyntaxError(source, "OPNOTICE"); @@ -44,18 +44,23 @@ class CommandCSSetOpNotice : public Command bool OnHelp(CommandSource &source, const Anope::string &) { - source.Reply(CHAN_HELP_SET_OPNOTICE, "SET"); + source.Reply(_("Syntax: \002%s \037channel\037 OPNOTICE {ON | OFF}\002\n" + " \n" + "Enables or disables the \002op-notice\002 option for a channel.\n" + "When \002op-notice\002 is set, %S will send a notice to the\n" + "channel whenever the \002OP\002 or \002DEOP\002 commands are used for a user\n" + "in the channel."), this->name.c_str()); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SET OPNOTICE", CHAN_SET_OPNOTICE_SYNTAX); + SyntaxError(source, "SET OPNOTICE", _("SET \037channel\037 OPNOTICE {ON | OFF}")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_SET_OPNOTICE); + source.Reply(_(" OPNOTICE Send a notice when OP/DEOP commands are used")); } }; @@ -66,15 +71,9 @@ class CommandCSSASetOpNotice : public CommandCSSetOpNotice { } - bool OnHelp(CommandSource &source, const Anope::string &) - { - source.Reply(CHAN_HELP_SET_OPNOTICE, "SASET"); - return true; - } - void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SET OPNOTICE", CHAN_SASET_OPNOTICE_SYNTAX); + SyntaxError(source, "SET OPNOTICE", _("SASET \002channel\002 OPNOTICE {ON | OFF}")); } }; diff --git a/modules/core/cs_set_peace.cpp b/modules/core/cs_set_peace.cpp index 067152bbe..5daa648f8 100644 --- a/modules/core/cs_set_peace.cpp +++ b/modules/core/cs_set_peace.cpp @@ -29,12 +29,12 @@ class CommandCSSetPeace : public Command if (params[1].equals_ci("ON")) { ci->SetFlag(CI_PEACE); - source.Reply(CHAN_SET_PEACE_ON, ci->name.c_str()); + source.Reply(_("Peace option for %s is now \002\002."), ci->name.c_str()); } else if (params[1].equals_ci("OFF")) { ci->UnsetFlag(CI_PEACE); - source.Reply(CHAN_SET_PEACE_OFF, ci->name.c_str()); + source.Reply(_("Peace option for %s is now \002\002."), ci->name.c_str()); } else this->OnSyntaxError(source, "PEACE"); @@ -44,18 +44,23 @@ class CommandCSSetPeace : public Command bool OnHelp(CommandSource &source, const Anope::string &) { - source.Reply(CHAN_HELP_SET_PEACE, "SET"); + source.Reply(_("Syntax: \002%s \037channel\037 PEACE {ON | OFF}\002\n" + " \n" + "Enables or disables the \002peace\002 option for a channel.\n" + "When \002peace\002 is set, a user won't be able to kick,\n" + "ban or remove a channel status of a user that has\n" + "a level superior or equal to his via %S commands."), this->name.c_str()); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SET PEACE", CHAN_SET_PEACE_SYNTAX); + SyntaxError(source, "SET PEACE", _("SET \037channel\037 PEACE {ON | OFF}")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_SET_PEACE, "SET"); + source.Reply(_(" PEACE Regulate the use of critical commands"), "SET"); } }; @@ -66,15 +71,9 @@ class CommandCSSASetPeace : public CommandCSSetPeace { } - bool OnHelp(CommandSource &source, const Anope::string &) - { - source.Reply(CHAN_HELP_SET_PEACE, "SASET"); - return true; - } - void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SASET PEACE", CHAN_SASET_PEACE_SYNTAX); + SyntaxError(source, "SASET PEACE", _("SASET \002channel\002 PEACE {ON | OFF}")); } }; diff --git a/modules/core/cs_set_persist.cpp b/modules/core/cs_set_persist.cpp index d659422fc..0c3ef2b97 100644 --- a/modules/core/cs_set_persist.cpp +++ b/modules/core/cs_set_persist.cpp @@ -65,7 +65,7 @@ class CommandCSSetPersist : public Command } } - source.Reply(CHAN_SET_PERSIST_ON, ci->name.c_str()); + source.Reply(_("Channel \002%s\002 is now persistant."), ci->name.c_str()); } else if (params[1].equals_ci("OFF")) { @@ -92,7 +92,7 @@ class CommandCSSetPersist : public Command ChanServ->UnAssign(NULL, ci); } - source.Reply(CHAN_SET_PERSIST_OFF, ci->name.c_str()); + source.Reply(_("Channel \002%s\002 is no longer persistant."), ci->name.c_str()); } else this->OnSyntaxError(source, "PERSIST"); @@ -102,18 +102,37 @@ class CommandCSSetPersist : public Command bool OnHelp(CommandSource &source, const Anope::string &) { - source.Reply(CHAN_HELP_SET_PERSIST, "SET"); + source.Reply(_("Syntax: \002%s \037channel\037 PERSIST {ON | OFF}\002\n" + "Enables or disables the persistant channel setting.\n" + "When persistant is set, the service bot will remain\n" + "in the channel when it has emptied of users.\n" + " \n" + "If your IRCd does not a permanent (persistant) channel\n" + "mode you must have a service bot in your channel to\n" + "set persist on, and it can not be unassigned while persist\n" + "is on.\n" + " \n" + "If this network does not have BotServ enabled and does\n" + "not have a permanent channel mode, ChanServ will\n" + "join your channel when you set persist on (and leave when\n" + "it has been set off).\n" + " \n" + "If your IRCd has a permanent (persistant) channel mode\n" + "and is is set or unset (for any reason, including MLOCK),\n" + "persist is automatically set and unset for the channel aswell.\n" + "Additionally, services will set or unset this mode when you\n" + "set persist on or off."), this->name.c_str()); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SET PERSIST", CHAN_SET_PERSIST_SYNTAX); + SyntaxError(source, "SET PERSIST", _("SET \037channel\037 PERSIST {ON | OFF}")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_SET_PERSIST); + source.Reply(_(" PERSIST Set the channel as permanent")); } }; @@ -124,15 +143,9 @@ class CommandCSSASetPersist : public CommandCSSetPersist { } - bool OnHelp(CommandSource &source, const Anope::string &) - { - source.Reply(CHAN_HELP_SET_PERSIST, "SASET"); - return true; - } - void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SASET PERSIST", CHAN_SASET_PERSIST_SYNTAX); + SyntaxError(source, "SASET PERSIST", _("SASET \002channel\002 PERSIST {ON | OFF}")); } }; diff --git a/modules/core/cs_set_private.cpp b/modules/core/cs_set_private.cpp index 28356db70..162da757d 100644 --- a/modules/core/cs_set_private.cpp +++ b/modules/core/cs_set_private.cpp @@ -29,12 +29,12 @@ class CommandCSSetPrivate : public Command if (params[1].equals_ci("ON")) { ci->SetFlag(CI_PRIVATE); - source.Reply(CHAN_SET_PRIVATE_ON, ci->name.c_str()); + source.Reply(_("Private option for %s is now \002\002."), ci->name.c_str()); } else if (params[1].equals_ci("OFF")) { ci->UnsetFlag(CI_PRIVATE); - source.Reply(CHAN_SET_PRIVATE_OFF, ci->name.c_str()); + source.Reply(_("Private option for %s is now \002\002."), ci->name.c_str()); } else this->OnSyntaxError(source, "PRIVATE"); @@ -44,18 +44,22 @@ class CommandCSSetPrivate : public Command bool OnHelp(CommandSource &source, const Anope::string &) { - source.Reply(CHAN_HELP_SET_PRIVATE, "SASET"); + source.Reply(_("Syntax: \002%s \037channel\037 PRIVATE {ON | OFF}\002\n" + " \n" + "Enables or disables the \002private\002 option for a channel.\n" + "When \002private\002 is set, a \002%R%S LIST\002 will not\n" + "include the channel in any lists."), this->name.c_str()); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SET PRIVATE", CHAN_SET_PRIVATE_SYNTAX); + SyntaxError(source, "SET PRIVATE", _("SET \037channel\037 PRIVATE {ON | OFF}")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_SET_PRIVATE); + source.Reply(_(" PRIVATE Hide channel from LIST command")); } }; @@ -66,15 +70,9 @@ class CommandCSSASetPrivate : public CommandCSSetPrivate { } - bool OnHelp(CommandSource &source, const Anope::string &) - { - source.Reply(CHAN_HELP_SET_PRIVATE, "SASET"); - return true; - } - void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SASET PRIVATE", CHAN_SASET_PRIVATE_SYNTAX); + SyntaxError(source, "SASET PRIVATE", _("SASET \002channel\002 PRIVATE {ON | OFF}")); } }; diff --git a/modules/core/cs_set_restricted.cpp b/modules/core/cs_set_restricted.cpp index c8ee140b0..646a42241 100644 --- a/modules/core/cs_set_restricted.cpp +++ b/modules/core/cs_set_restricted.cpp @@ -30,14 +30,14 @@ class CommandCSSetRestricted : public Command ci->SetFlag(CI_RESTRICTED); if (ci->levels[CA_NOJOIN] < 0) ci->levels[CA_NOJOIN] = 0; - source.Reply(CHAN_SET_RESTRICTED_ON, ci->name.c_str()); + source.Reply(_("Restricted access option for %s is now \002\002."), ci->name.c_str()); } else if (params[1].equals_ci("OFF")) { ci->UnsetFlag(CI_RESTRICTED); if (ci->levels[CA_NOJOIN] >= 0) ci->levels[CA_NOJOIN] = -2; - source.Reply(CHAN_SET_RESTRICTED_OFF, ci->name.c_str()); + source.Reply(_("Restricted access option for %s is now \002\002."), ci->name.c_str()); } else this->OnSyntaxError(source, "RESTRICTED"); @@ -47,18 +47,22 @@ class CommandCSSetRestricted : public Command bool OnHelp(CommandSource &source, const Anope::string &) { - source.Reply(CHAN_HELP_SET_RESTRICTED, "SET"); + source.Reply(_("Syntax: \002%s \037channel\037 RESTRICTED {ON | OFF}\002\n" + " \n" + "Enables or disables the \002restricted access\002 option for a\n" + "channel. When \002restricted access\002 is set, users not on the access list will\n" + "instead be kicked and banned from the channel."), this->name.c_str()); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SET RESTRICTED", CHAN_SET_RESTRICTED_SYNTAX); + SyntaxError(source, "SET RESTRICTED", _("SET \037channel\037 RESTRICTED {ON | OFF}")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_SET_RESTRICTED); + source.Reply(_(" RESTRICTED Restrict access to the channel")); } }; @@ -69,15 +73,9 @@ class CommandCSSASetRestricted : public CommandCSSetRestricted { } - bool OnHelp(CommandSource &source, const Anope::string &) - { - source.Reply(CHAN_HELP_SET_RESTRICTED, "SASET"); - return true; - } - void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SASET RESTRICTED", CHAN_SASET_RESTRICTED_SYNTAX); + SyntaxError(source, "SASET RESTRICTED", _("SASET \002channel\002 RESTRICTED {ON | OFF}")); } }; diff --git a/modules/core/cs_set_secure.cpp b/modules/core/cs_set_secure.cpp index 118214c29..a84e91958 100644 --- a/modules/core/cs_set_secure.cpp +++ b/modules/core/cs_set_secure.cpp @@ -29,12 +29,12 @@ class CommandCSSetSecure : public Command if (params[1].equals_ci("ON")) { ci->SetFlag(CI_SECURE); - source.Reply(CHAN_SET_SECURE_ON, ci->name.c_str()); + source.Reply(_("Secure option for %s is now \002\002."), ci->name.c_str()); } else if (params[1].equals_ci("OFF")) { ci->UnsetFlag(CI_SECURE); - source.Reply(CHAN_SET_SECURE_OFF, ci->name.c_str()); + source.Reply(_("Secure option for %s is now \002\002."), ci->name.c_str()); } else this->OnSyntaxError(source, "SECURE"); @@ -44,18 +44,24 @@ class CommandCSSetSecure : public Command bool OnHelp(CommandSource &source, const Anope::string &) { - source.Reply(CHAN_HELP_SET_SECURE, "SET", Config->s_NickServ.c_str()); + source.Reply(_("Syntax: \002%s \037channel\037 SECURE {ON | OFF}\002\n" + " \n" + "Enables or disables %S's security features for a\n" + "channel. When \002SECURE\002 is set, only users who have\n" + "registered their nicknames with %s and IDENTIFY'd\n" + "with their password will be given access to the channel\n" + "as controlled by the access list."), this->name.c_str(), Config->s_NickServ.c_str()); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SET SECURE", CHAN_SET_SECURE_SYNTAX); + SyntaxError(source, "SET SECURE", _("SET \037channel\037 SECURE {ON | OFF}")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_SET_SECURE); + source.Reply(_(" SECURE Activate %S security features")); } }; @@ -66,15 +72,9 @@ class CommandCSSASetSecure : public CommandCSSetSecure { } - bool OnHelp(CommandSource &source, const Anope::string &) - { - source.Reply(CHAN_HELP_SET_SECURE, "SASET", Config->s_NickServ.c_str()); - return true; - } - void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SASET SECURE", CHAN_SASET_SECURE_SYNTAX); + SyntaxError(source, "SASET SECURE", _("SASET \002channel\002 SECURE {ON | OFF}")); } }; diff --git a/modules/core/cs_set_securefounder.cpp b/modules/core/cs_set_securefounder.cpp index 6e076d450..85c587adf 100644 --- a/modules/core/cs_set_securefounder.cpp +++ b/modules/core/cs_set_securefounder.cpp @@ -29,19 +29,19 @@ class CommandCSSetSecureFounder : public Command if (this->permission.empty() && ci->HasFlag(CI_SECUREFOUNDER) ? !IsFounder(u, ci) : !check_access(u, ci, CA_FOUNDER)) { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); return MOD_CONT; } if (params[1].equals_ci("ON")) { ci->SetFlag(CI_SECUREFOUNDER); - source.Reply(CHAN_SET_SECUREFOUNDER_ON, ci->name.c_str()); + source.Reply(_("Secure founder option for %s is now \002\002."), ci->name.c_str()); } else if (params[1].equals_ci("OFF")) { ci->UnsetFlag(CI_SECUREFOUNDER); - source.Reply(CHAN_SET_SECUREFOUNDER_OFF, ci->name.c_str()); + source.Reply(_("Secure founder option for %s is now \002\002."), ci->name.c_str()); } else this->OnSyntaxError(source, "SECUREFOUNDER"); @@ -51,18 +51,24 @@ class CommandCSSetSecureFounder : public Command bool OnHelp(CommandSource &source, const Anope::string &) { - source.Reply(CHAN_HELP_SET_SECUREFOUNDER, "SET"); + source.Reply(_("Syntax: \002%s \037channel\037 SECUREFOUNDER {ON | OFF}\002\n" + " \n" + "Enables or disables the \002secure founder\002 option for a channel.\n" + "When \002secure founder\002 is set, only the real founder will be\n" + "able to drop the channel, change its password, its founder and its\n" + "successor, and not those who have founder level access through\n" + "the access/qop command."), this->name.c_str()); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SET SECUREFOUNDER", CHAN_SET_SECUREFOUNDER_SYNTAX); + SyntaxError(source, "SET SECUREFOUNDER", _("SET \037channel\037 SECUREFOUNDER {ON | OFF}")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_SET_SECUREFOUNDER); + source.Reply(_(" SECUREFOUNDER Stricter control of channel founder status")); } }; @@ -73,15 +79,9 @@ class CommandCSSASetSecureFounder : public CommandCSSetSecureFounder { } - bool OnHelp(CommandSource &source, const Anope::string &) - { - source.Reply(CHAN_HELP_SET_SECUREFOUNDER, "SASET"); - return true; - } - void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SASET SECUREFOUNDER", CHAN_SASET_SECUREFOUNDER_SYNTAX); + SyntaxError(source, "SASET SECUREFOUNDER", _("SASET \002channel\002 SECUREFOUNDER {ON | OFF}")); } }; diff --git a/modules/core/cs_set_secureops.cpp b/modules/core/cs_set_secureops.cpp index 036e2cd74..d4e8f5e22 100644 --- a/modules/core/cs_set_secureops.cpp +++ b/modules/core/cs_set_secureops.cpp @@ -29,12 +29,12 @@ class CommandCSSetSecureOps : public Command if (params[1].equals_ci("ON")) { ci->SetFlag(CI_SECUREOPS); - source.Reply(CHAN_SET_SECUREOPS_ON, ci->name.c_str()); + source.Reply(_("Secure ops option for %s is now \002\002."), ci->name.c_str()); } else if (params[1].equals_ci("OFF")) { ci->UnsetFlag(CI_SECUREOPS); - source.Reply(CHAN_SET_SECUREOPS_OFF, ci->name.c_str()); + source.Reply(_("Secure ops option for %s is now \002\002."), ci->name.c_str()); } else this->OnSyntaxError(source, "SECUREOPS"); @@ -44,18 +44,22 @@ class CommandCSSetSecureOps : public Command bool OnHelp(CommandSource &source, const Anope::string &) { - source.Reply(CHAN_HELP_SET_SECUREOPS, "SET"); + source.Reply(_("Syntax: \002SET \037%s\037 SECUREOPS {ON | OFF}\002\n" + " \n" + "Enables or disables the \002secure ops\002 option for a channel.\n" + "When \002secure ops\002 is set, users who are not on the userlist\n" + "will not be allowed chanop status."), this->name.c_str()); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SET SECUREOPS", CHAN_SET_SECUREOPS_SYNTAX); + SyntaxError(source, "SET SECUREOPS", _("SET \037channel\037 SECUREOPS {ON | OFF}")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_SET_SECUREOPS); + source.Reply(_(" SECUREOPS Stricter control of chanop status")); } }; @@ -66,15 +70,9 @@ class CommandCSSASetSecureOps : public CommandCSSetSecureOps { } - bool OnHelp(CommandSource &source, const Anope::string &) - { - source.Reply(CHAN_HELP_SET_SECUREOPS, "SASET"); - return true; - } - void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SASET SECUREOPS", CHAN_SASET_SECUREOPS_SYNTAX); + SyntaxError(source, "SASET SECUREOPS", _("SASET \002channel\002 SECUREOPS {ON | OFF}")); } }; diff --git a/modules/core/cs_set_signkick.cpp b/modules/core/cs_set_signkick.cpp index c6c399587..c89e4b502 100644 --- a/modules/core/cs_set_signkick.cpp +++ b/modules/core/cs_set_signkick.cpp @@ -30,19 +30,20 @@ class CommandCSSetSignKick : public Command { ci->SetFlag(CI_SIGNKICK); ci->UnsetFlag(CI_SIGNKICK_LEVEL); - source.Reply(CHAN_SET_SIGNKICK_ON, ci->name.c_str()); + source.Reply(_("Signed kick option for %s is now \002\002."), ci->name.c_str()); } else if (params[1].equals_ci("LEVEL")) { ci->SetFlag(CI_SIGNKICK_LEVEL); ci->UnsetFlag(CI_SIGNKICK); - source.Reply(CHAN_SET_SIGNKICK_LEVEL, ci->name.c_str()); + source.Reply(_("Signed kick option for %s is now \002ON\002, but depends of the\n" + "level of the user that is using the command."), ci->name.c_str()); } else if (params[1].equals_ci("OFF")) { ci->UnsetFlag(CI_SIGNKICK); ci->UnsetFlag(CI_SIGNKICK_LEVEL); - source.Reply(CHAN_SET_SIGNKICK_OFF, ci->name.c_str()); + source.Reply(_("Signed kick option for %s is now \002\002."), ci->name.c_str()); } else this->OnSyntaxError(source, "SIGNKICK"); @@ -52,18 +53,27 @@ class CommandCSSetSignKick : public Command bool OnHelp(CommandSource &source, const Anope::string &) { - source.Reply(CHAN_HELP_SET_SIGNKICK, "SET"); + source.Reply(_("Syntax: \002SET \037%s\037 SIGNKICK {ON | LEVEL | OFF}\002\n" + " \n" + "Enables or disables signed kicks for a\n" + "channel. When \002SIGNKICK\002 is set, kicks issued with\n" + "%S KICK command will have the nick that used the\n" + "command in their reason.\n" + " \n" + "If you use \002LEVEL\002, those who have a level that is superior \n" + "or equal to the SIGNKICK level on the channel won't have their \n" + "kicks signed. See \002%R%S HELP LEVELS\002 for more information."), this->name.c_str()); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SET SIGNKICK", CHAN_SET_SIGNKICK_SYNTAX); + SyntaxError(source, "SET SIGNKICK", _("SET \037channel\037 SIGNKICK {ON | LEVEL | OFF}")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_SET_SIGNKICK); + source.Reply(_(" SIGNKICK Sign kicks that are done with KICK command")); } }; @@ -74,15 +84,9 @@ class CommandCSSASetSignKick : public CommandCSSetSignKick { } - bool OnHelp(CommandSource &source, const Anope::string &) - { - source.Reply(CHAN_HELP_SET_SIGNKICK, "SASET"); - return true; - } - void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SASET SIGNKICK", CHAN_SASET_SIGNKICK_SYNTAX); + SyntaxError(source, "SASET SIGNKICK", _("SASET \002channel\002 SIGNKICK {ON | OFF}")); } }; diff --git a/modules/core/cs_set_successor.cpp b/modules/core/cs_set_successor.cpp index 7b4c48b3d..38a885830 100644 --- a/modules/core/cs_set_successor.cpp +++ b/modules/core/cs_set_successor.cpp @@ -29,7 +29,7 @@ class CommandCSSetSuccessor : public Command if (this->permission.empty() && ci->HasFlag(CI_SECUREFOUNDER) ? !IsFounder(u, ci) : !check_access(u, ci, CA_FOUNDER)) { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); return MOD_CONT; } @@ -41,17 +41,17 @@ class CommandCSSetSuccessor : public Command if (!na) { - source.Reply(NICK_X_NOT_REGISTERED, params[1].c_str()); + source.Reply(LanguageString::NICK_X_NOT_REGISTERED, params[1].c_str()); return MOD_CONT; } if (na->HasFlag(NS_FORBIDDEN)) { - source.Reply(NICK_X_FORBIDDEN, na->nick.c_str()); + source.Reply(LanguageString::NICK_X_FORBIDDEN, na->nick.c_str()); return MOD_CONT; } if (na->nc == ci->founder) { - source.Reply(CHAN_SUCCESSOR_IS_FOUNDER, na->nick.c_str(), ci->name.c_str()); + source.Reply(_("%s cannot be the successor on channel %s because he is its founder."), na->nick.c_str(), ci->name.c_str()); return MOD_CONT; } nc = na->nc; @@ -64,28 +64,36 @@ class CommandCSSetSuccessor : public Command ci->successor = nc; if (nc) - source.Reply(CHAN_SUCCESSOR_CHANGED, ci->name.c_str(), nc->display.c_str()); + source.Reply(_("Successor for %s changed to \002%s\002."), ci->name.c_str(), nc->display.c_str()); else - source.Reply(CHAN_SUCCESSOR_UNSET, ci->name.c_str()); + source.Reply(_("Successor for \002%s\002 unset."), ci->name.c_str()); return MOD_CONT; } bool OnHelp(CommandSource &source, const Anope::string &) { - source.Reply(CHAN_HELP_SET_SUCCESSOR, "SET"); + source.Reply(_("Syntax: \002%s \037channel\037 SUCCESSOR \037nick\037\002\n" + " \n" + "Changes the successor of a channel. If the founder's\n" + "nickname expires or is dropped while the channel is still\n" + "registered, the successor will become the new founder of the\n" + "channel. However, if the successor already has too many\n" + "channels registered (%d), the channel will be dropped\n" + "instead, just as if no successor had been set. The new\n" + "nickname must be a registered one."), this->name.c_str()); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &) { // XXX - SyntaxError(source, "SET", CHAN_SET_SYNTAX); + SyntaxError(source, "SET", LanguageString::CHAN_SET_SYNTAX); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_SET_SUCCESSOR); + source.Reply(_(" SUCCESSOR Set the successor for a channel")); } }; @@ -96,16 +104,10 @@ class CommandCSSASetSuccessor : public CommandCSSetSuccessor { } - bool OnHelp(CommandSource &source, const Anope::string &) - { - source.Reply(CHAN_HELP_SET_SUCCESSOR, "SASET"); - return true; - } - void OnSyntaxError(CommandSource &source, const Anope::string &) { // XXX - SyntaxError(source, "SASET", CHAN_SASET_SYNTAX); + SyntaxError(source, "SASET", LanguageString::CHAN_SASET_SYNTAX); } }; diff --git a/modules/core/cs_set_topiclock.cpp b/modules/core/cs_set_topiclock.cpp index 4d62fd415..cb8faf724 100644 --- a/modules/core/cs_set_topiclock.cpp +++ b/modules/core/cs_set_topiclock.cpp @@ -29,12 +29,12 @@ class CommandCSSetTopicLock : public Command if (params[1].equals_ci("ON")) { ci->SetFlag(CI_TOPICLOCK); - source.Reply(CHAN_SET_TOPICLOCK_ON, ci->name.c_str()); + source.Reply(_("Topic lock option for %s is now \002\002."), ci->name.c_str()); } else if (params[1].equals_ci("OFF")) { ci->UnsetFlag(CI_TOPICLOCK); - source.Reply(CHAN_SET_TOPICLOCK_OFF, ci->name.c_str()); + source.Reply(_("Topic lock option for %s is now \002\002."), ci->name.c_str()); } else this->OnSyntaxError(source, "TOPICLOCK"); @@ -44,18 +44,23 @@ class CommandCSSetTopicLock : public Command bool OnHelp(CommandSource &source, const Anope::string &) { - source.Reply(CHAN_HELP_SET_TOPICLOCK, "SET"); + source.Reply(_("Syntax: \002SET \037%s\037 TOPICLOCK {ON | OFF}\002\n" + " \n" + "Enables or disables the \002topic lock\002 option for a channel.\n" + "When \002topic lock\002 is set, %S will not allow the\n" + "channel topic to be changed except via the \002TOPIC\002\n" + "command."), this->name.c_str()); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SET", CHAN_SET_TOPICLOCK_SYNTAX);; + SyntaxError(source, "SET", _("SET \037channel\037 TOPICLOCK {ON | OFF}"));; } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_SET_TOPICLOCK); + source.Reply(_(" TOPICLOCK Topic can only be changed with TOPIC")); } }; @@ -66,15 +71,9 @@ class CommandCSSASetTopicLock : public CommandCSSetTopicLock { } - bool OnHelp(CommandSource &source, const Anope::string &) - { - source.Reply(CHAN_HELP_SET_TOPICLOCK, "SASET"); - return true; - } - void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SASET", CHAN_SASET_TOPICLOCK_SYNTAX); + SyntaxError(source, "SASET", _("SASET \002channel\002 TOPICLOCK {ON | OFF}")); } }; diff --git a/modules/core/cs_set_xop.cpp b/modules/core/cs_set_xop.cpp index 27375144e..4829b2e45 100644 --- a/modules/core/cs_set_xop.cpp +++ b/modules/core/cs_set_xop.cpp @@ -28,7 +28,7 @@ class CommandCSSetXOP : public Command if (!FindModule("cs_xop")) { - source.Reply(CHAN_XOP_NOT_AVAILABLE, "XOP"); + source.Reply(_("xOP system is not available."), "XOP"); return MOD_CONT; } @@ -67,14 +67,14 @@ class CommandCSSetXOP : public Command } Log(LOG_COMMAND, u, this, ci) << "to enable XOP"; - source.Reply(CHAN_SET_XOP_ON, ci->name.c_str()); + source.Reply(_("xOP lists system for %s is now \002\002."), ci->name.c_str()); } else if (params[1].equals_ci("OFF")) { ci->UnsetFlag(CI_XOP); Log(LOG_COMMAND, u, this, ci) << "to disable XOP"; - source.Reply(CHAN_SET_XOP_OFF, ci->name.c_str()); + source.Reply(_("xOP lists system for %s is now \002\002."), ci->name.c_str()); } else this->OnSyntaxError(source, "XOP"); @@ -84,18 +84,37 @@ class CommandCSSetXOP : public Command bool OnHelp(CommandSource &source, const Anope::string &) { - source.Reply(CHAN_HELP_SET_XOP, "SET"); + source.Reply(_("Syntax: \002%s \037channel\037 XOP {ON | OFF}\002\n" + " \n" + "Enables or disables the xOP lists system for a channel.\n" + "When \002XOP\002 is set, you have to use the \002AOP\002/\002SOP\002/\002VOP\002\n" + "commands in order to give channel privileges to\n" + "users, else you have to use the \002ACCESS\002 command.\n" + " \n" + "\002Technical Note\002: when you switch from access list to xOP \n" + "lists system, your level definitions and user levels will be\n" + "changed, so you won't find the same values if you\n" + "switch back to access system! \n" + " \n" + "You should also check that your users are in the good xOP \n" + "list after the switch from access to xOP lists, because the \n" + "guess is not always perfect... in fact, it is not recommended \n" + "to use the xOP lists if you changed level definitions with \n" + "the \002LEVELS\002 command.\n" + " \n" + "Switching from xOP lists system to access list system\n" + "causes no problem though."), this->name.c_str()); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SET XOP", CHAN_SET_XOP_SYNTAX); + SyntaxError(source, "SET XOP", _("SET \037channel\037 XOP {ON | OFF}")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_SET_XOP); + source.Reply(_(" XOP Toggle the user privilege system")); } }; @@ -106,15 +125,9 @@ class CommandCSSASetXOP : public CommandCSSetXOP { } - bool OnHelp(CommandSource &source, const Anope::string &) - { - source.Reply(CHAN_HELP_SET_XOP, "SASET"); - return true; - } - void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SASET XOP", CHAN_SASET_XOP_SYNTAX); + SyntaxError(source, "SASET XOP", _("SASET \002channel\002 XOP {ON | OFF}")); } }; diff --git a/modules/core/cs_status.cpp b/modules/core/cs_status.cpp index 37a568da2..d1c469022 100644 --- a/modules/core/cs_status.cpp +++ b/modules/core/cs_status.cpp @@ -28,26 +28,35 @@ class CommandCSStatus : public Command User *u2 = finduser(nick); ChanAccess *u2_access = ci->GetAccess(u2); if (u2) - source.Reply(CHAN_STATUS_INFO, ci->name.c_str(), u2->nick.c_str(), u2_access ? u2_access->level : 0); + source.Reply(_("STATUS %s %s %d"), ci->name.c_str(), u2->nick.c_str(), u2_access ? u2_access->level : 0); else /* !u2 */ - source.Reply(CHAN_STATUS_NOTONLINE, nick.c_str()); + source.Reply(_("STATUS ERROR Nick %s not online"), nick.c_str()); return MOD_CONT; } bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(CHAN_SERVADMIN_HELP_STATUS); + source.Reply(_("Syntax: \002STATUS \037channel\037 \037nickname\037\002\n" + " \n" + "Returns the current access level of the given nick on the\n" + "given channel. The reply is of the form:\n" + " \n" + " STATUS \037channel\037 \037nickname\037 \037access-level\037\n" + " \n" + "If an error occurs, the reply will be in the form:\n" + " \n" + " STATUS ERROR \037error-message\037")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "STATUS", CHAN_STATUS_SYNTAX); + SyntaxError(source, "STATUS", _("STATUS \037channel\037 \037item\037")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_STATUS); + source.Reply(_(" STATUS Returns the current access level of a user on a channel")); } }; diff --git a/modules/core/cs_suspend.cpp b/modules/core/cs_suspend.cpp index 0b4fe7b5c..9b4a06272 100644 --- a/modules/core/cs_suspend.cpp +++ b/modules/core/cs_suspend.cpp @@ -38,12 +38,12 @@ class CommandCSSuspend : public Command /* You should not SUSPEND a FORBIDEN channel */ if (ci->HasFlag(CI_FORBIDDEN)) { - source.Reply(CHAN_MAY_NOT_BE_REGISTERED, ci->name.c_str()); + source.Reply(_("Channel \002%s\002 may not be registered."), ci->name.c_str()); return MOD_CONT; } if (readonly) - source.Reply(READ_ONLY_MODE); + source.Reply(LanguageString::READ_ONLY_MODE); ci->SetFlag(CI_SUSPENDED); ci->forbidby = u->nick; @@ -59,7 +59,7 @@ class CommandCSSuspend : public Command if (uc->user->HasMode(UMODE_OPER)) continue; - c->Kick(NULL, uc->user, "%s", !reason.empty() ? reason.c_str() : GetString(uc->user->Account(), CHAN_SUSPEND_REASON).c_str()); + c->Kick(NULL, uc->user, "%s", !reason.empty() ? reason.c_str() : GetString(uc->user->Account(), _("This channel has been suspended.")).c_str()); } } @@ -67,7 +67,7 @@ class CommandCSSuspend : public Command ircdproto->SendGlobops(ChanServ, "\2%s\2 used SUSPEND on channel \2%s\2", u->nick.c_str(), ci->name.c_str()); Log(LOG_ADMIN, u, this, ci) << (!reason.empty() ? reason : "No reason"); - source.Reply(CHAN_SUSPEND_SUCCEEDED, ci->name.c_str()); + source.Reply(_("Channel \002%s\002 is now suspended."), ci->name.c_str()); FOREACH_MOD(I_OnChanSuspend, OnChanSuspend(ci)); @@ -76,18 +76,26 @@ class CommandCSSuspend : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(CHAN_SERVADMIN_HELP_SUSPEND); + source.Reply(_("Syntax: \002SUSPEND \037channel\037 [\037reason\037]\002\n" + " \n" + "Disallows anyone from registering or using the given\n" + "channel. May be cancelled by using the UNSUSPEND\n" + "command to preserve all previous channel data/settings.\n" + " \n" + "Reason may be required on certain networks.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "SUSPEND", Config->ForceForbidReason ? CHAN_SUSPEND_SYNTAX_REASON : CHAN_SUSPEND_SYNTAX); + SyntaxError(source, "SUSPEND", Config->ForceForbidReason ? _("SUSPEND \037channel\037 \037reason\037") : _("SUSPEND \037channel\037 \037freason\037")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_SUSPEND); + source.Reply(_(" SUSPEND Prevent a channel from being used preserving\n" + " channel data and settings")); + } }; @@ -105,12 +113,12 @@ class CommandCSUnSuspend : public Command ChannelInfo *ci = source.ci; if (readonly) - source.Reply(READ_ONLY_MODE); + source.Reply(LanguageString::READ_ONLY_MODE); /* Only UNSUSPEND already suspended channels */ if (!ci->HasFlag(CI_SUSPENDED)) { - source.Reply(CHAN_UNSUSPEND_FAILED, ci->name.c_str()); + source.Reply(_("Couldn't release channel \002%s\002!"), ci->name.c_str()); return MOD_CONT; } @@ -123,7 +131,7 @@ class CommandCSUnSuspend : public Command if (Config->WallForbid) ircdproto->SendGlobops(ChanServ, "\2%s\2 used UNSUSPEND on channel \2%s\2", u->nick.c_str(), ci->name.c_str()); - source.Reply(CHAN_UNSUSPEND_SUCCEEDED, ci->name.c_str()); + source.Reply(_("Channel \002%s\002 is now released."), ci->name.c_str()); FOREACH_MOD(I_OnChanUnsuspend, OnChanUnsuspend(ci)); @@ -132,18 +140,21 @@ class CommandCSUnSuspend : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(CHAN_SERVADMIN_HELP_UNSUSPEND); + source.Reply(_("Syntax: \002UNSUSPEND \037channel\037\002\n" + " \n" + "Releases a suspended channel. All data and settings\n" + "are preserved from before the suspension.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "UNSUSPEND", CHAN_UNSUSPEND_SYNTAX); + SyntaxError(source, "UNSUSPEND", _("UNSUSPEND \037channel\037")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_UNSUSPEND); + source.Reply(_(" UNSUSPEND Releases a suspended channel")); } }; diff --git a/modules/core/cs_topic.cpp b/modules/core/cs_topic.cpp index 46ca69739..20005b07b 100644 --- a/modules/core/cs_topic.cpp +++ b/modules/core/cs_topic.cpp @@ -29,9 +29,9 @@ class CommandCSTopic : public Command Channel *c = ci->c; if (!c) - source.Reply(CHAN_X_NOT_IN_USE, ci->name.c_str()); + source.Reply(LanguageString::CHAN_X_NOT_IN_USE, ci->name.c_str()); else if (!check_access(u, ci, CA_TOPIC) && !u->Account()->HasCommand("chanserv/topic")) - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); else { bool has_topiclock = ci->HasFlag(CI_TOPICLOCK); @@ -48,18 +48,27 @@ class CommandCSTopic : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(CHAN_HELP_TOPIC); + source.Reply(_("Syntax: \002TOPIC \037channel\037 [\037topic\037]\002\n" + " \n" + "Causes %S to set the channel topic to the one\n" + "specified. If \002topic\002 is not given, then an empty topic\n" + "is set. This command is most useful in conjunction\n" + "with \002SET TOPICLOCK\002. See \002%R%S HELP SET TOPICLOCK\002\n" + "for more information.\n" + " \n" + "By default, limited to those with founder access on the\n" + "channel.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "TOPIC", CHAN_TOPIC_SYNTAX); + SyntaxError(source, "TOPIC", _("TOPIC \037channel\037 [\037topic\037]")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_TOPIC); + source.Reply(_(" TOPIC Manipulate the topic of the specified channel")); } }; diff --git a/modules/core/cs_unban.cpp b/modules/core/cs_unban.cpp index 2beb94534..f4156e02a 100644 --- a/modules/core/cs_unban.cpp +++ b/modules/core/cs_unban.cpp @@ -28,13 +28,13 @@ class CommandCSUnban : public Command if (!c) { - source.Reply(CHAN_X_NOT_IN_USE, ci->name.c_str()); + source.Reply(LanguageString::CHAN_X_NOT_IN_USE, ci->name.c_str()); return MOD_CONT; } if (!check_access(u, ci, CA_UNBAN)) { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); return MOD_CONT; } @@ -44,33 +44,39 @@ class CommandCSUnban : public Command if (!u2) { - source.Reply(NICK_X_NOT_IN_USE, params[1].c_str()); + source.Reply(LanguageString::NICK_X_NOT_IN_USE, params[1].c_str()); return MOD_CONT; } common_unban(ci, u2, u == u2); if (u2 == u) - source.Reply(CHAN_UNBANNED, c->name.c_str()); + source.Reply(_("You have been unbanned from \002%s\002."), c->name.c_str()); else - source.Reply(CHAN_UNBANNED_OTHER, u2->nick.c_str(), c->name.c_str()); + source.Reply(_("\002%s\002 has been unbanned from \002%s\002."), u2->nick.c_str(), c->name.c_str()); return MOD_CONT; } bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(CHAN_HELP_UNBAN); + source.Reply(_("Syntax: \002UNBAN \037channel\037 [\037nick\037]\002\n" + " \n" + "Tells %S to remove all bans preventing you or the given\n" + "user from entering the given channel. \n" + " \n" + "By default, limited to AOPs or those with level 5 and above\n" + "on the channel.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "UNBAN", CHAN_UNBAN_SYNTAX); + SyntaxError(source, "UNBAN", _("UNBAN \037channel\037 [\037nick\037]")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_UNBAN); + source.Reply(_(" UNBAN Remove all bans preventing a user from entering a channel")); } }; diff --git a/modules/core/cs_xop.cpp b/modules/core/cs_xop.cpp index cd4f675ab..9a0e6e16d 100644 --- a/modules/core/cs_xop.cpp +++ b/modules/core/cs_xop.cpp @@ -23,94 +23,14 @@ enum XOP_TYPES }; -enum -{ - XOP_DISABLED, - XOP_ADDED, - XOP_MOVED, - XOP_NO_SUCH_ENTRY, - XOP_NOT_FOUND, - XOP_NO_MATCH, - XOP_DELETED, - XOP_DELETED_ONE, - XOP_DELETED_SEVERAL, - XOP_LIST_EMPTY, - XOP_LIST_HEADER, - XOP_CLEAR, - XOP_MESSAGES -}; - -LanguageString xop_msgs[XOP_TYPES][XOP_MESSAGES] = { - {CHAN_AOP_DISABLED, - CHAN_AOP_ADDED, - CHAN_AOP_MOVED, - CHAN_AOP_NO_SUCH_ENTRY, - CHAN_AOP_NOT_FOUND, - CHAN_AOP_NO_MATCH, - CHAN_AOP_DELETED, - CHAN_AOP_DELETED_ONE, - CHAN_AOP_DELETED_SEVERAL, - CHAN_AOP_LIST_EMPTY, - CHAN_AOP_LIST_HEADER, - CHAN_AOP_CLEAR}, - {CHAN_SOP_DISABLED, - CHAN_SOP_ADDED, - CHAN_SOP_MOVED, - CHAN_SOP_NO_SUCH_ENTRY, - CHAN_SOP_NOT_FOUND, - CHAN_SOP_NO_MATCH, - CHAN_SOP_DELETED, - CHAN_SOP_DELETED_ONE, - CHAN_SOP_DELETED_SEVERAL, - CHAN_SOP_LIST_EMPTY, - CHAN_SOP_LIST_HEADER, - CHAN_SOP_CLEAR}, - {CHAN_VOP_DISABLED, - CHAN_VOP_ADDED, - CHAN_VOP_MOVED, - CHAN_VOP_NO_SUCH_ENTRY, - CHAN_VOP_NOT_FOUND, - CHAN_VOP_NO_MATCH, - CHAN_VOP_DELETED, - CHAN_VOP_DELETED_ONE, - CHAN_VOP_DELETED_SEVERAL, - CHAN_VOP_LIST_EMPTY, - CHAN_VOP_LIST_HEADER, - CHAN_VOP_CLEAR}, - {CHAN_HOP_DISABLED, - CHAN_HOP_ADDED, - CHAN_HOP_MOVED, - CHAN_HOP_NO_SUCH_ENTRY, - CHAN_HOP_NOT_FOUND, - CHAN_HOP_NO_MATCH, - CHAN_HOP_DELETED, - CHAN_HOP_DELETED_ONE, - CHAN_HOP_DELETED_SEVERAL, - CHAN_HOP_LIST_EMPTY, - CHAN_HOP_LIST_HEADER, - CHAN_HOP_CLEAR}, - {CHAN_QOP_DISABLED, - CHAN_QOP_ADDED, - CHAN_QOP_MOVED, - CHAN_QOP_NO_SUCH_ENTRY, - CHAN_QOP_NOT_FOUND, - CHAN_QOP_NO_MATCH, - CHAN_QOP_DELETED, - CHAN_QOP_DELETED_ONE, - CHAN_QOP_DELETED_SEVERAL, - CHAN_QOP_LIST_EMPTY, - CHAN_QOP_LIST_HEADER, - CHAN_QOP_CLEAR} -}; - class XOPListCallback : public NumberList { CommandSource &source; int level; - LanguageString *messages; + Command *c; bool SentHeader; public: - XOPListCallback(CommandSource &_source, const Anope::string &numlist, int _level, LanguageString *_messages) : NumberList(numlist, false), source(_source), level(_level), messages(_messages), SentHeader(false) + XOPListCallback(CommandSource &_source, const Anope::string &numlist, int _level, Command *_c) : NumberList(numlist, false), source(_source), level(_level), c(_c), SentHeader(false) { } @@ -127,15 +47,15 @@ class XOPListCallback : public NumberList if (!SentHeader) { SentHeader = true; - source.Reply(messages[XOP_LIST_HEADER], source.ci->name.c_str()); + source.Reply(_("%s list for %s:\n Num Nick"), this->c->name.c_str(), source.ci->name.c_str()); } - DoList(source, access, Number - 1, level, messages); + DoList(source, access, Number - 1, level); } - static void DoList(CommandSource &source, ChanAccess *access, unsigned index, int level, LanguageString *messages) + static void DoList(CommandSource &source, ChanAccess *access, unsigned index, int level) { - source.Reply(CHAN_XOP_LIST_FORMAT, index, access->mask.c_str()); + source.Reply(_(" %3d %s"), index, access->mask.c_str()); } }; @@ -143,27 +63,26 @@ class XOPDelCallback : public NumberList { CommandSource &source; Command *c; - LanguageString *messages; unsigned Deleted; Anope::string Nicks; bool override; public: - XOPDelCallback(CommandSource &_source, Command *_c, LanguageString *_messages, bool _override, const Anope::string &numlist) : NumberList(numlist, true), source(_source), c(_c), messages(_messages), Deleted(0), override(_override) + XOPDelCallback(CommandSource &_source, Command *_c, bool _override, const Anope::string &numlist) : NumberList(numlist, true), source(_source), c(_c), Deleted(0), override(_override) { } ~XOPDelCallback() { if (!Deleted) - source.Reply(messages[XOP_NO_MATCH], source.ci->name.c_str()); + source.Reply(_("No matching entries on %s %s list."), source.ci->name.c_str(), this->c->name.c_str()); else { Log(override ? LOG_OVERRIDE : LOG_COMMAND, source.u, c, source.ci) << "deleted access of users " << Nicks; if (Deleted == 1) - source.Reply(messages[XOP_DELETED_ONE], source.ci->name.c_str()); + source.Reply(_("Deleted one entry from %s %s list."), source.ci->name.c_str(), this->c->name.c_str()); else - source.Reply(messages[XOP_DELETED_SEVERAL], Deleted, source.ci->name.c_str()); + source.Reply(_("Deleted %d entries from %s %s list."), Deleted, source.ci->name.c_str(), this->c->name.c_str()); } } @@ -189,7 +108,7 @@ class XOPDelCallback : public NumberList class XOPBase : public Command { private: - CommandReturn DoAdd(CommandSource &source, const std::vector<Anope::string> ¶ms, int level, LanguageString *messages) + CommandReturn DoAdd(CommandSource &source, const std::vector<Anope::string> ¶ms, int level) { User *u = source.u; ChannelInfo *ci = source.ci; @@ -205,7 +124,7 @@ class XOPBase : public Command if (readonly) { - source.Reply(messages[XOP_DISABLED]); + source.Reply(_("Sorry, channel %s list modification is temporarily disabled."), this->name.c_str()); return MOD_CONT; } @@ -214,7 +133,7 @@ class XOPBase : public Command if ((level >= ulev || ulev < ACCESS_AOP) && !u->Account()->HasPriv("chanserv/access/modify")) { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); return MOD_CONT; } @@ -223,7 +142,7 @@ class XOPBase : public Command mask += "!*@*"; else if (na && na->HasFlag(NS_FORBIDDEN)) { - source.Reply(NICK_X_FORBIDDEN, na->nick.c_str()); + source.Reply(LanguageString::NICK_X_FORBIDDEN, na->nick.c_str()); return MOD_CONT; } @@ -235,7 +154,7 @@ class XOPBase : public Command **/ if (access->level >= ulev && !u->Account()->HasPriv("chanserv/access/modify")) { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); return MOD_CONT; } ++change; @@ -243,7 +162,7 @@ class XOPBase : public Command if (!change && ci->GetAccessCount() >= Config->CSAccessMax) { - source.Reply(CHAN_XOP_REACHED_LIMIT, Config->CSAccessMax); + source.Reply(_("Sorry, you can only have %d %s entries on a channel."), Config->CSAccessMax, this->name.c_str()); return MOD_CONT; } @@ -262,18 +181,18 @@ class XOPBase : public Command if (!change) { FOREACH_MOD(I_OnAccessAdd, OnAccessAdd(ci, u, access)); - source.Reply(messages[XOP_ADDED], access->mask.c_str(), ci->name.c_str()); + source.Reply(("\002%s\002 added to %s %s list."), access->mask.c_str(), ci->name.c_str(), this->name.c_str()); } else { FOREACH_MOD(I_OnAccessChange, OnAccessChange(ci, u, access)); - source.Reply(messages[XOP_MOVED], access->mask.c_str(), ci->name.c_str()); + source.Reply(_("\002%s\002 moved to %s %s list."), access->mask.c_str(), ci->name.c_str(), this->name.c_str()); } return MOD_CONT; } - CommandReturn DoDel(CommandSource &source, const std::vector<Anope::string> ¶ms, int level, LanguageString *messages) + CommandReturn DoDel(CommandSource &source, const std::vector<Anope::string> ¶ms, int level) { User *u = source.u; ChannelInfo *ci = source.ci; @@ -288,13 +207,13 @@ class XOPBase : public Command if (readonly) { - source.Reply(messages[XOP_DISABLED]); + source.Reply(_("Sorry, channel %s list modification is temporarily disabled."), this->name.c_str()); return MOD_CONT; } if (!ci->GetAccessCount()) { - source.Reply(messages[XOP_LIST_EMPTY], ci->name.c_str()); + source.Reply(_("%s %s list is empty."), ci->name.c_str(), this->name.c_str()); return MOD_CONT; } @@ -303,7 +222,7 @@ class XOPBase : public Command if ((!access || access->nc != u->Account()) && (level >= ulev || ulev < ACCESS_AOP) && !u->Account()->HasPriv("chanserv/access/modify")) { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); return MOD_CONT; } @@ -313,24 +232,24 @@ class XOPBase : public Command if (isdigit(mask[0]) && mask.find_first_not_of("1234567890,-") == Anope::string::npos) { bool override = level >= ulev || ulev < ACCESS_AOP; - XOPDelCallback list(source, this, messages, override, mask); + XOPDelCallback list(source, this, override, mask); list.Process(); } else if (!access || access->level != level) { - source.Reply(messages[XOP_NOT_FOUND], mask.c_str(), ci->name.c_str()); + source.Reply(_("\002%s\002 not found on %s %s list."), mask.c_str(), ci->name.c_str(), this->name.c_str()); return MOD_CONT; } else { if (access->nc != u->Account() && ulev <= access->level && !u->Account()->HasPriv("chanserv/access/modify")) - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); else { bool override = ulev <= access->level; Log(override ? LOG_OVERRIDE : LOG_COMMAND, u, this, ci) << "DEL " << access->mask; - source.Reply(messages[XOP_DELETED], access->mask.c_str(), ci->name.c_str()); + source.Reply(_("\002%s\002 deleted from %s %s list."), access->mask.c_str(), ci->name.c_str(), this->name.c_str()); FOREACH_MOD(I_OnAccessDel, OnAccessDel(ci, u, access)); @@ -341,7 +260,7 @@ class XOPBase : public Command return MOD_CONT; } - CommandReturn DoList(CommandSource &source, const std::vector<Anope::string> ¶ms, int level, LanguageString *messages) + CommandReturn DoList(CommandSource &source, const std::vector<Anope::string> ¶ms, int level) { User *u = source.u; ChannelInfo *ci = source.ci; @@ -353,7 +272,7 @@ class XOPBase : public Command if (!ulev && !u->Account()->HasCommand("chanserv/access/list")) { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); return MOD_CONT; } @@ -362,13 +281,13 @@ class XOPBase : public Command if (!ci->GetAccessCount()) { - source.Reply(messages[XOP_LIST_EMPTY], ci->name.c_str()); + source.Reply(_("%s %s list is empty."), ci->name.c_str(), this->name.c_str()); return MOD_CONT; } if (!nick.empty() && nick.find_first_not_of("1234567890,-") == Anope::string::npos) { - XOPListCallback list(source, nick, level, messages); + XOPListCallback list(source, nick, level, this); list.Process(); } else @@ -387,39 +306,39 @@ class XOPBase : public Command if (!SentHeader) { SentHeader = true; - source.Reply(messages[XOP_LIST_HEADER], ci->name.c_str()); + source.Reply(_("%s list for %s:\n Num Nick"), ci->name.c_str()); } - XOPListCallback::DoList(source, access, i + 1, level, messages); + XOPListCallback::DoList(source, access, i + 1, level); } if (!SentHeader) - source.Reply(messages[XOP_NO_MATCH], ci->name.c_str()); + source.Reply(_("No matching entries on %s %s list."), ci->name.c_str(), this->name.c_str()); } return MOD_CONT; } - CommandReturn DoClear(CommandSource &source, int level, LanguageString *messages) + CommandReturn DoClear(CommandSource &source, int level) { User *u = source.u; ChannelInfo *ci = source.ci; if (readonly) { - source.Reply(messages[XOP_DISABLED]); + source.Reply(_("Sorry, channel %s list modification is temporarily disabled."), this->name.c_str()); return MOD_CONT; } if (!ci->GetAccessCount()) { - source.Reply(messages[XOP_LIST_EMPTY], ci->name.c_str()); + source.Reply(_("%s %s list is empty."), ci->name.c_str(), this->name.c_str()); return MOD_CONT; } if (!check_access(u, ci, CA_FOUNDER) && !u->Account()->HasPriv("chanserv/access/modify")) { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); return MOD_CONT; } @@ -435,27 +354,29 @@ class XOPBase : public Command FOREACH_MOD(I_OnAccessClear, OnAccessClear(ci, u)); - source.Reply(messages[XOP_CLEAR], ci->name.c_str()); + source.Reply(_("Channel %s %s list has been cleared."), ci->name.c_str(), this->name.c_str()); return MOD_CONT; } + protected: - CommandReturn DoXop(CommandSource &source, const std::vector<Anope::string> ¶ms, int level, LanguageString *messages) + CommandReturn DoXop(CommandSource &source, const std::vector<Anope::string> ¶ms, int level) { ChannelInfo *ci = source.ci; const Anope::string &cmd = params[1]; if (!ci->HasFlag(CI_XOP)) - source.Reply(CHAN_XOP_ACCESS, Config->s_ChanServ.c_str()); + source.Reply(_("You can't use this command. Use the ACCESS command instead.\n" + "Type \002%R%s HELP ACCESS\002 for more information."), Config->s_ChanServ.c_str()); else if (cmd.equals_ci("ADD")) - return this->DoAdd(source, params, level, messages); + return this->DoAdd(source, params, level); else if (cmd.equals_ci("DEL")) - return this->DoDel(source, params, level, messages); + return this->DoDel(source, params, level); else if (cmd.equals_ci("LIST")) - return this->DoList(source, params, level, messages); + return this->DoList(source, params, level); else if (cmd.equals_ci("CLEAR")) - return this->DoClear(source, level, messages); + return this->DoClear(source, level); else this->OnSyntaxError(source, ""); @@ -488,23 +409,58 @@ class CommandCSQOP : public XOPBase CommandReturn Execute(CommandSource &source, const std::vector<Anope::string> ¶ms) { - return this->DoXop(source, params, ACCESS_QOP, xop_msgs[XOP_QOP]); + return this->DoXop(source, params, ACCESS_QOP); } bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(CHAN_HELP_QOP); + source.Reply(_("Syntax: \002QOP \037channel\037 ADD \037mask\037\002\n" + " \002QOP \037channel\037 DEL {\037mask\037 | \037entry-num\037 | \037list\037}\002\n" + " \002QOP \037channel\037 LIST [\037mask\037 | \037list\037]\002\n" + " \002QOP \037channel\037 CLEAR\002\n" + " \n" + "Maintains the \002QOP\002 (AutoOwner) \002list\002 for a channel. The QOP \n" + "list gives users the right to be auto-owner on your channel,\n" + "which gives them almost (or potentially, total) access.\n" + " \n" + "The \002QOP ADD\002 command adds the given nickname to the\n" + "QOP list.\n" + " \n" + "The \002QOP DEL\002 command removes the given nick from the\n" + "QOP list. If a list of entry numbers is given, those\n" + "entries are deleted. (See the example for LIST below.)\n" + " \n" + "The \002QOP LIST\002 command displays the QOP list. If\n" + "a wildcard mask is given, only those entries matching the\n" + "mask are displayed. If a list of entry numbers is given,\n" + "only those entries are shown; for example:\n" + " \002QOP #channel LIST 2-5,7-9\002\n" + " Lists QOP entries numbered 2 through 5 and\n" + " 7 through 9.\n" + " \n" + "The \002QOP CLEAR\002 command clears all entries of the\n" + "QOP list.\n" + " \n" + "The \002QOP\002 commands are limited to\n" + "founders (unless SECUREOPS is off). However, any user on the\n" + "QOP list may use the \002QOP LIST\002 command.\n" + " \n" + "This command may have been disabled for your channel, and\n" + "in that case you need to use the access list. See \n" + "\002%R%S HELP ACCESS\002 for information about the access list,\n" + "and \002%R%S HELP SET XOP\002 to know how to toggle between \n" + "the access list and xOP list systems.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "QOP", CHAN_QOP_SYNTAX); + SyntaxError(source, "QOP", _("QOP \037channel\037 {ADD|DEL|LIST|CLEAR} [\037nick\037 | \037entry-list\037]")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_QOP); + source.Reply(_(" QOP Modify the list of QOP users")); } }; @@ -517,23 +473,61 @@ class CommandCSAOP : public XOPBase CommandReturn Execute(CommandSource &source, const std::vector<Anope::string> ¶ms) { - return this->DoXop(source, params, ACCESS_AOP, xop_msgs[XOP_AOP]); + return this->DoXop(source, params, ACCESS_AOP); } bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(CHAN_HELP_AOP); + source.Reply(_("Syntax: \002AOP \037channel\037 ADD \037mask\037\002\n" + " \002AOP \037channel\037 DEL {\037mask\037 | \037entry-num\037 | \037list\037}\002\n" + " \002AOP \037channel\037 LIST [\037mask\037 | \037list\037]\002\n" + " \002AOP \037channel\037 CLEAR\002\n" + " \n" + "Maintains the \002AOP\002 (AutoOP) \002list\002 for a channel. The AOP \n" + "list gives users the right to be auto-opped on your channel,\n" + "to unban or invite themselves if needed, to have their\n" + "greet message showed on join, and so on.\n" + " \n" + "The \002AOP ADD\002 command adds the given nickname to the\n" + "AOP list.\n" + " \n" + "The \002AOP DEL\002 command removes the given nick from the\n" + "AOP list. If a list of entry numbers is given, those\n" + "entries are deleted. (See the example for LIST below.)\n" + " \n" + "The \002AOP LIST\002 command displays the AOP list. If\n" + "a wildcard mask is given, only those entries matching the\n" + "mask are displayed. If a list of entry numbers is given,\n" + "only those entries are shown; for example:\n" + " \002AOP #channel LIST 2-5,7-9\002\n" + " Lists AOP entries numbered 2 through 5 and\n" + " 7 through 9.\n" + " \n" + "The \002AOP CLEAR\002 command clears all entries of the\n" + "AOP list.\n" + " \n" + "The \002AOP ADD\002 and \002AOP DEL\002 commands are limited to\n" + "SOPs or above, while the \002AOP CLEAR\002 command can only\n" + "be used by the channel founder. However, any user on the\n" + "AOP list may use the \002AOP LIST\002 command.\n" + " \n" + "This command may have been disabled for your channel, and\n" + "in that case you need to use the access list. See \n" + "\002%R%S HELP ACCESS\002 for information about the access list,\n" + "and \002%R%S HELP SET XOP\002 to know how to toggle between \n" + "the access list and xOP list systems.")); + /* CHAN_HELP_HOP */ return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "AOP", CHAN_AOP_SYNTAX); + SyntaxError(source, "AOP", _("AOP \037channel\037 {ADD|DEL|LIST|CLEAR} [\037nick\037 | \037entry-list\037]")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_AOP); + source.Reply(_(" AOP Modify the list of AOP users")); } }; @@ -546,23 +540,58 @@ class CommandCSHOP : public XOPBase CommandReturn Execute(CommandSource &source, const std::vector<Anope::string> ¶ms) { - return this->DoXop(source, params, ACCESS_HOP, xop_msgs[XOP_HOP]); + return this->DoXop(source, params, ACCESS_HOP); } bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(CHAN_HELP_HOP); + source.Reply(_("Syntax: \002HOP \037channel\037 ADD \037mask\037\002\n" + " \002HOP \037channel\037 DEL {\037mask\037 | \037entry-num\037 | \037list\037}\002\n" + " \002HOP \037channel\037 LIST [\037mask\037 | \037list\037]\002\n" + " \002HOP \037channel\037 CLEAR\002\n" + " \n" + "Maintains the \002HOP\002 (HalfOP) \002list\002 for a channel. The HOP \n" + "list gives users the right to be auto-halfopped on your \n" + "channel.\n" + " \n" + "The \002HOP ADD\002 command adds the given nickname to the\n" + "HOP list.\n" + " \n" + "The \002HOP DEL\002 command removes the given nick from the\n" + "HOP list. If a list of entry numbers is given, those\n" + "entries are deleted. (See the example for LIST below.)\n" + " \n" + "The \002HOP LIST\002 command displays the HOP list. If\n" + "a wildcard mask is given, only those entries matching the\n" + "mask are displayed. If a list of entry numbers is given,\n" + "only those entries are shown; for example:\n" + " \002HOP #channel LIST 2-5,7-9\002\n" + " Lists HOP entries numbered 2 through 5 and\n" + " 7 through 9.\n" + " \n" + "The \002HOP CLEAR\002 command clears all entries of the\n" + "HOP list.\n" + " \n" + "The \002HOP ADD\002, \002HOP DEL\002 and \002HOP LIST\002 commands are \n" + "limited to AOPs or above, while the \002HOP CLEAR\002 command \n" + "can only be used by the channel founder.\n" + " \n" + "This command may have been disabled for your channel, and\n" + "in that case you need to use the access list. See \n" + "\002%R%S HELP ACCESS\002 for information about the access list,\n" + "and \002%R%S HELP SET XOP\002 to know how to toggle between \n" + "the access list and xOP list systems.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "HOP", CHAN_HOP_SYNTAX); + SyntaxError(source, "HOP", _("HOP \037channel\037 {ADD|DEL|LIST|CLEAR} [\037nick\037 | \037entry-list\037]")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_HOP); + source.Reply(_(" HOP Maintains the HOP (HalfOP) list for a channel")); } }; @@ -575,23 +604,59 @@ class CommandCSSOP : public XOPBase CommandReturn Execute(CommandSource &source, const std::vector<Anope::string> ¶ms) { - return this->DoXop(source, params, ACCESS_SOP, xop_msgs[XOP_SOP]); + return this->DoXop(source, params, ACCESS_SOP); } bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(CHAN_HELP_SOP); + source.Reply(_("Syntax: \002SOP \037channel\037 ADD \037mask\037\002\n" + " \002SOP \037channel\037 DEL {\037mask\037 | \037entry-num\037 | \037list\037}\002\n" + " \002SOP \037channel\037 LIST [\037mask\037 | \037list\037]\002\n" + " \002SOP \037channel\037 CLEAR\002\n" + " \n" + "Maintains the \002SOP\002 (SuperOP) \002list\002 for a channel. The SOP \n" + "list gives users all rights given by the AOP list, and adds\n" + "those needed to use the AutoKick and the BadWords lists, \n" + "to send and read channel memos, and so on.\n" + " \n" + "The \002SOP ADD\002 command adds the given nickname to the\n" + "SOP list.\n" + " \n" + "The \002SOP DEL\002 command removes the given nick from the\n" + "SOP list. If a list of entry numbers is given, those\n" + "entries are deleted. (See the example for LIST below.)\n" + " \n" + "The \002SOP LIST\002 command displays the SOP list. If\n" + "a wildcard mask is given, only those entries matching the\n" + "mask are displayed. If a list of entry numbers is given,\n" + "only those entries are shown; for example:\n" + " \002SOP #channel LIST 2-5,7-9\002\n" + " Lists AOP entries numbered 2 through 5 and\n" + " 7 through 9.\n" + " \n" + "The \002SOP CLEAR\002 command clears all entries of the\n" + "SOP list.\n" + " \n" + "The \002SOP ADD\002, \002SOP DEL\002 and \002SOP CLEAR\002 commands are \n" + "limited to the channel founder. However, any user on the\n" + "AOP list may use the \002SOP LIST\002 command.\n" + " \n" + "This command may have been disabled for your channel, and\n" + "in that case you need to use the access list. See \n" + "\002%R%S HELP ACCESS\002 for information about the access list,\n" + "and \002%R%S HELP SET XOP\002 to know how to toggle between \n" + "the access list and xOP list systems.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "SOP", CHAN_SOP_SYNTAX); + SyntaxError(source, "SOP", _("SOP \037channel\037 {ADD|DEL|LIST|CLEAR} [\037nick\037 | \037entry-list\037]")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_SOP); + source.Reply(_(" SOP Modify the list of SOP users")); } }; @@ -604,23 +669,58 @@ class CommandCSVOP : public XOPBase CommandReturn Execute(CommandSource &source, const std::vector<Anope::string> ¶ms) { - return this->DoXop(source, params, ACCESS_VOP, xop_msgs[XOP_VOP]); + return this->DoXop(source, params, ACCESS_VOP); } bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(CHAN_HELP_VOP); + source.Reply(_("Syntax: \002VOP \037channel\037 ADD \037mask\037\002\n" + " \002VOP \037channel\037 DEL {\037mask\037 | \037entry-num\037 | \037list\037}\002\n" + " \002VOP \037channel\037 LIST [\037mask\037 | \037list\037]\002\n" + " \002VOP \037channel\037 CLEAR\002\n" + " \n" + "Maintains the \002VOP\002 (VOicePeople) \002list\002 for a channel. \n" + "The VOP list allows users to be auto-voiced and to voice \n" + "themselves if they aren't.\n" + " \n" + "The \002VOP ADD\002 command adds the given nickname to the\n" + "VOP list.\n" + " \n" + "The \002VOP DEL\002 command removes the given nick from the\n" + "VOP list. If a list of entry numbers is given, those\n" + "entries are deleted. (See the example for LIST below.)\n" + " \n" + "The \002VOP LIST\002 command displays the VOP list. If\n" + "a wildcard mask is given, only those entries matching the\n" + "mask are displayed. If a list of entry numbers is given,\n" + "only those entries are shown; for example:\n" + " \002VOP #channel LIST 2-5,7-9\002\n" + " Lists VOP entries numbered 2 through 5 and\n" + " 7 through 9.\n" + " \n" + "The \002VOP CLEAR\002 command clears all entries of the\n" + "VOP list.\n" + " \n" + "The \002VOP ADD\002, \002VOP DEL\002 and \002VOP LIST\002 commands are \n" + "limited to AOPs or above, while the \002VOP CLEAR\002 command \n" + "can only be used by the channel founder.\n" + " \n" + "This command may have been disabled for your channel, and\n" + "in that case you need to use the access list. See \n" + "\002%R%S HELP ACCESS\002 for information about the access list,\n" + "and \002%R%S HELP SET XOP\002 to know how to toggle between \n" + "the access list and xOP list systems.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "VOP", CHAN_VOP_SYNTAX); + SyntaxError(source, "VOP", _("VOP \037channel\037 {ADD|DEL|LIST|CLEAR} [\037nick\037 | \037entry-list\037]")); } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_VOP); + source.Reply(_(" VOP Maintains the VOP (VOicePeople) list for a channel")); } }; diff --git a/modules/core/hs_del.cpp b/modules/core/hs_del.cpp index f119fcaae..627680119 100644 --- a/modules/core/hs_del.cpp +++ b/modules/core/hs_del.cpp @@ -29,34 +29,36 @@ class CommandHSDel : public Command { if (na->HasFlag(NS_FORBIDDEN)) { - source.Reply(NICK_X_FORBIDDEN, nick.c_str()); + source.Reply(LanguageString::NICK_X_FORBIDDEN, nick.c_str()); return MOD_CONT; } Log(LOG_ADMIN, u, this) << "for user " << na->nick; FOREACH_MOD(I_OnDeleteVhost, OnDeleteVhost(na)); na->hostinfo.RemoveVhost(); - source.Reply(HOST_DEL, nick.c_str()); + source.Reply(_("vhost for \002%s\002 removed."), nick.c_str()); } else - source.Reply(HOST_NOREG, nick.c_str()); + source.Reply(LanguageString::NICK_X_NOT_REGISTERED, nick.c_str()); return MOD_CONT; } bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(HOST_HELP_DEL); + source.Reply(_("Syntax: \002DEL\002 \002<nick>\002\n" + "Deletes the vhost assigned to the given nick from the\n" + "database.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "DEL", HOST_DEL_SYNTAX); + SyntaxError(source, "DEL", _("DEL \002<nick>\002.")); } void OnServHelp(CommandSource &source) { - source.Reply(HOST_HELP_CMD_DEL); + source.Reply(_(" DEL Delete the vhost of another user")); } }; diff --git a/modules/core/hs_delall.cpp b/modules/core/hs_delall.cpp index 4e88051d0..03455a146 100644 --- a/modules/core/hs_delall.cpp +++ b/modules/core/hs_delall.cpp @@ -29,7 +29,7 @@ class CommandHSDelAll : public Command { if (na->HasFlag(NS_FORBIDDEN)) { - source.Reply(NICK_X_FORBIDDEN, nick.c_str()); + source.Reply(LanguageString::NICK_X_FORBIDDEN, nick.c_str()); return MOD_CONT; } FOREACH_MOD(I_OnDeleteVhost, OnDeleteVhost(na)); @@ -40,28 +40,30 @@ class CommandHSDelAll : public Command na->hostinfo.RemoveVhost(); } Log(LOG_ADMIN, u, this) << "for all nicks in group " << nc->display; - source.Reply(HOST_DELALL, nc->display.c_str()); + source.Reply(_("vhosts for group \002%s\002 have been removed."), nc->display.c_str()); } else - source.Reply(HOST_NOREG, nick.c_str()); + source.Reply(LanguageString::NICK_X_NOT_REGISTERED, nick.c_str()); return MOD_CONT; } bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(HOST_HELP_DELALL); + source.Reply(_("Syntax: \002DELALL\002 \002<nick>\002.\n" + "Deletes the vhost for all nicks in the same group as\n" + "that of the given nick.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "DELALL", HOST_DELALL_SYNTAX); + SyntaxError(source, "DELALL", _("DELALL <nick>\002.")); } void OnServHelp(CommandSource &source) { - source.Reply(HOST_HELP_CMD_DELALL); + source.Reply(_(" DELALL Delete the vhost for all nicks in a group")); } }; diff --git a/modules/core/hs_group.cpp b/modules/core/hs_group.cpp index 0eec94113..abcb82e72 100644 --- a/modules/core/hs_group.cpp +++ b/modules/core/hs_group.cpp @@ -28,25 +28,29 @@ class CommandHSGroup : public Command { HostServSyncVhosts(na); if (!na->hostinfo.GetIdent().empty()) - source.Reply(HOST_IDENT_GROUP, u->Account()->display.c_str(), na->hostinfo.GetIdent().c_str(), na->hostinfo.GetHost().c_str()); + source.Reply(_("All vhost's in the group \002%s\002 have been set to \002%s\002@\002%s\002"), u->Account()->display.c_str(), na->hostinfo.GetIdent().c_str(), na->hostinfo.GetHost().c_str()); else - source.Reply(HOST_GROUP, u->Account()->display.c_str(), na->hostinfo.GetHost().c_str()); + source.Reply(_("All vhost's in the group \002%s\002 have been set to \002%s\002"), u->Account()->display.c_str(), na->hostinfo.GetHost().c_str()); } else - source.Reply(HOST_NOT_ASSIGNED); + source.Reply(LanguageString::HOST_NOT_ASSIGNED); return MOD_CONT; } bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(HOST_HELP_GROUP); + source.Reply(_("Syntax: \002GROUP\002\n" + " \n" + "This command allows users to set the vhost of their\n" + "CURRENT nick to be the vhost for all nicks in the same\n" + "group.")); return true; } void OnServHelp(CommandSource &source) { - source.Reply(HOST_HELP_CMD_GROUP); + source.Reply(_(" GROUP Syncs the vhost for all nicks in a group")); } }; diff --git a/modules/core/hs_help.cpp b/modules/core/hs_help.cpp index f94ec9d53..35d2b99cb 100644 --- a/modules/core/hs_help.cpp +++ b/modules/core/hs_help.cpp @@ -30,7 +30,7 @@ class CommandHSHelp : public Command void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { User *u = source.u; - source.Reply(OPER_HELP, Config->s_HostServ.c_str()); + source.Reply(_("%s commands"), Config->s_HostServ.c_str()); for (CommandMap::const_iterator it = HostServ->Commands.begin(), it_end = HostServ->Commands.end(); it != it_end; ++it) if (!Config->HidePrivilegedCommands || it->second->permission.empty() || (u->Account() && u->Account()->HasCommand(it->second->permission))) it->second->OnServHelp(source); diff --git a/modules/core/hs_list.cpp b/modules/core/hs_list.cpp index 0f27e51aa..31a201611 100644 --- a/modules/core/hs_list.cpp +++ b/modules/core/hs_list.cpp @@ -35,14 +35,14 @@ class CommandHSList : public Command size_t tmp = key.find('-'); if (tmp == Anope::string::npos || tmp == key.length() || tmp == 1) { - source.Reply(LIST_INCORRECT_RANGE); + source.Reply(LanguageString::LIST_INCORRECT_RANGE); return MOD_CONT; } for (unsigned i = 1, end = key.length(); i < end; ++i) { if (!isdigit(key[i]) && i != tmp) { - source.Reply(LIST_INCORRECT_RANGE); + source.Reply(LanguageString::LIST_INCORRECT_RANGE); return MOD_CONT; } from = convertTo<int>(key.substr(1, tmp - 1)); @@ -63,9 +63,9 @@ class CommandHSList : public Command { ++display_counter; if (!na->hostinfo.GetIdent().empty()) - source.Reply(HOST_IDENT_ENTRY, counter, na->nick.c_str(), na->hostinfo.GetIdent().c_str(), na->hostinfo.GetHost().c_str(), na->hostinfo.GetCreator().c_str(), do_strftime(na->hostinfo.GetTime()).c_str()); + source.Reply(_("#%d Nick:\002%s\002, vhost:\002%s\002@\002%s\002 (%s - %s)"), counter, na->nick.c_str(), na->hostinfo.GetIdent().c_str(), na->hostinfo.GetHost().c_str(), na->hostinfo.GetCreator().c_str(), do_strftime(na->hostinfo.GetTime()).c_str()); else - source.Reply(HOST_ENTRY, counter, na->nick.c_str(), na->hostinfo.GetHost().c_str(), na->hostinfo.GetCreator().c_str(), do_strftime(na->hostinfo.GetTime()).c_str()); + source.Reply(_("#%d Nick:\002%s\002, vhost:\002%s\002 (%s - %s)"), counter, na->nick.c_str(), na->hostinfo.GetHost().c_str(), na->hostinfo.GetCreator().c_str(), do_strftime(na->hostinfo.GetTime()).c_str()); } } else @@ -78,34 +78,43 @@ class CommandHSList : public Command { ++display_counter; if (!na->hostinfo.GetIdent().empty()) - source.Reply(HOST_IDENT_ENTRY, counter, na->nick.c_str(), na->hostinfo.GetIdent().c_str(), na->hostinfo.GetHost().c_str(), na->hostinfo.GetCreator().c_str(), do_strftime(na->hostinfo.GetTime()).c_str()); + source.Reply(_("#%d Nick:\002%s\002, vhost:\002%s\002@\002%s\002 (%s - %s)"), counter, na->nick.c_str(), na->hostinfo.GetIdent().c_str(), na->hostinfo.GetHost().c_str(), na->hostinfo.GetCreator().c_str(), do_strftime(na->hostinfo.GetTime()).c_str()); else - source.Reply(HOST_ENTRY, counter, na->nick.c_str(), na->hostinfo.GetHost().c_str(), na->hostinfo.GetCreator().c_str(), do_strftime(na->hostinfo.GetTime()).c_str()); + source.Reply(_("#%d Nick:\002%s\002, vhost:\002%s\002 (%s - %s)"), counter, na->nick.c_str(), na->hostinfo.GetHost().c_str(), na->hostinfo.GetCreator().c_str(), do_strftime(na->hostinfo.GetTime()).c_str()); } } ++counter; } if (!key.empty()) - source.Reply(HOST_LIST_KEY_FOOTER, key.c_str(), display_counter); + source.Reply(_("Displayed records matching key \002%s\002 (Count: \002%d\002)"), key.c_str(), display_counter); else { if (from) - source.Reply(HOST_LIST_RANGE_FOOTER, from, to); + source.Reply(_("Displayed records from \002%d\002 to \002%d\002"), from, to); else - source.Reply(HOST_LIST_FOOTER, display_counter); + source.Reply(_("Displayed all records (Count: \002%d\002)"), display_counter); } return MOD_CONT; } bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(HOST_HELP_LIST); + source.Reply(_("Syntax: \002LIST\002 \002[<key>|<#X-Y>]\002\n" + "This command lists registered vhosts to the operator\n" + "if a Key is specified, only entries whos nick or vhost match\n" + "the pattern given in <key> are displayed e.g. Rob* for all\n" + "entries beginning with \"Rob\"\n" + "If a #X-Y style is used, only entries between the range of X\n" + "and Y will be displayed, e.g. #1-3 will display the first 3\n" + "nick/vhost entries.\n" + "The list uses the value of NSListMax as a hard limit for the\n" + "number of items to display to a operator at any 1 time.")); return true; } void OnServHelp(CommandSource &source) { - source.Reply(HOST_HELP_CMD_LIST); + source.Reply(_(" LIST Displays one or more vhost entries.")); } }; diff --git a/modules/core/hs_off.cpp b/modules/core/hs_off.cpp index b38164bb0..d61beca1f 100644 --- a/modules/core/hs_off.cpp +++ b/modules/core/hs_off.cpp @@ -26,12 +26,12 @@ class CommandHSOff : public Command NickAlias *na = findnick(u->nick); if (!na || !na->hostinfo.HasVhost()) - source.Reply(HOST_NOT_ASSIGNED); + source.Reply(LanguageString::HOST_NOT_ASSIGNED); else { ircdproto->SendVhostDel(u); Log(LOG_COMMAND, u, this) << "to disable their vhost"; - source.Reply(HOST_OFF); + source.Reply(_("Your vhost was removed and the normal cloaking restored.")); } return MOD_CONT; @@ -39,13 +39,16 @@ class CommandHSOff : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(HOST_HELP_OFF); + source.Reply(_("Syntax: \002OFF\002\n" + "Deactivates the vhost currently assigned to the nick in use.\n" + "When you use this command any user who performs a /whois\n" + "on you will see your real IP address.")); return true; } void OnServHelp(CommandSource &source) { - source.Reply(HOST_HELP_CMD_OFF); + source.Reply(_(" OFF Deactivates your assigned vhost")); } }; diff --git a/modules/core/hs_on.cpp b/modules/core/hs_on.cpp index 1834578ad..72bdfa45b 100644 --- a/modules/core/hs_on.cpp +++ b/modules/core/hs_on.cpp @@ -27,9 +27,9 @@ class CommandHSOn : public Command if (na && u->Account() == na->nc && na->hostinfo.HasVhost()) { if (!na->hostinfo.GetIdent().empty()) - source.Reply(HOST_IDENT_ACTIVATED, na->hostinfo.GetIdent().c_str(), na->hostinfo.GetHost().c_str()); + source.Reply(_("Your vhost of \002%s\002@\002%s\002 is now activated."), na->hostinfo.GetIdent().c_str(), na->hostinfo.GetHost().c_str()); else - source.Reply(HOST_ACTIVATED, na->hostinfo.GetHost().c_str()); + source.Reply(_("Your vhost of \002%s\002 is now activated."), na->hostinfo.GetHost().c_str()); Log(LOG_COMMAND, u, this) << "to enable their vhost of " << (!na->hostinfo.GetIdent().empty() ? na->hostinfo.GetIdent() + "@" : "") << na->hostinfo.GetHost(); ircdproto->SendVhost(u, na->hostinfo.GetIdent(), na->hostinfo.GetHost()); if (ircd->vhost) @@ -42,20 +42,23 @@ class CommandHSOn : public Command u->UpdateHost(); } else - source.Reply(HOST_NOT_ASSIGNED); + source.Reply(LanguageString::HOST_NOT_ASSIGNED); return MOD_CONT; } bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(HOST_HELP_ON); + source.Reply(_("Syntax: \002ON\002\n" + "Activates the vhost currently assigned to the nick in use.\n" + "When you use this command any user who performs a /whois\n" + "on you will see the vhost instead of your real IP address.")); return true; } void OnServHelp(CommandSource &source) { - source.Reply(HOST_HELP_CMD_ON); + source.Reply(_(" ON Activates your assigned vhost")); } }; diff --git a/modules/core/hs_set.cpp b/modules/core/hs_set.cpp index 0e11ad3e8..f4fcfb58a 100644 --- a/modules/core/hs_set.cpp +++ b/modules/core/hs_set.cpp @@ -34,12 +34,12 @@ class CommandHSSet : public Command rawhostmask = myStrGetTokenRemainder(rawhostmask, '@', 1); /* get the remaining string */ if (rawhostmask.empty()) { - source.Reply(HOST_SET_SYNTAX, Config->s_HostServ.c_str()); + source.Reply(_("SET \002<nick>\002 \002<hostmask>\002."), Config->s_HostServ.c_str()); return MOD_CONT; } if (vIdent.length() > Config->UserLen) { - source.Reply(HOST_SET_IDENTTOOLONG, Config->UserLen); + source.Reply(LanguageString::HOST_SET_IDENTTOOLONG, Config->UserLen); return MOD_CONT; } else @@ -47,13 +47,13 @@ class CommandHSSet : public Command for (Anope::string::iterator s = vIdent.begin(), s_end = vIdent.end(); s != s_end; ++s) if (!isvalidchar(*s)) { - source.Reply(HOST_SET_IDENT_ERROR); + source.Reply(LanguageString::HOST_SET_IDENT_ERROR); return MOD_CONT; } } if (!ircd->vident) { - source.Reply(HOST_NO_VIDENT); + source.Reply(LanguageString::HOST_NO_VIDENT); return MOD_CONT; } } @@ -61,13 +61,13 @@ class CommandHSSet : public Command hostmask = rawhostmask; else { - source.Reply(HOST_SET_TOOLONG, Config->HostLen); + source.Reply(LanguageString::HOST_SET_TOOLONG, Config->HostLen); return MOD_CONT; } if (!isValidHost(hostmask, 3)) { - source.Reply(HOST_SET_ERROR); + source.Reply(LanguageString::HOST_SET_ERROR); return MOD_CONT; } @@ -76,7 +76,7 @@ class CommandHSSet : public Command { if (na->HasFlag(NS_FORBIDDEN)) { - source.Reply(NICK_X_FORBIDDEN, nick.c_str()); + source.Reply(LanguageString::NICK_X_FORBIDDEN, nick.c_str()); return MOD_CONT; } @@ -85,29 +85,34 @@ class CommandHSSet : public Command na->hostinfo.SetVhost(vIdent, hostmask, u->nick); FOREACH_MOD(I_OnSetVhost, OnSetVhost(na)); if (!vIdent.empty()) - source.Reply(HOST_IDENT_SET, nick.c_str(), vIdent.c_str(), hostmask.c_str()); + source.Reply(_("vhost for \002%s\002 set to \002%s\002@\002%s\002."), nick.c_str(), vIdent.c_str(), hostmask.c_str()); else - source.Reply(HOST_SET, nick.c_str(), hostmask.c_str()); + source.Reply(_("vhost for \002%s\002 set to \002%s\002."), nick.c_str(), hostmask.c_str()); } else - source.Reply(HOST_NOREG, nick.c_str()); + source.Reply(LanguageString::NICK_X_NOT_REGISTERED, nick.c_str()); + return MOD_CONT; } bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(HOST_HELP_SET); + source.Reply(_("Syntax: \002SET\002 \002<nick>\002 \002<hostmask>\002.\n" + "Sets the vhost for the given nick to that of the given\n" + "hostmask. If your IRCD supports vIdents, then using\n" + "SET <nick> <ident>@<hostmask> set idents for users as \n" + "well as vhosts.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "SET", HOST_SET_SYNTAX); + SyntaxError(source, "SET", _("SET \002<nick>\002 \002<hostmask>\002.")); } void OnServHelp(CommandSource &source) { - source.Reply(HOST_HELP_CMD_SET); + source.Reply(_(" SET Set the vhost of another user")); } }; diff --git a/modules/core/hs_setall.cpp b/modules/core/hs_setall.cpp index 3aac924e4..c5c2d777d 100644 --- a/modules/core/hs_setall.cpp +++ b/modules/core/hs_setall.cpp @@ -32,12 +32,12 @@ class CommandHSSetAll : public Command NickAlias *na = findnick(nick); if (!na) { - source.Reply(HOST_NOREG, nick.c_str()); + source.Reply(LanguageString::NICK_X_NOT_REGISTERED, nick.c_str()); return MOD_CONT; } else if (na->HasFlag(NS_FORBIDDEN)) { - source.Reply(NICK_X_FORBIDDEN, nick.c_str()); + source.Reply(LanguageString::NICK_X_FORBIDDEN, nick.c_str()); return MOD_CONT; } @@ -47,12 +47,12 @@ class CommandHSSetAll : public Command rawhostmask = myStrGetTokenRemainder(rawhostmask, '@', 1); /* get the remaining string */ if (rawhostmask.empty()) { - source.Reply(HOST_SETALL_SYNTAX, Config->s_HostServ.c_str()); + source.Reply(_("vhost for group \002%s\002 set to \002%s\002."), Config->s_HostServ.c_str()); return MOD_CONT; } if (vIdent.length() > Config->UserLen) { - source.Reply(HOST_SET_IDENTTOOLONG, Config->UserLen); + source.Reply(LanguageString::HOST_SET_IDENTTOOLONG, Config->UserLen); return MOD_CONT; } else @@ -60,13 +60,13 @@ class CommandHSSetAll : public Command for (Anope::string::iterator s = vIdent.begin(), s_end = vIdent.end(); s != s_end; ++s) if (!isvalidchar(*s)) { - source.Reply(HOST_SET_IDENT_ERROR); + source.Reply(LanguageString::HOST_SET_IDENT_ERROR); return MOD_CONT; } } if (!ircd->vident) { - source.Reply(HOST_NO_VIDENT); + source.Reply(LanguageString::HOST_NO_VIDENT); return MOD_CONT; } } @@ -76,13 +76,13 @@ class CommandHSSetAll : public Command hostmask = rawhostmask; else { - source.Reply(HOST_SET_TOOLONG, Config->HostLen); + source.Reply(LanguageString::HOST_SET_TOOLONG, Config->HostLen); return MOD_CONT; } if (!isValidHost(hostmask, 3)) { - source.Reply(HOST_SET_ERROR); + source.Reply(LanguageString::HOST_SET_ERROR); return MOD_CONT; } @@ -94,26 +94,32 @@ class CommandHSSetAll : public Command HostServSyncVhosts(na); FOREACH_MOD(I_OnSetVhost, OnSetVhost(na)); if (!vIdent.empty()) - source.Reply(HOST_IDENT_SETALL, nick.c_str(), vIdent.c_str(), hostmask.c_str()); + source.Reply(_("vhost for group \002%s\002 set to \002%s\002@\002%s\002."), nick.c_str(), vIdent.c_str(), hostmask.c_str()); else - source.Reply(HOST_SETALL, nick.c_str(), hostmask.c_str()); + source.Reply(_("vhost for group \002%s\002 set to \002%s\002."), nick.c_str(), hostmask.c_str()); return MOD_CONT; } bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(HOST_HELP_SETALL); + source.Reply(_("Syntax: \002SETALL\002 \002<nick>\002 \002<hostmask>\002.\n" + "Sets the vhost for all nicks in the same group as that\n" + "of the given nick. If your IRCD supports vIdents, then\n" + "using SETALL <nick> <ident>@<hostmask> will set idents\n" + "for users as well as vhosts.\n" + "* NOTE, this will not update the vhost for any nicks\n" + "added to the group after this command was used.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "SETALL", HOST_SETALL_SYNTAX); + SyntaxError(source, "SETALL", _("SETALL \002<nick>\002 \002<hostmask>\002.")); } void OnServHelp(CommandSource &source) { - source.Reply(HOST_HELP_CMD_SETALL); + source.Reply(_(" SETALL Set the vhost for all nicks in a group")); } }; diff --git a/modules/core/ms_cancel.cpp b/modules/core/ms_cancel.cpp index fb9e77c26..dc32624a5 100644 --- a/modules/core/ms_cancel.cpp +++ b/modules/core/ms_cancel.cpp @@ -34,9 +34,9 @@ class CommandMSCancel : public Command if (!(mi = getmemoinfo(nname, ischan, isforbid))) { if (isforbid) - source.Reply(ischan ? CHAN_X_FORBIDDEN : NICK_X_FORBIDDEN, nname.c_str()); + source.Reply(ischan ? LanguageString::CHAN_X_FORBIDDEN : LanguageString::NICK_X_FORBIDDEN, nname.c_str()); else - source.Reply(ischan ? CHAN_X_NOT_REGISTERED : NICK_X_NOT_REGISTERED, nname.c_str()); + source.Reply(ischan ? LanguageString::CHAN_X_NOT_REGISTERED : LanguageString::NICK_X_NOT_REGISTERED, nname.c_str()); } else { @@ -45,29 +45,32 @@ class CommandMSCancel : public Command { FOREACH_MOD(I_OnMemoDel, OnMemoDel(findnick(nname)->nc, mi, mi->memos[i])); mi->Del(mi->memos[i]); - source.Reply(MEMO_CANCELLED, nname.c_str()); + source.Reply(_("Last memo to \002%s\002 has been cancelled."), nname.c_str()); return MOD_CONT; } - source.Reply(MEMO_CANCEL_NONE); + source.Reply(_("No memo was cancelable.")); } return MOD_CONT; } bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(MEMO_HELP_CANCEL); + source.Reply(_("Syntax: \002CANCEL {\037nick\037 | \037channel\037}\002\n" + " \n" + "Cancels the last memo you sent to the given nick or channel,\n" + "provided it has not been read at the time you use the command.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "CANCEL", MEMO_CANCEL_SYNTAX); + SyntaxError(source, "CANCEL", _("CANCEL {\037nick\037 | \037channel\037}")); } void OnServHelp(CommandSource &source) { - source.Reply(MEMO_HELP_CMD_CANCEL); + source.Reply(_(" CANCEL Cancel last memo you sent")); } }; diff --git a/modules/core/ms_check.cpp b/modules/core/ms_check.cpp index b861a5b01..60e1d7182 100644 --- a/modules/core/ms_check.cpp +++ b/modules/core/ms_check.cpp @@ -31,13 +31,13 @@ class CommandMSCheck : public Command NickAlias *na = findnick(recipient); if (!na) { - source.Reply(NICK_X_NOT_REGISTERED, recipient.c_str()); + source.Reply(LanguageString::NICK_X_NOT_REGISTERED, recipient.c_str()); return MOD_CONT; } if (na->HasFlag(NS_FORBIDDEN)) { - source.Reply(NICK_X_FORBIDDEN, recipient.c_str()); + source.Reply(LanguageString::NICK_X_FORBIDDEN, recipient.c_str()); return MOD_CONT; } @@ -53,33 +53,36 @@ class CommandMSCheck : public Command found = true; /* Yes, we've found the memo */ if (mi->memos[i]->HasFlag(MF_UNREAD)) - source.Reply(MEMO_CHECK_NOT_READ, na->nick.c_str(), do_strftime(mi->memos[i]->time).c_str()); + source.Reply(_("The last memo you sent to %s (sent on %s) has not yet been read."), na->nick.c_str(), do_strftime(mi->memos[i]->time).c_str()); else - source.Reply(MEMO_CHECK_READ, na->nick.c_str(), do_strftime(mi->memos[i]->time).c_str()); + source.Reply(_("The last memo you sent to %s (sent on %s) has been read."), na->nick.c_str(), do_strftime(mi->memos[i]->time).c_str()); break; } } if (!found) - source.Reply(MEMO_CHECK_NO_MEMO, na->nick.c_str()); + source.Reply(_("Nick %s doesn't have a memo from you."), na->nick.c_str()); return MOD_CONT; } bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(MEMO_HELP_CHECK); + source.Reply(_("Syntax: \002CHECK \037nick\037\002\n" + " \n" + "Checks whether the _last_ memo you sent to \037nick\037 has been read\n" + "or not. Note that this does only work with nicks, not with chans.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "CHECK", MEMO_CHECK_SYNTAX); + SyntaxError(source, "CHECK", _("CHECK \037nickname\037")); } void OnServHelp(CommandSource &source) { - source.Reply(MEMO_HELP_CMD_CHECK); + source.Reply(_(" CHECK Checks if last memo to a nick was read")); } }; diff --git a/modules/core/ms_del.cpp b/modules/core/ms_del.cpp index 3f778bfbe..668d3c418 100644 --- a/modules/core/ms_del.cpp +++ b/modules/core/ms_del.cpp @@ -34,7 +34,7 @@ class MemoDelCallback : public NumberList FOREACH_MOD(I_OnMemoDel, OnMemoDel(source.u->Account(), mi, mi->memos[Number - 1])); mi->Del(Number - 1); - source.Reply(MEMO_DELETED_ONE, Number); + source.Reply(_("Memo %d has been deleted."), Number); } }; @@ -60,17 +60,17 @@ class CommandMSDel : public Command if (!(ci = cs_findchan(chan))) { - source.Reply(CHAN_X_NOT_REGISTERED, chan.c_str()); + source.Reply(LanguageString::CHAN_X_NOT_REGISTERED, chan.c_str()); return MOD_CONT; } else if (readonly) { - source.Reply(READ_ONLY_MODE); + source.Reply(LanguageString::READ_ONLY_MODE); return MOD_CONT; } else if (!check_access(u, ci, CA_MEMO)) { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); return MOD_CONT; } mi = &ci->memos; @@ -82,9 +82,9 @@ class CommandMSDel : public Command else if (mi->memos.empty()) { if (!chan.empty()) - source.Reply(MEMO_X_HAS_NO_MEMOS, chan.c_str()); + source.Reply(LanguageString::MEMO_X_HAS_NO_MEMOS, chan.c_str()); else - source.Reply(MEMO_HAVE_NO_MEMOS); + source.Reply(LanguageString::MEMO_HAVE_NO_MEMOS); } else { @@ -101,7 +101,7 @@ class CommandMSDel : public Command else FOREACH_MOD(I_OnMemoDel, OnMemoDel(u->Account(), mi, mi->memos[mi->memos.size() - 1])); mi->Del(mi->memos[mi->memos.size() - 1]); - source.Reply(MEMO_DELETED_ONE, mi->memos.size() + 1); + source.Reply(_("Memo %d has been deleted."), mi->memos.size() + 1); } else { @@ -114,9 +114,9 @@ class CommandMSDel : public Command delete mi->memos[i]; mi->memos.clear(); if (!chan.empty()) - source.Reply(MEMO_CHAN_DELETED_ALL, chan.c_str()); + source.Reply(_("All memos for channel %s have been deleted."), chan.c_str()); else - source.Reply(MEMO_DELETED_ALL); + source.Reply(_("All of your memos have been deleted.")); } } return MOD_CONT; @@ -124,18 +124,33 @@ class CommandMSDel : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(MEMO_HELP_DEL); + source.Reply(_("Syntax: \002DEL [\037channel\037] {\037num\037 | \037list\037 | LAST | ALL}\002\n" + " \n" + "Deletes the specified memo or memos. You can supply\n" + "multiple memo numbers or ranges of numbers instead of a\n" + "single number, as in the second example below.\n" + " \n" + "If \002LAST\002 is given, the last memo will be deleted.\n" + "If \002ALL\002 is given, deletes all of your memos.\n" + " \n" + "Examples:\n" + " \n" + " \002DEL 1\002\n" + " Deletes your first memo.\n" + " \n" + " \002DEL 2-5,7-9\002\n" + " Deletes memos numbered 2 through 5 and 7 through 9.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "DEL", MEMO_DEL_SYNTAX); + SyntaxError(source, "DEL", _("DEL [\037channel\037] {\037num\037 | \037list\037 | ALL}")); } void OnServHelp(CommandSource &source) { - source.Reply(MEMO_HELP_CMD_DEL); + source.Reply(_(" DEL Delete a memo or memos")); } }; diff --git a/modules/core/ms_help.cpp b/modules/core/ms_help.cpp index d67d012b1..fdcbbaf1e 100644 --- a/modules/core/ms_help.cpp +++ b/modules/core/ms_help.cpp @@ -30,11 +30,20 @@ class CommandMSHelp : public Command void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { User *u = source.u; - source.Reply(MEMO_HELP_HEADER); + source.Reply(_("\002%S\002 is a utility allowing IRC users to send short\n" + "messages to other IRC users, whether they are online at\n" + "the time or not, or to channels(*). Both the sender's\n" + "nickname and the target nickname or channel must be\n" + "registered in order to send a memo.\n" + "%S's commands include:")); for (CommandMap::const_iterator it = MemoServ->Commands.begin(), it_end = MemoServ->Commands.end(); it != it_end; ++it) if (!Config->HidePrivilegedCommands || it->second->permission.empty() || (u->Account() && u->Account()->HasCommand(it->second->permission))) it->second->OnServHelp(source); - source.Reply(MEMO_HELP_FOOTER, Config->s_ChanServ.c_str()); + source.Reply(_("Type \002%R%S HELP \037command\037\002 for help on any of the\n" + "above commands.\n" + "(*) By default, any user with at least level 10 access on a\n" + " channel can read that channel's memos. This can be\n" + " changed with the %s \002LEVELS\002 command."), Config->s_ChanServ.c_str()); } }; diff --git a/modules/core/ms_ignore.cpp b/modules/core/ms_ignore.cpp index 8ff5b2e18..647219833 100644 --- a/modules/core/ms_ignore.cpp +++ b/modules/core/ms_ignore.cpp @@ -40,21 +40,21 @@ class CommandMSIgnore : public Command if (!mi) { if (isforbid) - source.Reply(ischan ? CHAN_X_FORBIDDEN : NICK_X_FORBIDDEN, channel.c_str()); + source.Reply(ischan ? LanguageString::CHAN_X_FORBIDDEN : LanguageString::NICK_X_FORBIDDEN, channel.c_str()); else - source.Reply(ischan ? CHAN_X_NOT_REGISTERED : NICK_X_NOT_REGISTERED, channel.c_str()); + source.Reply(ischan ? LanguageString::CHAN_X_NOT_REGISTERED : LanguageString::NICK_X_NOT_REGISTERED, channel.c_str()); } else if (ischan && !check_access(u, cs_findchan(channel), CA_MEMO)) - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); else if (command.equals_ci("ADD") && !param.empty()) { if (std::find(mi->ignores.begin(), mi->ignores.end(), param.ci_str()) == mi->ignores.end()) { mi->ignores.push_back(param.ci_str()); - source.Reply(MEMO_IGNORE_ADD, param.c_str()); + source.Reply(_("\002%s\002 added to your ignore list."), param.c_str()); } else - source.Reply(MEMO_IGNORE_ALREADY_IGNORED, param.c_str()); + source.Reply(_("\002%s\002 is already on your ignore list."), param.c_str()); } else if (command.equals_ci("DEL") && !param.empty()) { @@ -63,18 +63,18 @@ class CommandMSIgnore : public Command if (it != mi->ignores.end()) { mi->ignores.erase(it); - source.Reply(MEMO_IGNORE_DEL, param.c_str()); + source.Reply(_("\002%s\002 removed from your ignore list."), param.c_str()); } else - source.Reply(MEMO_IGNORE_NOT_IGNORED, param.c_str()); + source.Reply(_("\002%s\002 is not on your ignore list."), param.c_str()); } else if (command.equals_ci("LIST")) { if (mi->ignores.empty()) - source.Reply(MEMO_IGNORE_LIST_EMPTY); + source.Reply(_("Your memo ignore list is empty.")); else { - source.Reply(MEMO_IGNORE_LIST_HEADER); + source.Reply(_("Ignore list:")); for (unsigned i = 0; i < mi->ignores.size(); ++i) source.Reply(" %s", mi->ignores[i].c_str()); } @@ -87,18 +87,21 @@ class CommandMSIgnore : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(MEMO_HELP_IGNORE); + source.Reply(_("Syntax: \002IGNORE [\037channek\037] {\002ADD|DEL|LIST\002} [\037entry\037]\n" + " \n" + "Allows you to ignore users by nick or host from memoing you. If someone on your\n" + "memo ignore list tries to memo you, they will not be told that you have them ignored.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "IGNORE", MEMO_IGNORE_SYNTAX); + SyntaxError(source, "IGNORE", _("IGNORE [\037channel\037] {\002ADD|DEL|\002} [\037entry\037]")); } void OnServHelp(CommandSource &source) { - source.Reply(MEMO_HELP_CMD_IGNORE); + source.Reply(_(" IGNORE Manage your memo ignore list")); } }; diff --git a/modules/core/ms_info.cpp b/modules/core/ms_info.cpp index aa2f8e8a7..1d34073d9 100644 --- a/modules/core/ms_info.cpp +++ b/modules/core/ms_info.cpp @@ -35,12 +35,12 @@ class CommandMSInfo : public Command na = findnick(nname); if (!na) { - source.Reply(NICK_X_NOT_REGISTERED, nname.c_str()); + source.Reply(LanguageString::NICK_X_NOT_REGISTERED, nname.c_str()); return MOD_CONT; } else if (na->HasFlag(NS_FORBIDDEN)) { - source.Reply(NICK_X_FORBIDDEN, nname.c_str()); + source.Reply(LanguageString::NICK_X_FORBIDDEN, nname.c_str()); return MOD_CONT; } mi = &na->nc->memos; @@ -50,12 +50,12 @@ class CommandMSInfo : public Command { if (!(ci = cs_findchan(nname))) { - source.Reply(CHAN_X_NOT_REGISTERED, nname.c_str()); + source.Reply(LanguageString::CHAN_X_NOT_REGISTERED, nname.c_str()); return MOD_CONT; } else if (!check_access(u, ci, CA_MEMO)) { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); return MOD_CONT; } mi = &ci->memos; @@ -63,7 +63,7 @@ class CommandMSInfo : public Command } else if (!nname.empty()) /* It's not a chan and we aren't services admin */ { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); return MOD_CONT; } else @@ -75,13 +75,13 @@ class CommandMSInfo : public Command if (!nname.empty() && (ci || na->nc != u->Account())) { if (mi->memos.empty()) - source.Reply(MEMO_INFO_X_NO_MEMOS, nname.c_str()); + source.Reply(_("%s currently has no memos."), nname.c_str()); else if (mi->memos.size() == 1) { if (mi->memos[0]->HasFlag(MF_UNREAD)) - source.Reply(MEMO_INFO_X_MEMO_UNREAD, nname.c_str()); + source.Reply(_("%s currently has \0021\002 memo, and it has not yet been read."), nname.c_str()); else - source.Reply(MEMO_INFO_X_MEMO, nname.c_str()); + source.Reply(_("%s currently has \0021\002 memo."), nname.c_str()); } else { @@ -90,55 +90,55 @@ class CommandMSInfo : public Command if (mi->memos[i]->HasFlag(MF_UNREAD)) ++count; if (count == mi->memos.size()) - source.Reply(MEMO_INFO_X_MEMOS_ALL_UNREAD, nname.c_str(), count); + source.Reply(_("%s currently has \002%d\002 memos; all of them are unread."), nname.c_str(), count); else if (!count) - source.Reply(MEMO_INFO_X_MEMOS, nname.c_str(), mi->memos.size()); + source.Reply(_("%s currently has \002%d\002 memos."), nname.c_str(), mi->memos.size()); else if (count == 1) - source.Reply(MEMO_INFO_X_MEMOS_ONE_UNREAD, nname.c_str(), mi->memos.size()); + source.Reply(_("%s currently has \002%d\002 memos, of which \0021\002 is unread."), nname.c_str(), mi->memos.size()); else - source.Reply(MEMO_INFO_X_MEMOS_SOME_UNREAD, nname.c_str(), mi->memos.size(), count); + source.Reply(_("%s currently has \002%d\002 memos, of which \002%d\002 are unread."), nname.c_str(), mi->memos.size(), count); } if (!mi->memomax) { if (hardmax) - source.Reply(MEMO_INFO_X_HARD_LIMIT, nname.c_str(), mi->memomax); + source.Reply(_("%s's memo limit is \002%d\002, and may not be changed."), nname.c_str(), mi->memomax); else - source.Reply(MEMO_INFO_X_LIMIT, nname.c_str(), mi->memomax); + source.Reply(_("%s's memo limit is \002%d\002."), nname.c_str(), mi->memomax); } else if (mi->memomax > 0) { if (hardmax) - source.Reply(MEMO_INFO_X_HARD_LIMIT, nname.c_str(), mi->memomax); + source.Reply(_("%s's memo limit is \002%d\002, and may not be changed."), nname.c_str(), mi->memomax); else - source.Reply(MEMO_INFO_X_LIMIT, nname.c_str(), mi->memomax); + source.Reply(_("%s's memo limit is \002%d\002."), nname.c_str(), mi->memomax); } else - source.Reply(MEMO_INFO_X_NO_LIMIT, nname.c_str()); + source.Reply(_("%s has no memo limit."), nname.c_str()); /* I ripped this code out of ircservices 4.4.5, since I didn't want to rewrite the whole thing (it pisses me off). */ if (na) { if (na->nc->HasFlag(NI_MEMO_RECEIVE) && na->nc->HasFlag(NI_MEMO_SIGNON)) - source.Reply(MEMO_INFO_X_NOTIFY_ON, nname.c_str()); + source.Reply(_("%s is notified of new memos at logon and when they arrive."), nname.c_str()); else if (na->nc->HasFlag(NI_MEMO_RECEIVE)) - source.Reply(MEMO_INFO_X_NOTIFY_RECEIVE, nname.c_str()); + source.Reply(_("%s is notified when new memos arrive."), nname.c_str()); else if (na->nc->HasFlag(NI_MEMO_SIGNON)) - source.Reply(MEMO_INFO_X_NOTIFY_SIGNON, nname.c_str()); + source.Reply(_("%s is notified of news memos at logon."), nname.c_str()); else - source.Reply(MEMO_INFO_X_NOTIFY_OFF, nname.c_str()); + source.Reply(_("%s is not notified of new memos."), nname.c_str()); } } else /* !nname || (!ci || na->nc == u->Account()) */ { if (mi->memos.empty()) - source.Reply(MEMO_INFO_NO_MEMOS); + source.Reply(_("You currently have no memos.")); else if (mi->memos.size() == 1) { if (mi->memos[0]->HasFlag(MF_UNREAD)) - source.Reply(MEMO_INFO_MEMO_UNREAD); + source.Reply(_("You currently have \0021\002 memo, and it has not yet been read.")); else - source.Reply(MEMO_INFO_MEMO); + source.Reply(_("You currently have \0021\002 memo.")); } else { @@ -147,41 +147,41 @@ class CommandMSInfo : public Command if (mi->memos[i]->HasFlag(MF_UNREAD)) ++count; if (count == mi->memos.size()) - source.Reply(MEMO_INFO_MEMOS_ALL_UNREAD, count); + source.Reply(_("You currently have \002%d\002 memos; all of them are unread."), count); else if (!count) - source.Reply(MEMO_INFO_MEMOS, mi->memos.size()); + source.Reply(_("You currently have \002%d\002 memos."), mi->memos.size()); else if (count == 1) - source.Reply(MEMO_INFO_MEMOS_ONE_UNREAD, mi->memos.size()); + source.Reply(_("You currently have \002%d\002 memos, of which \0021\002 is unread."), mi->memos.size()); else - source.Reply(MEMO_INFO_MEMOS_SOME_UNREAD, mi->memos.size(), count); + source.Reply(_("You currently have \002%d\002 memos, of which \002%d\002 are unread."), mi->memos.size(), count); } if (!mi->memomax) { if (!u->Account()->IsServicesOper() && hardmax) - source.Reply(MEMO_INFO_HARD_LIMIT_ZERO); + source.Reply(_("Your memo limit is \0020\002; you will not receive any new memos. You cannot change this limit.")); else - source.Reply(MEMO_INFO_LIMIT_ZERO); + source.Reply(_("Your memo limit is \0020\002; you will not receive any new memos.")); } else if (mi->memomax > 0) { if (!u->Account()->IsServicesOper() && hardmax) - source.Reply(MEMO_INFO_HARD_LIMIT, mi->memomax); + source.Reply(_("Your memo limit is \002%d\002, and may not be changed."), mi->memomax); else - source.Reply(MEMO_INFO_LIMIT, mi->memomax); + source.Reply(_("Your memo limit is \002%d\002."), mi->memomax); } else - source.Reply(MEMO_INFO_NO_LIMIT); + source.Reply(_("You have no limit on the number of memos you may keep.")); /* Ripped too. But differently because of a seg fault (loughs) */ if (u->Account()->HasFlag(NI_MEMO_RECEIVE) && u->Account()->HasFlag(NI_MEMO_SIGNON)) - source.Reply(MEMO_INFO_NOTIFY_ON); + source.Reply(_("You will be notified of new memos at logon and when they arrive.")); else if (u->Account()->HasFlag(NI_MEMO_RECEIVE)) - source.Reply(MEMO_INFO_NOTIFY_RECEIVE); + source.Reply(_("You will be notified when new memos arrive.")); else if (u->Account()->HasFlag(NI_MEMO_SIGNON)) - source.Reply(MEMO_INFO_NOTIFY_SIGNON); + source.Reply(_("You will be notified of new memos at logon.")); else - source.Reply(MEMO_INFO_NOTIFY_OFF); + source.Reply(_("You will not be notified of new memos.")); } return MOD_CONT; } @@ -190,16 +190,31 @@ class CommandMSInfo : public Command { User *u = source.u; if (u->Account() && u->Account()->IsServicesOper()) - source.Reply(MEMO_SERVADMIN_HELP_INFO); + source.Reply(_("Syntax: \002INFO [\037nick\037 | \037channel\037]\002\n" + "Without a parameter, displays information on the number of\n" + "memos you have, how many of them are unread, and how many\n" + "total memos you can receive.\n" + " \n" + "With a channel parameter, displays the same information for\n" + "the given channel.\n" + " \n" + "With a nickname parameter, displays the same information\n" + "for the given nickname. This use limited to \002Services\n" + "admins\002.")); else - source.Reply(MEMO_HELP_INFO); + source.Reply(_("Syntax: \002INFO [\037channel\037]\002\n" + " \n" + "Displays information on the number of memos you have, how\n" + "many of them are unread, and how many total memos you can\n" + "receive. With a parameter, displays the same information\n" + "for the given channel.")); return true; } void OnServHelp(CommandSource &source) { - source.Reply(MEMO_HELP_CMD_INFO); + source.Reply(_(" INFO Displays information about your memos")); } }; diff --git a/modules/core/ms_list.cpp b/modules/core/ms_list.cpp index 1b797dc2b..d00e9bd27 100644 --- a/modules/core/ms_list.cpp +++ b/modules/core/ms_list.cpp @@ -33,11 +33,11 @@ class MemoListCallback : public NumberList { SentHeader = true; if (ci) - source.Reply(MEMO_LIST_CHAN_MEMOS, ci->name.c_str(), Config->s_MemoServ.c_str(), ci->name.c_str()); + source.Reply(_("Memos for %s. To read, type: \002%R%s READ %s \037num\037\002"), ci->name.c_str(), Config->s_MemoServ.c_str(), ci->name.c_str()); else - source.Reply(MEMO_LIST_MEMOS, source.u->nick.c_str(), Config->s_MemoServ.c_str()); + source.Reply(_("Memos for %s. To read, type: \002%R%s READ \037num\037\002"), source.u->nick.c_str(), Config->s_MemoServ.c_str()); - source.Reply(MEMO_LIST_HEADER); + source.Reply(_(" Num Sender Date/Time")); } DoList(source, mi, Number - 1); @@ -46,7 +46,7 @@ class MemoListCallback : public NumberList static void DoList(CommandSource &source, const MemoInfo *mi, unsigned index) { Memo *m = mi->memos[index]; - source.Reply(MEMO_LIST_FORMAT, (m->HasFlag(MF_UNREAD)) ? '*' : ' ', index + 1, m->sender.c_str(), do_strftime(m->time).c_str()); + source.Reply(_("%c%3d %-16s %s"), (m->HasFlag(MF_UNREAD)) ? '*' : ' ', index + 1, m->sender.c_str(), do_strftime(m->time).c_str()); } }; @@ -73,12 +73,12 @@ class CommandMSList : public Command if (!(ci = cs_findchan(chan))) { - source.Reply(CHAN_X_NOT_REGISTERED, chan.c_str()); + source.Reply(LanguageString::CHAN_X_NOT_REGISTERED, chan.c_str()); return MOD_CONT; } else if (!check_access(u, ci, CA_MEMO)) { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); return MOD_CONT; } mi = &ci->memos; @@ -90,9 +90,9 @@ class CommandMSList : public Command else if (!mi->memos.size()) { if (!chan.empty()) - source.Reply(MEMO_X_HAS_NO_MEMOS, chan.c_str()); + source.Reply(LanguageString::MEMO_X_HAS_NO_MEMOS, chan.c_str()); else - source.Reply(MEMO_HAVE_NO_MEMOS); + source.Reply(LanguageString::MEMO_HAVE_NO_MEMOS); } else { @@ -111,9 +111,9 @@ class CommandMSList : public Command if (i == end) { if (!chan.empty()) - source.Reply(MEMO_X_HAS_NO_NEW_MEMOS, chan.c_str()); + source.Reply(LanguageString::MEMO_X_HAS_NO_NEW_MEMOS, chan.c_str()); else - source.Reply(MEMO_HAVE_NO_NEW_MEMOS); + source.Reply(LanguageString::MEMO_HAVE_NO_NEW_MEMOS); return MOD_CONT; } } @@ -129,10 +129,10 @@ class CommandMSList : public Command { SentHeader = true; if (ci) - source.Reply(!param.empty() ? MEMO_LIST_CHAN_NEW_MEMOS : MEMO_LIST_CHAN_MEMOS, ci->name.c_str(), Config->s_MemoServ.c_str(), ci->name.c_str()); + source.Reply(!param.empty() ? _("New memos for %s. To read, type: \002%R%s READ %s \037num\037\002") : _("Memos for %s. To read, type: \002%R%s READ %s \037num\037\002"), ci->name.c_str(), Config->s_MemoServ.c_str(), ci->name.c_str()); else - source.Reply(!param.empty() ? MEMO_LIST_NEW_MEMOS : MEMO_LIST_MEMOS, u->nick.c_str(), Config->s_MemoServ.c_str()); - source.Reply(MEMO_LIST_HEADER); + source.Reply(!param.empty() ? _("New memos for %s. To read, type: \002%R%s READ \037num\037\002") : _("Memos for %s. To read, type: \002%R%s READ \037num\037\002"), u->nick.c_str(), Config->s_MemoServ.c_str()); + source.Reply(_(" Num Sender Date/Time")); } MemoListCallback::DoList(source, mi, i); @@ -144,18 +144,25 @@ class CommandMSList : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(MEMO_HELP_LIST); + source.Reply(_("Syntax: \002LIST [\037channel\037] [\037list\037 | NEW]\002\n" + " \n" + "Lists any memos you currently have. With \002NEW\002, lists only\n" + "new (unread) memos. Unread memos are marked with a \"*\"\n" + "to the left of the memo number. You can also specify a list\n" + "of numbers, as in the example below:\n" + " \002LIST 2-5,7-9\002\n" + " Lists memos numbered 2 through 5 and 7 through 9.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "LIST", MEMO_LIST_SYNTAX); + SyntaxError(source, "LIST", _("LIST [\037channel\037] [\037list\037 | NEW]")); } void OnServCommand(CommandSource &source) { - source.Reply(MEMO_HELP_CMD_LIST); + source.Reply(_(" LIST List your memos")); } }; diff --git a/modules/core/ms_read.cpp b/modules/core/ms_read.cpp index c381349bb..181b376f1 100644 --- a/modules/core/ms_read.cpp +++ b/modules/core/ms_read.cpp @@ -34,10 +34,10 @@ class MemoListCallback : public NumberList { Memo *m = mi->memos[index]; if (ci) - source.Reply(MEMO_CHAN_HEADER, index + 1, m->sender.c_str(), do_strftime(m->time).c_str(), Config->s_MemoServ.c_str(), ci->name.c_str(), index + 1); + source.Reply(_("Memo %d from %s (%s). To delete, type: \002%R%s DEL %s %d\002"), index + 1, m->sender.c_str(), do_strftime(m->time).c_str(), Config->s_MemoServ.c_str(), ci->name.c_str(), index + 1); else - source.Reply(MEMO_HEADER, index + 1, m->sender.c_str(), do_strftime(m->time).c_str(), Config->s_MemoServ.c_str(), index + 1); - source.Reply(MEMO_TEXT, m->text.c_str()); + source.Reply(_("Memo %d from %s (%s). To delete, type: \002%R%s DEL %d\002"), index + 1, m->sender.c_str(), do_strftime(m->time).c_str(), Config->s_MemoServ.c_str(), index + 1); + source.Reply("%s", m->text.c_str()); m->UnsetFlag(MF_UNREAD); /* Check if a receipt notification was requested */ @@ -68,12 +68,12 @@ class CommandMSRead : public Command if (!(ci = cs_findchan(chan))) { - source.Reply(CHAN_X_NOT_REGISTERED, chan.c_str()); + source.Reply(LanguageString::CHAN_X_NOT_REGISTERED, chan.c_str()); return MOD_CONT; } else if (!check_access(u, ci, CA_MEMO)) { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); return MOD_CONT; } mi = &ci->memos; @@ -86,9 +86,9 @@ class CommandMSRead : public Command else if (mi->memos.empty()) { if (!chan.empty()) - source.Reply(MEMO_X_HAS_NO_MEMOS, chan.c_str()); + source.Reply(LanguageString::MEMO_X_HAS_NO_MEMOS, chan.c_str()); else - source.Reply(MEMO_HAVE_NO_MEMOS); + source.Reply(LanguageString::MEMO_HAVE_NO_MEMOS); } else { @@ -106,9 +106,9 @@ class CommandMSRead : public Command if (!readcount) { if (!chan.empty()) - source.Reply(MEMO_X_HAS_NO_NEW_MEMOS, chan.c_str()); + source.Reply(LanguageString::MEMO_X_HAS_NO_NEW_MEMOS, chan.c_str()); else - source.Reply(MEMO_HAVE_NO_NEW_MEMOS); + source.Reply(LanguageString::MEMO_HAVE_NO_NEW_MEMOS); } } else if (numstr.equals_ci("LAST")) @@ -127,18 +127,27 @@ class CommandMSRead : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(MEMO_HELP_READ); + source.Reply(_("Syntax: \002READ [\037channel\037] {\037num\037 | \037list\037 | LAST | NEW}\002\n" + " \n" + "Sends you the text of the memos specified. If LAST is\n" + "given, sends you the memo you most recently received. If\n" + "NEW is given, sends you all of your new memos. Otherwise,\n" + "sends you memo number \037num\037. You can also give a list of\n" + "numbers, as in this example:\n" + " \n" + " \002READ 2-5,7-9\002\n" + " Displays memos numbered 2 through 5 and 7 through 9.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "READ", MEMO_READ_SYNTAX); + SyntaxError(source, "READ", _("READ [\037channel\037] {\037list\037 | LAST | NEW}")); } void OnServHelp(CommandSource &source) { - source.Reply(MEMO_HELP_CMD_READ); + source.Reply(_(" READ Read a memo or memos")); } }; diff --git a/modules/core/ms_rsend.cpp b/modules/core/ms_rsend.cpp index 9f105a1ff..3fec2f8b7 100644 --- a/modules/core/ms_rsend.cpp +++ b/modules/core/ms_rsend.cpp @@ -31,7 +31,7 @@ class CommandMSRSend : public Command /* prevent user from rsend to themselves */ if ((na = findnick(nick)) && na->nc == u->Account()) { - source.Reply(MEMO_NO_RSEND_SELF); + source.Reply(_("You can not request a receipt when sending a memo to yourself.")); return MOD_CONT; } @@ -41,7 +41,7 @@ class CommandMSRSend : public Command if (u->Account()->IsServicesOper()) memo_send(source, nick, text, 3); else - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); } else if (Config->MSMemoReceipt == 2) /* Everybody can use rsend */ @@ -50,7 +50,7 @@ class CommandMSRSend : public Command { /* rsend has been disabled */ Log() << "MSMemoReceipt is set misconfigured to " << Config->MSMemoReceipt; - source.Reply(MEMO_RSEND_DISABLED); + source.Reply(_("Sorry, RSEND has been disabled on this network.")); } return MOD_CONT; @@ -58,18 +58,26 @@ class CommandMSRSend : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(MEMO_HELP_RSEND); + source.Reply(_("Syntax: \002RSEND {\037nick\037 | \037channel\037} \037memo-text\037\002\n" + " \n" + "Sends the named \037nick\037 or \037channel\037 a memo containing\n" + "\037memo-text\037. When sending to a nickname, the recipient will\n" + "receive a notice that he/she has a new memo. The target\n" + "nickname/channel must be registered.\n" + "Once the memo is read by its recipient, an automatic notification\n" + "memo will be sent to the sender informing him/her that the memo\n" + "has been read.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "RSEND", MEMO_RSEND_SYNTAX); + SyntaxError(source, "RSEND", _("RSEND {\037nick\037 | \037channel\037} \037memo-text\037")); } void OnServHelp(CommandSource &source) { - source.Reply(MEMO_HELP_CMD_RSEND); + source.Reply(_(" RSEND Sends a memo and requests a read receipt")); } }; diff --git a/modules/core/ms_send.cpp b/modules/core/ms_send.cpp index 467f62048..f368138e6 100644 --- a/modules/core/ms_send.cpp +++ b/modules/core/ms_send.cpp @@ -30,18 +30,23 @@ class CommandMSSend : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(MEMO_HELP_SEND); + source.Reply(_("Syntax: \002SEND {\037nick\037 | \037channel\037} \037memo-text\037\002\n" + " \n" + "Sends the named \037nick\037 or \037channel\037 a memo containing\n" + "\037memo-text\037. When sending to a nickname, the recipient will\n" + "receive a notice that he/she has a new memo. The target\n" + "nickname/channel must be registered.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "SEND", MEMO_SEND_SYNTAX); + SyntaxError(source, "SEND", LanguageString::MEMO_SEND_SYNTAX); } void OnServHelp(CommandSource &source) { - source.Reply(MEMO_HELP_CMD_SEND); + source.Reply(_(" SEND Send a memo to a nick or channel")); } }; diff --git a/modules/core/ms_sendall.cpp b/modules/core/ms_sendall.cpp index 8c31d1013..1d2a703c3 100644 --- a/modules/core/ms_sendall.cpp +++ b/modules/core/ms_sendall.cpp @@ -27,7 +27,7 @@ class CommandMSSendAll : public Command if (readonly) { - source.Reply(MEMO_SEND_DISABLED); + source.Reply(LanguageString::MEMO_SEND_DISABLED); return MOD_CONT; } @@ -41,24 +41,25 @@ class CommandMSSendAll : public Command memo_send(source, nc->display, text, 1); } - source.Reply(MEMO_MASS_SENT); + source.Reply(_("A massmemo has been sent to all registered users.")); return MOD_CONT; } bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(MEMO_HELP_SENDALL); + source.Reply(_("Syntax: \002SENDALL\002 \002memo-text\002\n \n" + "Sends all registered users a memo containing \037memo-text\037.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "SENDALL", MEMO_SENDALL_SYNTAX); + SyntaxError(source, "SENDALL", _("SENDALL \037memo-text\037")); } void OnServHelp(CommandSource &source) { - source.Reply(MEMO_HELP_CMD_SENDALL); + source.Reply(_(" SENDALL Send a memo to all registered users")); } }; diff --git a/modules/core/ms_set.cpp b/modules/core/ms_set.cpp index e297adaf4..f5602b835 100644 --- a/modules/core/ms_set.cpp +++ b/modules/core/ms_set.cpp @@ -25,44 +25,44 @@ class CommandMSSet : public Command { u->Account()->SetFlag(NI_MEMO_SIGNON); u->Account()->SetFlag(NI_MEMO_RECEIVE); - source.Reply(MEMO_SET_NOTIFY_ON, Config->s_MemoServ.c_str()); + source.Reply(_("%s will now notify you of memos when you log on and when they are sent to you."), Config->s_MemoServ.c_str()); } else if (param.equals_ci("LOGON")) { u->Account()->SetFlag(NI_MEMO_SIGNON); u->Account()->UnsetFlag(NI_MEMO_RECEIVE); - source.Reply(MEMO_SET_NOTIFY_LOGON, Config->s_MemoServ.c_str()); + source.Reply(_("%s will now notify you of memos when you log on or unset /AWAY."), Config->s_MemoServ.c_str()); } else if (param.equals_ci("NEW")) { u->Account()->UnsetFlag(NI_MEMO_SIGNON); u->Account()->SetFlag(NI_MEMO_RECEIVE); - source.Reply(MEMO_SET_NOTIFY_NEW, Config->s_MemoServ.c_str()); + source.Reply(_("%s will now notify you of memos when they are sent to you."), Config->s_MemoServ.c_str()); } else if (param.equals_ci("MAIL")) { if (!u->Account()->email.empty()) { u->Account()->SetFlag(NI_MEMO_MAIL); - source.Reply(MEMO_SET_NOTIFY_MAIL); + source.Reply(_("You will now be informed about new memos via email.")); } else - source.Reply(MEMO_SET_NOTIFY_INVALIDMAIL); + source.Reply(_("There's no email address set for your nick.")); } else if (param.equals_ci("NOMAIL")) { u->Account()->UnsetFlag(NI_MEMO_MAIL); - source.Reply(MEMO_SET_NOTIFY_NOMAIL); + source.Reply(_("You will no longer be informed via email.")); } else if (param.equals_ci("OFF")) { u->Account()->UnsetFlag(NI_MEMO_SIGNON); u->Account()->UnsetFlag(NI_MEMO_RECEIVE); u->Account()->UnsetFlag(NI_MEMO_MAIL); - source.Reply(MEMO_SET_NOTIFY_OFF, Config->s_MemoServ.c_str()); + source.Reply(_("%s will not send you any notification of memos."), Config->s_MemoServ.c_str()); } else - SyntaxError(source, "SET NOTIFY", MEMO_SET_NOTIFY_SYNTAX); + SyntaxError(source, "SET NOTIFY", _("SET NOTIFY {ON | LOGON | NEW | MAIL | NOMAIL | OFF }")); return MOD_CONT; } @@ -88,12 +88,12 @@ class CommandMSSet : public Command p3 = params.size() > 4 ? params[4] : ""; if (!(ci = cs_findchan(chan))) { - source.Reply(CHAN_X_NOT_REGISTERED, chan.c_str()); + source.Reply(LanguageString::CHAN_X_NOT_REGISTERED, chan.c_str()); return MOD_CONT; } else if (!is_servadmin && !check_access(u, ci, CA_MEMO)) { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); return MOD_CONT; } mi = &ci->memos; @@ -105,7 +105,7 @@ class CommandMSSet : public Command NickAlias *na; if (!(na = findnick(p1))) { - source.Reply(NICK_X_NOT_REGISTERED, p1.c_str()); + source.Reply(LanguageString::NICK_X_NOT_REGISTERED, p1.c_str()); return MOD_CONT; } user = p1; @@ -114,14 +114,9 @@ class CommandMSSet : public Command p1 = p2; p2 = p3; } - else if (p1.empty()) + else if (p1.empty() || (!isdigit(p1[0]) && !p1.equals_ci("NONE")) || (!p2.empty() && !p2.equals_ci("HARD"))) { - SyntaxError(source, "SET LIMIT", MEMO_SET_LIMIT_SERVADMIN_SYNTAX); - return MOD_CONT; - } - if ((!isdigit(p1[0]) && !p1.equals_ci("NONE")) || (!p2.empty() && !p2.equals_ci("HARD"))) - { - SyntaxError(source, "SET LIMIT", MEMO_SET_LIMIT_SERVADMIN_SYNTAX); + SyntaxError(source, "SET LIMIT", _("SET LIMIT [\037user\037 | \037channel\037] {\037limit\037 | NONE} [HARD]")); return MOD_CONT; } if (!chan.empty()) @@ -141,7 +136,7 @@ class CommandMSSet : public Command limit = p1.is_pos_number_only() ? convertTo<int32>(p1) : -1; if (limit < 0 || limit > 32767) { - source.Reply(MEMO_SET_LIMIT_OVERFLOW, 32767); + source.Reply(_("Memo limit too large; limiting to %d instead."), 32767); limit = 32767; } if (p1.equals_ci("NONE")) @@ -151,17 +146,17 @@ class CommandMSSet : public Command { if (p1.empty() || !p2.empty() || !isdigit(p1[0])) { - SyntaxError(source, "SET LIMIT", MEMO_SET_LIMIT_SYNTAX); + SyntaxError(source, "SET LIMIT", _("SET LIMIT [\037channel\037] \037limit\037")); return MOD_CONT; } if (!chan.empty() && ci->HasFlag(CI_MEMO_HARDMAX)) { - source.Reply(MEMO_SET_LIMIT_FORBIDDEN, chan.c_str()); + source.Reply(_("The memo limit for %s may not be changed."), chan.c_str()); return MOD_CONT; } else if (chan.empty() && nc->HasFlag(NI_MEMO_HARDMAX)) { - source.Reply(MEMO_SET_YOUR_LIMIT_FORBIDDEN); + source.Reply(_("You are not permitted to change your memo limit.")); return MOD_CONT; } limit = p1.is_pos_number_only() ? convertTo<int32>(p1) : -1; @@ -170,14 +165,14 @@ class CommandMSSet : public Command if (limit < 0 || (Config->MSMaxMemos > 0 && static_cast<unsigned>(limit) > Config->MSMaxMemos)) { if (!chan.empty()) - source.Reply(MEMO_SET_LIMIT_TOO_HIGH, chan.c_str(), Config->MSMaxMemos); + source.Reply(_("You cannot set the memo limit for %s higher than %d."), chan.c_str(), Config->MSMaxMemos); else - source.Reply(MEMO_SET_YOUR_LIMIT_TOO_HIGH, Config->MSMaxMemos); + source.Reply(_("You cannot set your memo limit higher than %d."), Config->MSMaxMemos); return MOD_CONT; } else if (limit > 32767) { - source.Reply(MEMO_SET_LIMIT_OVERFLOW, 32767); + source.Reply(_("Memo limit too large; limiting to %d instead."), 32767); limit = 32767; } } @@ -185,23 +180,23 @@ class CommandMSSet : public Command if (limit > 0) { if (chan.empty() && nc == u->Account()) - source.Reply(MEMO_SET_YOUR_LIMIT, limit); + source.Reply(_("Your memo limit has been set to \002%d\002."), limit); else - source.Reply(MEMO_SET_LIMIT, !chan.empty() ? chan.c_str() : user.c_str(), limit); + source.Reply(_("Memo limit for %s set to \002%d\002."), !chan.empty() ? chan.c_str() : user.c_str(), limit); } else if (!limit) { if (chan.empty() && nc == u->Account()) - source.Reply(MEMO_SET_YOUR_LIMIT_ZERO); + source.Reply(_("You will no longer be able to receive memos.")); else - source.Reply(MEMO_SET_LIMIT_ZERO, !chan.empty() ? chan.c_str() : user.c_str()); + source.Reply(_("Memo limit for %s set to \0020\002."), !chan.empty() ? chan.c_str() : user.c_str()); } else { if (chan.empty() && nc == u->Account()) - source.Reply(MEMO_UNSET_YOUR_LIMIT); + source.Reply(_("Your memo limit has been disabled.")); else - source.Reply(MEMO_UNSET_LIMIT, !chan.empty() ? chan.c_str() : user.c_str()); + source.Reply(_("Memo limit \002disabled\002 for %s."), !chan.empty() ? chan.c_str() : user.c_str()); } return MOD_CONT; } @@ -217,15 +212,15 @@ class CommandMSSet : public Command MemoInfo *mi = &u->Account()->memos; if (readonly) - source.Reply(MEMO_SET_DISABLED); + source.Reply(_("Sorry, memo option setting is temporarily disabled.")); else if (cmd.equals_ci("NOTIFY")) return this->DoNotify(source, params, mi); else if (cmd.equals_ci("LIMIT")) return this->DoLimit(source, params, mi); else { - source.Reply(NICK_SET_UNKNOWN_OPTION, cmd.c_str()); - source.Reply(MORE_INFO, Config->s_MemoServ.c_str(), "SET"); + source.Reply(LanguageString::NICK_SET_UNKNOWN_OPTION, cmd.c_str()); + source.Reply(LanguageString::MORE_INFO, Config->s_MemoServ.c_str(), "SET"); } return MOD_CONT; @@ -234,16 +229,62 @@ class CommandMSSet : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { if (subcommand.empty()) - source.Reply(MEMO_HELP_SET); + source.Reply(_("Syntax: \002SET \037option\037 \037parameters\037\002\n \n" + "Sets various memo options. \037option\037 can be one of:\n" + " \n" + " NOTIFY Changes when you will be notified about\n" + " new memos (only for nicknames)\n" + " LIMIT Sets the maximum number of memos you can\n" + " receive\n" + " \n" + "Type \002%R%S HELP SET \037option\037\002 for more information\n" + "on a specific option.")); else if (subcommand.equals_ci("NOTIFY")) - source.Reply(MEMO_HELP_SET_NOTIFY); + source.Reply(_("Syntax: \002SET NOTIFY {ON | LOGON | NEW | MAIL | NOMAIL | OFF}\002\n" + "Changes when you will be notified about new memos:\n" + " \n" + " ON You will be notified of memos when you log on,\n" + " when you unset /AWAY, and when they are sent\n" + " to you.\n" + " LOGON You will only be notified of memos when you log\n" + " on or when you unset /AWAY.\n" + " NEW You will only be notified of memos when they\n" + " are sent to you.\n" + " MAIL You will be notified of memos by email aswell as\n" + " any other settings you have.\n" + " NOMAIL You will not be notified of memos by email.\n" + " OFF You will not receive any notification of memos.\n" + " \n" + "\002ON\002 is essentially \002LOGON\002 and \002NEW\002 combined.")); else if (subcommand.equals_ci("LIMIT")) { User *u = source.u; if (u->Account() && u->Account()->IsServicesOper()) - source.Reply(MEMO_SERVADMIN_HELP_SET_LIMIT, Config->MSMaxMemos); + source.Reply(_("Syntax: \002SET LIMIT [\037user\037 | \037channel\037] {\037limit\037 | NONE} [HARD]\002\n" + " \n" + "Sets the maximum number of memos a user or channel is\n" + "allowed to have. Setting the limit to 0 prevents the user\n" + "from receiving any memos; setting it to \002NONE\002 allows the\n" + "user to receive and keep as many memos as they want. If\n" + "you do not give a nickname or channel, your own limit is\n" + "set.\n" + " \n" + "Adding \002HARD\002 prevents the user from changing the limit. Not\n" + "adding \002HARD\002 has the opposite effect, allowing the user to\n" + "change the limit (even if a previous limit was set with\n" + "\002HARD\002).\n" + "This use of the \002SET LIMIT\002 command is limited to \002Services\002\n" + "\002admins\002. Other users may only enter a limit for themselves\n" + "or a channel on which they have such privileges, may not\n" + "remove their limit, may not set a limit above %d, and may\n" + "not set a hard limit."), Config->MSMaxMemos); else - source.Reply(MEMO_HELP_SET_LIMIT, Config->MSMaxMemos); + source.Reply(_("Syntax: \002SET LIMIT [\037channel\037] \037limit\037\002\n" + " \n" + "Sets the maximum number of memos you (or the given channel)\n" + "are allowed to have. If you set this to 0, no one will be\n" + "able to send any memos to you. However, you cannot set\n" + "this any higher than %d."), Config->MSMaxMemos); } else return false; @@ -253,12 +294,12 @@ class CommandMSSet : public Command void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "SET", NICK_SET_SYNTAX); + SyntaxError(source, "SET", LanguageString::NICK_SET_SYNTAX); } void OnServHelp(CommandSource &source) { - source.Reply(MEMO_HELP_CMD_SET); + source.Reply(_(" SET Set options related to memos")); } }; diff --git a/modules/core/ms_staff.cpp b/modules/core/ms_staff.cpp index 414694292..a1c232870 100644 --- a/modules/core/ms_staff.cpp +++ b/modules/core/ms_staff.cpp @@ -26,7 +26,7 @@ class CommandMSStaff : public Command if (readonly) { - source.Reply(MEMO_SEND_DISABLED); + source.Reply(LanguageString::MEMO_SEND_DISABLED); return MOD_CONT; } @@ -43,18 +43,21 @@ class CommandMSStaff : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(MEMO_HELP_STAFF); + source.Reply(_("Syntax: \002STAFF\002 \002memo-text\002\n" + " \n" + "Sends all services staff a memo containing \037memo-text\037.")); + return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "STAFF", MEMO_STAFF_SYNTAX); + SyntaxError(source, "STAFF", _("STAFF \037memo-text\037")); } void OnServHelp(CommandSource &source) { - source.Reply(MEMO_HELP_CMD_STAFF); + source.Reply(_(" STAFF Send a memo to all opers/admins")); } }; diff --git a/modules/core/ns_access.cpp b/modules/core/ns_access.cpp index 1d7ed4491..e7c0c3f90 100644 --- a/modules/core/ns_access.cpp +++ b/modules/core/ns_access.cpp @@ -23,17 +23,17 @@ class CommandNSAccess : public Command if (nc->access.empty()) { - source.Reply(NICK_ACCESS_LIST_X_EMPTY, nc->display.c_str()); + source.Reply(_("Access list for \002%s\002 is empty."), nc->display.c_str()); return MOD_CONT; } if (nc->HasFlag(NI_SUSPENDED)) { - source.Reply(NICK_X_SUSPENDED, nc->display.c_str()); + source.Reply(LanguageString::NICK_X_SUSPENDED, nc->display.c_str()); return MOD_CONT; } - source.Reply(NICK_ACCESS_LIST_X, params[1].c_str()); + source.Reply(_("Access list for \002%s\002:"), params[1].c_str()); for (i = 0, end = nc->access.size(); i < end; ++i) { Anope::string access = nc->GetAccess(i); @@ -56,18 +56,18 @@ class CommandNSAccess : public Command if (nc->access.size() >= Config->NSAccessMax) { - source.Reply(NICK_ACCESS_REACHED_LIMIT, Config->NSAccessMax); + source.Reply(_("Sorry, you can only have %d access entries for a nickname."), Config->NSAccessMax); return MOD_CONT; } if (nc->FindAccess(mask)) { - source.Reply(NICK_ACCESS_ALREADY_PRESENT, mask.c_str()); + source.Reply(_("Mask \002%s\002 already present on your access list."), mask.c_str()); return MOD_CONT; } nc->AddAccess(mask); - source.Reply(NICK_ACCESS_ADDED, mask.c_str()); + source.Reply(_("\002%s\002 added to your access list."), mask.c_str()); return MOD_CONT; } @@ -82,11 +82,11 @@ class CommandNSAccess : public Command if (!nc->FindAccess(mask)) { - source.Reply(NICK_ACCESS_NOT_FOUND, mask.c_str()); + source.Reply(_("\002%s\002 not found on your access list."), mask.c_str()); return MOD_CONT; } - source.Reply(NICK_ACCESS_DELETED, mask.c_str()); + source.Reply(_("\002%s\002 deleted from your access list."), mask.c_str()); nc->EraseAccess(mask); return MOD_CONT; @@ -99,11 +99,11 @@ class CommandNSAccess : public Command if (nc->access.empty()) { - source.Reply(NICK_ACCESS_LIST_EMPTY, u->nick.c_str()); + source.Reply(_("Your access list is empty."), u->nick.c_str()); return MOD_CONT; } - source.Reply(NICK_ACCESS_LIST); + source.Reply(_("Access list:")); for (i = 0, end = nc->access.size(); i < end; ++i) { Anope::string access = nc->GetAccess(i); @@ -131,11 +131,11 @@ class CommandNSAccess : public Command if (!mask.empty() && mask.find('@') == Anope::string::npos) { - source.Reply(BAD_USERHOST_MASK); - source.Reply(MORE_INFO, Config->s_NickServ.c_str(), "ACCESS"); + source.Reply(LanguageString::BAD_USERHOST_MASK); + source.Reply(LanguageString::MORE_INFO, Config->s_NickServ.c_str(), "ACCESS"); } else if (u->Account()->HasFlag(NI_SUSPENDED)) - source.Reply(NICK_X_SUSPENDED, u->Account()->display.c_str()); + source.Reply(LanguageString::NICK_X_SUSPENDED, u->Account()->display.c_str()); else if (cmd.equals_ci("ADD")) return this->DoAdd(source, u->Account(), mask); else if (cmd.equals_ci("DEL")) @@ -150,18 +150,39 @@ class CommandNSAccess : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(NICK_HELP_ACCESS); + source.Reply(_("Syntax: \002ACCESS ADD \037mask\037\002\n" + " \002ACCESS DEL \037mask\037\002\n" + " \002ACCESS LIST\002\n" + " \n" + "Modifies or displays the access list for your nick. This\n" + "is the list of addresses which will be automatically\n" + "recognized by %S as allowed to use the nick. If\n" + "you want to use the nick from a different address, you\n" + "need to send an \002IDENTIFY\002 command to make %S\n" + "recognize you.\n" + " \n" + "Examples:\n" + " \n" + " \002ACCESS ADD anyone@*.bepeg.com\002\n" + " Allows access to user \002anyone\002 from any machine in\n" + " the \002bepeg.com\002 domain.\n" + " \n" + " \002ACCESS DEL anyone@*.bepeg.com\002\n" + " Reverses the previous command.\n" + " \n" + " \002ACCESS LIST\002\n" + " Displays the current access list.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "ACCESS", NICK_ACCESS_SYNTAX); + SyntaxError(source, "ACCESS", _("ACCESS {ADD | DEL | LIST} [\037mask\037]")); } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_ACCESS); + source.Reply(_(" ACCESS Modify the list of authorized addresses")); } }; diff --git a/modules/core/ns_ajoin.cpp b/modules/core/ns_ajoin.cpp index 29ddfab46..db1d0f960 100644 --- a/modules/core/ns_ajoin.cpp +++ b/modules/core/ns_ajoin.cpp @@ -21,10 +21,11 @@ class CommandNSAJoin : public Command source.u->Account()->GetExtRegular("ns_ajoin_channels", channels); if (channels.empty()) - source.Reply(NICK_AJOIN_LIST_EMPTY); + source.Reply(_("Your auto join list is empty.")); else { - source.Reply(NICK_AJOIN_LIST_HEAD); + source.Reply(_("Your auto join list:\n" + " Num Channel Key")); for (unsigned i = 0; i < channels.size(); ++i) source.Reply(" %3d %-12s %s", i + 1, channels[i].first.c_str(), channels[i].second.c_str()); } @@ -36,13 +37,13 @@ class CommandNSAJoin : public Command source.u->Account()->GetExtRegular("ns_ajoin_channels", channels); if (channels.size() >= Config->AJoinMax) - source.Reply(NICK_AJOIN_LIST_FULL); + source.Reply(_("Your auto join list is full.")); else if (ircdproto->IsChannelValid(params[1]) == false) - source.Reply(CHAN_X_INVALID, params[1].c_str()); + source.Reply(LanguageString::CHAN_X_INVALID, params[1].c_str()); else { channels.push_back(std::make_pair(params[1], params.size() > 2 ? params[2] : "")); - source.Reply(NICK_AJOIN_ADDED, params[1].c_str()); + source.Reply(_("Added %s to your auto join list."), params[1].c_str()); source.u->Account()->Extend("ns_ajoin_channels", new ExtensibleItemRegular<std::vector< std::pair<Anope::string, Anope::string> > >(channels)); } @@ -59,13 +60,13 @@ class CommandNSAJoin : public Command break; if (i == channels.size()) - source.Reply(NICK_AJOIN_NOTFOUND, params[1].c_str()); + source.Reply(_("%s was not found on your auto join list."), params[1].c_str()); else { channels.erase(channels.begin() + i); source.u->Account()->Extend("ns_ajoin_channels", new ExtensibleItemRegular<std::vector< std::pair<Anope::string, Anope::string> > >(channels)); - source.Reply(NICK_AJOIN_DELETED, params[1].c_str()); + source.Reply(_("%s was removed from your auto join list."), params[1].c_str()); } } @@ -92,18 +93,21 @@ class CommandNSAJoin : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(NICK_HELP_AJOIN); + source.Reply(_("Syntax: \002AJOIN {ADD | DEL | LIST} [\037channel\037] [\037key\037]\002\n" + " \n" + "This command manages your auto join list. When you identify\n" + "you will automatically join the channels on your auto join list")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "AJOIN", NICK_AJOIN_SYNTAX); + SyntaxError(source, "AJOIN", _("AJOIN {ADD | DEL | LIST} [\037channel\037] [\037key\037]")); } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_AJOIN); + source.Reply(_(" AJOIN Manage your auto join list")); } }; diff --git a/modules/core/ns_alist.cpp b/modules/core/ns_alist.cpp index 4521099d0..1777dacb1 100644 --- a/modules/core/ns_alist.cpp +++ b/modules/core/ns_alist.cpp @@ -77,17 +77,22 @@ class CommandNSAList : public Command } if (!na) - source.Reply(NICK_X_NOT_REGISTERED, nick.c_str()); + source.Reply(LanguageString::NICK_X_NOT_REGISTERED, nick.c_str()); else if (na->HasFlag(NS_FORBIDDEN)) - source.Reply(NICK_X_FORBIDDEN, na->nick.c_str()); + source.Reply(LanguageString::NICK_X_FORBIDDEN, na->nick.c_str()); else if (min_level <= ACCESS_INVALID || min_level > ACCESS_FOUNDER) - source.Reply(CHAN_ACCESS_LEVEL_RANGE, ACCESS_INVALID + 1, ACCESS_FOUNDER - 1); + source.Reply(LanguageString::CHAN_ACCESS_LEVEL_RANGE, ACCESS_INVALID + 1, ACCESS_FOUNDER - 1); else { int chan_count = 0; int match_count = 0; - source.Reply(is_servadmin ? NICK_ALIST_HEADER_X : NICK_ALIST_HEADER, na->nick.c_str()); + if (is_servadmin) + source.Reply(_("Channels that \002%s\002 has access on:\n" + " Num Channel Level Description"), na->nick.c_str()); + else + source.Reply(_("Channels that you have access on:\n" + " Num Channel Level Description")); for (registered_channel_map::const_iterator it = RegisteredChannelList.begin(), it_end = RegisteredChannelList.end(); it != it_end; ++it) { @@ -107,14 +112,14 @@ class CommandNSAList : public Command { Anope::string xop = get_xop_level(access->level); - source.Reply(NICK_ALIST_XOP_FORMAT, match_count, ci->HasFlag(CI_NO_EXPIRE) ? '!' : ' ', ci->name.c_str(), xop.c_str(), !ci->desc.empty() ? ci->desc.c_str() : ""); + source.Reply(_(" %3d %c%-20s %-8s %s"), match_count, ci->HasFlag(CI_NO_EXPIRE) ? '!' : ' ', ci->name.c_str(), xop.c_str(), !ci->desc.empty() ? ci->desc.c_str() : ""); } else - source.Reply(NICK_ALIST_ACCESS_FORMAT, match_count, ci->HasFlag(CI_NO_EXPIRE) ? '!' : ' ', ci->name.c_str(), access->level, !ci->desc.empty() ? ci->desc.c_str() : ""); + source.Reply(_(" %3d %c%-20s %-8d %s"), match_count, ci->HasFlag(CI_NO_EXPIRE) ? '!' : ' ', ci->name.c_str(), access->level, !ci->desc.empty() ? ci->desc.c_str() : ""); } } - source.Reply(NICK_ALIST_FOOTER, match_count, chan_count); + source.Reply(_("End of list - %d/%d channels shown."), match_count, chan_count); } return MOD_CONT; } @@ -123,16 +128,38 @@ class CommandNSAList : public Command { User *u = source.u; if (u->Account() && u->Account()->IsServicesOper()) - source.Reply(NICK_SERVADMIN_HELP_ALIST); + source.Reply(_("Syntax: \002ALIST [\037nickname\037] [\037level\037]\002\n" + " \n" + "With no parameters, lists channels you have access on. With\n" + "one parameter, lists channels that \002nickname\002 has access \n" + "on. With two parameters lists channels that \002nickname\002 has \n" + "\002level\002 access or greater on.\n" + "This use limited to \002Services Operators\002.")); else - source.Reply(NICK_HELP_ALIST); + source.Reply(_("Syntax: \002ALIST [\037level\037]\002\n" + " \n" + "Lists all channels you have access on. Optionally, you can specify\n" + "a level in XOP or ACCESS format. The resulting list will only\n" + "include channels where you have the given level of access.\n" + "Examples:\n" + " \002ALIST Founder\002\n" + " Lists all channels where you have Founder\n" + " access.\n" + " \002ALIST AOP\002\n" + " Lists all channels where you have AOP\n" + " access or greater.\n" + " \002ALIST 10\002\n" + " Lists all channels where you have level 10\n" + " access or greater.\n" + "Channels that have the \037NOEXPIRE\037 option set will be\n" + "prefixed by an exclamation mark.")); return true; } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_ALIST); + source.Reply(_(" ALIST List channels you have access on")); } }; diff --git a/modules/core/ns_drop.cpp b/modules/core/ns_drop.cpp index 899d52b7d..30ec2730a 100644 --- a/modules/core/ns_drop.cpp +++ b/modules/core/ns_drop.cpp @@ -28,7 +28,7 @@ class CommandNSDrop : public Command if (readonly) { - source.Reply(NICK_DROP_DISABLED); + source.Reply(_("Sorry, nickname de-registration is temporarily disabled.")); return MOD_CONT; } @@ -43,7 +43,7 @@ class CommandNSDrop : public Command Log(LOG_ADMIN, u, this) << "to drop nickname " << nr->nick << " (email: " << nr->email << ")"; delete nr; - source.Reply(NICK_X_DROPPED, nick.c_str()); + source.Reply(_("Nickname \002%s\002 has been dropped."), nick.c_str()); } else if (nr && !nick.empty()) { @@ -51,23 +51,23 @@ class CommandNSDrop : public Command if (res) { Log(LOG_COMMAND, u, this) << "to drop nick request " << nr->nick; - source.Reply(NICK_X_DROPPED, nr->nick.c_str()); + source.Reply(_("Nickname \002%s\002 has been dropped."), nr->nick.c_str()); delete nr; } else if (bad_password(u)) return MOD_STOP; else - source.Reply(PASSWORD_INCORRECT); + source.Reply(LanguageString::PASSWORD_INCORRECT); } else - source.Reply(NICK_NOT_REGISTERED); + source.Reply(LanguageString::NICK_NOT_REGISTERED); return MOD_CONT; } if (!u->Account()) { - source.Reply(NICK_IDENTIFY_REQUIRED, Config->s_NickServ.c_str()); + source.Reply(LanguageString::NICK_IDENTIFY_REQUIRED, Config->s_NickServ.c_str()); return MOD_CONT; } @@ -77,13 +77,13 @@ class CommandNSDrop : public Command my_nick = na->nick; if (!is_mine && !u->Account()->HasPriv("nickserv/drop")) - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); else if (Config->NSSecureAdmins && !is_mine && na->nc->IsServicesOper()) - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); else { if (readonly) - source.Reply(READ_ONLY_MODE); + source.Reply(LanguageString::READ_ONLY_MODE); if (ircd->sqline && na->HasFlag(NS_FORBIDDEN)) { @@ -100,14 +100,14 @@ class CommandNSDrop : public Command { if (Config->WallDrop) ircdproto->SendGlobops(NickServ, "\2%s\2 used DROP on \2%s\2", u->nick.c_str(), nick.c_str()); - source.Reply(NICK_X_DROPPED, nick.c_str()); + source.Reply(_("Nickname \002%s\002 has been dropped."), nick.c_str()); } else { if (!nick.empty()) - source.Reply(NICK_X_DROPPED, nick.c_str()); + source.Reply(_("Nickname \002%s\002 has been dropped."), nick.c_str()); else - source.Reply(NICK_DROPPED); + source.Reply(_("Your nickname has been dropped.")); } } @@ -118,16 +118,38 @@ class CommandNSDrop : public Command { User *u = source.u; if (u->Account() && u->Account()->HasPriv("nickserv/drop")) - source.Reply(NICK_SERVADMIN_HELP_DROP); + source.Reply(_("Syntax: \002DROP [\037nickname\037]\002\n" + " \n" + "Without a parameter, drops your nickname from the\n" + "%S database.\n" + " \n" + "With a parameter, drops the named nick from the database.\n" + "You may drop any nick within your group without any \n" + "special privileges. Dropping any nick is limited to \n" + "\002Services Operators\002.")); else - source.Reply(NICK_HELP_DROP); + source.Reply(_("Syntax: \002DROP [\037nickname\037 | \037password\037]\002\n" + " \n" + "Drops your nickname from the %S database. A nick\n" + "that has been dropped is free for anyone to re-register.\n" + " \n" + "You may drop a nick within your group by passing it\n" + "as the \002nick\002 parameter.\n" + " \n" + "If you have a nickname registration pending but can not confirm\n" + "it for any reason, you can cancel your registration by passing\n" + "your password as the \002password\002 parameter.\n" + " \n" + "In order to use this command, you must first identify\n" + "with your password (\002%R%S HELP IDENTIFY\002 for more\n" + "information).")); return true; } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_DROP); + source.Reply(_(" DROP Cancel the registration of a nickname")); } }; diff --git a/modules/core/ns_forbid.cpp b/modules/core/ns_forbid.cpp index 2095cfb76..d88b9a9e9 100644 --- a/modules/core/ns_forbid.cpp +++ b/modules/core/ns_forbid.cpp @@ -34,10 +34,10 @@ class CommandNSForbid : public Command } if (readonly) - source.Reply(READ_ONLY_MODE); + source.Reply(LanguageString::READ_ONLY_MODE); if (!ircdproto->IsNickValid(nick)) { - source.Reply(NICK_X_FORBIDDEN, nick.c_str()); + source.Reply(LanguageString::NICK_X_FORBIDDEN, nick.c_str()); return MOD_CONT; } @@ -46,7 +46,7 @@ class CommandNSForbid : public Command { if (Config->NSSecureAdmins && na->nc->IsServicesOper()) { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); return MOD_CONT; } delete na; @@ -63,7 +63,7 @@ class CommandNSForbid : public Command if (curr) { - curr->SendMessage(NickServ, FORCENICKCHANGE_NOW); + curr->SendMessage(NickServ, LanguageString::FORCENICKCHANGE_NOW); curr->Collide(na); } @@ -77,7 +77,7 @@ class CommandNSForbid : public Command ircdproto->SendGlobops(NickServ, "\2%s\2 used FORBID on \2%s\2", u->nick.c_str(), nick.c_str()); Log(LOG_ADMIN, u, this) << "to forbid nick " << nick; - source.Reply(NICK_FORBID_SUCCEEDED, nick.c_str()); + source.Reply(_("Nick \002%s\002 is now forbidden."), nick.c_str()); FOREACH_MOD(I_OnNickForbidden, OnNickForbidden(na)); @@ -86,18 +86,23 @@ class CommandNSForbid : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(NICK_SERVADMIN_HELP_FORBID); + source.Reply(_("Syntax: \002FORBID \037nickname\037 [\037reason\037]\002\n" + " \n" + "Disallows a nickname from being registered or used by\n" + "anyone. May be cancelled by dropping the nick.\n" + " \n" + "On certain networks, reason is required.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "FORBID", Config->ForceForbidReason ? NICK_FORBID_SYNTAX_REASON : NICK_FORBID_SYNTAX); + SyntaxError(source, "FORBID", Config->ForceForbidReason ? _("FORBID \037nickname\037 \037reason\037") : _("FORBID \037nickname\037 [\037reason\037]")); } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_FORBID); + source.Reply(_(" FORBID Prevents a nickname from being registered")); } }; diff --git a/modules/core/ns_getemail.cpp b/modules/core/ns_getemail.cpp index 7c3518849..91a5bb2b1 100644 --- a/modules/core/ns_getemail.cpp +++ b/modules/core/ns_getemail.cpp @@ -39,13 +39,13 @@ class CommandNSGetEMail : public Command if (!nc->email.empty() && nc->email.equals_ci(email)) { ++j; - source.Reply(NICK_GETEMAIL_EMAILS_ARE, nc->display.c_str(), email.c_str()); + source.Reply(_("Emails Match \002%s\002 to \002%s\002."), nc->display.c_str(), email.c_str()); } } if (j <= 0) { - source.Reply(NICK_GETEMAIL_NOT_USED, email.c_str()); + source.Reply(_("No Emails listed for \002%s\002."), email.c_str()); return MOD_CONT; } @@ -54,18 +54,22 @@ class CommandNSGetEMail : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(NICK_SERVADMIN_HELP_GETEMAIL); + source.Reply(_("Syntax: \002GETEMAIL \037user@emailhost\037\002\n" + "Returns the matching nicks that used given email. \002Note\002 that\n" + "you can not use wildcards for either user or emailhost. Whenever\n" + "this command is used, a message including the person who issued\n" + "the command and the email it was used on will be logged.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "GETMAIL", NICK_GETEMAIL_SYNTAX); + SyntaxError(source, "GETMAIL", _("GETEMAIL \002user@email-host\002 No WildCards!!")); } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_GETEMAIL); + source.Reply(_(" GETEMAIL Matches and returns all users that registered using given email")); } }; diff --git a/modules/core/ns_getpass.cpp b/modules/core/ns_getpass.cpp index fc35e8270..7c6c14785 100644 --- a/modules/core/ns_getpass.cpp +++ b/modules/core/ns_getpass.cpp @@ -35,15 +35,15 @@ class CommandNSGetPass : public Command Log(LOG_ADMIN, u, this) << "for " << nr->nick; if (Config->WallGetpass) ircdproto->SendGlobops(NickServ, "\2%s\2 used GETPASS on \2%s\2", u->nick.c_str(), nick.c_str()); - source.Reply(NICK_GETPASS_PASSCODE_IS, nick.c_str(), nr->passcode.c_str()); + source.Reply(_("Passcode for %s is \002%s\002."), nick.c_str(), nr->passcode.c_str()); } else - source.Reply(NICK_X_NOT_REGISTERED, nick.c_str()); + source.Reply(LanguageString::NICK_X_NOT_REGISTERED, nick.c_str()); } else if (na->HasFlag(NS_FORBIDDEN)) - source.Reply(NICK_X_FORBIDDEN, na->nick.c_str()); + source.Reply(LanguageString::NICK_X_FORBIDDEN, na->nick.c_str()); else if (Config->NSSecureAdmins && na->nc->IsServicesOper()) - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); else { if (enc_decrypt(na->nc->pass, tmp_pass) == 1) @@ -51,28 +51,33 @@ class CommandNSGetPass : public Command Log(LOG_ADMIN, u, this) << "for " << nick; if (Config->WallGetpass) ircdproto->SendGlobops(NickServ, "\2%s\2 used GETPASS on \2%s\2", u->nick.c_str(), nick.c_str()); - source.Reply(NICK_GETPASS_PASSWORD_IS, nick.c_str(), tmp_pass.c_str()); + source.Reply(_("Password for %s is \002%s\002."), nick.c_str(), tmp_pass.c_str()); } else - source.Reply(NICK_GETPASS_UNAVAILABLE); + source.Reply(_("GETPASS command unavailable because encryption is in use.")); } return MOD_CONT; } bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(NICK_SERVADMIN_HELP_GETPASS); + source.Reply(_("Syntax: \002GETPASS \037nickname\037\002\n" + " \n" + "Returns the password for the given nickname. \002Note\002 that\n" + "whenever this command is used, a message including the\n" + "person who issued the command and the nickname it was used\n" + "on will be logged and sent out as a WALLOPS/GLOBOPS.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "GETPASS", NICK_GETPASS_SYNTAX); + SyntaxError(source, "GETPASS", _("GETPASS \037nickname\037")); } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_GETPASS); + source.Reply(_(" GETPASS Retrieve the password for a nickname")); } }; diff --git a/modules/core/ns_ghost.cpp b/modules/core/ns_ghost.cpp index f6ed15bf3..9bffa5b3c 100644 --- a/modules/core/ns_ghost.cpp +++ b/modules/core/ns_ghost.cpp @@ -31,31 +31,31 @@ class CommandNSGhost : public Command NickAlias *na = findnick(nick); if (!user) - source.Reply(NICK_X_NOT_IN_USE, nick.c_str()); + source.Reply(LanguageString::NICK_X_NOT_IN_USE, nick.c_str()); else if (!na) - source.Reply(NICK_X_NOT_REGISTERED, nick.c_str()); + source.Reply(LanguageString::NICK_X_NOT_REGISTERED, nick.c_str()); else if (na->HasFlag(NS_FORBIDDEN)) - source.Reply(NICK_X_FORBIDDEN, na->nick.c_str()); + source.Reply(LanguageString::NICK_X_FORBIDDEN, na->nick.c_str()); else if (na->nc->HasFlag(NI_SUSPENDED)) - source.Reply(NICK_X_SUSPENDED, na->nick.c_str()); + source.Reply(LanguageString::NICK_X_SUSPENDED, na->nick.c_str()); else if (nick.equals_ci(u->nick)) - source.Reply(NICK_NO_GHOST_SELF); + source.Reply(_("You can't ghost yourself!")); else if ((u->Account() == na->nc || (!na->nc->HasFlag(NI_SECURE) && is_on_access(u, na->nc))) || (!pass.empty() && enc_check_password(pass, na->nc->pass) == 1)) { if (!user->IsIdentified() && FindCommand(NickServ, "RECOVER")) - source.Reply(NICK_GHOST_UNIDENTIFIED); + source.Reply(_("You may not ghost an unidentified user, use RECOVER instead.")); else { Log(LOG_COMMAND, u, this) << "for " << nick; Anope::string buf = "GHOST command used by " + u->nick; kill_user(Config->s_NickServ, user, buf); - source.Reply(NICK_GHOST_KILLED, nick.c_str()); + source.Reply(_("Ghost with your nick has been killed."), nick.c_str()); } } else { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); if (!pass.empty()) { Log(LOG_COMMAND, u, this) << "with an invalid password for " << nick; @@ -69,18 +69,31 @@ class CommandNSGhost : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(NICK_HELP_GHOST); + source.Reply(_("Syntax: \002GHOST \037nickname\037 [\037password\037]\002\n" + "" + "itermminates a \"ghost\" IRC session using your nick. A\n" + "ghost\" session is one which is not actually connected,\n" + "but which the IRC server believes is still online for one\n" + "reason or another. Typically, this happens if your\n" + "computer crashes or your Internet or modem connection\n" + "goes down while you're on IRC.\n" + " \n" + "In order to use the \002GHOST\002 command for a nick, your\n" + "current address as shown in /WHOIS must be on that nick's\n" + "access list, you must be identified and in the group of\n" + "that nick, or you must supply the correct password for\n" + "the nickname.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "GHOST", NICK_GHOST_SYNTAX); + SyntaxError(source, "GHOST", _("GHOST \037nickname\037 [\037password\037]")); } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_GHOST); + source.Reply(_(" GHOST Disconnects a \"ghost\" IRC session using your nick")); } }; diff --git a/modules/core/ns_group.cpp b/modules/core/ns_group.cpp index 4180620d8..8fbcfb2fe 100644 --- a/modules/core/ns_group.cpp +++ b/modules/core/ns_group.cpp @@ -30,19 +30,19 @@ class CommandNSGroup : public Command if (Config->NSEmailReg && findrequestnick(u->nick)) { - source.Reply(NICK_REQUESTED); + source.Reply(LanguageString::NICK_REQUESTED); return MOD_CONT; } if (readonly) { - source.Reply(NICK_GROUP_DISABLED); + source.Reply(_("Sorry, nickname grouping is temporarily disabled.")); return MOD_CONT; } if (!ircdproto->IsNickValid(u->nick)) { - source.Reply(NICK_X_FORBIDDEN, u->nick.c_str()); + source.Reply(LanguageString::NICK_X_FORBIDDEN, u->nick.c_str()); return MOD_CONT; } @@ -50,42 +50,44 @@ class CommandNSGroup : public Command for (std::list<std::pair<Anope::string, Anope::string> >::iterator it = Config->Opers.begin(), it_end = Config->Opers.end(); it != it_end; ++it) if (!u->HasMode(UMODE_OPER) && u->nick.find_ci(it->first) != Anope::string::npos) { - source.Reply(NICK_CANNOT_BE_REGISTERED, u->nick.c_str()); + source.Reply(LanguageString::NICK_CANNOT_BE_REGISTERED, u->nick.c_str()); return MOD_CONT; } NickAlias *target, *na = findnick(u->nick); if (!(target = findnick(nick))) - source.Reply(NICK_X_NOT_REGISTERED, nick.c_str()); + source.Reply(LanguageString::NICK_X_NOT_REGISTERED, nick.c_str()); else if (Anope::CurTime < u->lastnickreg + Config->NSRegDelay) - source.Reply(NICK_GROUP_PLEASE_WAIT, (Config->NSRegDelay + u->lastnickreg) - Anope::CurTime); + source.Reply(_("Please wait %d seconds before using the GROUP command again."), (Config->NSRegDelay + u->lastnickreg) - Anope::CurTime); else if (u->Account() && u->Account()->HasFlag(NI_SUSPENDED)) { Log(NickServ) << NickServ << u->GetMask() << " tried to use GROUP from SUSPENDED nick " << target->nick; - source.Reply(NICK_X_SUSPENDED, u->nick.c_str()); + source.Reply(LanguageString::NICK_X_SUSPENDED, u->nick.c_str()); } else if (target && target->nc->HasFlag(NI_SUSPENDED)) { Log(LOG_COMMAND, u, this) << "tried to use GROUP for SUSPENDED nick " << target->nick; - source.Reply(NICK_X_SUSPENDED, target->nick.c_str()); + source.Reply(LanguageString::NICK_X_SUSPENDED, target->nick.c_str()); } else if (target->HasFlag(NS_FORBIDDEN)) - source.Reply(NICK_X_FORBIDDEN, nick.c_str()); + source.Reply(LanguageString::NICK_X_FORBIDDEN, nick.c_str()); else if (na && target->nc == na->nc) - source.Reply(NICK_GROUP_SAME, target->nick.c_str()); + source.Reply(_("You are already a member of the group of \002%s\002."), target->nick.c_str()); else if (na && na->nc != u->Account()) - source.Reply(NICK_IDENTIFY_REQUIRED, Config->s_NickServ.c_str()); + source.Reply(LanguageString::NICK_IDENTIFY_REQUIRED, Config->s_NickServ.c_str()); else if (na && Config->NSNoGroupChange) - source.Reply(NICK_GROUP_CHANGE_DISABLED, Config->s_NickServ.c_str()); + source.Reply(_("Your nick is already registered; type \002%R%s DROP\002 first."), Config->s_NickServ.c_str()); else if (Config->NSMaxAliases && (target->nc->aliases.size() >= Config->NSMaxAliases) && !target->nc->IsServicesOper()) - source.Reply(NICK_GROUP_TOO_MANY, target->nick.c_str(), Config->s_NickServ.c_str(), Config->s_NickServ.c_str()); + source.Reply(_("There are too many nicks in %s's group; list them and drop some.\n" + "Type \002%R%s HELP GLIST\002 and \002%R%s HELP DROP\002\n" + "for more information."), target->nick.c_str(), Config->s_NickServ.c_str(), Config->s_NickServ.c_str()); else { int res = enc_check_password(pass, target->nc->pass); if (res == -1) { Log(LOG_COMMAND, u, this) << "failed group for " << na->nick << " (invalid password)"; - source.Reply(PASSWORD_INCORRECT); + source.Reply(LanguageString::PASSWORD_INCORRECT); if (bad_password(u)) return MOD_STOP; } @@ -103,7 +105,7 @@ class CommandNSGroup : public Command if (nicklen <= prefixlen + 7 && nicklen >= prefixlen + 1 && !u->nick.find_ci(Config->NSGuestNickPrefix) && !u->nick.substr(prefixlen).find_first_not_of("1234567890")) { - source.Reply(NICK_CANNOT_BE_REGISTERED, u->nick.c_str()); + source.Reply(LanguageString::NICK_CANNOT_BE_REGISTERED, u->nick.c_str()); return MOD_CONT; } } @@ -121,7 +123,7 @@ class CommandNSGroup : public Command u->SetMode(NickServ, UMODE_REGISTERED); Log(LOG_COMMAND, u, this) << "makes " << u->nick << " join group of " << target->nick << " (" << target->nc->display << ") (email: " << (!target->nc->email.empty() ? target->nc->email : "none") << ")"; - source.Reply(NICK_GROUP_JOINED, target->nick.c_str()); + source.Reply(_("You are now in the group of \002%s\002."), target->nick.c_str()); u->lastnickreg = Anope::CurTime; @@ -133,18 +135,47 @@ class CommandNSGroup : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(NICK_HELP_GROUP); + source.Reply(_("Syntax: \002GROUP \037target\037 \037password\037\002\n" + " \n" + "This command makes your nickname join the \037target\037 nickname's \n" + "group. \037password\037 is the password of the target nickname.\n" + " \n" + "Joining a group will allow you to share your configuration,\n" + "memos, and channel privileges with all the nicknames in the\n" + "group, and much more!\n" + " \n" + "A group exists as long as it is useful. This means that even\n" + "if a nick of the group is dropped, you won't lose the\n" + "shared things described above, as long as there is at\n" + "least one nick remaining in the group.\n" + " \n" + "You can use this command even if you have not registered\n" + "your nick yet. If your nick is already registered, you'll\n" + "need to identify yourself before using this command. Type\n" + "\037%R%S HELP IDENTIFY\037 for more information. This\n" + "last may be not possible on your IRC network.\n" + " \n" + "It is recommended to use this command with a non-registered\n" + "nick because it will be registered automatically when \n" + "using this command. You may use it with a registered nick (to \n" + "change your group) only if your network administrators allowed \n" + "it.\n" + " \n" + "You can only be in one group at a time. Group merging is\n" + "not possible.\n" + " \n" + "\037Note\037: all the nicknames of a group have the same password.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "GROUP", NICK_GROUP_SYNTAX); + SyntaxError(source, "GROUP", _("\037target\037 \037password\037")); } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_GROUP); + source.Reply(_(" GROUP Join a group")); } }; @@ -162,11 +193,11 @@ class CommandNSUngroup : public Command NickAlias *na = findnick(!nick.empty() ? nick : u->nick); if (u->Account()->aliases.size() == 1) - source.Reply(NICK_UNGROUP_ONE_NICK); + source.Reply(_("Your nick is not grouped to anything, you can't ungroup it.")); else if (!na) - source.Reply(NICK_X_NOT_REGISTERED, !nick.empty() ? nick.c_str() : u->nick.c_str()); + source.Reply(LanguageString::NICK_X_NOT_REGISTERED, !nick.empty() ? nick.c_str() : u->nick.c_str()); else if (na->nc != u->Account()) - source.Reply(NICK_UNGROUP_NOT_IN_GROUP, na->nick.c_str()); + source.Reply(_("The nick %s is not in your group."), na->nick.c_str()); else { NickCore *oldcore = na->nc; @@ -188,7 +219,7 @@ class CommandNSUngroup : public Command na->nc->greet = oldcore->greet; na->nc->language = oldcore->language; - source.Reply(NICK_UNGROUP_SUCCESSFUL, na->nick.c_str(), oldcore->display.c_str()); + source.Reply(_("Nick %s has been ungrouped from %s."), na->nick.c_str(), oldcore->display.c_str()); User *user = finduser(na->nick); if (user) @@ -201,13 +232,19 @@ class CommandNSUngroup : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(NICK_HELP_UNGROUP); + source.Reply(_("Syntax: \002UNGROUP \037[nick]\037\002\n" + " \n" + "This command ungroups your nick, or if given, the specificed nick,\n" + "from the group it is in. The ungrouped nick keeps its registration\n" + "time, password, email, greet, language, url, and icq. Everything\n" + "else is reset. You may not ungroup yourself if there is only one\n" + "nick in your group.")); return true; } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_UNGROUP); + source.Reply(_(" UNGROUP Remove a nick from a group")); } }; @@ -226,19 +263,19 @@ class CommandNSGList : public Command const NickCore *nc = u->Account(); if (!nick.empty() && (!nick.equals_ci(u->nick) && !u->Account()->IsServicesOper())) - source.Reply(ACCESS_DENIED, Config->s_NickServ.c_str()); + source.Reply(LanguageString::ACCESS_DENIED, Config->s_NickServ.c_str()); else if (!nick.empty() && (!findnick(nick) || !(nc = findnick(nick)->nc))) - source.Reply(nick.empty() ? NICK_NOT_REGISTERED : NICK_X_NOT_REGISTERED, nick.c_str()); + source.Reply(nick.empty() ? LanguageString::NICK_NOT_REGISTERED : LanguageString::NICK_X_NOT_REGISTERED, nick.c_str()); else { - source.Reply(!nick.empty() ? NICK_GLIST_HEADER_X : NICK_GLIST_HEADER, nc->display.c_str()); + source.Reply(!nick.empty() ? _("List of nicknames in the group of \002%s\002:") : _("List of nicknames in your group:"), nc->display.c_str()); for (std::list<NickAlias *>::const_iterator it = nc->aliases.begin(), it_end = nc->aliases.end(); it != it_end; ++it) { NickAlias *na2 = *it; - source.Reply(na2->HasFlag(NS_NO_EXPIRE) ? NICK_GLIST_REPLY_NOEXPIRE : NICK_GLIST_REPLY, na2->nick.c_str(), do_strftime(na2->last_seen + Config->NSExpire).c_str()); + source.Reply(na2->HasFlag(NS_NO_EXPIRE) ? _(" %s (does not expire)") : _(" %s (expires in %s)"), na2->nick.c_str(), do_strftime(na2->last_seen + Config->NSExpire).c_str()); } - source.Reply(NICK_GLIST_FOOTER, nc->aliases.size()); + source.Reply(_("%d nicknames in the group."), nc->aliases.size()); } return MOD_CONT; } @@ -247,16 +284,25 @@ class CommandNSGList : public Command { User *u = source.u; if (u->Account() && u->Account()->IsServicesOper()) - source.Reply(NICK_SERVADMIN_HELP_GLIST); + source.Reply(_("Syntax: \002GLIST [\037nickname\037]\002\n" + " \n" + "Without a parameter, lists all nicknames that are in\n" + "your group.\n" + " \n" + "With a parameter, lists all nicknames that are in the\n" + "group of the given nick.\n" + "This use limited to \002Services Operators\002.")); else - source.Reply(NICK_HELP_GLIST); + source.Reply(_("Syntax: \002GLIST\002\n" + " \n" + "Lists all nicks in your group.")); return true; } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_GLIST); + source.Reply(_(" GLIST Lists all nicknames in your group")); } }; diff --git a/modules/core/ns_help.cpp b/modules/core/ns_help.cpp index cc7f6c3a3..654d2233a 100644 --- a/modules/core/ns_help.cpp +++ b/modules/core/ns_help.cpp @@ -30,15 +30,31 @@ class CommandNSHelp : public Command void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { User *u = source.u; - source.Reply(NICK_HELP); + source.Reply(_("\002%S\002 allows you to \"register\" a nickname and\n" + "prevent others from using it. The following\n" + "commands allow for registration and maintenance of\n" + "nicknames; to use them, type \002%R%S \037command\037\002.\n" + "For more information on a specific command, type\n" + "\002%R%S HELP \037command\037\002.")); for (CommandMap::const_iterator it = NickServ->Commands.begin(), it_end = NickServ->Commands.end(); it != it_end; ++it) if (!Config->HidePrivilegedCommands || it->second->permission.empty() || (u->Account() && u->Account()->HasCommand(it->second->permission))) it->second->OnServHelp(source); if (u->Account() && u->Account()->IsServicesOper()) - source.Reply(NICK_SERVADMIN_HELP); + source.Reply(_(" \n" + "Services Operators can also drop any nickname without needing\n" + "to identify for the nick, and may view the access list for\n" + "any nickname (\002%R%S ACCESS LIST \037nick\037\002).")); if (Config->NSExpire >= 86400) - source.Reply(NICK_HELP_EXPIRES, Config->NSExpire / 86400); - source.Reply(NICK_HELP_FOOTER); + source.Reply(_("Nicknames that are not used anymore are subject to \n" + "the automatic expiration, i.e. they will be deleted\n" + "after %d days if not used."), Config->NSExpire / 86400); + source.Reply(_(" \n" + "\002NOTICE:\002 This service is intended to provide a way for\n" + "IRC users to ensure their identity is not compromised.\n" + "It is \002NOT\002 intended to facilitate \"stealing\" of\n" + "nicknames or other malicious actions. Abuse of %S\n" + "will result in, at minimum, loss of the abused\n" + "nickname(s).")); } }; diff --git a/modules/core/ns_identify.cpp b/modules/core/ns_identify.cpp index eb337d93e..625ccd7e2 100644 --- a/modules/core/ns_identify.cpp +++ b/modules/core/ns_identify.cpp @@ -33,32 +33,32 @@ class CommandNSIdentify : public Command { NickRequest *nr = findrequestnick(nick); if (nr) - source.Reply(NICK_IS_PREREG); + source.Reply(LanguageString::NICK_IS_PREREG); else - source.Reply(NICK_NOT_REGISTERED); + source.Reply(LanguageString::NICK_NOT_REGISTERED); } else if (na->HasFlag(NS_FORBIDDEN)) - source.Reply(NICK_X_FORBIDDEN, na->nick.c_str()); + source.Reply(LanguageString::NICK_X_FORBIDDEN, na->nick.c_str()); else if (na->nc->HasFlag(NI_SUSPENDED)) - source.Reply(NICK_X_SUSPENDED, na->nick.c_str()); + source.Reply(LanguageString::NICK_X_SUSPENDED, na->nick.c_str()); /* You can now identify for other nicks without logging out first, * however you can not identify again for the group you're already * identified as */ else if (u->Account() && u->Account() == na->nc) - source.Reply(NICK_ALREADY_IDENTIFIED); + source.Reply(_("You are already identified.")); else { int res = enc_check_password(pass, na->nc->pass); if (!res) { Log(LOG_COMMAND, u, this) << "and failed to identify"; - source.Reply(PASSWORD_INCORRECT); + source.Reply(LanguageString::PASSWORD_INCORRECT); if (bad_password(u)) return MOD_STOP; } else if (res == -1) - source.Reply(NICK_IDENTIFY_FAILED); + source.Reply(_("Sorry, identification failed.")); else { if (u->IsIdentified()) @@ -79,7 +79,7 @@ class CommandNSIdentify : public Command FOREACH_MOD(I_OnNickIdentify, OnNickIdentify(u)); Log(LOG_COMMAND, u, this) << "and identified for account " << u->Account()->display; - source.Reply(NICK_IDENTIFY_SUCCEEDED); + source.Reply(_("Password accepted - you are now recognized.")); if (ircd->vhost) do_on_id(u); if (Config->NSModeOnID) @@ -87,8 +87,12 @@ class CommandNSIdentify : public Command if (Config->NSForceEmail && u->Account() && u->Account()->email.empty()) { - source.Reply(NICK_IDENTIFY_EMAIL_REQUIRED); - source.Reply(NICK_IDENTIFY_EMAIL_HOWTO); + source.Reply(_("You must now supply an e-mail for your nick.\n" + "This e-mail will allow you to retrieve your password in\n" + "case you forget it.")); + source.Reply(_("Type \002%R%S SET EMAIL \037e-mail\037\002 in order to set your e-mail.\n" + "Your privacy is respected; this e-mail won't be given to\n" + "any third-party person.")); } if (u->IsIdentified()) @@ -100,18 +104,24 @@ class CommandNSIdentify : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(NICK_HELP_IDENTIFY); + source.Reply(_("Syntax: \002IDENTIFY [account] \037password\037\002\n" + " \n" + "Tells %S that you are really the owner of this\n" + "nick. Many commands require you to authenticate yourself\n" + "with this command before you use them. The password\n" + "should be the same one you sent with the \002REGISTER\002\n" + "command.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "IDENTIFY", NICK_IDENTIFY_SYNTAX); + SyntaxError(source, "IDENTIFY", _("IDENTIFY [account] \037password\037")); } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_IDENTIFY); + source.Reply(_(" IDENTIFY Identify yourself with your password")); } }; diff --git a/modules/core/ns_info.cpp b/modules/core/ns_info.cpp index ed894d604..63e92391f 100644 --- a/modules/core/ns_info.cpp +++ b/modules/core/ns_info.cpp @@ -46,21 +46,21 @@ class CommandNSInfo : public Command NickRequest *nr = findrequestnick(nick); if (nr) { - source.Reply(NICK_IS_PREREG); + source.Reply(LanguageString::NICK_IS_PREREG); if (has_auspex) - source.Reply(NICK_INFO_EMAIL, nr->email.c_str()); + source.Reply(_(" E-mail address: %s"), nr->email.c_str()); } else if (nickIsServices(nick, true)) - source.Reply(NICK_X_IS_SERVICES, nick.c_str()); + source.Reply(_("Nick \002%s\002 is part of this Network's Services."), nick.c_str()); else - source.Reply(NICK_X_NOT_REGISTERED, nick.c_str()); + source.Reply(LanguageString::NICK_X_NOT_REGISTERED, nick.c_str()); } else if (na->HasFlag(NS_FORBIDDEN)) { if (u->HasMode(UMODE_OPER) && !na->last_usermask.empty()) - source.Reply(NICK_X_FORBIDDEN_OPER, nick.c_str(), na->last_usermask.c_str(), !na->last_realname.empty() ? na->last_realname.c_str() : GetString(u, NO_REASON).c_str()); + source.Reply(LanguageString::NICK_X_FORBIDDEN_OPER, nick.c_str(), na->last_usermask.c_str(), !na->last_realname.empty() ? na->last_realname.c_str() : GetString(u->Account(), LanguageString::NO_REASON).c_str()); else - source.Reply(NICK_X_FORBIDDEN, nick.c_str()); + source.Reply(LanguageString::NICK_X_FORBIDDEN, nick.c_str()); } else { @@ -74,71 +74,71 @@ class CommandNSInfo : public Command if (has_auspex || (u->Account() && na->nc == u->Account())) show_hidden = true; - source.Reply(NICK_INFO_REALNAME, na->nick.c_str(), na->last_realname.c_str()); + source.Reply(_("%s is %s"), na->nick.c_str(), na->last_realname.c_str()); if (na->nc->IsServicesOper() && (show_hidden || !na->nc->HasFlag(NI_HIDE_STATUS))) - source.Reply(NICK_INFO_SERVICES_OPERTYPE, na->nick.c_str(), na->nc->ot->GetName().c_str()); + source.Reply(_("%s is a services operator of type %s."), na->nick.c_str(), na->nc->ot->GetName().c_str()); if (nick_online) { if (show_hidden || !na->nc->HasFlag(NI_HIDE_MASK)) - source.Reply(NICK_INFO_ADDRESS_ONLINE, na->last_usermask.c_str()); + source.Reply(_(" Is online from: %s"), na->last_usermask.c_str()); else - source.Reply(NICK_INFO_ADDRESS_ONLINE_NOHOST, na->nick.c_str()); + source.Reply(_("%s is currently online."), na->nick.c_str()); } else { if (show_hidden || !na->nc->HasFlag(NI_HIDE_MASK)) - source.Reply(NICK_INFO_ADDRESS, na->last_usermask.c_str()); + source.Reply(_("Last seen address: %s"), na->last_usermask.c_str()); } - source.Reply(NICK_INFO_TIME_REGGED, do_strftime(na->time_registered).c_str()); + source.Reply(_(" Time registered: %s"), do_strftime(na->time_registered).c_str()); if (!nick_online) { - source.Reply(NICK_INFO_LAST_SEEN, do_strftime(na->last_seen).c_str()); + source.Reply(_(" Last seen time: %s"), do_strftime(na->last_seen).c_str()); } if (!na->last_quit.empty() && (show_hidden || !na->nc->HasFlag(NI_HIDE_QUIT))) - source.Reply(NICK_INFO_LAST_QUIT, na->last_quit.c_str()); + source.Reply(_("Last quit message: %s"), na->last_quit.c_str()); if (!na->nc->email.empty() && (show_hidden || !na->nc->HasFlag(NI_HIDE_EMAIL))) - source.Reply(NICK_INFO_EMAIL, na->nc->email.c_str()); + source.Reply(_(" E-mail address: %s"), na->nc->email.c_str()); if (show_hidden) { if (!Config->s_HostServ.empty() && ircd->vhost && na->hostinfo.HasVhost()) { if (ircd->vident && !na->hostinfo.GetIdent().empty()) - source.Reply(NICK_INFO_VHOST2, na->hostinfo.GetIdent().c_str(), na->hostinfo.GetHost().c_str()); + source.Reply(_(" vhost: %s@%s"), na->hostinfo.GetIdent().c_str(), na->hostinfo.GetHost().c_str()); else - source.Reply(NICK_INFO_VHOST, na->hostinfo.GetHost().c_str()); + source.Reply(_(" vhost: %s"), na->hostinfo.GetHost().c_str()); } if (!na->nc->greet.empty()) - source.Reply(NICK_INFO_GREET, na->nc->greet.c_str()); + source.Reply(_(" Greet message: %s"), na->nc->greet.c_str()); Anope::string optbuf; - CheckOptStr(optbuf, NI_KILLPROTECT, GetString(u, NICK_INFO_OPT_KILL).c_str(), na->nc); - CheckOptStr(optbuf, NI_SECURE, GetString(u, NICK_INFO_OPT_SECURE).c_str(), na->nc); - CheckOptStr(optbuf, NI_PRIVATE, GetString(u, NICK_INFO_OPT_PRIVATE).c_str(), na->nc); - CheckOptStr(optbuf, NI_MSG, GetString(u, NICK_INFO_OPT_MSG).c_str(), na->nc); - CheckOptStr(optbuf, NI_AUTOOP, GetString(u, NICK_INFO_OPT_AUTOOP).c_str(), na->nc); + CheckOptStr(optbuf, NI_KILLPROTECT, GetString(u->Account(), _("Protection")).c_str(), na->nc); + CheckOptStr(optbuf, NI_SECURE, GetString(u->Account(), _("Security")).c_str(), na->nc); + CheckOptStr(optbuf, NI_PRIVATE, GetString(u->Account(), _("Private")).c_str(), na->nc); + CheckOptStr(optbuf, NI_MSG, GetString(u->Account(), _("Message mode")).c_str(), na->nc); + CheckOptStr(optbuf, NI_AUTOOP, GetString(u->Account(), _("Auto-op")).c_str(), na->nc); - source.Reply(NICK_INFO_OPTIONS, optbuf.empty() ? GetString(u, NICK_INFO_OPT_NONE).c_str() : optbuf.c_str()); + source.Reply(LanguageString::NICK_INFO_OPTIONS, optbuf.empty() ? _("None") : optbuf.c_str()); if (na->nc->HasFlag(NI_SUSPENDED)) { if (!na->last_quit.empty()) - source.Reply(NICK_INFO_SUSPENDED, na->last_quit.c_str()); + source.Reply(_("This nickname is currently suspended, reason: %s"), na->last_quit.c_str()); else - source.Reply(NICK_INFO_SUSPENDED_NO_REASON); + source.Reply(_("This nickname is currently suspended")); } if (na->HasFlag(NS_NO_EXPIRE)) - source.Reply(NICK_INFO_NO_EXPIRE); + source.Reply(_("This nickname will not expire.")); else - source.Reply(NICK_INFO_EXPIRE, do_strftime(na->last_seen + Config->NSExpire).c_str()); + source.Reply(_("Expires on: %s"), do_strftime(na->last_seen + Config->NSExpire).c_str()); } FOREACH_MOD(I_OnNickInfo, OnNickInfo(u, na, show_hidden)); @@ -148,19 +148,23 @@ class CommandNSInfo : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(NICK_HELP_INFO); + source.Reply(_("Syntax: \002INFO \037nickname\037\002\n" + " \n" + "Displays information about the given nickname, such as\n" + "the nick's owner, last seen address and time, and nick\n" + "options.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "INFO", NICK_INFO_SYNTAX); + SyntaxError(source, "INFO", _("INFO \037nick\037")); } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_INFO); + source.Reply(_(" INFO Displays information about a given nickname")); } }; diff --git a/modules/core/ns_list.cpp b/modules/core/ns_list.cpp index 1e77798a3..4c3db50ed 100644 --- a/modules/core/ns_list.cpp +++ b/modules/core/ns_list.cpp @@ -51,7 +51,7 @@ class CommandNSList : public Command if (Config->NSListOpersOnly && !u->HasMode(UMODE_OPER)) /* reverse the help logic */ { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); return MOD_STOP; } @@ -60,24 +60,24 @@ class CommandNSList : public Command Anope::string tmp = myStrGetToken(pattern.substr(1), '-', 0); /* Read FROM out */ if (tmp.empty()) { - source.Reply(LIST_INCORRECT_RANGE); + source.Reply(LanguageString::LIST_INCORRECT_RANGE); return MOD_CONT; } if (!tmp.is_number_only()) { - source.Reply(LIST_INCORRECT_RANGE); + source.Reply(LanguageString::LIST_INCORRECT_RANGE); return MOD_CONT; } from = convertTo<int>(tmp); tmp = myStrGetTokenRemainder(pattern, '-', 1); /* Read TO out */ if (tmp.empty()) { - source.Reply(LIST_INCORRECT_RANGE); + source.Reply(LanguageString::LIST_INCORRECT_RANGE); return MOD_CONT; } if (!tmp.is_number_only()) { - source.Reply(LIST_INCORRECT_RANGE); + source.Reply(LanguageString::LIST_INCORRECT_RANGE); return MOD_CONT; } to = convertTo<int>(tmp); @@ -105,7 +105,7 @@ class CommandNSList : public Command mync = u->Account(); - source.Reply(NICK_LIST_HEADER, pattern.c_str()); + source.Reply(LanguageString::LIST_HEADER, pattern.c_str()); if (!unconfirmed) { for (nickalias_map::const_iterator it = NickAliasList.begin(), it_end = NickAliasList.end(); it != it_end; ++it) @@ -167,7 +167,7 @@ class CommandNSList : public Command } } } - source.Reply(NICK_LIST_RESULTS, nnicks > Config->NSListMax ? Config->NSListMax : nnicks, nnicks); + source.Reply(_("End of list - %d/%d matches shown."), nnicks > Config->NSListMax ? Config->NSListMax : nnicks, nnicks); return MOD_CONT; } @@ -175,9 +175,49 @@ class CommandNSList : public Command { User *u = source.u; if (u->Account() && u->Account()->IsServicesOper()) - source.Reply(NICK_SERVADMIN_HELP_LIST); + source.Reply(_("Syntax: \002LIST \037pattern\037 [FORBIDDEN] [SUSPENDED] [NOEXPIRE] [UNCONFIRMED]\002\n" + " \n" + "Lists all registered nicknames which match the given\n" + "pattern, in \037nick!user@host\037 format. Nicks with the \002PRIVATE\002\n" + "option set will only be displayed to Services Operators. Nicks\n" + "with the \002NOEXPIRE\002 option set will have a \002!\002 appended to\n" + "the nickname for Services Operators.\n" + " \n" + "If the FORBIDDEN, SUSPENDED, NOEXPIRE or UNCONFIRMED options are given, only\n" + "nicks which, respectively, are FORBIDDEN, SUSPENDED, UNCONFIRMED or have the\n" + "NOEXPIRE flag set will be displayed. If multiple options are\n" + "given, all nicks matching at least one option will be displayed.\n" + "These options are limited to \037Services Operators\037. \n" + "Examples:\n" + " \n" + " \002LIST *!joeuser@foo.com\002\n" + " Lists all registered nicks owned by joeuser@foo.com.\n" + " \n" + " \002LIST *Bot*!*@*\002\n" + " Lists all registered nicks with \002Bot\002 in their\n" + " names (case insensitive).\n" + " \n" + " \002LIST * NOEXPIRE\002\n" + " Lists all registered nicks which have been set to\n")); else - source.Reply(NICK_HELP_LIST); + source.Reply(_("Syntax: \002LIST \037pattern\037\002\n" + " \n" + "Lists all registered nicknames which match the given\n" + "pattern, in \037nick!user@host\037 format. Nicks with the\n" + "\002PRIVATE\002 option set will not be displayed.\n" + " \n" + "Examples:\n" + " \n" + " \002LIST *!joeuser@foo.com\002\n" + " Lists all nicks owned by joeuser@foo.com.\n" + " \n" + " \002LIST *Bot*!*@*\002\n" + " Lists all registered nicks with \002Bot\002 in their\n" + " names (case insensitive).\n" + " \n" + " \002LIST *!*@*.bar.org\002\n" + " Lists all nicks owned by users in the \002bar.org\002\n" + " domain.")); return true; } @@ -186,14 +226,14 @@ class CommandNSList : public Command { User *u = source.u; if (u->Account()->IsServicesOper()) - SyntaxError(source, "LIST", NICK_LIST_SERVADMIN_SYNTAX); + SyntaxError(source, "LIST", _("LIST \037pattern\037 [FORBIDDEN] [SUSPENDED] [NOEXPIRE] [UNCONFIRMED]")); else - SyntaxError(source, "LIST", NICK_LIST_SYNTAX); + SyntaxError(source, "LIST", LanguageString::NICK_LIST_SYNTAX); } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_LIST); + source.Reply(_(" LIST List all registered nicknames that match a given pattern")); } }; diff --git a/modules/core/ns_logout.cpp b/modules/core/ns_logout.cpp index 446e33b5c..81ccc841d 100644 --- a/modules/core/ns_logout.cpp +++ b/modules/core/ns_logout.cpp @@ -31,9 +31,9 @@ class CommandNSLogout : public Command if (!u->Account()->IsServicesOper() && !nick.empty()) this->OnSyntaxError(source, ""); else if (!(u2 = (!nick.empty() ? finduser(nick) : u))) - source.Reply(NICK_X_NOT_IN_USE, nick.c_str()); + source.Reply(LanguageString::NICK_X_NOT_IN_USE, nick.c_str()); else if (!nick.empty() && u2->Account() && !u2->Account()->IsServicesOper()) - source.Reply(NICK_LOGOUT_SERVICESADMIN, nick.c_str()); + source.Reply(_("You can't logout %s because they are a Services Operator."), nick.c_str()); else { if (!nick.empty() && !param.empty() && param.equals_ci("REVALIDATE")) @@ -44,9 +44,9 @@ class CommandNSLogout : public Command /* Remove founder status from this user in all channels */ if (!nick.empty()) - source.Reply(NICK_LOGOUT_X_SUCCEEDED, nick.c_str()); + source.Reply(_("Nick %s has been logged out."), nick.c_str()); else - source.Reply(NICK_LOGOUT_SUCCEEDED); + source.Reply(_("Your nick has been logged out.")); ircdproto->SendAccountLogout(u2, u2->Account()); u2->RemoveMode(NickServ, UMODE_REGISTERED); @@ -64,21 +64,35 @@ class CommandNSLogout : public Command { User *u = source.u; if (u->Account() && u->Account()->IsServicesOper()) - source.Reply(NICK_SERVADMIN_HELP_LOGOUT); + source.Reply(_("Syntax: \002LOGOUT [\037nickname\037 [REVALIDATE]]\002\n" + " \n" + "Without a parameter, reverses the effect of the \002IDENTIFY\002 \n" + "command, i.e. make you not recognized as the real owner of the nick\n" + "anymore. Note, however, that you won't be asked to reidentify\n" + "yourself.\n" + " \n" + "With a parameter, does the same for the given nick. If you \n" + "specify REVALIDATE as well, Services will ask the given nick\n" + "to re-identify. This use limited to \002Services Operators\002.")); else - source.Reply(NICK_HELP_LOGOUT); + source.Reply(_("Syntax: \002LOGOUT\002\n" + " \n" + "This reverses the effect of the \002IDENTIFY\002 command, i.e.\n" + "make you not recognized as the real owner of the nick\n" + "anymore. Note, however, that you won't be asked to reidentify\n" + "yourself.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "LOGOUT", NICK_LOGOUT_SYNTAX); + SyntaxError(source, "LOGOUT", _("LOGOUT")); } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_LOGOUT); + source.Reply(_(" LOGOUT Reverses the effect of the IDENTIFY command")); } }; diff --git a/modules/core/ns_recover.cpp b/modules/core/ns_recover.cpp index b7a2ec7ba..ad32c664c 100644 --- a/modules/core/ns_recover.cpp +++ b/modules/core/ns_recover.cpp @@ -31,32 +31,32 @@ class CommandNSRecover : public Command NickAlias *na; User *u2; if (!(u2 = finduser(nick))) - source.Reply(NICK_X_NOT_IN_USE, nick.c_str()); + source.Reply(LanguageString::NICK_X_NOT_IN_USE, nick.c_str()); else if (!(na = findnick(u2->nick))) - source.Reply(NICK_X_NOT_REGISTERED, nick.c_str()); + source.Reply(LanguageString::NICK_X_NOT_REGISTERED, nick.c_str()); else if (na->HasFlag(NS_FORBIDDEN)) - source.Reply(NICK_X_FORBIDDEN, na->nick.c_str()); + source.Reply(LanguageString::NICK_X_FORBIDDEN, na->nick.c_str()); else if (na->nc->HasFlag(NI_SUSPENDED)) - source.Reply(NICK_X_SUSPENDED, na->nick.c_str()); + source.Reply(LanguageString::NICK_X_SUSPENDED, na->nick.c_str()); else if (nick.equals_ci(u->nick)) - source.Reply(NICK_NO_RECOVER_SELF); + source.Reply(_("You can't recover yourself!")); else if (!pass.empty()) { int res = enc_check_password(pass, na->nc->pass); if (res == 1) { - u2->SendMessage(NickServ, FORCENICKCHANGE_NOW); + u2->SendMessage(NickServ, LanguageString::FORCENICKCHANGE_NOW); u2->Collide(na); /* Convert Config->NSReleaseTimeout seconds to string format */ Anope::string relstr = duration(na->nc, Config->NSReleaseTimeout); - source.Reply(NICK_RECOVERED, Config->s_NickServ.c_str(), nick.c_str(), relstr.c_str()); + source.Reply(LanguageString::NICK_RECOVERED, Config->s_NickServ.c_str(), nick.c_str(), relstr.c_str()); } else { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); if (!res) { Log(LOG_COMMAND, u, this) << "with invalid password for " << nick; @@ -69,16 +69,16 @@ class CommandNSRecover : public Command { if (u->Account() == na->nc || (!na->nc->HasFlag(NI_SECURE) && is_on_access(u, na->nc))) { - u2->SendMessage(NickServ, FORCENICKCHANGE_NOW); + u2->SendMessage(NickServ, LanguageString::FORCENICKCHANGE_NOW); u2->Collide(na); /* Convert Config->NSReleaseTimeout seconds to string format */ Anope::string relstr = duration(na->nc, Config->NSReleaseTimeout); - source.Reply(NICK_RECOVERED, Config->s_NickServ.c_str(), nick.c_str(), relstr.c_str()); + source.Reply(LanguageString::NICK_RECOVERED, Config->s_NickServ.c_str(), nick.c_str(), relstr.c_str()); } else - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); } return MOD_CONT; } @@ -88,19 +88,40 @@ class CommandNSRecover : public Command /* Convert Config->NSReleaseTimeout seconds to string format */ Anope::string relstr = duration(source.u->Account(), Config->NSReleaseTimeout); - source.Reply(NICK_HELP_RECOVER, relstr.c_str()); + source.Reply(_("Syntax: \002RECOVER \037nickname\037 [\037password\037]\002\n" + " \n" + "Allows you to recover your nickname if someone else has\n" + "taken it; this does the same thing that %S does\n" + "automatically if someone tries to use a kill-protected\n" + "nick.\n" + " \n" + "When you give this command, %S will bring a fake\n" + "user online with the same nickname as the user you're\n" + "trying to recover your nick from. This causes the IRC\n" + "servers to disconnect the other user. This fake user will\n" + "remain online for %s to ensure that the other\n" + "user does not immediately reconnect; after that time, you\n" + "can reclaim your nick. Alternatively, use the \002RELEASE\002\n" + "command (\002%R%S HELP RELEASE\002) to get the nick\n" + "back sooner.\n" + " \n" + "In order to use the \002RECOVER\002 command for a nick, your\n" + "current address as shown in /WHOIS must be on that nick's\n" + "access list, you must be identified and in the group of\n" + "that nick, or you must supply the correct password for\n" + "the nickname."), relstr.c_str()); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "RECOVER", NICK_RECOVER_SYNTAX); + SyntaxError(source, "RECOVER", _("RECOVER \037nickname\037 [\037password\037]")); } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_RECOVER); + source.Reply(_(" RECOVER Kill another user who has taken your nick")); } }; diff --git a/modules/core/ns_register.cpp b/modules/core/ns_register.cpp index 0a5a5f641..ec885f728 100644 --- a/modules/core/ns_register.cpp +++ b/modules/core/ns_register.cpp @@ -52,23 +52,23 @@ class CommandNSConfirm : public Command u->Login(na->nc); Log(LOG_COMMAND, u, this) << "to register " << nr->nick << " (email: " << (!nr->email.empty() ? nr->email : "none") << ")"; if (Config->NSAddAccessOnReg) - source.Reply(NICK_REGISTERED, u->nick.c_str(), na->nc->GetAccess(0).c_str()); + source.Reply(_("Nickname \002%s\002 registered under your account: %s"), u->nick.c_str(), na->nc->GetAccess(0).c_str()); else - source.Reply(NICK_REGISTERED_NO_MASK, u->nick.c_str()); + source.Reply(_("Nickname \002%s\002 registered."), u->nick.c_str()); delete nr; ircdproto->SendAccountLogin(u, u->Account()); ircdproto->SetAutoIdentificationToken(u); if (enc_decrypt(na->nc->pass, tmp_pass) == 1) - source.Reply(NICK_PASSWORD_IS, tmp_pass.c_str()); + source.Reply(_("Your password is \002%s\002 - remember this for later use."), tmp_pass.c_str()); u->lastnickreg = Anope::CurTime; } else { Log(LOG_COMMAND, u, this) << "to confirm " << nr->nick << " (email: " << (!nr->email.empty() ? nr->email : "none") << ")"; - source.Reply(NICK_FORCE_REG, nr->nick.c_str()); + source.Reply(_("Nickname \002%s\002 confirmed"), nr->nick.c_str()); User *user = finduser(nr->nick); /* Delrequest must be called before validate_user */ delete nr; @@ -109,21 +109,21 @@ class CommandNSConfirm : public Command return MOD_CONT; } } - source.Reply(NICK_CONFIRM_NOT_FOUND, Config->s_NickServ.c_str()); + source.Reply(_("Registration step 1 may have expired, please use \"%R%s register <password> <email>\" first."), Config->s_NickServ.c_str()); return MOD_CONT; } if (!nr->passcode.equals_cs(passcode)) { - source.Reply(NICK_CONFIRM_INVALID); + source.Reply(LanguageString::NICK_CONFIRM_INVALID); return MOD_CONT; } } if (!nr) { - source.Reply(NICK_REGISTRATION_FAILED); + source.Reply(_("Sorry, registration failed.")); return MOD_CONT; } @@ -145,20 +145,31 @@ class CommandNSConfirm : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { User *u = source.u; - source.Reply(NICK_HELP_CONFIRM); + source.Reply(_("Syntax: \002CONFIRM \037passcode\037\002\n" + " \n" + "This is the second step of nickname registration process.\n" + "You must perform this command in order to get your nickname\n" + "registered with %S. The passcode (or called auth code also)\n" + "is sent to your e-mail address in the first step of the\n" + "registration process. For more information about the first\n" + "stage of the registration process, type: \002%R%S HELP REGISTER\002\n" + " \n" + "This is also used after the RESETPASS command has been used to\n" + "force identify you to your nick so you may change your password.")); if (u->Account() && u->Account()->HasPriv("nickserv/confirm")) - source.Reply(NICK_HELP_CONFIRM_OPER); + source.Reply(_("Additionally, Services Operators with the \037nickserv/confirm\037 permission can\n" + "replace \037passcode\037 with a users nick to force validate them.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - source.Reply(NICK_CONFIRM_INVALID); + source.Reply(LanguageString::NICK_CONFIRM_INVALID); } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_CONFIRM); + source.Reply(_(" CONFIRM Confirm a nickserv auth code")); } }; @@ -192,19 +203,19 @@ class CommandNSRegister : public CommandNSConfirm if (readonly) { - source.Reply(NICK_REGISTRATION_DISABLED); + source.Reply(_("Sorry, nickname registration is temporarily disabled.")); return MOD_CONT; } if (!u->HasMode(UMODE_OPER) && Config->NickRegDelay && Anope::CurTime - u->my_signon < Config->NickRegDelay) { - source.Reply(NICK_REG_DELAY, Config->NickRegDelay); + source.Reply(_("You must have been using this nick for at least %d seconds to register."), Config->NickRegDelay); return MOD_CONT; } if ((anr = findrequestnick(u->nick))) { - source.Reply(NICK_REQUESTED); + source.Reply(LanguageString::NICK_REQUESTED); return MOD_CONT; } @@ -215,13 +226,13 @@ class CommandNSRegister : public CommandNSConfirm */ if (nicklen <= prefixlen + 7 && nicklen >= prefixlen + 1 && !u->nick.find_ci(Config->NSGuestNickPrefix) && u->nick.substr(prefixlen).find_first_not_of("1234567890") == Anope::string::npos) { - source.Reply(NICK_CANNOT_BE_REGISTERED, u->nick.c_str()); + source.Reply(LanguageString::NICK_CANNOT_BE_REGISTERED, u->nick.c_str()); return MOD_CONT; } if (!ircdproto->IsNickValid(u->nick)) { - source.Reply(NICK_X_FORBIDDEN, u->nick.c_str()); + source.Reply(LanguageString::NICK_X_FORBIDDEN, u->nick.c_str()); return MOD_CONT; } @@ -232,7 +243,7 @@ class CommandNSRegister : public CommandNSConfirm if (u->nick.find_ci(nick) != Anope::string::npos && !u->HasMode(UMODE_OPER)) { - source.Reply(NICK_CANNOT_BE_REGISTERED, u->nick.c_str()); + source.Reply(LanguageString::NICK_CANNOT_BE_REGISTERED, u->nick.c_str()); return MOD_CONT; } } @@ -240,24 +251,24 @@ class CommandNSRegister : public CommandNSConfirm if (Config->NSForceEmail && email.empty()) this->OnSyntaxError(source, ""); else if (Anope::CurTime < u->lastnickreg + Config->NSRegDelay) - source.Reply(NICK_REG_PLEASE_WAIT, (u->lastnickreg + Config->NSRegDelay) - Anope::CurTime); + source.Reply(_("Please wait %d seconds before using the REGISTER command again."), (u->lastnickreg + Config->NSRegDelay) - Anope::CurTime); else if ((na = findnick(u->nick))) { /* i.e. there's already such a nick regged */ if (na->HasFlag(NS_FORBIDDEN)) { Log(NickServ) << u->GetMask() << " tried to register FORBIDden nick " << u->nick; - source.Reply(NICK_CANNOT_BE_REGISTERED, u->nick.c_str()); + source.Reply(LanguageString::NICK_CANNOT_BE_REGISTERED, u->nick.c_str()); } else - source.Reply(NICK_ALREADY_REGISTERED, u->nick.c_str()); + source.Reply(LanguageString::NICK_ALREADY_REGISTERED, u->nick.c_str()); } else if (pass.equals_ci(u->nick) || (Config->StrictPasswords && pass.length() < 5)) - source.Reply(MORE_OBSCURE_PASSWORD); + source.Reply(LanguageString::MORE_OBSCURE_PASSWORD); else if (pass.length() > Config->PassLen) - source.Reply(PASSWORD_TOO_LONG); + source.Reply(LanguageString::PASSWORD_TOO_LONG); else if (!email.empty() && !MailValidate(email)) - source.Reply(MAIL_X_INVALID, email.c_str()); + source.Reply(LanguageString::MAIL_X_INVALID, email.c_str()); else { for (idx = 0; idx < 9; ++idx) @@ -273,13 +284,16 @@ class CommandNSRegister : public CommandNSConfirm { if (SendRegmail(u, nr)) { - source.Reply(NICK_ENTER_REG_CODE, email.c_str(), Config->s_NickServ.c_str(), Config->s_NickServ.c_str()); + source.Reply(_("A passcode has been sent to %s, please type %R%s confirm <passcode> to complete registration.\n" + "If you need to cancel your registration, use \"%R%s drop <password>\"."), + email.c_str(), Config->s_NickServ.c_str(), Config->s_NickServ.c_str()); + Log(LOG_COMMAND, u, this) << "send registration verification code to " << nr->email; } else { Log(LOG_COMMAND, u, this) << "unable to send registration verification mail"; - source.Reply(NICK_REG_UNABLE); + source.Reply(_("Nick NOT registered, please try again later.")); delete nr; return MOD_CONT; } @@ -296,21 +310,51 @@ class CommandNSRegister : public CommandNSConfirm bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(NICK_HELP_REGISTER); + source.Reply(_("Syntax: \002REGISTER \037password\037 \037[email]\037\002\n" + " \n" + "Registers your nickname in the %S database. Once\n" + "your nick is registered, you can use the \002SET\002 and \002ACCESS\002\n" + "commands to configure your nick's settings as you like\n" + "them. Make sure you remember the password you use when\n" + "registering - you'll need it to make changes to your nick\n" + "later. (Note that \002case matters!\002 \037ANOPE\037, \037Anope\037, and \n" + "\037anope\037 are all different passwords!)\n" + " \n" + "Guidelines on choosing passwords:\n" + " \n" + "Passwords should not be easily guessable. For example,\n" + "using your real name as a password is a bad idea. Using\n" + "your nickname as a password is a much worse idea ;) and,\n" + "in fact, %S will not allow it. Also, short\n" + "passwords are vulnerable to trial-and-error searches, so\n" + "you should choose a password at least 5 characters long.\n" + "Finally, the space character cannot be used in passwords.\n" + " \n" + "The parameter \037email\037 is optional and will set the email\n" + "for your nick immediately. However, it may be required\n" + "on certain networks.\n" + "Your privacy is respected; this e-mail won't be given to\n" + "any third-party person.\n" + " \n" + "This command also creates a new group for your nickname,\n" + "that will allow you to register other nicks later sharing\n" + "the same configuration, the same set of memos and the\n" + "same channel privileges. For more information on this\n" + "feature, type \002%R%S HELP GROUP\002.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { if (Config->NSForceEmail) - SyntaxError(source, "REGISTER", NICK_REGISTER_SYNTAX_EMAIL); + SyntaxError(source, "REGISTER", _("\037password\037 \037email\037")); else - SyntaxError(source, "REGISTER", NICK_REGISTER_SYNTAX); + SyntaxError(source, "REGISTER", _("\037password\037 [\037email\037]")); } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_REGISTER); + source.Reply(_(" REGISTER Register a nickname")); } }; @@ -332,13 +376,13 @@ class CommandNSResend : public Command { if (Anope::CurTime < nr->lastmail + Config->NSResendDelay) { - source.Reply(MAIL_LATER); + source.Reply(_("Cannot send mail now; please retry a little later.")); return MOD_CONT; } if (!SendRegmail(u, nr)) { nr->lastmail = Anope::CurTime; - source.Reply(NICK_REG_RESENT, nr->email.c_str()); + source.Reply(_("Your passcode has been re-sent to %s."), nr->email.c_str()); Log(LOG_COMMAND, u, this) << "resend registration verification code for " << nr->nick; } else @@ -353,13 +397,16 @@ class CommandNSResend : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(NICK_HELP_RESEND); + source.Reply(_("Syntax: \002RESEND\002\n" + " \n" + "This command will re-send the auth code (also called passcode)\n" + "to the e-mail address of the user whom is performing it.")); return true; } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_RESEND); + source.Reply(_(" RESEND Resend a nickserv auth code")); } }; @@ -385,8 +432,15 @@ static bool SendRegmail(User *u, NickRequest *nr) { char subject[BUFSIZE], message[BUFSIZE]; - snprintf(subject, sizeof(subject), GetString(NICK_REG_MAIL_SUBJECT).c_str(), nr->nick.c_str()); - snprintf(message, sizeof(message), GetString(NICK_REG_MAIL).c_str(), nr->nick.c_str(), Config->NetworkName.c_str(), Config->s_NickServ.c_str(), nr->passcode.c_str(), Config->NetworkName.c_str()); + snprintf(subject, sizeof(subject), GetString(NULL, "Nickname Registration (%s)").c_str(), nr->nick.c_str()); + snprintf(message, sizeof(message), GetString(NULL, "Hi,\n" + " \n" + "You have requested to register the nickname %s on %s.\n" + "Please type \" %R%s confirm %s \" to complete registration.\n" + " \n" + "If you don't know why this mail was sent to you, please ignore it silently.\n" + " \n" + "%s administrators.").c_str(), nr->nick.c_str(), Config->NetworkName.c_str(), Config->s_NickServ.c_str(), nr->passcode.c_str(), Config->NetworkName.c_str()); return Mail(u, nr, NickServ, subject, message); } diff --git a/modules/core/ns_release.cpp b/modules/core/ns_release.cpp index ed0b18eb9..67c1b73ea 100644 --- a/modules/core/ns_release.cpp +++ b/modules/core/ns_release.cpp @@ -29,24 +29,24 @@ class CommandNSRelease : public Command NickAlias *na; if (!(na = findnick(nick))) - source.Reply(NICK_X_NOT_REGISTERED, nick.c_str()); + source.Reply(LanguageString::NICK_X_NOT_REGISTERED, nick.c_str()); else if (na->HasFlag(NS_FORBIDDEN)) - source.Reply(NICK_X_FORBIDDEN, na->nick.c_str()); + source.Reply(LanguageString::NICK_X_FORBIDDEN, na->nick.c_str()); else if (na->nc->HasFlag(NI_SUSPENDED)) - source.Reply(NICK_X_SUSPENDED, na->nick.c_str()); + source.Reply(LanguageString::NICK_X_SUSPENDED, na->nick.c_str()); else if (!na->HasFlag(NS_HELD)) - source.Reply(NICK_RELEASE_NOT_HELD, nick.c_str()); + source.Reply(_("Nick \002%s\002 isn't being held."), nick.c_str()); else if (!pass.empty()) { int res = enc_check_password(pass, na->nc->pass); if (res == 1) { Log(LOG_COMMAND, u, this) << "released " << na->nick; - source.Reply(NICK_RELEASED); + source.Reply(_("Services' hold on your nick has been released.")); } else { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); if (!res) { Log(LOG_COMMAND, u, this) << "invalid password for " << nick; @@ -60,10 +60,10 @@ class CommandNSRelease : public Command if (u->Account() == na->nc || (!na->nc->HasFlag(NI_SECURE) && is_on_access(u, na->nc))) { na->Release(); - source.Reply(NICK_RELEASED); + source.Reply(_("Services' hold on your nick has been released.")); } else - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); } return MOD_CONT; } @@ -74,19 +74,31 @@ class CommandNSRelease : public Command User *u = source.u; Anope::string relstr = duration(u->Account(), Config->NSReleaseTimeout); - source.Reply(NICK_HELP_RELEASE, relstr.c_str()); + source.Reply(_("Syntax: \002RELEASE \037nickname\037 [\037password\037]\002\n" + " \n" + "Instructs %S to remove any hold on your nickname\n" + "caused by automatic kill protection or use of the \002RECOVER\002\n" + "command. This holds lasts for %s;\n" + "This command gets rid of them sooner.\n" + " \n" + "In order to use the \002RELEASE\002 command for a nick, your\n" + "current address as shown in /WHOIS must be on that nick's\n" + "access list, you must be identified and in the group of\n" + "that nick, or you must supply the correct password for\n" + "the nickname.")); + return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "RELEASE", NICK_RELEASE_SYNTAX); + SyntaxError(source, "RELEASE", _("RELEASE \037nickname\037 [\037password\037]")); } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_RELEASE); + source.Reply(_(" RELEASE Regain custody of your nick after RECOVER")); } }; diff --git a/modules/core/ns_resetpass.cpp b/modules/core/ns_resetpass.cpp index cf0a6cba1..7b5473122 100644 --- a/modules/core/ns_resetpass.cpp +++ b/modules/core/ns_resetpass.cpp @@ -29,17 +29,17 @@ class CommandNSResetPass : public Command NickAlias *na; if (Config->RestrictMail && (!u->Account() || !u->Account()->HasCommand("nickserv/resetpass"))) - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); if (!(na = findnick(params[0]))) - source.Reply(NICK_X_NOT_REGISTERED, params[0].c_str()); + source.Reply(LanguageString::NICK_X_NOT_REGISTERED, params[0].c_str()); else if (na->HasFlag(NS_FORBIDDEN)) - source.Reply(NICK_X_FORBIDDEN, na->nick.c_str()); + source.Reply(LanguageString::NICK_X_FORBIDDEN, na->nick.c_str()); else { if (SendResetEmail(u, na)) { Log(LOG_COMMAND, u, this) << "for " << na->nick << " (group: " << na->nc->display << ")"; - source.Reply(NICK_RESETPASS_COMPLETE, na->nick.c_str()); + source.Reply(_("Password reset email for \002%s\002 has been sent."), na->nick.c_str()); } } @@ -48,18 +48,20 @@ class CommandNSResetPass : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(NICK_HELP_RESETPASS); + source.Reply(_("Syntax: \002RESETPASS \037nickname\037\002\n" + "Sends a code key to the nickname with instructions on how to\n" + "reset their password.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "RESETPASS", NICK_RESETPASS_SYNTAX); + SyntaxError(source, "RESETPASS", _("RESETPASS \037nickname\037\002")); } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_RESETPASS); + source.Reply(_(" RESETPASS Helps you reset lost passwords")); } }; @@ -97,7 +99,7 @@ class NSResetPass : public Module { na->nc->Shrink("ns_resetpass_code"); na->nc->Shrink("ns_resetpass_time"); - source.Reply(NICK_CONFIRM_EXPIRED); + source.Reply(_("Your password reset request has expired.")); return EVENT_STOP; } @@ -117,7 +119,7 @@ class NSResetPass : public Module FOREACH_MOD(I_OnNickIdentify, OnNickIdentify(u)); Log(LOG_COMMAND, u, &commandnsresetpass) << "confirmed RESETPASS to forcefully identify to " << na->nick; - source.Reply(NICK_CONFIRM_SUCCESS, Config->s_NickServ.c_str()); + source.Reply(_("You are now identified for your nick. Change your password using \"%R%s SET PASSWORD \002newpassword\002\" now."), Config->s_NickServ.c_str()); if (ircd->vhost) do_on_id(u); @@ -128,7 +130,7 @@ class NSResetPass : public Module else { Log(LOG_COMMAND, u, &commandnsresetpass) << "invalid confirm passcode for " << na->nick; - source.Reply(NICK_CONFIRM_INVALID); + source.Reply(LanguageString::NICK_CONFIRM_INVALID); bad_password(u); } @@ -144,7 +146,7 @@ static bool SendResetEmail(User *u, NickAlias *na) { char subject[BUFSIZE], message[BUFSIZE]; - snprintf(subject, sizeof(subject), GetString(na->nc, NICK_RESETPASS_SUBJECT).c_str(), na->nick.c_str()); + snprintf(subject, sizeof(subject), GetString(na->nc, _("Reset password request for %s")).c_str(), na->nick.c_str()); int min = 1, max = 62; int chars[] = { @@ -160,7 +162,15 @@ static bool SendResetEmail(User *u, NickAlias *na) for (idx = 0; idx < 20; ++idx) passcode += chars[1 + static_cast<int>((static_cast<float>(max - min)) * getrandom16() / 65536.0) + min]; - snprintf(message, sizeof(message), GetString(na->nc, NICK_RESETPASS_MESSAGE).c_str(), na->nick.c_str(), Config->s_NickServ.c_str(), passcode.c_str(), Config->NetworkName.c_str()); + snprintf(message, sizeof(message), GetString(na->nc, + "Hi,\n" + " \n" + "You have requested to have the password for %s reset.\n" + "To reset your password, type \002%R%s CONFIRM %s\002\n" + " \n" + "If you don't know why this mail was sent to you, please ignore it silently.\n" + " \n" + "%s administrators.").c_str(), na->nick.c_str(), Config->s_NickServ.c_str(), passcode.c_str(), Config->NetworkName.c_str()); na->nc->Shrink("ns_resetpass_code"); na->nc->Shrink("ns_resetpass_time"); diff --git a/modules/core/ns_saset.cpp b/modules/core/ns_saset.cpp index 4cadaeba4..66c4b6ef7 100644 --- a/modules/core/ns_saset.cpp +++ b/modules/core/ns_saset.cpp @@ -36,17 +36,17 @@ class CommandNSSASet : public Command if (readonly) { - source.Reply(NICK_SET_DISABLED); + source.Reply(LanguageString::NICK_SET_DISABLED); return MOD_CONT; } NickAlias *na = findnick(nick); if (!na) - source.Reply(NICK_SASET_BAD_NICK, nick.c_str()); + source.Reply(LanguageString::NICK_X_NOT_REGISTERED, nick.c_str()); else if (na->HasFlag(NS_FORBIDDEN)) - source.Reply(NICK_X_FORBIDDEN, na->nick.c_str()); + source.Reply(LanguageString::NICK_X_FORBIDDEN, na->nick.c_str()); else if (na->nc->HasFlag(NI_SUSPENDED)) - source.Reply(NICK_X_SUSPENDED, na->nick.c_str()); + source.Reply(LanguageString::NICK_X_SUSPENDED, na->nick.c_str()); else { Command *c = this->FindCommand(params[1]); @@ -64,7 +64,7 @@ class CommandNSSASet : public Command mod_run_cmd(NickServ, u, c, params[1], cmdparams, false); } else - source.Reply(NICK_SASET_UNKNOWN_OPTION, cmd.c_str()); + source.Reply(_("Unknown SASET option \002%s\002."), cmd.c_str()); } return MOD_CONT; @@ -74,10 +74,14 @@ class CommandNSSASet : public Command { if (subcommand.empty()) { - source.Reply(NICK_HELP_SASET_HEAD); + source.Reply(_("Syntax: \002SASET \037nickname\037 \037option\037 \037parameters\037\002.\n" + " \n" + "Sets various nickname options. \037option\037 can be one of:")); for (subcommand_map::iterator it = this->subcommands.begin(), it_end = this->subcommands.end(); it != it_end; ++it) it->second->OnServHelp(source); - source.Reply(NICK_HELP_SASET_TAIL); + source.Reply(_("Type \002%R%S HELP SASET \037option\037\002 for more information\n" + "on a specific option. The options will be set on the given\n" + "\037nickname\037.")); return true; } else @@ -93,12 +97,12 @@ class CommandNSSASet : public Command void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "SASET", NICK_SASET_SYNTAX); + SyntaxError(source, "SASET", LanguageString::NICK_SASET_SYNTAX); } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_SASET); + source.Reply(_(" SASET Set SET-options on another nickname")); } bool AddSubcommand(Module *creator, Command *c) @@ -141,30 +145,33 @@ class CommandNSSASetDisplay : public Command NickAlias *na = findnick(params[1]); if (!na || na->nc != nc) { - source.Reply(NICK_SASET_DISPLAY_INVALID, nc->display.c_str()); + source.Reply(LanguageString::NICK_SASET_DISPLAY_INVALID, nc->display.c_str()); return MOD_CONT; } change_core_display(nc, params[1]); - source.Reply(NICK_SET_DISPLAY_CHANGED, nc->display.c_str()); + source.Reply(LanguageString::NICK_SET_DISPLAY_CHANGED, nc->display.c_str()); return MOD_CONT; } bool OnHelp(CommandSource &source, const Anope::string &) { - source.Reply(NICK_HELP_SASET_DISPLAY); + source.Reply(_("Syntax: \002SASET \037nickname\037 DISPLAY \037new-display\037\002\n" + " \n" + "Changes the display used to refer to the nickname group in \n" + "Services. The new display MUST be a nick of the group.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &) { // XXX - SyntaxError(source, "SASET", NICK_SASET_SYNTAX); + SyntaxError(source, "SASET", LanguageString::NICK_SASET_SYNTAX); } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_SASET_DISPLAY); + source.Reply(_(" DISPLAY Set the display of the group in Services")); } }; @@ -187,32 +194,32 @@ class CommandNSSASetPassword : public Command if (Config->NSSecureAdmins && u->Account() != nc && nc->IsServicesOper()) { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); return MOD_CONT; } else if (nc->display.equals_ci(params[1]) || (Config->StrictPasswords && len < 5)) { - source.Reply(MORE_OBSCURE_PASSWORD); + source.Reply(LanguageString::MORE_OBSCURE_PASSWORD); return MOD_CONT; } else if (len > Config->PassLen) { - source.Reply(PASSWORD_TOO_LONG); + source.Reply(LanguageString::PASSWORD_TOO_LONG); return MOD_CONT; } if (enc_encrypt(params[1], nc->pass)) { Log(NickServ) << "Failed to encrypt password for " << nc->display << " (saset)"; - source.Reply(NICK_SASET_PASSWORD_FAILED, nc->display.c_str()); + source.Reply(LanguageString::NICK_SASET_PASSWORD_FAILED, nc->display.c_str()); return MOD_CONT; } Anope::string tmp_pass; if (enc_decrypt(nc->pass, tmp_pass) == 1) - source.Reply(NICK_SASET_PASSWORD_CHANGED_TO, nc->display.c_str(), tmp_pass.c_str()); + source.Reply(LanguageString::NICK_SASET_PASSWORD_CHANGED_TO, nc->display.c_str(), tmp_pass.c_str()); else - source.Reply(NICK_SASET_PASSWORD_CHANGED, nc->display.c_str()); + source.Reply(LanguageString::NICK_SASET_PASSWORD_CHANGED, nc->display.c_str()); if (Config->WallSetpass) ircdproto->SendGlobops(NickServ, "\2%s\2 used SASET PASSWORD on \2%s\2", u->nick.c_str(), nc->display.c_str()); @@ -222,18 +229,20 @@ class CommandNSSASetPassword : public Command bool OnHelp(CommandSource &source, const Anope::string &) { - source.Reply(NICK_HELP_SASET_PASSWORD); + source.Reply(_("Syntax: \002SASET \037nickname\037 PASSWORD \037new-password\037\002\n" + " \n" + "Changes the password used to identify as the nick's owner.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SASET", NICK_SASET_SYNTAX); + SyntaxError(source, "SASET", LanguageString::NICK_SASET_SYNTAX); } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_SASET_PASSWORD); + source.Reply(_(" PASSWORD Set the nickname password")); } }; diff --git a/modules/core/ns_saset_noexpire.cpp b/modules/core/ns_saset_noexpire.cpp index 296195785..bc7103aae 100644 --- a/modules/core/ns_saset_noexpire.cpp +++ b/modules/core/ns_saset_noexpire.cpp @@ -31,12 +31,12 @@ class CommandNSSASetNoexpire : public Command if (param.equals_ci("ON")) { na->SetFlag(NS_NO_EXPIRE); - source.Reply(NICK_SASET_NOEXPIRE_ON, na->nick.c_str()); + source.Reply(_("Nick %s \002will not\002 expire."), na->nick.c_str()); } else if (param.equals_ci("OFF")) { na->UnsetFlag(NS_NO_EXPIRE); - source.Reply(NICK_SASET_NOEXPIRE_OFF, na->nick.c_str()); + source.Reply(_("Nick %s \002will\002 expire."), na->nick.c_str()); } else this->OnSyntaxError(source, "NOEXPIRE"); @@ -46,18 +46,21 @@ class CommandNSSASetNoexpire : public Command bool OnHelp(CommandSource &source, const Anope::string &) { - source.Reply(NICK_HELP_SASET_NOEXPIRE); + source.Reply(_("Syntax: \002SASET \037nickname\037 NOEXPIRE {ON | OFF}\002\n" + " \n" + "Sets whether the given nickname will expire. Setting this\n" + "to \002ON\002 prevents the nickname from expiring.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SASET NOEXPIRE", NICK_SASET_NOEXPIRE_SYNTAX); + SyntaxError(source, "SASET NOEXPIRE", _("SASET \037nickname\037 NOEXPIRE {ON | OFF}")); } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_SASET_NOEXPIRE); + source.Reply(_(" NOEXPIRE Prevent the nickname from expiring")); } }; diff --git a/modules/core/ns_sendpass.cpp b/modules/core/ns_sendpass.cpp index 09729f81c..d232f8f16 100644 --- a/modules/core/ns_sendpass.cpp +++ b/modules/core/ns_sendpass.cpp @@ -30,11 +30,11 @@ class CommandNSSendPass : public Command NickAlias *na; if (Config->RestrictMail && (!u->Account() || !u->Account()->HasCommand("nickserv/sendpass"))) - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); else if (!(na = findnick(nick))) - source.Reply(NICK_X_NOT_REGISTERED, nick.c_str()); + source.Reply(LanguageString::NICK_X_NOT_REGISTERED, nick.c_str()); else if (na->HasFlag(NS_FORBIDDEN)) - source.Reply(NICK_X_FORBIDDEN, na->nick.c_str()); + source.Reply(LanguageString::NICK_X_FORBIDDEN, na->nick.c_str()); else { Anope::string tmp_pass; @@ -43,11 +43,11 @@ class CommandNSSendPass : public Command if (SendPassMail(u, na, tmp_pass)) { Log(Config->RestrictMail ? LOG_ADMIN : LOG_COMMAND, u, this) << "for " << na->nick; - source.Reply(NICK_SENDPASS_OK, nick.c_str()); + source.Reply(_("Password of \002%s\002 has been sent."), nick.c_str()); } } else - source.Reply(NICK_SENDPASS_UNAVAILABLE); + source.Reply(_("SENDPASS command unavailable because encryption is in use.")); } return MOD_CONT; @@ -55,18 +55,24 @@ class CommandNSSendPass : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(NICK_HELP_SENDPASS); + source.Reply(_("Syntax: \002SENDPASS \037nickname\037\002\n" + " \n" + "Send the password of the given nickname to the e-mail address\n" + "set in the nickname record. This command is really useful\n" + "to deal with lost passwords.\n" + " \n" + "May be limited to \002IRC operators\002 on certain networks.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "SENDPASS", NICK_SENDPASS_SYNTAX); + SyntaxError(source, "SENDPASS", _("SENDPASS \037nickname\037")); } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_SENDPASS); + source.Reply(_(" SENDPASS Forgot your password? Try this")); } }; @@ -95,8 +101,16 @@ static bool SendPassMail(User *u, NickAlias *na, const Anope::string &pass) { char subject[BUFSIZE], message[BUFSIZE]; - snprintf(subject, sizeof(subject), GetString(na->nc, NICK_SENDPASS_SUBJECT).c_str(), na->nick.c_str()); - snprintf(message, sizeof(message), GetString(na->nc, NICK_SENDPASS).c_str(), na->nick.c_str(), pass.c_str(), Config->NetworkName.c_str()); + snprintf(subject, sizeof(subject), GetString(na->nc, "Nickname password (%s)").c_str(), na->nick.c_str()); + snprintf(message, sizeof(message), GetString(na->nc, + "Hi,\n" + " \n" + "You have requested to receive the password of nickname %s by e-mail.\n" + "The password is %s. For security purposes, you should change it as soon as you receive this mail.\n" + " \n" + "If you don't know why this mail was sent to you, please ignore it silently.\n" + " \n" + "%s administrators.").c_str(), na->nick.c_str(), pass.c_str(), Config->NetworkName.c_str()); return Mail(u, na->nc, NickServ, subject, message); } diff --git a/modules/core/ns_set.cpp b/modules/core/ns_set.cpp index 482f43d1e..703bec9df 100644 --- a/modules/core/ns_set.cpp +++ b/modules/core/ns_set.cpp @@ -34,13 +34,13 @@ class CommandNSSet : public Command if (readonly) { - source.Reply(NICK_SET_DISABLED); + source.Reply(LanguageString::NICK_SET_DISABLED); return MOD_CONT; } if (u->Account()->HasFlag(NI_SUSPENDED)) { - source.Reply(NICK_X_SUSPENDED, u->Account()->display.c_str()); + source.Reply(LanguageString::NICK_X_SUSPENDED, u->Account()->display.c_str()); return MOD_CONT; } @@ -59,7 +59,7 @@ class CommandNSSet : public Command mod_run_cmd(NickServ, u, c, params[0], cmdparams, false); } else - source.Reply(NICK_SET_UNKNOWN_OPTION, params[0].c_str()); + source.Reply(LanguageString::NICK_SET_UNKNOWN_OPTION, params[0].c_str()); return MOD_CONT; } @@ -68,10 +68,17 @@ class CommandNSSet : public Command { if (subcommand.empty()) { - source.Reply(NICK_HELP_SET_HEAD); + source.Reply(_("Syntax: \002SET \037option\037 \037parameters\037\002\n" + " \n" + "Sets various nickname options. \037option\037 can be one of:")); for (subcommand_map::iterator it = this->subcommands.begin(), it_end = this->subcommands.end(); it != it_end; ++it) it->second->OnServHelp(source); - source.Reply(NICK_HELP_SET_TAIL); + source.Reply(_("In order to use this command, you must first identify\n" + "with your password (\002%R%S HELP IDENTIFY\002 for more\n" + "information).\n" + " \n" + "Type \002%R%S HELP SET \037option\037\002 for more information\n" + "on a specific option.")); return true; } else @@ -87,12 +94,12 @@ class CommandNSSet : public Command void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "SET", NICK_SET_SYNTAX); + SyntaxError(source, "SET", LanguageString::NICK_SET_SYNTAX); } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_SET); + source.Reply(_(" SET Set options, including kill protection")); } bool AddSubcommand(Module *creator, Command *c) @@ -132,30 +139,33 @@ class CommandNSSetDisplay : public Command if (!na || na->nc != u->Account()) { - source.Reply(NICK_SASET_DISPLAY_INVALID, u->Account()->display.c_str()); + source.Reply(LanguageString::NICK_SASET_DISPLAY_INVALID, u->Account()->display.c_str()); return MOD_CONT; } change_core_display(u->Account(), params[1]); - source.Reply(NICK_SET_DISPLAY_CHANGED, u->Account()->display.c_str()); + source.Reply(LanguageString::NICK_SET_DISPLAY_CHANGED, u->Account()->display.c_str()); return MOD_CONT; } bool OnHelp(CommandSource &source, const Anope::string &) { - source.Reply(NICK_HELP_SET_DISPLAY); + source.Reply(_("Syntax: \002SET DISPLAY \037new-display\037\002\n" + " \n" + "Changes the display used to refer to your nickname group in \n" + "Services. The new display MUST be a nick of your group.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &) { // XXX - SyntaxError(source, "SET", NICK_SET_SYNTAX); + SyntaxError(source, "SET", LanguageString::NICK_SET_SYNTAX); } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_SET_DISPLAY); + source.Reply(_(" DISPLAY Set the display of your group in Services")); } }; @@ -175,46 +185,49 @@ class CommandNSSetPassword : public Command if (u->Account()->display.equals_ci(param) || (Config->StrictPasswords && len < 5)) { - source.Reply(MORE_OBSCURE_PASSWORD); + source.Reply(LanguageString::MORE_OBSCURE_PASSWORD); return MOD_CONT; } else if (len > Config->PassLen) { - source.Reply(PASSWORD_TOO_LONG); + source.Reply(LanguageString::PASSWORD_TOO_LONG); return MOD_CONT; } if (enc_encrypt(param, u->Account()->pass) < 0) { Log(NickServ) << "Failed to encrypt password for " << u->Account()->display << " (set)"; - source.Reply(NICK_SASET_PASSWORD_FAILED); + source.Reply(LanguageString::NICK_SASET_PASSWORD_FAILED); return MOD_CONT; } Anope::string tmp_pass; if (enc_decrypt(u->Account()->pass, tmp_pass) == 1) - source.Reply(NICK_SASET_PASSWORD_CHANGED_TO, u->Account()->display.c_str(), tmp_pass.c_str()); + source.Reply(LanguageString::NICK_SASET_PASSWORD_CHANGED_TO, u->Account()->display.c_str(), tmp_pass.c_str()); else - source.Reply(NICK_SASET_PASSWORD_CHANGED, u->Account()->display.c_str()); + source.Reply(LanguageString::NICK_SASET_PASSWORD_CHANGED, u->Account()->display.c_str()); return MOD_CONT; } bool OnHelp(CommandSource &source, const Anope::string &) { - source.Reply(NICK_HELP_SET_PASSWORD); + source.Reply(_("Syntax: \002SET PASSWORD \037new-password\037\002\n" + " \n" + "Changes the password used to identify you as the nick's\n" + "owner.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &) { // XXX - SyntaxError(source, "SET", NICK_SET_SYNTAX); + SyntaxError(source, "SET", LanguageString::NICK_SET_SYNTAX); } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_SET_PASSWORD); + source.Reply(_(" PASSWORD Set your nickname password")); } }; diff --git a/modules/core/ns_set_autoop.cpp b/modules/core/ns_set_autoop.cpp index 61ebb78a2..a7fc9f9fa 100644 --- a/modules/core/ns_set_autoop.cpp +++ b/modules/core/ns_set_autoop.cpp @@ -32,12 +32,12 @@ class CommandNSSetAutoOp : public Command if (param.equals_ci("ON")) { nc->SetFlag(NI_AUTOOP); - source.Reply(NICK_SASET_AUTOOP_ON, nc->display.c_str()); + source.Reply(_("Services will now autoop %s in channels."), nc->display.c_str()); } else if (param.equals_ci("OFF")) { nc->UnsetFlag(NI_AUTOOP); - source.Reply(NICK_SASET_AUTOOP_OFF, nc->display.c_str()); + source.Reply(_("Services will no longer autoop %s in channels."), nc->display.c_str()); } else this->OnSyntaxError(source, "AUTOOP"); @@ -47,18 +47,21 @@ class CommandNSSetAutoOp : public Command bool OnHelp(CommandSource &source, const Anope::string &) { - source.Reply(NICK_HELP_SET_AUTOOP); + source.Reply(_("Syntax: \002SET AUTOOP {ON | OFF}\002\n" + " \n" + "Sets whether you will be opped automatically. Set to ON to \n" + "allow ChanServ to op you automatically when entering channels.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SET AUTOOP", NICK_SET_AUTOOP_SYNTAX); + SyntaxError(source, "SET AUTOOP", _("SET AUTOOP {ON | OFF}")); } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_SET_AUTOOP); + source.Reply(_(" AUTOOP Should services op you automatically. ")); } }; @@ -71,18 +74,22 @@ class CommandNSSASetAutoOp : public CommandNSSetAutoOp bool OnHelp(CommandSource &source, const Anope::string &) { - source.Reply(NICK_HELP_SASET_AUTOOP); + source.Reply(_("Syntax: \002SASET \037nickname\037 AUTOOP {ON | OFF}\002\n" + " \n" + "Sets whether the given nickname will be opped automatically.\n" + "Set to \002ON\002 to allow ChanServ to op the given nickname \n" + "omatically when joining channels.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SET AUTOOP", NICK_SASET_AUTOOP_SYNTAX); + SyntaxError(source, "SET AUTOOP", _("SASET \037nickname\037 AUTOOP {ON | OFF}")); } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_SASET_AUTOOP); + source.Reply(_(" AUTOOP Turn autoop on or off")); } }; diff --git a/modules/core/ns_set_email.cpp b/modules/core/ns_set_email.cpp index 227941acd..41aa84e31 100644 --- a/modules/core/ns_set_email.cpp +++ b/modules/core/ns_set_email.cpp @@ -32,29 +32,29 @@ class CommandNSSetEmail : public Command if (param.empty() && Config->NSForceEmail) { - source.Reply(NICK_SET_EMAIL_UNSET_IMPOSSIBLE); + source.Reply(_("You cannot unset the e-mail on this network.")); return MOD_CONT; } else if (Config->NSSecureAdmins && u->Account() != nc && nc->IsServicesOper()) { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); return MOD_CONT; } else if (!param.empty() && !MailValidate(param)) { - source.Reply(MAIL_X_INVALID, param.c_str()); + source.Reply(LanguageString::MAIL_X_INVALID, param.c_str()); return MOD_CONT; } if (!param.empty()) { nc->email = param; - source.Reply(NICK_SASET_EMAIL_CHANGED, nc->display.c_str(), param.c_str()); + source.Reply(_("E-mail address for \002%s\002 changed to \002%s\002."), nc->display.c_str(), param.c_str()); } else { nc->email.clear(); - source.Reply(NICK_SASET_EMAIL_UNSET, nc->display.c_str()); + source.Reply(_("E-mail address for \002%s\002 unset."), nc->display.c_str()); } return MOD_CONT; @@ -62,13 +62,17 @@ class CommandNSSetEmail : public Command bool OnHelp(CommandSource &source, const Anope::string &) { - source.Reply(NICK_HELP_SET_EMAIL); + source.Reply(_("Syntax: \002SET EMAIL \037address\037\002\n" + " \n" + "Associates the given E-mail address with your nickname.\n" + "This address will be displayed whenever someone requests\n" + "information on the nickname with the \002INFO\002 command.")); return true; } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_SET_EMAIL); + source.Reply(_(" EMAIL Associate an E-mail address with your nickname")); } }; @@ -81,13 +85,15 @@ class CommandNSSASetEmail : public CommandNSSetEmail bool OnHelp(CommandSource &source, const Anope::string &) { - source.Reply(NICK_HELP_SASET_EMAIL); + source.Reply(_("Syntax: \002SASET \037nickname\037 EMAIL \037address\037\002\n" + " \n" + "Associates the given E-mail address with the nickname.")); return true; } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_SASET_EMAIL); + source.Reply(_(" EMAIL Associate an E-mail address with the nickname")); } }; diff --git a/modules/core/ns_set_greet.cpp b/modules/core/ns_set_greet.cpp index ab1733fa8..d0c0bdcd9 100644 --- a/modules/core/ns_set_greet.cpp +++ b/modules/core/ns_set_greet.cpp @@ -32,12 +32,12 @@ class CommandNSSetGreet : public Command if (!param.empty()) { nc->greet = param; - source.Reply(NICK_SASET_GREET_CHANGED, nc->display.c_str(), nc->greet.c_str()); + source.Reply(_("Greet message for \002%s\002 changed to \002%s\002."), nc->display.c_str(), nc->greet.c_str()); } else { nc->greet.clear(); - source.Reply(NICK_SASET_GREET_UNSET, nc->display.c_str()); + source.Reply(_("Greet message for \002%s\002 unset."), nc->display.c_str()); } return MOD_CONT; @@ -45,13 +45,18 @@ class CommandNSSetGreet : public Command bool OnHelp(CommandSource &source, const Anope::string &) { - source.Reply(NICK_HELP_SET_GREET); + source.Reply(_("Syntax: \002SET GREET \037message\037\002\n" + " \n" + "Makes the given message the greet of your nickname, that\n" + "will be displayed when joining a channel that has GREET\n" + "option enabled, provided that you have the necessary \n" + "access on it.")); return true; } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_SET_GREET); + source.Reply(_(" GREET Associate a greet message with your nickname")); } }; @@ -64,13 +69,18 @@ class CommandNSSASetGreet : public CommandNSSetGreet bool OnHelp(CommandSource &source, const Anope::string &) { - source.Reply(NICK_HELP_SASET_GREET); + source.Reply(_("Syntax: \002SASET \037nickname\037 GREET \037message\037\002\n" + " \n" + "Makes the given message the greet of the nickname, that\n" + "will be displayed when joining a channel that has GREET\n" + "option enabled, provided that the user has the necessary \n" + "access on it.")); return true; } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_SASET_GREET); + source.Reply(_(" GREET Associate a greet message with the nickname")); } }; diff --git a/modules/core/ns_set_hide.cpp b/modules/core/ns_set_hide.cpp index f7685cfc2..460dbebaa 100644 --- a/modules/core/ns_set_hide.cpp +++ b/modules/core/ns_set_hide.cpp @@ -27,7 +27,7 @@ class CommandNSSetHide : public Command throw CoreException("NULL na in CommandNSSetHide"); NickCore *nc = na->nc; - LanguageString onmsg, offmsg; + Anope::string onmsg, offmsg; NickCoreFlag flag; Anope::string param = params[1]; @@ -36,26 +36,26 @@ class CommandNSSetHide : public Command if (param.equals_ci("EMAIL")) { flag = NI_HIDE_EMAIL; - onmsg = NICK_SASET_HIDE_EMAIL_ON; - offmsg = NICK_SASET_HIDE_EMAIL_OFF; + onmsg = _("The E-mail address of \002%s\002 will now be hidden from %s INFO displays."); + offmsg = _("The E-mail address of \002%s\002 will now be shown in %s INFO displays."); } else if (param.equals_ci("USERMASK")) { flag = NI_HIDE_MASK; - onmsg = NICK_SASET_HIDE_MASK_ON; - offmsg = NICK_SASET_HIDE_MASK_OFF; + onmsg = _("The last seen user@host mask of \002%s\002 will now be hidden from %s INFO displays."); + offmsg = _("The last seen user@host mask of \002%s\002 will now be shown in %s INFO displays."); } else if (param.equals_ci("STATUS")) { flag = NI_HIDE_STATUS; - onmsg = NICK_SASET_HIDE_STATUS_ON; - offmsg = NICK_SASET_HIDE_STATUS_OFF; + onmsg = _("The services access status of \002%s\002 will now be hidden from %s INFO displays."); + offmsg = _("The services access status of \002%s\002 will now be shown in %s INFO displays."); } else if (param.equals_ci("QUIT")) { flag = NI_HIDE_QUIT; - onmsg = NICK_SASET_HIDE_QUIT_ON; - offmsg = NICK_SASET_HIDE_QUIT_OFF; + onmsg = _("The last quit message of \002%s\002 will now be hidden from %s INFO displays."); + offmsg = _("The last quit message of \002%s\002 will now be shown in %s INFO displays."); } else { @@ -66,12 +66,12 @@ class CommandNSSetHide : public Command if (arg.equals_ci("ON")) { nc->SetFlag(flag); - source.Reply(onmsg, nc->display.c_str(), Config->s_NickServ.c_str()); + source.Reply(onmsg.c_str(), nc->display.c_str(), Config->s_NickServ.c_str()); } else if (arg.equals_ci("OFF")) { nc->UnsetFlag(flag); - source.Reply(offmsg, nc->display.c_str(), Config->s_NickServ.c_str()); + source.Reply(offmsg.c_str(), nc->display.c_str(), Config->s_NickServ.c_str()); } else this->OnSyntaxError(source, "HIDE"); @@ -81,18 +81,26 @@ class CommandNSSetHide : public Command bool OnHelp(CommandSource &source, const Anope::string &) { - source.Reply(NICK_HELP_SET_HIDE); + source.Reply(_("Syntax: \002SET HIDE {EMAIL | STATUS | USERMASK | QUIT} {ON | OFF}\002\n" + " \n" + "Allows you to prevent certain pieces of information from\n" + "being displayed when someone does a %S \002INFO\002 on your\n" + "nick. You can hide your E-mail address (\002EMAIL\002), last seen\n" + "user@host mask (\002USERMASK\002), your services access status\n" + "(\002STATUS\002) and last quit message (\002QUIT\002).\n" + "The second parameter specifies whether the information should\n" + "be displayed (\002OFF\002) or hidden (\002ON\002).")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SET HIDE", NICK_SET_HIDE_SYNTAX); + SyntaxError(source, "SET HIDE", _("SET HIDE {EMAIL | STATUS | USERMASK | QUIT} {ON | OFF}")); } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_SET_HIDE); + source.Reply(_(" HIDE Hide certain pieces of nickname information")); } }; @@ -105,18 +113,26 @@ class CommandNSSASetHide : public CommandNSSetHide bool OnHelp(CommandSource &source, const Anope::string &) { - source.Reply(NICK_HELP_SASET_HIDE); + source.Reply(_("Syntax: \002SASET \037nickname\037 HIDE {EMAIL | STATUS | USERMASK | QUIT} {ON | OFF}\002\n" + " \n" + "Allows you to prevent certain pieces of information from\n" + "being displayed when someone does a %S \002INFO\002 on the\n" + "nick. You can hide the E-mail address (\002EMAIL\002), last seen\n" + "user@host mask (\002USERMASK\002), the services access status\n" + "(\002STATUS\002) and last quit message (\002QUIT\002).\n" + "The second parameter specifies whether the information should\n" + "be displayed (\002OFF\002) or hidden (\002ON\002).")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SASET HIDE", NICK_SASET_HIDE_SYNTAX); + SyntaxError(source, "SASET HIDE", _("SASET NICK_SASET_HIDE_SYNTAX37nicknameNICK_SASET_HIDE_SYNTAX37 HIDE {EMAIL | STATUS | USERMASK | QUIT} {ON | OFF}")); } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_SET_HIDE); + source.Reply(_(" HIDE Hide certain pieces of nickname information")); } }; diff --git a/modules/core/ns_set_kill.cpp b/modules/core/ns_set_kill.cpp index 2e8b86320..35cca658d 100644 --- a/modules/core/ns_set_kill.cpp +++ b/modules/core/ns_set_kill.cpp @@ -35,14 +35,14 @@ class CommandNSSetKill : public Command nc->SetFlag(NI_KILLPROTECT); nc->UnsetFlag(NI_KILL_QUICK); nc->UnsetFlag(NI_KILL_IMMED); - source.Reply(NICK_SASET_KILL_ON, nc->display.c_str()); + source.Reply(_("Protection is now \002\002 for \002%s\002."), nc->display.c_str()); } else if (param.equals_ci("QUICK")) { nc->SetFlag(NI_KILLPROTECT); nc->SetFlag(NI_KILL_QUICK); nc->UnsetFlag(NI_KILL_IMMED); - source.Reply(NICK_SASET_KILL_QUICK, nc->display.c_str()); + source.Reply(_("Protection is now \002\002 for \002%s\002, with a reduced delay."), nc->display.c_str()); } else if (param.equals_ci("IMMED")) { @@ -51,17 +51,17 @@ class CommandNSSetKill : public Command nc->SetFlag(NI_KILLPROTECT); nc->SetFlag(NI_KILL_IMMED); nc->UnsetFlag(NI_KILL_QUICK); - source.Reply(NICK_SASET_KILL_IMMED, nc->display.c_str()); + source.Reply(_("Protection is now \002\002 for \002%s\002, with no delay."), nc->display.c_str()); } else - source.Reply(NICK_SET_KILL_IMMED_DISABLED); + source.Reply(_("The \002IMMED\002 option is not available on this network.")); } else if (param.equals_ci("OFF")) { nc->UnsetFlag(NI_KILLPROTECT); nc->UnsetFlag(NI_KILL_QUICK); nc->UnsetFlag(NI_KILL_IMMED); - source.Reply(NICK_SASET_KILL_OFF, nc->display.c_str()); + source.Reply(_("Protection is now \002\002 for \002%s\002."), nc->display.c_str()); } else this->OnSyntaxError(source, "KILL"); @@ -71,18 +71,31 @@ class CommandNSSetKill : public Command bool OnHelp(CommandSource &source, const Anope::string &) { - source.Reply(NICK_HELP_SET_KILL); + source.Reply(_("Syntax: \002SET KILL {ON | QUICK | IMMED | OFF}\002\n" + " \n" + "Turns the automatic protection option for your nick\n" + "on or off. With protection on, if another user\n" + "tries to take your nick, they will be given one minute to\n" + "change to another nick, after which %S will forcibly change\n" + "their nick.\n" + " \n" + "If you select \002QUICK\002, the user will be given only 20 seconds\n" + "to change nicks instead of the usual 60. If you select\n" + "\002IMMED\002, user's nick will be changed immediately \037without\037 being\n" + "warned first or given a chance to change their nick; please\n" + "do not use this option unless necessary. Also, your\n" + "network's administrators may have disabled this option.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SET KILL", Config->NSAllowKillImmed ? NICK_SET_KILL_IMMED_SYNTAX : NICK_SET_KILL_SYNTAX); + SyntaxError(source, "SET KILL", Config->NSAllowKillImmed ? _("SET KILL {ON | QUICK | IMMED | OFF}") : _("SET KILL {ON | QUICK | OFF}")); } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_SET_KILL); + source.Reply(_(" KILL Turn protection on or off")); } }; @@ -95,18 +108,31 @@ class CommandNSSASetKill : public CommandNSSetKill bool OnHelp(CommandSource &source, const Anope::string &) { - source.Reply(NICK_HELP_SASET_KILL); + source.Reply(_("Syntax: \002SASET \037nickname\037 KILL {ON | QUICK | IMMED | OFF}\002\n" + " \n" + "Turns the automatic protection option for the nick\n" + "on or off. With protection on, if another user\n" + "tries to take the nick, they will be given one minute to\n" + "change to another nick, after which %S will forcibly change\n" + "their nick.\n" + " \n" + "If you select \002QUICK\002, the user will be given only 20 seconds\n" + "to change nicks instead of the usual 60. If you select\n" + "\002IMMED\002, the user's nick will be changed immediately \037without\037 being\n" + "warned first or given a chance to change their nick; please\n" + "do not use this option unless necessary. Also, your\n" + "network's administrators may have disabled this option.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SASET KILL", Config->NSAllowKillImmed ? NICK_SASET_KILL_IMMED_SYNTAX : NICK_SASET_KILL_SYNTAX); + SyntaxError(source, "SASET KILL", Config->NSAllowKillImmed ? _("SASET \037nickname\037 KILL {ON | QUICK | IMMED | OFF}") : _("SASET \037nickname\037 KILL {ON | QUICK | OFF}")); } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_SET_KILL); + source.Reply(_(" KILL Turn protection on or off")); } }; diff --git a/modules/core/ns_set_language.cpp b/modules/core/ns_set_language.cpp index 9f81a43f0..e942be388 100644 --- a/modules/core/ns_set_language.cpp +++ b/modules/core/ns_set_language.cpp @@ -41,18 +41,28 @@ class CommandNSSetLanguage : public Command } nc->language = param != "en" ? param : ""; - source.Reply(NICK_SET_LANGUAGE_CHANGED); + PopLanguage(); + PushLanguage("anope", nc->language); + source.Reply(_("Language changed to \002English\002.")); return MOD_CONT; } bool OnHelp(CommandSource &source, const Anope::string &) { - source.Reply(NICK_HELP_SET_LANGUAGE); + source.Reply(_("Syntax: \002SET LANGUAGE \037language\037\002\n" + " \n" + "Changes the language Services uses when sending messages to\n" + "you (for example, when responding to a command you send).\n" + "\037language\037 should be chosen from the following list of\n" + "supported languages:")); + source.Reply(" en (English)"); for (unsigned j = 0; j < languages.size(); ++j) { - const Anope::string &langname = GetString(languages[j], LANGUAGE_NAME); + PushLanguage("anope", languages[j]); + const Anope::string &langname = _("English"); + PopLanguage(); if (langname == "English") continue; source.Reply(" %s (%s)", languages[j].c_str(), langname.c_str()); @@ -63,12 +73,14 @@ class CommandNSSetLanguage : public Command void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SET LANGUAGE", NICK_SET_LANGUAGE_SYNTAX); + SyntaxError(source, "SET LANGUAGE", _("SET LANGUAGE \037language\037")); } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_SET_LANGUAGE); + source.Reply(_(" LANGUAGE Set the language Services will use when\n" + " sending messages to you")); + } }; @@ -81,18 +93,28 @@ class CommandNSSASetLanguage : public CommandNSSetLanguage bool OnHelp(CommandSource &source, const Anope::string &) { - source.Reply(NICK_HELP_SASET_LANGUAGE); + source.Reply(_("Syntax: \002SET LANGUAGE \037language\037\002\n" + " \n" + "Changes the language Services uses when sending messages to\n" + "you (for example, when responding to a command you send).\n" + "\037language\037 should be chosen from the following list of\n" + "supported languages:")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SASET LANGUAGE", NICK_SASET_LANGUAGE_SYNTAX); + SyntaxError(source, "SASET LANGUAGE", _("SASET \037nickname\037 LANGUAGE \037number\037")); } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_SASET_LANGUAGE); + source.Reply(_("Syntax: \002SASET \037nickname\037 LANGUAGE \037language\037\002\n" + " \n" + "Changes the language Services uses when sending messages to\n" + "\037nickname\037 (for example, when responding to a command he sends).\n" + "\037language\037 should be chosen from a list of supported languages\n" + "that you can get by typing \002%R%S HELP SET LANGUAGE\002.")); } }; diff --git a/modules/core/ns_set_message.cpp b/modules/core/ns_set_message.cpp index 948a12f52..fc14e067d 100644 --- a/modules/core/ns_set_message.cpp +++ b/modules/core/ns_set_message.cpp @@ -29,7 +29,7 @@ class CommandNSSetMessage : public Command if (!Config->UsePrivmsg) { - source.Reply(NICK_SET_OPTION_DISABLED, "MSG"); + source.Reply(_("Option \002%s\02 cannot be set on this network."), "MSG"); return MOD_CONT; } @@ -38,12 +38,12 @@ class CommandNSSetMessage : public Command if (param.equals_ci("ON")) { nc->SetFlag(NI_MSG); - source.Reply(NICK_SASET_MSG_ON, nc->display.c_str()); + source.Reply(_("Services will now reply to \002%s\002 with \002messages\002."), nc->display.c_str()); } else if (param.equals_ci("OFF")) { nc->UnsetFlag(NI_MSG); - source.Reply(NICK_SASET_MSG_OFF, nc->display.c_str()); + source.Reply(_("Services will now reply to \002%s\002 with \002notices\002."), nc->display.c_str()); } else this->OnSyntaxError(source, "MSG"); @@ -53,18 +53,22 @@ class CommandNSSetMessage : public Command bool OnHelp(CommandSource &source, const Anope::string &) { - source.Reply(NICK_HELP_SET_MSG); + source.Reply(_("Syntax: \002SET MSG {ON | OFF}\002\n" + " \n" + "Allows you to choose the way Services are communicating with \n" + "you. With \002MSG\002 set, Services will use messages, else they'll \n" + "use notices.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SET MSG", NICK_SET_MSG_SYNTAX); + SyntaxError(source, "SET MSG", _("SET MSG {ON | OFF}")); } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_SET_MSG); + source.Reply(_(" MSG Change the communication method of Services")); } }; @@ -77,18 +81,22 @@ class CommandNSSASetMessage : public CommandNSSetMessage bool OnHelp(CommandSource &source, const Anope::string &) { - source.Reply(NICK_HELP_SASET_MSG); + source.Reply(_("Syntax: \002SASET \037nickname\037 MSG {ON | OFF}\002\n" + " \n" + "Allows you to choose the way Services are communicating with \n" + "the given user. With \002MSG\002 set, Services will use messages,\n" + "else they'll use notices.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SASET MSG", NICK_SASET_MSG_SYNTAX); + SyntaxError(source, "SASET MSG", _("SASAET \037nickname\037 PRIVATE {ON | OFF}")); } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_SET_MSG); + source.Reply(_(" MSG Change the communication method of Services")); } }; diff --git a/modules/core/ns_set_private.cpp b/modules/core/ns_set_private.cpp index 61d6f5bd8..70e93e27e 100644 --- a/modules/core/ns_set_private.cpp +++ b/modules/core/ns_set_private.cpp @@ -32,12 +32,12 @@ class CommandNSSetPrivate : public Command if (param.equals_ci("ON")) { nc->SetFlag(NI_PRIVATE); - source.Reply(NICK_SASET_PRIVATE_ON, nc->display.c_str()); + source.Reply(_("Private option is now \002\002 for \002%s\002."), nc->display.c_str()); } else if (param.equals_ci("OFF")) { nc->UnsetFlag(NI_PRIVATE); - source.Reply(NICK_SASET_PRIVATE_OFF, nc->display.c_str()); + source.Reply(_("Private option is now \002\002 for \002%s\002."), nc->display.c_str()); } else this->OnSyntaxError(source, "PRIVATE"); @@ -47,18 +47,24 @@ class CommandNSSetPrivate : public Command bool OnHelp(CommandSource &source, const Anope::string &) { - source.Reply(NICK_HELP_SET_PRIVATE); + source.Reply(_("Syntax: \002SET PRIVATE {ON | OFF}\002\n" + " \n" + "Turns %S's privacy option on or off for your nick.\n" + "With \002PRIVATE\002 set, your nickname will not appear in\n" + "nickname lists generated with %S's \002LIST\002 command.\n" + "(However, anyone who knows your nickname can still get\n" + "information on it using the \002INFO\002 command.)")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SET PRIVATE", NICK_SET_PRIVATE_SYNTAX); + SyntaxError(source, "SET PRIVATE", _("SET PRIVATE {ON | OFF}")); } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_SET_PRIVATE); + source.Reply(_(" PRIVATE Prevent the nickname from appearing in a \002%R%S LIST\002")); } }; @@ -71,18 +77,23 @@ class CommandNSSASetPrivate : public CommandNSSetPrivate bool OnHelp(CommandSource &source, const Anope::string &) { - source.Reply(NICK_HELP_SASET_PRIVATE); + source.Reply(_("Syntax: \002SASET \037nickname\037 PRIVATE {ON | OFF}\002\n" + " \n" + "Turns %S's privacy option on or off for the nick.\n" + "With \002PRIVATE\002 set, the nickname will not appear in\n" + "nickname lists generated with %S's \002LIST\002 command.\n" + "(However, anyone who knows the nickname can still get\n" + "information on it using the \002INFO\002 command.)")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SASET PRIVATE", NICK_SASET_PRIVATE_SYNTAX); + SyntaxError(source, "SASET PRIVATE", _("SASET \037nickname\037 PRIVATE {ON | OFF}")); } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_SASET_PRIVATE); } }; diff --git a/modules/core/ns_set_secure.cpp b/modules/core/ns_set_secure.cpp index afcaf6db0..9c3ad7b60 100644 --- a/modules/core/ns_set_secure.cpp +++ b/modules/core/ns_set_secure.cpp @@ -32,12 +32,12 @@ class CommandNSSetSecure : public Command if (param.equals_ci("ON")) { nc->SetFlag(NI_SECURE); - source.Reply(NICK_SASET_SECURE_ON, nc->display.c_str()); + source.Reply(_("Secure option is now \002\002 for \002%s\002."), nc->display.c_str()); } else if (param.equals_ci("OFF")) { nc->UnsetFlag(NI_SECURE); - source.Reply(NICK_SASET_SECURE_OFF, nc->display.c_str()); + source.Reply(_("Secure option is now \002\002 for \002%s\002."), nc->display.c_str()); } else this->OnSyntaxError(source, "SECURE"); @@ -47,18 +47,26 @@ class CommandNSSetSecure : public Command bool OnHelp(CommandSource &source, const Anope::string &) { - source.Reply(NICK_HELP_SET_SECURE); + source.Reply(_("Syntax: \002SET SECURE {ON | OFF}\002\n" + " \n" + "Turns %S's security features on or off for your\n" + "nick. With \002SECURE\002 set, you must enter your password\n" + "before you will be recognized as the owner of the nick,\n" + "regardless of whether your address is on the access\n" + "list. However, if you are on the access list, %S\n" + "will not auto-kill you regardless of the setting of the\n" + "\002KILL\002 option.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SET SECURE", NICK_SET_SECURE_SYNTAX); + SyntaxError(source, "SET SECURE", _("SET SECURE {ON | OFF}")); } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_SET_SECURE); + source.Reply(_(" SECURE Turn nickname security on or off")); } }; @@ -71,18 +79,26 @@ class CommandNSSASetSecure : public CommandNSSetSecure bool OnHelp(CommandSource &source, const Anope::string &) { - source.Reply(NICK_HELP_SASET_SECURE); + source.Reply(_("Syntax: \002SASET \037nickname\037 SECURE {ON | OFF}\002\n" + " \n" + "Turns %S's security features on or off for your\n" + "nick. With \002SECURE\002 set, you must enter your password\n" + "before you will be recognized as the owner of the nick,\n" + "regardless of whether your address is on the access\n" + "list. However, if you are on the access list, %S\n" + "will not auto-kill you regardless of the setting of the\n" + "\002KILL\002 option.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SASET SECURE", NICK_SASET_SECURE_SYNTAX); + SyntaxError(source, "SASET SECURE", _("SASET \037nickname\037 SECURE {ON | OFF}")); } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_SET_SECURE); + source.Reply(_(" SECURE Turn nickname security on or off")); } }; diff --git a/modules/core/ns_status.cpp b/modules/core/ns_status.cpp index 824b9a7d4..5584d957d 100644 --- a/modules/core/ns_status.cpp +++ b/modules/core/ns_status.cpp @@ -33,31 +33,50 @@ class CommandNSStatus : public Command { User *u2 = finduser(nickbuf); if (!u2) /* Nick is not online */ - source.Reply(NICK_STATUS_REPLY, nickbuf.c_str(), 0, ""); + source.Reply(_("STATUS %s %d %s"), nickbuf.c_str(), 0, ""); else if (u2->IsIdentified() && na && na->nc == u2->Account()) /* Nick is identified */ - source.Reply(NICK_STATUS_REPLY, nickbuf.c_str(), 3, u2->Account()->display.c_str()); + source.Reply(_("STATUS %s %d %s"), nickbuf.c_str(), 3, u2->Account()->display.c_str()); else if (u2->IsRecognized()) /* Nick is recognised, but NOT identified */ - source.Reply(NICK_STATUS_REPLY, nickbuf.c_str(), 2, u2->Account() ? u2->Account()->display.c_str() : ""); + source.Reply(_("STATUS %s %d %s"), nickbuf.c_str(), 2, u2->Account() ? u2->Account()->display.c_str() : ""); else if (!na) /* Nick is online, but NOT a registered */ - source.Reply(NICK_STATUS_REPLY, nickbuf.c_str(), 0, ""); + source.Reply(_("STATUS %s %d %s"), nickbuf.c_str(), 0, ""); else /* Nick is not identified for the nick, but they could be logged into an account, * so we tell the user about it */ - source.Reply(NICK_STATUS_REPLY, nickbuf.c_str(), 1, u2->Account() ? u2->Account()->display.c_str() : ""); + source.Reply(_("STATUS %s %d %s"), nickbuf.c_str(), 1, u2->Account() ? u2->Account()->display.c_str() : ""); } return MOD_CONT; } bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(NICK_HELP_STATUS); + source.Reply(_("Syntax: \002STATUS \037nickname\037...\002\n" + " \n" + "Returns whether the user using the given nickname is\n" + "recognized as the owner of the nickname. The response has\n" + "this format:\n" + " \n" + " \037nickname\037 \037status-code\037 \037account\037\n" + " \n" + "where \037nickname\037 is the nickname sent with the command,\n" + "\037status-code\037 is one of the following, and \037account\037\n" + "is the account they are logged in as.\n" + " \n" + " 0 - no such user online \002or\002 nickname not registered\n" + " 1 - user not recognized as nickname's owner\n" + " 2 - user recognized as owner via access list only\n" + " 3 - user recognized as owner via password identification\n" + " \n" + "Up to sixteen nicknames may be sent with each command; the\n" + "rest will be ignored. If no nickname is given, your status\n" + "will be returned.")); return true; } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_STATUS); + source.Reply(_(" STATUS Returns the owner status of the given nickname")); } }; diff --git a/modules/core/ns_suspend.cpp b/modules/core/ns_suspend.cpp index c07999762..70a8ea122 100644 --- a/modules/core/ns_suspend.cpp +++ b/modules/core/ns_suspend.cpp @@ -29,26 +29,26 @@ class CommandNSSuspend : public Command if (readonly) { - source.Reply(READ_ONLY_MODE); + source.Reply(LanguageString::READ_ONLY_MODE); return MOD_CONT; } NickAlias *na = findnick(nick); if (!na) { - source.Reply(NICK_X_NOT_REGISTERED, nick.c_str()); + source.Reply(LanguageString::NICK_X_NOT_REGISTERED, nick.c_str()); return MOD_CONT; } if (na->HasFlag(NS_FORBIDDEN)) { - source.Reply(NICK_X_FORBIDDEN, na->nick.c_str()); + source.Reply(LanguageString::NICK_X_FORBIDDEN, na->nick.c_str()); return MOD_CONT; } if (Config->NSSecureAdmins && na->nc->IsServicesOper()) { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); return MOD_CONT; } @@ -79,7 +79,7 @@ class CommandNSSuspend : public Command ircdproto->SendGlobops(NickServ, "\2%s\2 used SUSPEND on \2%s\2", u->nick.c_str(), nick.c_str()); Log(LOG_ADMIN, u, this) << "for " << nick << " (" << (!reason.empty() ? reason : "No reason") << ")"; - source.Reply(NICK_SUSPEND_SUCCEEDED, nick.c_str()); + source.Reply(_("Nick %s is now suspended."), nick.c_str()); FOREACH_MOD(I_OnNickSuspended, OnNickSuspend(na)); @@ -88,18 +88,19 @@ class CommandNSSuspend : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(NICK_SERVADMIN_HELP_SUSPEND); + source.Reply(_("Syntax: SUSPEND nickname reason\n" + "SUSPENDs a nickname from being used.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "SUSPEND", NICK_SUSPEND_SYNTAX); + SyntaxError(source, "SUSPEND", _("SUSPEND nickname reason")); } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_SUSPEND); + source.Reply(_(" SUSPEND Suspend a given nick")); } }; @@ -117,26 +118,26 @@ class CommandNSUnSuspend : public Command if (readonly) { - source.Reply(READ_ONLY_MODE); + source.Reply(LanguageString::READ_ONLY_MODE); return MOD_CONT; } NickAlias *na = findnick(nick); if (!na) { - source.Reply(NICK_X_NOT_REGISTERED, nick.c_str()); + source.Reply(LanguageString::NICK_X_NOT_REGISTERED, nick.c_str()); return MOD_CONT; } if (na->HasFlag(NS_FORBIDDEN)) { - source.Reply(NICK_X_FORBIDDEN, na->nick.c_str()); + source.Reply(LanguageString::NICK_X_FORBIDDEN, na->nick.c_str()); return MOD_CONT; } if (Config->NSSecureAdmins && na->nc->IsServicesOper()) { - source.Reply(ACCESS_DENIED); + source.Reply(LanguageString::ACCESS_DENIED); return MOD_CONT; } @@ -146,7 +147,7 @@ class CommandNSUnSuspend : public Command ircdproto->SendGlobops(NickServ, "\2%s\2 used UNSUSPEND on \2%s\2", u->nick.c_str(), nick.c_str()); Log(LOG_ADMIN, u, this) << "for " << na->nick; - source.Reply(NICK_UNSUSPEND_SUCCEEDED, nick.c_str()); + source.Reply(_("Nick %s is now released."), nick.c_str()); FOREACH_MOD(I_OnNickUnsuspended, OnNickUnsuspended(na)); @@ -155,18 +156,19 @@ class CommandNSUnSuspend : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(NICK_SERVADMIN_HELP_UNSUSPEND); + source.Reply(_("Syntax: UNSUSPEND nickname\n" + "UNSUSPENDS a nickname from being used.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "UNSUSPEND", NICK_UNSUSPEND_SYNTAX); + SyntaxError(source, "UNSUSPEND", _("UNSUSPEND nickname")); } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_UNSUSPEND); + source.Reply(_(" UNSUSPEND Unsuspend a given nick")); } }; diff --git a/modules/core/ns_update.cpp b/modules/core/ns_update.cpp index 2d5bd6391..6ddf7cdb5 100644 --- a/modules/core/ns_update.cpp +++ b/modules/core/ns_update.cpp @@ -35,19 +35,22 @@ class CommandNSUpdate : public Command na->last_seen = Anope::CurTime; if (ircd->vhost) do_on_id(u); - source.Reply(NICK_UPDATE_SUCCESS, Config->s_NickServ.c_str()); + source.Reply(_("Status updated (memos, vhost, chmodes, flags)."), Config->s_NickServ.c_str()); return MOD_CONT; } bool OnHelp(CommandSource &source, const Anope::string &) { - source.Reply(NICK_HELP_UPDATE); + source.Reply(_("Syntax: UPDATE\n" + "Updates your current status, i.e. it checks for new memos,\n" + "sets needed chanmodes (ModeonID) and updates your vhost and\n" + "your userflags (lastseentime, etc).")); return true; } void OnServHelp(CommandSource &source) { - source.Reply(NICK_HELP_CMD_UPDATE); + source.Reply(_(" UPDATE Updates your current status, i.e. it checks for new memos")); } }; diff --git a/modules/core/os_akill.cpp b/modules/core/os_akill.cpp index f5212cb2b..499fd380d 100644 --- a/modules/core/os_akill.cpp +++ b/modules/core/os_akill.cpp @@ -25,11 +25,11 @@ class AkillDelCallback : public NumberList ~AkillDelCallback() { if (!Deleted) - source.Reply(OPER_AKILL_NO_MATCH); + source.Reply(_("No matching entries on the AKILL list.")); else if (Deleted == 1) - source.Reply(OPER_AKILL_DELETED_ONE); + source.Reply(_("Deleted 1 entry from the AKILL list.")); else - source.Reply(OPER_AKILL_DELETED_SEVERAL, Deleted); + source.Reply(_("Deleted %d entries from the AKILL list."), Deleted); } void HandleNumber(unsigned Number) @@ -65,9 +65,9 @@ class AkillListCallback : public NumberList ~AkillListCallback() { if (!SentHeader) - source.Reply(OPER_AKILL_NO_MATCH); + source.Reply(_("No matching entries on the AKILL list.")); else - source.Reply(END_OF_ANY_LIST, "Akill"); + source.Reply(LanguageString::END_OF_ANY_LIST, "Akill"); } void HandleNumber(unsigned Number) @@ -83,7 +83,8 @@ class AkillListCallback : public NumberList if (!SentHeader) { SentHeader = true; - source.Reply(OPER_AKILL_LIST_HEADER); + source.Reply(_("Current AKILL list:\n" + " Num Mask Reason")); } DoList(source, x, Number); @@ -91,7 +92,7 @@ class AkillListCallback : public NumberList static void DoList(CommandSource &source, XLine *x, unsigned Number) { - source.Reply(OPER_LIST_FORMAT, Number + 1, x->Mask.c_str(), x->Reason.c_str()); + source.Reply(LanguageString::OPER_LIST_FORMAT, Number + 1, x->Mask.c_str(), x->Reason.c_str()); } }; @@ -115,7 +116,7 @@ class AkillViewCallback : public AkillListCallback if (!SentHeader) { SentHeader = true; - source.Reply(OPER_AKILL_VIEW_HEADER); + source.Reply(_("Current AKILL list:")); } DoList(source, x, Number); @@ -123,7 +124,7 @@ class AkillViewCallback : public AkillListCallback static void DoList(CommandSource &source, XLine *x, unsigned Number) { - source.Reply(OPER_VIEW_FORMAT, Number + 1, x->Mask.c_str(), x->By.c_str(), do_strftime(x->Created).c_str(), expire_left(source.u->Account(), x->Expires).c_str(), x->Reason.c_str()); + source.Reply(LanguageString::OPER_VIEW_FORMAT, Number + 1, x->Mask.c_str(), x->By.c_str(), do_strftime(x->Created).c_str(), expire_left(source.u->Account(), x->Expires).c_str(), x->Reason.c_str()); } }; @@ -154,7 +155,7 @@ class CommandOSAKill : public Command /* Do not allow less than a minute expiry time */ if (expires && expires < 60) { - source.Reply(BAD_EXPIRY_TIME); + source.Reply(LanguageString::BAD_EXPIRY_TIME); return MOD_CONT; } else if (expires > 0) @@ -182,7 +183,7 @@ class CommandOSAKill : public Command if (percent > 95) { - source.Reply(USERHOST_MASK_TOO_WIDE, mask.c_str()); + source.Reply(LanguageString::USERHOST_MASK_TOO_WIDE, mask.c_str()); Log(LOG_ADMIN, u, this) << "tried to akill " << percent << "% of the network (" << affected << " users)"; return MOD_CONT; } @@ -192,7 +193,7 @@ class CommandOSAKill : public Command if (!x) return MOD_CONT; - source.Reply(OPER_AKILL_ADDED, mask.c_str()); + source.Reply(_("\002%s\002 added to the AKILL list."), mask.c_str()); if (Config->WallOSAkill) { @@ -228,7 +229,7 @@ class CommandOSAKill : public Command } if (readonly) - source.Reply(READ_ONLY_MODE); + source.Reply(LanguageString::READ_ONLY_MODE); } else this->OnSyntaxError(source, "ADD"); @@ -249,7 +250,7 @@ class CommandOSAKill : public Command if (SGLine->GetList().empty()) { - source.Reply(OPER_LIST_EMPTY); + source.Reply(_("AKILL list is empty.")); return MOD_CONT; } @@ -264,18 +265,18 @@ class CommandOSAKill : public Command if (!x) { - source.Reply(OPER_AKILL_NOT_FOUND, mask.c_str()); + source.Reply(_("\002%s\002 not found on the AKILL list."), mask.c_str()); return MOD_CONT; } FOREACH_MOD(I_OnDelAkill, OnDelAkill(u, x)); AkillDelCallback::DoDel(source, x); - source.Reply(OPER_AKILL_DELETED, mask.c_str()); + source.Reply(_("\002%s\002 deleted from the AKILL list."), mask.c_str()); } if (readonly) - source.Reply(READ_ONLY_MODE); + source.Reply(LanguageString::READ_ONLY_MODE); return MOD_CONT; } @@ -284,7 +285,7 @@ class CommandOSAKill : public Command { if (SGLine->GetList().empty()) { - source.Reply(OPER_LIST_EMPTY); + source.Reply(_("AKILL list is empty.")); return MOD_CONT; } @@ -308,7 +309,8 @@ class CommandOSAKill : public Command if (!SentHeader) { SentHeader = true; - source.Reply(OPER_AKILL_LIST_HEADER); + source.Reply(_("Current AKILL list:\n" + " Num Mask Reason")); } AkillListCallback::DoList(source, x, i); @@ -316,9 +318,9 @@ class CommandOSAKill : public Command } if (!SentHeader) - source.Reply(OPER_AKILL_NO_MATCH); + source.Reply(_("No matching entries on the AKILL list.")); else - source.Reply(END_OF_ANY_LIST, "Akill"); + source.Reply(LanguageString::END_OF_ANY_LIST, "Akill"); } return MOD_CONT; @@ -328,7 +330,7 @@ class CommandOSAKill : public Command { if (SGLine->GetList().empty()) { - source.Reply(OPER_LIST_EMPTY); + source.Reply(_("AKILL list is empty.")); return MOD_CONT; } @@ -352,7 +354,7 @@ class CommandOSAKill : public Command if (!SentHeader) { SentHeader = true; - source.Reply(OPER_AKILL_VIEW_HEADER); + source.Reply(_("Current AKILL list:")); } AkillViewCallback::DoList(source, x, i); @@ -360,7 +362,7 @@ class CommandOSAKill : public Command } if (!SentHeader) - source.Reply(OPER_AKILL_NO_MATCH); + source.Reply(_("No matching entries on the AKILL list.")); } return MOD_CONT; @@ -371,7 +373,7 @@ class CommandOSAKill : public Command User *u = source.u; FOREACH_MOD(I_OnDelAkill, OnDelAkill(u, NULL)); SGLine->Clear(); - source.Reply(OPER_AKILL_CLEAR); + source.Reply(_("The AKILL list has been cleared.")); return MOD_CONT; } @@ -402,18 +404,59 @@ class CommandOSAKill : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(OPER_HELP_AKILL); + source.Reply(_("Syntax: \002AKILL ADD [+\037expiry\037] \037mask\037 \037reason\037\002\n" + " \002AKILL DEL {\037mask\037 | \037entry-num\037 | \037list\037}\002\n" + " \002AKILL LIST [\037mask\037 | \037list\037]\002\n" + " \002AKILL VIEW [\037mask\037 | \037list\037]\002\n" + " \002AKILL CLEAR\002\n" + " \n" + "Allows Services operators to manipulate the AKILL list. If\n" + "a user matching an AKILL mask attempts to connect, Services\n" + "will issue a KILL for that user and, on supported server\n" + "types, will instruct all servers to add a ban (K-line) for\n" + "the mask which the user matched.\n" + " \n" + "\002AKILL ADD\002 adds the given nick or user@host/ip mask to the AKILL\n" + "list for the given reason (which \002must\002 be given).\n" + "\037expiry\037 is specified as an integer followed by one of \037d\037 \n" + "(days), \037h\037 (hours), or \037m\037 (minutes). Combinations (such as \n" + "\0371h30m\037) are not permitted. If a unit specifier is not \n" + "included, the default is days (so \037+30\037 by itself means 30 \n" + "days). To add an AKILL which does not expire, use \037+0\037. If the\n" + "usermask to be added starts with a \037+\037, an expiry time must\n" + "be given, even if it is the same as the default. The\n" + "current AKILL default expiry time can be found with the\n" + "\002STATS AKILL\002 command.\n" + " \n" + "The \002AKILL DEL\002 command removes the given mask from the\n" + "AKILL list if it is present. If a list of entry numbers is \n" + "given, those entries are deleted. (See the example for LIST \n" + "below.)\n" + " \n" + "The \002AKILL LIST\002 command displays the AKILL list. \n" + "If a wildcard mask is given, only those entries matching the\n" + "mask are displayed. If a list of entry numbers is given,\n" + "only those entries are shown; for example:\n" + " \002AKILL LIST 2-5,7-9\002\n" + " Lists AKILL entries numbered 2 through 5 and 7 \n" + " through 9.\n" + " \n" + "\002AKILL VIEW\002 is a more verbose version of \002AKILL LIST\002, and \n" + "will show who added an AKILL, the date it was added, and when \n" + "it expires, as well as the user@host/ip mask and reason.\n" + " \n" + "\002AKILL CLEAR\002 clears all entries of the AKILL list.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "AKILL", OPER_AKILL_SYNTAX); + SyntaxError(source, "AKILL", _("AKILL {ADD | DEL | LIST | VIEW | CLEAR} [[+\037expiry\037] {\037nick\037 | \037mask\037 | \037entry-list\037} [\037reason\037]]")); } void OnServHelp(CommandSource &source) { - source.Reply(OPER_HELP_CMD_AKILL); + source.Reply(_(" AKILL Manipulate the AKILL list")); } }; diff --git a/modules/core/os_chankill.cpp b/modules/core/os_chankill.cpp index a61c799fe..6fffd8827 100644 --- a/modules/core/os_chankill.cpp +++ b/modules/core/os_chankill.cpp @@ -41,7 +41,7 @@ class CommandOSChanKill : public Command expires *= 86400; if (expires && expires < 60) { - source.Reply(BAD_EXPIRY_TIME); + source.Reply(LanguageString::BAD_EXPIRY_TIME); return MOD_CONT; } else if (expires > 0) @@ -80,25 +80,28 @@ class CommandOSChanKill : public Command ircdproto->SendGlobops(OperServ, "%s used CHANKILL on %s (%s)", u->nick.c_str(), channel.c_str(), realreason.c_str()); } else - source.Reply(CHAN_X_NOT_IN_USE, channel.c_str()); + source.Reply(LanguageString::CHAN_X_NOT_IN_USE, channel.c_str()); } return MOD_CONT; } bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(OPER_HELP_CHANKILL); + source.Reply(_("Syntax: \002CHANKILL [+\037expiry\037] \037channel\037 \037reason\037\002\n" + "Puts an AKILL for every nick on the specified channel. It\n" + "uses the entire and complete real ident@host for every nick,\n" + "then enforces the AKILL.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "CHANKILL", OPER_CHANKILL_SYNTAX); + SyntaxError(source, "CHANKILL", _("CHANKILL [+\037expiry\037] {\037#channel\037} [\037reason\037]")); } void OnServHelp(CommandSource &source) { - source.Reply(OPER_HELP_CMD_CHANKILL); + source.Reply(_(" CHANKILL AKILL all users on a specific channel")); } }; diff --git a/modules/core/os_chanlist.cpp b/modules/core/os_chanlist.cpp index 4c2ade3f1..dbf36e44c 100644 --- a/modules/core/os_chanlist.cpp +++ b/modules/core/os_chanlist.cpp @@ -35,7 +35,8 @@ class CommandOSChanList : public Command if (!pattern.empty() && (u2 = finduser(pattern))) { - source.Reply(OPER_CHANLIST_HEADER_USER, u2->nick.c_str()); + source.Reply(_("\002%s\002 channel list:\n" + "Name Users Modes Topic"), u2->nick.c_str()); for (UChannelList::iterator uit = u2->chans.begin(), uit_end = u2->chans.end(); uit != uit_end; ++uit) { @@ -46,12 +47,13 @@ class CommandOSChanList : public Command if (!cc->chan->HasMode(*it)) continue; - source.Reply(OPER_CHANLIST_RECORD, cc->chan->name.c_str(), cc->chan->users.size(), cc->chan->GetModes(true, true).c_str(), !cc->chan->topic.empty() ? cc->chan->topic.c_str() : ""); + source.Reply(_("%-20s %4d +%-6s %s"), cc->chan->name.c_str(), cc->chan->users.size(), cc->chan->GetModes(true, true).c_str(), !cc->chan->topic.empty() ? cc->chan->topic.c_str() : ""); } } else { - source.Reply(OPER_CHANLIST_HEADER); + source.Reply(_("Channel list:\n" + "Name Users Modes Topic")); for (channel_map::const_iterator cit = ChannelList.begin(), cit_end = ChannelList.end(); cit != cit_end; ++cit) { @@ -64,23 +66,30 @@ class CommandOSChanList : public Command if (!c->HasMode(*it)) continue; - source.Reply(OPER_CHANLIST_RECORD, c->name.c_str(), c->users.size(), c->GetModes(true, true).c_str(), !c->topic.empty() ? c->topic.c_str() : ""); + source.Reply(_("%-20s %4d +%-6s %s"), c->name.c_str(), c->users.size(), c->GetModes(true, true).c_str(), !c->topic.empty() ? c->topic.c_str() : ""); } } - source.Reply(OPER_CHANLIST_END); + source.Reply(_("End of channel list.")); return MOD_CONT; } bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(OPER_HELP_CHANLIST); + source.Reply(_("Syntax: \002CHANLIST [{\037pattern\037 | \037nick\037} [\037SECRET\037]]\002\n" + " \n" + "Lists all channels currently in use on the IRC network, whether they\n" + "are registered or not.\n" + "If \002pattern\002 is given, lists only channels that match it. If a nickname\n" + "is given, lists only the channels the user using it is on. If SECRET is\n" + "specified, lists only channels matching \002pattern\002 that have the +s or\n" + "+p mode.")); return true; } void OnServHelp(CommandSource &source) { - source.Reply(OPER_HELP_CMD_CHANLIST); + source.Reply(_(" CHANLIST Lists all channel records")); } }; diff --git a/modules/core/os_defcon.cpp b/modules/core/os_defcon.cpp index 69eeabe51..209fa4231 100644 --- a/modules/core/os_defcon.cpp +++ b/modules/core/os_defcon.cpp @@ -33,14 +33,14 @@ class DefConTimeout : public Timer Config->DefConLevel = level; FOREACH_MOD(I_OnDefconLevel, OnDefconLevel(level)); Log(OperServ, "operserv/defcon") << "Defcon level timeout, returning to level " << level; - ircdproto->SendGlobops(OperServ, GetString(OPER_DEFCON_WALL).c_str(), Config->s_OperServ.c_str(), level); + ircdproto->SendGlobops(OperServ, GetString(NULL, _("\002%s\002 Changed the DEFCON level to \002%d\002")).c_str(), Config->s_OperServ.c_str(), level); if (Config->GlobalOnDefcon) { if (!Config->DefConOffMessage.empty()) oper_global("", "%s", Config->DefConOffMessage.c_str()); else - oper_global("", GetString(DEFCON_GLOBAL).c_str(), Config->DefConLevel); + oper_global("", GetString(NULL, _("The Defcon Level is now at Level: \002%d\002")).c_str(), Config->DefConLevel); if (Config->GlobalOnDefconMore && Config->DefConOffMessage.empty()) oper_global("", "%s", Config->DefconMessage.c_str()); @@ -67,7 +67,7 @@ class CommandOSDefcon : public Command if (lvl.empty()) { - source.Reply(OPER_DEFCON_CHANGED, Config->DefConLevel); + source.Reply(_("Services are now at DEFCON \002%d\002"), Config->DefConLevel); defcon_sendlvls(source); return MOD_CONT; } @@ -90,10 +90,10 @@ class CommandOSDefcon : public Command if (Config->DefConTimeOut) timeout = new DefConTimeout(5); - source.Reply(OPER_DEFCON_CHANGED, Config->DefConLevel); + source.Reply(_("Services are now at DEFCON \002%d\002"), Config->DefConLevel); defcon_sendlvls(source); Log(LOG_ADMIN, u, this) << "to change defcon level to " << newLevel; - ircdproto->SendGlobops(OperServ, GetString(OPER_DEFCON_WALL).c_str(), u->nick.c_str(), newLevel); + ircdproto->SendGlobops(OperServ, GetString(NULL, _("\002%s\002 Changed the DEFCON level to \002%d\002")).c_str(), u->nick.c_str(), newLevel); /* Global notice the user what is happening. Also any Message that the Admin would like to add. Set in config file. */ if (Config->GlobalOnDefcon) @@ -101,7 +101,7 @@ class CommandOSDefcon : public Command if (Config->DefConLevel == 5 && !Config->DefConOffMessage.empty()) oper_global("", "%s", Config->DefConOffMessage.c_str()); else - oper_global("", GetString(DEFCON_GLOBAL).c_str(), Config->DefConLevel); + oper_global("", GetString(NULL, _("The Defcon Level is now at Level: \002%d\002")).c_str(), Config->DefConLevel); } if (Config->GlobalOnDefconMore) { @@ -115,18 +115,21 @@ class CommandOSDefcon : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(OPER_HELP_DEFCON); + source.Reply(_("Syntax: \002DEFCON\002 [\0021\002|\0022\002|\0023\002|\0024\002|\0025\002]\n" + "The defcon system can be used to implement a pre-defined\n" + "set of restrictions to services useful during an attempted\n" + "attack on the network.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "DEFCON", OPER_DEFCON_SYNTAX); + SyntaxError(source, "DEFCON", _("DEFCON [\0021\002|\0022\002|\0023\002|\0024\002|\0025\002]")); } void OnServHelp(CommandSource &source) { - source.Reply(OPER_HELP_CMD_DEFCON); + source.Reply(_(" DEFCON Manipulate the DefCon system")); } }; @@ -211,7 +214,7 @@ class OSDefcon : public Module if (!u->HasMode(UMODE_OPER) && (CheckDefCon(DEFCON_OPER_ONLY) || CheckDefCon(DEFCON_SILENT_OPER_ONLY))) { if (!CheckDefCon(DEFCON_SILENT_OPER_ONLY)) - u->SendMessage(bi, OPER_DEFCON_DENIED); + u->SendMessage(bi, _("Services are in Defcon mode, Please try again later.")); return EVENT_STOP; } @@ -228,7 +231,7 @@ class OSDefcon : public Module { if (CheckDefCon(DEFCON_NO_NEW_NICKS)) { - source.Reply(OPER_DEFCON_DENIED); + source.Reply(_("Services are in Defcon mode, Please try again later.")); return EVENT_STOP; } } @@ -239,7 +242,7 @@ class OSDefcon : public Module { if (!params.empty() && params[0].equals_ci("MLOCK") && CheckDefCon(DEFCON_NO_MLOCK_CHANGE)) { - source.Reply(OPER_DEFCON_DENIED); + source.Reply(_("Services are in Defcon mode, Please try again later.")); return EVENT_STOP; } } @@ -247,7 +250,7 @@ class OSDefcon : public Module { if (CheckDefCon(DEFCON_NO_NEW_CHANNELS)) { - source.Reply(OPER_DEFCON_DENIED); + source.Reply(_("Services are in Defcon mode, Please try again later.")); return EVENT_STOP; } } @@ -258,7 +261,7 @@ class OSDefcon : public Module { if (CheckDefCon(DEFCON_NO_NEW_MEMOS)) { - source.Reply(OPER_DEFCON_DENIED); + source.Reply(_("Services are in Defcon mode, Please try again later.")); return EVENT_STOP; } } @@ -319,25 +322,25 @@ class OSDefcon : public Module void defcon_sendlvls(CommandSource &source) { if (CheckDefCon(DEFCON_NO_NEW_CHANNELS)) - source.Reply(OPER_HELP_DEFCON_NO_NEW_CHANNELS); + source.Reply(_("* No new channel registrations")); if (CheckDefCon(DEFCON_NO_NEW_NICKS)) - source.Reply(OPER_HELP_DEFCON_NO_NEW_NICKS); + source.Reply(_("* No new nick registrations")); if (CheckDefCon(DEFCON_NO_MLOCK_CHANGE)) - source.Reply(OPER_HELP_DEFCON_NO_MLOCK_CHANGE); + source.Reply(_("* No MLOCK changes")); if (CheckDefCon(DEFCON_FORCE_CHAN_MODES) && !Config->DefConChanModes.empty()) - source.Reply(OPER_HELP_DEFCON_FORCE_CHAN_MODES, Config->DefConChanModes.c_str()); + source.Reply(_("* Force Chan Modes (%s) to be set on all channels"), Config->DefConChanModes.c_str()); if (CheckDefCon(DEFCON_REDUCE_SESSION)) - source.Reply(OPER_HELP_DEFCON_REDUCE_SESSION, Config->DefConSessionLimit); + source.Reply(_("* Use the reduced session limit of %d"), Config->DefConSessionLimit); if (CheckDefCon(DEFCON_NO_NEW_CLIENTS)) - source.Reply(OPER_HELP_DEFCON_NO_NEW_CLIENTS); + source.Reply(_("* Kill any NEW clients connecting")); if (CheckDefCon(DEFCON_OPER_ONLY)) - source.Reply(OPER_HELP_DEFCON_OPER_ONLY); + source.Reply(_("* Ignore any non-opers with message")); if (CheckDefCon(DEFCON_SILENT_OPER_ONLY)) - source.Reply(OPER_HELP_DEFCON_SILENT_OPER_ONLY); + source.Reply(_("* Silently ignore non-opers")); if (CheckDefCon(DEFCON_AKILL_NEW_CLIENTS)) - source.Reply(OPER_HELP_DEFCON_AKILL_NEW_CLIENTS); + source.Reply(_("* AKILL any new clients connecting")); if (CheckDefCon(DEFCON_NO_NEW_MEMOS)) - source.Reply(OPER_HELP_DEFCON_NO_NEW_MEMOS); + source.Reply(_("* No new memos sent")); } void runDefCon() diff --git a/modules/core/os_global.cpp b/modules/core/os_global.cpp index 838446bd0..5d8bb39e4 100644 --- a/modules/core/os_global.cpp +++ b/modules/core/os_global.cpp @@ -33,18 +33,21 @@ class CommandOSGlobal : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(OPER_HELP_GLOBAL, Config->s_GlobalNoticer.c_str()); + source.Reply(_("Syntax: \002GLOBAL \037message\037\002\n" + " \n" + "Allows Administrators to send messages to all users on the \n" + "network. The message will be sent from the nick \002%s\002."), Config->s_GlobalNoticer.c_str()); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "GLOBAL", OPER_GLOBAL_SYNTAX); + SyntaxError(source, "GLOBAL", _("GLOBAL \037message\037")); } void OnServHelp(CommandSource &source) { - source.Reply(OPER_HELP_CMD_GLOBAL); + source.Reply(_(" GLOBAL Send a message to all users")); } }; diff --git a/modules/core/os_help.cpp b/modules/core/os_help.cpp index 9f0141940..31b62b349 100644 --- a/modules/core/os_help.cpp +++ b/modules/core/os_help.cpp @@ -29,11 +29,11 @@ class CommandOSHelp : public Command void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { User *u = source.u; - source.Reply(OPER_HELP); + source.Reply(_("%S commands:")); for (CommandMap::const_iterator it = OperServ->Commands.begin(), it_end = OperServ->Commands.end(); it != it_end; ++it) if (!Config->HidePrivilegedCommands || it->second->permission.empty() || (u->Account() && u->Account()->HasCommand(it->second->permission))) it->second->OnServHelp(source); - source.Reply(OPER_HELP_LOGGED); + source.Reply(_("\002Notice:\002 All commands sent to %S are logged!")); } }; diff --git a/modules/core/os_ignore.cpp b/modules/core/os_ignore.cpp index 332b42f9c..bf5538dd9 100644 --- a/modules/core/os_ignore.cpp +++ b/modules/core/os_ignore.cpp @@ -165,15 +165,15 @@ class CommandOSIgnore : public Command if (t <= -1) { - source.Reply(OPER_IGNORE_VALID_TIME); + source.Reply(_("You have to enter a valid number as time.")); return MOD_CONT; } ignore_service->AddIgnore(nick, source.u->nick, reason, t); if (!t) - source.Reply(OPER_IGNORE_PERM_DONE, nick.c_str()); + source.Reply(_("\002%s\002 will now permanently be ignored."), nick.c_str()); else - source.Reply(OPER_IGNORE_TIME_DONE, nick.c_str(), time.c_str()); + source.Reply(_("\002%s\002 will now be ignored for \002%s\002."), nick.c_str(), time.c_str()); } return MOD_CONT; @@ -187,10 +187,11 @@ class CommandOSIgnore : public Command const std::list<IgnoreData> &ignores = ignore_service->GetIgnores(); if (ignores.empty()) - source.Reply(OPER_IGNORE_LIST_EMPTY); + source.Reply(_("Ignore list is empty.")); else { - source.Reply(OPER_IGNORE_LIST); + source.Reply(_("Services ignore list:\n" + " Mask Creator Reason Expires")); for (std::list<IgnoreData>::const_iterator ign = ignores.begin(), ign_end = ignores.end(); ign != ign_end; ++ign) { const IgnoreData &ignore = *ign; @@ -212,9 +213,9 @@ class CommandOSIgnore : public Command if (nick.empty()) this->OnSyntaxError(source, "DEL"); else if (ignore_service->DelIgnore(nick)) - source.Reply(OPER_IGNORE_DEL_DONE, nick.c_str()); + source.Reply(_("\002%s\002 will no longer be ignored."), nick.c_str()); else - source.Reply(OPER_IGNORE_LIST_NOMATCH, nick.c_str()); + source.Reply(_("Nick \002%s\002 not found on ignore list."), nick.c_str()); return MOD_CONT; } @@ -226,7 +227,7 @@ class CommandOSIgnore : public Command return MOD_CONT; ignore_service->ClearIgnores(); - source.Reply(OPER_IGNORE_LIST_CLEARED); + source.Reply(_("Ignore list has been cleared.")); return MOD_CONT; } @@ -256,18 +257,31 @@ class CommandOSIgnore : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(OPER_HELP_IGNORE); + source.Reply(_("Syntax: \002IGNORE {ADD|DEL|LIST|CLEAR} [\037time\037] [\037nick\037] [\037reason\037]\002\n" + " \n" + "Allows Services Operators to make Services ignore a nick or mask\n" + "for a certain time or until the next restart. The default\n" + "time format is seconds. You can specify it by using units.\n" + "Valid units are: \037s\037 for seconds, \037m\037 for minutes, \n" + "\037h\037 for hours and \037d\037 for days. \n" + "Combinations of these units are not permitted.\n" + "To make Services permanently ignore the user, type 0 as time.\n" + "When adding a \037mask\037, it should be in the format user@host\n" + "or nick!user@host, everything else will be considered a nick.\n" + "Wildcards are permitted.\n" + " \n" + "Ignores will not be enforced on IRC Operators.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "IGNORE", OPER_IGNORE_SYNTAX); + SyntaxError(source, "IGNORE", _("IGNORE {ADD|DEL|LIST|CLEAR} [\037time\037] [\037nick\037] [\037reason\037]\002")); } void OnServHelp(CommandSource &source) { - source.Reply(OPER_HELP_CMD_IGNORE); + source.Reply(_(" IGNORE Modify the Services ignore list")); } }; diff --git a/modules/core/os_jupe.cpp b/modules/core/os_jupe.cpp index 81a1c4c94..5220bd04c 100644 --- a/modules/core/os_jupe.cpp +++ b/modules/core/os_jupe.cpp @@ -28,9 +28,9 @@ class CommandOSJupe : public Command Server *server = Server::Find(jserver); if (!isValidHost(jserver, 3)) - source.Reply(OPER_JUPE_HOST_ERROR); + source.Reply(_("Please use a valid server name when juping")); else if (server && (server == Me || server == Me->GetLinks().front())) - source.Reply(OPER_JUPE_INVALID_SERVER); + source.Reply(_("You can not jupe your services server or your uplink server.")); else { Anope::string rbuf = "Juped by " + u->nick + (!reason.empty() ? ": " + reason : ""); @@ -47,18 +47,27 @@ class CommandOSJupe : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(OPER_HELP_JUPE); + source.Reply(_("Syntax: \002JUPE \037server\037 [\037reason\037]\002\n" + " \n" + "Tells Services to jupiter a server -- that is, to create\n" + "a fake \"server\" connected to Services which prevents\n" + "the real server of that name from connecting. The jupe\n" + "may be removed using a standard \002SQUIT\002. If a reason is\n" + "given, it is placed in the server information field;\n" + "otherwise, the server information field will contain the\n" + "text \"Juped by <nick>\", showing the nickname of the\n" + "person who jupitered the server.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "JUPE", OPER_JUPE_SYNTAX); + SyntaxError(source, "JUPE", _("JUPE \037servername\037 [\037reason\037]")); } void OnServHelp(CommandSource &source) { - source.Reply(OPER_HELP_CMD_JUPE); + source.Reply(_(" JUPE \"Jupiter\" a server")); } }; diff --git a/modules/core/os_kick.cpp b/modules/core/os_kick.cpp index c68ac9fbb..5cdca38ce 100644 --- a/modules/core/os_kick.cpp +++ b/modules/core/os_kick.cpp @@ -31,17 +31,17 @@ class CommandOSKick : public Command if (!(c = findchan(chan))) { - source.Reply(CHAN_X_NOT_IN_USE, chan.c_str()); + source.Reply(LanguageString::CHAN_X_NOT_IN_USE, chan.c_str()); return MOD_CONT; } else if (c->bouncy_modes) { - source.Reply(OPER_BOUNCY_MODES_U_LINE); + source.Reply(_("Services is unable to change modes. Are your servers' U:lines configured correctly?")); return MOD_CONT; } else if (!(u2 = finduser(nick))) { - source.Reply(NICK_X_NOT_IN_USE, nick.c_str()); + source.Reply(LanguageString::NICK_X_NOT_IN_USE, nick.c_str()); return MOD_CONT; } @@ -53,18 +53,25 @@ class CommandOSKick : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(OPER_HELP_KICK); + source.Reply(_("Syntax: \002KICK \037channel\037 \037user\037 \037reason\037\002\n" + " \n" + "Allows staff to kick a user from any channel.\n" + "Parameters are the same as for the standard /KICK\n" + "command. The kick message will have the nickname of the\n" + "IRCop sending the KICK command prepended; for example:\n" + " \n" + "*** SpamMan has been kicked off channel #my_channel by %S (Alcan (Flood))")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "KICK", OPER_KICK_SYNTAX); + SyntaxError(source, "KICK", _("KICK \037channel\037 \037user\037 \037reason\037")); } void OnServHelp(CommandSource &source) { - source.Reply(OPER_HELP_CMD_KICK); + source.Reply(_(" KICK Kick a user from a channel")); } }; diff --git a/modules/core/os_mode.cpp b/modules/core/os_mode.cpp index 61a577ae3..ab2378052 100644 --- a/modules/core/os_mode.cpp +++ b/modules/core/os_mode.cpp @@ -28,9 +28,9 @@ class CommandOSMode : public Command Channel *c; if (!(c = findchan(chan))) - source.Reply(CHAN_X_NOT_IN_USE, chan.c_str()); + source.Reply(LanguageString::CHAN_X_NOT_IN_USE, chan.c_str()); else if (c->bouncy_modes) - source.Reply(OPER_BOUNCY_MODES_U_LINE); + source.Reply(_("Services is unable to change modes. Are your servers' U:lines configured correctly?")); else { c->SetModes(OperServ, false, modes.c_str()); @@ -43,18 +43,22 @@ class CommandOSMode : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(OPER_HELP_MODE); + source.Reply(_("Syntax: \002MODE \037channel\037 \037modes\037\002\n" + " \n" + "Allows Services operators to set channel modes for any\n" + "channel. Parameters are the same as for the standard /MODE\n" + "command.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "MODE", OPER_MODE_SYNTAX); + SyntaxError(source, "MODE", _("MODE \037channel\037 \037modes\037")); } void OnServHelp(CommandSource &source) { - source.Reply(OPER_HELP_CMD_MODE); + source.Reply(_(" MODE Change a channel's modes")); } }; diff --git a/modules/core/os_modinfo.cpp b/modules/core/os_modinfo.cpp index 6cc3ebbeb..9ee5b65fd 100644 --- a/modules/core/os_modinfo.cpp +++ b/modules/core/os_modinfo.cpp @@ -29,7 +29,7 @@ class CommandOSModInfo : public Command if (c->module && c->module->name.equals_ci(mod_name) && c->service) { - source.Reply(OPER_MODULE_CMD_LIST, c->service->nick.c_str(), c->name.c_str()); + source.Reply(_("Providing command: %\002%s %s\002"), c->service->nick.c_str(), c->name.c_str()); ++display; } } @@ -49,7 +49,7 @@ class CommandOSModInfo : public Command Module *m = FindModule(file); if (m) { - source.Reply(OPER_MODULE_INFO_LIST, m->name.c_str(), !m->version.empty() ? m->version.c_str() : "?", !m->author.empty() ? m->author.c_str() : "?", do_strftime(m->created).c_str()); + source.Reply(_("Module: \002%s\002 Version: \002%s\002 Author: \002%s\002 loaded: \002%s\002"), m->name.c_str(), !m->version.empty() ? m->version.c_str() : "?", !m->author.empty() ? m->author.c_str() : "?", do_strftime(m->created).c_str()); showModuleCmdLoaded(HostServ, m->name, source); showModuleCmdLoaded(OperServ, m->name, source); @@ -59,25 +59,27 @@ class CommandOSModInfo : public Command showModuleCmdLoaded(MemoServ, m->name, source); } else - source.Reply(OPER_MODULE_NO_INFO, file.c_str()); + source.Reply(_("No information about module \002%s\002 is available"), file.c_str()); return MOD_CONT; } bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(OPER_HELP_MODINFO); + source.Reply(_("Syntax: \002MODINFO\002 \002FileName\002\n" + " \n" + "This command lists information about the specified loaded module")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "MODINFO", OPER_MODULE_INFO_SYNTAX); + SyntaxError(source, "MODINFO", _("MODINFO \037FileName\037")); } void OnServHelp(CommandSource &source) { - source.Reply(OPER_HELP_CMD_MODINFO); + source.Reply(_(" MODINFO Info about a loaded module")); } }; diff --git a/modules/core/os_modlist.cpp b/modules/core/os_modlist.cpp index fa6c5e9a9..3a70e631a 100644 --- a/modules/core/os_modlist.cpp +++ b/modules/core/os_modlist.cpp @@ -129,7 +129,7 @@ class CommandOSModList : public Command } } - source.Reply(OPER_MODULE_LIST_HEADER); + source.Reply(_("Current Module list:")); for (std::list<Module *>::iterator it = Modules.begin(), it_end = Modules.end(); it != it_end; ++it) { @@ -140,56 +140,56 @@ class CommandOSModList : public Command case CORE: if (showCore) { - source.Reply(OPER_MODULE_LIST, m->name.c_str(), m->version.c_str(), core); + source.Reply(_("Module: \002%s\002 [%s] [%s]"), m->name.c_str(), m->version.c_str(), core); ++count; } break; case THIRD: if (showThird) { - source.Reply(OPER_MODULE_LIST, m->name.c_str(), m->version.c_str(), third); + source.Reply(_("Module: \002%s\002 [%s] [%s]"), m->name.c_str(), m->version.c_str(), third); ++count; } break; case PROTOCOL: if (showProto) { - source.Reply(OPER_MODULE_LIST, m->name.c_str(), m->version.c_str(), proto); + source.Reply(_("Module: \002%s\002 [%s] [%s]"), m->name.c_str(), m->version.c_str(), proto); ++count; } break; case SUPPORTED: if (showSupported) { - source.Reply(OPER_MODULE_LIST, m->name.c_str(), m->version.c_str(), supported); + source.Reply(_("Module: \002%s\002 [%s] [%s]"), m->name.c_str(), m->version.c_str(), supported); ++count; } break; case QATESTED: if (showQA) { - source.Reply(OPER_MODULE_LIST, m->name.c_str(), m->version.c_str(), qa); + source.Reply(_("Module: \002%s\002 [%s] [%s]"), m->name.c_str(), m->version.c_str(), qa); ++count; } break; case ENCRYPTION: if (showEnc) { - source.Reply(OPER_MODULE_LIST, m->name.c_str(), m->version.c_str(), enc); + source.Reply(_("Module: \002%s\002 [%s] [%s]"), m->name.c_str(), m->version.c_str(), enc); ++count; } break; case DATABASE: if (showDB) { - source.Reply(OPER_MODULE_LIST, m->name.c_str(), m->version.c_str(), db); + source.Reply(_("Module: \002%s\002 [%s] [%s]"), m->name.c_str(), m->version.c_str(), db); ++count; } break; case SOCKETENGINE: if (showSocketEngine) { - source.Reply(OPER_MODULE_LIST, m->name.c_str(), m->version.c_str(), socketengine); + source.Reply(_("Module: \002%s\002 [%s] [%s]"), m->name.c_str(), m->version.c_str(), socketengine); ++count; } break; @@ -198,22 +198,24 @@ class CommandOSModList : public Command } } if (!count) - source.Reply(OPER_MODULE_NO_LIST); + source.Reply(_("No modules currently loaded")); else - source.Reply(OPER_MODULE_LIST_FOOTER, count); + source.Reply(_("%d Modules loaded."), count); return MOD_CONT; } bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(OPER_HELP_MODLIST); + source.Reply(_("Syntax: \002MODLIST\002 [Core|3rd|protocol|encryption|supported|qatested]\n" + " \n" + "Lists all currently loaded modules.")); return true; } void OnServHelp(CommandSource &source) { - source.Reply(OPER_HELP_CMD_MODLIST); + source.Reply(_(" MODLIST List loaded modules")); } }; diff --git a/modules/core/os_modload.cpp b/modules/core/os_modload.cpp index 5009535ea..c655df683 100644 --- a/modules/core/os_modload.cpp +++ b/modules/core/os_modload.cpp @@ -28,7 +28,7 @@ class CommandOSModLoad : public Command Module *m = FindModule(mname); if (m) { - source.Reply(OPER_MODULE_ALREADY_LOADED, mname.c_str()); + source.Reply(_("Module \002%s\002 is already loaded."), mname.c_str()); return MOD_CONT; } @@ -36,7 +36,7 @@ class CommandOSModLoad : public Command if (status == MOD_ERR_OK) { ircdproto->SendGlobops(OperServ, "%s loaded module %s", u->nick.c_str(), mname.c_str()); - source.Reply(OPER_MODULE_LOADED, mname.c_str()); + source.Reply(_("Module \002%s\002 loaded"), mname.c_str()); /* If a user is loading this module, then the core databases have already been loaded * so trigger the event manually @@ -46,25 +46,28 @@ class CommandOSModLoad : public Command m->OnPostLoadDatabases(); } else - source.Reply(OPER_MODULE_LOAD_FAIL, mname.c_str()); + source.Reply(_("Unable to load module \002%s\002"), mname.c_str()); return MOD_CONT; } bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(OPER_HELP_MODLOAD); + source.Reply(_("Syntax: \002MODLOAD\002 \002FileName\002\n" + " \n" + "This command loads the module named FileName from the modules\n" + "directory.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "MODLOAD", OPER_MODULE_LOAD_SYNTAX); + SyntaxError(source, "MODLOAD", _("MODLOAD \037FileName\037")); } void OnServHelp(CommandSource &source) { - source.Reply(OPER_HELP_CMD_MODLOAD); + source.Reply(_(" MODLOAD Load a module")); } }; diff --git a/modules/core/os_modreload.cpp b/modules/core/os_modreload.cpp index e7882ed5e..10a4e1b07 100644 --- a/modules/core/os_modreload.cpp +++ b/modules/core/os_modreload.cpp @@ -28,19 +28,19 @@ class CommandOSModReLoad : public Command Module *m = FindModule(mname); if (!m) { - source.Reply(OPER_MODULE_ISNT_LOADED, mname.c_str()); + source.Reply(_("Module \002%s\002 isn't loaded."), mname.c_str()); return MOD_CONT; } if (!m->handle) { - source.Reply(OPER_MODULE_REMOVE_FAIL, m->name.c_str()); + source.Reply(_("Unable to remove module \002%s\002"), m->name.c_str()); return MOD_CONT; } if (m->GetPermanent()) { - source.Reply(OPER_MODULE_NO_UNLOAD); + source.Reply(_("Unable to remove module \002%s\002")); return MOD_CONT; } @@ -50,7 +50,7 @@ class CommandOSModReLoad : public Command if (status != MOD_ERR_OK) { - source.Reply(OPER_MODULE_REMOVE_FAIL, mname.c_str()); + source.Reply(_("Unable to remove module \002%s\002"), mname.c_str()); return MOD_CONT; } @@ -58,7 +58,7 @@ class CommandOSModReLoad : public Command if (status == MOD_ERR_OK) { ircdproto->SendGlobops(OperServ, "%s reloaded module %s", u->nick.c_str(), mname.c_str()); - source.Reply(OPER_MODULE_RELOADED, mname.c_str()); + source.Reply(_("Module \002%s\002 reloaded"), mname.c_str()); /* If a user is loading this module, then the core databases have already been loaded * so trigger the event manually @@ -72,7 +72,7 @@ class CommandOSModReLoad : public Command if (fatal) throw FatalException("Unable to reload module " + mname); else - source.Reply(OPER_MODULE_LOAD_FAIL, mname.c_str()); + source.Reply(_("Unable to load module \002%s\002"), mname.c_str()); } return MOD_CONT; @@ -80,18 +80,20 @@ class CommandOSModReLoad : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(OPER_HELP_MODRELOAD); + source.Reply(_("Syntax: \002MODRELOAD\002 \002FileName\002\n" + " \n" + "This command reloads the module named FileName.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "MODLOAD", OPER_MODULE_RELOAD_SYNTAX); + SyntaxError(source, "MODLOAD", _("MODRELOAD \037FileName\037")); } void OnServHelp(CommandSource &source) { - source.Reply(OPER_HELP_CMD_MODRELOAD); + source.Reply(_(" MODRELOAD Reload a module")); } }; diff --git a/modules/core/os_modunload.cpp b/modules/core/os_modunload.cpp index 8efbc8bdf..9dc3f8d39 100644 --- a/modules/core/os_modunload.cpp +++ b/modules/core/os_modunload.cpp @@ -28,19 +28,19 @@ class CommandOSModUnLoad : public Command Module *m = FindModule(mname); if (!m) { - source.Reply(OPER_MODULE_ISNT_LOADED, mname.c_str()); + source.Reply(_("Module \002%s\002 isn't loaded."), mname.c_str()); return MOD_CONT; } if (!m->handle) { - source.Reply(OPER_MODULE_REMOVE_FAIL, m->name.c_str()); + source.Reply(_("Unable to remove module \002%s\002"), m->name.c_str()); return MOD_CONT; } if (m->GetPermanent() || m->type == PROTOCOL) { - source.Reply(OPER_MODULE_NO_UNLOAD); + source.Reply(_("Unable to remove module \002%s\002")); return MOD_CONT; } @@ -50,29 +50,32 @@ class CommandOSModUnLoad : public Command if (status == MOD_ERR_OK) { - source.Reply(OPER_MODULE_UNLOADED, mname.c_str()); + source.Reply(_("Module \002%s\002 unloaded"), mname.c_str()); ircdproto->SendGlobops(OperServ, "%s unloaded module %s", u->nick.c_str(), mname.c_str()); } else - source.Reply(OPER_MODULE_REMOVE_FAIL, mname.c_str()); + source.Reply(_("Unable to remove module \002%s\002"), mname.c_str()); return MOD_CONT; } bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(OPER_HELP_MODUNLOAD); + source.Reply(_("Syntax: \002MODUNLOAD\002 \002FileName\002\n" + " \n" + "This command unloads the module named FileName from the modules\n" + "directory.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "MODUNLOAD", OPER_MODULE_UNLOAD_SYNTAX); + SyntaxError(source, "MODUNLOAD", _("MODUNLOAD \037FileName\037")); } void OnServHelp(CommandSource &source) { - source.Reply(OPER_HELP_CMD_MODUNLOAD); + source.Reply(_(" MODUNLOAD Un-Load a module")); } }; diff --git a/modules/core/os_news.cpp b/modules/core/os_news.cpp index fe3788dfe..d8574e5de 100644 --- a/modules/core/os_news.cpp +++ b/modules/core/os_news.cpp @@ -33,54 +33,54 @@ enum struct NewsMessages msgarray[] = { {NEWS_LOGON, "LOGON", - {NEWS_LOGON_SYNTAX, - NEWS_LOGON_LIST_HEADER, - NEWS_LOGON_LIST_NONE, - NEWS_LOGON_ADD_SYNTAX, - NEWS_LOGON_ADDED, - NEWS_LOGON_DEL_SYNTAX, - NEWS_LOGON_DEL_NOT_FOUND, - NEWS_LOGON_DELETED, - NEWS_LOGON_DEL_NONE, - NEWS_LOGON_DELETED_ALL} + {_("LOGONNEWS {ADD|DEL|LIST} [\037text\037|\037num\037]\002"), + _("Logon news items:"), + _("There is no logon news."), + _("Syntax: \002LOGONNEWS ADD \037text\037\002"), + _("Added new logon news item (#%d)."), + _("Syntax: \002LOGONNEWS DEL {\037num\037 | ALL}"), + _("Logon news item #%d not found!"), + _("LOGONNEWS {ADD|DEL|LIST} [\037text\037|\037num\037]\002"), + _("No logon news items to delete!"), + _("All logon news items deleted.")} }, {NEWS_OPER, "OPER", - {NEWS_OPER_SYNTAX, - NEWS_OPER_LIST_HEADER, - NEWS_OPER_LIST_NONE, - NEWS_OPER_ADD_SYNTAX, - NEWS_OPER_ADDED, - NEWS_OPER_DEL_SYNTAX, - NEWS_OPER_DEL_NOT_FOUND, - NEWS_OPER_DELETED, - NEWS_OPER_DEL_NONE, - NEWS_OPER_DELETED_ALL} + {_("OPERNEWS {ADD|DEL|LIST} [\037text\037|\037num\037]\002"), + _("Oper news items:"), + _("There is no oper news."), + _("Syntax: \002OPERNEWS ADD \037text\037\002"), + _("Added new oper news item (#%d)."), + _("Syntax: \002OPERNEWS DEL {\037num\037 | ALL}"), + _("Oper news item #%d not found!"), + _("Oper news item #%d deleted."), + _("No oper news items to delete!"), + _("All oper news items deleted.")} }, {NEWS_RANDOM, "RANDOM", - {NEWS_RANDOM_SYNTAX, - NEWS_RANDOM_LIST_HEADER, - NEWS_RANDOM_LIST_NONE, - NEWS_RANDOM_ADD_SYNTAX, - NEWS_RANDOM_ADDED, - NEWS_RANDOM_DEL_SYNTAX, - NEWS_RANDOM_DEL_NOT_FOUND, - NEWS_RANDOM_DELETED, - NEWS_RANDOM_DEL_NONE, - NEWS_RANDOM_DELETED_ALL} + {_("RANDOMNEWS {ADD|DEL|LIST} [\037text\037|\037num\037]\002"), + _("Random news items:"), + _("There is no random news."), + _("Syntax: \002RANDOMNEWS ADD \037text\037\002"), + _("Added new random news item (#%d)."), + _("Syntax: \002RANDOMNEWS DEL {\037num\037 | ALL}"), + _("Random news item #%d not found!"), + _("Random news item #%d deleted."), + _("No random news items to delete!"), + _("All random news items deleted.")} } }; static void DisplayNews(User *u, NewsType Type) { - LanguageString msg; static unsigned current_news = 0; + Anope::string msg; if (Type == NEWS_LOGON) - msg = NEWS_LOGON_TEXT; + msg = _("[\002Logon News\002 - %s] %s"); else if (Type == NEWS_OPER) - msg = NEWS_OPER_TEXT; + msg = _("[\002Oper News\002 - %s] %s"); else if (Type == NEWS_RANDOM) - msg = NEWS_RANDOM_TEXT; + msg = _("[\002Random News\002 - %s] %s"); else throw CoreException("news: Invalid type (" + stringify(Type) + ") to display_news()"); @@ -95,7 +95,7 @@ static void DisplayNews(User *u, NewsType Type) if (Type == NEWS_RANDOM && i == current_news) continue; - u->SendMessage(OperServ, msg, do_strftime(News[i]->time).c_str(), News[i]->Text.c_str()); + u->SendMessage(OperServ, msg.c_str(), do_strftime(News[i]->time).c_str(), News[i]->Text.c_str()); ++displayed; @@ -152,7 +152,7 @@ static int del_newsitem(unsigned num, NewsType type) return count; } -static LanguageString *findmsgs(NewsType type, Anope::string &type_name) +static const char **findmsgs(NewsType type, Anope::string &type_name) { for (unsigned i = 0; i < lenof(msgarray); ++i) if (msgarray[i].type == type) @@ -166,7 +166,7 @@ static LanguageString *findmsgs(NewsType type, Anope::string &type_name) class NewsBase : public Command { protected: - CommandReturn DoList(CommandSource &source, NewsType type, LanguageString *msgs) + CommandReturn DoList(CommandSource &source, NewsType type, const char **msgs) { int count = 0; @@ -175,18 +175,18 @@ class NewsBase : public Command { if (!count) source.Reply(msgs[MSG_LIST_HEADER]); - source.Reply(NEWS_LIST_ENTRY, News[i]->num, do_strftime(News[i]->time).c_str(), !News[i]->who.empty() ? News[i]->who.c_str() : "<unknown>", News[i]->Text.c_str()); + source.Reply(_("%5d (%s by %s)\n"" %s"), News[i]->num, do_strftime(News[i]->time).c_str(), !News[i]->who.empty() ? News[i]->who.c_str() : "<unknown>", News[i]->Text.c_str()); ++count; } if (!count) source.Reply(msgs[MSG_LIST_NONE]); else - source.Reply(END_OF_ANY_LIST, "News"); + source.Reply(LanguageString::END_OF_ANY_LIST, "News"); return MOD_CONT; } - CommandReturn DoAdd(CommandSource &source, const std::vector<Anope::string> ¶ms, NewsType type, LanguageString *msgs) + CommandReturn DoAdd(CommandSource &source, const std::vector<Anope::string> ¶ms, NewsType type, const char **msgs) { const Anope::string text = params.size() > 1 ? params[1] : ""; int n; @@ -197,12 +197,12 @@ class NewsBase : public Command { if (readonly) { - source.Reply(READ_ONLY_MODE); + source.Reply(LanguageString::READ_ONLY_MODE); return MOD_CONT; } n = add_newsitem(source, text, type); if (n < 0) - source.Reply(NEWS_ADD_FULL); + source.Reply(_("News list is full!")); else source.Reply(msgs[MSG_ADDED], n); } @@ -210,7 +210,7 @@ class NewsBase : public Command return MOD_CONT; } - CommandReturn DoDel(CommandSource &source, const std::vector<Anope::string> ¶ms, NewsType type, LanguageString *msgs) + CommandReturn DoDel(CommandSource &source, const std::vector<Anope::string> ¶ms, NewsType type, const char **msgs) { const Anope::string &text = params.size() > 1 ? params[1] : ""; unsigned num; @@ -221,7 +221,7 @@ class NewsBase : public Command { if (readonly) { - source.Reply(READ_ONLY_MODE); + source.Reply(LanguageString::READ_ONLY_MODE); return MOD_CONT; } if (!text.equals_ci("ALL")) @@ -254,7 +254,7 @@ class NewsBase : public Command const Anope::string &cmd = params[0]; Anope::string type_name; - LanguageString *msgs = findmsgs(type, type_name); + const char **msgs = findmsgs(type, type_name); if (!msgs) throw CoreException("news: Invalid type to do_news()"); @@ -299,18 +299,29 @@ class CommandOSLogonNews : public NewsBase bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(NEWS_HELP_LOGON, Config->NewsCount); + source.Reply(_("Syntax: \002LOGONNEWS ADD \037text\037\002\n" + " \002LOGONNEWS DEL {\037num\037 | ALL}\002\n" + " \002LOGONNEWS LIST\002\n" + " \n" + "Edits or displays the list of logon news messages. When a\n" + "user connects to the network, these messages will be sent\n" + "to them. (However, no more than \002%d\002 messages will be\n" + "sent in order to avoid flooding the user. If there are\n" + "more news messages, only the most recent will be sent.)\n" + "NewsCount can be configured in services.conf.\n" + " \n" + "LOGONNEWS may only be used by Services Operators."), Config->NewsCount); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "LOGONNEWS", NEWS_LOGON_SYNTAX); + SyntaxError(source, "LOGONNEWS", _("LOGONNEWS {ADD|DEL|LIST} [\037text\037|\037num\037]\002")); } void OnServHelp(CommandSource &source) { - source.Reply(OPER_HELP_CMD_LOGONNEWS); + source.Reply(_(" LOGONNEWS Define messages to be shown to users at logon")); } }; @@ -328,18 +339,29 @@ class CommandOSOperNews : public NewsBase bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(NEWS_HELP_OPER, Config->NewsCount); + source.Reply(_("Syntax: \002OPERNEWS ADD \037text\037\002\n" + " \002OPERNEWS DEL {\037num\037 | ALL}\002\n" + " \002OPERNEWS LIST\002\n" + " \n" + "Edits or displays the list of oper news messages. When a\n" + "user opers up (with the /OPER command), these messages will\n" + "be sent to them. (However, no more than \002%d\002 messages will\n" + "be sent in order to avoid flooding the user. If there are\n" + "more news messages, only the most recent will be sent.)\n" + "NewsCount can be configured in services.conf.\n" + " \n" + "OPERNEWS may only be used by Services Operators."), Config->NewsCount); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "OPERNEWS", NEWS_OPER_SYNTAX); + SyntaxError(source, "OPERNEWS", _("OPERNEWS {ADD|DEL|LIST} [\037text\037|\037num\037]\002")); } void OnServHelp(CommandSource &source) { - source.Reply(OPER_HELP_CMD_OPERNEWS); + source.Reply(_(" OPERNEWS Define messages to be shown to users who oper")); } }; @@ -357,18 +379,27 @@ class CommandOSRandomNews : public NewsBase bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(NEWS_HELP_RANDOM); + source.Reply(_("Syntax: \002RANDOMNEWS ADD \037text\037\002\n" + " \002RANDOMNEWS DEL {\037num\037 | ALL}\002\n" + " \002RANDOMNEWS LIST\002\n" + " \n" + "Edits or displays the list of random news messages. When a\n" + "user connects to the network, one (and only one) of the\n" + "random news will be randomly chosen and sent to them.\n" + " \n" + "RANDOMNEWS may only be used by Services Operators.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "RANDOMNEWS", NEWS_RANDOM_SYNTAX); + SyntaxError(source, "RANDOMNEWS", _("RANDOMNEWS {ADD|DEL|LIST} [\037text\037|\037num\037]\002")); } void OnServHelp(CommandSource &source) { - source.Reply(OPER_HELP_CMD_RANDOMNEWS); + source.Reply(_(" RANDOMNEWS Define messages to be randomly shown to users \n" + " at logon")); } }; diff --git a/modules/core/os_noop.cpp b/modules/core/os_noop.cpp index 49f29d2c9..ae6d1fda7 100644 --- a/modules/core/os_noop.cpp +++ b/modules/core/os_noop.cpp @@ -36,7 +36,7 @@ class CommandOSNOOP : public Command reason = "NOOP command used by " + u->nick; if (Config->WallOSNoOp) ircdproto->SendGlobops(OperServ, "\2%s\2 used NOOP on \2%s\2", u->nick.c_str(), server.c_str()); - source.Reply(OPER_NOOP_SET, server.c_str()); + source.Reply(_("All O:lines of \002%s\002 have been removed."), server.c_str()); /* Kill all the IRCops of the server */ patricia_tree<User *, ci::ci_char_traits>::iterator it(UserListByNick); @@ -52,7 +52,7 @@ class CommandOSNOOP : public Command else if (cmd.equals_ci("REVOKE")) { ircdproto->SendSVSNOOP(server, 0); - source.Reply(OPER_NOOP_REVOKE, server.c_str()); + source.Reply(_("All O:lines of \002%s\002 have been reset."), server.c_str()); } else this->OnSyntaxError(source, ""); @@ -61,18 +61,29 @@ class CommandOSNOOP : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(OPER_HELP_NOOP); + source.Reply(_("Syntax: \002NOOP SET \037server\037\002\n" + " \002NOOP REVOKE \037server\037\002\n" + "\n" + "\002NOOP SET\002 remove all O:lines of the given\n" + "\002server\002 and kill all IRCops currently on it to\n" + "prevent them from rehashing the server (because this\n" + "would just cancel the effect).\n" + "\002NOOP REVOKE\002 makes all removed O:lines available again\n" + "on the given \002server\002.\n" + "\002Note:\002 The \002server\002 is not checked at all by the\n" + "Services.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "NOOP", OPER_NOOP_SYNTAX); + SyntaxError(source, "NOOP", _("NOOP {SET|REVOKE} \037server\037")); } void OnServHelp(CommandSource &source) { - source.Reply(OPER_HELP_CMD_NOOP); + source.Reply(_(" NOOP Temporarily remove all O:lines of a server \n" + " remotely")); } }; diff --git a/modules/core/os_oline.cpp b/modules/core/os_oline.cpp index 39b75651f..833bf6ab9 100644 --- a/modules/core/os_oline.cpp +++ b/modules/core/os_oline.cpp @@ -29,40 +29,45 @@ class CommandOSOLine : public Command /* let's check whether the user is online */ if (!(u2 = finduser(nick))) - source.Reply(NICK_X_NOT_IN_USE, nick.c_str()); + source.Reply(LanguageString::NICK_X_NOT_IN_USE, nick.c_str()); else if (u2 && flag[0] == '+') { ircdproto->SendSVSO(Config->s_OperServ, nick, flag); u2->SetMode(OperServ, UMODE_OPER); - u2->SendMessage(OperServ, OPER_OLINE_IRCOP); - source.Reply(OPER_OLINE_SUCCESS, flag.c_str(), nick.c_str()); + u2->SendMessage(OperServ, _("You are now an IRC Operator.")); + source.Reply(_("Operflags \002%s\002 have been added for \002%s\002."), flag.c_str(), nick.c_str()); ircdproto->SendGlobops(OperServ, "\2%s\2 used OLINE for %s", u->nick.c_str(), nick.c_str()); } else if (u2 && flag[0] == '-') { ircdproto->SendSVSO(Config->s_OperServ, nick, flag); - source.Reply(OPER_OLINE_SUCCESS, flag.c_str(), nick.c_str()); + source.Reply(_("Operflags \002%s\002 have been added for \002%s\002."), flag.c_str(), nick.c_str()); ircdproto->SendGlobops(OperServ, "\2%s\2 used OLINE for %s", u->nick.c_str(), nick.c_str()); } else this->OnSyntaxError(source, ""); + return MOD_CONT; } bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(OPER_HELP_OLINE); + source.Reply(_("Syntax: \002OLINE \037user\037 \037flags\037\002\n" + " \n" + "Allows Services Opers to give Operflags to any user.\n" + "Flags have to be prefixed with a \"+\" or a \"-\". To\n" + "remove all flags simply type a \"-\" instead of any flags.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "OLINE", OPER_OLINE_SYNTAX); + SyntaxError(source, "OLINE", _("OLINE \037nick\037 \037flags\037")); } void OnServHelp(CommandSource &source) { - source.Reply(OPER_HELP_CMD_OLINE); + source.Reply(_(" OLINE Give Operflags to a certain user")); } }; diff --git a/modules/core/os_quit.cpp b/modules/core/os_quit.cpp index edf654334..c06236bd1 100644 --- a/modules/core/os_quit.cpp +++ b/modules/core/os_quit.cpp @@ -34,13 +34,19 @@ class CommandOSQuit : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(OPER_HELP_QUIT); + source.Reply(_("Syntax: \002QUIT\002\n" + " \n" + "Causes Services to do an immediate shutdown; databases are\n" + "\002not\002 saved. This command should not be used unless\n" + "damage to the in-memory copies of the databases is feared\n" + "and they should not be saved. For normal shutdowns, use the\n" + "\002SHUTDOWN\002 command.")); return true; } void OnServHelp(CommandSource &source) { - source.Reply(OPER_HELP_CMD_QUIT); + source.Reply(_(" QUIT Terminate the Services program with no save")); } }; diff --git a/modules/core/os_reload.cpp b/modules/core/os_reload.cpp index a5b392ec2..f1ec14949 100644 --- a/modules/core/os_reload.cpp +++ b/modules/core/os_reload.cpp @@ -34,19 +34,23 @@ class CommandOSReload : public Command Log() << "Error reloading configuration file: " << ex.GetReason(); } - source.Reply(OPER_RELOAD); + source.Reply(_("Services' configuration file has been reloaded.")); return MOD_CONT; } bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(OPER_HELP_RELOAD); + source.Reply(_("Syntax: \002RELOAD\002\n" + "Causes Services to reload the configuration file. Note that\n" + "some directives still need the restart of the Services to\n" + "take effect (such as Services' nicknames, activation of the \n" + "session limitation, etc.)")); return true; } void OnServHelp(CommandSource &source) { - source.Reply(OPER_HELP_CMD_RELOAD); + source.Reply(_(" RELOAD Reload services' configuration file")); } }; diff --git a/modules/core/os_restart.cpp b/modules/core/os_restart.cpp index 1f611f0ab..e0c2bde45 100644 --- a/modules/core/os_restart.cpp +++ b/modules/core/os_restart.cpp @@ -34,13 +34,16 @@ class CommandOSRestart : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(OPER_HELP_RESTART); + source.Reply(_("Syntax: \002RESTART\002\n" + " \n" + "Causes Services to save all databases and then restart\n" + "(i.e. exit and immediately re-run the executable).")); return true; } void OnServHelp(CommandSource &source) { - source.Reply(OPER_HELP_CMD_RESTART); + source.Reply(_(" RESTART Save databases and restart Services")); } }; diff --git a/modules/core/os_session.cpp b/modules/core/os_session.cpp index 712603fa4..e5f26d548 100644 --- a/modules/core/os_session.cpp +++ b/modules/core/os_session.cpp @@ -26,11 +26,11 @@ class ExceptionDelCallback : public NumberList ~ExceptionDelCallback() { if (!Deleted) - source.Reply(OPER_EXCEPTION_NO_MATCH); + source.Reply(_("No matching entries on session-limit exception list.")); else if (Deleted == 1) - source.Reply(OPER_EXCEPTION_DELETED_ONE); + source.Reply(_("Deleted 1 entry from session-limit exception list.")); else - source.Reply(OPER_EXCEPTION_DELETED_SEVERAL, Deleted); + source.Reply(_("Deleted %d entries from session-limit exception list."), Deleted); } virtual void HandleNumber(unsigned Number) @@ -70,8 +70,8 @@ class ExceptionListCallback : public NumberList if (!SentHeader) { SentHeader = true; - source.Reply(OPER_EXCEPTION_LIST_HEADER); - source.Reply(OPER_EXCEPTION_LIST_COLHEAD); + source.Reply(_("Current Session Limit Exception list:")); + source.Reply(_("Num Limit Host")); } DoList(source, Number - 1); @@ -82,7 +82,7 @@ class ExceptionListCallback : public NumberList if (index >= exceptions.size()) return; - source.Reply(OPER_EXCEPTION_LIST_FORMAT, index + 1, exceptions[index]->limit, exceptions[index]->mask.c_str()); + source.Reply(_("%3d %4d %s"), index + 1, exceptions[index]->limit, exceptions[index]->mask.c_str()); } }; @@ -101,7 +101,7 @@ class ExceptionViewCallback : public ExceptionListCallback if (!SentHeader) { SentHeader = true; - source.Reply(OPER_EXCEPTION_LIST_HEADER); + source.Reply(_("Current Session Limit Exception list:")); } DoList(source, Number - 1); @@ -114,7 +114,7 @@ class ExceptionViewCallback : public ExceptionListCallback Anope::string expirebuf = expire_left(source.u->Account(), exceptions[index]->expires); - source.Reply(OPER_EXCEPTION_VIEW_FORMAT, index + 1, exceptions[index]->mask.c_str(), !exceptions[index]->who.empty() ? exceptions[index]->who.c_str() : "<unknown>", do_strftime((exceptions[index]->time ? exceptions[index]->time : Anope::CurTime)).c_str(), expirebuf.c_str(), exceptions[index]->limit, exceptions[index]->reason.c_str()); + source.Reply(_("%3d. %s (by %s on %s; %s)\n " " Limit: %-4d - %s"), index + 1, exceptions[index]->mask.c_str(), !exceptions[index]->who.empty() ? exceptions[index]->who.c_str() : "<unknown>", do_strftime((exceptions[index]->time ? exceptions[index]->time : Anope::CurTime)).c_str(), expirebuf.c_str(), exceptions[index]->limit, exceptions[index]->reason.c_str()); } }; @@ -128,18 +128,18 @@ class CommandOSSession : public Command unsigned mincount = param.is_pos_number_only() ? convertTo<unsigned>(param) : 0; if (mincount <= 1) - source.Reply(OPER_SESSION_INVALID_THRESHOLD); + source.Reply(_("Invalid threshold value. It must be a valid integer greater than 1.")); else { - source.Reply(OPER_SESSION_LIST_HEADER, mincount); - source.Reply(OPER_SESSION_LIST_COLHEAD); + source.Reply(_("Hosts with at least \002%d\002 sessions:"), mincount); + source.Reply(_("Sessions Host")); for (patricia_tree<Session *>::iterator it(SessionList); it.next();) { Session *session = *it; if (session->count >= mincount) - source.Reply(OPER_SESSION_LIST_FORMAT, session->count, session->host.c_str()); + source.Reply(_("%6d %s"), session->count, session->host.c_str()); } } @@ -152,11 +152,11 @@ class CommandOSSession : public Command Session *session = findsession(param); if (!session) - source.Reply(OPER_SESSION_NOT_FOUND, param.c_str()); + source.Reply(_("\002%s\002 not found on session list."), param.c_str()); else { Exception *exception = find_host_exception(param); - source.Reply(OPER_SESSION_VIEW_FORMAT, param.c_str(), session->count, exception ? exception-> limit : Config->DefSessionLimit); + source.Reply(_("The host \002%s\002 currently has \002%d\002 sessions with a limit of \002%d\002."), param.c_str(), session->count, exception ? exception-> limit : Config->DefSessionLimit); } return MOD_CONT; @@ -172,7 +172,7 @@ class CommandOSSession : public Command if (!Config->LimitSessions) { - source.Reply(OPER_EXCEPTION_DISABLED); + source.Reply(_("Session limiting is disabled.")); return MOD_CONT; } @@ -188,18 +188,31 @@ class CommandOSSession : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(OPER_HELP_SESSION); + source.Reply(_("Syntax: \002SESSION LIST \037threshold\037\002\n" + " \002SESSION VIEW \037host\037\002\n" + " \n" + "Allows Services Operators to view the session list.\n" + "\002SESSION LIST\002 lists hosts with at least \037threshold\037 sessions.\n" + "The threshold must be a number greater than 1. This is to \n" + "prevent accidental listing of the large number of single \n" + "session hosts.\n" + "\002SESSION VIEW\002 displays detailed information about a specific\n" + "host - including the current session count and session limit.\n" + "The \037host\037 value may not include wildcards.\n" + "See the \002EXCEPTION\002 help for more information about session\n" + "limiting and how to set session limits specific to certain\n" + "hosts and groups thereof.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "SESSION", OPER_SESSION_LIST_SYNTAX); + SyntaxError(source, "SESSION", _("SESSION LIST \037limit\037")); } void OnServHelp(CommandSource &source) { - source.Reply(OPER_HELP_CMD_SESSION); + source.Reply(_(" SESSION View the list of host sessions")); } }; @@ -241,7 +254,7 @@ class CommandOSException : public Command time_t expires = !expiry.empty() ? dotime(expiry) : Config->ExceptionExpiry; if (expires < 0) { - source.Reply(BAD_EXPIRY_TIME); + source.Reply(LanguageString::BAD_EXPIRY_TIME); return MOD_CONT; } else if (expires > 0) @@ -251,24 +264,24 @@ class CommandOSException : public Command if (limit < 0 || limit > static_cast<int>(Config->MaxSessionLimit)) { - source.Reply(OPER_EXCEPTION_INVALID_LIMIT, Config->MaxSessionLimit); + source.Reply(_("Invalid session limit. It must be a valid integer greater than or equal to zero and less than \002%d\002."), Config->MaxSessionLimit); return MOD_CONT; } else { if (mask.find('!') != Anope::string::npos || mask.find('@') != Anope::string::npos) { - source.Reply(OPER_EXCEPTION_INVALID_HOSTMASK); + source.Reply(_("Invalid hostmask. Only real hostmasks are valid as exceptions are not matched against nicks or usernames.")); return MOD_CONT; } x = exception_add(u, mask, limit, reason, u->nick, expires); if (x == 1) - source.Reply(OPER_EXCEPTION_ADDED, mask.c_str(), limit); + source.Reply(_("Session limit for \002%s\002 set to \002%d\002."), mask.c_str(), limit); if (readonly) - source.Reply(READ_ONLY_MODE); + source.Reply(LanguageString::READ_ONLY_MODE); } return MOD_CONT; @@ -296,15 +309,15 @@ class CommandOSException : public Command if (mask.equals_ci(exceptions[i]->mask)) { ExceptionDelCallback::DoDel(source, i); - source.Reply(OPER_EXCEPTION_DELETED, mask.c_str()); + source.Reply(_("\002%s\002 deleted from session-limit exception list."), mask.c_str()); break; } if (i == end) - source.Reply(OPER_EXCEPTION_NOT_FOUND, mask.c_str()); + source.Reply(_("\002%s\002 not found on session-limit exception list."), mask.c_str()); } if (readonly) - source.Reply(READ_ONLY_MODE); + source.Reply(LanguageString::READ_ONLY_MODE); return MOD_CONT; } @@ -330,10 +343,10 @@ class CommandOSException : public Command exceptions[n1] = exceptions[n2]; exceptions[n2] = temp; - source.Reply(OPER_EXCEPTION_MOVED, exceptions[n1]->mask.c_str(), n1 + 1, n2 + 1); + source.Reply(_("Exception for \002%s\002 (#%d) moved to position \002%d\002."), exceptions[n1]->mask.c_str(), n1 + 1, n2 + 1); if (readonly) - source.Reply(READ_ONLY_MODE); + source.Reply(LanguageString::READ_ONLY_MODE); } else this->OnSyntaxError(source, "MOVE"); @@ -361,15 +374,15 @@ class CommandOSException : public Command if (!SentHeader) { SentHeader = true; - source.Reply(OPER_EXCEPTION_LIST_HEADER); - source.Reply(OPER_EXCEPTION_LIST_COLHEAD); + source.Reply(_("Current Session Limit Exception list:")); + source.Reply(_("Num Limit Host")); } ExceptionListCallback::DoList(source, i); } if (!SentHeader) - source.Reply(OPER_EXCEPTION_NO_MATCH); + source.Reply(_("No matching entries on session-limit exception list.")); } return MOD_CONT; @@ -395,14 +408,14 @@ class CommandOSException : public Command if (!SentHeader) { SentHeader = true; - source.Reply(OPER_EXCEPTION_LIST_HEADER); + source.Reply(_("Current Session Limit Exception list:")); } ExceptionViewCallback::DoList(source, i); } if (!SentHeader) - source.Reply(OPER_EXCEPTION_NO_MATCH); + source.Reply(_("No matching entries on session-limit exception list.")); } return MOD_CONT; @@ -418,7 +431,7 @@ class CommandOSException : public Command if (!Config->LimitSessions) { - source.Reply(OPER_EXCEPTION_DISABLED); + source.Reply(_("Session limiting is disabled.")); return MOD_CONT; } @@ -440,18 +453,54 @@ class CommandOSException : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(OPER_HELP_EXCEPTION); + source.Reply(_("Syntax: \002EXCEPTION ADD [\037+expiry\037] \037mask\037 \037limit\037 \037reason\037\002\n" + " \002EXCEPTION DEL {\037mask\037 | \037list\037}\002\n" + " \002EXCEPTION MOVE \037num\037 \037position\037\002\n" + " \002EXCEPTION LIST [\037mask\037 | \037list\037]\002\n" + " \002EXCEPTION VIEW [\037mask\037 | \037list\037]\002\n" + " \n" + "Allows Services Operators to manipulate the list of hosts that\n" + "have specific session limits - allowing certain machines, \n" + "such as shell servers, to carry more than the default number\n" + "of clients at a time. Once a host reaches its session limit,\n" + "all clients attempting to connect from that host will be\n" + "killed. Before the user is killed, they are notified, via a\n" + "/NOTICE from %S, of a source of help regarding session\n" + "limiting. The content of this notice is a config setting.\n" + " \n" + "\002EXCEPTION ADD\002 adds the given host mask to the exception list.\n" + "Note that \002nick!user@host\002 and \002user@host\002 masks are invalid!\n" + "Only real host masks, such as \002box.host.dom\002 and \002*.host.dom\002,\n" + "are allowed because sessions limiting does not take nick or\n" + "user names into account. \037limit\037 must be a number greater than\n" + "or equal to zero. This determines how many sessions this host\n" + "may carry at a time. A value of zero means the host has an\n" + "unlimited session limit. See the \002AKILL\002 help for details about\n" + "the format of the optional \037expiry\037 parameter.\n" + "\002EXCEPTION DEL\002 removes the given mask from the exception list.\n" + "\002EXCEPTION MOVE\002 moves exception \037num\037 to \037position\037. The\n" + "exceptions inbetween will be shifted up or down to fill the gap.\n" + "\002EXCEPTION LIST\002 and \002EXCEPTION VIEW\002 show all current\n" + "exceptions; if the optional mask is given, the list is limited\n" + "to those exceptions matching the mask. The difference is that\n" + "\002EXCEPTION VIEW\002 is more verbose, displaying the name of the\n" + "person who added the exception, its session limit, reason, \n" + "host mask and the expiry date and time.\n" + " \n" + "Note that a connecting client will \"use\" the first exception\n" + "their host matches. Large exception lists and widely matching\n" + "exception masks are likely to degrade services' performance.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "EXCEPTION", OPER_EXCEPTION_SYNTAX); + SyntaxError(source, "EXCEPTION", _("EXCEPTION {ADD | DEL | MOVE | LIST | VIEW} [\037params\037]")); } void OnServHelp(CommandSource &source) { - source.Reply(OPER_HELP_CMD_EXCEPTION); + source.Reply(_(" EXCEPTION Modify the session-limit exception list")); } }; diff --git a/modules/core/os_set.cpp b/modules/core/os_set.cpp index 9a693c143..17841279a 100644 --- a/modules/core/os_set.cpp +++ b/modules/core/os_set.cpp @@ -20,14 +20,14 @@ class CommandOSSet : public Command { Log(LOG_ADMIN, source.u, this); - LanguageString index; + Anope::string index; - index = readonly ? OPER_SET_LIST_OPTION_ON : OPER_SET_LIST_OPTION_OFF; - source.Reply(index, "READONLY"); - index = debug ? OPER_SET_LIST_OPTION_ON : OPER_SET_LIST_OPTION_OFF; - source.Reply(index, "DEBUG"); - index = noexpire ? OPER_SET_LIST_OPTION_ON : OPER_SET_LIST_OPTION_OFF; - source.Reply(index, "NOEXPIRE"); + index = readonly ? _("%s is enabled") : _("%s is disabled"); + source.Reply(index.c_str(), "READONLY"); + index = debug ? _("%s is enabled") : _("%s is disabled"); + source.Reply(index.c_str(), "DEBUG"); + index = noexpire ? _("%s is enabled") : _("%s is disabled"); + source.Reply(index.c_str(), "NOEXPIRE"); return MOD_CONT; } @@ -47,16 +47,16 @@ class CommandOSSet : public Command { readonly = true; Log(LOG_ADMIN, u, this) << "READONLY ON"; - source.Reply(OPER_SET_READONLY_ON); + source.Reply(_("Services are now in \002read-only\002 mode.")); } else if (setting.equals_ci("OFF")) { readonly = false; Log(LOG_ADMIN, u, this) << "READONLY OFF"; - source.Reply(OPER_SET_READONLY_OFF); + source.Reply(_("Services are now in \002read-write\002 mode.")); } else - source.Reply(OPER_SET_READONLY_ERROR); + source.Reply(_("Setting for READONLY must be \002\002 or \002\002.")); return MOD_CONT; } @@ -78,23 +78,23 @@ class CommandOSSet : public Command * Rob **/ if (!Config->SuperAdmin) - source.Reply(OPER_SUPER_ADMIN_NOT_ENABLED); + source.Reply(_("SuperAdmin setting not enabled in services.conf")); else if (setting.equals_ci("ON")) { u->isSuperAdmin = 1; - source.Reply(OPER_SUPER_ADMIN_ON); + source.Reply(_("You are now a SuperAdmin")); Log(LOG_ADMIN, u, this) << "SUPERADMIN ON"; - ircdproto->SendGlobops(OperServ, GetString(OPER_SUPER_ADMIN_WALL_ON).c_str(), u->nick.c_str()); + ircdproto->SendGlobops(OperServ, GetString(NULL, _("%s is now a Super-Admin")).c_str(), u->nick.c_str()); } else if (setting.equals_ci("OFF")) { u->isSuperAdmin = 0; - source.Reply(OPER_SUPER_ADMIN_OFF); + source.Reply(_("You are no longer a SuperAdmin")); Log(LOG_ADMIN, u, this) << "SUPERADMIN OFF"; - ircdproto->SendGlobops(OperServ, GetString(OPER_SUPER_ADMIN_WALL_OFF).c_str(), u->nick.c_str()); + ircdproto->SendGlobops(OperServ, GetString(NULL, _("%s is no longer a Super-Admin")).c_str(), u->nick.c_str()); } else - source.Reply(OPER_SUPER_ADMIN_SYNTAX); + source.Reply(_("Setting for SuperAdmin must be \002\002 or \002\002 (must be enabled in services.conf)")); return MOD_CONT; } @@ -114,22 +114,22 @@ class CommandOSSet : public Command { debug = 1; Log(LOG_ADMIN, u, this) << "DEBUG ON"; - source.Reply(OPER_SET_DEBUG_ON); + source.Reply(_("Services are now in debug mode.")); } else if (setting.equals_ci("OFF") || (setting[0] == '0' && setting.is_number_only() && !convertTo<int>(setting))) { Log(LOG_ADMIN, u, this) << "DEBUG OFF"; debug = 0; - source.Reply(OPER_SET_DEBUG_OFF); + source.Reply(_("Services are now in non-debug mode.")); } else if (setting.is_number_only() && convertTo<int>(setting) > 0) { debug = convertTo<int>(setting); Log(LOG_ADMIN, u, this) << "DEBUG " << debug; - source.Reply(OPER_SET_DEBUG_LEVEL, debug); + source.Reply(_("Services are now in debug mode (level %d)."), debug); } else - source.Reply(OPER_SET_DEBUG_ERROR); + source.Reply(_("Setting for DEBUG must be \002\002, \002\002, or a positive number.")); return MOD_CONT; } @@ -149,16 +149,16 @@ class CommandOSSet : public Command { noexpire = true; Log(LOG_ADMIN, u, this) << "NOEXPIRE ON"; - source.Reply(OPER_SET_NOEXPIRE_ON); + source.Reply(_("Services are now in \002no expire\002 mode.")); } else if (setting.equals_ci("OFF")) { noexpire = false; Log(LOG_ADMIN, u, this) << "NOEXPIRE OFF"; - source.Reply(OPER_SET_NOEXPIRE_OFF); + source.Reply(_("Services are now in \002expire\002 mode.")); } else - source.Reply(OPER_SET_NOEXPIRE_ERROR); + source.Reply(_("Setting for NOEXPIRE must be \002\002 or \002\002.")); return MOD_CONT; } @@ -182,7 +182,7 @@ class CommandOSSet : public Command else if (option.equals_ci("NOEXPIRE")) return this->DoSetNoExpire(source, params); else - source.Reply(OPER_SET_UNKNOWN_OPTION, option.c_str()); + source.Reply(_("Unknown option \002%s\002."), option.c_str()); return MOD_CONT; } @@ -190,29 +190,57 @@ class CommandOSSet : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { if (subcommand.empty()) - source.Reply(OPER_HELP_SET); + source.Reply(_("Syntax: \002SET \037option\037 \037setting\037\002\n" + "Sets various global Services options. Option names\n" + "currently defined are:\n" + " READONLY Set read-only or read-write mode\n" + " DEBUG Activate or deactivate debug mode\n" + " NOEXPIRE Activate or deactivate no expire mode\n" + " SUPERADMIN Activate or deactivate super-admin mode\n" + " LIST List the options")); else if (subcommand.equals_ci("LIST")) - source.Reply(OPER_HELP_SET_LIST); + source.Reply(_("Syntax: \002SET LIST\n" + "Display the various %S settings")); else if (subcommand.equals_ci("READONLY")) - source.Reply(OPER_HELP_SET_READONLY); + source.Reply(_("Syntax: \002SET READONLY {ON | OFF}\002\n" + " \n" + "Sets read-only mode on or off. In read-only mode, normal\n" + "users will not be allowed to modify any Services data,\n" + "including channel and nickname access lists, etc. IRCops\n" + "with sufficient Services privileges will be able to modify\n" + "Services' AKILL list and drop or forbid nicknames and\n" + "channels, but any such changes will not be saved unless\n" + "read-only mode is deactivated before Services is terminated\n" + "or restarted.\n" + " \n" + "This option is equivalent to the command-line option\n" + "\002-readonly\002.")); else if (subcommand.equals_ci("NOEXPIRE")) - source.Reply(OPER_HELP_SET_NOEXPIRE); + source.Reply(_("Syntax: \002SET NOEXPIRE {ON | OFF}\002\n" + "Sets no expire mode on or off. In no expire mode, nicks,\n" + "channels, akills and exceptions won't expire until the\n" + "option is unset.\n" + "This option is equivalent to the command-line option\n" + "\002-noexpire\002.")); else if (subcommand.equals_ci("SUPERADMIN")) - source.Reply(OPER_HELP_SET_SUPERADMIN); + source.Reply(_("Syntax: \002SET SUPERADMIN {ON | OFF}\002\n" + "Setting this will grant you extra privileges such as the\n" + "ability to be \"founder\" on all channel's etc...\n" + "This option is \002not\002 persistent, and should only be used when\n" + "needed, and set back to OFF when no longer needed.")); else return false; - return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "SET", OPER_SET_SYNTAX); + SyntaxError(source, "SET", _("SET \037option\037 \037setting\037")); } void OnServHelp(CommandSource &source) { - source.Reply(OPER_HELP_CMD_SET); + source.Reply(_(" SET Set various global Services options")); } }; diff --git a/modules/core/os_shutdown.cpp b/modules/core/os_shutdown.cpp index 45eb205d1..7f15d5169 100644 --- a/modules/core/os_shutdown.cpp +++ b/modules/core/os_shutdown.cpp @@ -33,13 +33,15 @@ class CommandOSShutdown : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(OPER_HELP_SHUTDOWN); + source.Reply(_("Syntax: \002SHUTDOWN\002\n" + " \n" + "Causes Services to save all databases and then shut down.")); return true; } void OnServHelp(CommandSource &source) { - source.Reply(OPER_HELP_CMD_SHUTDOWN); + source.Reply(_(" SHUTDOWN Terminate the Services program with save")); } }; diff --git a/modules/core/os_snline.cpp b/modules/core/os_snline.cpp index 9ea88ec5e..97d1911d7 100644 --- a/modules/core/os_snline.cpp +++ b/modules/core/os_snline.cpp @@ -26,11 +26,11 @@ class SNLineDelCallback : public NumberList ~SNLineDelCallback() { if (!Deleted) - source.Reply(OPER_SNLINE_NO_MATCH); + source.Reply(_("No matching entries on the SNLINE list.")); else if (Deleted == 1) - source.Reply(OPER_SNLINE_DELETED_ONE); + source.Reply(_("Deleted 1 entry from the SNLINE list.")); else - source.Reply(OPER_SNLINE_DELETED_SEVERAL, Deleted); + source.Reply(_("Deleted %d entries from the SNLINE list."), Deleted); } void HandleNumber(unsigned Number) @@ -66,7 +66,7 @@ class SNLineListCallback : public NumberList ~SNLineListCallback() { if (!SentHeader) - source.Reply(OPER_SNLINE_NO_MATCH); + source.Reply(_("No matching entries on the SNLINE list.")); } virtual void HandleNumber(unsigned Number) @@ -82,7 +82,7 @@ class SNLineListCallback : public NumberList if (!SentHeader) { SentHeader = true; - source.Reply(OPER_SNLINE_LIST_HEADER); + source.Reply(_("Current SNLINE list:\n Num Mask Reason")); } DoList(source, x, Number - 1); @@ -90,7 +90,7 @@ class SNLineListCallback : public NumberList static void DoList(CommandSource &source, XLine *x, unsigned Number) { - source.Reply(OPER_LIST_FORMAT, Number + 1, x->Mask.c_str(), x->Reason.c_str()); + source.Reply(LanguageString::OPER_LIST_FORMAT, Number + 1, x->Mask.c_str(), x->Reason.c_str()); } }; @@ -114,7 +114,7 @@ class SNLineViewCallback : public SNLineListCallback if (!SentHeader) { SentHeader = true; - source.Reply(OPER_SNLINE_VIEW_HEADER); + source.Reply(_("Current SNLINE list:")); } DoList(source, x, Number - 1); @@ -123,7 +123,7 @@ class SNLineViewCallback : public SNLineListCallback static void DoList(CommandSource &source, XLine *x, unsigned Number) { Anope::string expirebuf = expire_left(source.u->Account(), x->Expires); - source.Reply(OPER_VIEW_FORMAT, Number + 1, x->Mask.c_str(), x->By.c_str(), do_strftime(x->Created).c_str(), expirebuf.c_str(), x->Reason.c_str()); + source.Reply(LanguageString::OPER_VIEW_FORMAT, Number + 1, x->Mask.c_str(), x->By.c_str(), do_strftime(x->Created).c_str(), expirebuf.c_str(), x->Reason.c_str()); } }; @@ -154,7 +154,7 @@ class CommandOSSNLine : public Command /* Do not allow less than a minute expiry time */ if (expires && expires < 60) { - source.Reply(BAD_EXPIRY_TIME); + source.Reply(LanguageString::BAD_EXPIRY_TIME); return MOD_CONT; } else if (expires > 0) @@ -197,7 +197,7 @@ class CommandOSSNLine : public Command if (percent > 95) { - source.Reply(USERHOST_MASK_TOO_WIDE, mask.c_str()); + source.Reply(LanguageString::USERHOST_MASK_TOO_WIDE, mask.c_str()); Log(LOG_ADMIN, u, this) << "tried to SNLine " << percent << "% of the network (" << affected << " users)"; return MOD_CONT; } @@ -207,7 +207,7 @@ class CommandOSSNLine : public Command if (!x) return MOD_CONT; - source.Reply(OPER_SNLINE_ADDED, mask.c_str()); + source.Reply(_("\002%s\002 added to the SNLINE list."), mask.c_str()); if (Config->WallOSSNLine) { @@ -243,7 +243,7 @@ class CommandOSSNLine : public Command } if (readonly) - source.Reply(READ_ONLY_MODE); + source.Reply(LanguageString::READ_ONLY_MODE); } else @@ -258,7 +258,7 @@ class CommandOSSNLine : public Command if (SNLine->GetList().empty()) { - source.Reply(OPER_SNLINE_LIST_EMPTY); + source.Reply(_("SNLINE list is empty.")); return MOD_CONT; } @@ -281,18 +281,18 @@ class CommandOSSNLine : public Command if (!x) { - source.Reply(OPER_SNLINE_NOT_FOUND, mask.c_str()); + source.Reply(_("\002%s\002 not found on the SNLINE list."), mask.c_str()); return MOD_CONT; } FOREACH_MOD(I_OnDelXLine, OnDelXLine(u, x, X_SNLINE)); SNLineDelCallback::DoDel(source, x); - source.Reply(OPER_SNLINE_DELETED, mask.c_str()); + source.Reply(_("\002%s\002 deleted from the SNLINE list."), mask.c_str()); } if (readonly) - source.Reply(READ_ONLY_MODE); + source.Reply(LanguageString::READ_ONLY_MODE); return MOD_CONT; } @@ -301,7 +301,7 @@ class CommandOSSNLine : public Command { if (SNLine->GetList().empty()) { - source.Reply(OPER_SNLINE_LIST_EMPTY); + source.Reply(_("SNLINE list is empty.")); return MOD_CONT; } @@ -325,7 +325,7 @@ class CommandOSSNLine : public Command if (!SentHeader) { SentHeader = true; - source.Reply(OPER_SNLINE_LIST_HEADER); + source.Reply(_("Current SNLINE list:\n Num Mask Reason")); } SNLineListCallback::DoList(source, x, i); @@ -333,9 +333,9 @@ class CommandOSSNLine : public Command } if (!SentHeader) - source.Reply(OPER_SNLINE_NO_MATCH); + source.Reply(_("No matching entries on the SNLINE list.")); else - source.Reply(END_OF_ANY_LIST, "SNLine"); + source.Reply(LanguageString::END_OF_ANY_LIST, "SNLine"); } return MOD_CONT; @@ -345,7 +345,7 @@ class CommandOSSNLine : public Command { if (SNLine->GetList().empty()) { - source.Reply(OPER_SNLINE_LIST_EMPTY); + source.Reply(_("SNLINE list is empty.")); return MOD_CONT; } @@ -369,7 +369,7 @@ class CommandOSSNLine : public Command if (!SentHeader) { SentHeader = true; - source.Reply(OPER_SNLINE_VIEW_HEADER); + source.Reply(_("Current SNLINE list:")); } SNLineViewCallback::DoList(source, x, i); @@ -377,7 +377,7 @@ class CommandOSSNLine : public Command } if (!SentHeader) - source.Reply(OPER_SNLINE_NO_MATCH); + source.Reply(_("No matching entries on the SNLINE list.")); } return MOD_CONT; @@ -388,7 +388,7 @@ class CommandOSSNLine : public Command User *u = source.u; FOREACH_MOD(I_OnDelXLine, OnDelXLine(u, NULL, X_SNLINE)); SNLine->Clear(); - source.Reply(OPER_SNLINE_CLEAR); + source.Reply(_("The SNLINE list has been cleared.")); return MOD_CONT; } @@ -419,18 +419,60 @@ class CommandOSSNLine : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(OPER_HELP_SNLINE); + source.Reply(_("Syntax: \002SNLINE ADD [+\037expiry\037] \037mask\037:\037reason\037\002\n" + " \002SNLINE DEL {\037mask\037 | \037entry-num\037 | \037list\037}\002\n" + " \002SNLINE LIST [\037mask\037 | \037list\037]\002\n" + " \002SNLINE VIEW [\037mask\037 | \037list\037]\002\n" + " \002SNLINE CLEAR\002\n" + " \n" + "Allows Services operators to manipulate the SNLINE list. If\n" + "a user with a realname matching an SNLINE mask attempts to \n" + "connect, Services will not allow it to pursue his IRC\n" + "session.\n" + " \n" + "\002SNLINE ADD\002 adds the given realname mask to the SNLINE\n" + "list for the given reason (which \002must\002 be given).\n" + "\037expiry\037 is specified as an integer followed by one of \037d\037 \n" + "(days), \037h\037 (hours), or \037m\037 (minutes). Combinations (such as \n" + "\0371h30m\037) are not permitted. If a unit specifier is not \n" + "included, the default is days (so \037+30\037 by itself means 30 \n" + "days). To add an SNLINE which does not expire, use \037+0\037. If the\n" + "realname mask to be added starts with a \037+\037, an expiry time must\n" + "be given, even if it is the same as the default. The\n" + "current SNLINE default expiry time can be found with the\n" + "\002STATS AKILL\002 command.\n" + "Note: because the realname mask may contain spaces, the\n" + "separator between it and the reason is a colon.\n" + " \n" + "The \002SNLINE DEL\002 command removes the given mask from the\n" + "SNLINE list if it is present. If a list of entry numbers is \n" + "given, those entries are deleted. (See the example for LIST \n" + "below.)\n" + " \n" + "The \002SNLINE LIST\002 command displays the SNLINE list. \n" + "If a wildcard mask is given, only those entries matching the\n" + "mask are displayed. If a list of entry numbers is given,\n" + "only those entries are shown; for example:\n" + " \002SNLINE LIST 2-5,7-9\002\n" + " Lists SNLINE entries numbered 2 through 5 and 7 \n" + " through 9.\n" + " \n" + "\002SNLINE VIEW\002 is a more verbose version of \002SNLINE LIST\002, and \n" + "will show who added an SNLINE, the date it was added, and when \n" + "it expires, as well as the realname mask and reason.\n" + " \n" + "\002SNLINE CLEAR\002 clears all entries of the SNLINE list.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "SNLINE", OPER_SNLINE_SYNTAX); + SyntaxError(source, "SNLINE", _("SNLINE {ADD | DEL | LIST | VIEW | CLEAR} [[+\037expiry\037] {\037mask\037 | \037entry-list\037}[:\037reason\037]]")); } void OnServHelp(CommandSource &source) { - source.Reply(OPER_HELP_CMD_SNLINE); + source.Reply(_(" SNLINE Manipulate the SNLINE list")); } }; diff --git a/modules/core/os_sqline.cpp b/modules/core/os_sqline.cpp index dbf6dcbe4..4117ebf57 100644 --- a/modules/core/os_sqline.cpp +++ b/modules/core/os_sqline.cpp @@ -25,11 +25,11 @@ class SQLineDelCallback : public NumberList ~SQLineDelCallback() { if (!Deleted) - source.Reply(OPER_SQLINE_NO_MATCH); + source.Reply(_("No matching entries on the SQLINE list.")); else if (Deleted == 1) - source.Reply(OPER_SQLINE_DELETED_ONE); + source.Reply(_("Deleted 1 entry from the SQLINE list.")); else - source.Reply(OPER_SQLINE_DELETED_SEVERAL, Deleted); + source.Reply(_("Deleted %d entries from the SQLINE list."), Deleted); } void HandleNumber(unsigned Number) @@ -65,7 +65,7 @@ class SQLineListCallback : public NumberList ~SQLineListCallback() { if (!SentHeader) - source.Reply(OPER_SQLINE_NO_MATCH); + source.Reply(_("No matching entries on the SQLINE list.")); } virtual void HandleNumber(unsigned Number) @@ -81,7 +81,7 @@ class SQLineListCallback : public NumberList if (!SentHeader) { SentHeader = true; - source.Reply(OPER_SQLINE_LIST_HEADER); + source.Reply(_("Current SQLINE list:\n Num Mask Reason")); } DoList(source, x, Number - 1); @@ -89,7 +89,7 @@ class SQLineListCallback : public NumberList static void DoList(CommandSource &source, XLine *x, unsigned Number) { - source.Reply(OPER_LIST_FORMAT, Number + 1, x->Mask.c_str(), x->Reason.c_str()); + source.Reply(LanguageString::OPER_LIST_FORMAT, Number + 1, x->Mask.c_str(), x->Reason.c_str()); } }; @@ -113,7 +113,7 @@ class SQLineViewCallback : public SQLineListCallback if (!SentHeader) { SentHeader = true; - source.Reply(OPER_SQLINE_VIEW_HEADER); + source.Reply(_("Current SQLINE list:")); } DoList(source, x, Number); @@ -122,7 +122,7 @@ class SQLineViewCallback : public SQLineListCallback static void DoList(CommandSource &source, XLine *x, unsigned Number) { Anope::string expirebuf = expire_left(source.u->Account(), x->Expires); - source.Reply(OPER_VIEW_FORMAT, Number + 1, x->Mask.c_str(), x->By.c_str(), do_strftime(x->Created).c_str(), expirebuf.c_str(), x->Reason.c_str()); + source.Reply(LanguageString::OPER_VIEW_FORMAT, Number + 1, x->Mask.c_str(), x->By.c_str(), do_strftime(x->Created).c_str(), expirebuf.c_str(), x->Reason.c_str()); } }; @@ -153,7 +153,7 @@ class CommandOSSQLine : public Command /* Do not allow less than a minute expiry time */ if (expires && expires < 60) { - source.Reply(BAD_EXPIRY_TIME); + source.Reply(LanguageString::BAD_EXPIRY_TIME); return MOD_CONT; } else if (expires > 0) @@ -178,7 +178,7 @@ class CommandOSSQLine : public Command if (percent > 95) { - source.Reply(USERHOST_MASK_TOO_WIDE, mask.c_str()); + source.Reply(LanguageString::USERHOST_MASK_TOO_WIDE, mask.c_str()); Log(LOG_ADMIN, u, this) << "tried to SQLine " << percent << "% of the network (" << affected << " users)"; return MOD_CONT; } @@ -187,7 +187,7 @@ class CommandOSSQLine : public Command if (!x) return MOD_CONT; - source.Reply(OPER_SQLINE_ADDED, mask.c_str()); + source.Reply(_("\002%s\002 added to the SQLINE list."), mask.c_str()); if (Config->WallOSSQLine) { @@ -223,7 +223,7 @@ class CommandOSSQLine : public Command } if (readonly) - source.Reply(READ_ONLY_MODE); + source.Reply(LanguageString::READ_ONLY_MODE); } else @@ -238,7 +238,7 @@ class CommandOSSQLine : public Command if (SQLine->GetList().empty()) { - source.Reply(OPER_SQLINE_LIST_EMPTY); + source.Reply(_("SQLINE list is empty.")); return MOD_CONT; } @@ -261,18 +261,18 @@ class CommandOSSQLine : public Command if (!x) { - source.Reply(OPER_SQLINE_NOT_FOUND, mask.c_str()); + source.Reply(_("\002%s\002 not found on the SQLINE list."), mask.c_str()); return MOD_CONT; } FOREACH_MOD(I_OnDelXLine, OnDelXLine(u, x, X_SQLINE)); SQLineDelCallback::DoDel(source, x); - source.Reply(OPER_SQLINE_DELETED, mask.c_str()); + source.Reply(_("\002%s\002 deleted from the SQLINE list."), mask.c_str()); } if (readonly) - source.Reply(READ_ONLY_MODE); + source.Reply(LanguageString::READ_ONLY_MODE); return MOD_CONT; } @@ -281,7 +281,7 @@ class CommandOSSQLine : public Command { if (SQLine->GetList().empty()) { - source.Reply(OPER_SQLINE_LIST_EMPTY); + source.Reply(_("SQLINE list is empty.")); return MOD_CONT; } @@ -305,7 +305,7 @@ class CommandOSSQLine : public Command if (!SentHeader) { SentHeader = true; - source.Reply(OPER_SQLINE_LIST_HEADER); + source.Reply(_("Current SQLINE list:\n Num Mask Reason")); } SQLineListCallback::DoList(source, x, i); @@ -313,9 +313,9 @@ class CommandOSSQLine : public Command } if (!SentHeader) - source.Reply(OPER_SQLINE_NO_MATCH); + source.Reply(_("No matching entries on the SQLINE list.")); else - source.Reply(END_OF_ANY_LIST, "SQLine"); + source.Reply(LanguageString::END_OF_ANY_LIST, "SQLine"); } return MOD_CONT; @@ -325,7 +325,7 @@ class CommandOSSQLine : public Command { if (SQLine->GetList().empty()) { - source.Reply(OPER_SQLINE_LIST_EMPTY); + source.Reply(_("SQLINE list is empty.")); return MOD_CONT; } @@ -349,7 +349,7 @@ class CommandOSSQLine : public Command if (!SentHeader) { SentHeader = true; - source.Reply(OPER_SQLINE_VIEW_HEADER); + source.Reply(_("Current SQLINE list:")); } SQLineViewCallback::DoList(source, x, i); @@ -357,7 +357,7 @@ class CommandOSSQLine : public Command } if (!SentHeader) - source.Reply(OPER_SQLINE_NO_MATCH); + source.Reply(_("No matching entries on the SQLINE list.")); } return MOD_CONT; @@ -368,7 +368,7 @@ class CommandOSSQLine : public Command User *u = source.u; FOREACH_MOD(I_OnDelXLine, OnDelXLine(u, NULL, X_SQLINE)); SQLine->Clear(); - source.Reply(OPER_SQLINE_CLEAR); + source.Reply(_("The SQLINE list has been cleared.")); return MOD_CONT; } @@ -398,18 +398,61 @@ class CommandOSSQLine : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(OPER_HELP_SQLINE); + source.Reply(_("Syntax: \002SQLINE ADD [+\037expiry\037] \037mask\037 \037reason\037\002\n" + " \002SQLINE DEL {\037mask\037 | \037entry-num\037 | \037list\037}\002\n" + " \002SQLINE LIST [\037mask\037 | \037list\037]\002\n" + " \002SQLINE VIEW [\037mask\037 | \037list\037]\002\n" + " \002SQLINE CLEAR\002\n" + " \n" + "Allows Services operators to manipulate the SQLINE list. If\n" + "a user with a nick matching an SQLINE mask attempts to \n" + "connect, Services will not allow it to pursue his IRC\n" + "session.\n" + "If the first character of the mask is #, services will \n" + "prevent the use of matching channels (on IRCds that \n" + "support it).\n" + " \n" + "\002SQLINE ADD\002 adds the given (nick's) mask to the SQLINE\n" + "list for the given reason (which \002must\002 be given).\n" + "\037expiry\037 is specified as an integer followed by one of \037d\037 \n" + "(days), \037h\037 (hours), or \037m\037 (minutes). Combinations (such as \n" + "\0371h30m\037) are not permitted. If a unit specifier is not \n" + "included, the default is days (so \037+30\037 by itself means 30 \n" + "days). To add an SQLINE which does not expire, use \037+0\037. \n" + "If the mask to be added starts with a \037+\037, an expiry time \n" + "must be given, even if it is the same as the default. The\n" + "current SQLINE default expiry time can be found with the\n" + "\002STATS AKILL\002 command.\n" + " \n" + "The \002SQLINE DEL\002 command removes the given mask from the\n" + "SQLINE list if it is present. If a list of entry numbers is \n" + "given, those entries are deleted. (See the example for LIST \n" + "below.)\n" + " \n" + "The \002SQLINE LIST\002 command displays the SQLINE list. \n" + "If a wildcard mask is given, only those entries matching the\n" + "mask are displayed. If a list of entry numbers is given,\n" + "only those entries are shown; for example:\n" + " \002SQLINE LIST 2-5,7-9\002\n" + " Lists SQLINE entries numbered 2 through 5 and 7 \n" + " through 9.\n" + " \n" + "\002SQLINE VIEW\002 is a more verbose version of \002SQLINE LIST\002, and \n" + "will show who added an SQLINE, the date it was added, and when \n" + "it expires, as well as the mask and reason.\n" + " \n" + "\002SQLINE CLEAR\002 clears all entries of the SQLINE list.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "SQLINE", OPER_SQLINE_SYNTAX); + SyntaxError(source, "SQLINE", _("SQLINE {ADD | DEL | LIST | VIEW | CLEAR} [[+\037expiry\037] {\037nick\037 | \037mask\037 | \037entry-list\037} [\037reason\037]]")); } void OnServHelp(CommandSource &source) { - source.Reply(OPER_HELP_CMD_SQLINE); + source.Reply(_(" SQLINE Manipulate the SQLINE list")); } }; diff --git a/modules/core/os_staff.cpp b/modules/core/os_staff.cpp index 5b1af9ae1..1f6b60eb3 100644 --- a/modules/core/os_staff.cpp +++ b/modules/core/os_staff.cpp @@ -22,7 +22,7 @@ class CommandOSStaff : public Command CommandReturn Execute(CommandSource &source, const std::vector<Anope::string> ¶ms) { - source.Reply(OPER_STAFF_LIST_HEADER); + source.Reply(_("On Level Nick")); for (std::list<std::pair<Anope::string, Anope::string> >::iterator it = Config->Opers.begin(), it_end = Config->Opers.end(); it != it_end; ++it) { @@ -37,28 +37,30 @@ class CommandOSStaff : public Command User *u2 = *uit; if (na->nick.equals_ci(u2->nick)) - source.Reply(OPER_STAFF_FORMAT, '*', type.c_str(), u2->nick.c_str()); + source.Reply(_(" %c %s %s"), '*', type.c_str(), u2->nick.c_str()); else - source.Reply(OPER_STAFF_AFORMAT, '*', type.c_str(), na->nick.c_str(), u2->nick.c_str()); + source.Reply(_(" %c %s %s [%s]"), '*', type.c_str(), na->nick.c_str(), u2->nick.c_str()); } if (nc->Users.empty()) - source.Reply(OPER_STAFF_FORMAT, ' ', type.c_str(), na->nick.c_str()); + source.Reply(_(" %c %s %s"), ' ', type.c_str(), na->nick.c_str()); } } - source.Reply(END_OF_ANY_LIST, "Staff"); + source.Reply(LanguageString::END_OF_ANY_LIST, "Staff"); return MOD_CONT; } bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(OPER_HELP_STAFF); + source.Reply(_("Syntax: \002STAFF\002\n" + "Displays all Services Staff nicks along with level\n" + "and on-line status.")); return true; } void OnServHelp(CommandSource &source) { - source.Reply(OPER_HELP_CMD_STAFF); + source.Reply(_(" STAFF Display Services staff and online status")); } }; diff --git a/modules/core/os_stats.cpp b/modules/core/os_stats.cpp index cf972b7a6..96d0bcb75 100644 --- a/modules/core/os_stats.cpp +++ b/modules/core/os_stats.cpp @@ -41,81 +41,81 @@ class CommandOSStats : public Command { int timeout; /* AKILLs */ - source.Reply(OPER_STATS_AKILL_COUNT, SGLine->GetCount()); + source.Reply(_("Current number of AKILLs: \002%d\002"), SGLine->GetCount()); timeout = Config->AutokillExpiry + 59; if (timeout >= 172800) - source.Reply(OPER_STATS_AKILL_EXPIRE_DAYS, timeout / 86400); + source.Reply(_("Default AKILL expiry time: \002%d days\002"), timeout / 86400); else if (timeout >= 86400) - source.Reply(OPER_STATS_AKILL_EXPIRE_DAY); + source.Reply(_("Default AKILL expiry time: \0021 day\002")); else if (timeout >= 7200) - source.Reply(OPER_STATS_AKILL_EXPIRE_HOURS, timeout / 3600); + source.Reply(_("Default AKILL expiry time: \002%d hours\002"), timeout / 3600); else if (timeout >= 3600) - source.Reply(OPER_STATS_AKILL_EXPIRE_HOUR); + source.Reply(_("Default AKILL expiry time: \0021 hour\002")); else if (timeout >= 120) - source.Reply(OPER_STATS_AKILL_EXPIRE_MINS, timeout / 60); + source.Reply(_("Default AKILL expiry time: \002%d minutes\002"), timeout / 60); else if (timeout >= 60) - source.Reply(OPER_STATS_AKILL_EXPIRE_MIN); + source.Reply(_("Default AKILL expiry time: \0021 minute\002")); else - source.Reply(OPER_STATS_AKILL_EXPIRE_NONE); + source.Reply(_("Default AKILL expiry time: \002No expiration\002")); if (ircd->snline) { /* SNLINEs */ - source.Reply(OPER_STATS_SNLINE_COUNT, SNLine->GetCount()); + source.Reply(_("Current number of SNLINEs: \002%d\002"), SNLine->GetCount()); timeout = Config->SNLineExpiry + 59; if (timeout >= 172800) - source.Reply(OPER_STATS_SNLINE_EXPIRE_DAYS, timeout / 86400); + source.Reply(_("Default SNLINE expiry time: \002%d days\002"), timeout / 86400); else if (timeout >= 86400) - source.Reply(OPER_STATS_SNLINE_EXPIRE_DAY); + source.Reply(_("Default SNLINE expiry time: \0021 day\002")); else if (timeout >= 7200) - source.Reply(OPER_STATS_SNLINE_EXPIRE_HOURS, timeout / 3600); + source.Reply(_("Default SNLINE expiry time: \002%d hours\002"), timeout / 3600); else if (timeout >= 3600) - source.Reply(OPER_STATS_SNLINE_EXPIRE_HOUR); + source.Reply(_("Default SNLINE expiry time: \0021 hour\002")); else if (timeout >= 120) - source.Reply(OPER_STATS_SNLINE_EXPIRE_MINS, timeout / 60); + source.Reply(_("Default SNLINE expiry time: \002%d minutes\002"), timeout / 60); else if (timeout >= 60) - source.Reply(OPER_STATS_SNLINE_EXPIRE_MIN); + source.Reply(_("Default SNLINE expiry time: \0021 minute\002")); else - source.Reply(OPER_STATS_SNLINE_EXPIRE_NONE); + source.Reply(_("Default SNLINE expiry time: \002No expiration\002")); } if (ircd->sqline) { /* SQLINEs */ - source.Reply(OPER_STATS_SQLINE_COUNT, SQLine->GetCount()); + source.Reply(_("Current number of SQLINEs: \002%d\002"), SQLine->GetCount()); timeout = Config->SQLineExpiry + 59; if (timeout >= 172800) - source.Reply(OPER_STATS_SQLINE_EXPIRE_DAYS, timeout / 86400); + source.Reply(_("Default SQLINE expiry time: \002%d days\002"), timeout / 86400); else if (timeout >= 86400) - source.Reply(OPER_STATS_SQLINE_EXPIRE_DAY); + source.Reply(_("Default SQLINE expiry time: \0021 day\002")); else if (timeout >= 7200) - source.Reply(OPER_STATS_SQLINE_EXPIRE_HOURS, timeout / 3600); + source.Reply(_("Default SQLINE expiry time: \002%d hours\002"), timeout / 3600); else if (timeout >= 3600) - source.Reply(OPER_STATS_SQLINE_EXPIRE_HOUR); + source.Reply(_("Default SQLINE expiry time: \0021 hour\002")); else if (timeout >= 120) - source.Reply(OPER_STATS_SQLINE_EXPIRE_MINS, timeout / 60); + source.Reply(_("Default SQLINE expiry time: \002%d minutes\002"), timeout / 60); else if (timeout >= 60) - source.Reply(OPER_STATS_SQLINE_EXPIRE_MIN); + source.Reply(_("Default SQLINE expiry time: \0021 minute\002")); else - source.Reply(OPER_STATS_SQLINE_EXPIRE_NONE); + source.Reply(_("Default SQLINE expiry time: \002No expiration\002")); } if (ircd->szline) { /* SZLINEs */ - source.Reply(OPER_STATS_SZLINE_COUNT, SZLine->GetCount()); + source.Reply(_("Current number of SZLINEs: \002%d\002"), SZLine->GetCount()); timeout = Config->SZLineExpiry + 59; if (timeout >= 172800) - source.Reply(OPER_STATS_SZLINE_EXPIRE_DAYS, timeout / 86400); + source.Reply(_("Default SZLINE expiry time: \002%d days\002"), timeout / 86400); else if (timeout >= 86400) - source.Reply(OPER_STATS_SZLINE_EXPIRE_DAY); + source.Reply(_("Default SZLINE expiry time: \0021 day\002")); else if (timeout >= 7200) - source.Reply(OPER_STATS_SZLINE_EXPIRE_HOURS, timeout / 3600); + source.Reply(_("Default SZLINE expiry time: \002%d hours\002"), timeout / 3600); else if (timeout >= 3600) - source.Reply(OPER_STATS_SZLINE_EXPIRE_HOUR); + source.Reply(_("Default SZLINE expiry time: \0021 hour\002")); else if (timeout >= 120) - source.Reply(OPER_STATS_SZLINE_EXPIRE_MINS, timeout / 60); + source.Reply(_("Default SZLINE expiry time: \002%d minutes\002"), timeout / 60); else if (timeout >= 60) - source.Reply(OPER_STATS_SZLINE_EXPIRE_MIN); + source.Reply(_("Default SZLINE expiry time: \0021 minute\002")); else - source.Reply(OPER_STATS_SZLINE_EXPIRE_NONE); + source.Reply(_("Default SZLINE expiry time: \002No expiration\002")); } return MOD_CONT; } @@ -123,7 +123,7 @@ class CommandOSStats : public Command CommandReturn DoStatsReset(CommandSource &source) { maxusercnt = usercnt; - source.Reply(OPER_STATS_RESET); + source.Reply(_("Statistics reset.")); return MOD_CONT; } @@ -131,43 +131,43 @@ class CommandOSStats : public Command { time_t uptime = Anope::CurTime - start_time; int days = uptime / 86400, hours = (uptime / 3600) % 24, mins = (uptime / 60) % 60, secs = uptime % 60; - source.Reply(OPER_STATS_CURRENT_USERS, usercnt, opcnt); - source.Reply(OPER_STATS_MAX_USERS, maxusercnt, do_strftime(maxusertime).c_str()); + source.Reply(_("Current users: \002%d\002 (\002%d\002 ops)"), usercnt, opcnt); + source.Reply(_("Maximum users: \002%d\002 (%s)"), maxusercnt, do_strftime(maxusertime).c_str()); if (days > 1) - source.Reply(OPER_STATS_UPTIME_DHMS, days, hours, mins, secs); + source.Reply(_("Services up \002%d\002 days, \002%02d:%02d\002"), days, hours, mins, secs); else if (days == 1) - source.Reply(OPER_STATS_UPTIME_1DHMS, days, hours, mins, secs); + source.Reply(_("Services up OPER_STATS_UPTIME_1\002%dOPER_STATS_UPTIME_1\002 day, OPER_STATS_UPTIME_1\002%02d:%02dOPER_STATS_UPTIME_1\002"), days, hours, mins, secs); else { if (hours > 1) { if (mins != 1) - source.Reply(OPER_STATS_UPTIME_HMS, hours, mins); + source.Reply(_("Services up \002%d\002 hours, \002%d\002 minutes"), hours, mins); else - source.Reply(OPER_STATS_UPTIME_H1MS, hours, mins, secs); + source.Reply(_("Services up OPER_STATS_UPTIME_H1\002%dOPER_STATS_UPTIME_H1\002 hours, OPER_STATS_UPTIME_H1\002%dOPER_STATS_UPTIME_H1\002 minute"), hours, mins, secs); } else if (hours == 1) { if (mins != 1) - source.Reply(OPER_STATS_UPTIME_1HMS, hours, mins, secs); + source.Reply(_("Services up OPER_STATS_UPTIME_1\002%dOPER_STATS_UPTIME_1\002 hour, OPER_STATS_UPTIME_1\002%dOPER_STATS_UPTIME_1\002 minutes"), hours, mins, secs); else - source.Reply(OPER_STATS_UPTIME_1H1MS, hours, mins, secs); + source.Reply(_("Services up OPER_STATS_UPTIME_1H1\002%dOPER_STATS_UPTIME_1H1\002 hour, OPER_STATS_UPTIME_1H1\002%dOPER_STATS_UPTIME_1H1\002 minute"), hours, mins, secs); } else { if (mins != 1) { if (secs != 1) - source.Reply(OPER_STATS_UPTIME_MS, mins, secs); + source.Reply(_("Services up \002%d\002 minutes, \002%d\002 seconds"), mins, secs); else - source.Reply(OPER_STATS_UPTIME_M1S, mins, secs); + source.Reply(_("Services up OPER_STATS_UPTIME_M1\002%dOPER_STATS_UPTIME_M1\002 minutes, OPER_STATS_UPTIME_M1\002%dOPER_STATS_UPTIME_M1\002 second"), mins, secs); } else { if (secs != 1) - source.Reply(OPER_STATS_UPTIME_1MS, mins, secs); + source.Reply(_("Services up OPER_STATS_UPTIME_1\002%dOPER_STATS_UPTIME_1\002 minute, OPER_STATS_UPTIME_1\002%dOPER_STATS_UPTIME_1\002 seconds"), mins, secs); else - source.Reply(OPER_STATS_UPTIME_1M1S, mins, secs); + source.Reply(_("Services up OPER_STATS_UPTIME_1M1\002%dOPER_STATS_UPTIME_1M1\002 minute, OPER_STATS_UPTIME_1M1\002%dOPER_STATS_UPTIME_1M1\002 second"), mins, secs); } } } @@ -186,9 +186,9 @@ class CommandOSStats : public Command if (!buf.empty()) buf.erase(buf.begin()); - source.Reply(OPER_STATS_UPLINK_SERVER, Me->GetLinks().front()->GetName().c_str()); - source.Reply(OPER_STATS_UPLINK_CAPAB, buf.c_str()); - source.Reply(OPER_STATS_UPLINK_SERVER_COUNT, stats_count_servers(Me->GetLinks().front())); + source.Reply(_("Uplink server: %s"), Me->GetLinks().front()->GetName().c_str()); + source.Reply(_("Uplink capab: %s"), buf.c_str()); + source.Reply(_("Servers found: %d"), stats_count_servers(Me->GetLinks().front())); return MOD_CONT; } @@ -196,33 +196,33 @@ class CommandOSStats : public Command { long count, mem; - source.Reply(OPER_STATS_BYTES_READ, TotalRead / 1024); - source.Reply(OPER_STATS_BYTES_WRITTEN, TotalWritten / 1024); + source.Reply(_("Bytes read : %5d kB"), TotalRead / 1024); + source.Reply(_("Bytes written : %5d kB"), TotalWritten / 1024); get_user_stats(count, mem); - source.Reply(OPER_STATS_USER_MEM, count, (mem + 512) / 1024); + source.Reply(_("User : \002%6d\002 records, \002%5d\002 kB"), count, (mem + 512) / 1024); get_channel_stats(&count, &mem); - source.Reply(OPER_STATS_CHANNEL_MEM, count, (mem + 512) / 1024); + source.Reply(_("Channel : \002%6d\002 records, \002%5d\002 kB"), count, (mem + 512) / 1024); get_core_stats(count, mem); - source.Reply(OPER_STATS_GROUPS_MEM, count, (mem + 512) / 1024); + source.Reply(_("NS Groups : \002%6d\002 records, \002%5d\002 kB"), count, (mem + 512) / 1024); get_aliases_stats(count, mem); - source.Reply(OPER_STATS_ALIASES_MEM, count, (mem + 512) / 1024); + source.Reply(_("NS Aliases : \002%6d\002 records, \002%5d\002 kB"), count, (mem + 512) / 1024); get_chanserv_stats(&count, &mem); - source.Reply(OPER_STATS_CHANSERV_MEM, count, (mem + 512) / 1024); + source.Reply(_("ChanServ : \002%6d\002 records, \002%5d\002 kB"), count, (mem + 512) / 1024); if (!Config->s_BotServ.empty()) { get_botserv_stats(&count, &mem); - source.Reply(OPER_STATS_BOTSERV_MEM, count, (mem + 512) / 1024); + source.Reply(_("BotServ : \002%6d\002 records, \002%5d\002 kB"), count, (mem + 512) / 1024); } if (!Config->s_HostServ.empty()) { get_hostserv_stats(&count, &mem); - source.Reply(OPER_STATS_HOSTSERV_MEM, count, (mem + 512) / 1024); + source.Reply(_("HostServ : \002%6d\002 records, \002%5d\002 kB"), count, (mem + 512) / 1024); } get_operserv_stats(&count, &mem); - source.Reply(OPER_STATS_OPERSERV_MEM, count, (mem + 512) / 1024); + source.Reply(_("OperServ : \002%6d\002 records, \002%5d\002 kB"), count, (mem + 512) / 1024); get_session_stats(count, mem); - source.Reply(OPER_STATS_SESSIONS_MEM, count, (mem + 512) / 1024); + source.Reply(_("Sessions : \002%6d\002 records, \002%5d\002 kB"), count, (mem + 512) / 1024); return MOD_CONT; } @@ -242,7 +242,7 @@ class CommandOSStats : public Command else if (extra.equals_ci("RESET")) return this->DoStatsReset(source); else if (!extra.equals_ci("MEMORY") && !extra.equals_ci("UPLINK")) - source.Reply(OPER_STATS_UNKNOWN_OPTION, extra.c_str()); + source.Reply(_("Unknown STATS option \002%s\002."), extra.c_str()); } if (extra.empty() || (!extra.equals_ci("MEMORY") && !extra.equals_ci("UPLINK"))) @@ -259,13 +259,34 @@ class CommandOSStats : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(OPER_HELP_STATS); + source.Reply(_("Syntax: \002STATS [AKILL | ALL | RESET | MEMORY | UPLINK]\002\n" + " \n" + "Without any option, shows the current number of users and\n" + "IRCops online (excluding Services), the highest number of\n" + "users online since Services was started, and the length of\n" + "time Services has been running.\n" + " \n" + "With the \002AKILL\002 option, displays the current size of the\n" + "AKILL list and the current default expiry time.\n" + " \n" + "The \002RESET\002 option currently resets the maximum user count\n" + "to the number of users currently present on the network.\n" + " \n" + "The \002MEMORY\002 option displays information on the memory\n" + "usage of Services. Using this option can freeze Services for\n" + "a short period of time on large networks; don't overuse it!\n" + " \n" + "The \002UPLINK\002 option displays information about the current\n" + "server Anope uses as an uplink to the network.\n" + " \n" + "The \002ALL\002 displays the user and uptime statistics, and\n" + "everything you'd see with \002MEMORY\002 and \002UPLINK\002 options.")); return true; } void OnServHelp(CommandSource &source) { - source.Reply(OPER_HELP_CMD_STATS); + source.Reply(_(" STATS Show status of Services and network")); } }; diff --git a/modules/core/os_svsnick.cpp b/modules/core/os_svsnick.cpp index 1e59aea2e..30a06310a 100644 --- a/modules/core/os_svsnick.cpp +++ b/modules/core/os_svsnick.cpp @@ -32,33 +32,33 @@ class CommandOSSVSNick : public Command /* Truncate long nicknames to NICKMAX-2 characters */ if (newnick.length() > Config->NickLen) { - source.Reply(NICK_X_TRUNCATED, newnick.c_str(), Config->NickLen, newnick.c_str()); + source.Reply(_("Nick \002%s\002 was truncated to %d characters."), newnick.c_str(), Config->NickLen, newnick.c_str()); newnick = params[1].substr(0, Config->NickLen); } /* Check for valid characters */ if (newnick[0] == '-' || isdigit(newnick[0])) { - source.Reply(NICK_X_ILLEGAL, newnick.c_str()); + source.Reply(_("Nick \002%s\002 is an illegal nickname and cannot be used."), newnick.c_str()); return MOD_CONT; } for (unsigned i = 0, end = newnick.length(); i < end; ++i) if (!isvalidnick(newnick[i])) { - source.Reply(NICK_X_ILLEGAL, newnick.c_str()); + source.Reply(_("Nick \002%s\002 is an illegal nickname and cannot be used."), newnick.c_str()); return MOD_CONT; } /* Check for a nick in use or a forbidden/suspended nick */ if (!(u2 = finduser(nick))) - source.Reply(NICK_X_NOT_IN_USE, nick.c_str()); + source.Reply(LanguageString::NICK_X_NOT_IN_USE, nick.c_str()); else if (finduser(newnick)) - source.Reply(NICK_X_IN_USE, newnick.c_str()); + source.Reply(_("Nick \002%s\002 is currently in use."), newnick.c_str()); else if ((na = findnick(newnick)) && na->HasFlag(NS_FORBIDDEN)) - source.Reply(NICK_X_FORBIDDEN, newnick.c_str()); + source.Reply(LanguageString::NICK_X_FORBIDDEN, newnick.c_str()); else { - source.Reply(OPER_SVSNICK_NEWNICK, nick.c_str(), newnick.c_str()); + source.Reply(_("The nick \002%s\002 is now being changed to \002%s\002."), nick.c_str(), newnick.c_str()); ircdproto->SendGlobops(OperServ, "%s used SVSNICK to change %s to %s", u->nick.c_str(), nick.c_str(), newnick.c_str()); ircdproto->SendForceNickChange(u2, newnick, Anope::CurTime); } @@ -67,18 +67,20 @@ class CommandOSSVSNick : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(OPER_HELP_SVSNICK); + source.Reply(_("Syntax: \002SVSNICK \037nick\037 \037newnick\037\002\n" + " \n" + "Forcefully changes a user's nickname from nick to newnick.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "SVSNICK", OPER_SVSNICK_SYNTAX); + SyntaxError(source, "SVSNICK", _("SVSNICK \037nick\037 \037newnick\037 ")); } void OnServHelp(CommandSource &source) { - source.Reply(OPER_HELP_CMD_SVSNICK); + source.Reply(_(" SVSNICK Forcefully change a user's nickname")); } }; diff --git a/modules/core/os_szline.cpp b/modules/core/os_szline.cpp index 4535335ed..5cc219291 100644 --- a/modules/core/os_szline.cpp +++ b/modules/core/os_szline.cpp @@ -25,11 +25,11 @@ class SZLineDelCallback : public NumberList ~SZLineDelCallback() { if (!Deleted) - source.Reply(OPER_SZLINE_NO_MATCH); + source.Reply(_("No matching entries on the SZLINE list.")); else if (Deleted == 1) - source.Reply(OPER_SZLINE_DELETED_ONE); + source.Reply(_("Deleted 1 entry from the SZLINE list.")); else - source.Reply(OPER_SZLINE_DELETED_SEVERAL, Deleted); + source.Reply(_("Deleted %d entries from the SZLINE list."), Deleted); } void HandleNumber(unsigned Number) @@ -65,7 +65,7 @@ class SZLineListCallback : public NumberList ~SZLineListCallback() { if (!SentHeader) - source.Reply(OPER_SZLINE_NO_MATCH); + source.Reply(_("No matching entries on the SZLINE list.")); } virtual void HandleNumber(unsigned Number) @@ -81,7 +81,7 @@ class SZLineListCallback : public NumberList if (!SentHeader) { SentHeader = true; - source.Reply(OPER_SZLINE_LIST_HEADER); + source.Reply(_("Current SZLINE list:\n Num Mask Reason")); } DoList(source, x, Number - 1); @@ -89,7 +89,7 @@ class SZLineListCallback : public NumberList static void DoList(CommandSource &source, XLine *x, unsigned Number) { - source.Reply(OPER_LIST_FORMAT, Number + 1, x->Mask.c_str(), x->Reason.c_str()); + source.Reply(LanguageString::OPER_LIST_FORMAT, Number + 1, x->Mask.c_str(), x->Reason.c_str()); } }; @@ -113,7 +113,7 @@ class SZLineViewCallback : public SZLineListCallback if (!SentHeader) { SentHeader = true; - source.Reply(OPER_SZLINE_VIEW_HEADER); + source.Reply(_("Current SZLINE list:")); } DoList(source, x, Number - 1); @@ -122,7 +122,7 @@ class SZLineViewCallback : public SZLineListCallback static void DoList(CommandSource &source, XLine *x, unsigned Number) { Anope::string expirebuf = expire_left(source.u->Account(), x->Expires); - source.Reply(OPER_VIEW_FORMAT, Number + 1, x->Mask.c_str(), x->By.c_str(), do_strftime(x->Created).c_str(), expirebuf.c_str(), x->Reason.c_str()); + source.Reply(LanguageString::OPER_VIEW_FORMAT, Number + 1, x->Mask.c_str(), x->By.c_str(), do_strftime(x->Created).c_str(), expirebuf.c_str(), x->Reason.c_str()); } }; @@ -153,7 +153,7 @@ class CommandOSSZLine : public Command /* Do not allow less than a minute expiry time */ if (expires && expires < 60) { - source.Reply(BAD_EXPIRY_TIME); + source.Reply(LanguageString::BAD_EXPIRY_TIME); return MOD_CONT; } else if (expires > 0) @@ -181,7 +181,7 @@ class CommandOSSZLine : public Command if (percent > 95) { - source.Reply(USERHOST_MASK_TOO_WIDE, mask.c_str()); + source.Reply(LanguageString::USERHOST_MASK_TOO_WIDE, mask.c_str()); Log(LOG_ADMIN, u, this) << "tried to SZLine " << percent << "% of the network (" << affected << " users)"; return MOD_CONT; } @@ -191,7 +191,7 @@ class CommandOSSZLine : public Command if (!x) return MOD_CONT; - source.Reply(OPER_SZLINE_ADDED, mask.c_str()); + source.Reply(_("\002%s\002 added to the SZLINE list."), mask.c_str()); if (Config->WallOSSZLine) { @@ -227,7 +227,7 @@ class CommandOSSZLine : public Command } if (readonly) - source.Reply(READ_ONLY_MODE); + source.Reply(LanguageString::READ_ONLY_MODE); } else @@ -242,7 +242,7 @@ class CommandOSSZLine : public Command if (SZLine->GetList().empty()) { - source.Reply(OPER_SZLINE_LIST_EMPTY); + source.Reply(_("SZLINE list is empty.")); return MOD_CONT; } @@ -265,18 +265,18 @@ class CommandOSSZLine : public Command if (!x) { - source.Reply(OPER_SZLINE_NOT_FOUND, mask.c_str()); + source.Reply(_("\002%s\002 not found on the SZLINE list."), mask.c_str()); return MOD_CONT; } FOREACH_MOD(I_OnDelXLine, OnDelXLine(u, x, X_SZLINE)); SZLineDelCallback::DoDel(source, x); - source.Reply(OPER_SZLINE_DELETED, mask.c_str()); + source.Reply(_("\002%s\002 deleted from the SZLINE list."), mask.c_str()); } if (readonly) - source.Reply(READ_ONLY_MODE); + source.Reply(LanguageString::READ_ONLY_MODE); return MOD_CONT; } @@ -285,7 +285,7 @@ class CommandOSSZLine : public Command { if (SZLine->GetList().empty()) { - source.Reply(OPER_SZLINE_LIST_EMPTY); + source.Reply(_("SZLINE list is empty.")); return MOD_CONT; } @@ -309,7 +309,7 @@ class CommandOSSZLine : public Command if (!SentHeader) { SentHeader = true; - source.Reply(OPER_SZLINE_LIST_HEADER); + source.Reply(_("Current SZLINE list:\n Num Mask Reason")); } SZLineListCallback::DoList(source, x, i); @@ -317,7 +317,7 @@ class CommandOSSZLine : public Command } if (!SentHeader) - source.Reply(OPER_SZLINE_NO_MATCH); + source.Reply(_("No matching entries on the SZLINE list.")); } return MOD_CONT; @@ -327,7 +327,7 @@ class CommandOSSZLine : public Command { if (SZLine->GetList().empty()) { - source.Reply(OPER_SZLINE_LIST_EMPTY); + source.Reply(_("SZLINE list is empty.")); return MOD_CONT; } @@ -351,7 +351,7 @@ class CommandOSSZLine : public Command if (!SentHeader) { SentHeader = true; - source.Reply(OPER_SZLINE_VIEW_HEADER); + source.Reply(_("Current SZLINE list:")); } SZLineViewCallback::DoList(source, x, i); @@ -359,7 +359,7 @@ class CommandOSSZLine : public Command } if (!SentHeader) - source.Reply(OPER_SZLINE_NO_MATCH); + source.Reply(_("No matching entries on the SZLINE list.")); } return MOD_CONT; @@ -370,7 +370,7 @@ class CommandOSSZLine : public Command User *u = source.u; FOREACH_MOD(I_OnDelXLine, OnDelXLine(u, NULL, X_SZLINE)); SZLine->Clear(); - source.Reply(OPER_SZLINE_CLEAR); + source.Reply(_("The SZLINE list has been cleared.")); return MOD_CONT; } @@ -401,18 +401,58 @@ class CommandOSSZLine : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(OPER_HELP_SZLINE); + source.Reply(_("Syntax: \002SZLINE ADD [+\037expiry\037] \037mask\037 \037reason\037\002\n" + " \002SZLINE DEL {\037mask\037 | \037entry-num\037 | \037list\037}\002\n" + " \002SZLINE LIST [\037mask\037 | \037list\037]\002\n" + " \002SZLINE VIEW [\037mask\037 | \037list\037]\002\n" + " \002SZLINE CLEAR\002\n" + " \n" + "Allows Services operators to manipulate the SZLINE list. If\n" + "a user with an IP matching an SZLINE mask attempts to \n" + "connect, Services will not allow it to pursue his IRC\n" + "session (and this, whether the IP has a PTR RR or not).\n" + " \n" + "\002SZLINE ADD\002 adds the given (nick's) IP mask to the SZLINE\n" + "list for the given reason (which \002must\002 be given).\n" + "\037expiry\037 is specified as an integer followed by one of \037d\037 \n" + "(days), \037h\037 (hours), or \037m\037 (minutes). Combinations (such as \n" + "\0371h30m\037) are not permitted. If a unit specifier is not \n" + "included, the default is days (so \037+30\037 by itself means 30 \n" + "days). To add an SZLINE which does not expire, use \037+0\037. If the\n" + "realname mask to be added starts with a \037+\037, an expiry time must\n" + "be given, even if it is the same as the default. The\n" + "current SZLINE default expiry time can be found with the\n" + "\002STATS AKILL\002 command.\n" + " \n" + "The \002SZLINE DEL\002 command removes the given mask from the\n" + "SZLINE list if it is present. If a list of entry numbers is \n" + "given, those entries are deleted. (See the example for LIST \n" + "below.)\n" + " \n" + "The \002SZLINE LIST\002 command displays the SZLINE list.\n" + "If a wildcard mask is given, only those entries matching the\n" + "mask are displayed. If a list of entry numbers is given,\n" + "only those entries are shown; for example:\n" + " \002SZLINE LIST 2-5,7-9\002\n" + " Lists SZLINE entries numbered 2 through 5 and 7 \n" + " through 9.\n" + " \n" + "\002SZLINE VIEW\002 is a more verbose version of \002SZLINE LIST\002, and \n" + "will show who added an SZLINE, the date it was added, and when\n" + "it expires, as well as the IP mask and reason.\n" + " \n" + "\002SZLINE CLEAR\002 clears all entries of the SZLINE list.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "SZLINE", OPER_SZLINE_SYNTAX); + SyntaxError(source, "SZLINE", _("SZLINE {ADD | DEL | LIST | VIEW | CLEAR} [[+\037expiry\037] {\037nick\037 | \037mask\037 | \037entry-list\037} [\037reason\037]]")); } void OnServHelp(CommandSource &source) { - source.Reply(OPER_HELP_CMD_SZLINE); + source.Reply(_(" SZLINE Manipulate the SZLINE list")); } }; diff --git a/modules/core/os_umode.cpp b/modules/core/os_umode.cpp index 106a9c4e4..046ec670b 100644 --- a/modules/core/os_umode.cpp +++ b/modules/core/os_umode.cpp @@ -38,13 +38,13 @@ class CommandOSUMode : public Command return MOD_CONT; } if (!(u2 = finduser(nick))) - source.Reply(NICK_X_NOT_IN_USE, nick.c_str()); + source.Reply(LanguageString::NICK_X_NOT_IN_USE, nick.c_str()); else { u2->SetModes(OperServ, "%s", modes.c_str()); - source.Reply(OPER_UMODE_SUCCESS, nick.c_str()); - u2->SendMessage(OperServ, OPER_UMODE_CHANGED, u->nick.c_str()); + source.Reply(_("Changed usermodes of \002%s\002."), nick.c_str()); + u2->SendMessage(OperServ, _("\002%s\002 changed your usermodes."), u->nick.c_str()); if (Config->WallOSMode) ircdproto->SendGlobops(OperServ, "\2%s\2 used UMODE on %s", u->nick.c_str(), nick.c_str()); @@ -54,18 +54,22 @@ class CommandOSUMode : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(OPER_HELP_UMODE); + source.Reply(_("Syntax: \002UMODE \037user\037 \037modes\037\002\n" + " \n" + "Allows Services Opers to set user modes for any user.\n" + "Parameters are the same as for the standard /MODE\n" + "command.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "UMODE", OPER_UMODE_SYNTAX); + SyntaxError(source, "UMODE", _("UMODE \037nick\037 \037modes\037")); } void OnServHelp(CommandSource &source) { - source.Reply(OPER_HELP_CMD_UMODE); + source.Reply(_(" UMODE Change a user's modes")); } }; diff --git a/modules/core/os_update.cpp b/modules/core/os_update.cpp index 414b7e973..1ea6d090b 100644 --- a/modules/core/os_update.cpp +++ b/modules/core/os_update.cpp @@ -22,20 +22,24 @@ class CommandOSUpdate : public Command CommandReturn Execute(CommandSource &source, const std::vector<Anope::string> ¶ms) { - source.Reply(OPER_UPDATING); + source.Reply(_("Updating databases.")); save_data = true; return MOD_CONT; } bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(OPER_HELP_UPDATE); + source.Reply(_("Syntax: \002UPDATE\002\n" + " \n" + "Causes Services to update all database files as soon as you\n" + "send the command.")); return true; } void OnServHelp(CommandSource &source) { - source.Reply(OPER_HELP_CMD_UPDATE); + source.Reply(_(" UPDATE Force the Services databases to be\n" + " updated on disk immediately")); } }; diff --git a/modules/core/os_userlist.cpp b/modules/core/os_userlist.cpp index 4f5c9d0f9..a4dac7a41 100644 --- a/modules/core/os_userlist.cpp +++ b/modules/core/os_userlist.cpp @@ -32,7 +32,8 @@ class CommandOSUserList : public Command if (!pattern.empty() && (c = findchan(pattern))) { - source.Reply(OPER_USERLIST_HEADER_CHAN, pattern.c_str()); + source.Reply(_("\002%s\002 users list:\n" + "Nick Mask"), pattern.c_str()); for (CUserList::iterator cuit = c->users.begin(), cuit_end = c->users.end(); cuit != cuit_end; ++cuit) { @@ -43,12 +44,13 @@ class CommandOSUserList : public Command if (!uc->user->HasMode(*it)) continue; - source.Reply(OPER_USERLIST_RECORD, uc->user->nick.c_str(), uc->user->GetIdent().c_str(), uc->user->GetDisplayedHost().c_str()); + source.Reply(_("%-20s %s@%s"), uc->user->nick.c_str(), uc->user->GetIdent().c_str(), uc->user->GetDisplayedHost().c_str()); } } else { - source.Reply(OPER_USERLIST_HEADER); + source.Reply(_("Users list:\n" + "Nick Mask")); for (patricia_tree<User *, ci::ci_char_traits>::iterator it(UserListByNick); it.next();) { @@ -64,23 +66,31 @@ class CommandOSUserList : public Command if (!u2->HasMode(*mit)) continue; } - source.Reply(OPER_USERLIST_RECORD, u2->nick.c_str(), u2->GetIdent().c_str(), u2->GetDisplayedHost().c_str()); + source.Reply(_("%-20s %s@%s"), u2->nick.c_str(), u2->GetIdent().c_str(), u2->GetDisplayedHost().c_str()); } } - source.Reply(OPER_USERLIST_END); + source.Reply(_("End of users list.")); return MOD_CONT; } bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(OPER_HELP_USERLIST); + source.Reply(_("Syntax: \002USERLIST [{\037pattern | channel\037} [\037INVISIBLE\037]]\002\n" + " \n" + "Lists all users currently online on the IRC network, whether their\n" + "nick is registered or not.\n" + " \n" + "If \002pattern\002 is given, lists only users that match it (it must be in\n" + "the format nick!user@host). If \002channel\002 is given, lists only users\n" + "that are on the given channel. If INVISIBLE is specified, only users\n" + "with the +i flag will be listed.")); return true; } void OnServHelp(CommandSource &source) { - source.Reply(OPER_HELP_CMD_USERLIST); + source.Reply(_(" USERLIST Lists all user records")); } }; diff --git a/modules/extra/cs_appendtopic.cpp b/modules/extra/cs_appendtopic.cpp index 8124aa535..c8c641876 100644 --- a/modules/extra/cs_appendtopic.cpp +++ b/modules/extra/cs_appendtopic.cpp @@ -59,9 +59,9 @@ class CommandCSAppendTopic : public Command Channel *c = ci->c; if (!c) - u->SendMessage(ChanServ, CHAN_X_NOT_IN_USE, ci->name.c_str()); + u->SendMessage(ChanServ, LanguageString::CHAN_X_NOT_IN_USE, ci->name.c_str()); else if (!check_access(u, ci, CA_TOPIC)) - u->SendMessage(ChanServ, ACCESS_DENIED); + u->SendMessage(ChanServ, LanguageString::ACCESS_DENIED); else { Anope::string topic; diff --git a/modules/extra/cs_enforce.cpp b/modules/extra/cs_enforce.cpp index 568d0b17f..c5a2ee590 100644 --- a/modules/extra/cs_enforce.cpp +++ b/modules/extra/cs_enforce.cpp @@ -89,7 +89,7 @@ class CommandCSEnforce : public Command if (check_access(uc->user, ci, CA_NOJOIN)) { get_idealban(ci, uc->user, mask); - Anope::string reason = GetString(uc->user, CHAN_NOT_ALLOWED_TO_JOIN); + Anope::string reason = GetString(uc->user->Account(), LanguageString::CHAN_NOT_ALLOWED_TO_JOIN); c->SetMode(NULL, CMODE_BAN, mask); c->Kick(NULL, uc->user, "%s", reason.c_str()); } @@ -113,7 +113,7 @@ class CommandCSEnforce : public Command if (!uc->user->IsIdentified()) { get_idealban(ci, uc->user, mask); - Anope::string reason = GetString(uc->user, CHAN_NOT_ALLOWED_TO_JOIN); + Anope::string reason = GetString(uc->user->Account(), LanguageString::CHAN_NOT_ALLOWED_TO_JOIN); if (!c->HasMode(CMODE_REGISTERED)) c->SetMode(NULL, CMODE_BAN, mask); c->Kick(NULL, uc->user, "%s", reason.c_str()); @@ -134,9 +134,9 @@ class CommandCSEnforce : public Command Channel *c = ci->c; if (!c) - u->SendMessage(ChanServ, CHAN_X_NOT_IN_USE, ci->name.c_str()); + u->SendMessage(ChanServ, LanguageString::CHAN_X_NOT_IN_USE, ci->name.c_str()); else if (!check_access(u, ci, CA_AKICK)) - u->SendMessage(ChanServ, ACCESS_DENIED); + u->SendMessage(ChanServ, LanguageString::ACCESS_DENIED); else { if (what.empty() || what.equals_ci("SET")) diff --git a/modules/extra/cs_entrymsg.cpp b/modules/extra/cs_entrymsg.cpp index 3edeef84c..b32937847 100644 --- a/modules/extra/cs_entrymsg.cpp +++ b/modules/extra/cs_entrymsg.cpp @@ -33,40 +33,40 @@ unsigned EntryMsg::MaxEntries = 0; class CommandEntryMessage : public Command { private: - void DoList(User *u, ChannelInfo *ci) + void DoList(CommandSource &source, ChannelInfo *ci) { std::vector<EntryMsg> messages; if (ci->GetExtRegular("cs_entrymsg", messages)) { - u->SendMessage(ChanServ, CHAN_ENTRYMSG_LIST_HEADER, ci->name.c_str()); + source.Reply(_("Entry message list for \2%s\2:"), ci->name.c_str()); for (unsigned i = 0; i < messages.size(); ++i) - u->SendMessage(ChanServ, CHAN_ENTRYMSG_LIST_ENTRY, i + 1, messages[i].message.c_str(), messages[i].creator.c_str(), do_strftime(messages[i].when).c_str()); - u->SendMessage(ChanServ, CHAN_ENTRYMSG_LIST_END); + source.Reply(LanguageString::CHAN_LIST_ENTRY, i + 1, messages[i].message.c_str(), messages[i].creator.c_str(), do_strftime(messages[i].when).c_str()); + source.Reply(_("End of entry message list.")); } else - u->SendMessage(ChanServ, CHAN_ENTRYMSG_LIST_EMPTY, ci->name.c_str()); + source.Reply(_("Entry message list for \2%s\2 is empty."), ci->name.c_str()); } - void DoAdd(User *u, ChannelInfo *ci, const Anope::string &message) + void DoAdd(CommandSource &source, ChannelInfo *ci, const Anope::string &message) { std::vector<EntryMsg> messages; ci->GetExtRegular("cs_entrymsg", messages); if (EntryMsg::MaxEntries && messages.size() >= EntryMsg::MaxEntries) - u->SendMessage(ChanServ, CHAN_ENTRYMSG_LIST_FULL, ci->name.c_str()); + source.Reply(_("The entry message list for \2%s\2 is full."), ci->name.c_str()); else { - messages.push_back(EntryMsg(u->nick, message)); + messages.push_back(EntryMsg(source.u->nick, message)); ci->Extend("cs_entrymsg", new ExtensibleItemRegular<std::vector<EntryMsg> >(messages)); - u->SendMessage(ChanServ, CHAN_ENTRYMSG_ADDED, ci->name.c_str()); + source.Reply(_("Entry message added to \2%s\2"), ci->name.c_str()); } } - void DoDel(User *u, ChannelInfo *ci, const Anope::string &message) + void DoDel(CommandSource &source, ChannelInfo *ci, const Anope::string &message) { std::vector<EntryMsg> messages; if (!message.is_pos_number_only()) - u->SendMessage(ChanServ, CHAN_ENTRYMSG_NOT_FOUND, message.c_str(), ci->name.c_str()); + source.Reply(("Entry message \002%s\002 not found on channel \002%s\002."), message.c_str(), ci->name.c_str()); else if (ci->GetExtRegular("cs_entrymsg", messages)) { unsigned i = convertTo<unsigned>(message); @@ -74,19 +74,19 @@ class CommandEntryMessage : public Command { messages.erase(messages.begin() + i - 1); ci->Extend("cs_entrymsg", new ExtensibleItemRegular<std::vector<EntryMsg> >(messages)); - u->SendMessage(ChanServ, CHAN_ENTRYMSG_DELETED, i, ci->name.c_str()); + source.Reply(_("Entry message \2%i\2 for \2%s\2 deleted."), i, ci->name.c_str()); } else - u->SendMessage(ChanServ, CHAN_ENTRYMSG_NOT_FOUND, message.c_str(), ci->name.c_str()); + source.Reply(_("Entry message \2%s\2 not found on channel \2%s\2."), message.c_str(), ci->name.c_str()); } else - u->SendMessage(ChanServ, CHAN_ENTRYMSG_LIST_EMPTY, ci->name.c_str()); + source.Reply(_("Entry message list for \2%s\2 is empty."), ci->name.c_str()); } - void DoClear(User *u, ChannelInfo *ci) + void DoClear(CommandSource &source, ChannelInfo *ci) { ci->Shrink("cs_entrymsg"); - u->SendMessage(ChanServ, CHAN_ENTRYMSG_CLEARED, ci->name.c_str()); + source.Reply(_("Entry messages for \2%s\2 have been cleared."), ci->name.c_str()); } public: @@ -103,18 +103,18 @@ class CommandEntryMessage : public Command { bool success = true; if (params[1].equals_ci("LIST")) - this->DoList(u, ci); + this->DoList(source, ci); else if (params[1].equals_ci("CLEAR")) - this->DoClear(u, ci); + this->DoClear(source, ci); else if (params.size() < 3) { success = false; this->OnSyntaxError(source, ""); } else if (params[1].equals_ci("ADD")) - this->DoAdd(u, ci, params[2]); + this->DoAdd(source, ci, params[2]); else if (params[1].equals_ci("DEL")) - this->DoDel(u, ci, params[2]); + this->DoDel(source, ci, params[2]); else { success = false; @@ -125,7 +125,7 @@ class CommandEntryMessage : public Command } else { - u->SendMessage(ChanServ, ACCESS_DENIED); + u->SendMessage(ChanServ, LanguageString::ACCESS_DENIED); } return MOD_CONT; @@ -133,18 +133,20 @@ class CommandEntryMessage : public Command void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "ENTRYMSG", CHAN_ENTRYMSG_SYNTAX); + SyntaxError(source, "ENTRYMSG", _("ENTRYMSG \037channel\037 {ADD|DEL|LIST|CLEAR} [\037message\037|\037num\037]")); } bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(CHAN_HELP_ENTRYMSG); + source.Reply(_("Syntax: \002ENTRYMSG \037channel\037 {ADD|DEL|LIST|CLEAR} [\037message\037|\037num\037]\002\n" + " \n" + "Controls what messages will be sent to users when they join the channel.")); return true; } void OnServHelp(CommandSource &source) { - source.Reply(CHAN_HELP_CMD_ENTRYMSG); + source.Reply(_(" ENTRYMSG Manage the channel's entrymsgs")); } }; diff --git a/modules/extra/cs_set_misc.cpp b/modules/extra/cs_set_misc.cpp index 1a21b66d5..e91f32860 100644 --- a/modules/extra/cs_set_misc.cpp +++ b/modules/extra/cs_set_misc.cpp @@ -31,17 +31,17 @@ class CommandCSSetMisc : public Command if (params.size() > 1) { ci->Extend("chanserv:" + this->name, new ExtensibleItemRegular<Anope::string>(params[1])); - u->SendMessage(ChanServ, CHAN_SETTING_CHANGED, this->name.c_str(), ci->name.c_str(), params[1].c_str()); + u->SendMessage(ChanServ, LanguageString::CHAN_SETTING_CHANGED, this->name.c_str(), ci->name.c_str(), params[1].c_str()); } else - u->SendMessage(ChanServ, CHAN_SETTING_UNSET, this->name.c_str(), ci->name.c_str()); + u->SendMessage(ChanServ, LanguageString::CHAN_SETTING_UNSET, this->name.c_str(), ci->name.c_str()); return MOD_CONT; } void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SET", CHAN_SET_SYNTAX); + SyntaxError(source, "SET", LanguageString::CHAN_SET_SYNTAX); } void OnServHelp(CommandSource &source) @@ -59,7 +59,7 @@ class CommandCSSASetMisc : public CommandCSSetMisc void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SASET", CHAN_SASET_SYNTAX); + SyntaxError(source, "SASET", LanguageString::CHAN_SASET_SYNTAX); } }; diff --git a/modules/extra/cs_tban.cpp b/modules/extra/cs_tban.cpp index 35757ff1e..6e54da6be 100644 --- a/modules/extra/cs_tban.cpp +++ b/modules/extra/cs_tban.cpp @@ -40,11 +40,11 @@ static bool CanBanUser(Channel *c, User *u, User *u2) ChannelInfo *ci = c->ci; bool ok = false; if (!check_access(u, ci, CA_BAN)) - u->SendMessage(ChanServ, ACCESS_DENIED); + u->SendMessage(ChanServ, LanguageString::ACCESS_DENIED); else if (matches_list(c, u2, CMODE_EXCEPT)) - u->SendMessage(ChanServ, CHAN_EXCEPTED, u2->nick.c_str(), ci->name.c_str()); + u->SendMessage(ChanServ, LanguageString::CHAN_EXCEPTED, u2->nick.c_str(), ci->name.c_str()); else if (u2->IsProtected()) - u->SendMessage(ChanServ, ACCESS_DENIED); + u->SendMessage(ChanServ, LanguageString::ACCESS_DENIED); else ok = true; @@ -70,9 +70,9 @@ class CommandCSTBan : public Command User *u2; if (!c) - u->SendMessage(ChanServ, CHAN_X_NOT_IN_USE, chan.c_str()); + u->SendMessage(ChanServ, LanguageString::CHAN_X_NOT_IN_USE, chan.c_str()); else if (!(u2 = finduser(nick))) - u->SendMessage(ChanServ, NICK_X_NOT_IN_USE, nick.c_str()); + u->SendMessage(ChanServ, LanguageString::NICK_X_NOT_IN_USE, nick.c_str()); else if (CanBanUser(c, u, u2)) { diff --git a/modules/extra/db_mysql.cpp b/modules/extra/db_mysql.cpp index 180b66463..03515d239 100644 --- a/modules/extra/db_mysql.cpp +++ b/modules/extra/db_mysql.cpp @@ -129,13 +129,17 @@ class CommandSQLSync : public Command bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(OPER_HELP_SYNC); + source.Reply(_("Syntax: \002SQLSYNC\002\n" + " \n" + "This command syncs your databases with SQL. You should\n" + "only have to execute this command once, when you initially\n" + "import your databases into SQL.")); return true; } void OnServHelp(CommandSource &source) { - source.Reply(OPER_HELP_CMD_SQLSYNC); + source.Reply(_(" SQLSYNC Import your databases to SQL")); } }; @@ -1393,7 +1397,7 @@ CommandReturn CommandSQLSync::Execute(CommandSource &source, const std::vector<A { User *u = source.u; SaveDatabases(); - u->SendMessage(OperServ, OPER_SYNC_UPDATED); + u->SendMessage(OperServ, _("Updating MySQL.")); return MOD_CONT; } diff --git a/modules/extra/db_mysql_live.cpp b/modules/extra/db_mysql_live.cpp index bf5a1e6f7..55e891623 100644 --- a/modules/extra/db_mysql_live.cpp +++ b/modules/extra/db_mysql_live.cpp @@ -42,7 +42,7 @@ class CommandMutex : public Thread if (!command->permission.empty() && !u->Account()->HasCommand(command->permission)) { - u->SendMessage(bi, ACCESS_DENIED); + u->SendMessage(bi, LanguageString::ACCESS_DENIED); Log(LOG_COMMAND, "denied", bi) << "Access denied for user " << u->GetMask() << " with command " << command; } else diff --git a/modules/extra/hs_request.cpp b/modules/extra/hs_request.cpp index 6f9111b5e..3a1237328 100644 --- a/modules/extra/hs_request.cpp +++ b/modules/extra/hs_request.cpp @@ -67,19 +67,19 @@ class CommandHSRequest : public Command } if (vIdent.length() > Config->UserLen) { - source.Reply(HOST_SET_IDENTTOOLONG, Config->UserLen); + source.Reply(LanguageString::HOST_SET_IDENTTOOLONG, Config->UserLen); return MOD_CONT; } else for (Anope::string::iterator s = vIdent.begin(), s_end = vIdent.end(); s != s_end; ++s) if (!isvalidchar(*s)) { - source.Reply(HOST_SET_IDENT_ERROR); + source.Reply(LanguageString::HOST_SET_IDENT_ERROR); return MOD_CONT; } if (!ircd->vident) { - source.Reply(HOST_NO_VIDENT); + source.Reply(LanguageString::HOST_NO_VIDENT); return MOD_CONT; } } @@ -87,13 +87,13 @@ class CommandHSRequest : public Command hostmask = rawhostmask; else { - source.Reply(HOST_SET_TOOLONG, Config->HostLen); + source.Reply(LanguageString::HOST_SET_TOOLONG, Config->HostLen); return MOD_CONT; } if (!isValidHost(hostmask, 3)) { - source.Reply(HOST_SET_ERROR); + source.Reply(LanguageString::HOST_SET_ERROR); return MOD_CONT; } @@ -167,7 +167,7 @@ class CommandHSActivate : public Command me->SendMessage(source, _("No request for nick %s found."), nick.c_str()); } else - u->SendMessage(HostServ, NICK_X_NOT_REGISTERED, nick.c_str()); + u->SendMessage(HostServ, LanguageString::NICK_X_NOT_REGISTERED, nick.c_str()); return MOD_CONT; } @@ -222,7 +222,7 @@ class CommandHSReject : public Command if (!reason.empty()) snprintf(message, sizeof(message), _("[auto memo] Your requested vHost has been rejected. Reason: %s"), reason.c_str()); else - snprintf(message, sizeof(message), _("[auto memo] Your requested vHost has been rejected.")); + snprintf(message, sizeof(message), "%s", _("[auto memo] Your requested vHost has been rejected.")); memo_send(source, nick, message, 2); } @@ -269,13 +269,13 @@ class HSListBase : public Command { ++display_counter; if (!hr->ident.empty()) - u->SendMessage(HostServ, HOST_IDENT_ENTRY, counter, it->first.c_str(), hr->ident.c_str(), hr->host.c_str(), it->first.c_str(), do_strftime(hr->time).c_str()); + u->SendMessage(HostServ, _("#%d Nick:\002%s\002, vhost:\002%s\002@\002%s\002 (%s - %s)"), counter, it->first.c_str(), hr->ident.c_str(), hr->host.c_str(), it->first.c_str(), do_strftime(hr->time).c_str()); else - u->SendMessage(HostServ, HOST_ENTRY, counter, it->first.c_str(), hr->host.c_str(), it->first.c_str(), do_strftime(hr->time).c_str()); + u->SendMessage(HostServ, _("#%d Nick:\002%s\002, vhost:\002%s\002 (%s - %s)"), counter, it->first.c_str(), hr->host.c_str(), it->first.c_str(), do_strftime(hr->time).c_str()); } ++counter; } - u->SendMessage(HostServ, HOST_LIST_FOOTER, display_counter); + u->SendMessage(HostServ, _("Displayed all records (Count: \002%d\002)"), display_counter); return MOD_CONT; } diff --git a/modules/extra/language/CMakeLists.txt b/modules/extra/language/CMakeLists.txt new file mode 100644 index 000000000..af4dd90a6 --- /dev/null +++ b/modules/extra/language/CMakeLists.txt @@ -0,0 +1,38 @@ +# Only do this if gettext is installed +if(GETTEXT_FOUND) + # Get all of the .po files + file(GLOB LANG_SRCS_PO RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.*.po") + sort_list(LANG_SRCS_PO) + + foreach(LANG_PO ${LANG_SRCS_PO}) + # Get the domain for this language file + string(LENGTH ${LANG_PO} LANG_PO_LENGTH) + math(EXPR DOMAIN_LENGTH "${LANG_PO_LENGTH} - 9") + string(SUBSTRING ${LANG_PO} 0 ${DOMAIN_LENGTH} LANG_DOMAIN) + + # Get the language for this language file + math(EXPR DOMAIN_LENGTH "${LANG_PO_LENGTH} - 8") + string(SUBSTRING ${LANG_PO} ${DOMAIN_LENGTH} 5 LANG_LANG) + + # Get the .mo file name + string(REGEX REPLACE "\\.po$" ".mo" LANG_MO ${LANG_PO}) + # Add the .mo file to a list for use later with add_custom_target + set(LANG_SRCS_MO ${LANG_SRCS_MO} ${CMAKE_CURRENT_BINARY_DIR}/${LANG_MO}) + # Run msgfmt on the language file, depends on the .po file + add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${LANG_MO} + COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -c ${CMAKE_CURRENT_SOURCE_DIR}/${LANG_PO} -o ${CMAKE_CURRENT_BINARY_DIR}/${LANG_MO} + MAIN_DEPENDENCY ${LANG_PO} + ) + # Add to cpack ignored files if not on Windows. + if(NOT WIN32) + add_to_cpack_ignored_files("${LANG_MO}") + endif(NOT WIN32) + + # Install the new language file + install(CODE "FILE(MAKE_DIRECTORY \${CMAKE_INSTALL_PREFIX}/data/languages/${LANG_LANG}/LC_MESSAGES/)") + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${LANG_MO} DESTINATION data/languages/${LANG_LANG}/LC_MESSAGES RENAME ${LANG_DOMAIN}.mo PERMISSIONS ${PERMS}) + endforeach(LANG_PO) + + # Generate languages, depends on the mo files + add_custom_target(module_language DEPENDS ${LANG_SRCS_MO}) +endif(GETTEXT_FOUND) diff --git a/modules/extra/language/cs_appendtopic.de_DE.po b/modules/extra/language/cs_appendtopic.de_DE.po new file mode 100644 index 000000000..8e5111d5d --- /dev/null +++ b/modules/extra/language/cs_appendtopic.de_DE.po @@ -0,0 +1,37 @@ +# German translations for cs_appendtopic +# German messages for cs_appendtopic +# Copyright (C) 2011 Anope Team +# This file is distributed under the same license as Anope IRC Services +# Adam <adam@anope.org>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: Anope\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-02-04 03:41-0500\n" +"PO-Revision-Date: 2010-09-25 20:57-0400\n" +"Last-Translator: Adam <adam@anope.org>\n" +"Language-Team: German\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ../cs_appendtopic.cpp:106 +msgid " APPENDTOPIC Add text to a channels topic" +msgstr " APPENDTOPIC Fьgt einen Text zu einem Channel-Topic hinzu." + +#: ../cs_appendtopic.cpp:90 ../cs_appendtopic.cpp:101 +msgid "Syntax: APPENDTOPIC channel text" +msgstr "Syntax: APPENDTOPIC Channel Text" + +#: ../cs_appendtopic.cpp:92 +msgid "" +"This command allows users to append text to a currently set\n" +"channel topic. When TOPICLOCK is on, the topic is updated and\n" +"the new, updated topic is locked." +msgstr "" +"Dieser Befehl erlaubt Benutzern, einen Text zu dem vorhandenen Channel-" +"Topic\n" +"hinzuzufьgen. Wenn TOPICLOCK gesetzt ist, wird das Topic aktualisiert\n" +"und das neue, aktualisierte Topic wird gesperrt." diff --git a/modules/extra/language/cs_appendtopic.it_IT.po b/modules/extra/language/cs_appendtopic.it_IT.po new file mode 100644 index 000000000..827fe5bd6 --- /dev/null +++ b/modules/extra/language/cs_appendtopic.it_IT.po @@ -0,0 +1,38 @@ +# Italian translations for cs_appendtopic +# Traduzioni italiane per il cs_appendtopic +# Copyright (C) 2011 Anope Team +# This file is distributed under the same license as Anope IRC Services +# Adam <adam@anope.org>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: Anope\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-02-04 03:41-0500\n" +"PO-Revision-Date: 2010-09-25 21:04-0400\n" +"Last-Translator: Adam <adam@anope.org>\n" +"Language-Team: Italian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ../cs_appendtopic.cpp:106 +msgid " APPENDTOPIC Add text to a channels topic" +msgstr " APPENDTOPIC Aggiunge del testo al topic di un canale" + +#: ../cs_appendtopic.cpp:90 ../cs_appendtopic.cpp:101 +msgid "Syntax: APPENDTOPIC channel text" +msgstr "Sintassi: APPENDTOPIC canale testo" + +#: ../cs_appendtopic.cpp:92 +msgid "" +"This command allows users to append text to a currently set\n" +"channel topic. When TOPICLOCK is on, the topic is updated and\n" +"the new, updated topic is locked." +msgstr "" +"Questo comando permette agli utenti di aggiungere del testo ad un topic di " +"un canale\n" +"giа impostato. Se TOPICLOCK и attivato, il topic viene aggiornato e il nuovo " +"topic\n" +"viene bloccato." diff --git a/modules/extra/language/cs_appendtopic.nl_NL.po b/modules/extra/language/cs_appendtopic.nl_NL.po new file mode 100644 index 000000000..15e857506 --- /dev/null +++ b/modules/extra/language/cs_appendtopic.nl_NL.po @@ -0,0 +1,37 @@ +# Dutch translations for cs_appendtopic +# Engelse vertalingen voor het cs_appendtopic +# Copyright (C) 2011 Anope Team +# This file is distributed under the same license as Anope IRC Services +# Adam <adam@anope.org>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: Anope\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-02-04 03:41-0500\n" +"PO-Revision-Date: 2010-09-25 20:55-0400\n" +"Last-Translator: Adam <adam@anope.org>\n" +"Language-Team: Dutch\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ../cs_appendtopic.cpp:106 +msgid " APPENDTOPIC Add text to a channels topic" +msgstr " APPENDTOPIC Voeg tekst aan een kanaal onderwerp toe" + +#: ../cs_appendtopic.cpp:90 ../cs_appendtopic.cpp:101 +msgid "Syntax: APPENDTOPIC channel text" +msgstr "Gebruik: APPENDTOPIC kanaal tekst" + +#: ../cs_appendtopic.cpp:92 +msgid "" +"This command allows users to append text to a currently set\n" +"channel topic. When TOPICLOCK is on, the topic is updated and\n" +"the new, updated topic is locked." +msgstr "" +"Dit command stelt gebruikers in staat om text toe te voegen\n" +"achter het huidige onderwerp van een kanaal. Als TOPICLOCK aan\n" +"staat, zal het onderwerp worden bijgewerkt en zal het nieuwe,\n" +"bijgewerkte topic worden geforceerd." diff --git a/modules/extra/language/cs_appendtopic.pot b/modules/extra/language/cs_appendtopic.pot new file mode 100644 index 000000000..4c37b8d37 --- /dev/null +++ b/modules/extra/language/cs_appendtopic.pot @@ -0,0 +1,32 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-02-04 03:41-0500\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../cs_appendtopic.cpp:106 +msgid " APPENDTOPIC Add text to a channels topic" +msgstr "" + +#: ../cs_appendtopic.cpp:90 ../cs_appendtopic.cpp:101 +msgid "Syntax: APPENDTOPIC channel text" +msgstr "" + +#: ../cs_appendtopic.cpp:92 +msgid "" +"This command allows users to append text to a currently set\n" +"channel topic. When TOPICLOCK is on, the topic is updated and\n" +"the new, updated topic is locked." +msgstr "" diff --git a/modules/extra/language/cs_appendtopic.pt_PT.po b/modules/extra/language/cs_appendtopic.pt_PT.po new file mode 100644 index 000000000..853f0502c --- /dev/null +++ b/modules/extra/language/cs_appendtopic.pt_PT.po @@ -0,0 +1,35 @@ +# Portuguese translations for cs_appendtopic +# Copyright (C) 2011 Anope Team +# This file is distributed under the same license as Anope IRC Services +# Adam <adam@anope.org>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: Anope\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-02-04 03:41-0500\n" +"PO-Revision-Date: 2010-09-25 21:00-0400\n" +"Last-Translator: Adam <adam@anope.org>\n" +"Language-Team: Portuguese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ../cs_appendtopic.cpp:106 +msgid " APPENDTOPIC Add text to a channels topic" +msgstr " APPENDTOPIC Adiciona texto ao tуpico de um canal" + +#: ../cs_appendtopic.cpp:90 ../cs_appendtopic.cpp:101 +msgid "Syntax: APPENDTOPIC channel text" +msgstr "Sintaxe: APPENDTOPIC canal texto" + +#: ../cs_appendtopic.cpp:92 +msgid "" +"This command allows users to append text to a currently set\n" +"channel topic. When TOPICLOCK is on, the topic is updated and\n" +"the new, updated topic is locked." +msgstr "" +"Este comando permite aos usuбrios anexar texto a um tуpico de canal\n" +"jб definido. Quando TOPICLOCK estб ativado, o tуpico й atualizado e\n" +"o novo tуpico й travado." diff --git a/modules/extra/language/cs_appendtopic.ru_RU.po b/modules/extra/language/cs_appendtopic.ru_RU.po new file mode 100644 index 000000000..89e0a19b3 --- /dev/null +++ b/modules/extra/language/cs_appendtopic.ru_RU.po @@ -0,0 +1,40 @@ +# Russian translations for cs_appendtopic +# ?????????? ???????? ??? ?????? cs_appendtopic +# Copyright (C) 2011 Anope Team +# This file is distributed under the same license as Anope IRC Services +# Adam <adam@anope.org>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: Anope\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-02-04 03:41-0500\n" +"PO-Revision-Date: 2010-09-25 21:02-0400\n" +"Last-Translator: Adam <adam@anope.org>\n" +"Language-Team: Russian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: ../cs_appendtopic.cpp:106 +msgid " APPENDTOPIC Add text to a channels topic" +msgstr " APPENDTOPIC Добавляет текст к топику канала" + +#: ../cs_appendtopic.cpp:90 ../cs_appendtopic.cpp:101 +msgid "Syntax: APPENDTOPIC channel text" +msgstr "Синтаксис: APPENDTOPIC #канал текст" + +#: ../cs_appendtopic.cpp:92 +msgid "" +"This command allows users to append text to a currently set\n" +"channel topic. When TOPICLOCK is on, the topic is updated and\n" +"the new, updated topic is locked." +msgstr "" +"Данная команда позволяет добавить текст к топику, который установлен на " +"указанном\n" +"канале. Если активирован режим TOPICLOCK, топик будет обновлен и " +"заблокирован.\n" +"Примечание: текст будет ДОБАВЛЕН к топику, то есть старый топик удален НЕ " +"БУДЕТ." diff --git a/modules/extra/language/cs_enforce.de_DE.po b/modules/extra/language/cs_enforce.de_DE.po new file mode 100644 index 000000000..40eddc19c --- /dev/null +++ b/modules/extra/language/cs_enforce.de_DE.po @@ -0,0 +1,85 @@ +# German translations for cs_enforce +# German messages for cs_enforce +# Copyright (C) 2011 Anope Team +# This file is distributed under the same license as Anope IRC Services +# Adam <adam@anope.org>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: Anope\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-02-04 03:41-0500\n" +"PO-Revision-Date: 2010-09-25 21:12-0400\n" +"Last-Translator: Adam <adam@anope.org>\n" +"Language-Team: German\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ../cs_enforce.cpp:213 +msgid " ENFORCE Enforce various channel modes and set options" +msgstr " ENFORCE Erzwingt verschieden Modes und SET Optionen" + +#: ../cs_enforce.cpp:178 +msgid "" +"Enforce various channel modes and set options. The channel\n" +"option indicates what channel to enforce the modes and options\n" +"on. The what option indicates what modes and options to\n" +"enforce, and can be any of SET, SECUREOPS, RESTRICTED, MODES,\n" +"or +R. When left out, it defaults to SET.\n" +" \n" +"If what is SET, it will enforce SECUREOPS and RESTRICTED\n" +"on the users currently in the channel, if they are set. Give\n" +"SECUREOPS to enforce the SECUREOPS option, even if it is not\n" +"enabled. Use RESTRICTED to enfore the RESTRICTED option, also\n" +"if it's not enabled." +msgstr "" +"Erzwingt verschieden Modes und SET Optionen. Die Channel\n" +"Option zeigt dir den Channel an, indem Modes und Optionen\n" +"zu erzwingen sind. Die was Option zeigt dir welche Modes\n" +"und Optionen zu erzwingen sind. Die kцnnen nur SET, SECUREOPS,\n" +"RESTRICTED, MODES oder +R sein.Default ist SET.\n" +" \n" +"Wenn was SET ist, wird SECUREOPS und RESTRICTED\n" +"auf die User die z.Z.in Channel sind erzwungen, wenn sie AN sind.\n" +"Benutze SECUREOPS oder RESTRICTED , um die Optionen einzeln\n" +"zu erzwingen, also wenn sie nicht eingeschaltet sind." + +#: ../cs_enforce.cpp:145 ../cs_enforce.cpp:150 ../cs_enforce.cpp:155 +#: ../cs_enforce.cpp:160 ../cs_enforce.cpp:165 +#, c-format +msgid "Enforced %s" +msgstr "Erzwungen %s" + +#: ../cs_enforce.cpp:191 +msgid "" +"If what is MODES, it will enforce channelmode +R if it is\n" +"set. If +R is specified for what, the +R channelmode will\n" +"also be enforced, but even if it is not set. If it is not set,\n" +"users will be banned to ensure they don't just rejoin." +msgstr "" +"Wenn was MODES ist, wird das ChannelMode +R erzwungen\n" +"falls an. Wenn was +R ist, wird +R erzwungen aber eben\n" +"wenn noch nicht als Channel-Mode ist. Wenn +R noch nicht als\n" +"Channel-Mode war werden alle User aus den Channel gebannt um\n" +"sicher zu sein das sie nicht rejoinen." + +#: ../cs_enforce.cpp:196 +msgid "" +"If what is MODES, nothing will be enforced, since it would\n" +"enforce modes that the current ircd does not support. If +R is\n" +"specified for what, an equalivant of channelmode +R on\n" +"other ircds will be enforced. All users that are in the channel\n" +"but have not identified for their nickname will be kicked and\n" +"banned from the channel." +msgstr "" +"Wenn was MODES ist, wird nichts erzwungen weil es MODES seine\n" +"kцnnen die dein IRCD nicht unterstьtzt. Wenn was +R ist\n" +"oder ein Modes was auf ein anderen IRCD gleich +R ist, wird es\n" +"erzwungen. Alle User die nicht fьr deren Nicknamen identifiziert\n" +"sind werden aus den Channel gekickt und gebannt." + +#: ../cs_enforce.cpp:176 ../cs_enforce.cpp:208 +msgid "Syntax: ENFORCE channel [what]" +msgstr "Syntax: ENFORCE Channel [was]" diff --git a/modules/extra/language/cs_enforce.it_IT.po b/modules/extra/language/cs_enforce.it_IT.po new file mode 100644 index 000000000..98605397c --- /dev/null +++ b/modules/extra/language/cs_enforce.it_IT.po @@ -0,0 +1,85 @@ +# Italian translations for cs_enforce +# Traduzioni italiane per il cs_enforce +# Copyright (C) 2011 Anope Team +# This file is distributed under the same license as Anope IRC Services +# Adam <adam@anope.org>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: Anope\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-02-04 03:41-0500\n" +"PO-Revision-Date: 2010-09-25 21:55-0400\n" +"Last-Translator: Adam <adam@anope.org>\n" +"Language-Team: Italian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ../cs_enforce.cpp:213 +msgid " ENFORCE Enforce various channel modes and set options" +msgstr " ENFORCE Forza diversi modi di canale ed opzioni SET" + +#: ../cs_enforce.cpp:178 +msgid "" +"Enforce various channel modes and set options. The channel\n" +"option indicates what channel to enforce the modes and options\n" +"on. The what option indicates what modes and options to\n" +"enforce, and can be any of SET, SECUREOPS, RESTRICTED, MODES,\n" +"or +R. When left out, it defaults to SET.\n" +" \n" +"If what is SET, it will enforce SECUREOPS and RESTRICTED\n" +"on the users currently in the channel, if they are set. Give\n" +"SECUREOPS to enforce the SECUREOPS option, even if it is not\n" +"enabled. Use RESTRICTED to enfore the RESTRICTED option, also\n" +"if it's not enabled." +msgstr "" +"Forza diversi modi di canale ed opzioni SET. Il parametro canale\n" +"indica il canale sul quale forzare i modi e le opzioni. Il parametro\n" +"cosa indica i modi e le opzioni da forzare, e possono essere\n" +"qualsiasi delle opzioni SET, SECUREOPS, RESTRICTED, MODES, o +R.\n" +"Se non specificato, viene sottointeso SET.\n" +" \n" +"Se cosa и SET, forzerа SECUREOPS e RESTRICTED sugli utenti\n" +"attualmente nel canale, se sono impostati. Specifica SECUREOPS per\n" +"forzare l'opzione SECUREOPS, anche se non и attivata. Specifica\n" +"RESTRICTED per forzare l'opzione RESTRICTED, anche se non и\n" +"attivata." + +#: ../cs_enforce.cpp:145 ../cs_enforce.cpp:150 ../cs_enforce.cpp:155 +#: ../cs_enforce.cpp:160 ../cs_enforce.cpp:165 +#, c-format +msgid "Enforced %s" +msgstr "Forzato %s" + +#: ../cs_enforce.cpp:191 +msgid "" +"If what is MODES, it will enforce channelmode +R if it is\n" +"set. If +R is specified for what, the +R channelmode will\n" +"also be enforced, but even if it is not set. If it is not set,\n" +"users will be banned to ensure they don't just rejoin." +msgstr "" +"Se cosa и MODES, forzerа il modo del canale +R se и impostato.\n" +"Se +R и specificato per cosa, il modo del canale +R verrа\n" +"forzato, anche se non и impostato. Se non и impostato, gli utenti\n" +"verranno bannati per assicurare che non rientrino semplicemente." + +#: ../cs_enforce.cpp:196 +msgid "" +"If what is MODES, nothing will be enforced, since it would\n" +"enforce modes that the current ircd does not support. If +R is\n" +"specified for what, an equalivant of channelmode +R on\n" +"other ircds will be enforced. All users that are in the channel\n" +"but have not identified for their nickname will be kicked and\n" +"banned from the channel." +msgstr "" +"Se cosa и MODES, niente verrа forzato, siccome forzerebbe\n" +"dei modi che l'ircd in uso non supporterebbe. Se +R и specificato\n" +"per cosa, un modo equivalente a +R sui altri ircd verrа\n" +"forzato. Tutti gli utenti presenti nel canale ma non identificati\n" +"per il loro nickname verranno bannati ed espulsi dal canale." + +#: ../cs_enforce.cpp:176 ../cs_enforce.cpp:208 +msgid "Syntax: ENFORCE channel [what]" +msgstr "Sintassi: ENFORCE canale [cosa]" diff --git a/modules/extra/language/cs_enforce.nl_NL.po b/modules/extra/language/cs_enforce.nl_NL.po new file mode 100644 index 000000000..e791db46d --- /dev/null +++ b/modules/extra/language/cs_enforce.nl_NL.po @@ -0,0 +1,88 @@ +# Dutch translations for cs_enforce +# Engelse vertalingen voor het cs_enforce +# Copyright (C) 2011 Anope Team +# This file is distributed under the same license as the Anope IRC Services +# Adam <adam@anope.org>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: Anope\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-02-04 03:41-0500\n" +"PO-Revision-Date: 2010-09-25 21:07-0400\n" +"Last-Translator: Adam <adam@anope.org>\n" +"Language-Team: Dutch\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ../cs_enforce.cpp:213 +msgid " ENFORCE Enforce various channel modes and set options" +msgstr " ENFORCE Forceer enkele kanaalmodes en set-opties" + +#: ../cs_enforce.cpp:178 +msgid "" +"Enforce various channel modes and set options. The channel\n" +"option indicates what channel to enforce the modes and options\n" +"on. The what option indicates what modes and options to\n" +"enforce, and can be any of SET, SECUREOPS, RESTRICTED, MODES,\n" +"or +R. When left out, it defaults to SET.\n" +" \n" +"If what is SET, it will enforce SECUREOPS and RESTRICTED\n" +"on the users currently in the channel, if they are set. Give\n" +"SECUREOPS to enforce the SECUREOPS option, even if it is not\n" +"enabled. Use RESTRICTED to enfore the RESTRICTED option, also\n" +"if it's not enabled." +msgstr "" +"Forceer enkele kannalmodes en set-opties. De kanaal optie\n" +"geeft aan op welk kanaal de modes en opties geforceerd moeten\n" +"worden. De wat optie geeft aan welke modes en opties\n" +"geforceerd moeten worden; dit kan SET, SECUREOPS, RESTRICTED,\n" +"MODES, of +R zijn. Indien weggelaten is dit standaard SET.\n" +" \n" +"Als er voor wat SET wordt ingevuld, zullen SECUREOPS en\n" +"RESTRICTED geforceerd worden op de gebruikers in het kanaal,\n" +"maar alleen als die opties aangezet zijn voor het kanaal. Als\n" +"SECUREOPS of RESTRICTED wordt gegeven voor wat zal die optie\n" +"altijd geforceerd worden, ook als die niet is aangezet." + +#: ../cs_enforce.cpp:145 ../cs_enforce.cpp:150 ../cs_enforce.cpp:155 +#: ../cs_enforce.cpp:160 ../cs_enforce.cpp:165 +#, c-format +msgid "Enforced %s" +msgstr "" + +#: ../cs_enforce.cpp:191 +msgid "" +"If what is MODES, it will enforce channelmode +R if it is\n" +"set. If +R is specified for what, the +R channelmode will\n" +"also be enforced, but even if it is not set. If it is not set,\n" +"users will be banned to ensure they don't just rejoin." +msgstr "" +"Als er voor wat MODES wordt ingevuld, zal kanaalmode +R worden\n" +"geforceerd, als die op het kanaal aan staat. Als +R wordt ingevuld,\n" +"zal kanaalmode +R worden geforceerd, maar ook als die niet aanstaat voor het " +"kanaal. Als +R niet aan staat, zullen alle ook\n" +"gebanned worden om te zorgen dat ze niet opnieuw het kanaal binnen\n" +"kunnen komen." + +#: ../cs_enforce.cpp:196 +msgid "" +"If what is MODES, nothing will be enforced, since it would\n" +"enforce modes that the current ircd does not support. If +R is\n" +"specified for what, an equalivant of channelmode +R on\n" +"other ircds will be enforced. All users that are in the channel\n" +"but have not identified for their nickname will be kicked and\n" +"banned from the channel." +msgstr "" +"Als er voor wat MODES wordt ingevuld, zal er niks gebeuren.\n" +"Normaal gesproken wordt er een kanaalmode geforceerd die op deze\n" +"server niet ondersteund wordt. Als +R wordt ingevuld voor wat\n" +"zullen alle gebruikers die in het kanaal zitten maar zich niet\n" +"hebben geidentificeerd voor hun nick uit het kanaal gekicked en\n" +"verbannen worden." + +#: ../cs_enforce.cpp:176 ../cs_enforce.cpp:208 +msgid "Syntax: ENFORCE channel [what]" +msgstr "Syntax: ENFORCE kanaal [wat]" diff --git a/modules/extra/language/cs_enforce.pot b/modules/extra/language/cs_enforce.pot new file mode 100644 index 000000000..e3604eb44 --- /dev/null +++ b/modules/extra/language/cs_enforce.pot @@ -0,0 +1,64 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-02-04 03:41-0500\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../cs_enforce.cpp:213 +msgid " ENFORCE Enforce various channel modes and set options" +msgstr "" + +#: ../cs_enforce.cpp:178 +msgid "" +"Enforce various channel modes and set options. The channel\n" +"option indicates what channel to enforce the modes and options\n" +"on. The what option indicates what modes and options to\n" +"enforce, and can be any of SET, SECUREOPS, RESTRICTED, MODES,\n" +"or +R. When left out, it defaults to SET.\n" +" \n" +"If what is SET, it will enforce SECUREOPS and RESTRICTED\n" +"on the users currently in the channel, if they are set. Give\n" +"SECUREOPS to enforce the SECUREOPS option, even if it is not\n" +"enabled. Use RESTRICTED to enfore the RESTRICTED option, also\n" +"if it's not enabled." +msgstr "" + +#: ../cs_enforce.cpp:145 ../cs_enforce.cpp:150 ../cs_enforce.cpp:155 +#: ../cs_enforce.cpp:160 ../cs_enforce.cpp:165 +#, c-format +msgid "Enforced %s" +msgstr "" + +#: ../cs_enforce.cpp:191 +msgid "" +"If what is MODES, it will enforce channelmode +R if it is\n" +"set. If +R is specified for what, the +R channelmode will\n" +"also be enforced, but even if it is not set. If it is not set,\n" +"users will be banned to ensure they don't just rejoin." +msgstr "" + +#: ../cs_enforce.cpp:196 +msgid "" +"If what is MODES, nothing will be enforced, since it would\n" +"enforce modes that the current ircd does not support. If +R is\n" +"specified for what, an equalivant of channelmode +R on\n" +"other ircds will be enforced. All users that are in the channel\n" +"but have not identified for their nickname will be kicked and\n" +"banned from the channel." +msgstr "" + +#: ../cs_enforce.cpp:176 ../cs_enforce.cpp:208 +msgid "Syntax: ENFORCE channel [what]" +msgstr "" diff --git a/modules/extra/language/cs_enforce.pt_PT.po b/modules/extra/language/cs_enforce.pt_PT.po new file mode 100644 index 000000000..864db1f96 --- /dev/null +++ b/modules/extra/language/cs_enforce.pt_PT.po @@ -0,0 +1,87 @@ +# Portuguese translations for cs_enforce +# Copyright (C) 2011 Anope Team +# This file is distributed under the same license as the Anope IRC Services +# Adam <adam@anope.org>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: Anope\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-02-04 03:41-0500\n" +"PO-Revision-Date: 2010-09-25 21:24-0400\n" +"Last-Translator: Adam <adam@anope.org>\n" +"Language-Team: Portuguese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ../cs_enforce.cpp:213 +msgid " ENFORCE Enforce various channel modes and set options" +msgstr "" +" ENFORCE Verifica o cumprimento de vбrios modos de canal e opзхes " +"ajustadas" + +#: ../cs_enforce.cpp:178 +msgid "" +"Enforce various channel modes and set options. The channel\n" +"option indicates what channel to enforce the modes and options\n" +"on. The what option indicates what modes and options to\n" +"enforce, and can be any of SET, SECUREOPS, RESTRICTED, MODES,\n" +"or +R. When left out, it defaults to SET.\n" +" \n" +"If what is SET, it will enforce SECUREOPS and RESTRICTED\n" +"on the users currently in the channel, if they are set. Give\n" +"SECUREOPS to enforce the SECUREOPS option, even if it is not\n" +"enabled. Use RESTRICTED to enfore the RESTRICTED option, also\n" +"if it's not enabled." +msgstr "" +"Verifica o cumprimento de vбrios modos de canal e opзхes ajustadas.\n" +"O campo canal indica qual canal deve ter os modos e opзхes verificadas\n" +"O campo opзгo indica quais modos e opзхes devem ser verificadas,\n" +"e pode ser: SET, SECUREOPS, RESTRICTED, MODES ou +R\n" +"Quando deixado em branco, o padrгo й SET.\n" +" \n" +"Se opзгo for SET, serгo verificadas as opзхes SECUREOPS e RESTRICTED\n" +"para usuбrios que estiverem no canal, caso elas estejam ativadas. Use\n" +"SECUREOPS para verificar a opзгo SECUREOPS, mesmo que ela nгo esteja " +"ativada\n" +"Use RESTRICTED para verificar a opзгo RESTRICTED, mesmo que ela nгo esteja\n" +"ativada." + +#: ../cs_enforce.cpp:145 ../cs_enforce.cpp:150 ../cs_enforce.cpp:155 +#: ../cs_enforce.cpp:160 ../cs_enforce.cpp:165 +#, c-format +msgid "Enforced %s" +msgstr "Verificado %s" + +#: ../cs_enforce.cpp:191 +msgid "" +"If what is MODES, it will enforce channelmode +R if it is\n" +"set. If +R is specified for what, the +R channelmode will\n" +"also be enforced, but even if it is not set. If it is not set,\n" +"users will be banned to ensure they don't just rejoin." +msgstr "" +"Se opзгo for MODES, serб verificado o modo de canal +R caso ele\n" +"esteja ativado. Se +R for especificado para opзгo, o modo de canal\n" +"+R tambйm serб verificado, mesmo que ele nгo esteja ativado. Se ele nгo\n" +"estiver ativado, os usuбrios serгo banidos para evitar que reentrem no canal." + +#: ../cs_enforce.cpp:196 +msgid "" +"If what is MODES, nothing will be enforced, since it would\n" +"enforce modes that the current ircd does not support. If +R is\n" +"specified for what, an equalivant of channelmode +R on\n" +"other ircds will be enforced. All users that are in the channel\n" +"but have not identified for their nickname will be kicked and\n" +"banned from the channel." +msgstr "" +"Se opзгo for MODES, nada serб verificado, visto que isto poderia\n" +"verificar modos que o IRCd atual nгo suporta. Se +R for especificado\n" +"para opзгo, um equivalente ao modo de canal +R em outros IRCds\n" +"serб verificado. Todos os usuбrios que estгo no canal, mas nгo estejam\n" +"identificados para seus nicks serгo kickados e banidos do canal." + +#: ../cs_enforce.cpp:176 ../cs_enforce.cpp:208 +msgid "Syntax: ENFORCE channel [what]" +msgstr "Sintaxe: ENFORCE canal [opзгo]" diff --git a/modules/extra/language/cs_enforce.ru_RU.po b/modules/extra/language/cs_enforce.ru_RU.po new file mode 100644 index 000000000..67032f069 --- /dev/null +++ b/modules/extra/language/cs_enforce.ru_RU.po @@ -0,0 +1,89 @@ +# Russian translations for cs_enforce +# ?????????? ???????? ??? ?????? cs_enforce +# Copyright (C) 2011 Anope Team +# This file is distributed under the same license as Anope IRC Services +# Adam <adam@anope.org>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: Anope\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-02-04 03:41-0500\n" +"PO-Revision-Date: 2010-09-25 21:38-0400\n" +"Last-Translator: Adam <adam@anope.org>\n" +"Language-Team: Russian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: ../cs_enforce.cpp:213 +msgid " ENFORCE Enforce various channel modes and set options" +msgstr "" +" ENFORCE Перепроверка и установка различных режимов и опций канала" + +#: ../cs_enforce.cpp:178 +msgid "" +"Enforce various channel modes and set options. The channel\n" +"option indicates what channel to enforce the modes and options\n" +"on. The what option indicates what modes and options to\n" +"enforce, and can be any of SET, SECUREOPS, RESTRICTED, MODES,\n" +"or +R. When left out, it defaults to SET.\n" +" \n" +"If what is SET, it will enforce SECUREOPS and RESTRICTED\n" +"on the users currently in the channel, if they are set. Give\n" +"SECUREOPS to enforce the SECUREOPS option, even if it is not\n" +"enabled. Use RESTRICTED to enfore the RESTRICTED option, also\n" +"if it's not enabled." +msgstr "" +"Перепроверка и установка различных режимов и опций канала.\n" +"Параметр указывает какие опции или режимы канала должны быть\n" +"перепроверены. В качестве параметра могут быть указаны: SET, SECUREOPS,\n" +"RESTRICTED, MODES, или +R. Если параметр не указан, по-умолчанию будет SET.\n" +" \n" +"Если в качестве параметра указано SET, будут перепроверены опции\n" +"SECUREOPS и RESTRICTED относительно пользователей на указанном канале\n" +"(при условии, что опции включены). Отдельно указанный параметр SECUREOPS\n" +"применит опцию SECUREOPS (даже если она НЕ установлена). Параметр\n" +"RESTRICTED применит опцию RESTRICTED (даже если она НЕ установлена)" + +#: ../cs_enforce.cpp:145 ../cs_enforce.cpp:150 ../cs_enforce.cpp:155 +#: ../cs_enforce.cpp:160 ../cs_enforce.cpp:165 +#, c-format +msgid "Enforced %s" +msgstr "Перепроверено: %s" + +#: ../cs_enforce.cpp:191 +msgid "" +"If what is MODES, it will enforce channelmode +R if it is\n" +"set. If +R is specified for what, the +R channelmode will\n" +"also be enforced, but even if it is not set. If it is not set,\n" +"users will be banned to ensure they don't just rejoin." +msgstr "" +"Если в качестве параметра указано MODES, будет перепроверен режим +R\n" +"(если он установлен). Отдельно указанный параметр +R применит\n" +"канальный режим +R, даже если он не установлен, и забанит всех " +"пользователей,\n" +"которые не идентифицировались к своему нику или не имеют зарегистрированного " +"ника." + +#: ../cs_enforce.cpp:196 +msgid "" +"If what is MODES, nothing will be enforced, since it would\n" +"enforce modes that the current ircd does not support. If +R is\n" +"specified for what, an equalivant of channelmode +R on\n" +"other ircds will be enforced. All users that are in the channel\n" +"but have not identified for their nickname will be kicked and\n" +"banned from the channel." +msgstr "" +"Если в качестве параметра указано MODES, перепроверка осуществлена\n" +"НЕ БУДЕТ, так как текущий IRCD не поддерживает необходимые режимы.\n" +"Отдельно указанный параметр +R применит канальный режим, эквивалентный\n" +"режиму +R и забанит всех пользователей, которые не идентифицировались к " +"своему\n" +"нику или не имеют зарегистрированного ника." + +#: ../cs_enforce.cpp:176 ../cs_enforce.cpp:208 +msgid "Syntax: ENFORCE channel [what]" +msgstr "Синтаксис: ENFORCE #канал параметр" diff --git a/modules/extra/language/cs_entrymsg.pot b/modules/extra/language/cs_entrymsg.pot new file mode 100644 index 000000000..756bb439c --- /dev/null +++ b/modules/extra/language/cs_entrymsg.pot @@ -0,0 +1,71 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-02-04 03:41-0500\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../cs_entrymsg.cpp:149 +msgid " ENTRYMSG Manage the channel's entrymsgs" +msgstr "" + +#: ../cs_entrymsg.cpp:136 +msgid "ENTRYMSG channel {ADD|DEL|LIST|CLEAR} [message|num]" +msgstr "" + +#: ../cs_entrymsg.cpp:44 +msgid "End of entry message list." +msgstr "" + +#: ../cs_entrymsg.cpp:77 +#, c-format +msgid "Entry message %i for %s deleted." +msgstr "" + +#: ../cs_entrymsg.cpp:80 +#, c-format +msgid "Entry message %s not found on channel %s." +msgstr "" + +#: ../cs_entrymsg.cpp:61 +#, c-format +msgid "Entry message added to %s" +msgstr "" + +#: ../cs_entrymsg.cpp:47 ../cs_entrymsg.cpp:83 +#, c-format +msgid "Entry message list for %s is empty." +msgstr "" + +#: ../cs_entrymsg.cpp:41 +#, c-format +msgid "Entry message list for %s:" +msgstr "" + +#: ../cs_entrymsg.cpp:89 +#, c-format +msgid "Entry messages for %s have been cleared." +msgstr "" + +#: ../cs_entrymsg.cpp:141 +msgid "" +"Syntax: ENTRYMSG channel {ADD|DEL|LIST|CLEAR} [message|num]\n" +" \n" +"Controls what messages will be sent to users when they join the channel." +msgstr "" + +#: ../cs_entrymsg.cpp:56 +#, c-format +msgid "The entry message list for %s is full." +msgstr "" diff --git a/modules/extra/language/cs_tban.de_DE.po b/modules/extra/language/cs_tban.de_DE.po new file mode 100644 index 000000000..56980dee0 --- /dev/null +++ b/modules/extra/language/cs_tban.de_DE.po @@ -0,0 +1,39 @@ +# German translations for cs_tban +# German messages for cs_tban +# Copyright (C) 2011 Anope Team +# This file is distributed under the same license as the Anope IRC Services +# Adam <adam@anope.org>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: Anope\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-02-04 03:41-0500\n" +"PO-Revision-Date: 2010-09-26 00:16-0400\n" +"Last-Translator: Adam <adam@anope.org>\n" +"Language-Team: German\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ../cs_tban.cpp:106 +msgid " TBAN Bans the user for a given length of time" +msgstr " TBAN Bant ein User fьr eine bestimmte Zeit aus ein Channel" + +#: ../cs_tban.cpp:83 +#, c-format +msgid "%s banned from %s, will auto-expire in %s" +msgstr "%s gebannt von %s, wird auto-auslaufen in %s" + +#: ../cs_tban.cpp:93 +msgid "" +"Bans the given user from a channel for a specified length of\n" +"time. If the ban is removed before by hand, it will NOT be replaced." +msgstr "" +"Bant ein User fьr eine bestimmte Zeit aus ein Channel\n" +"Wenn der Ban manuell entfernt wird, wird es NICHT ersetzt." + +#: ../cs_tban.cpp:101 +msgid "Syntax: TBAN channel nick time" +msgstr "Syntax: TBAN Channel Nickname Zeit" diff --git a/modules/extra/language/cs_tban.it_IT.po b/modules/extra/language/cs_tban.it_IT.po new file mode 100644 index 000000000..9f7797eba --- /dev/null +++ b/modules/extra/language/cs_tban.it_IT.po @@ -0,0 +1,40 @@ +# Italian translations for cs_tban +# Traduzioni italiane per il cs_tban +# Copyright (C) 2011 Anope Team +# This file is distributed under the same license as the Anope IRC Services +# Adam <adam@anope.org>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: Anope\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-02-04 03:41-0500\n" +"PO-Revision-Date: 2010-09-26 00:22-0400\n" +"Last-Translator: Adam <adam@anope.org>\n" +"Language-Team: Italian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ../cs_tban.cpp:106 +msgid " TBAN Bans the user for a given length of time" +msgstr " TBAN Banna l'utente per un periodo di tempo specificato" + +#: ../cs_tban.cpp:83 +#, c-format +msgid "%s banned from %s, will auto-expire in %s" +msgstr "%s bannato da %s, scadrа automaticamente tra %s" + +#: ../cs_tban.cpp:93 +msgid "" +"Bans the given user from a channel for a specified length of\n" +"time. If the ban is removed before by hand, it will NOT be replaced." +msgstr "" +"Banna l'utente specificato da un canale per un periodo di tempo\n" +"specificato. Se il ban viene rimosso a mano prima della scadenza, NON verrа " +"rimpiazzato." + +#: ../cs_tban.cpp:101 +msgid "Syntax: TBAN channel nick time" +msgstr "Sintassi: TBAN canale nick tempo" diff --git a/modules/extra/language/cs_tban.nl_NL.po b/modules/extra/language/cs_tban.nl_NL.po new file mode 100644 index 000000000..9439b7408 --- /dev/null +++ b/modules/extra/language/cs_tban.nl_NL.po @@ -0,0 +1,40 @@ +# Dutch translations for cs_tban +# Engelse vertalingen voor het cs_tban +# Copyright (C) 2011 Anope Team +# This file is distributed under the same license as the Anope IRC Services +# Adam <adam@anope.org>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: Anope\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-02-04 03:41-0500\n" +"PO-Revision-Date: 2010-09-26 00:15-0400\n" +"Last-Translator: Adam <adam@anope.org>\n" +"Language-Team: Dutch\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ../cs_tban.cpp:106 +msgid " TBAN Bans the user for a given length of time" +msgstr " TBAN Verban een gebruiker voor een bepaalde tijd" + +#: ../cs_tban.cpp:83 +#, c-format +msgid "%s banned from %s, will auto-expire in %s" +msgstr "%s verbannen van %s, zal verlopen in %s" + +#: ../cs_tban.cpp:93 +msgid "" +"Bans the given user from a channel for a specified length of\n" +"time. If the ban is removed before by hand, it will NOT be replaced." +msgstr "" +"Verbant de gegeven gebruiken van het gegeven kanaal voor de\n" +"gegeven tijdsduur. Als de verbanning eerder wordt verwijderd,\n" +"zal deze NIET worden vervangen." + +#: ../cs_tban.cpp:101 +msgid "Syntax: TBAN channel nick time" +msgstr "Syntax: TBAN kanaal nick tijd" diff --git a/modules/extra/language/cs_tban.pot b/modules/extra/language/cs_tban.pot new file mode 100644 index 000000000..6717f9e2c --- /dev/null +++ b/modules/extra/language/cs_tban.pot @@ -0,0 +1,36 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-02-04 03:41-0500\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../cs_tban.cpp:106 +msgid " TBAN Bans the user for a given length of time" +msgstr "" + +#: ../cs_tban.cpp:83 +#, c-format +msgid "%s banned from %s, will auto-expire in %s" +msgstr "" + +#: ../cs_tban.cpp:93 +msgid "" +"Bans the given user from a channel for a specified length of\n" +"time. If the ban is removed before by hand, it will NOT be replaced." +msgstr "" + +#: ../cs_tban.cpp:101 +msgid "Syntax: TBAN channel nick time" +msgstr "" diff --git a/modules/extra/language/cs_tban.pt_PT.po b/modules/extra/language/cs_tban.pt_PT.po new file mode 100644 index 000000000..0f60ecbcf --- /dev/null +++ b/modules/extra/language/cs_tban.pt_PT.po @@ -0,0 +1,39 @@ +# Portuguese translations for cs_tban +# Copyright (C) 2011 Anope Team +# This file is distributed under the same license as the Anope IRC Services +# Adam <adam@anope.org>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: Anope\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-02-04 03:41-0500\n" +"PO-Revision-Date: 2010-09-26 00:18-0400\n" +"Last-Translator: Adam <adam@anope.org>\n" +"Language-Team: Portuguese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ../cs_tban.cpp:106 +msgid " TBAN Bans the user for a given length of time" +msgstr " TBAN Bane o usuбrio por um determinado perнodo de tempo" + +#: ../cs_tban.cpp:83 +#, c-format +msgid "%s banned from %s, will auto-expire in %s" +msgstr "%s foi banido do %s, irб auto-expirar em %s" + +#: ../cs_tban.cpp:93 +msgid "" +"Bans the given user from a channel for a specified length of\n" +"time. If the ban is removed before by hand, it will NOT be replaced." +msgstr "" +"Bane de um canal o usuбrio especificado por um determinado perнodo de\n" +"tempo. Se o ban for removido manualmente antes do tempo, ele nгo serб " +"recolocado." + +#: ../cs_tban.cpp:101 +msgid "Syntax: TBAN channel nick time" +msgstr "Sintaxe: TBAN canal nick tempo" diff --git a/modules/extra/language/cs_tban.ru_RU.po b/modules/extra/language/cs_tban.ru_RU.po new file mode 100644 index 000000000..f14c06d58 --- /dev/null +++ b/modules/extra/language/cs_tban.ru_RU.po @@ -0,0 +1,41 @@ +# Russian translations for cs_tban +# ?????????? ???????? ??? ?????? cs_tban +# Copyright (C) 2011 Anope Team +# This file is distributed under the same license as the Anope IRC Services +# Adam <adam@anope.org>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: Anope\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-02-04 03:41-0500\n" +"PO-Revision-Date: 2010-09-26 00:20-0400\n" +"Last-Translator: Adam <adam@anope.org>\n" +"Language-Team: Russian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: ../cs_tban.cpp:106 +msgid " TBAN Bans the user for a given length of time" +msgstr " TBAN Банит пользователя на указанный промежуток времени" + +#: ../cs_tban.cpp:83 +#, c-format +msgid "%s banned from %s, will auto-expire in %s" +msgstr "Установленный бан %s на канале %s истечет через %s секунд" + +#: ../cs_tban.cpp:93 +msgid "" +"Bans the given user from a channel for a specified length of\n" +"time. If the ban is removed before by hand, it will NOT be replaced." +msgstr "" +"Банит пользователя на указанный промежуток времени в секундах\n" +"Примечание: удаленный вручную (до своего истечения) бан НЕ БУДЕТ\n" +"переустановлен сервисами автоматически!" + +#: ../cs_tban.cpp:101 +msgid "Syntax: TBAN channel nick time" +msgstr "Синтаксис: TBAN #канал ник время" diff --git a/modules/extra/language/db_mysql.pot b/modules/extra/language/db_mysql.pot new file mode 100644 index 000000000..ac04cee49 --- /dev/null +++ b/modules/extra/language/db_mysql.pot @@ -0,0 +1,34 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-02-04 03:41-0500\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../db_mysql.cpp:142 +msgid " SQLSYNC Import your databases to SQL" +msgstr "" + +#: ../db_mysql.cpp:132 +msgid "" +"Syntax: SQLSYNC\n" +" \n" +"This command syncs your databases with SQL. You should\n" +"only have to execute this command once, when you initially\n" +"import your databases into SQL." +msgstr "" + +#: ../db_mysql.cpp:1400 +msgid "Updating MySQL." +msgstr "" diff --git a/modules/extra/language/hs_request.it_IT.po b/modules/extra/language/hs_request.it_IT.po new file mode 100644 index 000000000..0f50b0596 --- /dev/null +++ b/modules/extra/language/hs_request.it_IT.po @@ -0,0 +1,135 @@ +# Italian translations for hs_request +# Traduzioni italiane per il hs_request +# Copyright (C) 2011 Anope Team +# This file is distributed under the same license as Anope IRC Services +# Adam <adam@anope.org>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: Anope\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-02-04 03:41-0500\n" +"PO-Revision-Date: 2010-09-25 23:42-0400\n" +"Last-Translator: Adam <adam@anope.org>\n" +"Language-Team: Italian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ../hs_request.cpp:193 +msgid "" +" ACTIVATE Approve the requested vHost of a user\n" +" REJECT Reject the requested vHost of a user\n" +" WAITING Convenience command for LIST +req" +msgstr "" +" ACTIVATE Approva il vHost richiesto di un utente\n" +" REJECT Rifiuta il vHost richiesto di un utente\n" +" WAITING Comando per LIST +req" + +#: ../hs_request.cpp:132 +msgid " REQUEST Request a vHost for your nick" +msgstr " REQUEST Richiede un vHost per il tuo nick" + +#: ../hs_request.cpp:274 +#, c-format +msgid "#%d Nick:%s, vhost:%s (%s - %s)" +msgstr "" + +#: ../hs_request.cpp:272 +#, c-format +msgid "#%d Nick:%s, vhost:%s@%s (%s - %s)" +msgstr "" + +#: ../hs_request.cpp:181 ../hs_request.cpp:245 +msgid "A memo informing the user will also be sent." +msgstr "Viene inviato un memo per informare l'utente." + +#: ../hs_request.cpp:179 +msgid "Activate the requested vHost for the given nick." +msgstr "Attiva il vHost richiesto per il nick specificato." + +#: ../hs_request.cpp:278 +#, c-format +msgid "Displayed all records (Count: %d)" +msgstr "" + +#: ../hs_request.cpp:167 ../hs_request.cpp:234 +#, c-format +msgid "No request for nick %s found." +msgstr "Nessuna richiesta trovata per il nick %s." + +#: ../hs_request.cpp:102 +#, c-format +msgid "Please wait %d seconds before requesting a new vHost" +msgstr "Prego attendere %d secondi prima di richiedere un nuovo vHost" + +#: ../hs_request.cpp:243 +msgid "Reject the requested vHost for the given nick." +msgstr "Rifiuta il vHost richiesto per il nick specificato." + +#: ../hs_request.cpp:119 +msgid "" +"Request the given vHost to be actived for your nick by the\n" +"network administrators. Please be patient while your request\n" +"is being considered." +msgstr "" +"Richiede l'attivazione del vHost specificato per il tuo nick da parte\n" +"degli amministratori di rete. Sei pregato di pazientare finchи la tua\n" +"richiesta viene elaborata." + +#: ../hs_request.cpp:177 ../hs_request.cpp:188 +msgid "Syntax: ACTIVATE nick" +msgstr "Sintassi: ACTIVATE nick" + +#: ../hs_request.cpp:241 ../hs_request.cpp:252 +msgid "Syntax: REJECT nick" +msgstr "Sintassi: REJECT nick" + +#: ../hs_request.cpp:65 ../hs_request.cpp:117 ../hs_request.cpp:127 +msgid "Syntax: REQUEST vhost" +msgstr "Sintassi: REQUEST vhost" + +#: ../hs_request.cpp:307 +msgid "Syntax: WAITING" +msgstr "Sintassi: WAITING" + +#: ../hs_request.cpp:309 +msgid "" +"This command is provided for convenience. It is essentially\n" +"the same as performing a LIST +req ." +msgstr "" +"Questo comando и per comoditа. Praticamente и la stessa cosa che\n" +"eseguire un LIST +req ." + +#: ../hs_request.cpp:108 +msgid "Your vHost has been requested" +msgstr "Il tuo vHost и stato richiesto" + +#: ../hs_request.cpp:159 +msgid "[auto memo] Your requested vHost has been approved." +msgstr "[auto memo] Il vHost da te richiesto и stato approvato." + +#: ../hs_request.cpp:225 +msgid "[auto memo] Your requested vHost has been rejected." +msgstr "[auto memo] Il vHost da te richiesto и stato rifiutato." + +#: ../hs_request.cpp:223 +#, c-format +msgid "[auto memo] Your requested vHost has been rejected. Reason: %s" +msgstr "[auto memo] Il vHost da te richiesto и stato rifiutato. Motivo: %s" + +#: ../hs_request.cpp:443 +#, c-format +msgid "[auto memo] vHost %s has been requested." +msgstr "[auto memo] и stato richiesto il vHost %s." + +#: ../hs_request.cpp:161 +#, c-format +msgid "vHost for %s has been activated" +msgstr "Il vHost per %s и stato attivato" + +#: ../hs_request.cpp:230 +#, c-format +msgid "vHost for %s has been rejected" +msgstr "Il vHost per %s и stato rifiutato" diff --git a/modules/extra/language/hs_request.nl_NL.po b/modules/extra/language/hs_request.nl_NL.po new file mode 100644 index 000000000..59852158c --- /dev/null +++ b/modules/extra/language/hs_request.nl_NL.po @@ -0,0 +1,136 @@ +# Dutch translations for hs_request +# Engelse vertalingen voor het hs_request +# Copyright (C) 2011 Anope Team +# This file is distributed under the same license as Anope IRC Services +# Adam <adam@anope.org>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: Anope\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-02-04 03:41-0500\n" +"PO-Revision-Date: 2010-09-25 22:26-0400\n" +"Last-Translator: Adam <adam@anope.org>\n" +"Language-Team: Dutch\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ../hs_request.cpp:193 +msgid "" +" ACTIVATE Approve the requested vHost of a user\n" +" REJECT Reject the requested vHost of a user\n" +" WAITING Convenience command for LIST +req" +msgstr "" +" ACTIVATE Activeer de aangevraagde vHost voor een gebruiker\n" +" REJECT Keur de aangevraagde vHost voor een gebruiker af\n" +" WAITING Snelkoppeling naar LIST +req" + +#: ../hs_request.cpp:132 +msgid " REQUEST Request a vHost for your nick" +msgstr " REQUEST Vraag een vHost aan voor je nick" + +#: ../hs_request.cpp:274 +#, c-format +msgid "#%d Nick:%s, vhost:%s (%s - %s)" +msgstr "" + +#: ../hs_request.cpp:272 +#, c-format +msgid "#%d Nick:%s, vhost:%s@%s (%s - %s)" +msgstr "" + +#: ../hs_request.cpp:181 ../hs_request.cpp:245 +msgid "A memo informing the user will also be sent." +msgstr "" +"Een memo die de gebruiker op de hoogste stelt zal ook worden verstuurd." + +#: ../hs_request.cpp:179 +msgid "Activate the requested vHost for the given nick." +msgstr "Activeer de aangevraagde vHost voor de gegeven nick." + +#: ../hs_request.cpp:278 +#, c-format +msgid "Displayed all records (Count: %d)" +msgstr "" + +#: ../hs_request.cpp:167 ../hs_request.cpp:234 +#, c-format +msgid "No request for nick %s found." +msgstr "Geen aanvraag voor nick %s gevonden." + +#: ../hs_request.cpp:102 +#, c-format +msgid "Please wait %d seconds before requesting a new vHost" +msgstr "Wacht %d seconden voor je een nieuwe vHost aanvraagt" + +#: ../hs_request.cpp:243 +msgid "Reject the requested vHost for the given nick." +msgstr "Keur de aangevraagde vHost voor de gegeven nick af." + +#: ../hs_request.cpp:119 +msgid "" +"Request the given vHost to be actived for your nick by the\n" +"network administrators. Please be patient while your request\n" +"is being considered." +msgstr "" +"Verzoek de gegeven vHost te activeren voor jouw nick bij de\n" +"netwerk beheerders. Het kan even duren voordat je aanvraag\n" +"afgehandeld wordt." + +#: ../hs_request.cpp:177 ../hs_request.cpp:188 +msgid "Syntax: ACTIVATE nick" +msgstr "Gebruik: ACTIVATE nick" + +#: ../hs_request.cpp:241 ../hs_request.cpp:252 +msgid "Syntax: REJECT nick" +msgstr "Gebruik: REJECT nick" + +#: ../hs_request.cpp:65 ../hs_request.cpp:117 ../hs_request.cpp:127 +msgid "Syntax: REQUEST vhost" +msgstr "Gebruik: REQUEST vhost" + +#: ../hs_request.cpp:307 +msgid "Syntax: WAITING" +msgstr "Gebruik: WAITING" + +#: ../hs_request.cpp:309 +msgid "" +"This command is provided for convenience. It is essentially\n" +"the same as performing a LIST +req ." +msgstr "" +"Dit commando is beschikbaar als handigheid. Het is simpelweg\n" +"hetzelfde als LIST +req ." + +#: ../hs_request.cpp:108 +msgid "Your vHost has been requested" +msgstr "Je vHost is aangevraagd" + +#: ../hs_request.cpp:159 +msgid "[auto memo] Your requested vHost has been approved." +msgstr "[auto memo] Je aangevraagde vHost is geaccepteerd." + +#: ../hs_request.cpp:225 +msgid "[auto memo] Your requested vHost has been rejected." +msgstr "[auto memo] Je aangevraagde vHost is afgekeurd." + +#: ../hs_request.cpp:223 +#, c-format +msgid "[auto memo] Your requested vHost has been rejected. Reason: %s" +msgstr "[auto memo] Je aangevraagde vHost is afgekeurd. Reden: %s" + +#: ../hs_request.cpp:443 +#, c-format +msgid "[auto memo] vHost %s has been requested." +msgstr "[auto memo] vHost %s is aangevraagd." + +#: ../hs_request.cpp:161 +#, c-format +msgid "vHost for %s has been activated" +msgstr "vHost voor %s is geactiveerd" + +#: ../hs_request.cpp:230 +#, c-format +msgid "vHost for %s has been rejected" +msgstr "vHost voor %s is afgekeurd" diff --git a/modules/extra/language/hs_request.pot b/modules/extra/language/hs_request.pot new file mode 100644 index 000000000..d2e0a7c35 --- /dev/null +++ b/modules/extra/language/hs_request.pot @@ -0,0 +1,126 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-02-04 03:41-0500\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../hs_request.cpp:193 +msgid "" +" ACTIVATE Approve the requested vHost of a user\n" +" REJECT Reject the requested vHost of a user\n" +" WAITING Convenience command for LIST +req" +msgstr "" + +#: ../hs_request.cpp:132 +msgid " REQUEST Request a vHost for your nick" +msgstr "" + +#: ../hs_request.cpp:274 +#, c-format +msgid "#%d Nick:%s, vhost:%s (%s - %s)" +msgstr "" + +#: ../hs_request.cpp:272 +#, c-format +msgid "#%d Nick:%s, vhost:%s@%s (%s - %s)" +msgstr "" + +#: ../hs_request.cpp:181 ../hs_request.cpp:245 +msgid "A memo informing the user will also be sent." +msgstr "" + +#: ../hs_request.cpp:179 +msgid "Activate the requested vHost for the given nick." +msgstr "" + +#: ../hs_request.cpp:278 +#, c-format +msgid "Displayed all records (Count: %d)" +msgstr "" + +#: ../hs_request.cpp:167 ../hs_request.cpp:234 +#, c-format +msgid "No request for nick %s found." +msgstr "" + +#: ../hs_request.cpp:102 +#, c-format +msgid "Please wait %d seconds before requesting a new vHost" +msgstr "" + +#: ../hs_request.cpp:243 +msgid "Reject the requested vHost for the given nick." +msgstr "" + +#: ../hs_request.cpp:119 +msgid "" +"Request the given vHost to be actived for your nick by the\n" +"network administrators. Please be patient while your request\n" +"is being considered." +msgstr "" + +#: ../hs_request.cpp:177 ../hs_request.cpp:188 +msgid "Syntax: ACTIVATE nick" +msgstr "" + +#: ../hs_request.cpp:241 ../hs_request.cpp:252 +msgid "Syntax: REJECT nick" +msgstr "" + +#: ../hs_request.cpp:65 ../hs_request.cpp:117 ../hs_request.cpp:127 +msgid "Syntax: REQUEST vhost" +msgstr "" + +#: ../hs_request.cpp:307 +msgid "Syntax: WAITING" +msgstr "" + +#: ../hs_request.cpp:309 +msgid "" +"This command is provided for convenience. It is essentially\n" +"the same as performing a LIST +req ." +msgstr "" + +#: ../hs_request.cpp:108 +msgid "Your vHost has been requested" +msgstr "" + +#: ../hs_request.cpp:159 +msgid "[auto memo] Your requested vHost has been approved." +msgstr "" + +#: ../hs_request.cpp:225 +msgid "[auto memo] Your requested vHost has been rejected." +msgstr "" + +#: ../hs_request.cpp:223 +#, c-format +msgid "[auto memo] Your requested vHost has been rejected. Reason: %s" +msgstr "" + +#: ../hs_request.cpp:443 +#, c-format +msgid "[auto memo] vHost %s has been requested." +msgstr "" + +#: ../hs_request.cpp:161 +#, c-format +msgid "vHost for %s has been activated" +msgstr "" + +#: ../hs_request.cpp:230 +#, c-format +msgid "vHost for %s has been rejected" +msgstr "" diff --git a/modules/extra/language/hs_request.pt_PT.po b/modules/extra/language/hs_request.pt_PT.po new file mode 100644 index 000000000..a9fd9844c --- /dev/null +++ b/modules/extra/language/hs_request.pt_PT.po @@ -0,0 +1,134 @@ +# Portuguese translations for hs_request +# Copyright (C) 2011 Anope Team +# This file is distributed under the same license as Anope IRC Services +# Adam <adam@anope.org>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: Anope\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-02-04 03:41-0500\n" +"PO-Revision-Date: 2010-09-25 22:48-0400\n" +"Last-Translator: Adam <adam@anope.org>\n" +"Language-Team: Portuguese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ../hs_request.cpp:193 +msgid "" +" ACTIVATE Approve the requested vHost of a user\n" +" REJECT Reject the requested vHost of a user\n" +" WAITING Convenience command for LIST +req" +msgstr "" +" ACTIVATE Aprova o pedido de vHost de um usuбrio\n" +" REJECT Recusa o pedido de vHost de um usuбrio\n" +" WAITING Comando para LISTAR +req" + +#: ../hs_request.cpp:132 +msgid " REQUEST Request a vHost for your nick" +msgstr " REQUEST Request a vHost for your nick" + +#: ../hs_request.cpp:274 +#, c-format +msgid "#%d Nick:%s, vhost:%s (%s - %s)" +msgstr "" + +#: ../hs_request.cpp:272 +#, c-format +msgid "#%d Nick:%s, vhost:%s@%s (%s - %s)" +msgstr "" + +#: ../hs_request.cpp:181 ../hs_request.cpp:245 +msgid "A memo informing the user will also be sent." +msgstr "Um memo informando o usuбrio tambйm serб enviado." + +#: ../hs_request.cpp:179 +msgid "Activate the requested vHost for the given nick." +msgstr "Ativa o vHost solicitado para o nick fornecido." + +#: ../hs_request.cpp:278 +#, c-format +msgid "Displayed all records (Count: %d)" +msgstr "" + +#: ../hs_request.cpp:167 ../hs_request.cpp:234 +#, c-format +msgid "No request for nick %s found." +msgstr "Nenhum pedido encontrado para o nick %s." + +#: ../hs_request.cpp:102 +#, c-format +msgid "Please wait %d seconds before requesting a new vHost" +msgstr "Por favor, espere %d segundos antes de fazer um novo pedido de vHost" + +#: ../hs_request.cpp:243 +msgid "Reject the requested vHost for the given nick." +msgstr "Recusa o pedido de vHost para o nick fornecido." + +#: ../hs_request.cpp:119 +msgid "" +"Request the given vHost to be actived for your nick by the\n" +"network administrators. Please be patient while your request\n" +"is being considered." +msgstr "" +"Solicita a ativaзгo do vHost fornecido em seu nick pelos\n" +"administradores da rede. Por favor, tenha paciкncia\n" +"enquanto seu pedido й analisado." + +#: ../hs_request.cpp:177 ../hs_request.cpp:188 +msgid "Syntax: ACTIVATE nick" +msgstr "Sintaxe: ACTIVATE nick" + +#: ../hs_request.cpp:241 ../hs_request.cpp:252 +msgid "Syntax: REJECT nick" +msgstr "Sintaxe: REJECT nick" + +#: ../hs_request.cpp:65 ../hs_request.cpp:117 ../hs_request.cpp:127 +msgid "Syntax: REQUEST vhost" +msgstr "Sintaxe: REQUEST vhost" + +#: ../hs_request.cpp:307 +msgid "Syntax: WAITING" +msgstr "Sintaxe: WAITING" + +#: ../hs_request.cpp:309 +msgid "" +"This command is provided for convenience. It is essentially\n" +"the same as performing a LIST +req ." +msgstr "" +"Este comando й usado por conveniкncia. Й essencialmente\n" +"o mesmo que fazer um LIST +req" + +#: ../hs_request.cpp:108 +msgid "Your vHost has been requested" +msgstr "Seu pedido de vHost foi encaminhado" + +#: ../hs_request.cpp:159 +msgid "[auto memo] Your requested vHost has been approved." +msgstr "[Auto Memo] Seu pedido de vHost foi aprovado." + +#: ../hs_request.cpp:225 +msgid "[auto memo] Your requested vHost has been rejected." +msgstr "[Auto Memo] Seu pedido de vHost foi recusado." + +#: ../hs_request.cpp:223 +#, c-format +msgid "[auto memo] Your requested vHost has been rejected. Reason: %s" +msgstr "[Auto Memo] Seu pedido de vHost foi recusado. Motivo: %s" + +#: ../hs_request.cpp:443 +#, c-format +msgid "[auto memo] vHost %s has been requested." +msgstr "[Auto Memo] O vHost %s foi solicitado." + +#: ../hs_request.cpp:161 +#, c-format +msgid "vHost for %s has been activated" +msgstr "O vHost para %s foi ativado" + +#: ../hs_request.cpp:230 +#, c-format +msgid "vHost for %s has been rejected" +msgstr "O vHost de %s foi recusado" diff --git a/modules/extra/language/hs_request.ru_RU.po b/modules/extra/language/hs_request.ru_RU.po new file mode 100644 index 000000000..646fc4714 --- /dev/null +++ b/modules/extra/language/hs_request.ru_RU.po @@ -0,0 +1,137 @@ +# Russian translations for hs_request +# ?????????? ???????? ??? ?????? PACKAGE. +# Copyright (C) 2011 Anope Team +# This file is distributed under the same license as Anope IRC Services +# Adam <adam@anope.org>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: Anope\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-02-04 03:41-0500\n" +"PO-Revision-Date: 2010-09-25 23:27-0400\n" +"Last-Translator: Adam <adam@anope.org>\n" +"Language-Team: Russian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: ../hs_request.cpp:193 +msgid "" +" ACTIVATE Approve the requested vHost of a user\n" +" REJECT Reject the requested vHost of a user\n" +" WAITING Convenience command for LIST +req" +msgstr "" +" ACTIVATE Утвердить запрашиваемый пользователем vHost\n" +" REJECT Отклонить запрашиваемый пользователем vHost\n" +" WAITING Список запросов ожидающих обработки (аналог LIST +req)" + +#: ../hs_request.cpp:132 +msgid " REQUEST Request a vHost for your nick" +msgstr " REQUEST Запрос на vHost для вашего текущего ника" + +#: ../hs_request.cpp:274 +#, c-format +msgid "#%d Nick:%s, vhost:%s (%s - %s)" +msgstr "" + +#: ../hs_request.cpp:272 +#, c-format +msgid "#%d Nick:%s, vhost:%s@%s (%s - %s)" +msgstr "" + +#: ../hs_request.cpp:181 ../hs_request.cpp:245 +msgid "A memo informing the user will also be sent." +msgstr "Пользователю будет послано авто-уведомление об активации его запроса." + +#: ../hs_request.cpp:179 +msgid "Activate the requested vHost for the given nick." +msgstr "Утвердить запрашиваемый vHost для указанного ника." + +#: ../hs_request.cpp:278 +#, c-format +msgid "Displayed all records (Count: %d)" +msgstr "" + +#: ../hs_request.cpp:167 ../hs_request.cpp:234 +#, c-format +msgid "No request for nick %s found." +msgstr "Запрос на vHost для ника %s не найден." + +#: ../hs_request.cpp:102 +#, c-format +msgid "Please wait %d seconds before requesting a new vHost" +msgstr "Пожалуйста, подождите %d секунд, прежде чем запрашивать новый vHost" + +#: ../hs_request.cpp:243 +msgid "Reject the requested vHost for the given nick." +msgstr "Отклонить запрашиваемый vHost для указанного ника." + +#: ../hs_request.cpp:119 +msgid "" +"Request the given vHost to be actived for your nick by the\n" +"network administrators. Please be patient while your request\n" +"is being considered." +msgstr "" +"Отправляет запрос на активацию vHost, который будет рассмотрен одним из\n" +"администраторов сети. Просьба проявить терпение, пока запрос\n" +"рассматривается администрацией." + +#: ../hs_request.cpp:177 ../hs_request.cpp:188 +msgid "Syntax: ACTIVATE nick" +msgstr "Синтаксис: ACTIVATE ник" + +#: ../hs_request.cpp:241 ../hs_request.cpp:252 +msgid "Syntax: REJECT nick" +msgstr "Синтаксис: REJECT ник" + +#: ../hs_request.cpp:65 ../hs_request.cpp:117 ../hs_request.cpp:127 +msgid "Syntax: REQUEST vhost" +msgstr "Синтаксис: REQUEST vHost" + +#: ../hs_request.cpp:307 +msgid "Syntax: WAITING" +msgstr "Синтаксис: WAITING" + +#: ../hs_request.cpp:309 +msgid "" +"This command is provided for convenience. It is essentially\n" +"the same as performing a LIST +req ." +msgstr "" +"Данная команда создана для удобства использования и выводит список " +"запросов,\n" +"ожидающих обработки. Аналогичная команда: LIST +req ." + +#: ../hs_request.cpp:108 +msgid "Your vHost has been requested" +msgstr "Ваш запрос на vHost отправлен." + +#: ../hs_request.cpp:159 +msgid "[auto memo] Your requested vHost has been approved." +msgstr "[авто-сообщение] Запрашиваемый вами vHost утвержден и активирован." + +#: ../hs_request.cpp:225 +msgid "[auto memo] Your requested vHost has been rejected." +msgstr "[авто-сообщение] Запрашиваемый вами vHost отклонен." + +#: ../hs_request.cpp:223 +#, c-format +msgid "[auto memo] Your requested vHost has been rejected. Reason: %s" +msgstr "[авто-сообщение] Запрашиваемый вами vHost отклонен. Причина: %s" + +#: ../hs_request.cpp:443 +#, c-format +msgid "[auto memo] vHost %s has been requested." +msgstr "[авто-сообщение] Был запрошен vHost %s" + +#: ../hs_request.cpp:161 +#, c-format +msgid "vHost for %s has been activated" +msgstr "vHost для %s успешно активирован" + +#: ../hs_request.cpp:230 +#, c-format +msgid "vHost for %s has been rejected" +msgstr "vHost для %s отклонен." diff --git a/modules/extra/language/ns_maxemail.de_DE.po b/modules/extra/language/ns_maxemail.de_DE.po new file mode 100644 index 000000000..fe1f3aef4 --- /dev/null +++ b/modules/extra/language/ns_maxemail.de_DE.po @@ -0,0 +1,28 @@ +# German translations for ns_maxemail +# German messages for ns_maxemail +# Copyright (C) 2011 Anope Team +# This file is distributed under the same license as Anope IRC Services +# Adam <adam@anope.org>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: Anope\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-02-04 03:41-0500\n" +"PO-Revision-Date: 2010-09-26 00:03-0400\n" +"Last-Translator: Adam <adam@anope.org>\n" +"Language-Team: German\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ../ns_maxemail.cpp:33 +#, fuzzy, c-format +msgid "The given email address has reached its usage limit of %d users." +msgstr "Die angegebene eMail hat die limit Begrenzung von %d User erreicht." + +#: ../ns_maxemail.cpp:31 +#, fuzzy +msgid "The given email address has reached its usage limit of 1 user." +msgstr "Die angegebene eMail hat die limit Begrenzung von 1 User erreicht." diff --git a/modules/extra/language/ns_maxemail.it_IT.po b/modules/extra/language/ns_maxemail.it_IT.po new file mode 100644 index 000000000..1cd1a4083 --- /dev/null +++ b/modules/extra/language/ns_maxemail.it_IT.po @@ -0,0 +1,32 @@ +# Italian translations for ns_maxemail +# Traduzioni italiane per il ns_maxemail +# Copyright (C) 2011 Anope Team +# This file is distributed under the same license as Anope IRC Services +# Adam <adam@anope.org>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: Anope\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-02-04 03:41-0500\n" +"PO-Revision-Date: 2010-09-26 00:11-0400\n" +"Last-Translator: Adam <adam@anope.org>\n" +"Language-Team: Italian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ../ns_maxemail.cpp:33 +#, fuzzy, c-format +msgid "The given email address has reached its usage limit of %d users." +msgstr "" +"L'indirizzo email specificato ha raggiunto il suo limite d'utilizzo di %d " +"utenti." + +#: ../ns_maxemail.cpp:31 +#, fuzzy +msgid "The given email address has reached its usage limit of 1 user." +msgstr "" +"L'indirizzo email specificato ha raggiunto il suo limite d'utilizzo di 1 " +"utente." diff --git a/modules/extra/language/ns_maxemail.nl_NL.po b/modules/extra/language/ns_maxemail.nl_NL.po new file mode 100644 index 000000000..fb84c786a --- /dev/null +++ b/modules/extra/language/ns_maxemail.nl_NL.po @@ -0,0 +1,28 @@ +# Dutch translations for ns_maxemail +# Engelse vertalingen voor het ns_maxemail +# Copyright (C) 2011 Anope Team +# This file is distributed under the same license as Anope IRC Services +# Adam <adam@anope.org>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: Anope\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-02-04 03:41-0500\n" +"PO-Revision-Date: 2010-09-25 23:57-0400\n" +"Last-Translator: Adam <adam@anope.org>\n" +"Language-Team: Dutch\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ../ns_maxemail.cpp:33 +#, fuzzy, c-format +msgid "The given email address has reached its usage limit of %d users." +msgstr "Het gegeven email adres heeft de limiet van %d gebruikers bereikt." + +#: ../ns_maxemail.cpp:31 +#, fuzzy +msgid "The given email address has reached its usage limit of 1 user." +msgstr "Het gegeven email adres heeft de limiet van 1 gebruiker bereikt." diff --git a/modules/extra/language/ns_maxemail.pot b/modules/extra/language/ns_maxemail.pot new file mode 100644 index 000000000..c799470d3 --- /dev/null +++ b/modules/extra/language/ns_maxemail.pot @@ -0,0 +1,26 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-02-04 03:41-0500\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../ns_maxemail.cpp:33 +#, c-format +msgid "The given email address has reached its usage limit of %d users." +msgstr "" + +#: ../ns_maxemail.cpp:31 +msgid "The given email address has reached its usage limit of 1 user." +msgstr "" diff --git a/modules/extra/language/ns_maxemail.pt_PT.po b/modules/extra/language/ns_maxemail.pt_PT.po new file mode 100644 index 000000000..ff807f582 --- /dev/null +++ b/modules/extra/language/ns_maxemail.pt_PT.po @@ -0,0 +1,28 @@ +# Portuguese translations for ns_maxemail +# Copyright (C) 2011 Anope Team +# This file is distributed under the same license as Anope IRC Services +# Adam <adam@anope.org>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: Anope\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-02-04 03:41-0500\n" +"PO-Revision-Date: 2010-09-26 00:05-0400\n" +"Last-Translator: Adam <adam@anope.org>\n" +"Language-Team: Portuguese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ../ns_maxemail.cpp:33 +#, fuzzy, c-format +msgid "The given email address has reached its usage limit of %d users." +msgstr "" +"O endereзo de email fornecido alcanзou seu limite de uso de %d usuбrios." + +#: ../ns_maxemail.cpp:31 +#, fuzzy +msgid "The given email address has reached its usage limit of 1 user." +msgstr "O endereзo de email fornecido alcanзou seu limite de uso de 1 usuбrio." diff --git a/modules/extra/language/ns_maxemail.ru_RU.po b/modules/extra/language/ns_maxemail.ru_RU.po new file mode 100644 index 000000000..1fa267d55 --- /dev/null +++ b/modules/extra/language/ns_maxemail.ru_RU.po @@ -0,0 +1,30 @@ +# Russian translations for ns_maxemail +# ?????????? ???????? ??? ?????? ns_maxemail +# Copyright (C) 2011 Anope Team +# This file is distributed under the same license as Anope IRC Services +# Adam <adam@anope.org>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: Anope\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-02-04 03:41-0500\n" +"PO-Revision-Date: 2010-09-26 00:07-0400\n" +"Last-Translator: Adam <adam@anope.org>\n" +"Language-Team: Russian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: ../ns_maxemail.cpp:33 +#, fuzzy, c-format +msgid "The given email address has reached its usage limit of %d users." +msgstr "" +"Указанный вами email-адрес используется максимально допустимое кол-во раз: %d" + +#: ../ns_maxemail.cpp:31 +#, fuzzy +msgid "The given email address has reached its usage limit of 1 user." +msgstr "Указанный вами email-адрес уже кем-то используется." diff --git a/modules/extra/language/update.sh b/modules/extra/language/update.sh new file mode 100755 index 000000000..3ca7081ae --- /dev/null +++ b/modules/extra/language/update.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +for f in `ls ../*.cpp` +do + BASE=`basename $f | cut -d'.' -f1` + xgettext -C -s -d $BASE -o $BASE.pot --from-code=utf-8 --keyword=_ $f +done + +for f in `ls *.po` +do + msgmerge -v -s -U $f `basename $f | cut -d'.' -f1`.pot +done + +rm -f *~ diff --git a/modules/extra/ns_set_misc.cpp b/modules/extra/ns_set_misc.cpp index dc420e36d..72b4ba5e9 100644 --- a/modules/extra/ns_set_misc.cpp +++ b/modules/extra/ns_set_misc.cpp @@ -35,17 +35,17 @@ class CommandNSSetMisc : public Command if (params.size() > 1) { nc->Extend("nickserv:" + this->name, new ExtensibleItemRegular<Anope::string>(params[1])); - u->SendMessage(NickServ, CHAN_SETTING_CHANGED, this->name.c_str(), nc->display.c_str(), params[1].c_str()); + u->SendMessage(NickServ, LanguageString::CHAN_SETTING_CHANGED, this->name.c_str(), nc->display.c_str(), params[1].c_str()); } else - u->SendMessage(NickServ, CHAN_SETTING_UNSET, this->name.c_str(), nc->display.c_str()); + u->SendMessage(NickServ, LanguageString::CHAN_SETTING_UNSET, this->name.c_str(), nc->display.c_str()); return MOD_CONT; } void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SET", NICK_SET_SYNTAX); + SyntaxError(source, "SET", LanguageString::NICK_SET_SYNTAX); } void OnServHelp(CommandSource &source) @@ -63,7 +63,7 @@ class CommandNSSASetMisc : public CommandNSSetMisc void OnSyntaxError(CommandSource &source, const Anope::string &) { - SyntaxError(source, "SASET", NICK_SASET_SYNTAX); + SyntaxError(source, "SASET", LanguageString::NICK_SASET_SYNTAX); } }; |