summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGuillaume Melquiond <guillaume.melquiond@gmail.com>2007-08-06 06:20:14 +0000
committerGuillaume Melquiond <guillaume.melquiond@gmail.com>2007-08-06 06:20:14 +0000
commit0bd2a74378b01204876ec8d92c03959f3b3a287e (patch)
treeb672f95f86d8f7cb6e058c3fb1d050c860611d9e /src
parent58800d9d604d9aa36fed3f3a4eaddaacc6857877 (diff)
downloadmana-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.am2
-rw-r--r--src/gui/inventorywindow.cpp50
-rw-r--r--src/utils/strprintf.cpp53
-rw-r--r--src/utils/strprintf.h37
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