diff options
author | Guillaume Melquiond <guillaume.melquiond@gmail.com> | 2007-08-06 06:20:14 +0000 |
---|---|---|
committer | Guillaume Melquiond <guillaume.melquiond@gmail.com> | 2007-08-06 06:20:14 +0000 |
commit | 0bd2a74378b01204876ec8d92c03959f3b3a287e (patch) | |
tree | b672f95f86d8f7cb6e058c3fb1d050c860611d9e /src | |
parent | 58800d9d604d9aa36fed3f3a4eaddaacc6857877 (diff) | |
download | mana-0bd2a74378b01204876ec8d92c03959f3b3a287e.tar.gz mana-0bd2a74378b01204876ec8d92c03959f3b3a287e.tar.bz2 mana-0bd2a74378b01204876ec8d92c03959f3b3a287e.tar.xz mana-0bd2a74378b01204876ec8d92c03959f3b3a287e.zip |
Added support for translating variable strings.
Diffstat (limited to 'src')
-rw-r--r-- | src/Makefile.am | 2 | ||||
-rw-r--r-- | src/gui/inventorywindow.cpp | 50 | ||||
-rw-r--r-- | src/utils/strprintf.cpp | 53 | ||||
-rw-r--r-- | src/utils/strprintf.h | 37 |
4 files changed, 111 insertions, 31 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index b3142582..5866205e 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -232,6 +232,8 @@ tmw_SOURCES = gui/widgets/dropdown.cpp \ utils/dtor.h \ utils/fastsqrt.h \ utils/minmax.h \ + utils/strprintf.h \ + utils/strprintf.cpp \ utils/tostring.h \ utils/xml.cpp \ utils/xml.h \ diff --git a/src/gui/inventorywindow.cpp b/src/gui/inventorywindow.cpp index 95a669a9..e31c87f6 100644 --- a/src/gui/inventorywindow.cpp +++ b/src/gui/inventorywindow.cpp @@ -42,7 +42,7 @@ #include "../resources/gettext.h" #include "../resources/iteminfo.h" -#include "../utils/tostring.h" +#include "../utils/strprintf.h" InventoryWindow::InventoryWindow(): Window(_("Inventory")) @@ -63,10 +63,10 @@ InventoryWindow::InventoryWindow(): mInvenScroll->setPosition(8, 8); mInvenScroll->setHorizontalScrollPolicy(gcn::ScrollArea::SHOW_NEVER); - mItemNameLabel = new gcn::Label("Name:"); - mItemDescriptionLabel = new gcn::Label("Description:"); - mItemEffectLabel = new gcn::Label("Effect:"); - mWeightLabel = new gcn::Label("Total Weight: - Maximum Weight: "); + mItemNameLabel = new gcn::Label(strprintf(_("Name: %s"), "")); + mItemDescriptionLabel = new gcn::Label(strprintf(_("Description: %s"), "")); + mItemEffectLabel = new gcn::Label(strprintf(_("Effect: %s"), "")); + mWeightLabel = new gcn::Label(strprintf(_("Total Weight: %d - Maximum Weight: %d"), 0, 0)); mWeightLabel->setPosition(8, 8); mInvenScroll->setPosition(8, mWeightLabel->getY() + mWeightLabel->getHeight() + 5); @@ -93,9 +93,8 @@ void InventoryWindow::logic() updateButtons(); // Update weight information - mWeightLabel->setCaption( - "Total Weight: " + toString(player_node->getTotalWeight()) + " - " - "Maximum Weight: " + toString(player_node->getMaxWeight())); + mWeightLabel->setCaption(strprintf(_("Total Weight: %d - Maximum Weight: %d"), + player_node->getTotalWeight(), player_node->getMaxWeight())); mWeightLabel->adjustSize(); } @@ -125,29 +124,18 @@ void InventoryWindow::action(const gcn::ActionEvent &event) void InventoryWindow::selectionChanged(const SelectionEvent &event) { Item *item = mItems->getItem(); - - // Update name, effect and description - if (!item) - { - mItemNameLabel->setCaption("Name:"); - mItemEffectLabel->setCaption("Effect:"); - mItemDescriptionLabel->setCaption("Description:"); - } - else - { - const ItemInfo& itemInfo = item->getInfo(); - std::string SomeText; - SomeText = "Name: " + itemInfo.getName(); - mItemNameLabel->setCaption(SomeText); - SomeText = "Effect: " + itemInfo.getEffect(); - mItemEffectLabel->setCaption(SomeText); - SomeText = "Description: " + itemInfo.getDescription(); - mItemDescriptionLabel->setCaption(SomeText); - - mItemNameLabel->adjustSize(); - mItemEffectLabel->adjustSize(); - mItemDescriptionLabel->adjustSize(); - } + ItemInfo const *info = item ? &item->getInfo() : NULL; + + mItemNameLabel->setCaption + (strprintf(_("Name: %s"), info ? info->getName().c_str() : "")); + mItemEffectLabel->setCaption + (strprintf(_("Effect: %s"), info ? info->getEffect().c_str() : "")); + mItemDescriptionLabel->setCaption + (strprintf(_("Description: %s"), info ? info->getDescription().c_str() : "")); + + mItemNameLabel->adjustSize(); + mItemEffectLabel->adjustSize(); + mItemDescriptionLabel->adjustSize(); } void InventoryWindow::mouseClicked(gcn::MouseEvent &event) diff --git a/src/utils/strprintf.cpp b/src/utils/strprintf.cpp new file mode 100644 index 00000000..27dd5462 --- /dev/null +++ b/src/utils/strprintf.cpp @@ -0,0 +1,53 @@ +/* + * The Mana World + * Copyright 2007 The Mana World Development Team + * + * This file is part of The Mana World. + * + * The Mana World is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * The Mana World is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with The Mana World; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * $Id$ + */ + +#ifndef _TMW_UTILS_TOSTRING_H +#define _TMW_UTISL_TOSTRING_H + +#include <cstdarg> + +#include "strprintf.h" + +std::string strprintf(char const *format, ...) +{ + char buf[256]; + va_list(args); + va_start(args, format); + int nb = vsnprintf(buf, 256, format, args); + va_end(args); + if (nb < 256) + { + return buf; + } + // The static size was not big enough, try again with a dynamic allocation. + ++nb; + char *buf2 = new char[nb]; + va_start(args, format); + vsnprintf(buf2, nb, format, args); + va_end(args); + std::string res(buf2); + delete [] buf2; + return res; +} + +#endif diff --git a/src/utils/strprintf.h b/src/utils/strprintf.h new file mode 100644 index 00000000..4b5974a6 --- /dev/null +++ b/src/utils/strprintf.h @@ -0,0 +1,37 @@ +/* + * The Mana World + * Copyright 2007 The Mana World Development Team + * + * This file is part of The Mana World. + * + * The Mana World is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * The Mana World is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with The Mana World; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * $Id$ + */ + +#ifndef _TMW_UTILS_STRPRINTF_H +#define _TMW_UTISL_STRPRINTF_H + +#include <string> + +std::string strprintf(char const *, ...) +#ifdef __GNUC__ + /* This attribute is nice: it even works through gettext invokation. For + example, gcc will complain that strprintf(_("%s"), 42) is ill-formed. */ + __attribute__((format(printf, 1, 2))) +#endif +; + +#endif |