, ikariLabelCol(0)
 , ikariLabelRow(0)
 
+, victoryGetsText(0)
+, victoryExpText(0)
+, victoryGoldText(0)
+, victoryLevelUpText(0)
+, victoryUpgradeText(0)
+, victoryNextLevelText(0)
+
+, victoryMHPText(0)
+, victoryMMPText(0)
+, victoryATPText(0)
+, victoryDFPText(0)
+, victorySTRText(0)
+, victoryAGLText(0)
+, victoryINTText(0)
+, victoryGUTText(0)
+, victoryMGRText(0)
+
 { }
 
 
        td.AddField("ikariLabelCol", FieldDescription(((char *)&r.ikariLabelCol) - ((char *)&r), Interpreter::NUMBER_ID).SetDescription("row of the ikari label in heroTagLabels"));
 
        td.AddField("heroesBgColor", FieldDescription(((char *)&r.heroesBgColor) - ((char *)&r), Interpreter::COLOR_ID).SetDescription("background color of the small tags during attack animation"));
+
+       td.AddField("victoryGetsText", FieldDescription(((char *)&r.victoryGetsText) - ((char *)&r), Interpreter::STRING_ID).SetReferenced());
+       td.AddField("victoryExpText", FieldDescription(((char *)&r.victoryExpText) - ((char *)&r), Interpreter::STRING_ID).SetReferenced());
+       td.AddField("victoryGoldText", FieldDescription(((char *)&r.victoryGoldText) - ((char *)&r), Interpreter::STRING_ID).SetReferenced());
+       td.AddField("victoryLevelUpText", FieldDescription(((char *)&r.victoryLevelUpText) - ((char *)&r), Interpreter::STRING_ID).SetReferenced());
+       td.AddField("victoryUpgradeText", FieldDescription(((char *)&r.victoryUpgradeText) - ((char *)&r), Interpreter::STRING_ID).SetReferenced());
+       td.AddField("victoryNextLevelText", FieldDescription(((char *)&r.victoryNextLevelText) - ((char *)&r), Interpreter::STRING_ID).SetReferenced());
+
+       td.AddField("victoryMHPText", FieldDescription(((char *)&r.victoryMHPText) - ((char *)&r), Interpreter::STRING_ID).SetReferenced());
+       td.AddField("victoryMMPText", FieldDescription(((char *)&r.victoryMMPText) - ((char *)&r), Interpreter::STRING_ID).SetReferenced());
+       td.AddField("victoryATPText", FieldDescription(((char *)&r.victoryATPText) - ((char *)&r), Interpreter::STRING_ID).SetReferenced());
+       td.AddField("victoryDFPText", FieldDescription(((char *)&r.victoryDFPText) - ((char *)&r), Interpreter::STRING_ID).SetReferenced());
+       td.AddField("victorySTRText", FieldDescription(((char *)&r.victorySTRText) - ((char *)&r), Interpreter::STRING_ID).SetReferenced());
+       td.AddField("victoryAGLText", FieldDescription(((char *)&r.victoryAGLText) - ((char *)&r), Interpreter::STRING_ID).SetReferenced());
+       td.AddField("victoryINTText", FieldDescription(((char *)&r.victoryINTText) - ((char *)&r), Interpreter::STRING_ID).SetReferenced());
+       td.AddField("victoryGUTText", FieldDescription(((char *)&r.victoryGUTText) - ((char *)&r), Interpreter::STRING_ID).SetReferenced());
+       td.AddField("victoryMGRText", FieldDescription(((char *)&r.victoryMGRText) - ((char *)&r), Interpreter::STRING_ID).SetReferenced());
 }
 
 void Resources::Construct(void *data) {
 
 
        graphics::Color heroesBgColor;
 
+       const char *victoryGetsText;
+       const char *victoryExpText;
+       const char *victoryGoldText;
+       const char *victoryLevelUpText;
+       const char *victoryUpgradeText;
+       const char *victoryNextLevelText;
+
+       const char *victoryMHPText;
+       const char *victoryMMPText;
+       const char *victoryATPText;
+       const char *victoryDFPText;
+       const char *victorySTRText;
+       const char *victoryAGLText;
+       const char *victoryINTText;
+       const char *victoryGUTText;
+       const char *victoryMGRText;
+
 
        Resources();
 
 
 #include "../Battle.h"
 #include "../BattleState.h"
 #include "../Hero.h"
+#include "../Resources.h"
 #include "../../app/Application.h"
 #include "../../app/Input.h"
 #include "../../common/Capsule.h"
 #include "../../graphics/Font.h"
 #include "../../graphics/Frame.h"
 
+#include <iomanip>
 #include <sstream>
 
 using app::Application;
 using graphics::Font;
 using graphics::Frame;
 using math::Vector;
+using std::left;
+using std::right;
+using std::setfill;
+using std::setw;
 using std::string;
+using std::stringstream;
 using std::vector;
 
 namespace battle {
 }
 
 void VictoryState::LoadResults() {
-       // TODO: localization
+       const Resources &res = parent->Res();
        lines.clear();
 
-       std::stringstream s;
-       s << "Gets " << battle->ExpReward() << " EXP";
+       stringstream s;
+       s << res.victoryGetsText << ' '
+                       << battle->ExpReward() << ' '
+                       << res.victoryExpText << '.';
        lines.push_back(s.str());
 
        s.str("");
-       s << "Gets " << battle->GoldReward() << " gold";
+       s << res.victoryGetsText << ' '
+                       << battle->GoldReward() << ' '
+                       << res.victoryGoldText << '.';
        lines.push_back(s.str());
 
        lines.push_back("");
        GameState &state = *parent->Game().state;
        vector<Upgrade> upgrade;
        battle->ApplyRewards(state, upgrade);
-       for (std::vector<Upgrade>::const_iterator
+       for (vector<Upgrade>::const_iterator
                        i(upgrade.begin()), end(upgrade.end());
                        i != end; ++i) {
                LoadResult(*i, lines);
        }
 
+       s.str("");
+       s << state.money << ' ' << res.victoryGoldText;
+       string goldStr = s.str();
+
        lines.push_back("");
        s.str("");
-       s << state.money << " gold";
+       s << right << setw(28) << setfill(' ') << goldStr;
        lines.push_back(s.str());
 }
 
 void VictoryState::LoadResult(
                const Upgrade &u,
                vector<string> &lines) {
-       std::stringstream s;
+       const Resources &res = parent->Res();
+       stringstream s;
        switch (u.GetType()) {
                case Upgrade::LEVEL_UP:
-                       s << u.Name() << " levels up.";
+                       s << left << setw(6) << setfill(' ') << u.Name()
+                                       << res.victoryLevelUpText << '.';
                        break;
                case Upgrade::MAX_HEALTH:
-                       s << "Max. HP increases by " << u.Amount();
+                       s << res.victoryMHPText << ' '
+                                       << res.victoryUpgradeText << ' '
+                                       << u.Amount() << '.';
                        break;
                case Upgrade::MAX_MAGIC:
-                       s << "Max. MP increases by " << u.Amount();
+                       s << res.victoryMMPText << ' '
+                                       << res.victoryUpgradeText << ' '
+                                       << u.Amount() << '.';
                        break;
                case Upgrade::ATTACK:
-                       s << "ATP increases by " << u.Amount();
+                       s << res.victoryATPText << ' '
+                                       << res.victoryUpgradeText << ' '
+                                       << u.Amount() << '.';
                        break;
                case Upgrade::DEFENSE:
-                       s << "DFP increases by " << u.Amount();
+                       s << res.victoryDFPText << ' '
+                                       << res.victoryUpgradeText << ' '
+                                       << u.Amount() << '.';
                        break;
                case Upgrade::STRENGTH:
-                       s << "STR increases by " << u.Amount();
+                       s << res.victorySTRText << ' '
+                                       << res.victoryUpgradeText << ' '
+                                       << u.Amount() << '.';
                        break;
                case Upgrade::AGILITY:
-                       s << "AGL increases by " << u.Amount();
+                       s << res.victoryAGLText << ' '
+                                       << res.victoryUpgradeText << ' '
+                                       << u.Amount() << '.';
                        break;
                case Upgrade::INTELLIGENCE:
-                       s << "INT increases by " << u.Amount();
+                       s << res.victoryINTText << ' '
+                                       << res.victoryUpgradeText << ' '
+                                       << u.Amount() << '.';
                        break;
                case Upgrade::GUT:
-                       s << "GUT increases by " << u.Amount();
+                       s << res.victoryGUTText << ' '
+                                       << res.victoryUpgradeText << ' '
+                                       << u.Amount() << '.';
                        break;
                case Upgrade::MAGIC_RESISTANCE:
-                       s << "MGR increases by " << u.Amount();
+                       s << res.victoryMGRText << ' '
+                                       << res.victoryUpgradeText << ' '
+                                       << u.Amount() << '.';
                        break;
                case Upgrade::LEVEL_NEXT:
-                       s << u.Name() << " next level " << u.Amount();
+                       s << setw(7) << setfill(' ')
+                                       << left << u.Name() << ' '
+                                       << res.victoryNextLevelText
+                                       << ' ' << u.Amount();
                        break;
                default:
                        s << "unknown upgrade type " << u.GetType();