diff options
author | Andrei Karas <akaras@inbox.ru> | 2016-01-04 15:44:31 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2016-01-04 16:24:42 +0300 |
commit | bc2c095db69be01837d07af1151b0f0a3061713f (patch) | |
tree | 98009b4483d873f45f7b4f2897a4a7ba5118d39e | |
parent | 9b5b48739b62fca4bb30cd04be1031ac3f80095d (diff) | |
download | manaplus-bc2c095db69be01837d07af1151b0f0a3061713f.tar.gz manaplus-bc2c095db69be01837d07af1151b0f0a3061713f.tar.bz2 manaplus-bc2c095db69be01837d07af1151b0f0a3061713f.tar.xz manaplus-bc2c095db69be01837d07af1151b0f0a3061713f.zip |
Add missing TRANSLATORS comments to translation strings.
51 files changed, 334 insertions, 115 deletions
diff --git a/src/actions/actions.cpp b/src/actions/actions.cpp index ba5bb9226..d8fa1c165 100644 --- a/src/actions/actions.cpp +++ b/src/actions/actions.cpp @@ -1111,6 +1111,7 @@ impHandler0(cacheInfo) return; unsigned int all = 0; + // TRANSLATORS: chat fonts message debugChatTab->chatLog(_("font cache size"), ChatMsgType::BY_SERVER); std::string str; for (int f = 0; f < 256; f ++) @@ -1123,14 +1124,17 @@ impHandler0(cacheInfo) } } debugChatTab->chatLog(str, ChatMsgType::BY_SERVER); + // TRANSLATORS: chat fonts message debugChatTab->chatLog(strprintf("%s %d", _("Cache size:"), all), ChatMsgType::BY_SERVER); #ifdef DEBUG_FONT_COUNTERS debugChatTab->chatLog("", ChatMsgType::BY_SERVER); debugChatTab->chatLog(strprintf("%s %d", + // TRANSLATORS: chat fonts message _("Created:"), font->getCreateCounter()), ChatMsgType::BY_SERVER); debugChatTab->chatLog(strprintf("%s %d", + // TRANSLATORS: chat fonts message _("Deleted:"), font->getDeleteCounter()), ChatMsgType::BY_SERVER); #endif @@ -1467,6 +1471,7 @@ impHandler0(createItems) impHandler(uploadConfig) { + // TRANSLATORS: upload config chat message uploadFile(_("Uploaded config into:"), config.getFileName(), "?xml", @@ -1476,6 +1481,7 @@ impHandler(uploadConfig) impHandler(uploadServerConfig) { + // TRANSLATORS: upload config chat message uploadFile(_("Uploaded server config into:"), serverConfig.getFileName(), "?xml", @@ -1485,6 +1491,7 @@ impHandler(uploadServerConfig) impHandler(uploadLog) { + // TRANSLATORS: upload log chat message uploadFile(_("Uploaded log into:"), settings.logFileName, "?txt", diff --git a/src/actions/chat.cpp b/src/actions/chat.cpp index e44b3a259..9d9be4279 100644 --- a/src/actions/chat.cpp +++ b/src/actions/chat.cpp @@ -423,8 +423,8 @@ impHandler(toggle) { if (chatWindow && event.tab) { - // TRANSLATORS: message from toggle chat command event.tab->chatLog(chatWindow->getReturnTogglesChat() ? + // TRANSLATORS: message from toggle chat command _("Return toggles chat.") : _("Message closes chat."), ChatMsgType::BY_SERVER); } @@ -597,6 +597,7 @@ impHandler(hat) const int sprite = localPlayer->getSpriteID( charServerHandler->hatSprite()); const ItemInfo &info = ItemDB::get(sprite); + // TRANSLATORS: equipped hat chat message const std::string str = strprintf(_("equipped hat %s."), info.getName().c_str()); outString(event.tab, str, str); diff --git a/src/actions/pets.cpp b/src/actions/pets.cpp index bf06b3a75..d69618356 100644 --- a/src/actions/pets.cpp +++ b/src/actions/pets.cpp @@ -107,6 +107,7 @@ impHandler(setPetName) const Being *const pet = getPet(); if (!pet) return false; + // TRANSLATORS: dialog header inputActionReplayListener.openDialog(_("Rename your pet"), pet->getName(), InputAction::PET_SET_NAME); diff --git a/src/actions/windows.cpp b/src/actions/windows.cpp index c4aff5b19..508f17105 100644 --- a/src/actions/windows.cpp +++ b/src/actions/windows.cpp @@ -319,6 +319,7 @@ impHandler0(quickWindowShow) if (setupWindow->isWindowVisible()) setupWindow->doCancel(); setupWindow->setVisible(Visible_true); + // TRANSLATORS: settings tab name setupWindow->activateTab(_("Quick")); setupWindow->requestMoveToTop(); return true; diff --git a/src/being/being.cpp b/src/being/being.cpp index 785961e47..194bfb526 100644 --- a/src/being/being.cpp +++ b/src/being/being.cpp @@ -660,9 +660,9 @@ void Being::takeDamage(Being *restrict const attacker, BLOCK_START("Being::takeDamage1") Font *font = nullptr; - // TRANSLATORS: hit or miss message in attacks - const std::string damage = amount ? toString(amount) - : type == AttackType::FLEE ? _("dodge") : _("miss"); + const std::string damage = amount ? toString(amount) : + // TRANSLATORS: dodge or miss message in attacks + type == AttackType::FLEE ? _("dodge") : _("miss"); const Color *color; if (gui) diff --git a/src/being/localplayer.cpp b/src/being/localplayer.cpp index 91a601711..1d0fd92aa 100644 --- a/src/being/localplayer.cpp +++ b/src/being/localplayer.cpp @@ -1085,8 +1085,9 @@ void LocalPlayer::addJobMessage(const int change) { MessagePair pair = mMessages.back(); // TRANSLATORS: this is normal experience - if (pair.first.find(strprintf(" %s", _("xp"))) - == pair.first.size() - strlen(_("xp")) - 1) + if (pair.first.find(strprintf(" %s", _("xp"))) == + // TRANSLATORS: this is normal experience + pair.first.size() - strlen(_("xp")) - 1) { mMessages.pop_back(); // TRANSLATORS: this is job experience diff --git a/src/client.cpp b/src/client.cpp index 6506c9241..c4d879355 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -1664,8 +1664,8 @@ int Client::gameExec() serverConfig.write(); logger->log1("State: ERROR"); logger->log("Error: %s\n", errorMessage.c_str()); - // TRANSLATORS: error message header mCurrentDialog = DialogsManager::openErrorDialog( + // TRANSLATORS: error message header _("Error"), errorMessage, Modal_true); diff --git a/src/dirs.cpp b/src/dirs.cpp index d05500b97..190249737 100644 --- a/src/dirs.cpp +++ b/src/dirs.cpp @@ -527,8 +527,8 @@ void Dirs::initScreenshotDir() settings.screenshotDir = settings.options.screenshotDir; if (mkdir_r(settings.screenshotDir.c_str())) { - // TRANSLATORS: directory creation error logger->log(strprintf( + // TRANSLATORS: directory creation error _("Error: %s doesn't exist and can't be created! " "Exiting."), settings.screenshotDir.c_str())); } @@ -548,8 +548,8 @@ void Dirs::initScreenshotDir() if (mkdir_r(settings.screenshotDir.c_str())) { - // TRANSLATORS: directory creation error logger->log(strprintf( + // TRANSLATORS: directory creation error _("Error: %s doesn't exist and can't be created! " "Exiting."), settings.screenshotDir.c_str())); } diff --git a/src/dyetool/dyemain.cpp b/src/dyetool/dyemain.cpp index 74cf426a0..8741ff9e7 100644 --- a/src/dyetool/dyemain.cpp +++ b/src/dyetool/dyemain.cpp @@ -44,8 +44,11 @@ static void printHelp() { + // TRANSLATORS: command line help std::cout << _("dyecmd srcfile dyestring dstfile") << std::endl; + // TRANSLATORS: command line help std::cout << _("or") << std::endl; + // TRANSLATORS: command line help std::cout << _("dyecmd srcdyestring dstfile") << std::endl; } diff --git a/src/gui/dialogsmanager.cpp b/src/gui/dialogsmanager.cpp index 80138c345..39db3a0e8 100644 --- a/src/gui/dialogsmanager.cpp +++ b/src/gui/dialogsmanager.cpp @@ -140,8 +140,8 @@ void DialogsManager::playerDeath() #ifndef DYECMD if (!deathNotice) { - // TRANSLATORS: message header CREATEWIDGETV(deathNotice, OkDialog, + // TRANSLATORS: message header _("Message"), DeadDB::getRandomString(), // TRANSLATORS: ok dialog button diff --git a/src/gui/popups/popupmenu.cpp b/src/gui/popups/popupmenu.cpp index 2c6b3c6a4..3bf1a6d9c 100644 --- a/src/gui/popups/popupmenu.cpp +++ b/src/gui/popups/popupmenu.cpp @@ -228,9 +228,9 @@ void PopupMenu::showPopup(const int x, const int y, const Being *const being) || (guildManager && guildManager->havePower())) #endif { - // TRANSLATORS: popup menu item - // TRANSLATORS: invite player to guild mBrowserBox->addRow("/guild 'NAME'", + // TRANSLATORS: popup menu item + // TRANSLATORS: invite player to guild _("Invite to guild")); } } @@ -258,9 +258,9 @@ void PopupMenu::showPopup(const int x, const int y, const Being *const being) mBrowserBox->addRow("/talk 'NAME'", _("Talk")); if (serverFeatures->haveNpcWhispers()) { - // TRANSLATORS: popup menu item - // TRANSLATORS: whisper to npc mBrowserBox->addRow("/whispertext NPC:'NAME'", + // TRANSLATORS: popup menu item + // TRANSLATORS: whisper to npc _("Whisper")); } // TRANSLATORS: popup menu item @@ -531,9 +531,9 @@ void PopupMenu::showPlayerPopup(const std::string &nick) } if (guild2->getServerGuild()) { - // TRANSLATORS: popup menu item - // TRANSLATORS: change player position in guild mBrowserBox->addRow(strprintf( + // TRANSLATORS: popup menu item + // TRANSLATORS: change player position in guild "@@guild-pos|%s >@@", _("Change pos in guild"))); } } @@ -865,9 +865,9 @@ void PopupMenu::showChatPopup(const int x, const int y, ChatTab *const tab) } if (guild2->getServerGuild()) { - // TRANSLATORS: popup menu item - // TRANSLATORS: change player position in guild mBrowserBox->addRow(strprintf("@@guild-pos|%s >@@", + // TRANSLATORS: popup menu item + // TRANSLATORS: change player position in guild _("Change pos in guild"))); } } @@ -879,9 +879,9 @@ void PopupMenu::showChatPopup(const int x, const int y, ChatTab *const tab) && guildManager->havePower())) #endif { - // TRANSLATORS: popup menu item - // TRANSLATORS: invite player to guild mBrowserBox->addRow("/guild 'NAME'", + // TRANSLATORS: popup menu item + // TRANSLATORS: invite player to guild _("Invite to guild")); } } @@ -1056,10 +1056,12 @@ void PopupMenu::handleLink(const std::string &link, else if (link == "rename map" && mMapItem) { mRenameListener.setMapItem(mMapItem); - // TRANSLATORS: number of chars in string should be near original CREATEWIDGETV(mDialog, TextDialog, + // TRANSLATORS: dialog caption + // TRANSLATORS: number of chars in string should be near original _("Rename map sign "), - // TRANSLATORS: number of chars in string should be near original + // TRANSLATORS: label + // TRANSLATORS: number of chars in string should be near original _("Name: ")); mRenameListener.setDialog(mDialog); mDialog->setText(mMapItem->getComment()); @@ -1076,9 +1078,11 @@ void PopupMenu::handleLink(const std::string &link, } else if (link == "addcomment" && !mNick.empty()) { - // TRANSLATORS: number of chars in string should be near original TextDialog *const dialog = CREATEWIDGETR(TextDialog, + // TRANSLATORS: dialog caption + // TRANSLATORS: number of chars in string should be near original _("Player comment "), + // TRANSLATORS: label // TRANSLATORS: number of chars in string should be near original _("Comment: ")); mPlayerListener.setDialog(dialog); @@ -1658,22 +1662,22 @@ void PopupMenu::showPopup(Window *const parent, { if (cnt > 10) { - // TRANSLATORS: popup menu item - // TRANSLATORS: add 10 item amount to trade mBrowserBox->addRow("/addtrade 'INVINDEX' 10", + // TRANSLATORS: popup menu item + // TRANSLATORS: add 10 item amount to trade _("Add to trade 10")); } - // TRANSLATORS: popup menu item - // TRANSLATORS: add half item amount to trade mBrowserBox->addRow("/addtrade 'INVINDEX' /", + // TRANSLATORS: popup menu item + // TRANSLATORS: add half item amount to trade _("Add to trade half")); - // TRANSLATORS: popup menu item - // TRANSLATORS: add all amount except one item to trade mBrowserBox->addRow("/addtrade 'INVINDEX' -1", + // TRANSLATORS: popup menu item + // TRANSLATORS: add all amount except one item to trade _("Add to trade all-1")); - // TRANSLATORS: popup menu item - // TRANSLATORS: add all amount item to trade mBrowserBox->addRow("/addtrade 'INVINDEX' all", + // TRANSLATORS: popup menu item + // TRANSLATORS: add all amount item to trade _("Add to trade all")); } mBrowserBox->addRow("##3---"); @@ -1687,22 +1691,22 @@ void PopupMenu::showPopup(Window *const parent, { if (cnt > 10) { - // TRANSLATORS: popup menu item - // TRANSLATORS: add 10 item amount to storage mBrowserBox->addRow("/invtostorage 'INVINDEX' 10", + // TRANSLATORS: popup menu item + // TRANSLATORS: add 10 item amount to storage _("Store 10")); } - // TRANSLATORS: popup menu item - // TRANSLATORS: add half item amount to storage mBrowserBox->addRow("/invtostorage 'INVINDEX' /", + // TRANSLATORS: popup menu item + // TRANSLATORS: add half item amount to storage _("Store half")); - // TRANSLATORS: popup menu item - // TRANSLATORS: add all except one item amount to storage mBrowserBox->addRow("/invtostorage 'INVINDEX' -1", + // TRANSLATORS: popup menu item + // TRANSLATORS: add all except one item to storage _("Store all-1")); - // TRANSLATORS: popup menu item - // TRANSLATORS: add all item amount to storage mBrowserBox->addRow("/invtostorage 'INVINDEX' all", + // TRANSLATORS: popup menu item + // TRANSLATORS: add all item amount to storage _("Store all")); } mBrowserBox->addRow("##3---"); @@ -1718,22 +1722,22 @@ void PopupMenu::showPopup(Window *const parent, { if (cnt > 10) { - // TRANSLATORS: popup menu item - // TRANSLATORS: get 10 item amount from storage mBrowserBox->addRow("/storagetoinv 'INVINDEX' 10", + // TRANSLATORS: popup menu item + // TRANSLATORS: get 10 item amount from storage _("Retrieve 10")); } - // TRANSLATORS: popup menu item - // TRANSLATORS: get half item amount from storage mBrowserBox->addRow("/storagetoinv 'INVINDEX' /", + // TRANSLATORS: popup menu item + // TRANSLATORS: get half item amount from storage _("Retrieve half")); - // TRANSLATORS: popup menu item - // TRANSLATORS: get all except one item amount from storage mBrowserBox->addRow("/storagetoinv 'INVINDEX' -1", + // TRANSLATORS: popup menu item + // TRANSLATORS: get all except one item amount from storage _("Retrieve all-1")); - // TRANSLATORS: popup menu item - // TRANSLATORS: get all item amount from storage mBrowserBox->addRow("/storagetoinv 'INVINDEX' all", + // TRANSLATORS: popup menu item + // TRANSLATORS: get all item amount from storage _("Retrieve all")); } break; @@ -2518,9 +2522,9 @@ void PopupMenu::addChat(const Being *const being) const ChatObject *const chat = being->getChat(); if (chat) { - // TRANSLATORS: popup menu item - // TRANSLATORS: invite player to party mBrowserBox->addRow("join chat", + // TRANSLATORS: popup menu item + // TRANSLATORS: invite player to party strprintf(_("Join chat %s"), chat->title.c_str()).c_str()); mBrowserBox->addRow("##3---"); } diff --git a/src/gui/popups/skillpopup.cpp b/src/gui/popups/skillpopup.cpp index 846139863..68fb42454 100644 --- a/src/gui/popups/skillpopup.cpp +++ b/src/gui/popups/skillpopup.cpp @@ -113,8 +113,8 @@ void SkillPopup::show(const SkillInfo *const skill, mSkillEffect->setTextWrapped(effect, 196); if (level != 0) { - // TRANSLATORS: skill level mSkillLevel->setTextWrapped(strprintf( + // TRANSLATORS: skill level _("Level: %d / %d"), level, skill->level), 196); } @@ -122,15 +122,15 @@ void SkillPopup::show(const SkillInfo *const skill, { if (skill->level != 0) { - // TRANSLATORS: skill level mSkillLevel->setTextWrapped(strprintf( + // TRANSLATORS: skill level _("Level: %d"), skill->level), 196); } else { - // TRANSLATORS: skill level for tmw fake skills mSkillLevel->setTextWrapped( + // TRANSLATORS: skill level for tmw fake skills _("Level: Unknown"), 196); } diff --git a/src/gui/userpalette.cpp b/src/gui/userpalette.cpp index f1f3b45e6..cf0e5da05 100644 --- a/src/gui/userpalette.cpp +++ b/src/gui/userpalette.cpp @@ -205,13 +205,13 @@ UserPalette::UserPalette() : _("Skill unit")); addColor(UserColorId::PARTY, 0xff00d8, - // TRANSLATORS: palette color GradientType::STATIC, + // TRANSLATORS: palette color _("Party members")); addColor(UserColorId::GUILD, 0xff00d8, - // TRANSLATORS: palette color GradientType::STATIC, + // TRANSLATORS: palette color _("Guild members")); addColor(UserColorId::TEAM1, 0x0000ff, diff --git a/src/gui/widgets/characterdisplay.cpp b/src/gui/widgets/characterdisplay.cpp index bb46f5d65..b74ec842f 100644 --- a/src/gui/widgets/characterdisplay.cpp +++ b/src/gui/widgets/characterdisplay.cpp @@ -130,9 +130,13 @@ void CharacterDisplay::mouseMoved(MouseEvent &event A_UNUSED) const std::string &name = mName->getCaption(); if (!name.empty()) { - textPopup->show(mouseX, mouseY, name, strprintf(_("Level: %u"), + textPopup->show(mouseX, mouseY, + name, + // TRANSLATORS: character level + strprintf(_("Level: %u"), static_cast<uint32_t>( mCharacter->data.mAttributes[Attributes::LEVEL])), + // TRANSLATORS: character money strprintf(_("Money: %s"), Units::formatCurrency( mCharacter->data.mAttributes[Attributes::MONEY]).c_str())); } diff --git a/src/gui/widgets/skillinfo.cpp b/src/gui/widgets/skillinfo.cpp index 0a0f689a4..dd8863206 100644 --- a/src/gui/widgets/skillinfo.cpp +++ b/src/gui/widgets/skillinfo.cpp @@ -157,12 +157,16 @@ void SkillInfo::update() } if (sp) + { + // TRANSLATORS: skill mana skillEffect.append(strprintf(_(" / Mana: -%d"), sp)); + } if (range > 0) { if (!skillEffect.empty()) skillEffect.append(" / "); + // TRANSLATORS: skill range skillEffect.append(strprintf(_("Range: %d"), range)); } diff --git a/src/gui/widgets/tabs/chat/guildtab.cpp b/src/gui/widgets/tabs/chat/guildtab.cpp index 5f22346fc..4a29d1d31 100644 --- a/src/gui/widgets/tabs/chat/guildtab.cpp +++ b/src/gui/widgets/tabs/chat/guildtab.cpp @@ -58,15 +58,6 @@ GuildTab::~GuildTab() bool GuildTab::handleCommand(const std::string &restrict type, const std::string &restrict args) { -/* - else if (type == "create" || type == "new") - { - if (args.empty()) - chatLog(_("Guild name is missing."), ChatMsgType::BY_SERVER); - else - guildHandler->create(args); - } -*/ if (type == "invite" && Ea::taGuild) { guildHandler->invite(args); diff --git a/src/gui/widgets/tabs/setup_chat.cpp b/src/gui/widgets/tabs/setup_chat.cpp index fb6214d50..a25613d27 100644 --- a/src/gui/widgets/tabs/setup_chat.cpp +++ b/src/gui/widgets/tabs/setup_chat.cpp @@ -49,12 +49,14 @@ Setup_Chat::Setup_Chat(const Widget2 *const widget) : // TRANSLATORS: settings option new SetupItemCheckBox(_("Auto hide chat window"), + // TRANSLATORS: settings description _("Chat window will be automatically hidden when not in use.\n\n" "Hit Enter or hover mouse to show chat again."), "autohideChat", this, "autohideChatEvent"); // TRANSLATORS: settings option new SetupItemCheckBox(_("Protect chat focus"), + // TRANSLATORS: settings description _("Enables aggressive protection of input focus in chat window.\n\n" "Note: no other text inputs will be allowed to receive text input " "when you typing in chat window."), @@ -66,12 +68,14 @@ Setup_Chat::Setup_Chat(const Widget2 *const widget) : // TRANSLATORS: settings option new SetupItemCheckBox(_("Remove colors from received chat messages"), + // TRANSLATORS: settings description _("Enable this setting to strip colors from incoming chat messages. " "All messages will use default chat text color if this enabled."), "removeColors", this, "removeColorsEvent"); // TRANSLATORS: settings option new SetupItemCheckBox(_("Show chat colors list"), + // TRANSLATORS: settings description _("Enable this setting to show color selection drop-down in chat " "window. Chat window will display color selection drop-down.\n\n" "It allows one to select default color of outgoing chat messages " @@ -84,6 +88,7 @@ Setup_Chat::Setup_Chat(const Widget2 *const widget) : // TRANSLATORS: settings option new SetupItemCheckBox(_("Allow magic and GM commands in all chat tabs"), + // TRANSLATORS: settings description _("Enable this setting to be able to type spells and GM commands in " "any tab."), "allowCommandsInChatTabs", this, "allowCommandsInChatTabsEvent"); @@ -94,6 +99,7 @@ Setup_Chat::Setup_Chat(const Widget2 *const widget) : // TRANSLATORS: settings option new SetupItemIntTextField(_("Limit max chars in chat line"), + // TRANSLATORS: settings description _("Limits how many characters will be shown in longest lines " "of text displayed in chat.\n\n" "Note: long lines can make client slower. Lines longer than this " @@ -102,6 +108,7 @@ Setup_Chat::Setup_Chat(const Widget2 *const widget) : // TRANSLATORS: settings option new SetupItemIntTextField(_("Limit max lines in chat"), + // TRANSLATORS: settings description _("Limits how many lines chat will keep in scrollback buffer. Chat " "keeps specified number of last lines of text. Oldest lines exceeding " "this limit are discarded from scrollback buffer.\n\n" @@ -114,6 +121,7 @@ Setup_Chat::Setup_Chat(const Widget2 *const widget) : // TRANSLATORS: settings option new SetupItemCheckBox(_("Enable chat Log"), + // TRANSLATORS: settings description _("If you enable this setting, chat logs will be written to disk.\n\n" "Note: chat logs can take noticeable amount of disk space over time."), "enableChatLog", this, "enableChatLogEvent"); @@ -121,17 +129,20 @@ Setup_Chat::Setup_Chat(const Widget2 *const widget) : // TODO: ask 4144 if popup description is correct. // TRANSLATORS: settings option new SetupItemCheckBox(_("Enable debug chat Log"), + // TRANSLATORS: settings description _("If you enable this, debug chat tab also will be logged to disk."), "enableDebugLog", this, "enableDebugLogEvent"); // TRANSLATORS: settings option new SetupItemCheckBox(_("Show chat history"), + // TRANSLATORS: settings description _("If this setting enabled, client will load old chat tabs content " "from logs on startup instead of starting with empty chat tabs."), "showChatHistory", this, "showChatHistoryEvent"); // TRANSLATORS: settings option new SetupItemCheckBox(_("Show party online messages"), + // TRANSLATORS: settings description _("If this setting is enabled, online status changes of party members" " will be shown in party tab of chat.\n\nThis adds some extra noise " "to chat, but allows one to see when your buddies are coming online."), @@ -139,6 +150,7 @@ Setup_Chat::Setup_Chat(const Widget2 *const widget) : // TRANSLATORS: settings option new SetupItemCheckBox(_("Show guild online messages"), + // TRANSLATORS: settings description _("If this setting is enabled, online status changes of guild members" " will be shown in guild tab of chat.\n\nThis adds some extra noise " "to chat, but allows one to see when your buddies are coming online."), @@ -150,6 +162,7 @@ Setup_Chat::Setup_Chat(const Widget2 *const widget) : // TRANSLATORS: settings option new SetupItemCheckBox(_("Hide shop messages"), + // TRANSLATORS: settings description _("If this setting enabled, no messages related to built-in ManaPlus " "shop will be displayed in chat. Disable this setting if you want " "to see shop-related messages.\n\nNote: technically, ManaPlus shop " @@ -160,6 +173,7 @@ Setup_Chat::Setup_Chat(const Widget2 *const widget) : // TRANSLATORS: settings option new SetupItemCheckBox(_("Show MVP messages"), + // TRANSLATORS: settings description _("Enable this setting to see MVP messages from server.\n\n" "Note: MVP messages are not used on TMW/Evol/etc servers, so this " "feature usually makes little difference."), @@ -171,6 +185,7 @@ Setup_Chat::Setup_Chat(const Widget2 *const widget) : // TRANSLATORS: settings option new SetupItemCheckBox(_("Put all whispers in tabs"), + // TRANSLATORS: settings description _("If this setting enabled, all whispers (private messages) will " "be placed in separate tabs, separate tab for each player. If this " "setting disabled, all whispers will appear in General tab.\n\n" @@ -180,6 +195,7 @@ Setup_Chat::Setup_Chat(const Widget2 *const widget) : // TRANSLATORS: settings option new SetupItemCheckBox(_("Log magic messages in debug tab"), + // TRANSLATORS: settings description _("If this setting is enabled, spell invocation will be shown in " "Debug tab. If disabled, it will be shown in General tab instead.\n\n" "Note: it does not affects server replies related to spells."), @@ -187,6 +203,7 @@ Setup_Chat::Setup_Chat(const Widget2 *const widget) : // TRANSLATORS: settings option new SetupItemCheckBox(_("Show server messages in debug tab"), + // TRANSLATORS: settings description _("If this setting is enabled, server messages will be shown in " "Debug tab of chat. If disabled, server messages will appear in " "General chat instead.\n\nNote: according to 4144, disabling this " @@ -196,6 +213,7 @@ Setup_Chat::Setup_Chat(const Widget2 *const widget) : // TRANSLATORS: settings option new SetupItemCheckBox(_("Enable trade tab"), + // TRANSLATORS: settings description _("Enables trade tab. Trade tab is basically some filter. Messages " "containing words typical for trades will go to Trade tab. This " "will make General tab less noisy. If this setting is disabled, all " @@ -204,6 +222,7 @@ Setup_Chat::Setup_Chat(const Widget2 *const widget) : // TRANSLATORS: settings option new SetupItemCheckBox(_("Enable gm tab"), + // TRANSLATORS: settings description _("If enabled, GM tab will appear in chat. It displays text related " "GM activity.\n\nNote: this setting only makes difference for " "GMs (Game Masters) since this tab only appears for GMs."), @@ -211,6 +230,7 @@ Setup_Chat::Setup_Chat(const Widget2 *const widget) : // TRANSLATORS: settings option new SetupItemCheckBox(_("Enable language tab"), + // TRANSLATORS: settings description _("If this feature enabled, language tab will appear if server " "supports this feature.\n\nNote: only supported by Evol server yet."), "enableLangTab", this, "enableLangTabEvent", @@ -218,6 +238,7 @@ Setup_Chat::Setup_Chat(const Widget2 *const widget) : // TRANSLATORS: settings option new SetupItemCheckBox(_("Show all languages messages"), + // TRANSLATORS: settings description _("If this setting enabled and server supports different chats " "for different languages, you will see messages for all languages, " "regardless of your language preferences.\n\nNote: it only works " @@ -227,6 +248,7 @@ Setup_Chat::Setup_Chat(const Widget2 *const widget) : // TRANSLATORS: settings option new SetupItemCheckBox(_("Enable battle tab"), + // TRANSLATORS: settings description _("If this setting enabled, Battle tab will appear in chat. This " "tab will contain messages related to battles, like damage and " "experience gain, if battle messages are enabled.\n\n" @@ -235,6 +257,7 @@ Setup_Chat::Setup_Chat(const Widget2 *const widget) : // TRANSLATORS: settings option new SetupItemCheckBox(_("Show battle events"), + // TRANSLATORS: settings description _("If this setting enabled, messages related to battle like damage " "or experience gain will be displayed in Debug or Battle tab. If " "disabled, no battle messages will be displayed."), @@ -242,6 +265,7 @@ Setup_Chat::Setup_Chat(const Widget2 *const widget) : // TRANSLATORS: settings option new SetupItemCheckBox(_("Resize chat tabs if need"), + // TRANSLATORS: settings description _("If this feature enabled, text in chat will be automatically " "adjusted to adapt to appearance of chat input field when you " "typing message and when input field of chat disappears. If disabled, " @@ -257,6 +281,7 @@ Setup_Chat::Setup_Chat(const Widget2 *const widget) : // TRANSLATORS: settings option new SetupItemCheckBox(_("Use local time"), + // TRANSLATORS: settings description _("If this feature enabled, timestamps in chat will use local times. " "If disabled, server time will be used (often it is GMT+0)."), "useLocalTime", this, "useLocalTimeEvent"); @@ -266,6 +291,7 @@ Setup_Chat::Setup_Chat(const Widget2 *const widget) : // TRANSLATORS: settings option new SetupItemTextField(_("Highlight words (separated by comma)"), + // TRANSLATORS: settings description _("Here you can specify some extra words which will also cause " "highlighting. Use comma to separate words.\n\nNote: frequent " "highlights are annoying - use it with caution."), @@ -273,6 +299,7 @@ Setup_Chat::Setup_Chat(const Widget2 *const widget) : // TRANSLATORS: settings option new SetupItemTextField(_("Globals ignore names (separated by comma)"), + // TRANSLATORS: settings description _("This setting allows you to ignore some global messages if " "particular sender (NPC, GM) annoys you too much. Global will be " "moved to Debug instead.\n\nNote: careless use of this feature can " @@ -281,6 +308,7 @@ Setup_Chat::Setup_Chat(const Widget2 *const widget) : // TRANSLATORS: settings option new SetupItemCheckBox(_("Show emotes button in chat"), + // TRANSLATORS: settings description _("If this setting enabled, button will appear near text input " "field. This button allows one to invoke composing window, which " "allows one to insert smiles and text formatting easily.\n\n" @@ -290,6 +318,7 @@ Setup_Chat::Setup_Chat(const Widget2 *const widget) : // TRANSLATORS: settings option new SetupItemCheckBox(_("Show motd server message on start"), + // TRANSLATORS: settings description _("If this setting enabled, client will display server MOTD (message" " of the day) once you connect to server. Disable it to hide MOTD."), "showmotd", this, "showmotdEvent"); diff --git a/src/gui/widgets/tabs/setup_colors.cpp b/src/gui/widgets/tabs/setup_colors.cpp index 94a380b98..22a07f23d 100644 --- a/src/gui/widgets/tabs/setup_colors.cpp +++ b/src/gui/widgets/tabs/setup_colors.cpp @@ -45,8 +45,8 @@ #include "debug.h" -// TRANSLATORS: color selection preview message const char *const Setup_Colors::rawmsg = + // TRANSLATORS: color selection preview message N_("This is what the color looks like"); Setup_Colors::Setup_Colors(const Widget2 *const widget) : @@ -105,16 +105,19 @@ Setup_Colors::Setup_Colors(const Widget2 *const widget) : std::string longText = _("Static"); const Font *const font = getFont(); + // TRANSLATORS: color type if (getFont()->getWidth(_("Pulse")) > font->getWidth(longText)) { // TRANSLATORS: color type longText = _("Pulse"); } + // TRANSLATORS: color type if (getFont()->getWidth(_("Rainbow")) > font->getWidth(longText)) { // TRANSLATORS: color type longText = _("Rainbow"); } + // TRANSLATORS: color type if (getFont()->getWidth(_("Spectrum")) > font->getWidth(longText)) { // TRANSLATORS: color type diff --git a/src/gui/widgets/tabs/setup_other.cpp b/src/gui/widgets/tabs/setup_other.cpp index 95393d305..8d9ab24f4 100644 --- a/src/gui/widgets/tabs/setup_other.cpp +++ b/src/gui/widgets/tabs/setup_other.cpp @@ -220,6 +220,7 @@ Setup_Other::Setup_Other(const Widget2 *const widget) : // TRANSLATORS: settings group new SetupItemLabel(_("Player"), "", this); + // TRANSLATORS: settings option new SetupItemCheckBox(_("Show own hp bar"), "", "showOwnHP", this, "showOwnHPEvent"); @@ -265,6 +266,7 @@ Setup_Other::Setup_Other(const Widget2 *const widget) : new SetupItemCheckBox(_("Enabled pets support"), "", "usepets", this, "usepetsEvent"); + // TRANSLATORS: settings option new SetupItemCheckBox(_("Enable weight notifications"), "", "weightMsg", this, "weightMsgEvent"); diff --git a/src/gui/widgets/tabs/setup_relations.cpp b/src/gui/widgets/tabs/setup_relations.cpp index 98853737b..87a491116 100644 --- a/src/gui/widgets/tabs/setup_relations.cpp +++ b/src/gui/widgets/tabs/setup_relations.cpp @@ -74,6 +74,7 @@ Setup_Relations::Setup_Relations(const Widget2 *const widget) : // TRANSLATORS: relation dialog button mDefaultWhisper(new CheckBox(this, _("Allow whispers"), player_relations.getDefault() & PlayerRelation::WHISPER)), + // TRANSLATORS: relation dialog button mDeleteButton(new Button(this, _("Delete"), ACTION_DELETE, this)), mIgnoreActionChoicesModel(new IgnoreChoicesListModel), mIgnoreActionChoicesBox(new DropDown(widget, mIgnoreActionChoicesModel)) diff --git a/src/gui/widgets/tabs/setup_theme.cpp b/src/gui/widgets/tabs/setup_theme.cpp index 3388feadf..55f68548d 100644 --- a/src/gui/widgets/tabs/setup_theme.cpp +++ b/src/gui/widgets/tabs/setup_theme.cpp @@ -239,8 +239,9 @@ void Setup_Theme::updateInfo() mInfo = Theme::loadInfo(mTheme); if (mInfo) { - // TRANSLATORS: theme info dialog + // TRANSLATORS: theme name mThemeInfo = std::string(_("Name: ")).append(mInfo->name) + // TRANSLATORS: theme copyright .append("\n").append(_("Copyright:")).append("\n") .append(mInfo->copyright); } diff --git a/src/gui/widgets/tabs/setup_video.cpp b/src/gui/widgets/tabs/setup_video.cpp index c9790043c..fad7f3ba2 100644 --- a/src/gui/widgets/tabs/setup_video.cpp +++ b/src/gui/widgets/tabs/setup_video.cpp @@ -118,8 +118,9 @@ Setup_Video::Setup_Video(const Widget2 *const widget) : mFpsLabel->setCaption(mFps > 0 ? toString(mFps) : _("None")); mFpsLabel->setWidth(60); // TRANSLATORS: video settings label - mAltFpsLabel->setCaption(_("Alt FPS limit: ") + (mAltFps > 0 - ? toString(mAltFps) : _("None"))); + mAltFpsLabel->setCaption(_("Alt FPS limit: ") + (mAltFps > 0 ? + // TRANSLATORS: video settings label value + toString(mAltFps) : _("None"))); mAltFpsLabel->setWidth(150); mFpsSlider->setEnabled(mFps > 0); mFpsSlider->setValue(mFps); @@ -392,6 +393,7 @@ void Setup_Video::action(const ActionEvent &event) _("Screen Resolution Changed"), // TRANSLATORS: video settings warning _("Restart your client for the change to take effect.") + // TRANSLATORS: video settings warning + std::string("\n") + _("Some windows may be moved to " "fit the lowered resolution."), // TRANSLATORS: ok dialog button diff --git a/src/gui/widgets/tabs/setup_visual.cpp b/src/gui/widgets/tabs/setup_visual.cpp index e2f926f1f..6cb00ad17 100644 --- a/src/gui/widgets/tabs/setup_visual.cpp +++ b/src/gui/widgets/tabs/setup_visual.cpp @@ -171,6 +171,7 @@ Setup_Visual::Setup_Visual(const Widget2 *const widget) : mParticleList->push_back(_("high")); // TRANSLATORS: particle details mParticleList->push_back(_("max")); + // TRANSLATORS: settings option (new SetupItemSlider2(_("Particle detail"), "", "particleEmitterSkip", this, "particleEmitterSkipEvent", 0, 3, 1, mParticleList, OnTheFly_true, @@ -220,6 +221,7 @@ Setup_Visual::Setup_Visual(const Widget2 *const widget) : // TRANSLATORS: settings group new SetupItemLabel(_("Screenshots"), "", this); + // TRANSLATORS: settings option new SetupItemCheckBox(_("Add water mark into screenshots"), "", "addwatermark", this, "addwatermarkEvent"); diff --git a/src/gui/widgets/tabs/socialguildtab.h b/src/gui/widgets/tabs/socialguildtab.h index e0d4c3f6e..a76b3d58b 100644 --- a/src/gui/widgets/tabs/socialguildtab.h +++ b/src/gui/widgets/tabs/socialguildtab.h @@ -97,8 +97,8 @@ class SocialGuildTab final : public SocialTab, guildHandler->leave(mGuild->getId()); if (localChatTab) { - // TRANSLATORS: chat message localChatTab->chatLog(strprintf( + // TRANSLATORS: chat message _("Guild %s quit requested."), mGuild->getName().c_str()), ChatMsgType::BY_SERVER); diff --git a/src/gui/widgets/tabs/socialpartytab.h b/src/gui/widgets/tabs/socialpartytab.h index 9bdd6d922..6202e537a 100644 --- a/src/gui/widgets/tabs/socialpartytab.h +++ b/src/gui/widgets/tabs/socialpartytab.h @@ -81,8 +81,8 @@ class SocialPartyTab final : public SocialTab, if (localChatTab) { - // TRANSLATORS: chat message localChatTab->chatLog(strprintf( + // TRANSLATORS: chat message _("Invited user %s to party."), name.c_str()), ChatMsgType::BY_SERVER); @@ -98,8 +98,8 @@ class SocialPartyTab final : public SocialTab, partyHandler->leave(); if (localChatTab) { - // TRANSLATORS: tab in social window localChatTab->chatLog(strprintf( + // TRANSLATORS: tab in social window _("Party %s quit requested."), mParty->getName().c_str()), ChatMsgType::BY_SERVER); diff --git a/src/gui/windowmenu.cpp b/src/gui/windowmenu.cpp index aa8b4609e..9d9f9a213 100644 --- a/src/gui/windowmenu.cpp +++ b/src/gui/windowmenu.cpp @@ -66,20 +66,26 @@ WindowMenu::WindowMenu(const Widget2 *const widget) : setFocusable(false); // TRANSLATORS: short button name for who is online window. addButton(N_("ONL"), + // TRANSLATORS: long button name for who is online window. _("Who is online"), x, h, InputAction::WINDOW_ONLINE); // TRANSLATORS: short button name for help window. addButton(N_("HLP"), + // TRANSLATORS: long button name for help window. _("Help"), x, h, InputAction::WINDOW_HELP); // TRANSLATORS: short button name for quests window. addButton(N_("QE"), + // TRANSLATORS: long button name for quests window. _("Quests"), x, h, InputAction::WINDOW_QUESTS); // TRANSLATORS: short button name for kill stats window. addButton(N_("KS"), + // TRANSLATORS: long button name for kill stats window. _("Kill stats"), x, h, InputAction::WINDOW_KILLS); addButton(":-)", + // TRANSLATORS: long button name for emotes window. _("Smilies"), x, h, InputAction::WINDOW_EMOTE_SHORTCUT); // TRANSLATORS: short button name for chat window. addButton(N_("CH"), + // TRANSLATORS: longt button name for chat window. _("Chat"), x, h, InputAction::WINDOW_CHAT, #ifdef ANDROID Visible_true); @@ -88,18 +94,23 @@ WindowMenu::WindowMenu(const Widget2 *const widget) : #endif // TRANSLATORS: short button name for status window. addButton(N_("STA"), + // TRANSLATORS: long button name for status window. _("Status"), x, h, InputAction::WINDOW_STATUS); // TRANSLATORS: short button name for equipment window. addButton(N_("EQU"), + // TRANSLATORS: long button name for equipment window. _("Equipment"), x, h, InputAction::WINDOW_EQUIPMENT); // TRANSLATORS: short button name for inventory window. addButton(N_("INV"), + // TRANSLATORS: long button name for inventory window. _("Inventory"), x, h, InputAction::WINDOW_INVENTORY); // TRANSLATORS: short button name for cart window. addButton(N_("CA"), + // TRANSLATORS: long button name for cart window. _("Cart"), x, h, InputAction::WINDOW_CART); // TRANSLATORS: short button name for map window. addButton(N_("MAP"), + // TRANSLATORS: long button name for map window. _("Map"), x, h, InputAction::WINDOW_MINIMAP, Visible_false); @@ -107,59 +118,60 @@ WindowMenu::WindowMenu(const Widget2 *const widget) : { // TRANSLATORS: short button name for skills window. addButton(N_("SKI"), + // TRANSLATORS: long button name for skills window. _("Skills"), x, h, InputAction::WINDOW_SKILL); } // TRANSLATORS: short button name for social window. addButton(N_("SOC"), - // TRANSLATORS: full button name + // TRANSLATORS: long button name for social window. _("Social"), x, h, InputAction::WINDOW_SOCIAL); // TRANSLATORS: short button name for shortcuts window. addButton(N_("SH"), - // TRANSLATORS: full button name + // TRANSLATORS: long button name for shortcuts window. _("Shortcuts"), x, h, InputAction::WINDOW_SHORTCUT); // TRANSLATORS: short button name for spells window. addButton(N_("SP"), - // TRANSLATORS: full button name + // TRANSLATORS: long button name for spells window. _("Spells"), x, h, InputAction::WINDOW_SPELLS); // TRANSLATORS: short button name for drops window. addButton(N_("DR"), - // TRANSLATORS: full button name + // TRANSLATORS: long button name for drops window. _("Drop"), x, h, InputAction::WINDOW_DROP, Visible_false); // TRANSLATORS: short button name for did you know window. addButton(N_("YK"), - // TRANSLATORS: full button name + // TRANSLATORS: long button name for did you know window. _("Did you know"), x, h, InputAction::WINDOW_DIDYOUKNOW, Visible_false); // TRANSLATORS: short button name for shop window. addButton(N_("SHP"), - // TRANSLATORS: full button name + // TRANSLATORS: long button name for shop window. _("Shop"), x, h, InputAction::WINDOW_SHOP, Visible_false); // TRANSLATORS: short button name for outfits window. addButton(N_("OU"), - // TRANSLATORS: full button name + // TRANSLATORS: long button name for outfits window. _("Outfits"), x, h, InputAction::WINDOW_OUTFIT, Visible_false); // TRANSLATORS: short button name for updates window. addButton(N_("UP"), - // TRANSLATORS: full button name + // TRANSLATORS: long button name for updates window. _("Updates"), x, h, InputAction::WINDOW_UPDATER, Visible_false); // TRANSLATORS: short button name for bank window. addButton(N_("BA"), - // TRANSLATORS: full button name + // TRANSLATORS: long button name for bank window. _("Bank"), x, h, InputAction::WINDOW_BANK, Visible_true); // TRANSLATORS: short button name for mail window. addButton(N_("MA"), - // TRANSLATORS: full button name + // TRANSLATORS: long button name for mail window. _("Mail"), x, h, InputAction::WINDOW_MAIL, Visible_true), // TRANSLATORS: short button name for debug window. addButton(N_("DBG"), - // TRANSLATORS: full button name + // TRANSLATORS: long button name for debug window. _("Debug"), x, h, InputAction::WINDOW_DEBUG, #ifdef ANDROID Visible_true); @@ -168,12 +180,12 @@ WindowMenu::WindowMenu(const Widget2 *const widget) : #endif // TRANSLATORS: short button name for windows list menu. addButton(N_("WIN"), - // TRANSLATORS: full button name + // TRANSLATORS: long button name for windows list menu. _("Windows"), x, h, InputAction::SHOW_WINDOWS, Visible_false); // TRANSLATORS: short button name for setup window. addButton(N_("SET"), - // TRANSLATORS: full button name + // TRANSLATORS: long button name for setup window. _("Setup"), x, h, InputAction::WINDOW_SETUP); x += mPadding - mSpacing; diff --git a/src/gui/windows/bankwindow.cpp b/src/gui/windows/bankwindow.cpp index e13fdc399..5f93dc2d8 100644 --- a/src/gui/windows/bankwindow.cpp +++ b/src/gui/windows/bankwindow.cpp @@ -43,8 +43,8 @@ BankWindow::BankWindow() : Window(_("Bank"), Modal_false, nullptr, "bank.xml"), ActionListener(), BankListener(), - // TRANSLATORS: bank window money label mBankMoneyLabel(new Label(this, strprintf( + // TRANSLATORS: bank window money label _("Money in bank: %s"), " "))), mInputMoneyTextField(new IntTextField(this, 0, 0, 2147483647)), // TRANSLATORS: bank window button @@ -87,6 +87,7 @@ void BankWindow::widgetShown(const Event &event) void BankWindow::bankMoneyChanged(const int money) { + // TRANSLATORS: bank window money label mBankMoneyLabel->setCaption(strprintf(_("Money in bank: %s"), Units::formatCurrency(money).c_str())); } diff --git a/src/gui/windows/buydialog.cpp b/src/gui/windows/buydialog.cpp index 2e143dbcc..644e8c5ce 100644 --- a/src/gui/windows/buydialog.cpp +++ b/src/gui/windows/buydialog.cpp @@ -260,8 +260,8 @@ void BuyDialog::init() mQuantityLabel = new Label(this, strprintf( "%d / %d", mAmountItems, mMaxItems)); mQuantityLabel->setAlignment(Graphics::CENTER); - // TRANSLATORS: buy dialog label mMoneyLabel = new Label(this, strprintf( + // TRANSLATORS: buy dialog label _("Price: %s / Total: %s"), "", "")); mAmountField = new IntTextField(this, 1, 1, 123); diff --git a/src/gui/windows/charselectdialog.cpp b/src/gui/windows/charselectdialog.cpp index 21c84cdb4..ac5f3b291 100644 --- a/src/gui/windows/charselectdialog.cpp +++ b/src/gui/windows/charselectdialog.cpp @@ -102,7 +102,11 @@ CharSelectDialog::CharSelectDialog(LoginData &data) : n ++; if (serverFeatures->haveCharRename()) { - mRenameButton = new Button(this, _("Rename"), "rename", this); + mRenameButton = new Button(this, + // TRANSLATORS: character rename button + _("Rename"), + "rename", + this); placer(n, 0, mRenameButton); n ++; } @@ -296,8 +300,9 @@ void CharSelectDialog::action(const ActionEvent &event) else { CREATEWIDGET(OkDialog, - // TRANSLATORS: error message + // TRANSLATORS: error header _("Error"), + // TRANSLATORS: error message _("Incorrect password"), // TRANSLATORS: ok dialog button _("OK"), diff --git a/src/gui/windows/chatwindow.cpp b/src/gui/windows/chatwindow.cpp index bdd772ea1..1435a59e9 100644 --- a/src/gui/windows/chatwindow.cpp +++ b/src/gui/windows/chatwindow.cpp @@ -2193,9 +2193,14 @@ void ChatWindow::joinRoom(const bool isJoin) { std::string name; if (isJoin) + { name = PlayerInfo::getRoomName(); + } else + { + // TRANSLATORS: chat tab name name = _("General"); + } tab->setCaption(name); } } diff --git a/src/gui/windows/editserverdialog.cpp b/src/gui/windows/editserverdialog.cpp index 0d18da6a5..e456533cb 100644 --- a/src/gui/windows/editserverdialog.cpp +++ b/src/gui/windows/editserverdialog.cpp @@ -206,8 +206,8 @@ void EditServerDialog::action(const ActionEvent &event) if (mServerAddressField->getText().empty() || mPortField->getText().empty()) { - // TRANSLATORS: edit server dialog error header OkDialog *const dlg = CREATEWIDGETR(OkDialog, + // TRANSLATORS: edit server dialog error header _("Error"), // TRANSLATORS: edit server dialog error message _("Please at least type both the address and the port " diff --git a/src/gui/windows/equipmentwindow.cpp b/src/gui/windows/equipmentwindow.cpp index 575315e01..a32f80c3e 100644 --- a/src/gui/windows/equipmentwindow.cpp +++ b/src/gui/windows/equipmentwindow.cpp @@ -666,6 +666,7 @@ void EquipmentWindow::addDefaultPage() if (!mHaveDefaultPage) { mHaveDefaultPage = true; + // TRANSLATORS: equipment window tab addPage(_("default")); } } diff --git a/src/gui/windows/inventorywindow.cpp b/src/gui/windows/inventorywindow.cpp index 8b5e69708..f1b76a2d1 100644 --- a/src/gui/windows/inventorywindow.cpp +++ b/src/gui/windows/inventorywindow.cpp @@ -693,6 +693,7 @@ void InventoryWindow::mouseMoved(MouseEvent &event) const Rect &rect = mDimension; if (src == mSlotsBar || src == mWeightBar) { + // TRANSLATORS: money label textPopup->show(rect.x + x, rect.y + y, strprintf(_("Money: %s"), Units::formatCurrency(PlayerInfo::getAttribute( Attributes::MONEY)).c_str())); @@ -777,6 +778,7 @@ void InventoryWindow::updateButtons(const Item *item) if (str.empty()) { mUseButton->setEnabled(false); + // TRANSLATORS: default use button name mUseButton->setCaption(_("Use")); } else diff --git a/src/gui/windows/mailviewwindow.cpp b/src/gui/windows/mailviewwindow.cpp index bb0031160..8ae2fb76f 100644 --- a/src/gui/windows/mailviewwindow.cpp +++ b/src/gui/windows/mailviewwindow.cpp @@ -117,19 +117,29 @@ MailViewWindow::MailViewWindow(const MailMessage *const message) : mIcon = new Icon(this, image); if (message->itemAmount != 1) { - mItemLabel = new Label(this, std::string(_("Item:")).append( - " (").append(toString(message->itemAmount)).append(") ")); + mItemLabel = new Label(this, std::string( + // TRANSLATORS: mail view item label + _("Item:")).append( + " (").append( + toString(message->itemAmount)).append( + ") ")); } else { - mItemLabel = new Label(this, std::string(_("Item:")).append(" ")); + mItemLabel = new Label(this, + // TRANSLATORS: mail view item label + std::string(_("Item:")).append(" ")); } placer(0, n, mItemLabel); placer(1, n++, mIcon); } if (message->money || message->itemId) { - mGetAttachButton = new Button(this, _("Get attach"), "attach", this); + mGetAttachButton = new Button(this, + // TRANSLATORS: mail view attach button + _("Get attach"), + "attach", + this); placer(0, n++, mGetAttachButton); } ContainerPlacer placer2; diff --git a/src/gui/windows/ministatuswindow.cpp b/src/gui/windows/ministatuswindow.cpp index 4ed6203ab..98a45effc 100644 --- a/src/gui/windows/ministatuswindow.cpp +++ b/src/gui/windows/ministatuswindow.cpp @@ -65,9 +65,9 @@ MiniStatusWindow::MiniStatusWindow() : mBars(), mBarNames(), mIcons(), - // TRANSLATORS: status bar name mHpBar(createBar(0, 100, 0, ThemeColorId::HP_BAR, ProgressColorId::PROG_HP, "hpprogressbar.xml", "hpprogressbar_fill.xml", + // TRANSLATORS: status bar name "hp bar", _("health bar"))), mMpBar(createBar(0, 100, 0, playerHandler->canUseMagic() ? ThemeColorId::MP_BAR : ThemeColorId::NO_MP_BAR, @@ -132,8 +132,8 @@ MiniStatusWindow::MiniStatusWindow() : mJobBar = createBar(0, 100, 0, ThemeColorId::JOB_BAR, ProgressColorId::PROG_JOB, - // TRANSLATORS: status bar name "jobprogressbar.xml", "jobprogressbar_fill.xml", + // TRANSLATORS: status bar name "job bar", _("job bar")); StatusWindow::updateJobBar(mJobBar); } diff --git a/src/gui/windows/quitdialog.cpp b/src/gui/windows/quitdialog.cpp index bc0bf2366..1ef878aae 100644 --- a/src/gui/windows/quitdialog.cpp +++ b/src/gui/windows/quitdialog.cpp @@ -100,6 +100,7 @@ QuitDialog::QuitDialog(QuitDialog **const pointerToMe) : if (config.getBoolValue("rated") == false && config.getIntValue("gamecount") > 3) { + // TRANSLATORS: rate button mRate = new RadioButton(this, _("Rate in google play"), "quitdialog"); placeOption(placer, mRate); mOptions[mOptions.size() - 1]->setSelected(true); diff --git a/src/gui/windows/shopwindow.cpp b/src/gui/windows/shopwindow.cpp index 570163f15..c6388c50e 100644 --- a/src/gui/windows/shopwindow.cpp +++ b/src/gui/windows/shopwindow.cpp @@ -430,9 +430,15 @@ void ShopWindow::updateButtonsAndLabels() if (mPublishButton) { if (mEnableBuyingStore) + { + // TRANSLATORS: unpublish shop button mPublishButton->setCaption(_("Unpublish")); + } else + { + // TRANSLATORS: publish shop button mPublishButton->setCaption(_("Publish")); + } mPublishButton->adjustSize(); if (mBuyShopSize > 0) mPublishButton->setEnabled(true); @@ -449,9 +455,15 @@ void ShopWindow::updateButtonsAndLabels() if (mPublishButton) { if (mEnableVending) + { + // TRANSLATORS: unpublish shop button mPublishButton->setCaption(_("Unpublish")); + } else + { + // TRANSLATORS: publish shop button mPublishButton->setCaption(_("Publish")); + } mPublishButton->adjustSize(); if (sellNotEmpty && mSellShopSize > 0 @@ -788,7 +800,8 @@ void ShopWindow::giveList(const std::string &nick, const int mode) } void ShopWindow::sendMessage(const std::string &nick, - std::string data, const bool random) + std::string data, + const bool random) { if (!chatWindow) return; @@ -898,7 +911,10 @@ void ShopWindow::processRequest(const std::string &nick, std::string data, if (!mTradeNick.empty()) { - sendMessage(nick, "error: player busy ", true); + sendMessage(nick, + // TRANSLATORS: error buy/sell shop request + _("error: player busy") + std::string(" "), + true); return; } @@ -908,7 +924,6 @@ void ShopWindow::processRequest(const std::string &nick, std::string data, std::string part2; std::string part3; std::stringstream ss(data); - std::string msg; int id; int price; int amount; @@ -938,20 +953,24 @@ void ShopWindow::processRequest(const std::string &nick, std::string data, if (!item2 || item2->getQuantity() < amount || !findShopItem(mTradeItem, SELL)) { - sendMessage(nick, "error: Can't sell this item ", true); + sendMessage(nick, + // TRANSLATORS: error buy/sell shop request + _("error: Can't sell this item") + std::string(" "), + true); return; } - msg = "buy"; mTradeMoney = 0; } else { if (!findShopItem(mTradeItem, BUY)) { - sendMessage(nick, "error: Can't buy this item ", true); + sendMessage(nick, + // TRANSLATORS: error buy/sell shop request + _("error: Can't buy this item") + std::string(" "), + true); return; } - msg = "sell"; mTradeMoney = mTradeItem->getPrice() * mTradeItem->getQuantity(); } @@ -964,12 +983,26 @@ void ShopWindow::processRequest(const std::string &nick, std::string data, } else { + std::string msg; + if (mode == BUY) + { + // TRANSLATORS: buy shop request (nick, item) + msg = strprintf(_("%s wants to buy %s do you accept?"), + nick.c_str(), + mTradeItem->getInfo().getName().c_str()); + } + else + { + // TRANSLATORS: sell shop request (nick, item) + msg = strprintf(_("%s wants to sell %s do you accept?"), + nick.c_str(), + mTradeItem->getInfo().getName().c_str()); + } + ConfirmDialog *const confirmDlg = CREATEWIDGETR(ConfirmDialog, // TRANSLATORS: shop window dialog _("Request for Trade"), - strprintf(_("%s wants to %s %s do you accept?"), - nick.c_str(), msg.c_str(), - mTradeItem->getInfo().getName().c_str()), + msg, SOUND_REQUEST, true); confirmDlg->addActionListener(this); diff --git a/src/gui/windows/skilldialog.cpp b/src/gui/windows/skilldialog.cpp index e8d1836f8..b80f6d5fe 100644 --- a/src/gui/windows/skilldialog.cpp +++ b/src/gui/windows/skilldialog.cpp @@ -161,6 +161,7 @@ void SkillDialog::action(const ActionEvent &event) { mUseButton->setEnabled(false); mIncreaseButton->setEnabled(false); + // TRANSLATORS: skills dialog button mUseButton->setCaption(_("Use")); } } @@ -333,6 +334,7 @@ void SkillDialog::loadXmlFile(const std::string &fileName) skill->model = model; skill->update(); skill->useButton = XML::getProperty( + // TRANSLATORS: skills dialog button node, "useButton", _("Use")); skill->owner = parseOwner(XML::getProperty( node, "owner", "player")); @@ -507,7 +509,9 @@ void SkillDialog::addSkill(const SkillOwner::Type owner, skill->range = range; skill->sp = sp; skill->update(); + // TRANSLATORS: skills dialog button skill->useButton = _("Use"); + // TRANSLATORS: skill error message skill->errorText = strprintf(_("Failed skill: %s"), name.c_str()); mDefaultModel->addSkill(skill); @@ -592,6 +596,7 @@ void SkillDialog::updateTabSelection() else { mUseButton->setEnabled(false); + // TRANSLATORS: inventory button mUseButton->setCaption(_("Use")); } } diff --git a/src/gui/windows/socialwindow.cpp b/src/gui/windows/socialwindow.cpp index ec5ca90fa..8498b6316 100644 --- a/src/gui/windows/socialwindow.cpp +++ b/src/gui/windows/socialwindow.cpp @@ -496,8 +496,8 @@ void SocialWindow::showPartyInvite(const std::string &restrict partyName, localChatTab->chatLog(msg, ChatMsgType::BY_SERVER); // show invite - // TRANSLATORS: party invite message CREATEWIDGETV(mPartyAcceptDialog, ConfirmDialog, + // TRANSLATORS: party invite message _("Accept Party Invite"), msg, SOUND_REQUEST, @@ -519,6 +519,7 @@ void SocialWindow::showPartyCreate() CREATEWIDGET(OkDialog, // TRANSLATORS: party creation message _("Create Party"), + // TRANSLATORS: party creation error _("Cannot create party. You are already in a party"), // TRANSLATORS: ok dialog button _("OK"), diff --git a/src/gui/windows/updaterwindow.cpp b/src/gui/windows/updaterwindow.cpp index b38bb2546..bf4814a03 100644 --- a/src/gui/windows/updaterwindow.cpp +++ b/src/gui/windows/updaterwindow.cpp @@ -407,6 +407,7 @@ void UpdaterWindow::loadNews() if (cnt > maxNews) { mBrowserBox->addRow(""); + // TRANSLATORS: updater window checkbox mBrowserBox->addRow("news", _("Show all news (can be slow)")); mBrowserBox->addRow(""); } diff --git a/src/net/eathena/chatrecv.cpp b/src/net/eathena/chatrecv.cpp index f1e30c9c6..5846d36c6 100644 --- a/src/net/eathena/chatrecv.cpp +++ b/src/net/eathena/chatrecv.cpp @@ -132,18 +132,23 @@ void ChatRecv::processFormatMessage(Net::MessageIn &msg) switch (msgId) { case 1334: + // TRANSLATORS: error message chatMsg = _("Can't cast skill in this area."); break; case 1335: + // TRANSLATORS: error message chatMsg = _("Can't use item in this area."); break; case 1773: + // TRANSLATORS: error message chatMsg = _("Can't equip. Wrong level."); break; case 1774: + // TRANSLATORS: error message chatMsg = _("Can't use. Wrong level."); break; case 1923: + // TRANSLATORS: error message chatMsg = _("Work in progress."); // busy with npc break; default: diff --git a/src/net/eathena/generalhandler.cpp b/src/net/eathena/generalhandler.cpp index ed5a7ce03..cdc2b2673 100644 --- a/src/net/eathena/generalhandler.cpp +++ b/src/net/eathena/generalhandler.cpp @@ -119,11 +119,17 @@ GeneralHandler::GeneralHandler() : generalHandler = this; std::vector<ItemDB::Stat> stats; + // TRANSLATORS: player stat stats.push_back(ItemDB::Stat("str", _("Strength %s"))); + // TRANSLATORS: player stat stats.push_back(ItemDB::Stat("agi", _("Agility %s"))); + // TRANSLATORS: player stat stats.push_back(ItemDB::Stat("vit", _("Vitality %s"))); + // TRANSLATORS: player stat stats.push_back(ItemDB::Stat("int", _("Intelligence %s"))); + // TRANSLATORS: player stat stats.push_back(ItemDB::Stat("dex", _("Dexterity %s"))); + // TRANSLATORS: player stat stats.push_back(ItemDB::Stat("luck", _("Luck %s"))); ItemDB::setStatsList(stats); @@ -182,9 +188,14 @@ void GeneralHandler::flushNetwork() if (Network::mInstance->getState() == Network::NET_ERROR) { if (!Network::mInstance->getError().empty()) + { errorMessage = Network::mInstance->getError(); + } else + { + // TRANSLATORS: error message errorMessage = _("Got disconnected from server!"); + } client->setState(State::ERROR); } @@ -208,33 +219,52 @@ void GeneralHandler::gameStarted() const statusWindow->clearAttributes(); statusWindow->addAttribute(Attributes::STR, + // TRANSLATORS: player stat _("Strength"), "str", Modifiable_true); statusWindow->addAttribute(Attributes::AGI, + // TRANSLATORS: player stat _("Agility"), "agi", Modifiable_true); statusWindow->addAttribute(Attributes::VIT, + // TRANSLATORS: player stat _("Vitality"), "vit", Modifiable_true); statusWindow->addAttribute(Attributes::INT, + // TRANSLATORS: player stat _("Intelligence"), "int", Modifiable_true); statusWindow->addAttribute(Attributes::DEX, + // TRANSLATORS: player stat _("Dexterity"), "dex", Modifiable_true); statusWindow->addAttribute(Attributes::LUK, + // TRANSLATORS: player stat _("Luck"), "luk", Modifiable_true); + // TRANSLATORS: player stat statusWindow->addAttribute(Attributes::ATK, _("Attack")); + // TRANSLATORS: player stat statusWindow->addAttribute(Attributes::DEF, _("Defense")); + // TRANSLATORS: player stat statusWindow->addAttribute(Attributes::MATK, _("M.Attack")); + // TRANSLATORS: player stat statusWindow->addAttribute(Attributes::MDEF, _("M.Defense")); + // TRANSLATORS: player stat // xgettext:no-c-format statusWindow->addAttribute(Attributes::HIT, _("% Accuracy")); + // TRANSLATORS: player stat // xgettext:no-c-format statusWindow->addAttribute(Attributes::FLEE, _("% Evade")); + // TRANSLATORS: player stat // xgettext:no-c-format statusWindow->addAttribute(Attributes::CRIT, _("% Critical")); + // TRANSLATORS: player stat statusWindow->addAttribute(Attributes::ATTACK_DELAY, _("Attack Delay")); + // TRANSLATORS: player stat statusWindow->addAttribute(Attributes::WALK_SPEED, _("Walk Delay")); + // TRANSLATORS: player stat statusWindow->addAttribute(Attributes::ATTACK_RANGE, _("Attack Range")); + // TRANSLATORS: player stat statusWindow->addAttribute(Attributes::ATTACK_SPEED, _("Damage per sec.")); + // TRANSLATORS: player stat statusWindow->addAttribute(Attributes::KARMA, _("Karma")); + // TRANSLATORS: player stat statusWindow->addAttribute(Attributes::MANNER, _("Manner")); } diff --git a/src/net/eathena/generalrecv.cpp b/src/net/eathena/generalrecv.cpp index 3b67b32e2..48e079d09 100644 --- a/src/net/eathena/generalrecv.cpp +++ b/src/net/eathena/generalrecv.cpp @@ -45,94 +45,122 @@ void GeneralRecv::processConnectionProblem(Net::MessageIn &msg) switch (code) { case 0: + // TRANSLATORS: error message errorMessage = _("Authentication failed."); break; case 1: + // TRANSLATORS: error message errorMessage = _("No servers available."); break; case 2: if (client->getState() == State::GAME) { + // TRANSLATORS: error message errorMessage = _("Someone else is trying to use " "this account."); } else { + // TRANSLATORS: error message errorMessage = _("This account is already logged in."); } break; case 3: + // TRANSLATORS: error message errorMessage = _("Speed hack detected."); break; case 4: + // TRANSLATORS: error message errorMessage = _("Server full."); break; case 5: + // TRANSLATORS: error message errorMessage = _("Sorry, you are underaged."); break; case 8: + // TRANSLATORS: error message errorMessage = _("Duplicated login."); break; case 9: + // TRANSLATORS: error message errorMessage = _("To many connections from same ip."); break; case 10: + // TRANSLATORS: error message errorMessage = _("Not paid for this time."); break; case 11: + // TRANSLATORS: error message errorMessage = _("Pay suspended."); break; case 12: + // TRANSLATORS: error message errorMessage = _("Pay changed."); break; case 13: + // TRANSLATORS: error message errorMessage = _("Pay wrong ip."); break; case 14: + // TRANSLATORS: error message errorMessage = _("Pay game room."); break; case 15: + // TRANSLATORS: error message errorMessage = _("Disconnect forced by GM."); break; case 16: case 17: + // TRANSLATORS: error message errorMessage = _("Ban japan refuse."); break; case 18: + // TRANSLATORS: error message errorMessage = _("Remained other account."); break; case 100: + // TRANSLATORS: error message errorMessage = _("Ip unfair."); break; case 101: + // TRANSLATORS: error message errorMessage = _("Ip count all."); break; case 102: + // TRANSLATORS: error message errorMessage = _("Ip count."); break; case 103: case 104: + // TRANSLATORS: error message errorMessage = _("Memory."); break; case 105: + // TRANSLATORS: error message errorMessage = _("Han valid."); break; case 106: + // TRANSLATORS: error message errorMessage = _("Ip limited access."); break; case 107: + // TRANSLATORS: error message errorMessage = _("Over characters list."); break; case 108: + // TRANSLATORS: error message errorMessage = _("Ip blocked."); break; case 109: + // TRANSLATORS: error message errorMessage = _("Invalid password count."); break; case 110: + // TRANSLATORS: error message errorMessage = _("Not allowed race."); break; default: + // TRANSLATORS: error message errorMessage = _("Unknown connection error."); break; } @@ -143,6 +171,7 @@ void GeneralRecv::processMapNotFound(Net::MessageIn &msg) { const int sz = msg.readInt16("len") - 4; msg.readString(sz, "map name?"); + // TRANSLATORS: error message errorMessage = _("Map not found"); client->setState(State::ERROR); } diff --git a/src/net/eathena/mailrecv.cpp b/src/net/eathena/mailrecv.cpp index 77bd3e4a9..1198968ac 100644 --- a/src/net/eathena/mailrecv.cpp +++ b/src/net/eathena/mailrecv.cpp @@ -144,6 +144,7 @@ void MailRecv::processNewMail(Net::MessageIn &msg) const std::string subj = msg.readString(40, "title"); const std::string sender = msg.readString(24, "sender name"); NotifyManager::notify(NotifyTypes::NEW_MAIL, + // TRANSLATORS: mail message notification strprintf(_("You have new mail from %s with subject %s"), sender.c_str(), subj.c_str())); mailHandler->refresh(); diff --git a/src/net/eathena/petrecv.cpp b/src/net/eathena/petrecv.cpp index 5f82e8a9d..284ada80b 100644 --- a/src/net/eathena/petrecv.cpp +++ b/src/net/eathena/petrecv.cpp @@ -64,9 +64,12 @@ void PetRecv::processPetMessage(Net::MessageIn &msg) { if (localChatTab && localPlayer) { + // TRANSLATORS: user's pet std::string nick = strprintf(_("%s's pet"), localPlayer->getName().c_str()); - localChatTab->chatLog(nick, strprintf("hungry level %d", hungry)); + localChatTab->chatLog(nick, + // TRANSLATORS: pet hungry level + strprintf(_("hungry level %d"), hungry)); } PetInfo *const info = PlayerInfo::getPet(); if (!info || info->id != id) diff --git a/src/net/eathena/skillrecv.cpp b/src/net/eathena/skillrecv.cpp index 26ce946cc..214cd88d9 100644 --- a/src/net/eathena/skillrecv.cpp +++ b/src/net/eathena/skillrecv.cpp @@ -220,17 +220,27 @@ void SkillRecv::processSkillFailed(Net::MessageIn &msg) SkillInfo *const info = skillDialog->getSkill(bskill); if (info) + { txt = info->errorText; + } else + { + // TRANSLATORS: skill error message txt = strprintf(_("Unknown skill error: %d"), bskill); + } } else { SkillInfo *const info = skillDialog->getSkill(skillId); if (info) + { txt = info->errorText + "."; + } else + { + // TRANSLATORS: skill error message txt = strprintf(_("Unknown skill error: %d."), skillId); + } } txt.append(" "); @@ -292,11 +302,13 @@ void SkillRecv::processSkillFailed(Net::MessageIn &msg) const ItemInfo &info = ItemDB::get(itemId); if (amount == 1) { + // TRANSLATORS: skill error message txt.append(strprintf(_("Need equipment %s."), info.getLink().c_str())); } else { + // TRANSLATORS: skill error message txt.append(strprintf(_("Need equipment %s and amount %d"), info.getLink().c_str(), amount)); @@ -310,11 +322,13 @@ void SkillRecv::processSkillFailed(Net::MessageIn &msg) const ItemInfo &info = ItemDB::get(itemId); if (amount == 1) { + // TRANSLATORS: skill error message txt.append(strprintf(_("Need item %s."), info.getLink().c_str())); } else { + // TRANSLATORS: skill error message txt.append(strprintf(_("Need item %s and amount %d"), info.getLink().c_str(), amount)); diff --git a/src/net/tmwa/generalhandler.cpp b/src/net/tmwa/generalhandler.cpp index 300110742..72b533b9f 100644 --- a/src/net/tmwa/generalhandler.cpp +++ b/src/net/tmwa/generalhandler.cpp @@ -229,23 +229,23 @@ void GeneralHandler::gameStarted() const // protection against double addition attributes. statusWindow->clearAttributes(); - // TRANSLATORS: player stat statusWindow->addAttribute(Attributes::STR, + // TRANSLATORS: player stat _("Strength"), "str", Modifiable_true); - // TRANSLATORS: player stat statusWindow->addAttribute(Attributes::AGI, + // TRANSLATORS: player stat _("Agility"), "agi", Modifiable_true); - // TRANSLATORS: player stat statusWindow->addAttribute(Attributes::VIT, + // TRANSLATORS: player stat _("Vitality"), "vit", Modifiable_true); - // TRANSLATORS: player stat statusWindow->addAttribute(Attributes::INT, + // TRANSLATORS: player stat _("Intelligence"), "int", Modifiable_true); - // TRANSLATORS: player stat statusWindow->addAttribute(Attributes::DEX, + // TRANSLATORS: player stat _("Dexterity"), "dex", Modifiable_true); - // TRANSLATORS: player stat statusWindow->addAttribute(Attributes::LUK, + // TRANSLATORS: player stat _("Luck"), "luk", Modifiable_true); // TRANSLATORS: player stat statusWindow->addAttribute(Attributes::ATK, _("Attack")); diff --git a/src/resources/db/npcdb.cpp b/src/resources/db/npcdb.cpp index 80828ae37..3362c02c9 100644 --- a/src/resources/db/npcdb.cpp +++ b/src/resources/db/npcdb.cpp @@ -148,8 +148,11 @@ void NPCDB::loadXmlFile(const std::string &fileName) currentInfo->setDisplay(display); if (currentInfo->getMenu().empty()) { + // TRANSLATORS: npc context menu item currentInfo->addMenu(_("Talk"), "talk 'NAME'"); + // TRANSLATORS: npc context menu item currentInfo->addMenu(_("Buy"), "buy 'NAME'"); + // TRANSLATORS: npc context menu item currentInfo->addMenu(_("Sell"), "sell 'NAME'"); } mNPCInfos[id] = currentInfo; diff --git a/src/resources/mapreader.cpp b/src/resources/mapreader.cpp index c0855fe5c..1c9e5af9f 100644 --- a/src/resources/mapreader.cpp +++ b/src/resources/mapreader.cpp @@ -440,6 +440,7 @@ Map *MapReader::readMap(XmlNodePtrConst node, const std::string &path) } else if (objType == "SPAWN") { + // TRANSLATORS: spawn name // map->addPortal(_("Spawn: ") + objName, // MapItemType::PORTAL, // objX, objY, objW, objH); diff --git a/src/utils/stringutils.cpp b/src/utils/stringutils.cpp index 3e656330b..8b616d2f7 100644 --- a/src/utils/stringutils.cpp +++ b/src/utils/stringutils.cpp @@ -954,6 +954,7 @@ std::string timeDiffToString(int timeDiff) } if (str.empty()) { + // TRANSLATORS: uptime command str.append(strprintf(ngettext(N_("%d second"), N_("%d seconds"), 0), 0)); } diff --git a/src/utils/stringutils.h b/src/utils/stringutils.h index 2f192c98c..310bbc957 100644 --- a/src/utils/stringutils.h +++ b/src/utils/stringutils.h @@ -101,8 +101,6 @@ const char *ipToString(const uint32_t address) A_WARN_UNUSED; */ std::string strprintf(const char *const format, ...) A_NONNULL(1) A_WARN_UNUSED #ifdef __GNUC__ - /* This attribute is nice: it even works through gettext invokation. For - example, gcc will complain that strprintf(_("%s"), 42) is ill-formed. */ #ifdef __OpenBSD__ __attribute__((__format__(printf, 1, 2))) #else |