summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Athay <ko2fan@gmail.com>2009-01-13 00:28:58 +0000
committerDavid Athay <ko2fan@gmail.com>2009-01-13 00:28:58 +0000
commit224da21ea258450fcc78dd7635de84aba1d1df5e (patch)
treedc4df492779986aff60ed785f4821daae968d023
parentd7a5438d3c7b140c0966243bae98ff447385d246 (diff)
parented60c53eb2fe5ef377fc726df796d0aaf2005c6c (diff)
downloadmana-client-224da21ea258450fcc78dd7635de84aba1d1df5e.tar.gz
mana-client-224da21ea258450fcc78dd7635de84aba1d1df5e.tar.bz2
mana-client-224da21ea258450fcc78dd7635de84aba1d1df5e.tar.xz
mana-client-224da21ea258450fcc78dd7635de84aba1d1df5e.zip
Merge branch 'master' of git://gitorious.org/tmw/eathena
-rw-r--r--.gitignore20
-rw-r--r--INSTALL5
-rw-r--r--Makefile.am5
-rw-r--r--NEWS10
-rw-r--r--README2
-rwxr-xr-xconfigure.ac78
-rw-r--r--data/CMakeLists.txt1
-rw-r--r--data/Makefile.am2
-rw-r--r--data/fonts/CMakeLists.txt6
-rw-r--r--data/fonts/Makefile.am5
-rw-r--r--data/graphics/CMakeLists.txt1
-rw-r--r--data/graphics/gui/CMakeLists.txt2
-rw-r--r--data/graphics/gui/Makefile.am2
-rw-r--r--data/graphics/gui/browserfont.pngbin1846 -> 0 bytes
-rw-r--r--data/graphics/gui/sansserif8.pngbin2134 -> 0 bytes
-rw-r--r--data/graphics/images/CMakeLists.txt4
-rw-r--r--docs/SOURCE/Doxyfile (renamed from docs/SOURCE/tmw.doxcfg)6
-rw-r--r--docs/SOURCE/tmwdox.sh1
-rw-r--r--po/LINGUAS25
-rw-r--r--po/Makevars41
-rw-r--r--po/POTFILES.in34
-rw-r--r--po/ar.po985
-rw-r--r--po/ca.po901
-rw-r--r--po/cs.po956
-rw-r--r--po/da.po1009
-rw-r--r--po/de.po1011
-rw-r--r--po/en_GB.po985
-rw-r--r--po/eo.po897
-rw-r--r--po/es.po985
-rw-r--r--po/fi.po995
-rw-r--r--po/fr.po1012
-rw-r--r--po/he.po995
-rw-r--r--po/hr.po947
-rw-r--r--po/id.po985
-rw-r--r--po/it.po987
-rw-r--r--po/ja.po932
-rw-r--r--po/nl.po957
-rw-r--r--po/pl.po991
-rw-r--r--po/pt.po993
-rw-r--r--po/pt_BR.po1009
-rw-r--r--po/ru.po985
-rw-r--r--po/sk.po917
-rw-r--r--po/sv.po985
-rw-r--r--po/th.po919
-rw-r--r--po/tmw.pot896
-rw-r--r--po/zh_CN.po985
-rw-r--r--src/CMakeLists.txt14
-rw-r--r--src/Makefile.am27
-rw-r--r--[-rwxr-xr-x]src/SDLMain.h0
-rw-r--r--[-rwxr-xr-x]src/SDLMain.m0
-rw-r--r--src/animatedsprite.h27
-rw-r--r--src/being.cpp23
-rw-r--r--src/being.h33
-rw-r--r--src/game.cpp4
-rw-r--r--src/graphics.cpp2
-rw-r--r--src/gui/browserbox.cpp148
-rw-r--r--src/gui/browserbox.h2
-rw-r--r--src/gui/buy.cpp111
-rw-r--r--src/gui/buy.h8
-rw-r--r--src/gui/buysell.cpp10
-rw-r--r--src/gui/char_select.cpp120
-rw-r--r--src/gui/char_select.h7
-rw-r--r--src/gui/char_server.cpp8
-rw-r--r--src/gui/chat.cpp215
-rw-r--r--src/gui/chat.h21
-rw-r--r--src/gui/confirm_dialog.cpp5
-rw-r--r--src/gui/connection.cpp6
-rw-r--r--src/gui/equipmentwindow.cpp4
-rw-r--r--src/gui/gui.cpp16
-rw-r--r--src/gui/gui.h3
-rw-r--r--src/gui/hbox.cpp39
-rw-r--r--src/gui/help.cpp6
-rw-r--r--src/gui/inttextbox.cpp21
-rw-r--r--src/gui/inttextbox.h4
-rw-r--r--src/gui/inventorywindow.cpp51
-rw-r--r--src/gui/item_amount.cpp89
-rw-r--r--src/gui/itemcontainer.cpp1
-rw-r--r--src/gui/itemshortcutcontainer.cpp1
-rw-r--r--src/gui/login.cpp77
-rw-r--r--src/gui/menuwindow.cpp18
-rw-r--r--src/gui/minimap.cpp4
-rw-r--r--src/gui/npc_text.cpp6
-rw-r--r--src/gui/npclistdialog.cpp8
-rw-r--r--src/gui/ok_dialog.cpp4
-rw-r--r--src/gui/popupmenu.cpp31
-rw-r--r--src/gui/radiobutton.cpp19
-rw-r--r--src/gui/radiobutton.h6
-rw-r--r--src/gui/register.cpp51
-rw-r--r--src/gui/sdlinput.cpp429
-rw-r--r--src/gui/sdlinput.h188
-rw-r--r--src/gui/sell.cpp116
-rw-r--r--src/gui/sell.h5
-rw-r--r--src/gui/setup.cpp18
-rw-r--r--src/gui/setup_audio.cpp8
-rw-r--r--src/gui/setup_joystick.cpp18
-rw-r--r--src/gui/setup_keyboard.cpp12
-rw-r--r--src/gui/setup_players.cpp60
-rw-r--r--src/gui/setup_video.cpp55
-rw-r--r--src/gui/skill.cpp35
-rw-r--r--src/gui/status.cpp88
-rw-r--r--src/gui/textfield.cpp102
-rw-r--r--src/gui/textfield.h5
-rw-r--r--src/gui/trade.cpp47
-rw-r--r--src/gui/truetypefont.cpp9
-rw-r--r--src/gui/truetypefont.h75
-rw-r--r--src/gui/updatewindow.cpp16
-rw-r--r--src/gui/vbox.cpp43
-rw-r--r--src/gui/viewport.cpp2
-rw-r--r--src/gui/widgets/layout.cpp327
-rw-r--r--src/gui/widgets/layout.h320
-rw-r--r--src/gui/window.cpp85
-rw-r--r--src/gui/window.h73
-rw-r--r--src/keyboardconfig.cpp2
-rw-r--r--src/keyboardconfig.h3
-rw-r--r--src/localplayer.cpp5
-rw-r--r--src/main.cpp42
-rw-r--r--src/map.cpp53
-rw-r--r--src/map.h60
-rw-r--r--src/net/beinghandler.cpp6
-rw-r--r--src/net/charserverhandler.cpp5
-rw-r--r--src/openglgraphics.cpp16
-rw-r--r--src/openglgraphics.h8
-rw-r--r--src/player.cpp20
-rw-r--r--src/player.h2
-rw-r--r--src/position.cpp (renamed from src/gui/box.cpp)31
-rw-r--r--src/position.h (renamed from src/gui/box.h)66
-rw-r--r--src/properties.h15
-rw-r--r--src/resources/dye.cpp6
-rw-r--r--src/resources/dye.h6
-rw-r--r--src/resources/imageloader.cpp2
-rw-r--r--src/resources/imageloader.h3
-rw-r--r--src/resources/itemdb.cpp13
-rw-r--r--src/resources/iteminfo.cpp2
-rw-r--r--src/resources/iteminfo.h6
-rw-r--r--src/resources/mapreader.cpp90
-rw-r--r--src/resources/resourcemanager.cpp12
-rw-r--r--src/resources/resourcemanager.h9
-rw-r--r--src/resources/spritedef.cpp28
-rw-r--r--src/resources/spritedef.h23
-rw-r--r--src/utils/gettext.h (renamed from src/gui/hbox.h)29
-rw-r--r--src/vector.cpp (renamed from src/gui/vbox.h)17
-rw-r--r--src/vector.h68
-rw-r--r--tmw.cbp11
-rw-r--r--tools/adler32.c1
-rw-r--r--tools/tmxcopy/main.cpp2
-rw-r--r--tools/tmxcopy/map.cpp1
-rw-r--r--tools/upalyzer/analyze.php35
147 files changed, 27160 insertions, 1393 deletions
diff --git a/.gitignore b/.gitignore
index d429c00a..2eeb0c11 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,23 +1,41 @@
# files created by autoreconf
+ABOUT-NLS
Makefile.in
aclocal.m4
autom4te.cache
+config.guess
config.h.in
+config.rpath
+config.sub
configure
depcomp
install-sh
+m4/
missing
+po/Makefile.in.in
+po/Makevars.template
+po/Rules-quot
+po/boldquot.sed
+po/en@boldquot.header
+po/en@quot.header
+po/insert-header.sin
+po/quot.sed
+po/remove-potcdate.*
# files created by configure
Makefile
config.h
config.log
config.status
-src/.deps
+po/POTFILES
+.deps
stamp-h1
# files created during build
*.o
+*.gmo
+.dirstamp
+po/stamp-po
src/tmw
# files created during Windows build
diff --git a/INSTALL b/INSTALL
index cd530cae..d604895c 100644
--- a/INSTALL
+++ b/INSTALL
@@ -12,7 +12,7 @@ IRC: irc.freenode.net / #themanaworld
1. Requirements
===============
-You are expected to have either checked out TMW from CVS or you have downloaded
+You are expected to have either checked out TMW from Git or you have downloaded
a source release. To get The Mana World to compile, you need a compiler (GCC)
and some libraries. The required libraries are:
@@ -20,6 +20,7 @@ and some libraries. The required libraries are:
* SDL_mixer http://www.libsdl.org/projects/SDL_mixer/
* SDL_image http://www.libsdl.org/projects/SDL_image/
* SDL_net http://www.libsdl.org/projects/SDL_net/
+* SDL_ttf http://www.libsdl.org/projects/SDL_ttf/
* Guichan 0.8.x http://guichan.sourceforge.net/
* libxml2 http://www.xmlsoft.org/
* physfs 1.0.x http://icculus.org/physfs/
@@ -30,6 +31,8 @@ If you've cloned the Git repository, you will also need these tools to compile:
* GNU automake 1.9 http://www.gnu.org/software/automake/
* GNU autoconf http://www.gnu.org/software/autoconf/
+* GNU gettext http://www.gnu.org/software/gettext/
+* CVS http://www.nongnu.org/cvs/ (needed to run autopoint)
Installing these dependencies is distributions-specific, and we'll leave it to
you to figure this out.
diff --git a/Makefile.am b/Makefile.am
index 7306c71f..2d7250cc 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,5 +1,5 @@
# Subdirectories to build
-SUBDIRS = data docs src
+SUBDIRS = data docs po src
desktopdir = $(datadir)/applications
@@ -7,3 +7,6 @@ desktop_DATA = tmw.desktop
# Extra files to include
EXTRA_DIST = $(desktop_DATA)
+
+# Autopoint m4 stuff
+ACLOCAL_AMFLAGS = -I m4
diff --git a/NEWS b/NEWS
index 4f64967d..eba6ee22 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,11 @@
+0.0.28 (...)
+- Added support for animated map tiles
+- Added support for internationalization, plus many translations
+- Added support for TrueType fonts
+- Trade window is now resizable
+- Obscure precise home directory name when making screenshots
+- Fixed follow-parent of nested and being-following particle emitters
+
0.0.27 (9 December 2008)
- Added support for showing map name above minimap
- Added showing how long the ban is when banned
@@ -368,7 +376,7 @@
- Added 'enter' key support in login screen
- Added RLE sprites for tiles
- Added collision detection with beings
-- Fix for mapserver segfault-bug in chatsystem (broken pipe for all users on
+- Fix for mapserver segfault-bug in chatsystem (broken pipe for all users on
screen)
- Partially added TMW GUI to inventory
- Added soundpool that can preload, play and remove items to/from ram
diff --git a/README b/README
index d2caba88..18621c6c 100644
--- a/README
+++ b/README
@@ -8,7 +8,7 @@ THE MANA WORLD
Powered by:
- - SDL, SDL_image, SDL_mixer (Media framework)
+ - SDL, SDL_image, SDL_mixer, SDL_ttf, SDL_net (Media framework)
- Guichan (GUI framework)
- libxml2 (XML parsing and writing)
- PhysFS (Data files)
diff --git a/configure.ac b/configure.ac
index 556f6beb..8c1ce8a4 100755
--- a/configure.ac
+++ b/configure.ac
@@ -1,18 +1,15 @@
AC_PREREQ(2.59)
AC_INIT([The Mana World], [0.0.27], [themanaworld-devel@lists.sourceforge.net], [tmw])
+AM_INIT_AUTOMAKE
AC_CONFIG_HEADERS([config.h:config.h.in])
AC_LANG_CPLUSPLUS
# Checks for programs.
AC_PROG_CXX
AC_PROG_INSTALL
-AC_PROG_MAKE_SET
# Checks for typedefs, structures, and compiler characteristics.
-AC_HEADER_STDBOOL
-AC_C_CONST
AC_HEADER_TIME
-AC_C_VOLATILE
# Checks for library functions.
AC_FUNC_ERROR_AT_LINE
@@ -22,31 +19,58 @@ AC_FUNC_SELECT_ARGTYPES
AC_FUNC_VPRINTF
AC_CHECK_FUNCS([atexit floor getcwd gethostbyname memset mkdir select socket])
+# Checks for internationalization support
+AM_GNU_GETTEXT([external])
+AM_GNU_GETTEXT_VERSION([0.16.1])
+
+# Search for *-config
+AC_PATH_PROG(SDL_CONFIG, sdl-config)
+AC_PATH_PROG(PKG_CONFIG, pkg-config)
+AC_PATH_PROG(CURL_CONFIG, curl-config)
+
# Checks for libraries
AC_CHECK_LIB([pthread], [pthread_create], ,
AC_MSG_ERROR([ *** Unable to find pthread library]))
AC_CHECK_LIB([guichan], [gcnGuichanVersion], ,
-AC_MSG_ERROR([ *** Unable to find Guichan library (guichan.sf.net)]))
+AC_MSG_ERROR([ *** Unable to find Guichan library (http://guichan.sf.net/)]))
+AC_CHECK_HEADERS([guichan.hpp], ,
+AC_MSG_ERROR([ *** Guichan library found but cannot find headers (http://guichan.sf.net/)]))
-#AC_CHECK_LIB([guichan_sdl], [gcnSDL], ,
-#AC_MSG_ERROR([ *** Unable to find Guichan SDL library (guichan.sf.net)]))
+if test -n "$SDL_CONFIG"; then
+ LIBS="$LIBS `$SDL_CONFIG --libs`"
+ CPPFLAGS="$CPPFLAGS `$SDL_CONFIG --cflags`"
+fi
+AC_CHECK_LIB([SDL], [SDL_Init], ,
+AC_MSG_ERROR([ *** Unable to find SDL library (http://www.libsdl.org/)]))
+AC_CHECK_HEADERS([SDL.h], ,
+AC_MSG_ERROR([ *** SDL library found but cannot find headers (http://www.libsdl.org/)]))
AC_CHECK_LIB([z], [inflate], ,
AC_MSG_ERROR([ *** Unable to find zlib (http://www.gzip.org/zlib/)]))
AC_CHECK_LIB([physfs], [PHYSFS_init], ,
-AC_MSG_ERROR([ *** Unable to find PhysFS library (icculus.org/physfs/)]))
+AC_MSG_ERROR([ *** Unable to find PhysFS library (http://icculus.org/physfs/)]))
+AC_CHECK_HEADERS([physfs.h], ,
+AC_MSG_ERROR([ *** PhysFS library found but cannot find headers (http://icculus.org/physfs/)]))
+if test -n "$CURL_CONFIG"; then
+ LIBS="$LIBS `$CURL_CONFIG --libs`"
+ CPPFLAGS="$CPPFLAGS `$CURL_CONFIG --cflags`"
+fi
AC_CHECK_LIB([curl], [curl_global_init], ,
AC_MSG_ERROR([ *** Unable to find CURL library (http://curl.haxx.se/)]))
-CURL_LIBS=" `curl-config --libs`"
-CURL_CFLAGS=" `curl-config --cflags` "
-AC_SUBST(CURL_LIBS)
-AC_SUBST(CURL_CFLAGS)
+AC_CHECK_HEADERS([curl/curl.h], ,
+AC_MSG_ERROR([ *** CURL library found but cannot find headers (http://curl.haxx.se/)]))
+if test -n "$PKG_CONFIG"; then
+ LIBS="$LIBS `$PKG_CONFIG --libs libxml-2.0`"
+ CPPFLAGS="$CPPFLAGS `$PKG_CONFIG --cflags libxml-2.0`"
+fi
AC_CHECK_LIB([xml2], [xmlInitParser], ,
-AC_MSG_ERROR([ *** Unable to find libxml2 library (xmlsoft.org)]))
+AC_MSG_ERROR([ *** Unable to find libxml2 library (http://xmlsoft.org/)]))
+AC_CHECK_HEADERS([libxml/xmlreader.h], ,
+AC_MSG_ERROR([ *** libxml2 library found but cannot find headers (http://xmlsoft.org/)]))
AC_CHECK_LIB(png, png_write_info, ,
AC_MSG_ERROR([ *** Unable to find png library]))
@@ -61,6 +85,9 @@ AC_MSG_ERROR([ *** Unable to find SDL_ttf library (http://www.libsdl.org/project
AC_CHECK_LIB([SDL_mixer], [Mix_OpenAudio], ,
AC_MSG_ERROR([ *** Unable to find SDL_mixer library (http://www.libsdl.org/projects/SDL_mixer/)]))
+AC_CHECK_LIB([guichan_sdl], [gcnSDL], ,
+AC_MSG_ERROR([ *** Unable to find Guichan SDL library (http://guichan.sf.net/)]))
+
AC_CHECK_LIB(SDL_net, SDLNet_Init, ,
AC_MSG_ERROR([ *** Unable to find SDL_net library]))
@@ -68,12 +95,6 @@ AC_MSG_ERROR([ *** Unable to find SDL_net library]))
AC_HEADER_STDC
AC_CHECK_HEADERS([arpa/inet.h fcntl.h malloc.h netdb.h netinet/in.h stdlib.h string.h sys/socket.h unistd.h])
-# Check for guichan headers
-AC_CHECK_HEADERS([guichan.hpp], ,
-AC_MSG_ERROR([*** Library found but cannot find headers (guichan.sf.net) *** ]))
-
-AM_INIT_AUTOMAKE
-
# Option to enable OpenGL
AC_ARG_WITH(opengl,[ --without-opengl don't use OpenGL ] )
if test "x$with_opengl" == "xno"; then
@@ -85,33 +106,18 @@ else
AC_DEFINE(USE_OPENGL, 1, [Defines if tmw should use an OpenGL display])
fi
-# Search for sdl-config
-AC_PATH_PROG(LIBSDL_CONFIG, sdl-config)
-
-if test -n "$LIBSDL_CONFIG"; then
- LIBSDL_LIBS="`$LIBSDL_CONFIG --libs` -lSDL_image -lSDL_mixer"
- LIBSDL_CFLAGS="`$LIBSDL_CONFIG --cflags`"
- AC_SUBST(LIBSDL_LIBS)
- AC_SUBST(LIBSDL_CFLAGS)
-
- AC_DEFINE_UNQUOTED(HAVE_LIBSDL, 1,
- [Defines if your system has the LIBSDL library])
-else
- AC_DEFINE_UNQUOTED(HAVE_LIBSDL, 0,
- [Defines if your system has the LIBSDL library])
- AC_MSG_ERROR([Could not find sdl-config, check http://www.libsdl.org])
-fi
-
AC_CONFIG_FILES([
Makefile
src/Makefile
data/Makefile
+data/fonts/Makefile
data/graphics/Makefile
data/graphics/gui/Makefile
data/graphics/images/Makefile
data/help/Makefile
data/icons/Makefile
docs/Makefile
+po/Makefile.in
])
AC_OUTPUT
diff --git a/data/CMakeLists.txt b/data/CMakeLists.txt
index 3c482b49..d5e9e88e 100644
--- a/data/CMakeLists.txt
+++ b/data/CMakeLists.txt
@@ -3,3 +3,4 @@ SET(DATA_DIR ${PKG_DATADIR}/data)
ADD_SUBDIRECTORY(graphics)
ADD_SUBDIRECTORY(help)
ADD_SUBDIRECTORY(icons)
+ADD_SUBDIRECTORY(fonts)
diff --git a/data/Makefile.am b/data/Makefile.am
index 5a28f7c1..62672207 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -1,4 +1,4 @@
-SUBDIRS = graphics help icons
+SUBDIRS = fonts graphics help icons
tmwdatadir = $(pkgdatadir)/data
diff --git a/data/fonts/CMakeLists.txt b/data/fonts/CMakeLists.txt
new file mode 100644
index 00000000..dc22e031
--- /dev/null
+++ b/data/fonts/CMakeLists.txt
@@ -0,0 +1,6 @@
+SET (FILES
+ dejavusans.ttf
+ )
+
+INSTALL(FILES ${FILES} DESTINATION ${DATA_DIR}/fonts)
+
diff --git a/data/fonts/Makefile.am b/data/fonts/Makefile.am
new file mode 100644
index 00000000..331f6c8b
--- /dev/null
+++ b/data/fonts/Makefile.am
@@ -0,0 +1,5 @@
+fontsdir = $(pkgdatadir)/data/fonts
+
+fonts_DATA = dejavusans.ttf
+
+EXTRA_DIST = $(fonts_DATA)
diff --git a/data/graphics/CMakeLists.txt b/data/graphics/CMakeLists.txt
index 9a916db3..58d75523 100644
--- a/data/graphics/CMakeLists.txt
+++ b/data/graphics/CMakeLists.txt
@@ -1,3 +1,2 @@
ADD_SUBDIRECTORY(gui)
ADD_SUBDIRECTORY(images)
-ADD_SUBDIRECTORY(tiles)
diff --git a/data/graphics/gui/CMakeLists.txt b/data/graphics/gui/CMakeLists.txt
index 5cb47b8c..1ca4ee72 100644
--- a/data/graphics/gui/CMakeLists.txt
+++ b/data/graphics/gui/CMakeLists.txt
@@ -1,6 +1,5 @@
SET (FILES
bg_quad_dis.png
- browserfont.png
button.png
button_disabled.png
buttonhi.png
@@ -29,7 +28,6 @@ SET (FILES
resize.png
rpgfont_wider.png
selection.png
- sansserif8.png
slider.png
target-cursor-blue-l.png
target-cursor-blue-m.png
diff --git a/data/graphics/gui/Makefile.am b/data/graphics/gui/Makefile.am
index cfa14192..0b7824c9 100644
--- a/data/graphics/gui/Makefile.am
+++ b/data/graphics/gui/Makefile.am
@@ -3,7 +3,6 @@ guidir = $(pkgdatadir)/data/graphics/gui
gui_DATA = \
bg_quad_dis.png \
- browserfont.png \
button.png \
button_disabled.png \
buttonhi.png \
@@ -33,7 +32,6 @@ gui_DATA = \
resize.png \
rpgfont_wider.png \
selection.png \
- sansserif8.png \
slider.png \
target-cursor-blue-l.png \
target-cursor-blue-m.png \
diff --git a/data/graphics/gui/browserfont.png b/data/graphics/gui/browserfont.png
deleted file mode 100644
index 431777c5..00000000
--- a/data/graphics/gui/browserfont.png
+++ /dev/null
Binary files differ
diff --git a/data/graphics/gui/sansserif8.png b/data/graphics/gui/sansserif8.png
deleted file mode 100644
index a4738548..00000000
--- a/data/graphics/gui/sansserif8.png
+++ /dev/null
Binary files differ
diff --git a/data/graphics/images/CMakeLists.txt b/data/graphics/images/CMakeLists.txt
index 1e1cf19f..5181b4e1 100644
--- a/data/graphics/images/CMakeLists.txt
+++ b/data/graphics/images/CMakeLists.txt
@@ -1,6 +1,4 @@
-ADD_SUBDIRECTORY(ambient)
-
-SET (FILES
+SET(FILES
error.png
login_wallpaper.png
)
diff --git a/docs/SOURCE/tmw.doxcfg b/docs/SOURCE/Doxyfile
index fe5039fb..c9522aaf 100644
--- a/docs/SOURCE/tmw.doxcfg
+++ b/docs/SOURCE/Doxyfile
@@ -30,7 +30,7 @@ PROJECT_NUMBER =
# If a relative path is entered, it will be relative to the location
# where doxygen was started. If left blank the current directory will be used.
-OUTPUT_DIRECTORY = ../docs/SOURCE/
+OUTPUT_DIRECTORY =
# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
# 4096 sub-directories (in 2 levels) under the output directory of each output
@@ -406,7 +406,7 @@ WARN_FORMAT = "$file:$line: $text"
# and error messages should be written. If left blank the output is written
# to stderr.
-WARN_LOGFILE =
+WARN_LOGFILE = "warnings.log"
#---------------------------------------------------------------------------
# configuration options related to the input files
@@ -417,7 +417,7 @@ WARN_LOGFILE =
# directories like "/usr/src/myproject". Separate the files or directories
# with spaces.
-INPUT =
+INPUT = "../../src"
# If the value of the INPUT tag contains directories, you can use the
# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
diff --git a/docs/SOURCE/tmwdox.sh b/docs/SOURCE/tmwdox.sh
deleted file mode 100644
index 541f8bee..00000000
--- a/docs/SOURCE/tmwdox.sh
+++ /dev/null
@@ -1 +0,0 @@
-cd ../../src/ && doxygen ../docs/SOURCE/tmw.doxcfg
diff --git a/po/LINGUAS b/po/LINGUAS
new file mode 100644
index 00000000..4959c0de
--- /dev/null
+++ b/po/LINGUAS
@@ -0,0 +1,25 @@
+# Set of available languages.
+ar
+ca
+cs
+da
+de
+en_GB
+eo
+es
+fi
+fr
+he
+hr
+id
+it
+ja
+nl
+pl
+pt
+pt_BR
+ru
+sk
+sv
+th
+zh_CN
diff --git a/po/Makevars b/po/Makevars
new file mode 100644
index 00000000..76e72f50
--- /dev/null
+++ b/po/Makevars
@@ -0,0 +1,41 @@
+# Makefile variables for PO directory in any package using GNU gettext.
+
+# Usually the message domain is the same as the package name.
+DOMAIN = tmw
+
+# These two variables depend on the location of this directory.
+subdir = po
+top_builddir = ..
+
+# These options get passed to xgettext.
+XGETTEXT_OPTIONS = --keyword=_ --keyword=N_
+
+# This is the copyright holder that gets inserted into the header of the
+# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding
+# package. (Note that the msgstr strings, extracted from the package's
+# sources, belong to the copyright holder of the package.) Translators are
+# expected to transfer the copyright for their translations to this person
+# or entity, or to disclaim their copyright. The empty string stands for
+# the public domain; in this case the translators are expected to disclaim
+# their copyright.
+COPYRIGHT_HOLDER = The Mana World Development Team
+
+# This is the email address or URL to which the translators shall report
+# bugs in the untranslated strings:
+# - Strings which are not entire sentences, see the maintainer guidelines
+# in the GNU gettext documentation, section 'Preparing Strings'.
+# - Strings which use unclear terms or require additional context to be
+# understood.
+# - Strings which make invalid assumptions about notation of date, time or
+# money.
+# - Pluralisation problems.
+# - Incorrect English spelling.
+# - Incorrect formatting.
+# It can be your email address, or a mailing list address where translators
+# can write to without being subscribed, or the URL of a web page through
+# which the translators can contact you.
+MSGID_BUGS_ADDRESS =
+
+# This is the list of locale categories, beyond LC_MESSAGES, for which the
+# message catalogs shall be used. It is usually empty.
+EXTRA_LOCALE_CATEGORIES =
diff --git a/po/POTFILES.in b/po/POTFILES.in
new file mode 100644
index 00000000..4207012b
--- /dev/null
+++ b/po/POTFILES.in
@@ -0,0 +1,34 @@
+# List of source files which contain translatable strings.
+
+src/gui/buy.cpp
+src/gui/buysell.cpp
+src/gui/char_select.cpp
+src/gui/char_server.cpp
+src/gui/chat.cpp
+src/gui/confirm_dialog.cpp
+src/gui/connection.cpp
+src/gui/equipmentwindow.cpp
+src/gui/help.cpp
+src/gui/inventorywindow.cpp
+src/gui/item_amount.cpp
+src/gui/login.cpp
+src/gui/menuwindow.cpp
+src/gui/minimap.cpp
+src/gui/npclistdialog.cpp
+src/gui/npc_text.cpp
+src/gui/ok_dialog.cpp
+src/gui/popupmenu.cpp
+src/gui/register.cpp
+src/gui/sell.cpp
+src/gui/setup_audio.cpp
+src/gui/setup.cpp
+src/gui/setup_joystick.cpp
+src/gui/setup_keyboard.cpp
+src/gui/setup_players.cpp
+src/gui/setup_video.cpp
+src/gui/skill.cpp
+src/gui/status.cpp
+src/gui/trade.cpp
+src/gui/updatewindow.cpp
+src/resources/itemdb.cpp
+src/main.cpp
diff --git a/po/ar.po b/po/ar.po
new file mode 100644
index 00000000..0a19529e
--- /dev/null
+++ b/po/ar.po
@@ -0,0 +1,985 @@
+# Arabic translation for tmw
+# Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008
+# This file is distributed under the same license as the tmw package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: tmw\n"
+"Report-Msgid-Bugs-To: themanaworld-devel@lists.sourceforge.net\n"
+"POT-Creation-Date: 2009-01-08 22:10+0100\n"
+"PO-Revision-Date: 2008-07-16 18:28+0000\n"
+"Last-Translator: صقر بن عبدالله <Unknown>\n"
+"Language-Team: Arabic <ar@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-01-06 12:40+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#: src/gui/buy.cpp:43 src/gui/buy.cpp:61 src/gui/buysell.cpp:35
+msgid "Buy"
+msgstr "شراء"
+
+#: src/gui/buy.cpp:58 src/gui/buy.cpp:239 src/gui/sell.cpp:65
+#: src/gui/sell.cpp:259
+#, c-format
+msgid "Price: %d GP / Total: %d GP"
+msgstr "السعر: %d GP / الإجمالي: %d GP"
+
+#: src/gui/buy.cpp:62 src/gui/sell.cpp:69
+msgid "Quit"
+msgstr "مغادرة"
+
+#: src/gui/buy.cpp:63 src/gui/buy.cpp:206 src/gui/buy.cpp:224
+#: src/gui/inventorywindow.cpp:150 src/gui/inventorywindow.cpp:160
+#: src/gui/sell.cpp:70 src/gui/sell.cpp:230 src/gui/sell.cpp:244
+#: src/gui/trade.cpp:94 src/gui/trade.cpp:266
+#, c-format
+msgid "Description: %s"
+msgstr "الوصÙ: %s"
+
+#: src/gui/buy.cpp:64 src/gui/buy.cpp:208 src/gui/buy.cpp:225
+#: src/gui/inventorywindow.cpp:149 src/gui/inventorywindow.cpp:158
+#: src/gui/sell.cpp:71 src/gui/sell.cpp:232 src/gui/sell.cpp:245
+#, c-format
+msgid "Effect: %s"
+msgstr "التأثير: %s"
+
+#: src/gui/buysell.cpp:31
+#, fuzzy
+msgid "Shop"
+msgstr "إيقاÙ"
+
+#: src/gui/buysell.cpp:35 src/gui/sell.cpp:48 src/gui/sell.cpp:68
+msgid "Sell"
+msgstr "بيع"
+
+#: src/gui/buysell.cpp:35 src/gui/char_select.cpp:85
+#: src/gui/char_select.cpp:258 src/gui/char_server.cpp:60
+#: src/gui/connection.cpp:47 src/gui/item_amount.cpp:61 src/gui/login.cpp:52
+#: src/gui/npclistdialog.cpp:45 src/gui/register.cpp:76 src/gui/setup.cpp:58
+#: src/gui/trade.cpp:63 src/gui/updatewindow.cpp:118
+msgid "Cancel"
+msgstr "إلغاء"
+
+#: src/gui/char_select.cpp:63
+msgid "Confirm Character Delete"
+msgstr ""
+
+#: src/gui/char_select.cpp:64
+msgid "Are you sure you want to delete this character?"
+msgstr "هل أنت متأكّد من حذ٠هذه الشخصيّة؟"
+
+#: src/gui/char_select.cpp:81
+msgid "Select Character"
+msgstr "إنتقاء الشخصيّة"
+
+#: src/gui/char_select.cpp:84 src/gui/item_amount.cpp:60 src/gui/login.cpp:51
+#: src/gui/ok_dialog.cpp:37 src/gui/trade.cpp:62
+msgid "Ok"
+msgstr "مواÙÙ‚"
+
+#: src/gui/char_select.cpp:86
+msgid "New"
+msgstr "جديد"
+
+#: src/gui/char_select.cpp:87 src/gui/setup_players.cpp:220
+msgid "Delete"
+msgstr "حذÙ"
+
+#: src/gui/char_select.cpp:88
+msgid "Previous"
+msgstr "السّابق"
+
+#: src/gui/char_select.cpp:89
+msgid "Next"
+msgstr "التّالي"
+
+#: src/gui/char_select.cpp:91 src/gui/char_select.cpp:171
+#: src/gui/char_select.cpp:183 src/gui/inventorywindow.cpp:148
+#: src/gui/inventorywindow.cpp:156 src/gui/trade.cpp:92 src/gui/trade.cpp:264
+#, c-format
+msgid "Name: %s"
+msgstr "الاسم: %s"
+
+#: src/gui/char_select.cpp:92 src/gui/char_select.cpp:172
+#: src/gui/char_select.cpp:184 src/gui/status.cpp:51 src/gui/status.cpp:232
+#, c-format
+msgid "Level: %d"
+msgstr "المستوى: %d"
+
+#: src/gui/char_select.cpp:93 src/gui/char_select.cpp:173
+#: src/gui/char_select.cpp:185
+#, fuzzy, c-format
+msgid "Job Level: %d"
+msgstr "المستوى: %d"
+
+#: src/gui/char_select.cpp:94 src/gui/char_select.cpp:186
+#, c-format
+msgid "Money: %d"
+msgstr "النقود: %d"
+
+#: src/gui/char_select.cpp:174
+#, c-format
+msgid "Gold: %d"
+msgstr ""
+
+#: src/gui/char_select.cpp:243
+msgid "Create Character"
+msgstr "إنشاء شخصيّة"
+
+#: src/gui/char_select.cpp:250 src/gui/login.cpp:44 src/gui/register.cpp:65
+msgid "Name:"
+msgstr "الاسم:"
+
+#: src/gui/char_select.cpp:253
+msgid "Hair Color:"
+msgstr "لون الشعر:"
+
+#: src/gui/char_select.cpp:256
+msgid "Hair Style:"
+msgstr "قصّة الشعر:"
+
+#: src/gui/char_select.cpp:257
+msgid "Create"
+msgstr "إنشاء"
+
+#: src/gui/char_server.cpp:52
+#, fuzzy
+msgid "Select Server"
+msgstr "إنتقاء الشخصيّة"
+
+#: src/gui/char_server.cpp:59 src/gui/npclistdialog.cpp:44
+#: src/gui/npc_text.cpp:46
+msgid "OK"
+msgstr ""
+
+#: src/gui/chat.cpp:122
+msgid "Global announcement:"
+msgstr ""
+
+#: src/gui/chat.cpp:125
+#, c-format
+msgid "Global announcement from %s:"
+msgstr ""
+
+#: src/gui/chat.cpp:140 src/gui/login.cpp:46 src/gui/register.cpp:68
+msgid "Server:"
+msgstr "الخادوم:"
+
+#: src/gui/chat.cpp:146
+#, c-format
+msgid "%s whispers:"
+msgstr ""
+
+#: src/gui/chat.cpp:283
+#, c-format
+msgid "Whispering to %s: %s"
+msgstr ""
+
+#: src/gui/chat.cpp:356
+msgid "Unknown command"
+msgstr ""
+
+#: src/gui/chat.cpp:366
+msgid "Trade failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:369
+msgid "Emote failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:372
+msgid "Sit failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:375
+msgid "Chat creating failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:378
+msgid "Could not join party!"
+msgstr ""
+
+#: src/gui/chat.cpp:381
+msgid "Cannot shout!"
+msgstr ""
+
+#: src/gui/chat.cpp:389
+msgid "You have not yet reached a high enough lvl!"
+msgstr ""
+
+#: src/gui/chat.cpp:392
+msgid "Insufficient HP!"
+msgstr ""
+
+#: src/gui/chat.cpp:395
+msgid "Insufficient SP!"
+msgstr ""
+
+#: src/gui/chat.cpp:398
+msgid "You have no memos!"
+msgstr ""
+
+#: src/gui/chat.cpp:401
+msgid "You cannot do that right now!"
+msgstr ""
+
+#: src/gui/chat.cpp:404
+msgid "Seems you need more Zeny... ;-)"
+msgstr ""
+
+#: src/gui/chat.cpp:407
+msgid "You cannot use this skill with that kind of weapon!"
+msgstr ""
+
+#: src/gui/chat.cpp:410
+msgid "You need another red gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:413
+msgid "You need another blue gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:416
+msgid "You're carrying to much to do this!"
+msgstr ""
+
+#: src/gui/chat.cpp:419
+msgid "Huh? What's that?"
+msgstr ""
+
+#: src/gui/chat.cpp:425
+msgid "Warp failed..."
+msgstr ""
+
+#: src/gui/chat.cpp:428
+msgid "Could not steal anything..."
+msgstr ""
+
+#: src/gui/chat.cpp:431
+msgid "Poison had no effect..."
+msgstr ""
+
+#: src/gui/chat.cpp:496
+msgid "-- Help --"
+msgstr ""
+
+#: src/gui/chat.cpp:499
+msgid "/announce: Global announcement (GM only)"
+msgstr ""
+
+#: src/gui/chat.cpp:500
+msgid "/clear: Clears this window"
+msgstr ""
+
+#: src/gui/chat.cpp:501
+msgid "/help: Display this help"
+msgstr ""
+
+#: src/gui/chat.cpp:502
+msgid "/where: Display map name"
+msgstr ""
+
+#: src/gui/chat.cpp:503
+msgid "/whisper <nick> <message>: Sends a private <message> to <nick>"
+msgstr ""
+
+#: src/gui/chat.cpp:505
+msgid "/w <nick> <message>: Short form for /whisper"
+msgstr ""
+
+#: src/gui/chat.cpp:506
+msgid "/who: Display number of online users"
+msgstr ""
+
+#: src/gui/chat.cpp:507
+msgid "For more information, type /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:512
+msgid "Command: /announce <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:513
+msgid "*** only available to a GM ***"
+msgstr ""
+
+#: src/gui/chat.cpp:514
+msgid "This command sends the message <msg> to all players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:520
+msgid "Command: /clear"
+msgstr ""
+
+#: src/gui/chat.cpp:521
+msgid "This command clears the chat log of previous chat."
+msgstr ""
+
+#: src/gui/chat.cpp:527
+msgid "Command: /help"
+msgstr ""
+
+#: src/gui/chat.cpp:528
+msgid "This command displays a list of all commands available."
+msgstr ""
+
+#: src/gui/chat.cpp:530
+msgid "Command: /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:531
+msgid "This command displays help on <command>."
+msgstr ""
+
+#: src/gui/chat.cpp:536
+msgid "Command: /where"
+msgstr ""
+
+#: src/gui/chat.cpp:537
+msgid "This command displays the name of the current map."
+msgstr ""
+
+#: src/gui/chat.cpp:543
+msgid "Command: /whisper <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:544
+msgid "Command: /w <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:545
+msgid "This command sends the message <msg> to <nick>."
+msgstr ""
+
+#: src/gui/chat.cpp:547
+msgid "If the <nick> has spaces in it, enclose it in double quotes (\")."
+msgstr ""
+
+#: src/gui/chat.cpp:553
+msgid "Command: /who"
+msgstr ""
+
+#: src/gui/chat.cpp:554
+msgid "This command displays the number of players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:558
+msgid "Unknown command."
+msgstr ""
+
+#: src/gui/chat.cpp:559
+msgid "Type /help for a list of commands."
+msgstr ""
+
+#: src/gui/confirm_dialog.cpp:35
+msgid "Yes"
+msgstr "نعم"
+
+#: src/gui/confirm_dialog.cpp:36
+msgid "No"
+msgstr "لا"
+
+#: src/gui/connection.cpp:49 src/gui/updatewindow.cpp:116
+msgid "Connecting..."
+msgstr "جار٠الاتّصال..."
+
+#: src/gui/equipmentwindow.cpp:38 src/gui/menuwindow.cpp:62
+msgid "Equipment"
+msgstr "العتاد"
+
+#: src/gui/help.cpp:33
+msgid "Help"
+msgstr ""
+
+#: src/gui/help.cpp:41
+msgid "Close"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:46 src/gui/menuwindow.cpp:63
+msgid "Inventory"
+msgstr "الجردة"
+
+#: src/gui/inventorywindow.cpp:56 src/gui/inventorywindow.cpp:232
+#: src/gui/skill.cpp:134
+msgid "Use"
+msgstr "استخدام"
+
+#: src/gui/inventorywindow.cpp:57
+msgid "Drop"
+msgstr "إسقاط"
+
+#: src/gui/inventorywindow.cpp:99
+#, c-format
+msgid "Weight: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:104
+#, c-format
+msgid "Slots used: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:225
+msgid "Unequip"
+msgstr "تجريد من العتاد"
+
+#: src/gui/inventorywindow.cpp:228
+msgid "Equip"
+msgstr "استعمال العتاد"
+
+#: src/gui/item_amount.cpp:76
+msgid "Select amount of items to trade."
+msgstr "انتقاء كمّيّة من المواد للمتاجرة بها."
+
+#: src/gui/item_amount.cpp:80
+msgid "Select amount of items to drop."
+msgstr "انتقاء كمّيّة من المواد لإسقاطها."
+
+#: src/gui/login.cpp:42
+msgid "Login"
+msgstr "ولوج"
+
+#: src/gui/login.cpp:45 src/gui/register.cpp:66
+msgid "Password:"
+msgstr "كلمة السرّ:"
+
+#: src/gui/login.cpp:50
+msgid "Remember Username"
+msgstr ""
+
+#: src/gui/login.cpp:53 src/gui/register.cpp:75
+msgid "Register"
+msgstr "تسجيل"
+
+#: src/gui/menuwindow.cpp:61
+msgid "Status"
+msgstr "الحالة"
+
+#: src/gui/menuwindow.cpp:64 src/gui/skill.cpp:119
+msgid "Skills"
+msgstr "مهارات"
+
+#: src/gui/menuwindow.cpp:65
+msgid "Shortcut"
+msgstr "اختصار"
+
+#: src/gui/menuwindow.cpp:66 src/main.cpp:716
+msgid "Setup"
+msgstr "تثبيت"
+
+#: src/gui/minimap.cpp:34
+msgid "MiniMap"
+msgstr "خارطة صغيرة"
+
+#: src/gui/npclistdialog.cpp:35 src/gui/npc_text.cpp:35
+msgid "NPC"
+msgstr "NPC"
+
+#: src/gui/popupmenu.cpp:81
+#, c-format
+msgid "@@trade|Trade With %s@@"
+msgstr "@@تجارة|متاجرة مع %s@@"
+
+#: src/gui/popupmenu.cpp:83
+#, c-format
+msgid "@@attack|Attack %s@@"
+msgstr "@@مهاجمة|هاجم %s@@"
+
+#: src/gui/popupmenu.cpp:114
+msgid "@@talk|Talk To NPC@@"
+msgstr "@@محادثة|تحدّث مع NPC@@"
+
+#: src/gui/popupmenu.cpp:124 src/gui/popupmenu.cpp:140
+#: src/gui/popupmenu.cpp:293
+msgid "@@cancel|Cancel@@"
+msgstr "@@إلغاء|إلغاء@@"
+
+#: src/gui/popupmenu.cpp:136
+#, c-format
+msgid "@@pickup|Pick Up %s@@"
+msgstr "@@اقتطاÙ|اقتطا٠%s@@"
+
+#: src/gui/popupmenu.cpp:283
+#, fuzzy
+msgid "@@use|Unequip@@"
+msgstr "@@استخدام|استخدام العتاد@@"
+
+#: src/gui/popupmenu.cpp:285
+msgid "@@use|Equip@@"
+msgstr "@@استخدام|استخدام العتاد@@"
+
+#: src/gui/popupmenu.cpp:288
+msgid "@@use|Use@@"
+msgstr "@@استخدم|استخدم@@"
+
+#: src/gui/popupmenu.cpp:290
+msgid "@@drop|Drop@@"
+msgstr "@@إسقاط|إسقاط@@"
+
+#: src/gui/popupmenu.cpp:291
+msgid "@@description|Description@@"
+msgstr "@@الوصÙ|الوصÙ@@"
+
+#: src/gui/register.cpp:67
+msgid "Confirm:"
+msgstr "تأكيد:"
+
+#: src/gui/register.cpp:73
+msgid "Male"
+msgstr ""
+
+#: src/gui/register.cpp:74
+msgid "Female"
+msgstr ""
+
+#: src/gui/register.cpp:176
+#, c-format
+msgid "The username needs to be at least %d characters long."
+msgstr "يجب أن يكون طول اسم المستخدم على الأقل %d محارÙ."
+
+#: src/gui/register.cpp:184
+#, c-format
+msgid "The username needs to be less than %d characters long."
+msgstr "يجب أن يكون طول اسم المستخدم أقل من %d محارÙ."
+
+#: src/gui/register.cpp:192
+#, c-format
+msgid "The password needs to be at least %d characters long."
+msgstr "يجب أن تكون طول كلمة السرّ على الأقل %d محارÙ."
+
+#: src/gui/register.cpp:200
+#, c-format
+msgid "The password needs to be less than %d characters long."
+msgstr "يجب أن يكون طول كلمة السرّ أقل من %d محارÙ."
+
+#: src/gui/register.cpp:207
+msgid "Passwords do not match."
+msgstr "كلمات السرّ غير متطابقة."
+
+#: src/gui/register.cpp:227 src/main.cpp:945
+msgid "Error"
+msgstr "خطأ"
+
+#: src/gui/setup_audio.cpp:40
+msgid "Sound"
+msgstr "صوت"
+
+#: src/gui/setup_audio.cpp:46
+msgid "Sfx volume"
+msgstr "حجم صوت المؤثرّات"
+
+#: src/gui/setup_audio.cpp:47
+msgid "Music volume"
+msgstr "حجم صوت الموسيقا"
+
+#: src/gui/setup.cpp:58
+msgid "Apply"
+msgstr "تطبيق"
+
+#: src/gui/setup.cpp:58
+msgid "Reset Windows"
+msgstr "تصÙير النواÙØ°"
+
+#: src/gui/setup.cpp:79
+msgid "Video"
+msgstr "مرئية"
+
+#: src/gui/setup.cpp:83
+msgid "Audio"
+msgstr "سمعيّ"
+
+#: src/gui/setup.cpp:87
+msgid "Joystick"
+msgstr "عصا الألعاب"
+
+#: src/gui/setup.cpp:91
+msgid "Keyboard"
+msgstr ""
+
+#: src/gui/setup.cpp:95
+msgid "Players"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:36 src/gui/setup_joystick.cpp:70
+msgid "Press the button to start calibration"
+msgstr "إضغط على الزرّ لبدأ المعايرة"
+
+#: src/gui/setup_joystick.cpp:37 src/gui/setup_joystick.cpp:68
+msgid "Calibrate"
+msgstr "معايرة"
+
+#: src/gui/setup_joystick.cpp:38
+msgid "Enable joystick"
+msgstr "تÙعيل عصا الألعاب"
+
+#: src/gui/setup_joystick.cpp:73
+msgid "Stop"
+msgstr "إيقاÙ"
+
+#: src/gui/setup_joystick.cpp:74
+msgid "Rotate the stick"
+msgstr "تدوير العصا"
+
+#: src/gui/setup_keyboard.cpp:88
+msgid "Assign"
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:94
+#, fuzzy
+msgid "Default"
+msgstr "حذÙ"
+
+#: src/gui/setup_keyboard.cpp:115
+msgid "Key Conflict(s) Detected."
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:116
+msgid "Resolve them, or gameplay may result in strange behaviour."
+msgstr ""
+
+#: src/gui/setup_players.cpp:53
+#, fuzzy
+msgid "Name"
+msgstr "الاسم:"
+
+#: src/gui/setup_players.cpp:54
+msgid "Relation"
+msgstr ""
+
+#: src/gui/setup_players.cpp:58
+msgid "Neutral"
+msgstr ""
+
+#: src/gui/setup_players.cpp:59
+msgid "Friend"
+msgstr ""
+
+#: src/gui/setup_players.cpp:60
+msgid "Disregarded"
+msgstr ""
+
+#: src/gui/setup_players.cpp:61
+msgid "Ignored"
+msgstr ""
+
+#: src/gui/setup_players.cpp:214
+msgid "Save player list"
+msgstr ""
+
+#: src/gui/setup_players.cpp:216
+msgid "Allow trading"
+msgstr ""
+
+#: src/gui/setup_players.cpp:218
+msgid "Allow whispers"
+msgstr ""
+
+#: src/gui/setup_players.cpp:245
+msgid "When ignoring:"
+msgstr ""
+
+#: src/gui/setup_video.cpp:112
+msgid "Full screen"
+msgstr "ملء الشاشة"
+
+#: src/gui/setup_video.cpp:113
+msgid "OpenGL"
+msgstr "OpenGL"
+
+#: src/gui/setup_video.cpp:114
+msgid "Custom cursor"
+msgstr "مؤشّر مخصّص"
+
+#: src/gui/setup_video.cpp:116
+msgid "FPS Limit:"
+msgstr "حدّ FPS:"
+
+#: src/gui/setup_video.cpp:135
+msgid "Gui opacity"
+msgstr "عتمة واجهة المستخدم"
+
+#: src/gui/setup_video.cpp:192
+msgid "Scroll radius"
+msgstr "نص٠قطر اللÙÙ‘"
+
+#: src/gui/setup_video.cpp:200
+msgid "Scroll laziness"
+msgstr "كسل اللÙÙ‘"
+
+#: src/gui/setup_video.cpp:208
+msgid "Ambient FX"
+msgstr "مؤثّرات محيطة"
+
+#: src/gui/setup_video.cpp:215 src/gui/setup_video.cpp:412
+msgid "off"
+msgstr "واقÙ"
+
+#: src/gui/setup_video.cpp:218 src/gui/setup_video.cpp:234
+#: src/gui/setup_video.cpp:415 src/gui/setup_video.cpp:429
+msgid "low"
+msgstr "منخÙض"
+
+#: src/gui/setup_video.cpp:221 src/gui/setup_video.cpp:240
+#: src/gui/setup_video.cpp:418 src/gui/setup_video.cpp:435
+msgid "high"
+msgstr "مرتÙع"
+
+#: src/gui/setup_video.cpp:227
+msgid "Particle Detail"
+msgstr ""
+
+#: src/gui/setup_video.cpp:237 src/gui/setup_video.cpp:432
+msgid "medium"
+msgstr ""
+
+#: src/gui/setup_video.cpp:243 src/gui/setup_video.cpp:438
+msgid "max"
+msgstr ""
+
+#: src/gui/setup_video.cpp:309
+msgid "Switching to full screen"
+msgstr "جار٠ملء الشاشة"
+
+#: src/gui/setup_video.cpp:310
+msgid "Restart needed for changes to take effect."
+msgstr "يجب إعادة التشغيل لتÙعّل التغييرات."
+
+#: src/gui/setup_video.cpp:322
+msgid "Changing OpenGL"
+msgstr "تغيير OpenGL"
+
+#: src/gui/setup_video.cpp:323
+msgid "Applying change to OpenGL requires restart."
+msgstr "تطبيق التغيير على OpenGL يحتاج لإعادة تشغيل."
+
+#: src/gui/skill.cpp:79
+msgid "Mystery Skill"
+msgstr ""
+
+#: src/gui/skill.cpp:132 src/gui/skill.cpp:188
+#, c-format
+msgid "Skill points: %d"
+msgstr ""
+
+#: src/gui/skill.cpp:133
+msgid "Up"
+msgstr ""
+
+#: src/gui/status.cpp:52 src/gui/status.cpp:235
+#, fuzzy, c-format
+msgid "Job: %d"
+msgstr "المستوى: %d"
+
+#: src/gui/status.cpp:53 src/gui/status.cpp:238
+#, fuzzy, c-format
+msgid "Money: %d GP"
+msgstr "النقود: %d"
+
+#: src/gui/status.cpp:127
+#, fuzzy
+msgid "Stats"
+msgstr "الحالة"
+
+#: src/gui/status.cpp:128
+msgid "Total"
+msgstr ""
+
+#: src/gui/status.cpp:129
+msgid "Cost"
+msgstr ""
+
+#: src/gui/status.cpp:132
+#, fuzzy
+msgid "Attack:"
+msgstr "مهاجمة %+d"
+
+#: src/gui/status.cpp:133
+#, fuzzy
+msgid "Defense:"
+msgstr "دÙاع %+d"
+
+#: src/gui/status.cpp:134
+#, fuzzy
+msgid "M.Attack:"
+msgstr "مهاجمة %+d"
+
+#: src/gui/status.cpp:135
+#, fuzzy
+msgid "M.Defense:"
+msgstr "دÙاع %+d"
+
+#: src/gui/status.cpp:136
+#, c-format
+msgid "% Accuracy:"
+msgstr ""
+
+#: src/gui/status.cpp:137
+#, c-format
+msgid "% Evade:"
+msgstr ""
+
+#: src/gui/status.cpp:138
+msgid "% Reflex:"
+msgstr ""
+
+#: src/gui/status.cpp:282
+#, fuzzy
+msgid "Strength"
+msgstr "القوّة:"
+
+#: src/gui/status.cpp:283
+#, fuzzy
+msgid "Agility"
+msgstr "Ø®Ùّة الحركة:"
+
+#: src/gui/status.cpp:284
+#, fuzzy
+msgid "Vitality"
+msgstr "نشاط:"
+
+#: src/gui/status.cpp:285
+#, fuzzy
+msgid "Intelligence"
+msgstr "ذكاء:"
+
+#: src/gui/status.cpp:286
+#, fuzzy
+msgid "Dexterity"
+msgstr "المهارة:"
+
+#: src/gui/status.cpp:287
+msgid "Luck"
+msgstr ""
+
+#: src/gui/status.cpp:305
+#, c-format
+msgid "Remaining Status Points: %d"
+msgstr ""
+
+#: src/gui/trade.cpp:61
+msgid "Add"
+msgstr "إضاÙØ©"
+
+#: src/gui/trade.cpp:64
+msgid "Trade"
+msgstr ""
+
+#: src/gui/trade.cpp:80 src/gui/trade.cpp:156 src/gui/trade.cpp:204
+#, c-format
+msgid "You get %d GP."
+msgstr "أنت تحصل على %d GP."
+
+#: src/gui/trade.cpp:81
+msgid "You give:"
+msgstr "أنت تقدّم:"
+
+#: src/gui/trade.cpp:283
+msgid "Failed adding item. You can not overlap one kind of item on the window."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:93
+msgid "Updating..."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:119
+msgid "Play"
+msgstr ""
+
+#: src/gui/updatewindow.cpp:525
+msgid "Completed"
+msgstr ""
+
+#: src/resources/itemdb.cpp:99
+msgid "Unnamed"
+msgstr ""
+
+#: src/main.cpp:769
+msgid "Got disconnected from server!"
+msgstr ""
+
+#: src/main.cpp:956
+#, fuzzy
+msgid "Connecting to map server..."
+msgstr "جار٠الاتّصال..."
+
+#: src/main.cpp:964
+msgid "Connecting to character server..."
+msgstr ""
+
+#: src/main.cpp:972
+msgid "Connecting to account server..."
+msgstr ""
+
+#~ msgid "Unregister"
+#~ msgstr "إلغاء التسجيل"
+
+#~ msgid "Willpower:"
+#~ msgstr "قوّة الذات:"
+
+#~ msgid "Please distribute %d points"
+#~ msgstr "رجاء أن توزّع %d نقطة"
+
+#~ msgid "Your name needs to be at least 4 characters."
+#~ msgstr "يجب أن يكون طول اسمك على الأقل 4 محارÙ."
+
+#~ msgid "Character stats OK"
+#~ msgstr "إحصائيات الشخصيّة جيّدة"
+
+#~ msgid "Please remove %d points"
+#~ msgstr "رجاء حذ٠%d نقطة"
+
+#~ msgid "Split"
+#~ msgstr "قسم"
+
+#~ msgid "Select amount of items to split."
+#~ msgstr "انتقاء كمّيّة من المواد لقسمها."
+
+#~ msgid "@@split|Split@@"
+#~ msgstr "@@قسم|قسم@@"
+
+#~ msgid "Switch server"
+#~ msgstr "تبديل الخادوم"
+
+#~ msgid "Switch character"
+#~ msgstr "تبديل الشخصيّة"
+
+#~ msgid "Email:"
+#~ msgstr "البريد الإلكترونيّ:"
+
+#~ msgid "Choose your Mana World Server"
+#~ msgstr "اختار خادومك لـMana World"
+
+#~ msgid "Port:"
+#~ msgstr "المنÙØ°:"
+
+#~ msgid "Please type both the address and the port of a server."
+#~ msgstr "رجاء طباعة عنوان ومنÙØ° الخادوم."
+
+#~ msgid "Propose trade"
+#~ msgstr "اقتراح متاجرة"
+
+#~ msgid "Confirm trade"
+#~ msgstr "تأكيد متاجرة"
+
+#~ msgid "Change"
+#~ msgstr "تغيير"
+
+#~ msgid "HP %+d"
+#~ msgstr "HP %+d"
+
+#~ msgid "MP %+d"
+#~ msgstr "MP %+d"
+
+#~ msgid "Confirm"
+#~ msgstr "تأكيد"
+
+#~ msgid "Charisma:"
+#~ msgstr "جاذبيّة:"
+
+#~ msgid "Total Weight: %d - Maximum Weight: %d"
+#~ msgstr "الوزن الإجماليّ: %d - وزن الحدّ الأقصى: %d"
+
+#~ msgid "Keep"
+#~ msgstr "ترك"
diff --git a/po/ca.po b/po/ca.po
new file mode 100644
index 00000000..7325a252
--- /dev/null
+++ b/po/ca.po
@@ -0,0 +1,901 @@
+# Catalan translation for tmw
+# Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008
+# This file is distributed under the same license as the tmw package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: tmw\n"
+"Report-Msgid-Bugs-To: themanaworld-devel@lists.sourceforge.net\n"
+"POT-Creation-Date: 2009-01-08 22:10+0100\n"
+"PO-Revision-Date: 2008-07-03 17:21+0000\n"
+"Last-Translator: Habari <thomas.becerril@gmail.com>\n"
+"Language-Team: Catalan <ca@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-01-06 12:40+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#: src/gui/buy.cpp:43 src/gui/buy.cpp:61 src/gui/buysell.cpp:35
+msgid "Buy"
+msgstr ""
+
+#: src/gui/buy.cpp:58 src/gui/buy.cpp:239 src/gui/sell.cpp:65
+#: src/gui/sell.cpp:259
+#, c-format
+msgid "Price: %d GP / Total: %d GP"
+msgstr "preu %d GP / total %d GP"
+
+#: src/gui/buy.cpp:62 src/gui/sell.cpp:69
+msgid "Quit"
+msgstr "sortir"
+
+#: src/gui/buy.cpp:63 src/gui/buy.cpp:206 src/gui/buy.cpp:224
+#: src/gui/inventorywindow.cpp:150 src/gui/inventorywindow.cpp:160
+#: src/gui/sell.cpp:70 src/gui/sell.cpp:230 src/gui/sell.cpp:244
+#: src/gui/trade.cpp:94 src/gui/trade.cpp:266
+#, c-format
+msgid "Description: %s"
+msgstr ""
+
+#: src/gui/buy.cpp:64 src/gui/buy.cpp:208 src/gui/buy.cpp:225
+#: src/gui/inventorywindow.cpp:149 src/gui/inventorywindow.cpp:158
+#: src/gui/sell.cpp:71 src/gui/sell.cpp:232 src/gui/sell.cpp:245
+#, c-format
+msgid "Effect: %s"
+msgstr ""
+
+#: src/gui/buysell.cpp:31
+msgid "Shop"
+msgstr ""
+
+#: src/gui/buysell.cpp:35 src/gui/sell.cpp:48 src/gui/sell.cpp:68
+msgid "Sell"
+msgstr ""
+
+#: src/gui/buysell.cpp:35 src/gui/char_select.cpp:85
+#: src/gui/char_select.cpp:258 src/gui/char_server.cpp:60
+#: src/gui/connection.cpp:47 src/gui/item_amount.cpp:61 src/gui/login.cpp:52
+#: src/gui/npclistdialog.cpp:45 src/gui/register.cpp:76 src/gui/setup.cpp:58
+#: src/gui/trade.cpp:63 src/gui/updatewindow.cpp:118
+msgid "Cancel"
+msgstr ""
+
+#: src/gui/char_select.cpp:63
+msgid "Confirm Character Delete"
+msgstr ""
+
+#: src/gui/char_select.cpp:64
+msgid "Are you sure you want to delete this character?"
+msgstr ""
+
+#: src/gui/char_select.cpp:81
+msgid "Select Character"
+msgstr ""
+
+#: src/gui/char_select.cpp:84 src/gui/item_amount.cpp:60 src/gui/login.cpp:51
+#: src/gui/ok_dialog.cpp:37 src/gui/trade.cpp:62
+msgid "Ok"
+msgstr "ok"
+
+#: src/gui/char_select.cpp:86
+msgid "New"
+msgstr ""
+
+#: src/gui/char_select.cpp:87 src/gui/setup_players.cpp:220
+msgid "Delete"
+msgstr ""
+
+#: src/gui/char_select.cpp:88
+msgid "Previous"
+msgstr ""
+
+#: src/gui/char_select.cpp:89
+msgid "Next"
+msgstr ""
+
+#: src/gui/char_select.cpp:91 src/gui/char_select.cpp:171
+#: src/gui/char_select.cpp:183 src/gui/inventorywindow.cpp:148
+#: src/gui/inventorywindow.cpp:156 src/gui/trade.cpp:92 src/gui/trade.cpp:264
+#, c-format
+msgid "Name: %s"
+msgstr ""
+
+#: src/gui/char_select.cpp:92 src/gui/char_select.cpp:172
+#: src/gui/char_select.cpp:184 src/gui/status.cpp:51 src/gui/status.cpp:232
+#, c-format
+msgid "Level: %d"
+msgstr ""
+
+#: src/gui/char_select.cpp:93 src/gui/char_select.cpp:173
+#: src/gui/char_select.cpp:185
+#, c-format
+msgid "Job Level: %d"
+msgstr ""
+
+#: src/gui/char_select.cpp:94 src/gui/char_select.cpp:186
+#, c-format
+msgid "Money: %d"
+msgstr ""
+
+#: src/gui/char_select.cpp:174
+#, c-format
+msgid "Gold: %d"
+msgstr ""
+
+#: src/gui/char_select.cpp:243
+msgid "Create Character"
+msgstr ""
+
+#: src/gui/char_select.cpp:250 src/gui/login.cpp:44 src/gui/register.cpp:65
+msgid "Name:"
+msgstr "nom"
+
+#: src/gui/char_select.cpp:253
+msgid "Hair Color:"
+msgstr ""
+
+#: src/gui/char_select.cpp:256
+msgid "Hair Style:"
+msgstr ""
+
+#: src/gui/char_select.cpp:257
+msgid "Create"
+msgstr ""
+
+#: src/gui/char_server.cpp:52
+msgid "Select Server"
+msgstr ""
+
+#: src/gui/char_server.cpp:59 src/gui/npclistdialog.cpp:44
+#: src/gui/npc_text.cpp:46
+msgid "OK"
+msgstr ""
+
+#: src/gui/chat.cpp:122
+msgid "Global announcement:"
+msgstr ""
+
+#: src/gui/chat.cpp:125
+#, c-format
+msgid "Global announcement from %s:"
+msgstr ""
+
+#: src/gui/chat.cpp:140 src/gui/login.cpp:46 src/gui/register.cpp:68
+msgid "Server:"
+msgstr ""
+
+#: src/gui/chat.cpp:146
+#, c-format
+msgid "%s whispers:"
+msgstr ""
+
+#: src/gui/chat.cpp:283
+#, c-format
+msgid "Whispering to %s: %s"
+msgstr ""
+
+#: src/gui/chat.cpp:356
+msgid "Unknown command"
+msgstr ""
+
+#: src/gui/chat.cpp:366
+msgid "Trade failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:369
+msgid "Emote failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:372
+msgid "Sit failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:375
+msgid "Chat creating failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:378
+msgid "Could not join party!"
+msgstr ""
+
+#: src/gui/chat.cpp:381
+msgid "Cannot shout!"
+msgstr ""
+
+#: src/gui/chat.cpp:389
+msgid "You have not yet reached a high enough lvl!"
+msgstr ""
+
+#: src/gui/chat.cpp:392
+msgid "Insufficient HP!"
+msgstr ""
+
+#: src/gui/chat.cpp:395
+msgid "Insufficient SP!"
+msgstr ""
+
+#: src/gui/chat.cpp:398
+msgid "You have no memos!"
+msgstr ""
+
+#: src/gui/chat.cpp:401
+msgid "You cannot do that right now!"
+msgstr ""
+
+#: src/gui/chat.cpp:404
+msgid "Seems you need more Zeny... ;-)"
+msgstr ""
+
+#: src/gui/chat.cpp:407
+msgid "You cannot use this skill with that kind of weapon!"
+msgstr ""
+
+#: src/gui/chat.cpp:410
+msgid "You need another red gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:413
+msgid "You need another blue gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:416
+msgid "You're carrying to much to do this!"
+msgstr ""
+
+#: src/gui/chat.cpp:419
+msgid "Huh? What's that?"
+msgstr ""
+
+#: src/gui/chat.cpp:425
+msgid "Warp failed..."
+msgstr ""
+
+#: src/gui/chat.cpp:428
+msgid "Could not steal anything..."
+msgstr ""
+
+#: src/gui/chat.cpp:431
+msgid "Poison had no effect..."
+msgstr ""
+
+#: src/gui/chat.cpp:496
+msgid "-- Help --"
+msgstr ""
+
+#: src/gui/chat.cpp:499
+msgid "/announce: Global announcement (GM only)"
+msgstr ""
+
+#: src/gui/chat.cpp:500
+msgid "/clear: Clears this window"
+msgstr ""
+
+#: src/gui/chat.cpp:501
+msgid "/help: Display this help"
+msgstr ""
+
+#: src/gui/chat.cpp:502
+msgid "/where: Display map name"
+msgstr ""
+
+#: src/gui/chat.cpp:503
+msgid "/whisper <nick> <message>: Sends a private <message> to <nick>"
+msgstr ""
+
+#: src/gui/chat.cpp:505
+msgid "/w <nick> <message>: Short form for /whisper"
+msgstr ""
+
+#: src/gui/chat.cpp:506
+msgid "/who: Display number of online users"
+msgstr ""
+
+#: src/gui/chat.cpp:507
+msgid "For more information, type /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:512
+msgid "Command: /announce <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:513
+msgid "*** only available to a GM ***"
+msgstr ""
+
+#: src/gui/chat.cpp:514
+msgid "This command sends the message <msg> to all players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:520
+msgid "Command: /clear"
+msgstr ""
+
+#: src/gui/chat.cpp:521
+msgid "This command clears the chat log of previous chat."
+msgstr ""
+
+#: src/gui/chat.cpp:527
+msgid "Command: /help"
+msgstr ""
+
+#: src/gui/chat.cpp:528
+msgid "This command displays a list of all commands available."
+msgstr ""
+
+#: src/gui/chat.cpp:530
+msgid "Command: /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:531
+msgid "This command displays help on <command>."
+msgstr ""
+
+#: src/gui/chat.cpp:536
+msgid "Command: /where"
+msgstr ""
+
+#: src/gui/chat.cpp:537
+msgid "This command displays the name of the current map."
+msgstr ""
+
+#: src/gui/chat.cpp:543
+msgid "Command: /whisper <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:544
+msgid "Command: /w <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:545
+msgid "This command sends the message <msg> to <nick>."
+msgstr ""
+
+#: src/gui/chat.cpp:547
+msgid "If the <nick> has spaces in it, enclose it in double quotes (\")."
+msgstr ""
+
+#: src/gui/chat.cpp:553
+msgid "Command: /who"
+msgstr ""
+
+#: src/gui/chat.cpp:554
+msgid "This command displays the number of players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:558
+msgid "Unknown command."
+msgstr ""
+
+#: src/gui/chat.cpp:559
+msgid "Type /help for a list of commands."
+msgstr ""
+
+#: src/gui/confirm_dialog.cpp:35
+msgid "Yes"
+msgstr "si"
+
+#: src/gui/confirm_dialog.cpp:36
+msgid "No"
+msgstr "no"
+
+#: src/gui/connection.cpp:49 src/gui/updatewindow.cpp:116
+msgid "Connecting..."
+msgstr ""
+
+#: src/gui/equipmentwindow.cpp:38 src/gui/menuwindow.cpp:62
+msgid "Equipment"
+msgstr ""
+
+#: src/gui/help.cpp:33
+msgid "Help"
+msgstr ""
+
+#: src/gui/help.cpp:41
+msgid "Close"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:46 src/gui/menuwindow.cpp:63
+msgid "Inventory"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:56 src/gui/inventorywindow.cpp:232
+#: src/gui/skill.cpp:134
+msgid "Use"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:57
+msgid "Drop"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:99
+#, c-format
+msgid "Weight: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:104
+#, c-format
+msgid "Slots used: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:225
+msgid "Unequip"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:228
+msgid "Equip"
+msgstr ""
+
+#: src/gui/item_amount.cpp:76
+msgid "Select amount of items to trade."
+msgstr ""
+
+#: src/gui/item_amount.cpp:80
+msgid "Select amount of items to drop."
+msgstr ""
+
+#: src/gui/login.cpp:42
+msgid "Login"
+msgstr ""
+
+#: src/gui/login.cpp:45 src/gui/register.cpp:66
+msgid "Password:"
+msgstr ""
+
+#: src/gui/login.cpp:50
+msgid "Remember Username"
+msgstr ""
+
+#: src/gui/login.cpp:53 src/gui/register.cpp:75
+msgid "Register"
+msgstr ""
+
+#: src/gui/menuwindow.cpp:61
+msgid "Status"
+msgstr ""
+
+#: src/gui/menuwindow.cpp:64 src/gui/skill.cpp:119
+msgid "Skills"
+msgstr ""
+
+#: src/gui/menuwindow.cpp:65
+msgid "Shortcut"
+msgstr ""
+
+#: src/gui/menuwindow.cpp:66 src/main.cpp:716
+msgid "Setup"
+msgstr ""
+
+#: src/gui/minimap.cpp:34
+msgid "MiniMap"
+msgstr ""
+
+#: src/gui/npclistdialog.cpp:35 src/gui/npc_text.cpp:35
+msgid "NPC"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:81
+#, c-format
+msgid "@@trade|Trade With %s@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:83
+#, c-format
+msgid "@@attack|Attack %s@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:114
+msgid "@@talk|Talk To NPC@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:124 src/gui/popupmenu.cpp:140
+#: src/gui/popupmenu.cpp:293
+msgid "@@cancel|Cancel@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:136
+#, c-format
+msgid "@@pickup|Pick Up %s@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:283
+msgid "@@use|Unequip@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:285
+msgid "@@use|Equip@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:288
+msgid "@@use|Use@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:290
+msgid "@@drop|Drop@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:291
+msgid "@@description|Description@@"
+msgstr ""
+
+#: src/gui/register.cpp:67
+msgid "Confirm:"
+msgstr ""
+
+#: src/gui/register.cpp:73
+msgid "Male"
+msgstr ""
+
+#: src/gui/register.cpp:74
+msgid "Female"
+msgstr ""
+
+#: src/gui/register.cpp:176
+#, c-format
+msgid "The username needs to be at least %d characters long."
+msgstr ""
+
+#: src/gui/register.cpp:184
+#, c-format
+msgid "The username needs to be less than %d characters long."
+msgstr ""
+
+#: src/gui/register.cpp:192
+#, c-format
+msgid "The password needs to be at least %d characters long."
+msgstr ""
+
+#: src/gui/register.cpp:200
+#, c-format
+msgid "The password needs to be less than %d characters long."
+msgstr ""
+
+#: src/gui/register.cpp:207
+msgid "Passwords do not match."
+msgstr ""
+
+#: src/gui/register.cpp:227 src/main.cpp:945
+msgid "Error"
+msgstr ""
+
+#: src/gui/setup_audio.cpp:40
+msgid "Sound"
+msgstr ""
+
+#: src/gui/setup_audio.cpp:46
+msgid "Sfx volume"
+msgstr ""
+
+#: src/gui/setup_audio.cpp:47
+msgid "Music volume"
+msgstr ""
+
+#: src/gui/setup.cpp:58
+msgid "Apply"
+msgstr ""
+
+#: src/gui/setup.cpp:58
+msgid "Reset Windows"
+msgstr ""
+
+#: src/gui/setup.cpp:79
+msgid "Video"
+msgstr ""
+
+#: src/gui/setup.cpp:83
+msgid "Audio"
+msgstr ""
+
+#: src/gui/setup.cpp:87
+msgid "Joystick"
+msgstr ""
+
+#: src/gui/setup.cpp:91
+msgid "Keyboard"
+msgstr ""
+
+#: src/gui/setup.cpp:95
+msgid "Players"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:36 src/gui/setup_joystick.cpp:70
+msgid "Press the button to start calibration"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:37 src/gui/setup_joystick.cpp:68
+msgid "Calibrate"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:38
+msgid "Enable joystick"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:73
+msgid "Stop"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:74
+msgid "Rotate the stick"
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:88
+msgid "Assign"
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:94
+msgid "Default"
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:115
+msgid "Key Conflict(s) Detected."
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:116
+msgid "Resolve them, or gameplay may result in strange behaviour."
+msgstr ""
+
+#: src/gui/setup_players.cpp:53
+#, fuzzy
+msgid "Name"
+msgstr "nom"
+
+#: src/gui/setup_players.cpp:54
+msgid "Relation"
+msgstr ""
+
+#: src/gui/setup_players.cpp:58
+msgid "Neutral"
+msgstr ""
+
+#: src/gui/setup_players.cpp:59
+msgid "Friend"
+msgstr ""
+
+#: src/gui/setup_players.cpp:60
+msgid "Disregarded"
+msgstr ""
+
+#: src/gui/setup_players.cpp:61
+msgid "Ignored"
+msgstr ""
+
+#: src/gui/setup_players.cpp:214
+msgid "Save player list"
+msgstr ""
+
+#: src/gui/setup_players.cpp:216
+msgid "Allow trading"
+msgstr ""
+
+#: src/gui/setup_players.cpp:218
+msgid "Allow whispers"
+msgstr ""
+
+#: src/gui/setup_players.cpp:245
+msgid "When ignoring:"
+msgstr ""
+
+#: src/gui/setup_video.cpp:112
+msgid "Full screen"
+msgstr ""
+
+#: src/gui/setup_video.cpp:113
+msgid "OpenGL"
+msgstr ""
+
+#: src/gui/setup_video.cpp:114
+msgid "Custom cursor"
+msgstr ""
+
+#: src/gui/setup_video.cpp:116
+msgid "FPS Limit:"
+msgstr ""
+
+#: src/gui/setup_video.cpp:135
+msgid "Gui opacity"
+msgstr ""
+
+#: src/gui/setup_video.cpp:192
+msgid "Scroll radius"
+msgstr ""
+
+#: src/gui/setup_video.cpp:200
+msgid "Scroll laziness"
+msgstr ""
+
+#: src/gui/setup_video.cpp:208
+msgid "Ambient FX"
+msgstr ""
+
+#: src/gui/setup_video.cpp:215 src/gui/setup_video.cpp:412
+msgid "off"
+msgstr ""
+
+#: src/gui/setup_video.cpp:218 src/gui/setup_video.cpp:234
+#: src/gui/setup_video.cpp:415 src/gui/setup_video.cpp:429
+msgid "low"
+msgstr ""
+
+#: src/gui/setup_video.cpp:221 src/gui/setup_video.cpp:240
+#: src/gui/setup_video.cpp:418 src/gui/setup_video.cpp:435
+msgid "high"
+msgstr ""
+
+#: src/gui/setup_video.cpp:227
+msgid "Particle Detail"
+msgstr ""
+
+#: src/gui/setup_video.cpp:237 src/gui/setup_video.cpp:432
+msgid "medium"
+msgstr ""
+
+#: src/gui/setup_video.cpp:243 src/gui/setup_video.cpp:438
+msgid "max"
+msgstr ""
+
+#: src/gui/setup_video.cpp:309
+msgid "Switching to full screen"
+msgstr ""
+
+#: src/gui/setup_video.cpp:310
+msgid "Restart needed for changes to take effect."
+msgstr ""
+
+#: src/gui/setup_video.cpp:322
+msgid "Changing OpenGL"
+msgstr ""
+
+#: src/gui/setup_video.cpp:323
+msgid "Applying change to OpenGL requires restart."
+msgstr ""
+
+#: src/gui/skill.cpp:79
+msgid "Mystery Skill"
+msgstr ""
+
+#: src/gui/skill.cpp:132 src/gui/skill.cpp:188
+#, c-format
+msgid "Skill points: %d"
+msgstr ""
+
+#: src/gui/skill.cpp:133
+msgid "Up"
+msgstr ""
+
+#: src/gui/status.cpp:52 src/gui/status.cpp:235
+#, c-format
+msgid "Job: %d"
+msgstr ""
+
+#: src/gui/status.cpp:53 src/gui/status.cpp:238
+#, c-format
+msgid "Money: %d GP"
+msgstr ""
+
+#: src/gui/status.cpp:127
+msgid "Stats"
+msgstr ""
+
+#: src/gui/status.cpp:128
+msgid "Total"
+msgstr ""
+
+#: src/gui/status.cpp:129
+msgid "Cost"
+msgstr ""
+
+#: src/gui/status.cpp:132
+msgid "Attack:"
+msgstr ""
+
+#: src/gui/status.cpp:133
+msgid "Defense:"
+msgstr ""
+
+#: src/gui/status.cpp:134
+msgid "M.Attack:"
+msgstr ""
+
+#: src/gui/status.cpp:135
+msgid "M.Defense:"
+msgstr ""
+
+#: src/gui/status.cpp:136
+#, c-format
+msgid "% Accuracy:"
+msgstr ""
+
+#: src/gui/status.cpp:137
+#, c-format
+msgid "% Evade:"
+msgstr ""
+
+#: src/gui/status.cpp:138
+msgid "% Reflex:"
+msgstr ""
+
+#: src/gui/status.cpp:282
+msgid "Strength"
+msgstr ""
+
+#: src/gui/status.cpp:283
+msgid "Agility"
+msgstr ""
+
+#: src/gui/status.cpp:284
+msgid "Vitality"
+msgstr ""
+
+#: src/gui/status.cpp:285
+msgid "Intelligence"
+msgstr ""
+
+#: src/gui/status.cpp:286
+msgid "Dexterity"
+msgstr ""
+
+#: src/gui/status.cpp:287
+msgid "Luck"
+msgstr ""
+
+#: src/gui/status.cpp:305
+#, c-format
+msgid "Remaining Status Points: %d"
+msgstr ""
+
+#: src/gui/trade.cpp:61
+msgid "Add"
+msgstr ""
+
+#: src/gui/trade.cpp:64
+msgid "Trade"
+msgstr ""
+
+#: src/gui/trade.cpp:80 src/gui/trade.cpp:156 src/gui/trade.cpp:204
+#, c-format
+msgid "You get %d GP."
+msgstr ""
+
+#: src/gui/trade.cpp:81
+msgid "You give:"
+msgstr ""
+
+#: src/gui/trade.cpp:283
+msgid "Failed adding item. You can not overlap one kind of item on the window."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:93
+msgid "Updating..."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:119
+msgid "Play"
+msgstr ""
+
+#: src/gui/updatewindow.cpp:525
+msgid "Completed"
+msgstr ""
+
+#: src/resources/itemdb.cpp:99
+msgid "Unnamed"
+msgstr ""
+
+#: src/main.cpp:769
+msgid "Got disconnected from server!"
+msgstr ""
+
+#: src/main.cpp:956
+msgid "Connecting to map server..."
+msgstr ""
+
+#: src/main.cpp:964
+msgid "Connecting to character server..."
+msgstr ""
+
+#: src/main.cpp:972
+msgid "Connecting to account server..."
+msgstr ""
+
+#~ msgid "Change"
+#~ msgstr "canvi"
diff --git a/po/cs.po b/po/cs.po
new file mode 100644
index 00000000..efb03f63
--- /dev/null
+++ b/po/cs.po
@@ -0,0 +1,956 @@
+# Czech translation for tmw
+# Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008
+# This file is distributed under the same license as the tmw package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: tmw\n"
+"Report-Msgid-Bugs-To: themanaworld-devel@lists.sourceforge.net\n"
+"POT-Creation-Date: 2009-01-08 22:10+0100\n"
+"PO-Revision-Date: 2008-12-17 16:31+0000\n"
+"Last-Translator: Lubos <alvinx12@centrum.cz>\n"
+"Language-Team: Czech <cs@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-01-06 12:40+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#: src/gui/buy.cpp:43 src/gui/buy.cpp:61 src/gui/buysell.cpp:35
+msgid "Buy"
+msgstr "Nákup"
+
+#: src/gui/buy.cpp:58 src/gui/buy.cpp:239 src/gui/sell.cpp:65
+#: src/gui/sell.cpp:259
+#, c-format
+msgid "Price: %d GP / Total: %d GP"
+msgstr ""
+
+#: src/gui/buy.cpp:62 src/gui/sell.cpp:69
+msgid "Quit"
+msgstr ""
+
+#: src/gui/buy.cpp:63 src/gui/buy.cpp:206 src/gui/buy.cpp:224
+#: src/gui/inventorywindow.cpp:150 src/gui/inventorywindow.cpp:160
+#: src/gui/sell.cpp:70 src/gui/sell.cpp:230 src/gui/sell.cpp:244
+#: src/gui/trade.cpp:94 src/gui/trade.cpp:266
+#, c-format
+msgid "Description: %s"
+msgstr "Popis: %s"
+
+#: src/gui/buy.cpp:64 src/gui/buy.cpp:208 src/gui/buy.cpp:225
+#: src/gui/inventorywindow.cpp:149 src/gui/inventorywindow.cpp:158
+#: src/gui/sell.cpp:71 src/gui/sell.cpp:232 src/gui/sell.cpp:245
+#, c-format
+msgid "Effect: %s"
+msgstr ""
+
+#: src/gui/buysell.cpp:31
+msgid "Shop"
+msgstr ""
+
+#: src/gui/buysell.cpp:35 src/gui/sell.cpp:48 src/gui/sell.cpp:68
+msgid "Sell"
+msgstr "Prodej"
+
+#: src/gui/buysell.cpp:35 src/gui/char_select.cpp:85
+#: src/gui/char_select.cpp:258 src/gui/char_server.cpp:60
+#: src/gui/connection.cpp:47 src/gui/item_amount.cpp:61 src/gui/login.cpp:52
+#: src/gui/npclistdialog.cpp:45 src/gui/register.cpp:76 src/gui/setup.cpp:58
+#: src/gui/trade.cpp:63 src/gui/updatewindow.cpp:118
+msgid "Cancel"
+msgstr "Zrušit"
+
+#: src/gui/char_select.cpp:63
+msgid "Confirm Character Delete"
+msgstr "PotvrÄte vymazání postavy"
+
+#: src/gui/char_select.cpp:64
+msgid "Are you sure you want to delete this character?"
+msgstr "Jste si jistí, že chcete vymazat tuto postavu?"
+
+#: src/gui/char_select.cpp:81
+#, fuzzy
+msgid "Select Character"
+msgstr "Vytvořit postavu"
+
+#: src/gui/char_select.cpp:84 src/gui/item_amount.cpp:60 src/gui/login.cpp:51
+#: src/gui/ok_dialog.cpp:37 src/gui/trade.cpp:62
+msgid "Ok"
+msgstr "Ok"
+
+#: src/gui/char_select.cpp:86
+msgid "New"
+msgstr "Nová"
+
+#: src/gui/char_select.cpp:87 src/gui/setup_players.cpp:220
+msgid "Delete"
+msgstr "Odstranit"
+
+#: src/gui/char_select.cpp:88
+msgid "Previous"
+msgstr "Předchozí"
+
+#: src/gui/char_select.cpp:89
+msgid "Next"
+msgstr "Další"
+
+#: src/gui/char_select.cpp:91 src/gui/char_select.cpp:171
+#: src/gui/char_select.cpp:183 src/gui/inventorywindow.cpp:148
+#: src/gui/inventorywindow.cpp:156 src/gui/trade.cpp:92 src/gui/trade.cpp:264
+#, c-format
+msgid "Name: %s"
+msgstr "Jméno: %s"
+
+#: src/gui/char_select.cpp:92 src/gui/char_select.cpp:172
+#: src/gui/char_select.cpp:184 src/gui/status.cpp:51 src/gui/status.cpp:232
+#, c-format
+msgid "Level: %d"
+msgstr "Úroveň: %d"
+
+#: src/gui/char_select.cpp:93 src/gui/char_select.cpp:173
+#: src/gui/char_select.cpp:185
+#, fuzzy, c-format
+msgid "Job Level: %d"
+msgstr "Úroveň: %d"
+
+#: src/gui/char_select.cpp:94 src/gui/char_select.cpp:186
+#, c-format
+msgid "Money: %d"
+msgstr "Peníze: %d"
+
+#: src/gui/char_select.cpp:174
+#, c-format
+msgid "Gold: %d"
+msgstr ""
+
+#: src/gui/char_select.cpp:243
+msgid "Create Character"
+msgstr "Vytvořit postavu"
+
+#: src/gui/char_select.cpp:250 src/gui/login.cpp:44 src/gui/register.cpp:65
+msgid "Name:"
+msgstr "Jméno:"
+
+#: src/gui/char_select.cpp:253
+msgid "Hair Color:"
+msgstr "Barva vlasů:"
+
+#: src/gui/char_select.cpp:256
+msgid "Hair Style:"
+msgstr "Styl vlasů:"
+
+#: src/gui/char_select.cpp:257
+msgid "Create"
+msgstr "Vytvořit"
+
+#: src/gui/char_server.cpp:52
+#, fuzzy
+msgid "Select Server"
+msgstr "Server:"
+
+#: src/gui/char_server.cpp:59 src/gui/npclistdialog.cpp:44
+#: src/gui/npc_text.cpp:46
+msgid "OK"
+msgstr ""
+
+#: src/gui/chat.cpp:122
+msgid "Global announcement:"
+msgstr ""
+
+#: src/gui/chat.cpp:125
+#, c-format
+msgid "Global announcement from %s:"
+msgstr ""
+
+#: src/gui/chat.cpp:140 src/gui/login.cpp:46 src/gui/register.cpp:68
+msgid "Server:"
+msgstr "Server:"
+
+#: src/gui/chat.cpp:146
+#, c-format
+msgid "%s whispers:"
+msgstr ""
+
+#: src/gui/chat.cpp:283
+#, c-format
+msgid "Whispering to %s: %s"
+msgstr ""
+
+#: src/gui/chat.cpp:356
+msgid "Unknown command"
+msgstr ""
+
+#: src/gui/chat.cpp:366
+msgid "Trade failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:369
+msgid "Emote failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:372
+msgid "Sit failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:375
+msgid "Chat creating failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:378
+msgid "Could not join party!"
+msgstr ""
+
+#: src/gui/chat.cpp:381
+msgid "Cannot shout!"
+msgstr ""
+
+#: src/gui/chat.cpp:389
+msgid "You have not yet reached a high enough lvl!"
+msgstr ""
+
+#: src/gui/chat.cpp:392
+msgid "Insufficient HP!"
+msgstr ""
+
+#: src/gui/chat.cpp:395
+msgid "Insufficient SP!"
+msgstr ""
+
+#: src/gui/chat.cpp:398
+msgid "You have no memos!"
+msgstr ""
+
+#: src/gui/chat.cpp:401
+msgid "You cannot do that right now!"
+msgstr ""
+
+#: src/gui/chat.cpp:404
+msgid "Seems you need more Zeny... ;-)"
+msgstr ""
+
+#: src/gui/chat.cpp:407
+msgid "You cannot use this skill with that kind of weapon!"
+msgstr ""
+
+#: src/gui/chat.cpp:410
+msgid "You need another red gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:413
+msgid "You need another blue gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:416
+msgid "You're carrying to much to do this!"
+msgstr ""
+
+#: src/gui/chat.cpp:419
+msgid "Huh? What's that?"
+msgstr ""
+
+#: src/gui/chat.cpp:425
+msgid "Warp failed..."
+msgstr ""
+
+#: src/gui/chat.cpp:428
+msgid "Could not steal anything..."
+msgstr ""
+
+#: src/gui/chat.cpp:431
+msgid "Poison had no effect..."
+msgstr ""
+
+#: src/gui/chat.cpp:496
+msgid "-- Help --"
+msgstr ""
+
+#: src/gui/chat.cpp:499
+msgid "/announce: Global announcement (GM only)"
+msgstr ""
+
+#: src/gui/chat.cpp:500
+msgid "/clear: Clears this window"
+msgstr ""
+
+#: src/gui/chat.cpp:501
+msgid "/help: Display this help"
+msgstr ""
+
+#: src/gui/chat.cpp:502
+msgid "/where: Display map name"
+msgstr ""
+
+#: src/gui/chat.cpp:503
+msgid "/whisper <nick> <message>: Sends a private <message> to <nick>"
+msgstr ""
+
+#: src/gui/chat.cpp:505
+msgid "/w <nick> <message>: Short form for /whisper"
+msgstr ""
+
+#: src/gui/chat.cpp:506
+msgid "/who: Display number of online users"
+msgstr ""
+
+#: src/gui/chat.cpp:507
+msgid "For more information, type /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:512
+msgid "Command: /announce <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:513
+msgid "*** only available to a GM ***"
+msgstr ""
+
+#: src/gui/chat.cpp:514
+msgid "This command sends the message <msg> to all players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:520
+msgid "Command: /clear"
+msgstr ""
+
+#: src/gui/chat.cpp:521
+msgid "This command clears the chat log of previous chat."
+msgstr ""
+
+#: src/gui/chat.cpp:527
+msgid "Command: /help"
+msgstr ""
+
+#: src/gui/chat.cpp:528
+msgid "This command displays a list of all commands available."
+msgstr ""
+
+#: src/gui/chat.cpp:530
+msgid "Command: /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:531
+msgid "This command displays help on <command>."
+msgstr ""
+
+#: src/gui/chat.cpp:536
+msgid "Command: /where"
+msgstr ""
+
+#: src/gui/chat.cpp:537
+msgid "This command displays the name of the current map."
+msgstr ""
+
+#: src/gui/chat.cpp:543
+msgid "Command: /whisper <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:544
+msgid "Command: /w <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:545
+msgid "This command sends the message <msg> to <nick>."
+msgstr ""
+
+#: src/gui/chat.cpp:547
+msgid "If the <nick> has spaces in it, enclose it in double quotes (\")."
+msgstr ""
+
+#: src/gui/chat.cpp:553
+msgid "Command: /who"
+msgstr ""
+
+#: src/gui/chat.cpp:554
+msgid "This command displays the number of players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:558
+msgid "Unknown command."
+msgstr ""
+
+#: src/gui/chat.cpp:559
+msgid "Type /help for a list of commands."
+msgstr ""
+
+#: src/gui/confirm_dialog.cpp:35
+msgid "Yes"
+msgstr "Ano"
+
+#: src/gui/confirm_dialog.cpp:36
+msgid "No"
+msgstr "Ne"
+
+#: src/gui/connection.cpp:49 src/gui/updatewindow.cpp:116
+msgid "Connecting..."
+msgstr "Připojuji se..."
+
+#: src/gui/equipmentwindow.cpp:38 src/gui/menuwindow.cpp:62
+msgid "Equipment"
+msgstr "Vybavení"
+
+#: src/gui/help.cpp:33
+msgid "Help"
+msgstr ""
+
+#: src/gui/help.cpp:41
+msgid "Close"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:46 src/gui/menuwindow.cpp:63
+msgid "Inventory"
+msgstr "Inventář"
+
+#: src/gui/inventorywindow.cpp:56 src/gui/inventorywindow.cpp:232
+#: src/gui/skill.cpp:134
+msgid "Use"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:57
+msgid "Drop"
+msgstr "Upustit"
+
+#: src/gui/inventorywindow.cpp:99
+#, c-format
+msgid "Weight: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:104
+#, c-format
+msgid "Slots used: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:225
+msgid "Unequip"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:228
+msgid "Equip"
+msgstr "Vybavit"
+
+#: src/gui/item_amount.cpp:76
+msgid "Select amount of items to trade."
+msgstr "Vyberte množství zboží, se kterým budete obchodovat."
+
+#: src/gui/item_amount.cpp:80
+msgid "Select amount of items to drop."
+msgstr "Vyberte množství zboží, které chcete upustit."
+
+#: src/gui/login.cpp:42
+msgid "Login"
+msgstr ""
+
+#: src/gui/login.cpp:45 src/gui/register.cpp:66
+msgid "Password:"
+msgstr "Heslo:"
+
+#: src/gui/login.cpp:50
+msgid "Remember Username"
+msgstr "Zapamatovat uživatelské jméno"
+
+#: src/gui/login.cpp:53 src/gui/register.cpp:75
+msgid "Register"
+msgstr "Registrace"
+
+#: src/gui/menuwindow.cpp:61
+msgid "Status"
+msgstr "Stav"
+
+#: src/gui/menuwindow.cpp:64 src/gui/skill.cpp:119
+msgid "Skills"
+msgstr "Dovednosti"
+
+#: src/gui/menuwindow.cpp:65
+msgid "Shortcut"
+msgstr "Zkratka"
+
+#: src/gui/menuwindow.cpp:66 src/main.cpp:716
+msgid "Setup"
+msgstr "Nastavení"
+
+#: src/gui/minimap.cpp:34
+msgid "MiniMap"
+msgstr "MiniMapa"
+
+#: src/gui/npclistdialog.cpp:35 src/gui/npc_text.cpp:35
+msgid "NPC"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:81
+#, c-format
+msgid "@@trade|Trade With %s@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:83
+#, c-format
+msgid "@@attack|Attack %s@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:114
+msgid "@@talk|Talk To NPC@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:124 src/gui/popupmenu.cpp:140
+#: src/gui/popupmenu.cpp:293
+msgid "@@cancel|Cancel@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:136
+#, c-format
+msgid "@@pickup|Pick Up %s@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:283
+msgid "@@use|Unequip@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:285
+msgid "@@use|Equip@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:288
+msgid "@@use|Use@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:290
+msgid "@@drop|Drop@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:291
+msgid "@@description|Description@@"
+msgstr ""
+
+#: src/gui/register.cpp:67
+msgid "Confirm:"
+msgstr ""
+
+#: src/gui/register.cpp:73
+msgid "Male"
+msgstr "Muž"
+
+#: src/gui/register.cpp:74
+msgid "Female"
+msgstr "Žena"
+
+#: src/gui/register.cpp:176
+#, c-format
+msgid "The username needs to be at least %d characters long."
+msgstr "Uživatelské jméno musí být nejméně %d znaků dlouhé."
+
+#: src/gui/register.cpp:184
+#, c-format
+msgid "The username needs to be less than %d characters long."
+msgstr "Uživatelské jméno musí být kratší než %d znaků."
+
+#: src/gui/register.cpp:192
+#, c-format
+msgid "The password needs to be at least %d characters long."
+msgstr ""
+
+#: src/gui/register.cpp:200
+#, c-format
+msgid "The password needs to be less than %d characters long."
+msgstr "Heslo musí být kratší než %d znaků."
+
+#: src/gui/register.cpp:207
+msgid "Passwords do not match."
+msgstr "Hesla se neshodují."
+
+#: src/gui/register.cpp:227 src/main.cpp:945
+msgid "Error"
+msgstr "Chyba"
+
+#: src/gui/setup_audio.cpp:40
+msgid "Sound"
+msgstr "Zvuk"
+
+#: src/gui/setup_audio.cpp:46
+msgid "Sfx volume"
+msgstr ""
+
+#: src/gui/setup_audio.cpp:47
+msgid "Music volume"
+msgstr ""
+
+#: src/gui/setup.cpp:58
+msgid "Apply"
+msgstr ""
+
+#: src/gui/setup.cpp:58
+msgid "Reset Windows"
+msgstr ""
+
+#: src/gui/setup.cpp:79
+msgid "Video"
+msgstr ""
+
+#: src/gui/setup.cpp:83
+msgid "Audio"
+msgstr "Audio"
+
+#: src/gui/setup.cpp:87
+msgid "Joystick"
+msgstr ""
+
+#: src/gui/setup.cpp:91
+msgid "Keyboard"
+msgstr "Klávesnice"
+
+#: src/gui/setup.cpp:95
+msgid "Players"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:36 src/gui/setup_joystick.cpp:70
+msgid "Press the button to start calibration"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:37 src/gui/setup_joystick.cpp:68
+msgid "Calibrate"
+msgstr "Kalibrovat"
+
+#: src/gui/setup_joystick.cpp:38
+msgid "Enable joystick"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:73
+msgid "Stop"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:74
+msgid "Rotate the stick"
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:88
+msgid "Assign"
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:94
+#, fuzzy
+msgid "Default"
+msgstr "Odstranit"
+
+#: src/gui/setup_keyboard.cpp:115
+msgid "Key Conflict(s) Detected."
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:116
+msgid "Resolve them, or gameplay may result in strange behaviour."
+msgstr ""
+
+#: src/gui/setup_players.cpp:53
+#, fuzzy
+msgid "Name"
+msgstr "Jméno:"
+
+#: src/gui/setup_players.cpp:54
+msgid "Relation"
+msgstr ""
+
+#: src/gui/setup_players.cpp:58
+msgid "Neutral"
+msgstr ""
+
+#: src/gui/setup_players.cpp:59
+msgid "Friend"
+msgstr ""
+
+#: src/gui/setup_players.cpp:60
+msgid "Disregarded"
+msgstr ""
+
+#: src/gui/setup_players.cpp:61
+msgid "Ignored"
+msgstr ""
+
+#: src/gui/setup_players.cpp:214
+msgid "Save player list"
+msgstr ""
+
+#: src/gui/setup_players.cpp:216
+msgid "Allow trading"
+msgstr ""
+
+#: src/gui/setup_players.cpp:218
+msgid "Allow whispers"
+msgstr ""
+
+#: src/gui/setup_players.cpp:245
+msgid "When ignoring:"
+msgstr ""
+
+#: src/gui/setup_video.cpp:112
+msgid "Full screen"
+msgstr ""
+
+#: src/gui/setup_video.cpp:113
+msgid "OpenGL"
+msgstr "OpenGL"
+
+#: src/gui/setup_video.cpp:114
+msgid "Custom cursor"
+msgstr ""
+
+#: src/gui/setup_video.cpp:116
+msgid "FPS Limit:"
+msgstr ""
+
+#: src/gui/setup_video.cpp:135
+msgid "Gui opacity"
+msgstr ""
+
+#: src/gui/setup_video.cpp:192
+msgid "Scroll radius"
+msgstr ""
+
+#: src/gui/setup_video.cpp:200
+msgid "Scroll laziness"
+msgstr ""
+
+#: src/gui/setup_video.cpp:208
+msgid "Ambient FX"
+msgstr ""
+
+#: src/gui/setup_video.cpp:215 src/gui/setup_video.cpp:412
+msgid "off"
+msgstr ""
+
+#: src/gui/setup_video.cpp:218 src/gui/setup_video.cpp:234
+#: src/gui/setup_video.cpp:415 src/gui/setup_video.cpp:429
+msgid "low"
+msgstr ""
+
+#: src/gui/setup_video.cpp:221 src/gui/setup_video.cpp:240
+#: src/gui/setup_video.cpp:418 src/gui/setup_video.cpp:435
+msgid "high"
+msgstr ""
+
+#: src/gui/setup_video.cpp:227
+msgid "Particle Detail"
+msgstr ""
+
+#: src/gui/setup_video.cpp:237 src/gui/setup_video.cpp:432
+msgid "medium"
+msgstr ""
+
+#: src/gui/setup_video.cpp:243 src/gui/setup_video.cpp:438
+msgid "max"
+msgstr ""
+
+#: src/gui/setup_video.cpp:309
+msgid "Switching to full screen"
+msgstr ""
+
+#: src/gui/setup_video.cpp:310
+msgid "Restart needed for changes to take effect."
+msgstr ""
+
+#: src/gui/setup_video.cpp:322
+msgid "Changing OpenGL"
+msgstr ""
+
+#: src/gui/setup_video.cpp:323
+msgid "Applying change to OpenGL requires restart."
+msgstr ""
+
+#: src/gui/skill.cpp:79
+msgid "Mystery Skill"
+msgstr ""
+
+#: src/gui/skill.cpp:132 src/gui/skill.cpp:188
+#, c-format
+msgid "Skill points: %d"
+msgstr ""
+
+#: src/gui/skill.cpp:133
+msgid "Up"
+msgstr ""
+
+#: src/gui/status.cpp:52 src/gui/status.cpp:235
+#, fuzzy, c-format
+msgid "Job: %d"
+msgstr "Úroveň: %d"
+
+#: src/gui/status.cpp:53 src/gui/status.cpp:238
+#, fuzzy, c-format
+msgid "Money: %d GP"
+msgstr "Peníze: %d"
+
+#: src/gui/status.cpp:127
+#, fuzzy
+msgid "Stats"
+msgstr "Stav"
+
+#: src/gui/status.cpp:128
+msgid "Total"
+msgstr ""
+
+#: src/gui/status.cpp:129
+msgid "Cost"
+msgstr ""
+
+#: src/gui/status.cpp:132
+#, fuzzy
+msgid "Attack:"
+msgstr "Útok %+d"
+
+#: src/gui/status.cpp:133
+#, fuzzy
+msgid "Defense:"
+msgstr "Obrana %+d"
+
+#: src/gui/status.cpp:134
+#, fuzzy
+msgid "M.Attack:"
+msgstr "Útok %+d"
+
+#: src/gui/status.cpp:135
+#, fuzzy
+msgid "M.Defense:"
+msgstr "Obrana %+d"
+
+#: src/gui/status.cpp:136
+#, c-format
+msgid "% Accuracy:"
+msgstr ""
+
+#: src/gui/status.cpp:137
+#, c-format
+msgid "% Evade:"
+msgstr ""
+
+#: src/gui/status.cpp:138
+msgid "% Reflex:"
+msgstr ""
+
+#: src/gui/status.cpp:282
+#, fuzzy
+msgid "Strength"
+msgstr "Síla:"
+
+#: src/gui/status.cpp:283
+#, fuzzy
+msgid "Agility"
+msgstr "Vitalita:"
+
+#: src/gui/status.cpp:284
+#, fuzzy
+msgid "Vitality"
+msgstr "Vitalita:"
+
+#: src/gui/status.cpp:285
+#, fuzzy
+msgid "Intelligence"
+msgstr "Inteligence:"
+
+#: src/gui/status.cpp:286
+msgid "Dexterity"
+msgstr ""
+
+#: src/gui/status.cpp:287
+msgid "Luck"
+msgstr ""
+
+#: src/gui/status.cpp:305
+#, c-format
+msgid "Remaining Status Points: %d"
+msgstr ""
+
+#: src/gui/trade.cpp:61
+msgid "Add"
+msgstr ""
+
+#: src/gui/trade.cpp:64
+msgid "Trade"
+msgstr ""
+
+#: src/gui/trade.cpp:80 src/gui/trade.cpp:156 src/gui/trade.cpp:204
+#, c-format
+msgid "You get %d GP."
+msgstr ""
+
+#: src/gui/trade.cpp:81
+msgid "You give:"
+msgstr ""
+
+#: src/gui/trade.cpp:283
+msgid "Failed adding item. You can not overlap one kind of item on the window."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:93
+msgid "Updating..."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:119
+msgid "Play"
+msgstr ""
+
+#: src/gui/updatewindow.cpp:525
+msgid "Completed"
+msgstr ""
+
+#: src/resources/itemdb.cpp:99
+msgid "Unnamed"
+msgstr ""
+
+#: src/main.cpp:769
+msgid "Got disconnected from server!"
+msgstr ""
+
+#: src/main.cpp:956
+#, fuzzy
+msgid "Connecting to map server..."
+msgstr "Připojuji se..."
+
+#: src/main.cpp:964
+msgid "Connecting to character server..."
+msgstr ""
+
+#: src/main.cpp:972
+msgid "Connecting to account server..."
+msgstr ""
+
+#~ msgid "Account and Character Management"
+#~ msgstr "Správa úÄtu a postavy"
+
+#~ msgid "Unregister"
+#~ msgstr "Zrušit registraci"
+
+#~ msgid "Change Password"
+#~ msgstr "Změnit heslo"
+
+#~ msgid "Change Email Address"
+#~ msgstr "Změnit e-mail"
+
+#~ msgid "Account: %s"
+#~ msgstr "ÚÄet: %s"
+
+#~ msgid "Please distribute %d points"
+#~ msgstr "Rozdělte prosím %d bodů"
+
+#~ msgid "Please remove %d points"
+#~ msgstr "Odstraňte prosím %d bodů."
+
+#~ msgid "Split"
+#~ msgstr "Rozdělit"
+
+#~ msgid "Guilds"
+#~ msgstr "Gildy"
+
+#~ msgid "Switch character"
+#~ msgstr "Přepněte postavu"
+
+#~ msgid "Email:"
+#~ msgstr "E-mail:"
+
+#~ msgid "Port:"
+#~ msgstr "Port:"
+
+#~ msgid "Propose trade"
+#~ msgstr "Nabídnout obchod"
+
+#~ msgid "Confirm trade"
+#~ msgstr "Potvrdit obchod"
+
+#~ msgid "Change"
+#~ msgstr "Změnit"
diff --git a/po/da.po b/po/da.po
new file mode 100644
index 00000000..dae66aca
--- /dev/null
+++ b/po/da.po
@@ -0,0 +1,1009 @@
+# Danish translation for tmw
+# Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008
+# This file is distributed under the same license as the tmw package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: tmw\n"
+"Report-Msgid-Bugs-To: themanaworld-devel@lists.sourceforge.net\n"
+"POT-Creation-Date: 2009-01-08 22:10+0100\n"
+"PO-Revision-Date: 2008-12-28 14:45+0000\n"
+"Last-Translator: Niels L Ellegaard <niels.ellegaard@gmail.com>\n"
+"Language-Team: Danish <da@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-01-06 12:40+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#: src/gui/buy.cpp:43 src/gui/buy.cpp:61 src/gui/buysell.cpp:35
+msgid "Buy"
+msgstr "Køb"
+
+#: src/gui/buy.cpp:58 src/gui/buy.cpp:239 src/gui/sell.cpp:65
+#: src/gui/sell.cpp:259
+#, c-format
+msgid "Price: %d GP / Total: %d GP"
+msgstr "Pris: %d GP / Total: %d GP"
+
+#: src/gui/buy.cpp:62 src/gui/sell.cpp:69
+msgid "Quit"
+msgstr "Afslut"
+
+#: src/gui/buy.cpp:63 src/gui/buy.cpp:206 src/gui/buy.cpp:224
+#: src/gui/inventorywindow.cpp:150 src/gui/inventorywindow.cpp:160
+#: src/gui/sell.cpp:70 src/gui/sell.cpp:230 src/gui/sell.cpp:244
+#: src/gui/trade.cpp:94 src/gui/trade.cpp:266
+#, c-format
+msgid "Description: %s"
+msgstr "Beskrivelse: %s"
+
+#: src/gui/buy.cpp:64 src/gui/buy.cpp:208 src/gui/buy.cpp:225
+#: src/gui/inventorywindow.cpp:149 src/gui/inventorywindow.cpp:158
+#: src/gui/sell.cpp:71 src/gui/sell.cpp:232 src/gui/sell.cpp:245
+#, c-format
+msgid "Effect: %s"
+msgstr "Effekt: %s"
+
+#: src/gui/buysell.cpp:31
+#, fuzzy
+msgid "Shop"
+msgstr "Stop"
+
+#: src/gui/buysell.cpp:35 src/gui/sell.cpp:48 src/gui/sell.cpp:68
+msgid "Sell"
+msgstr "Sælg"
+
+#: src/gui/buysell.cpp:35 src/gui/char_select.cpp:85
+#: src/gui/char_select.cpp:258 src/gui/char_server.cpp:60
+#: src/gui/connection.cpp:47 src/gui/item_amount.cpp:61 src/gui/login.cpp:52
+#: src/gui/npclistdialog.cpp:45 src/gui/register.cpp:76 src/gui/setup.cpp:58
+#: src/gui/trade.cpp:63 src/gui/updatewindow.cpp:118
+msgid "Cancel"
+msgstr "Fortryd"
+
+#: src/gui/char_select.cpp:63
+msgid "Confirm Character Delete"
+msgstr "Er du sikker på at du vil slette denne figur?"
+
+#: src/gui/char_select.cpp:64
+msgid "Are you sure you want to delete this character?"
+msgstr "Er du sikker på at du vil slette denne figur?"
+
+#: src/gui/char_select.cpp:81
+msgid "Select Character"
+msgstr "Vælg Bruger"
+
+#: src/gui/char_select.cpp:84 src/gui/item_amount.cpp:60 src/gui/login.cpp:51
+#: src/gui/ok_dialog.cpp:37 src/gui/trade.cpp:62
+msgid "Ok"
+msgstr "O.k."
+
+#: src/gui/char_select.cpp:86
+msgid "New"
+msgstr "Opret"
+
+#: src/gui/char_select.cpp:87 src/gui/setup_players.cpp:220
+msgid "Delete"
+msgstr "Slet"
+
+#: src/gui/char_select.cpp:88
+msgid "Previous"
+msgstr "Forrige"
+
+#: src/gui/char_select.cpp:89
+msgid "Next"
+msgstr "Næste"
+
+#: src/gui/char_select.cpp:91 src/gui/char_select.cpp:171
+#: src/gui/char_select.cpp:183 src/gui/inventorywindow.cpp:148
+#: src/gui/inventorywindow.cpp:156 src/gui/trade.cpp:92 src/gui/trade.cpp:264
+#, c-format
+msgid "Name: %s"
+msgstr "Navn; %s"
+
+#: src/gui/char_select.cpp:92 src/gui/char_select.cpp:172
+#: src/gui/char_select.cpp:184 src/gui/status.cpp:51 src/gui/status.cpp:232
+#, c-format
+msgid "Level: %d"
+msgstr "Niveau: %d"
+
+#: src/gui/char_select.cpp:93 src/gui/char_select.cpp:173
+#: src/gui/char_select.cpp:185
+#, fuzzy, c-format
+msgid "Job Level: %d"
+msgstr "Niveau: %d"
+
+#: src/gui/char_select.cpp:94 src/gui/char_select.cpp:186
+#, c-format
+msgid "Money: %d"
+msgstr "Penge: %d"
+
+#: src/gui/char_select.cpp:174
+#, c-format
+msgid "Gold: %d"
+msgstr ""
+
+#: src/gui/char_select.cpp:243
+msgid "Create Character"
+msgstr "Lav figur."
+
+#: src/gui/char_select.cpp:250 src/gui/login.cpp:44 src/gui/register.cpp:65
+msgid "Name:"
+msgstr "Navn:"
+
+#: src/gui/char_select.cpp:253
+msgid "Hair Color:"
+msgstr "HÃ¥rfarve:"
+
+#: src/gui/char_select.cpp:256
+msgid "Hair Style:"
+msgstr "Frisure:"
+
+#: src/gui/char_select.cpp:257
+msgid "Create"
+msgstr "Opret"
+
+#: src/gui/char_server.cpp:52
+#, fuzzy
+msgid "Select Server"
+msgstr "Vælg Bruger"
+
+#: src/gui/char_server.cpp:59 src/gui/npclistdialog.cpp:44
+#: src/gui/npc_text.cpp:46
+msgid "OK"
+msgstr ""
+
+#: src/gui/chat.cpp:122
+msgid "Global announcement:"
+msgstr ""
+
+#: src/gui/chat.cpp:125
+#, c-format
+msgid "Global announcement from %s:"
+msgstr ""
+
+#: src/gui/chat.cpp:140 src/gui/login.cpp:46 src/gui/register.cpp:68
+msgid "Server:"
+msgstr "Server:"
+
+#: src/gui/chat.cpp:146
+#, c-format
+msgid "%s whispers:"
+msgstr ""
+
+#: src/gui/chat.cpp:283
+#, c-format
+msgid "Whispering to %s: %s"
+msgstr ""
+
+#: src/gui/chat.cpp:356
+msgid "Unknown command"
+msgstr ""
+
+#: src/gui/chat.cpp:366
+msgid "Trade failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:369
+msgid "Emote failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:372
+msgid "Sit failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:375
+msgid "Chat creating failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:378
+msgid "Could not join party!"
+msgstr ""
+
+#: src/gui/chat.cpp:381
+msgid "Cannot shout!"
+msgstr ""
+
+#: src/gui/chat.cpp:389
+msgid "You have not yet reached a high enough lvl!"
+msgstr ""
+
+#: src/gui/chat.cpp:392
+msgid "Insufficient HP!"
+msgstr ""
+
+#: src/gui/chat.cpp:395
+msgid "Insufficient SP!"
+msgstr ""
+
+#: src/gui/chat.cpp:398
+msgid "You have no memos!"
+msgstr ""
+
+#: src/gui/chat.cpp:401
+msgid "You cannot do that right now!"
+msgstr ""
+
+#: src/gui/chat.cpp:404
+msgid "Seems you need more Zeny... ;-)"
+msgstr ""
+
+#: src/gui/chat.cpp:407
+msgid "You cannot use this skill with that kind of weapon!"
+msgstr ""
+
+#: src/gui/chat.cpp:410
+msgid "You need another red gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:413
+msgid "You need another blue gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:416
+msgid "You're carrying to much to do this!"
+msgstr ""
+
+#: src/gui/chat.cpp:419
+msgid "Huh? What's that?"
+msgstr ""
+
+#: src/gui/chat.cpp:425
+msgid "Warp failed..."
+msgstr ""
+
+#: src/gui/chat.cpp:428
+msgid "Could not steal anything..."
+msgstr ""
+
+#: src/gui/chat.cpp:431
+msgid "Poison had no effect..."
+msgstr ""
+
+#: src/gui/chat.cpp:496
+msgid "-- Help --"
+msgstr ""
+
+#: src/gui/chat.cpp:499
+msgid "/announce: Global announcement (GM only)"
+msgstr ""
+
+#: src/gui/chat.cpp:500
+msgid "/clear: Clears this window"
+msgstr ""
+
+#: src/gui/chat.cpp:501
+msgid "/help: Display this help"
+msgstr ""
+
+#: src/gui/chat.cpp:502
+msgid "/where: Display map name"
+msgstr ""
+
+#: src/gui/chat.cpp:503
+msgid "/whisper <nick> <message>: Sends a private <message> to <nick>"
+msgstr ""
+
+#: src/gui/chat.cpp:505
+msgid "/w <nick> <message>: Short form for /whisper"
+msgstr ""
+
+#: src/gui/chat.cpp:506
+msgid "/who: Display number of online users"
+msgstr ""
+
+#: src/gui/chat.cpp:507
+msgid "For more information, type /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:512
+msgid "Command: /announce <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:513
+msgid "*** only available to a GM ***"
+msgstr ""
+
+#: src/gui/chat.cpp:514
+msgid "This command sends the message <msg> to all players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:520
+msgid "Command: /clear"
+msgstr ""
+
+#: src/gui/chat.cpp:521
+msgid "This command clears the chat log of previous chat."
+msgstr ""
+
+#: src/gui/chat.cpp:527
+msgid "Command: /help"
+msgstr ""
+
+#: src/gui/chat.cpp:528
+msgid "This command displays a list of all commands available."
+msgstr ""
+
+#: src/gui/chat.cpp:530
+msgid "Command: /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:531
+msgid "This command displays help on <command>."
+msgstr ""
+
+#: src/gui/chat.cpp:536
+msgid "Command: /where"
+msgstr ""
+
+#: src/gui/chat.cpp:537
+msgid "This command displays the name of the current map."
+msgstr ""
+
+#: src/gui/chat.cpp:543
+msgid "Command: /whisper <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:544
+msgid "Command: /w <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:545
+msgid "This command sends the message <msg> to <nick>."
+msgstr ""
+
+#: src/gui/chat.cpp:547
+msgid "If the <nick> has spaces in it, enclose it in double quotes (\")."
+msgstr ""
+
+#: src/gui/chat.cpp:553
+msgid "Command: /who"
+msgstr ""
+
+#: src/gui/chat.cpp:554
+msgid "This command displays the number of players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:558
+msgid "Unknown command."
+msgstr ""
+
+#: src/gui/chat.cpp:559
+msgid "Type /help for a list of commands."
+msgstr ""
+
+#: src/gui/confirm_dialog.cpp:35
+msgid "Yes"
+msgstr "Ja"
+
+#: src/gui/confirm_dialog.cpp:36
+msgid "No"
+msgstr "Nej"
+
+#: src/gui/connection.cpp:49 src/gui/updatewindow.cpp:116
+msgid "Connecting..."
+msgstr "Opretter forbindelse..."
+
+#: src/gui/equipmentwindow.cpp:38 src/gui/menuwindow.cpp:62
+msgid "Equipment"
+msgstr "Udstyr"
+
+#: src/gui/help.cpp:33
+msgid "Help"
+msgstr ""
+
+#: src/gui/help.cpp:41
+msgid "Close"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:46 src/gui/menuwindow.cpp:63
+msgid "Inventory"
+msgstr "Inventarliste"
+
+#: src/gui/inventorywindow.cpp:56 src/gui/inventorywindow.cpp:232
+#: src/gui/skill.cpp:134
+msgid "Use"
+msgstr "Brug"
+
+#: src/gui/inventorywindow.cpp:57
+msgid "Drop"
+msgstr "Smid"
+
+#: src/gui/inventorywindow.cpp:99
+#, c-format
+msgid "Weight: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:104
+#, c-format
+msgid "Slots used: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:225
+msgid "Unequip"
+msgstr "Tag af"
+
+#: src/gui/inventorywindow.cpp:228
+msgid "Equip"
+msgstr "Tag på"
+
+#: src/gui/item_amount.cpp:76
+msgid "Select amount of items to trade."
+msgstr "Vælge hvor mange du vil bytte."
+
+#: src/gui/item_amount.cpp:80
+msgid "Select amount of items to drop."
+msgstr "Vælg hvor mange du vil smide,"
+
+#: src/gui/login.cpp:42
+msgid "Login"
+msgstr "Log Ind"
+
+#: src/gui/login.cpp:45 src/gui/register.cpp:66
+msgid "Password:"
+msgstr "Adgangskode:"
+
+#: src/gui/login.cpp:50
+msgid "Remember Username"
+msgstr "Husk dette brugernavn."
+
+#: src/gui/login.cpp:53 src/gui/register.cpp:75
+msgid "Register"
+msgstr "Registrer"
+
+#: src/gui/menuwindow.cpp:61
+msgid "Status"
+msgstr "Status"
+
+#: src/gui/menuwindow.cpp:64 src/gui/skill.cpp:119
+msgid "Skills"
+msgstr "Færdigheder"
+
+#: src/gui/menuwindow.cpp:65
+msgid "Shortcut"
+msgstr "Genvej"
+
+#: src/gui/menuwindow.cpp:66 src/main.cpp:716
+msgid "Setup"
+msgstr "Opsætning"
+
+#: src/gui/minimap.cpp:34
+msgid "MiniMap"
+msgstr "MiniKort"
+
+#: src/gui/npclistdialog.cpp:35 src/gui/npc_text.cpp:35
+msgid "NPC"
+msgstr "NPC"
+
+#: src/gui/popupmenu.cpp:81
+#, c-format
+msgid "@@trade|Trade With %s@@"
+msgstr "@@trade|Byt Med %s@@"
+
+#: src/gui/popupmenu.cpp:83
+#, c-format
+msgid "@@attack|Attack %s@@"
+msgstr "@@attack|Angrib %s@@"
+
+#: src/gui/popupmenu.cpp:114
+msgid "@@talk|Talk To NPC@@"
+msgstr "@@talk|Snak med NPC@@"
+
+#: src/gui/popupmenu.cpp:124 src/gui/popupmenu.cpp:140
+#: src/gui/popupmenu.cpp:293
+msgid "@@cancel|Cancel@@"
+msgstr "@@cancel|Annuller@@"
+
+#: src/gui/popupmenu.cpp:136
+#, c-format
+msgid "@@pickup|Pick Up %s@@"
+msgstr "@@pickup|Saml Op %s@@"
+
+#: src/gui/popupmenu.cpp:283
+#, fuzzy
+msgid "@@use|Unequip@@"
+msgstr "@@use|Tag på@@"
+
+#: src/gui/popupmenu.cpp:285
+msgid "@@use|Equip@@"
+msgstr "@@use|Tag på@@"
+
+#: src/gui/popupmenu.cpp:288
+msgid "@@use|Use@@"
+msgstr "@@use|Brug@@"
+
+#: src/gui/popupmenu.cpp:290
+msgid "@@drop|Drop@@"
+msgstr "@@drop|Smid@@"
+
+#: src/gui/popupmenu.cpp:291
+msgid "@@description|Description@@"
+msgstr "@@description|Beskrivelse@@"
+
+#: src/gui/register.cpp:67
+msgid "Confirm:"
+msgstr "Bekræft:"
+
+#: src/gui/register.cpp:73
+msgid "Male"
+msgstr "Mand"
+
+#: src/gui/register.cpp:74
+msgid "Female"
+msgstr "Kvinde"
+
+#: src/gui/register.cpp:176
+#, c-format
+msgid "The username needs to be at least %d characters long."
+msgstr "Brugernavnet skal mindst være %d bogstaver langt."
+
+#: src/gui/register.cpp:184
+#, c-format
+msgid "The username needs to be less than %d characters long."
+msgstr "Brugernavnet skal være mindre end %d bogstaver langt."
+
+#: src/gui/register.cpp:192
+#, c-format
+msgid "The password needs to be at least %d characters long."
+msgstr "Adgangskoden skal mindst være %d bogstaver langt."
+
+#: src/gui/register.cpp:200
+#, c-format
+msgid "The password needs to be less than %d characters long."
+msgstr "Adgangskoden skal være mindre end %d bogstaver langt."
+
+#: src/gui/register.cpp:207
+msgid "Passwords do not match."
+msgstr "Adgangskoder stemmer ikke overens."
+
+#: src/gui/register.cpp:227 src/main.cpp:945
+msgid "Error"
+msgstr "Fejl"
+
+#: src/gui/setup_audio.cpp:40
+msgid "Sound"
+msgstr "Lyd"
+
+#: src/gui/setup_audio.cpp:46
+msgid "Sfx volume"
+msgstr "Lydstyrke på effekter"
+
+#: src/gui/setup_audio.cpp:47
+msgid "Music volume"
+msgstr "Lydstyrke på musik"
+
+#: src/gui/setup.cpp:58
+msgid "Apply"
+msgstr "Anvend"
+
+#: src/gui/setup.cpp:58
+msgid "Reset Windows"
+msgstr "Nulstil vinduer"
+
+#: src/gui/setup.cpp:79
+msgid "Video"
+msgstr "Video"
+
+#: src/gui/setup.cpp:83
+msgid "Audio"
+msgstr "Lyd"
+
+#: src/gui/setup.cpp:87
+msgid "Joystick"
+msgstr "Joystick"
+
+#: src/gui/setup.cpp:91
+msgid "Keyboard"
+msgstr "Tastatur"
+
+#: src/gui/setup.cpp:95
+msgid "Players"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:36 src/gui/setup_joystick.cpp:70
+msgid "Press the button to start calibration"
+msgstr "Tryk på knappen for at starte justeringen."
+
+#: src/gui/setup_joystick.cpp:37 src/gui/setup_joystick.cpp:68
+msgid "Calibrate"
+msgstr "Justering"
+
+#: src/gui/setup_joystick.cpp:38
+msgid "Enable joystick"
+msgstr "Aktiver joystick"
+
+#: src/gui/setup_joystick.cpp:73
+msgid "Stop"
+msgstr "Stop"
+
+#: src/gui/setup_joystick.cpp:74
+msgid "Rotate the stick"
+msgstr "Roter joystick"
+
+#: src/gui/setup_keyboard.cpp:88
+msgid "Assign"
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:94
+#, fuzzy
+msgid "Default"
+msgstr "Slet"
+
+#: src/gui/setup_keyboard.cpp:115
+msgid "Key Conflict(s) Detected."
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:116
+msgid "Resolve them, or gameplay may result in strange behaviour."
+msgstr ""
+
+#: src/gui/setup_players.cpp:53
+#, fuzzy
+msgid "Name"
+msgstr "Navn:"
+
+#: src/gui/setup_players.cpp:54
+msgid "Relation"
+msgstr ""
+
+#: src/gui/setup_players.cpp:58
+msgid "Neutral"
+msgstr ""
+
+#: src/gui/setup_players.cpp:59
+msgid "Friend"
+msgstr ""
+
+#: src/gui/setup_players.cpp:60
+msgid "Disregarded"
+msgstr ""
+
+#: src/gui/setup_players.cpp:61
+msgid "Ignored"
+msgstr ""
+
+#: src/gui/setup_players.cpp:214
+msgid "Save player list"
+msgstr ""
+
+#: src/gui/setup_players.cpp:216
+msgid "Allow trading"
+msgstr ""
+
+#: src/gui/setup_players.cpp:218
+msgid "Allow whispers"
+msgstr ""
+
+#: src/gui/setup_players.cpp:245
+msgid "When ignoring:"
+msgstr ""
+
+#: src/gui/setup_video.cpp:112
+msgid "Full screen"
+msgstr "Fuld Skærm"
+
+#: src/gui/setup_video.cpp:113
+msgid "OpenGL"
+msgstr "OpenGL"
+
+#: src/gui/setup_video.cpp:114
+msgid "Custom cursor"
+msgstr "Brugerdefineret Musepil"
+
+#: src/gui/setup_video.cpp:116
+msgid "FPS Limit:"
+msgstr "FPS grænse:"
+
+#: src/gui/setup_video.cpp:135
+msgid "Gui opacity"
+msgstr "Gennemsigtighed"
+
+#: src/gui/setup_video.cpp:192
+msgid "Scroll radius"
+msgstr "Følsomhed på mus"
+
+#: src/gui/setup_video.cpp:200
+msgid "Scroll laziness"
+msgstr "Acceleration på mus"
+
+#: src/gui/setup_video.cpp:208
+msgid "Ambient FX"
+msgstr "Omgivende FX"
+
+#: src/gui/setup_video.cpp:215 src/gui/setup_video.cpp:412
+msgid "off"
+msgstr "fra"
+
+#: src/gui/setup_video.cpp:218 src/gui/setup_video.cpp:234
+#: src/gui/setup_video.cpp:415 src/gui/setup_video.cpp:429
+msgid "low"
+msgstr "lav"
+
+#: src/gui/setup_video.cpp:221 src/gui/setup_video.cpp:240
+#: src/gui/setup_video.cpp:418 src/gui/setup_video.cpp:435
+msgid "high"
+msgstr "høj"
+
+#: src/gui/setup_video.cpp:227
+msgid "Particle Detail"
+msgstr ""
+
+#: src/gui/setup_video.cpp:237 src/gui/setup_video.cpp:432
+msgid "medium"
+msgstr ""
+
+#: src/gui/setup_video.cpp:243 src/gui/setup_video.cpp:438
+msgid "max"
+msgstr ""
+
+#: src/gui/setup_video.cpp:309
+msgid "Switching to full screen"
+msgstr "Skifter til fuld skærm"
+
+#: src/gui/setup_video.cpp:310
+msgid "Restart needed for changes to take effect."
+msgstr "Ændringerne kræver at du genstarter klienten."
+
+#: src/gui/setup_video.cpp:322
+msgid "Changing OpenGL"
+msgstr "Skrifter til OpenGL"
+
+#: src/gui/setup_video.cpp:323
+msgid "Applying change to OpenGL requires restart."
+msgstr "Ændringerne til OpenGL kræver at du genstarter klienten."
+
+#: src/gui/skill.cpp:79
+msgid "Mystery Skill"
+msgstr ""
+
+#: src/gui/skill.cpp:132 src/gui/skill.cpp:188
+#, c-format
+msgid "Skill points: %d"
+msgstr ""
+
+#: src/gui/skill.cpp:133
+msgid "Up"
+msgstr ""
+
+#: src/gui/status.cpp:52 src/gui/status.cpp:235
+#, fuzzy, c-format
+msgid "Job: %d"
+msgstr "Niveau: %d"
+
+#: src/gui/status.cpp:53 src/gui/status.cpp:238
+#, fuzzy, c-format
+msgid "Money: %d GP"
+msgstr "Penge: %d"
+
+#: src/gui/status.cpp:127
+#, fuzzy
+msgid "Stats"
+msgstr "Status"
+
+#: src/gui/status.cpp:128
+msgid "Total"
+msgstr ""
+
+#: src/gui/status.cpp:129
+msgid "Cost"
+msgstr ""
+
+#: src/gui/status.cpp:132
+#, fuzzy
+msgid "Attack:"
+msgstr "Angrib %+d"
+
+#: src/gui/status.cpp:133
+#, fuzzy
+msgid "Defense:"
+msgstr "Forsvar %+d"
+
+#: src/gui/status.cpp:134
+#, fuzzy
+msgid "M.Attack:"
+msgstr "Angrib %+d"
+
+#: src/gui/status.cpp:135
+#, fuzzy
+msgid "M.Defense:"
+msgstr "Forsvar %+d"
+
+#: src/gui/status.cpp:136
+#, c-format
+msgid "% Accuracy:"
+msgstr ""
+
+#: src/gui/status.cpp:137
+#, c-format
+msgid "% Evade:"
+msgstr ""
+
+#: src/gui/status.cpp:138
+msgid "% Reflex:"
+msgstr ""
+
+#: src/gui/status.cpp:282
+#, fuzzy
+msgid "Strength"
+msgstr "Styrke"
+
+#: src/gui/status.cpp:283
+#, fuzzy
+msgid "Agility"
+msgstr "Adræthed"
+
+#: src/gui/status.cpp:284
+#, fuzzy
+msgid "Vitality"
+msgstr "Helbred:"
+
+#: src/gui/status.cpp:285
+#, fuzzy
+msgid "Intelligence"
+msgstr "Intelligens:"
+
+#: src/gui/status.cpp:286
+#, fuzzy
+msgid "Dexterity"
+msgstr "Behændighed:"
+
+#: src/gui/status.cpp:287
+msgid "Luck"
+msgstr ""
+
+#: src/gui/status.cpp:305
+#, c-format
+msgid "Remaining Status Points: %d"
+msgstr ""
+
+#: src/gui/trade.cpp:61
+msgid "Add"
+msgstr "Tilføj"
+
+#: src/gui/trade.cpp:64
+msgid "Trade"
+msgstr ""
+
+#: src/gui/trade.cpp:80 src/gui/trade.cpp:156 src/gui/trade.cpp:204
+#, c-format
+msgid "You get %d GP."
+msgstr "Du får %d GP."
+
+#: src/gui/trade.cpp:81
+msgid "You give:"
+msgstr "Du giver:"
+
+#: src/gui/trade.cpp:283
+msgid "Failed adding item. You can not overlap one kind of item on the window."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:93
+msgid "Updating..."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:119
+msgid "Play"
+msgstr ""
+
+#: src/gui/updatewindow.cpp:525
+msgid "Completed"
+msgstr ""
+
+#: src/resources/itemdb.cpp:99
+msgid "Unnamed"
+msgstr ""
+
+#: src/main.cpp:769
+msgid "Got disconnected from server!"
+msgstr ""
+
+#: src/main.cpp:956
+#, fuzzy
+msgid "Connecting to map server..."
+msgstr "Opretter forbindelse..."
+
+#: src/main.cpp:964
+msgid "Connecting to character server..."
+msgstr ""
+
+#: src/main.cpp:972
+msgid "Connecting to account server..."
+msgstr ""
+
+#~ msgid "Account and Character Management"
+#~ msgstr "Ret konto og figurer"
+
+#~ msgid "Unregister"
+#~ msgstr "Frameld"
+
+#~ msgid "Change Password"
+#~ msgstr "Skift adgangskode"
+
+#~ msgid "Change Email Address"
+#~ msgstr "Skift e-mail adresse"
+
+#~ msgid "Account: %s"
+#~ msgstr "Bruger: %s"
+
+#~ msgid "Willpower:"
+#~ msgstr "Viljestyrke:"
+
+#~ msgid "Please distribute %d points"
+#~ msgstr "Du mangler at fordele %d points"
+
+#~ msgid "Your name needs to be at least 4 characters."
+#~ msgstr "Dit navn skal være mindst 4 bogstaver langt."
+
+#~ msgid "Character stats OK"
+#~ msgstr "Du har brugt alle dine points"
+
+#~ msgid "Please remove %d points"
+#~ msgstr "Du skal fjerne %d points"
+
+#~ msgid "Split"
+#~ msgstr "Opdel"
+
+#~ msgid "Select amount of items to split."
+#~ msgstr "Vælg hvor mange du vil opdele."
+
+#~ msgid "Guilds"
+#~ msgstr "Gilder"
+
+#~ msgid "@@guild|Invite %s@@"
+#~ msgstr "@@guild|Inviter %s@@"
+
+#~ msgid "@@party|Invite %s to join your party@@"
+#~ msgstr "@@party|Inviter %s med i dit party@@"
+
+#~ msgid "@@split|Split@@"
+#~ msgstr "@@split|Opdel@@"
+
+#~ msgid "Switch server"
+#~ msgstr "Skift server"
+
+#~ msgid "Switch character"
+#~ msgstr "Skift figur"
+
+#~ msgid "Email:"
+#~ msgstr "E-mail:"
+
+#~ msgid "Choose your Mana World Server"
+#~ msgstr "Vælg din Mana World Server"
+
+#~ msgid "Port:"
+#~ msgstr "Port:"
+
+#~ msgid "Please type both the address and the port of a server."
+#~ msgstr "Skriv både adressen og porten på serveren."
+
+#~ msgid "Visible names"
+#~ msgstr "Vis navne"
+
+#~ msgid "Propose trade"
+#~ msgstr "Foreslå handel"
+
+#~ msgid "Confirm trade"
+#~ msgstr "Bekræft handel"
+
+#~ msgid "Change"
+#~ msgstr "Ændre"
+
+#~ msgid "HP %+d"
+#~ msgstr "HP %+d"
+
+#~ msgid "MP %+d"
+#~ msgstr "MP %+d"
+
+#~ msgid "Confirm"
+#~ msgstr "Bekræft"
+
+#~ msgid "Charisma:"
+#~ msgstr "Udstråling"
+
+#~ msgid "Total Weight: %d - Maximum Weight: %d"
+#~ msgstr "Total Vægt: %d - Maximum Vægt: %d"
+
+#~ msgid "Keep"
+#~ msgstr "Behold"
diff --git a/po/de.po b/po/de.po
new file mode 100644
index 00000000..6e71b451
--- /dev/null
+++ b/po/de.po
@@ -0,0 +1,1011 @@
+# German translation of The Mana World.
+# Copyright (C) 2007 The Mana World Development Team
+# This file is distributed under the same license as the The Mana World package.
+# Matthias Hartmann <hartmann.matthias@gmail.com>, 2007.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: The Mana World 0.1.0\n"
+"Report-Msgid-Bugs-To: themanaworld-devel@lists.sourceforge.net\n"
+"POT-Creation-Date: 2009-01-08 22:10+0100\n"
+"PO-Revision-Date: 2008-10-13 00:25+0000\n"
+"Last-Translator: Aeneas Jaißle <Unknown>\n"
+"Language-Team: German\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-01-06 12:40+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#: src/gui/buy.cpp:43 src/gui/buy.cpp:61 src/gui/buysell.cpp:35
+msgid "Buy"
+msgstr "Kaufen"
+
+#: src/gui/buy.cpp:58 src/gui/buy.cpp:239 src/gui/sell.cpp:65
+#: src/gui/sell.cpp:259
+#, c-format
+msgid "Price: %d GP / Total: %d GP"
+msgstr "Preis: %d GP / Summe: %d GP"
+
+#: src/gui/buy.cpp:62 src/gui/sell.cpp:69
+msgid "Quit"
+msgstr "Beenden"
+
+#: src/gui/buy.cpp:63 src/gui/buy.cpp:206 src/gui/buy.cpp:224
+#: src/gui/inventorywindow.cpp:150 src/gui/inventorywindow.cpp:160
+#: src/gui/sell.cpp:70 src/gui/sell.cpp:230 src/gui/sell.cpp:244
+#: src/gui/trade.cpp:94 src/gui/trade.cpp:266
+#, c-format
+msgid "Description: %s"
+msgstr "Beschreibung: %s"
+
+#: src/gui/buy.cpp:64 src/gui/buy.cpp:208 src/gui/buy.cpp:225
+#: src/gui/inventorywindow.cpp:149 src/gui/inventorywindow.cpp:158
+#: src/gui/sell.cpp:71 src/gui/sell.cpp:232 src/gui/sell.cpp:245
+#, c-format
+msgid "Effect: %s"
+msgstr "Effekt: %s"
+
+#: src/gui/buysell.cpp:31
+#, fuzzy
+msgid "Shop"
+msgstr "Stopp"
+
+#: src/gui/buysell.cpp:35 src/gui/sell.cpp:48 src/gui/sell.cpp:68
+msgid "Sell"
+msgstr "Verkaufen"
+
+#: src/gui/buysell.cpp:35 src/gui/char_select.cpp:85
+#: src/gui/char_select.cpp:258 src/gui/char_server.cpp:60
+#: src/gui/connection.cpp:47 src/gui/item_amount.cpp:61 src/gui/login.cpp:52
+#: src/gui/npclistdialog.cpp:45 src/gui/register.cpp:76 src/gui/setup.cpp:58
+#: src/gui/trade.cpp:63 src/gui/updatewindow.cpp:118
+msgid "Cancel"
+msgstr "Abbrechen"
+
+#: src/gui/char_select.cpp:63
+msgid "Confirm Character Delete"
+msgstr "Bestätige Charakter-Löschung"
+
+#: src/gui/char_select.cpp:64
+msgid "Are you sure you want to delete this character?"
+msgstr "Bist du sicher, dass du diesen Charakter löschen möchtest?"
+
+#: src/gui/char_select.cpp:81
+msgid "Select Character"
+msgstr "Spielfigur auswählen"
+
+#: src/gui/char_select.cpp:84 src/gui/item_amount.cpp:60 src/gui/login.cpp:51
+#: src/gui/ok_dialog.cpp:37 src/gui/trade.cpp:62
+msgid "Ok"
+msgstr "Ok"
+
+#: src/gui/char_select.cpp:86
+msgid "New"
+msgstr "Neu"
+
+#: src/gui/char_select.cpp:87 src/gui/setup_players.cpp:220
+msgid "Delete"
+msgstr "Löschen"
+
+#: src/gui/char_select.cpp:88
+msgid "Previous"
+msgstr "Zurück"
+
+#: src/gui/char_select.cpp:89
+msgid "Next"
+msgstr "Weiter"
+
+#: src/gui/char_select.cpp:91 src/gui/char_select.cpp:171
+#: src/gui/char_select.cpp:183 src/gui/inventorywindow.cpp:148
+#: src/gui/inventorywindow.cpp:156 src/gui/trade.cpp:92 src/gui/trade.cpp:264
+#, c-format
+msgid "Name: %s"
+msgstr "Name : %s"
+
+#: src/gui/char_select.cpp:92 src/gui/char_select.cpp:172
+#: src/gui/char_select.cpp:184 src/gui/status.cpp:51 src/gui/status.cpp:232
+#, c-format
+msgid "Level: %d"
+msgstr "Stufe: %d"
+
+#: src/gui/char_select.cpp:93 src/gui/char_select.cpp:173
+#: src/gui/char_select.cpp:185
+#, fuzzy, c-format
+msgid "Job Level: %d"
+msgstr "Stufe: %d"
+
+#: src/gui/char_select.cpp:94 src/gui/char_select.cpp:186
+#, c-format
+msgid "Money: %d"
+msgstr "Geld: %d"
+
+#: src/gui/char_select.cpp:174
+#, c-format
+msgid "Gold: %d"
+msgstr ""
+
+#: src/gui/char_select.cpp:243
+msgid "Create Character"
+msgstr "Charakter erstellen"
+
+#: src/gui/char_select.cpp:250 src/gui/login.cpp:44 src/gui/register.cpp:65
+msgid "Name:"
+msgstr "Name :"
+
+#: src/gui/char_select.cpp:253
+msgid "Hair Color:"
+msgstr "Haarfarbe"
+
+#: src/gui/char_select.cpp:256
+msgid "Hair Style:"
+msgstr "Frisur"
+
+#: src/gui/char_select.cpp:257
+msgid "Create"
+msgstr "Erstellen"
+
+#: src/gui/char_server.cpp:52
+#, fuzzy
+msgid "Select Server"
+msgstr "Spielfigur auswählen"
+
+#: src/gui/char_server.cpp:59 src/gui/npclistdialog.cpp:44
+#: src/gui/npc_text.cpp:46
+msgid "OK"
+msgstr ""
+
+#: src/gui/chat.cpp:122
+msgid "Global announcement:"
+msgstr ""
+
+#: src/gui/chat.cpp:125
+#, c-format
+msgid "Global announcement from %s:"
+msgstr ""
+
+#: src/gui/chat.cpp:140 src/gui/login.cpp:46 src/gui/register.cpp:68
+msgid "Server:"
+msgstr "Server:"
+
+#: src/gui/chat.cpp:146
+#, c-format
+msgid "%s whispers:"
+msgstr ""
+
+#: src/gui/chat.cpp:283
+#, c-format
+msgid "Whispering to %s: %s"
+msgstr ""
+
+#: src/gui/chat.cpp:356
+msgid "Unknown command"
+msgstr ""
+
+#: src/gui/chat.cpp:366
+msgid "Trade failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:369
+msgid "Emote failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:372
+msgid "Sit failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:375
+msgid "Chat creating failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:378
+msgid "Could not join party!"
+msgstr ""
+
+#: src/gui/chat.cpp:381
+msgid "Cannot shout!"
+msgstr ""
+
+#: src/gui/chat.cpp:389
+msgid "You have not yet reached a high enough lvl!"
+msgstr ""
+
+#: src/gui/chat.cpp:392
+msgid "Insufficient HP!"
+msgstr ""
+
+#: src/gui/chat.cpp:395
+msgid "Insufficient SP!"
+msgstr ""
+
+#: src/gui/chat.cpp:398
+msgid "You have no memos!"
+msgstr ""
+
+#: src/gui/chat.cpp:401
+msgid "You cannot do that right now!"
+msgstr ""
+
+#: src/gui/chat.cpp:404
+msgid "Seems you need more Zeny... ;-)"
+msgstr ""
+
+#: src/gui/chat.cpp:407
+msgid "You cannot use this skill with that kind of weapon!"
+msgstr ""
+
+#: src/gui/chat.cpp:410
+msgid "You need another red gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:413
+msgid "You need another blue gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:416
+msgid "You're carrying to much to do this!"
+msgstr ""
+
+#: src/gui/chat.cpp:419
+msgid "Huh? What's that?"
+msgstr ""
+
+#: src/gui/chat.cpp:425
+msgid "Warp failed..."
+msgstr ""
+
+#: src/gui/chat.cpp:428
+msgid "Could not steal anything..."
+msgstr ""
+
+#: src/gui/chat.cpp:431
+msgid "Poison had no effect..."
+msgstr ""
+
+#: src/gui/chat.cpp:496
+msgid "-- Help --"
+msgstr ""
+
+#: src/gui/chat.cpp:499
+msgid "/announce: Global announcement (GM only)"
+msgstr ""
+
+#: src/gui/chat.cpp:500
+msgid "/clear: Clears this window"
+msgstr ""
+
+#: src/gui/chat.cpp:501
+msgid "/help: Display this help"
+msgstr ""
+
+#: src/gui/chat.cpp:502
+msgid "/where: Display map name"
+msgstr ""
+
+#: src/gui/chat.cpp:503
+msgid "/whisper <nick> <message>: Sends a private <message> to <nick>"
+msgstr ""
+
+#: src/gui/chat.cpp:505
+msgid "/w <nick> <message>: Short form for /whisper"
+msgstr ""
+
+#: src/gui/chat.cpp:506
+msgid "/who: Display number of online users"
+msgstr ""
+
+#: src/gui/chat.cpp:507
+msgid "For more information, type /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:512
+msgid "Command: /announce <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:513
+msgid "*** only available to a GM ***"
+msgstr ""
+
+#: src/gui/chat.cpp:514
+msgid "This command sends the message <msg> to all players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:520
+msgid "Command: /clear"
+msgstr ""
+
+#: src/gui/chat.cpp:521
+msgid "This command clears the chat log of previous chat."
+msgstr ""
+
+#: src/gui/chat.cpp:527
+msgid "Command: /help"
+msgstr ""
+
+#: src/gui/chat.cpp:528
+msgid "This command displays a list of all commands available."
+msgstr ""
+
+#: src/gui/chat.cpp:530
+msgid "Command: /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:531
+msgid "This command displays help on <command>."
+msgstr ""
+
+#: src/gui/chat.cpp:536
+msgid "Command: /where"
+msgstr ""
+
+#: src/gui/chat.cpp:537
+msgid "This command displays the name of the current map."
+msgstr ""
+
+#: src/gui/chat.cpp:543
+msgid "Command: /whisper <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:544
+msgid "Command: /w <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:545
+msgid "This command sends the message <msg> to <nick>."
+msgstr ""
+
+#: src/gui/chat.cpp:547
+msgid "If the <nick> has spaces in it, enclose it in double quotes (\")."
+msgstr ""
+
+#: src/gui/chat.cpp:553
+msgid "Command: /who"
+msgstr ""
+
+#: src/gui/chat.cpp:554
+msgid "This command displays the number of players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:558
+msgid "Unknown command."
+msgstr ""
+
+#: src/gui/chat.cpp:559
+msgid "Type /help for a list of commands."
+msgstr ""
+
+#: src/gui/confirm_dialog.cpp:35
+msgid "Yes"
+msgstr "Ja"
+
+#: src/gui/confirm_dialog.cpp:36
+msgid "No"
+msgstr "Nein"
+
+#: src/gui/connection.cpp:49 src/gui/updatewindow.cpp:116
+msgid "Connecting..."
+msgstr "Verbinde..."
+
+#: src/gui/equipmentwindow.cpp:38 src/gui/menuwindow.cpp:62
+msgid "Equipment"
+msgstr "Ausrüstung"
+
+#: src/gui/help.cpp:33
+msgid "Help"
+msgstr ""
+
+#: src/gui/help.cpp:41
+msgid "Close"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:46 src/gui/menuwindow.cpp:63
+msgid "Inventory"
+msgstr "Inventar"
+
+#: src/gui/inventorywindow.cpp:56 src/gui/inventorywindow.cpp:232
+#: src/gui/skill.cpp:134
+msgid "Use"
+msgstr "Benutzen"
+
+#: src/gui/inventorywindow.cpp:57
+msgid "Drop"
+msgstr "Wegwerfen"
+
+#: src/gui/inventorywindow.cpp:99
+#, c-format
+msgid "Weight: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:104
+#, c-format
+msgid "Slots used: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:225
+msgid "Unequip"
+msgstr "Ablegen"
+
+#: src/gui/inventorywindow.cpp:228
+msgid "Equip"
+msgstr "Ausrüsten"
+
+#: src/gui/item_amount.cpp:76
+msgid "Select amount of items to trade."
+msgstr "Wähle aus, wieviele Gegenstände Du tauschen möchtest."
+
+#: src/gui/item_amount.cpp:80
+msgid "Select amount of items to drop."
+msgstr "Wähle aus, wieviele Gegenstände Du wegwerfen möchtest."
+
+#: src/gui/login.cpp:42
+msgid "Login"
+msgstr "Anmelden"
+
+#: src/gui/login.cpp:45 src/gui/register.cpp:66
+msgid "Password:"
+msgstr "Passwort:"
+
+#: src/gui/login.cpp:50
+msgid "Remember Username"
+msgstr "Benutzernamen merken"
+
+#: src/gui/login.cpp:53 src/gui/register.cpp:75
+msgid "Register"
+msgstr "Registrieren"
+
+#: src/gui/menuwindow.cpp:61
+msgid "Status"
+msgstr "Status"
+
+#: src/gui/menuwindow.cpp:64 src/gui/skill.cpp:119
+msgid "Skills"
+msgstr "Fertigkeiten"
+
+#: src/gui/menuwindow.cpp:65
+msgid "Shortcut"
+msgstr "Tastenkürzel"
+
+#: src/gui/menuwindow.cpp:66 src/main.cpp:716
+msgid "Setup"
+msgstr "Einstellungen"
+
+#: src/gui/minimap.cpp:34
+msgid "MiniMap"
+msgstr "Ãœbersichtskarte"
+
+#: src/gui/npclistdialog.cpp:35 src/gui/npc_text.cpp:35
+msgid "NPC"
+msgstr "NPC"
+
+#: src/gui/popupmenu.cpp:81
+#, c-format
+msgid "@@trade|Trade With %s@@"
+msgstr "@@trade|Mit %s handeln@@"
+
+#: src/gui/popupmenu.cpp:83
+#, c-format
+msgid "@@attack|Attack %s@@"
+msgstr "@@attack|%s angreifen@@"
+
+#: src/gui/popupmenu.cpp:114
+msgid "@@talk|Talk To NPC@@"
+msgstr "@@talk|Mit NSC reden@@"
+
+#: src/gui/popupmenu.cpp:124 src/gui/popupmenu.cpp:140
+#: src/gui/popupmenu.cpp:293
+msgid "@@cancel|Cancel@@"
+msgstr "@@cancel|Abbrechen@@"
+
+#: src/gui/popupmenu.cpp:136
+#, c-format
+msgid "@@pickup|Pick Up %s@@"
+msgstr "@@pickup|%s aufheben@@"
+
+#: src/gui/popupmenu.cpp:283
+#, fuzzy
+msgid "@@use|Unequip@@"
+msgstr "@@use|Ausrüsten@@"
+
+#: src/gui/popupmenu.cpp:285
+msgid "@@use|Equip@@"
+msgstr "@@use|Ausrüsten@@"
+
+#: src/gui/popupmenu.cpp:288
+msgid "@@use|Use@@"
+msgstr "@@use|Nutzen@@"
+
+#: src/gui/popupmenu.cpp:290
+msgid "@@drop|Drop@@"
+msgstr "@@drop|Fallen lassen@@"
+
+#: src/gui/popupmenu.cpp:291
+msgid "@@description|Description@@"
+msgstr "@@description|Beschreibung@@"
+
+#: src/gui/register.cpp:67
+msgid "Confirm:"
+msgstr "Bestätigen:"
+
+#: src/gui/register.cpp:73
+msgid "Male"
+msgstr "Männlich"
+
+#: src/gui/register.cpp:74
+msgid "Female"
+msgstr "Weiblich"
+
+#: src/gui/register.cpp:176
+#, c-format
+msgid "The username needs to be at least %d characters long."
+msgstr "Der Nutzername muss aus mindestens %d Zeichen bestehen."
+
+#: src/gui/register.cpp:184
+#, c-format
+msgid "The username needs to be less than %d characters long."
+msgstr "Der Nutzername muss kürzer als %d Zeichen sein."
+
+#: src/gui/register.cpp:192
+#, c-format
+msgid "The password needs to be at least %d characters long."
+msgstr "Das Passwort muss aus mindestens %d bestehen."
+
+#: src/gui/register.cpp:200
+#, c-format
+msgid "The password needs to be less than %d characters long."
+msgstr "Das Passwort muss kürzer als %d Zeichen sein."
+
+#: src/gui/register.cpp:207
+msgid "Passwords do not match."
+msgstr "Passwörter stimmen nicht überein."
+
+#: src/gui/register.cpp:227 src/main.cpp:945
+msgid "Error"
+msgstr "Fehler"
+
+#: src/gui/setup_audio.cpp:40
+msgid "Sound"
+msgstr "Ton"
+
+#: src/gui/setup_audio.cpp:46
+msgid "Sfx volume"
+msgstr "Lautstärke der Klangeffekte"
+
+#: src/gui/setup_audio.cpp:47
+msgid "Music volume"
+msgstr "Latustärke der Musik"
+
+#: src/gui/setup.cpp:58
+msgid "Apply"
+msgstr "Anwenden"
+
+#: src/gui/setup.cpp:58
+msgid "Reset Windows"
+msgstr "Fenster zurücksetzen"
+
+#: src/gui/setup.cpp:79
+msgid "Video"
+msgstr "Video"
+
+#: src/gui/setup.cpp:83
+msgid "Audio"
+msgstr "Audio"
+
+#: src/gui/setup.cpp:87
+msgid "Joystick"
+msgstr "Joystick"
+
+#: src/gui/setup.cpp:91
+msgid "Keyboard"
+msgstr "Tastatur"
+
+#: src/gui/setup.cpp:95
+msgid "Players"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:36 src/gui/setup_joystick.cpp:70
+msgid "Press the button to start calibration"
+msgstr "Knopf drücken um die Kalibrierung zu starten"
+
+#: src/gui/setup_joystick.cpp:37 src/gui/setup_joystick.cpp:68
+msgid "Calibrate"
+msgstr "Kalibrieren"
+
+#: src/gui/setup_joystick.cpp:38
+msgid "Enable joystick"
+msgstr "Joystick aktivieren"
+
+#: src/gui/setup_joystick.cpp:73
+msgid "Stop"
+msgstr "Stopp"
+
+#: src/gui/setup_joystick.cpp:74
+msgid "Rotate the stick"
+msgstr "Kreise den Steuerknüppel"
+
+#: src/gui/setup_keyboard.cpp:88
+msgid "Assign"
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:94
+#, fuzzy
+msgid "Default"
+msgstr "Löschen"
+
+#: src/gui/setup_keyboard.cpp:115
+msgid "Key Conflict(s) Detected."
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:116
+msgid "Resolve them, or gameplay may result in strange behaviour."
+msgstr ""
+
+#: src/gui/setup_players.cpp:53
+#, fuzzy
+msgid "Name"
+msgstr "Name :"
+
+#: src/gui/setup_players.cpp:54
+msgid "Relation"
+msgstr ""
+
+#: src/gui/setup_players.cpp:58
+msgid "Neutral"
+msgstr ""
+
+#: src/gui/setup_players.cpp:59
+msgid "Friend"
+msgstr ""
+
+#: src/gui/setup_players.cpp:60
+msgid "Disregarded"
+msgstr ""
+
+#: src/gui/setup_players.cpp:61
+msgid "Ignored"
+msgstr ""
+
+#: src/gui/setup_players.cpp:214
+msgid "Save player list"
+msgstr ""
+
+#: src/gui/setup_players.cpp:216
+msgid "Allow trading"
+msgstr ""
+
+#: src/gui/setup_players.cpp:218
+msgid "Allow whispers"
+msgstr ""
+
+#: src/gui/setup_players.cpp:245
+msgid "When ignoring:"
+msgstr ""
+
+#: src/gui/setup_video.cpp:112
+msgid "Full screen"
+msgstr "Vollbild"
+
+#: src/gui/setup_video.cpp:113
+msgid "OpenGL"
+msgstr "OpenGL"
+
+#: src/gui/setup_video.cpp:114
+msgid "Custom cursor"
+msgstr "Benutzerdefinierten Zeiger"
+
+#: src/gui/setup_video.cpp:116
+msgid "FPS Limit:"
+msgstr "FPS-Limit:"
+
+#: src/gui/setup_video.cpp:135
+msgid "Gui opacity"
+msgstr "GUI Transparenz"
+
+#: src/gui/setup_video.cpp:192
+msgid "Scroll radius"
+msgstr "Scroll-Radius"
+
+#: src/gui/setup_video.cpp:200
+msgid "Scroll laziness"
+msgstr "Scroll-Trägheit"
+
+#: src/gui/setup_video.cpp:208
+msgid "Ambient FX"
+msgstr "Hintergrundeffekte"
+
+#: src/gui/setup_video.cpp:215 src/gui/setup_video.cpp:412
+msgid "off"
+msgstr "Aus"
+
+#: src/gui/setup_video.cpp:218 src/gui/setup_video.cpp:234
+#: src/gui/setup_video.cpp:415 src/gui/setup_video.cpp:429
+msgid "low"
+msgstr "Niedrig"
+
+#: src/gui/setup_video.cpp:221 src/gui/setup_video.cpp:240
+#: src/gui/setup_video.cpp:418 src/gui/setup_video.cpp:435
+msgid "high"
+msgstr "Hoch"
+
+#: src/gui/setup_video.cpp:227
+msgid "Particle Detail"
+msgstr ""
+
+#: src/gui/setup_video.cpp:237 src/gui/setup_video.cpp:432
+msgid "medium"
+msgstr ""
+
+#: src/gui/setup_video.cpp:243 src/gui/setup_video.cpp:438
+msgid "max"
+msgstr ""
+
+#: src/gui/setup_video.cpp:309
+msgid "Switching to full screen"
+msgstr "Wechsle zum Vollbildmodus"
+
+#: src/gui/setup_video.cpp:310
+msgid "Restart needed for changes to take effect."
+msgstr "Änderungen treten erst nach einem Neustart des Programmes in Kraft."
+
+#: src/gui/setup_video.cpp:322
+msgid "Changing OpenGL"
+msgstr "Ändere OpenGL"
+
+#: src/gui/setup_video.cpp:323
+msgid "Applying change to OpenGL requires restart."
+msgstr ""
+"Änderungen an OpenGL werden erst nach einem Neustart der Anwendung "
+"übernommen."
+
+#: src/gui/skill.cpp:79
+msgid "Mystery Skill"
+msgstr ""
+
+#: src/gui/skill.cpp:132 src/gui/skill.cpp:188
+#, c-format
+msgid "Skill points: %d"
+msgstr ""
+
+#: src/gui/skill.cpp:133
+msgid "Up"
+msgstr ""
+
+#: src/gui/status.cpp:52 src/gui/status.cpp:235
+#, fuzzy, c-format
+msgid "Job: %d"
+msgstr "Stufe: %d"
+
+#: src/gui/status.cpp:53 src/gui/status.cpp:238
+#, fuzzy, c-format
+msgid "Money: %d GP"
+msgstr "Geld: %d"
+
+#: src/gui/status.cpp:127
+#, fuzzy
+msgid "Stats"
+msgstr "Status"
+
+#: src/gui/status.cpp:128
+msgid "Total"
+msgstr ""
+
+#: src/gui/status.cpp:129
+msgid "Cost"
+msgstr ""
+
+#: src/gui/status.cpp:132
+#, fuzzy
+msgid "Attack:"
+msgstr "Angriff %+d"
+
+#: src/gui/status.cpp:133
+#, fuzzy
+msgid "Defense:"
+msgstr "Verteidigung %+d"
+
+#: src/gui/status.cpp:134
+#, fuzzy
+msgid "M.Attack:"
+msgstr "Angriff %+d"
+
+#: src/gui/status.cpp:135
+#, fuzzy
+msgid "M.Defense:"
+msgstr "Verteidigung %+d"
+
+#: src/gui/status.cpp:136
+#, c-format
+msgid "% Accuracy:"
+msgstr ""
+
+#: src/gui/status.cpp:137
+#, c-format
+msgid "% Evade:"
+msgstr ""
+
+#: src/gui/status.cpp:138
+msgid "% Reflex:"
+msgstr ""
+
+#: src/gui/status.cpp:282
+#, fuzzy
+msgid "Strength"
+msgstr "Stärke:"
+
+#: src/gui/status.cpp:283
+#, fuzzy
+msgid "Agility"
+msgstr "Agilität:"
+
+#: src/gui/status.cpp:284
+#, fuzzy
+msgid "Vitality"
+msgstr "Vitalität:"
+
+#: src/gui/status.cpp:285
+#, fuzzy
+msgid "Intelligence"
+msgstr "Intelligenz:"
+
+#: src/gui/status.cpp:286
+#, fuzzy
+msgid "Dexterity"
+msgstr "Geschicklichkeit:"
+
+#: src/gui/status.cpp:287
+msgid "Luck"
+msgstr ""
+
+#: src/gui/status.cpp:305
+#, c-format
+msgid "Remaining Status Points: %d"
+msgstr ""
+
+#: src/gui/trade.cpp:61
+msgid "Add"
+msgstr "Hinzufügen"
+
+#: src/gui/trade.cpp:64
+msgid "Trade"
+msgstr ""
+
+#: src/gui/trade.cpp:80 src/gui/trade.cpp:156 src/gui/trade.cpp:204
+#, c-format
+msgid "You get %d GP."
+msgstr "Du erhälst %d GP."
+
+#: src/gui/trade.cpp:81
+msgid "You give:"
+msgstr "Du gibst:"
+
+#: src/gui/trade.cpp:283
+msgid "Failed adding item. You can not overlap one kind of item on the window."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:93
+msgid "Updating..."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:119
+msgid "Play"
+msgstr ""
+
+#: src/gui/updatewindow.cpp:525
+msgid "Completed"
+msgstr ""
+
+#: src/resources/itemdb.cpp:99
+msgid "Unnamed"
+msgstr ""
+
+#: src/main.cpp:769
+msgid "Got disconnected from server!"
+msgstr ""
+
+#: src/main.cpp:956
+#, fuzzy
+msgid "Connecting to map server..."
+msgstr "Verbinde..."
+
+#: src/main.cpp:964
+msgid "Connecting to character server..."
+msgstr ""
+
+#: src/main.cpp:972
+msgid "Connecting to account server..."
+msgstr ""
+
+#~ msgid "Account and Character Management"
+#~ msgstr "Account- und Charakterverwaltung"
+
+#~ msgid "Unregister"
+#~ msgstr "Abmelden"
+
+#~ msgid "Change Password"
+#~ msgstr "Kennwort ändern"
+
+#~ msgid "Change Email Address"
+#~ msgstr "Email-Adresse ändern"
+
+#~ msgid "Account: %s"
+#~ msgstr "Account: %s"
+
+#~ msgid "Willpower:"
+#~ msgstr "Willenskraft:"
+
+#~ msgid "Please distribute %d points"
+#~ msgstr "Bitte verteile %d Punkte"
+
+#~ msgid "Your name needs to be at least 4 characters."
+#~ msgstr "Dein Name muss aus mindestens 4 Zeichen bestehen."
+
+#~ msgid "Character stats OK"
+#~ msgstr "Spielfigurattribute OK"
+
+#~ msgid "Please remove %d points"
+#~ msgstr "Bitte entferne %d Punkte"
+
+#~ msgid "Split"
+#~ msgstr "Aufteilen"
+
+#~ msgid "Select amount of items to split."
+#~ msgstr "Wähle aus, wieviel Gegenstände Du aufteilen möchtest."
+
+#~ msgid "Guilds"
+#~ msgstr "Gilden"
+
+#~ msgid "@@guild|Invite %s@@"
+#~ msgstr "@@guild|%s einladen@@"
+
+#~ msgid "@@party|Invite %s to join your party@@"
+#~ msgstr "@@party|%s in deine Gruppe einladen@@"
+
+#~ msgid "@@split|Split@@"
+#~ msgstr "@@split|Aufteilen@@"
+
+#~ msgid "Switch server"
+#~ msgstr "Server wechseln"
+
+#~ msgid "Switch character"
+#~ msgstr "Spielfigur wechseln"
+
+#~ msgid "Email:"
+#~ msgstr "E-Mail:"
+
+#~ msgid "Choose your Mana World Server"
+#~ msgstr "Wähle Deinen Mana World Spielserver"
+
+#~ msgid "Port:"
+#~ msgstr "Port:"
+
+#~ msgid "Please type both the address and the port of a server."
+#~ msgstr "Bitte die Adresse und den Port eines Servers eingeben"
+
+#~ msgid "Visible names"
+#~ msgstr "Sichtbare Namen"
+
+#~ msgid "Propose trade"
+#~ msgstr "Handel vorschlagen"
+
+#~ msgid "Confirm trade"
+#~ msgstr "Handel bestätigen"
+
+#~ msgid "Change"
+#~ msgstr "Ändern"
+
+#~ msgid "HP %+d"
+#~ msgstr "HP %+d"
+
+#~ msgid "MP %+d"
+#~ msgstr "MP %+d"
+
+#~ msgid "Confirm"
+#~ msgstr "Bestätigen"
+
+#~ msgid "Charisma:"
+#~ msgstr "Charisma:"
+
+#~ msgid "Total Weight: %d - Maximum Weight: %d"
+#~ msgstr "Gesamtgewicht : %d - Maximales Gewicht : %d"
+
+#~ msgid "Keep"
+#~ msgstr "Erinnern"
diff --git a/po/en_GB.po b/po/en_GB.po
new file mode 100644
index 00000000..80a6ef41
--- /dev/null
+++ b/po/en_GB.po
@@ -0,0 +1,985 @@
+# English (United Kingdom) translation for tmw
+# Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008
+# This file is distributed under the same license as the tmw package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: tmw\n"
+"Report-Msgid-Bugs-To: themanaworld-devel@lists.sourceforge.net\n"
+"POT-Creation-Date: 2009-01-08 22:10+0100\n"
+"PO-Revision-Date: 2008-05-10 16:51+0000\n"
+"Last-Translator: Me <Glich.Glich@googlemail.com>\n"
+"Language-Team: English (United Kingdom) <en_GB@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-01-06 12:40+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#: src/gui/buy.cpp:43 src/gui/buy.cpp:61 src/gui/buysell.cpp:35
+msgid "Buy"
+msgstr "Buy"
+
+#: src/gui/buy.cpp:58 src/gui/buy.cpp:239 src/gui/sell.cpp:65
+#: src/gui/sell.cpp:259
+#, c-format
+msgid "Price: %d GP / Total: %d GP"
+msgstr "Price: %d GP / Total: %d GP"
+
+#: src/gui/buy.cpp:62 src/gui/sell.cpp:69
+msgid "Quit"
+msgstr "Exit"
+
+#: src/gui/buy.cpp:63 src/gui/buy.cpp:206 src/gui/buy.cpp:224
+#: src/gui/inventorywindow.cpp:150 src/gui/inventorywindow.cpp:160
+#: src/gui/sell.cpp:70 src/gui/sell.cpp:230 src/gui/sell.cpp:244
+#: src/gui/trade.cpp:94 src/gui/trade.cpp:266
+#, c-format
+msgid "Description: %s"
+msgstr "Description: %s"
+
+#: src/gui/buy.cpp:64 src/gui/buy.cpp:208 src/gui/buy.cpp:225
+#: src/gui/inventorywindow.cpp:149 src/gui/inventorywindow.cpp:158
+#: src/gui/sell.cpp:71 src/gui/sell.cpp:232 src/gui/sell.cpp:245
+#, c-format
+msgid "Effect: %s"
+msgstr "Effect: %s"
+
+#: src/gui/buysell.cpp:31
+#, fuzzy
+msgid "Shop"
+msgstr "Stop"
+
+#: src/gui/buysell.cpp:35 src/gui/sell.cpp:48 src/gui/sell.cpp:68
+msgid "Sell"
+msgstr "Sell"
+
+#: src/gui/buysell.cpp:35 src/gui/char_select.cpp:85
+#: src/gui/char_select.cpp:258 src/gui/char_server.cpp:60
+#: src/gui/connection.cpp:47 src/gui/item_amount.cpp:61 src/gui/login.cpp:52
+#: src/gui/npclistdialog.cpp:45 src/gui/register.cpp:76 src/gui/setup.cpp:58
+#: src/gui/trade.cpp:63 src/gui/updatewindow.cpp:118
+msgid "Cancel"
+msgstr "Cancel"
+
+#: src/gui/char_select.cpp:63
+msgid "Confirm Character Delete"
+msgstr ""
+
+#: src/gui/char_select.cpp:64
+msgid "Are you sure you want to delete this character?"
+msgstr "Are you sure you want to delete this character?"
+
+#: src/gui/char_select.cpp:81
+msgid "Select Character"
+msgstr "Select Character"
+
+#: src/gui/char_select.cpp:84 src/gui/item_amount.cpp:60 src/gui/login.cpp:51
+#: src/gui/ok_dialog.cpp:37 src/gui/trade.cpp:62
+msgid "Ok"
+msgstr "Ok"
+
+#: src/gui/char_select.cpp:86
+msgid "New"
+msgstr "New"
+
+#: src/gui/char_select.cpp:87 src/gui/setup_players.cpp:220
+msgid "Delete"
+msgstr "Delete"
+
+#: src/gui/char_select.cpp:88
+msgid "Previous"
+msgstr "Previous"
+
+#: src/gui/char_select.cpp:89
+msgid "Next"
+msgstr "Next"
+
+#: src/gui/char_select.cpp:91 src/gui/char_select.cpp:171
+#: src/gui/char_select.cpp:183 src/gui/inventorywindow.cpp:148
+#: src/gui/inventorywindow.cpp:156 src/gui/trade.cpp:92 src/gui/trade.cpp:264
+#, c-format
+msgid "Name: %s"
+msgstr "Name: %s"
+
+#: src/gui/char_select.cpp:92 src/gui/char_select.cpp:172
+#: src/gui/char_select.cpp:184 src/gui/status.cpp:51 src/gui/status.cpp:232
+#, c-format
+msgid "Level: %d"
+msgstr "Level: %d"
+
+#: src/gui/char_select.cpp:93 src/gui/char_select.cpp:173
+#: src/gui/char_select.cpp:185
+#, fuzzy, c-format
+msgid "Job Level: %d"
+msgstr "Level: %d"
+
+#: src/gui/char_select.cpp:94 src/gui/char_select.cpp:186
+#, c-format
+msgid "Money: %d"
+msgstr "Money: %d"
+
+#: src/gui/char_select.cpp:174
+#, c-format
+msgid "Gold: %d"
+msgstr ""
+
+#: src/gui/char_select.cpp:243
+msgid "Create Character"
+msgstr "Create Character"
+
+#: src/gui/char_select.cpp:250 src/gui/login.cpp:44 src/gui/register.cpp:65
+msgid "Name:"
+msgstr "Name:"
+
+#: src/gui/char_select.cpp:253
+msgid "Hair Color:"
+msgstr "Hair Colour:"
+
+#: src/gui/char_select.cpp:256
+msgid "Hair Style:"
+msgstr "Hair Style:"
+
+#: src/gui/char_select.cpp:257
+msgid "Create"
+msgstr "Create"
+
+#: src/gui/char_server.cpp:52
+#, fuzzy
+msgid "Select Server"
+msgstr "Select Character"
+
+#: src/gui/char_server.cpp:59 src/gui/npclistdialog.cpp:44
+#: src/gui/npc_text.cpp:46
+msgid "OK"
+msgstr ""
+
+#: src/gui/chat.cpp:122
+msgid "Global announcement:"
+msgstr ""
+
+#: src/gui/chat.cpp:125
+#, c-format
+msgid "Global announcement from %s:"
+msgstr ""
+
+#: src/gui/chat.cpp:140 src/gui/login.cpp:46 src/gui/register.cpp:68
+msgid "Server:"
+msgstr "Server:"
+
+#: src/gui/chat.cpp:146
+#, c-format
+msgid "%s whispers:"
+msgstr ""
+
+#: src/gui/chat.cpp:283
+#, c-format
+msgid "Whispering to %s: %s"
+msgstr ""
+
+#: src/gui/chat.cpp:356
+msgid "Unknown command"
+msgstr ""
+
+#: src/gui/chat.cpp:366
+msgid "Trade failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:369
+msgid "Emote failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:372
+msgid "Sit failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:375
+msgid "Chat creating failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:378
+msgid "Could not join party!"
+msgstr ""
+
+#: src/gui/chat.cpp:381
+msgid "Cannot shout!"
+msgstr ""
+
+#: src/gui/chat.cpp:389
+msgid "You have not yet reached a high enough lvl!"
+msgstr ""
+
+#: src/gui/chat.cpp:392
+msgid "Insufficient HP!"
+msgstr ""
+
+#: src/gui/chat.cpp:395
+msgid "Insufficient SP!"
+msgstr ""
+
+#: src/gui/chat.cpp:398
+msgid "You have no memos!"
+msgstr ""
+
+#: src/gui/chat.cpp:401
+msgid "You cannot do that right now!"
+msgstr ""
+
+#: src/gui/chat.cpp:404
+msgid "Seems you need more Zeny... ;-)"
+msgstr ""
+
+#: src/gui/chat.cpp:407
+msgid "You cannot use this skill with that kind of weapon!"
+msgstr ""
+
+#: src/gui/chat.cpp:410
+msgid "You need another red gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:413
+msgid "You need another blue gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:416
+msgid "You're carrying to much to do this!"
+msgstr ""
+
+#: src/gui/chat.cpp:419
+msgid "Huh? What's that?"
+msgstr ""
+
+#: src/gui/chat.cpp:425
+msgid "Warp failed..."
+msgstr ""
+
+#: src/gui/chat.cpp:428
+msgid "Could not steal anything..."
+msgstr ""
+
+#: src/gui/chat.cpp:431
+msgid "Poison had no effect..."
+msgstr ""
+
+#: src/gui/chat.cpp:496
+msgid "-- Help --"
+msgstr ""
+
+#: src/gui/chat.cpp:499
+msgid "/announce: Global announcement (GM only)"
+msgstr ""
+
+#: src/gui/chat.cpp:500
+msgid "/clear: Clears this window"
+msgstr ""
+
+#: src/gui/chat.cpp:501
+msgid "/help: Display this help"
+msgstr ""
+
+#: src/gui/chat.cpp:502
+msgid "/where: Display map name"
+msgstr ""
+
+#: src/gui/chat.cpp:503
+msgid "/whisper <nick> <message>: Sends a private <message> to <nick>"
+msgstr ""
+
+#: src/gui/chat.cpp:505
+msgid "/w <nick> <message>: Short form for /whisper"
+msgstr ""
+
+#: src/gui/chat.cpp:506
+msgid "/who: Display number of online users"
+msgstr ""
+
+#: src/gui/chat.cpp:507
+msgid "For more information, type /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:512
+msgid "Command: /announce <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:513
+msgid "*** only available to a GM ***"
+msgstr ""
+
+#: src/gui/chat.cpp:514
+msgid "This command sends the message <msg> to all players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:520
+msgid "Command: /clear"
+msgstr ""
+
+#: src/gui/chat.cpp:521
+msgid "This command clears the chat log of previous chat."
+msgstr ""
+
+#: src/gui/chat.cpp:527
+msgid "Command: /help"
+msgstr ""
+
+#: src/gui/chat.cpp:528
+msgid "This command displays a list of all commands available."
+msgstr ""
+
+#: src/gui/chat.cpp:530
+msgid "Command: /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:531
+msgid "This command displays help on <command>."
+msgstr ""
+
+#: src/gui/chat.cpp:536
+msgid "Command: /where"
+msgstr ""
+
+#: src/gui/chat.cpp:537
+msgid "This command displays the name of the current map."
+msgstr ""
+
+#: src/gui/chat.cpp:543
+msgid "Command: /whisper <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:544
+msgid "Command: /w <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:545
+msgid "This command sends the message <msg> to <nick>."
+msgstr ""
+
+#: src/gui/chat.cpp:547
+msgid "If the <nick> has spaces in it, enclose it in double quotes (\")."
+msgstr ""
+
+#: src/gui/chat.cpp:553
+msgid "Command: /who"
+msgstr ""
+
+#: src/gui/chat.cpp:554
+msgid "This command displays the number of players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:558
+msgid "Unknown command."
+msgstr ""
+
+#: src/gui/chat.cpp:559
+msgid "Type /help for a list of commands."
+msgstr ""
+
+#: src/gui/confirm_dialog.cpp:35
+msgid "Yes"
+msgstr "Yes"
+
+#: src/gui/confirm_dialog.cpp:36
+msgid "No"
+msgstr "No"
+
+#: src/gui/connection.cpp:49 src/gui/updatewindow.cpp:116
+msgid "Connecting..."
+msgstr "Connecting..."
+
+#: src/gui/equipmentwindow.cpp:38 src/gui/menuwindow.cpp:62
+msgid "Equipment"
+msgstr "Equipment"
+
+#: src/gui/help.cpp:33
+msgid "Help"
+msgstr ""
+
+#: src/gui/help.cpp:41
+msgid "Close"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:46 src/gui/menuwindow.cpp:63
+msgid "Inventory"
+msgstr "Inventory"
+
+#: src/gui/inventorywindow.cpp:56 src/gui/inventorywindow.cpp:232
+#: src/gui/skill.cpp:134
+msgid "Use"
+msgstr "Use"
+
+#: src/gui/inventorywindow.cpp:57
+msgid "Drop"
+msgstr "Drop"
+
+#: src/gui/inventorywindow.cpp:99
+#, c-format
+msgid "Weight: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:104
+#, c-format
+msgid "Slots used: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:225
+msgid "Unequip"
+msgstr "Unequip"
+
+#: src/gui/inventorywindow.cpp:228
+msgid "Equip"
+msgstr "Equip"
+
+#: src/gui/item_amount.cpp:76
+msgid "Select amount of items to trade."
+msgstr "Select amount of items to trade."
+
+#: src/gui/item_amount.cpp:80
+msgid "Select amount of items to drop."
+msgstr "Select amount of items to drop."
+
+#: src/gui/login.cpp:42
+msgid "Login"
+msgstr "Login"
+
+#: src/gui/login.cpp:45 src/gui/register.cpp:66
+msgid "Password:"
+msgstr "Password:"
+
+#: src/gui/login.cpp:50
+msgid "Remember Username"
+msgstr ""
+
+#: src/gui/login.cpp:53 src/gui/register.cpp:75
+msgid "Register"
+msgstr "Register"
+
+#: src/gui/menuwindow.cpp:61
+msgid "Status"
+msgstr "Status"
+
+#: src/gui/menuwindow.cpp:64 src/gui/skill.cpp:119
+msgid "Skills"
+msgstr "Skills"
+
+#: src/gui/menuwindow.cpp:65
+msgid "Shortcut"
+msgstr "Shortcut"
+
+#: src/gui/menuwindow.cpp:66 src/main.cpp:716
+msgid "Setup"
+msgstr "Setup"
+
+#: src/gui/minimap.cpp:34
+msgid "MiniMap"
+msgstr "MiniMap"
+
+#: src/gui/npclistdialog.cpp:35 src/gui/npc_text.cpp:35
+msgid "NPC"
+msgstr "NPC"
+
+#: src/gui/popupmenu.cpp:81
+#, c-format
+msgid "@@trade|Trade With %s@@"
+msgstr "@@trade|Trade With %s@@"
+
+#: src/gui/popupmenu.cpp:83
+#, c-format
+msgid "@@attack|Attack %s@@"
+msgstr "@@attack|Attack %s@@"
+
+#: src/gui/popupmenu.cpp:114
+msgid "@@talk|Talk To NPC@@"
+msgstr "@@talk|Talk To NPC@@"
+
+#: src/gui/popupmenu.cpp:124 src/gui/popupmenu.cpp:140
+#: src/gui/popupmenu.cpp:293
+msgid "@@cancel|Cancel@@"
+msgstr "@@cancel|Cancel@@"
+
+#: src/gui/popupmenu.cpp:136
+#, c-format
+msgid "@@pickup|Pick Up %s@@"
+msgstr "@@pickup|Pick Up %s@@"
+
+#: src/gui/popupmenu.cpp:283
+#, fuzzy
+msgid "@@use|Unequip@@"
+msgstr "@@use|Equip@@"
+
+#: src/gui/popupmenu.cpp:285
+msgid "@@use|Equip@@"
+msgstr "@@use|Equip@@"
+
+#: src/gui/popupmenu.cpp:288
+msgid "@@use|Use@@"
+msgstr "@@use|Use@@"
+
+#: src/gui/popupmenu.cpp:290
+msgid "@@drop|Drop@@"
+msgstr "@@drop|Drop@@"
+
+#: src/gui/popupmenu.cpp:291
+msgid "@@description|Description@@"
+msgstr "@@description|Description@@"
+
+#: src/gui/register.cpp:67
+msgid "Confirm:"
+msgstr "Confirm:"
+
+#: src/gui/register.cpp:73
+msgid "Male"
+msgstr ""
+
+#: src/gui/register.cpp:74
+msgid "Female"
+msgstr ""
+
+#: src/gui/register.cpp:176
+#, c-format
+msgid "The username needs to be at least %d characters long."
+msgstr "The username needs to be at least %d characters long."
+
+#: src/gui/register.cpp:184
+#, c-format
+msgid "The username needs to be less than %d characters long."
+msgstr "The username needs to be less than %d characters long."
+
+#: src/gui/register.cpp:192
+#, c-format
+msgid "The password needs to be at least %d characters long."
+msgstr "The password needs to be at least %d characters long."
+
+#: src/gui/register.cpp:200
+#, c-format
+msgid "The password needs to be less than %d characters long."
+msgstr "The password needs to be less than %d characters long."
+
+#: src/gui/register.cpp:207
+msgid "Passwords do not match."
+msgstr "Passwords do not match."
+
+#: src/gui/register.cpp:227 src/main.cpp:945
+msgid "Error"
+msgstr "Error"
+
+#: src/gui/setup_audio.cpp:40
+msgid "Sound"
+msgstr "Sound"
+
+#: src/gui/setup_audio.cpp:46
+msgid "Sfx volume"
+msgstr "Sfx volume"
+
+#: src/gui/setup_audio.cpp:47
+msgid "Music volume"
+msgstr "Music volume"
+
+#: src/gui/setup.cpp:58
+msgid "Apply"
+msgstr "Apply"
+
+#: src/gui/setup.cpp:58
+msgid "Reset Windows"
+msgstr "Reset Windows"
+
+#: src/gui/setup.cpp:79
+msgid "Video"
+msgstr "Video"
+
+#: src/gui/setup.cpp:83
+msgid "Audio"
+msgstr "Audio"
+
+#: src/gui/setup.cpp:87
+msgid "Joystick"
+msgstr "Joystick"
+
+#: src/gui/setup.cpp:91
+msgid "Keyboard"
+msgstr ""
+
+#: src/gui/setup.cpp:95
+msgid "Players"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:36 src/gui/setup_joystick.cpp:70
+msgid "Press the button to start calibration"
+msgstr "Press the button to start calibration"
+
+#: src/gui/setup_joystick.cpp:37 src/gui/setup_joystick.cpp:68
+msgid "Calibrate"
+msgstr "Calibrate"
+
+#: src/gui/setup_joystick.cpp:38
+msgid "Enable joystick"
+msgstr "Enable joystick"
+
+#: src/gui/setup_joystick.cpp:73
+msgid "Stop"
+msgstr "Stop"
+
+#: src/gui/setup_joystick.cpp:74
+msgid "Rotate the stick"
+msgstr "Rotate the stick"
+
+#: src/gui/setup_keyboard.cpp:88
+msgid "Assign"
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:94
+#, fuzzy
+msgid "Default"
+msgstr "Delete"
+
+#: src/gui/setup_keyboard.cpp:115
+msgid "Key Conflict(s) Detected."
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:116
+msgid "Resolve them, or gameplay may result in strange behaviour."
+msgstr ""
+
+#: src/gui/setup_players.cpp:53
+#, fuzzy
+msgid "Name"
+msgstr "Name:"
+
+#: src/gui/setup_players.cpp:54
+msgid "Relation"
+msgstr ""
+
+#: src/gui/setup_players.cpp:58
+msgid "Neutral"
+msgstr ""
+
+#: src/gui/setup_players.cpp:59
+msgid "Friend"
+msgstr ""
+
+#: src/gui/setup_players.cpp:60
+msgid "Disregarded"
+msgstr ""
+
+#: src/gui/setup_players.cpp:61
+msgid "Ignored"
+msgstr ""
+
+#: src/gui/setup_players.cpp:214
+msgid "Save player list"
+msgstr ""
+
+#: src/gui/setup_players.cpp:216
+msgid "Allow trading"
+msgstr ""
+
+#: src/gui/setup_players.cpp:218
+msgid "Allow whispers"
+msgstr ""
+
+#: src/gui/setup_players.cpp:245
+msgid "When ignoring:"
+msgstr ""
+
+#: src/gui/setup_video.cpp:112
+msgid "Full screen"
+msgstr "Full screen"
+
+#: src/gui/setup_video.cpp:113
+msgid "OpenGL"
+msgstr "OpenGL"
+
+#: src/gui/setup_video.cpp:114
+msgid "Custom cursor"
+msgstr "Custom cursor"
+
+#: src/gui/setup_video.cpp:116
+msgid "FPS Limit:"
+msgstr "FPS Limit:"
+
+#: src/gui/setup_video.cpp:135
+msgid "Gui opacity"
+msgstr "Gui opacity"
+
+#: src/gui/setup_video.cpp:192
+msgid "Scroll radius"
+msgstr "Scroll radius"
+
+#: src/gui/setup_video.cpp:200
+msgid "Scroll laziness"
+msgstr "Scroll laziness"
+
+#: src/gui/setup_video.cpp:208
+msgid "Ambient FX"
+msgstr "Ambient FX"
+
+#: src/gui/setup_video.cpp:215 src/gui/setup_video.cpp:412
+msgid "off"
+msgstr "off"
+
+#: src/gui/setup_video.cpp:218 src/gui/setup_video.cpp:234
+#: src/gui/setup_video.cpp:415 src/gui/setup_video.cpp:429
+msgid "low"
+msgstr "low"
+
+#: src/gui/setup_video.cpp:221 src/gui/setup_video.cpp:240
+#: src/gui/setup_video.cpp:418 src/gui/setup_video.cpp:435
+msgid "high"
+msgstr "high"
+
+#: src/gui/setup_video.cpp:227
+msgid "Particle Detail"
+msgstr ""
+
+#: src/gui/setup_video.cpp:237 src/gui/setup_video.cpp:432
+msgid "medium"
+msgstr ""
+
+#: src/gui/setup_video.cpp:243 src/gui/setup_video.cpp:438
+msgid "max"
+msgstr ""
+
+#: src/gui/setup_video.cpp:309
+msgid "Switching to full screen"
+msgstr "Switching to full screen"
+
+#: src/gui/setup_video.cpp:310
+msgid "Restart needed for changes to take effect."
+msgstr "Restart needed for changes to take effect."
+
+#: src/gui/setup_video.cpp:322
+msgid "Changing OpenGL"
+msgstr "Changing OpenGL"
+
+#: src/gui/setup_video.cpp:323
+msgid "Applying change to OpenGL requires restart."
+msgstr "Applying change to OpenGL requires restart."
+
+#: src/gui/skill.cpp:79
+msgid "Mystery Skill"
+msgstr ""
+
+#: src/gui/skill.cpp:132 src/gui/skill.cpp:188
+#, c-format
+msgid "Skill points: %d"
+msgstr ""
+
+#: src/gui/skill.cpp:133
+msgid "Up"
+msgstr ""
+
+#: src/gui/status.cpp:52 src/gui/status.cpp:235
+#, fuzzy, c-format
+msgid "Job: %d"
+msgstr "Level: %d"
+
+#: src/gui/status.cpp:53 src/gui/status.cpp:238
+#, fuzzy, c-format
+msgid "Money: %d GP"
+msgstr "Money: %d"
+
+#: src/gui/status.cpp:127
+#, fuzzy
+msgid "Stats"
+msgstr "Status"
+
+#: src/gui/status.cpp:128
+msgid "Total"
+msgstr ""
+
+#: src/gui/status.cpp:129
+msgid "Cost"
+msgstr ""
+
+#: src/gui/status.cpp:132
+#, fuzzy
+msgid "Attack:"
+msgstr "Attack %+d"
+
+#: src/gui/status.cpp:133
+#, fuzzy
+msgid "Defense:"
+msgstr "Defense %+d"
+
+#: src/gui/status.cpp:134
+#, fuzzy
+msgid "M.Attack:"
+msgstr "Attack %+d"
+
+#: src/gui/status.cpp:135
+#, fuzzy
+msgid "M.Defense:"
+msgstr "Defense %+d"
+
+#: src/gui/status.cpp:136
+#, c-format
+msgid "% Accuracy:"
+msgstr ""
+
+#: src/gui/status.cpp:137
+#, c-format
+msgid "% Evade:"
+msgstr ""
+
+#: src/gui/status.cpp:138
+msgid "% Reflex:"
+msgstr ""
+
+#: src/gui/status.cpp:282
+#, fuzzy
+msgid "Strength"
+msgstr "Strength:"
+
+#: src/gui/status.cpp:283
+#, fuzzy
+msgid "Agility"
+msgstr "Agility:"
+
+#: src/gui/status.cpp:284
+#, fuzzy
+msgid "Vitality"
+msgstr "Vitality:"
+
+#: src/gui/status.cpp:285
+#, fuzzy
+msgid "Intelligence"
+msgstr "Intelligence:"
+
+#: src/gui/status.cpp:286
+#, fuzzy
+msgid "Dexterity"
+msgstr "Dexterity:"
+
+#: src/gui/status.cpp:287
+msgid "Luck"
+msgstr ""
+
+#: src/gui/status.cpp:305
+#, c-format
+msgid "Remaining Status Points: %d"
+msgstr ""
+
+#: src/gui/trade.cpp:61
+msgid "Add"
+msgstr "Add"
+
+#: src/gui/trade.cpp:64
+msgid "Trade"
+msgstr ""
+
+#: src/gui/trade.cpp:80 src/gui/trade.cpp:156 src/gui/trade.cpp:204
+#, c-format
+msgid "You get %d GP."
+msgstr "You get %d GP."
+
+#: src/gui/trade.cpp:81
+msgid "You give:"
+msgstr "You give:"
+
+#: src/gui/trade.cpp:283
+msgid "Failed adding item. You can not overlap one kind of item on the window."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:93
+msgid "Updating..."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:119
+msgid "Play"
+msgstr ""
+
+#: src/gui/updatewindow.cpp:525
+msgid "Completed"
+msgstr ""
+
+#: src/resources/itemdb.cpp:99
+msgid "Unnamed"
+msgstr ""
+
+#: src/main.cpp:769
+msgid "Got disconnected from server!"
+msgstr ""
+
+#: src/main.cpp:956
+#, fuzzy
+msgid "Connecting to map server..."
+msgstr "Connecting..."
+
+#: src/main.cpp:964
+msgid "Connecting to character server..."
+msgstr ""
+
+#: src/main.cpp:972
+msgid "Connecting to account server..."
+msgstr ""
+
+#~ msgid "Unregister"
+#~ msgstr "Unregister"
+
+#~ msgid "Willpower:"
+#~ msgstr "Willpower:"
+
+#~ msgid "Please distribute %d points"
+#~ msgstr "Please distribute %d points"
+
+#~ msgid "Your name needs to be at least 4 characters."
+#~ msgstr "Your name needs to be at least 4 characters."
+
+#~ msgid "Character stats OK"
+#~ msgstr "Character stats OK"
+
+#~ msgid "Please remove %d points"
+#~ msgstr "Please remove %d points"
+
+#~ msgid "Split"
+#~ msgstr "Split"
+
+#~ msgid "Select amount of items to split."
+#~ msgstr "Select amount of items to split."
+
+#~ msgid "@@split|Split@@"
+#~ msgstr "@@split|Split@@"
+
+#~ msgid "Switch server"
+#~ msgstr "Switch server"
+
+#~ msgid "Switch character"
+#~ msgstr "Switch character"
+
+#~ msgid "Email:"
+#~ msgstr "Email:"
+
+#~ msgid "Choose your Mana World Server"
+#~ msgstr "Choose your Mana World Server"
+
+#~ msgid "Port:"
+#~ msgstr "Port:"
+
+#~ msgid "Please type both the address and the port of a server."
+#~ msgstr "Please type both the address and the port of a server."
+
+#~ msgid "Propose trade"
+#~ msgstr "Propose trade"
+
+#~ msgid "Confirm trade"
+#~ msgstr "Confirm trade"
+
+#~ msgid "Change"
+#~ msgstr "Change"
+
+#~ msgid "HP %+d"
+#~ msgstr "HP %+d"
+
+#~ msgid "MP %+d"
+#~ msgstr "MP %+d"
+
+#~ msgid "Confirm"
+#~ msgstr "Confirm"
+
+#~ msgid "Charisma:"
+#~ msgstr "Charisma:"
+
+#~ msgid "Total Weight: %d - Maximum Weight: %d"
+#~ msgstr "Total Weight: %d - Maximum Weight: %d"
+
+#~ msgid "Keep"
+#~ msgstr "Keep"
diff --git a/po/eo.po b/po/eo.po
new file mode 100644
index 00000000..928b0fbf
--- /dev/null
+++ b/po/eo.po
@@ -0,0 +1,897 @@
+# Esperanto translation for tmw
+# Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008
+# This file is distributed under the same license as the tmw package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: tmw\n"
+"Report-Msgid-Bugs-To: themanaworld-devel@lists.sourceforge.net\n"
+"POT-Creation-Date: 2009-01-08 22:10+0100\n"
+"PO-Revision-Date: 2008-11-10 22:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Esperanto <eo@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-01-06 12:40+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#: src/gui/buy.cpp:43 src/gui/buy.cpp:61 src/gui/buysell.cpp:35
+msgid "Buy"
+msgstr ""
+
+#: src/gui/buy.cpp:58 src/gui/buy.cpp:239 src/gui/sell.cpp:65
+#: src/gui/sell.cpp:259
+#, c-format
+msgid "Price: %d GP / Total: %d GP"
+msgstr ""
+
+#: src/gui/buy.cpp:62 src/gui/sell.cpp:69
+msgid "Quit"
+msgstr ""
+
+#: src/gui/buy.cpp:63 src/gui/buy.cpp:206 src/gui/buy.cpp:224
+#: src/gui/inventorywindow.cpp:150 src/gui/inventorywindow.cpp:160
+#: src/gui/sell.cpp:70 src/gui/sell.cpp:230 src/gui/sell.cpp:244
+#: src/gui/trade.cpp:94 src/gui/trade.cpp:266
+#, c-format
+msgid "Description: %s"
+msgstr ""
+
+#: src/gui/buy.cpp:64 src/gui/buy.cpp:208 src/gui/buy.cpp:225
+#: src/gui/inventorywindow.cpp:149 src/gui/inventorywindow.cpp:158
+#: src/gui/sell.cpp:71 src/gui/sell.cpp:232 src/gui/sell.cpp:245
+#, c-format
+msgid "Effect: %s"
+msgstr ""
+
+#: src/gui/buysell.cpp:31
+msgid "Shop"
+msgstr ""
+
+#: src/gui/buysell.cpp:35 src/gui/sell.cpp:48 src/gui/sell.cpp:68
+msgid "Sell"
+msgstr ""
+
+#: src/gui/buysell.cpp:35 src/gui/char_select.cpp:85
+#: src/gui/char_select.cpp:258 src/gui/char_server.cpp:60
+#: src/gui/connection.cpp:47 src/gui/item_amount.cpp:61 src/gui/login.cpp:52
+#: src/gui/npclistdialog.cpp:45 src/gui/register.cpp:76 src/gui/setup.cpp:58
+#: src/gui/trade.cpp:63 src/gui/updatewindow.cpp:118
+msgid "Cancel"
+msgstr ""
+
+#: src/gui/char_select.cpp:63
+msgid "Confirm Character Delete"
+msgstr ""
+
+#: src/gui/char_select.cpp:64
+msgid "Are you sure you want to delete this character?"
+msgstr ""
+
+#: src/gui/char_select.cpp:81
+msgid "Select Character"
+msgstr ""
+
+#: src/gui/char_select.cpp:84 src/gui/item_amount.cpp:60 src/gui/login.cpp:51
+#: src/gui/ok_dialog.cpp:37 src/gui/trade.cpp:62
+msgid "Ok"
+msgstr ""
+
+#: src/gui/char_select.cpp:86
+msgid "New"
+msgstr ""
+
+#: src/gui/char_select.cpp:87 src/gui/setup_players.cpp:220
+msgid "Delete"
+msgstr ""
+
+#: src/gui/char_select.cpp:88
+msgid "Previous"
+msgstr ""
+
+#: src/gui/char_select.cpp:89
+msgid "Next"
+msgstr ""
+
+#: src/gui/char_select.cpp:91 src/gui/char_select.cpp:171
+#: src/gui/char_select.cpp:183 src/gui/inventorywindow.cpp:148
+#: src/gui/inventorywindow.cpp:156 src/gui/trade.cpp:92 src/gui/trade.cpp:264
+#, c-format
+msgid "Name: %s"
+msgstr ""
+
+#: src/gui/char_select.cpp:92 src/gui/char_select.cpp:172
+#: src/gui/char_select.cpp:184 src/gui/status.cpp:51 src/gui/status.cpp:232
+#, c-format
+msgid "Level: %d"
+msgstr ""
+
+#: src/gui/char_select.cpp:93 src/gui/char_select.cpp:173
+#: src/gui/char_select.cpp:185
+#, c-format
+msgid "Job Level: %d"
+msgstr ""
+
+#: src/gui/char_select.cpp:94 src/gui/char_select.cpp:186
+#, c-format
+msgid "Money: %d"
+msgstr ""
+
+#: src/gui/char_select.cpp:174
+#, c-format
+msgid "Gold: %d"
+msgstr ""
+
+#: src/gui/char_select.cpp:243
+msgid "Create Character"
+msgstr ""
+
+#: src/gui/char_select.cpp:250 src/gui/login.cpp:44 src/gui/register.cpp:65
+msgid "Name:"
+msgstr ""
+
+#: src/gui/char_select.cpp:253
+msgid "Hair Color:"
+msgstr ""
+
+#: src/gui/char_select.cpp:256
+msgid "Hair Style:"
+msgstr ""
+
+#: src/gui/char_select.cpp:257
+msgid "Create"
+msgstr ""
+
+#: src/gui/char_server.cpp:52
+msgid "Select Server"
+msgstr ""
+
+#: src/gui/char_server.cpp:59 src/gui/npclistdialog.cpp:44
+#: src/gui/npc_text.cpp:46
+msgid "OK"
+msgstr ""
+
+#: src/gui/chat.cpp:122
+msgid "Global announcement:"
+msgstr ""
+
+#: src/gui/chat.cpp:125
+#, c-format
+msgid "Global announcement from %s:"
+msgstr ""
+
+#: src/gui/chat.cpp:140 src/gui/login.cpp:46 src/gui/register.cpp:68
+msgid "Server:"
+msgstr ""
+
+#: src/gui/chat.cpp:146
+#, c-format
+msgid "%s whispers:"
+msgstr ""
+
+#: src/gui/chat.cpp:283
+#, c-format
+msgid "Whispering to %s: %s"
+msgstr ""
+
+#: src/gui/chat.cpp:356
+msgid "Unknown command"
+msgstr ""
+
+#: src/gui/chat.cpp:366
+msgid "Trade failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:369
+msgid "Emote failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:372
+msgid "Sit failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:375
+msgid "Chat creating failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:378
+msgid "Could not join party!"
+msgstr ""
+
+#: src/gui/chat.cpp:381
+msgid "Cannot shout!"
+msgstr ""
+
+#: src/gui/chat.cpp:389
+msgid "You have not yet reached a high enough lvl!"
+msgstr ""
+
+#: src/gui/chat.cpp:392
+msgid "Insufficient HP!"
+msgstr ""
+
+#: src/gui/chat.cpp:395
+msgid "Insufficient SP!"
+msgstr ""
+
+#: src/gui/chat.cpp:398
+msgid "You have no memos!"
+msgstr ""
+
+#: src/gui/chat.cpp:401
+msgid "You cannot do that right now!"
+msgstr ""
+
+#: src/gui/chat.cpp:404
+msgid "Seems you need more Zeny... ;-)"
+msgstr ""
+
+#: src/gui/chat.cpp:407
+msgid "You cannot use this skill with that kind of weapon!"
+msgstr ""
+
+#: src/gui/chat.cpp:410
+msgid "You need another red gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:413
+msgid "You need another blue gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:416
+msgid "You're carrying to much to do this!"
+msgstr ""
+
+#: src/gui/chat.cpp:419
+msgid "Huh? What's that?"
+msgstr ""
+
+#: src/gui/chat.cpp:425
+msgid "Warp failed..."
+msgstr ""
+
+#: src/gui/chat.cpp:428
+msgid "Could not steal anything..."
+msgstr ""
+
+#: src/gui/chat.cpp:431
+msgid "Poison had no effect..."
+msgstr ""
+
+#: src/gui/chat.cpp:496
+msgid "-- Help --"
+msgstr ""
+
+#: src/gui/chat.cpp:499
+msgid "/announce: Global announcement (GM only)"
+msgstr ""
+
+#: src/gui/chat.cpp:500
+msgid "/clear: Clears this window"
+msgstr ""
+
+#: src/gui/chat.cpp:501
+msgid "/help: Display this help"
+msgstr ""
+
+#: src/gui/chat.cpp:502
+msgid "/where: Display map name"
+msgstr ""
+
+#: src/gui/chat.cpp:503
+msgid "/whisper <nick> <message>: Sends a private <message> to <nick>"
+msgstr ""
+
+#: src/gui/chat.cpp:505
+msgid "/w <nick> <message>: Short form for /whisper"
+msgstr ""
+
+#: src/gui/chat.cpp:506
+msgid "/who: Display number of online users"
+msgstr ""
+
+#: src/gui/chat.cpp:507
+msgid "For more information, type /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:512
+msgid "Command: /announce <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:513
+msgid "*** only available to a GM ***"
+msgstr ""
+
+#: src/gui/chat.cpp:514
+msgid "This command sends the message <msg> to all players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:520
+msgid "Command: /clear"
+msgstr ""
+
+#: src/gui/chat.cpp:521
+msgid "This command clears the chat log of previous chat."
+msgstr ""
+
+#: src/gui/chat.cpp:527
+msgid "Command: /help"
+msgstr ""
+
+#: src/gui/chat.cpp:528
+msgid "This command displays a list of all commands available."
+msgstr ""
+
+#: src/gui/chat.cpp:530
+msgid "Command: /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:531
+msgid "This command displays help on <command>."
+msgstr ""
+
+#: src/gui/chat.cpp:536
+msgid "Command: /where"
+msgstr ""
+
+#: src/gui/chat.cpp:537
+msgid "This command displays the name of the current map."
+msgstr ""
+
+#: src/gui/chat.cpp:543
+msgid "Command: /whisper <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:544
+msgid "Command: /w <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:545
+msgid "This command sends the message <msg> to <nick>."
+msgstr ""
+
+#: src/gui/chat.cpp:547
+msgid "If the <nick> has spaces in it, enclose it in double quotes (\")."
+msgstr ""
+
+#: src/gui/chat.cpp:553
+msgid "Command: /who"
+msgstr ""
+
+#: src/gui/chat.cpp:554
+msgid "This command displays the number of players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:558
+msgid "Unknown command."
+msgstr ""
+
+#: src/gui/chat.cpp:559
+msgid "Type /help for a list of commands."
+msgstr ""
+
+#: src/gui/confirm_dialog.cpp:35
+msgid "Yes"
+msgstr ""
+
+#: src/gui/confirm_dialog.cpp:36
+msgid "No"
+msgstr ""
+
+#: src/gui/connection.cpp:49 src/gui/updatewindow.cpp:116
+msgid "Connecting..."
+msgstr ""
+
+#: src/gui/equipmentwindow.cpp:38 src/gui/menuwindow.cpp:62
+msgid "Equipment"
+msgstr ""
+
+#: src/gui/help.cpp:33
+msgid "Help"
+msgstr ""
+
+#: src/gui/help.cpp:41
+msgid "Close"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:46 src/gui/menuwindow.cpp:63
+msgid "Inventory"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:56 src/gui/inventorywindow.cpp:232
+#: src/gui/skill.cpp:134
+msgid "Use"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:57
+msgid "Drop"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:99
+#, c-format
+msgid "Weight: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:104
+#, c-format
+msgid "Slots used: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:225
+msgid "Unequip"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:228
+msgid "Equip"
+msgstr ""
+
+#: src/gui/item_amount.cpp:76
+msgid "Select amount of items to trade."
+msgstr ""
+
+#: src/gui/item_amount.cpp:80
+msgid "Select amount of items to drop."
+msgstr ""
+
+#: src/gui/login.cpp:42
+msgid "Login"
+msgstr ""
+
+#: src/gui/login.cpp:45 src/gui/register.cpp:66
+msgid "Password:"
+msgstr ""
+
+#: src/gui/login.cpp:50
+msgid "Remember Username"
+msgstr ""
+
+#: src/gui/login.cpp:53 src/gui/register.cpp:75
+msgid "Register"
+msgstr ""
+
+#: src/gui/menuwindow.cpp:61
+msgid "Status"
+msgstr ""
+
+#: src/gui/menuwindow.cpp:64 src/gui/skill.cpp:119
+msgid "Skills"
+msgstr ""
+
+#: src/gui/menuwindow.cpp:65
+msgid "Shortcut"
+msgstr ""
+
+#: src/gui/menuwindow.cpp:66 src/main.cpp:716
+msgid "Setup"
+msgstr ""
+
+#: src/gui/minimap.cpp:34
+msgid "MiniMap"
+msgstr ""
+
+#: src/gui/npclistdialog.cpp:35 src/gui/npc_text.cpp:35
+msgid "NPC"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:81
+#, c-format
+msgid "@@trade|Trade With %s@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:83
+#, c-format
+msgid "@@attack|Attack %s@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:114
+msgid "@@talk|Talk To NPC@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:124 src/gui/popupmenu.cpp:140
+#: src/gui/popupmenu.cpp:293
+msgid "@@cancel|Cancel@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:136
+#, c-format
+msgid "@@pickup|Pick Up %s@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:283
+msgid "@@use|Unequip@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:285
+msgid "@@use|Equip@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:288
+msgid "@@use|Use@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:290
+msgid "@@drop|Drop@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:291
+msgid "@@description|Description@@"
+msgstr ""
+
+#: src/gui/register.cpp:67
+msgid "Confirm:"
+msgstr ""
+
+#: src/gui/register.cpp:73
+msgid "Male"
+msgstr ""
+
+#: src/gui/register.cpp:74
+msgid "Female"
+msgstr ""
+
+#: src/gui/register.cpp:176
+#, c-format
+msgid "The username needs to be at least %d characters long."
+msgstr ""
+
+#: src/gui/register.cpp:184
+#, c-format
+msgid "The username needs to be less than %d characters long."
+msgstr ""
+
+#: src/gui/register.cpp:192
+#, c-format
+msgid "The password needs to be at least %d characters long."
+msgstr ""
+
+#: src/gui/register.cpp:200
+#, c-format
+msgid "The password needs to be less than %d characters long."
+msgstr ""
+
+#: src/gui/register.cpp:207
+msgid "Passwords do not match."
+msgstr ""
+
+#: src/gui/register.cpp:227 src/main.cpp:945
+msgid "Error"
+msgstr ""
+
+#: src/gui/setup_audio.cpp:40
+msgid "Sound"
+msgstr ""
+
+#: src/gui/setup_audio.cpp:46
+msgid "Sfx volume"
+msgstr ""
+
+#: src/gui/setup_audio.cpp:47
+msgid "Music volume"
+msgstr ""
+
+#: src/gui/setup.cpp:58
+msgid "Apply"
+msgstr ""
+
+#: src/gui/setup.cpp:58
+msgid "Reset Windows"
+msgstr ""
+
+#: src/gui/setup.cpp:79
+msgid "Video"
+msgstr ""
+
+#: src/gui/setup.cpp:83
+msgid "Audio"
+msgstr ""
+
+#: src/gui/setup.cpp:87
+msgid "Joystick"
+msgstr ""
+
+#: src/gui/setup.cpp:91
+msgid "Keyboard"
+msgstr ""
+
+#: src/gui/setup.cpp:95
+msgid "Players"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:36 src/gui/setup_joystick.cpp:70
+msgid "Press the button to start calibration"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:37 src/gui/setup_joystick.cpp:68
+msgid "Calibrate"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:38
+msgid "Enable joystick"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:73
+msgid "Stop"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:74
+msgid "Rotate the stick"
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:88
+msgid "Assign"
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:94
+msgid "Default"
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:115
+msgid "Key Conflict(s) Detected."
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:116
+msgid "Resolve them, or gameplay may result in strange behaviour."
+msgstr ""
+
+#: src/gui/setup_players.cpp:53
+msgid "Name"
+msgstr ""
+
+#: src/gui/setup_players.cpp:54
+msgid "Relation"
+msgstr ""
+
+#: src/gui/setup_players.cpp:58
+msgid "Neutral"
+msgstr ""
+
+#: src/gui/setup_players.cpp:59
+msgid "Friend"
+msgstr ""
+
+#: src/gui/setup_players.cpp:60
+msgid "Disregarded"
+msgstr ""
+
+#: src/gui/setup_players.cpp:61
+msgid "Ignored"
+msgstr ""
+
+#: src/gui/setup_players.cpp:214
+msgid "Save player list"
+msgstr ""
+
+#: src/gui/setup_players.cpp:216
+msgid "Allow trading"
+msgstr ""
+
+#: src/gui/setup_players.cpp:218
+msgid "Allow whispers"
+msgstr ""
+
+#: src/gui/setup_players.cpp:245
+msgid "When ignoring:"
+msgstr ""
+
+#: src/gui/setup_video.cpp:112
+msgid "Full screen"
+msgstr ""
+
+#: src/gui/setup_video.cpp:113
+msgid "OpenGL"
+msgstr ""
+
+#: src/gui/setup_video.cpp:114
+msgid "Custom cursor"
+msgstr ""
+
+#: src/gui/setup_video.cpp:116
+msgid "FPS Limit:"
+msgstr ""
+
+#: src/gui/setup_video.cpp:135
+msgid "Gui opacity"
+msgstr ""
+
+#: src/gui/setup_video.cpp:192
+msgid "Scroll radius"
+msgstr ""
+
+#: src/gui/setup_video.cpp:200
+msgid "Scroll laziness"
+msgstr ""
+
+#: src/gui/setup_video.cpp:208
+msgid "Ambient FX"
+msgstr ""
+
+#: src/gui/setup_video.cpp:215 src/gui/setup_video.cpp:412
+msgid "off"
+msgstr ""
+
+#: src/gui/setup_video.cpp:218 src/gui/setup_video.cpp:234
+#: src/gui/setup_video.cpp:415 src/gui/setup_video.cpp:429
+msgid "low"
+msgstr ""
+
+#: src/gui/setup_video.cpp:221 src/gui/setup_video.cpp:240
+#: src/gui/setup_video.cpp:418 src/gui/setup_video.cpp:435
+msgid "high"
+msgstr ""
+
+#: src/gui/setup_video.cpp:227
+msgid "Particle Detail"
+msgstr ""
+
+#: src/gui/setup_video.cpp:237 src/gui/setup_video.cpp:432
+msgid "medium"
+msgstr ""
+
+#: src/gui/setup_video.cpp:243 src/gui/setup_video.cpp:438
+msgid "max"
+msgstr ""
+
+#: src/gui/setup_video.cpp:309
+msgid "Switching to full screen"
+msgstr ""
+
+#: src/gui/setup_video.cpp:310
+msgid "Restart needed for changes to take effect."
+msgstr ""
+
+#: src/gui/setup_video.cpp:322
+msgid "Changing OpenGL"
+msgstr ""
+
+#: src/gui/setup_video.cpp:323
+msgid "Applying change to OpenGL requires restart."
+msgstr ""
+
+#: src/gui/skill.cpp:79
+msgid "Mystery Skill"
+msgstr ""
+
+#: src/gui/skill.cpp:132 src/gui/skill.cpp:188
+#, c-format
+msgid "Skill points: %d"
+msgstr ""
+
+#: src/gui/skill.cpp:133
+msgid "Up"
+msgstr ""
+
+#: src/gui/status.cpp:52 src/gui/status.cpp:235
+#, c-format
+msgid "Job: %d"
+msgstr ""
+
+#: src/gui/status.cpp:53 src/gui/status.cpp:238
+#, c-format
+msgid "Money: %d GP"
+msgstr ""
+
+#: src/gui/status.cpp:127
+msgid "Stats"
+msgstr ""
+
+#: src/gui/status.cpp:128
+msgid "Total"
+msgstr ""
+
+#: src/gui/status.cpp:129
+msgid "Cost"
+msgstr ""
+
+#: src/gui/status.cpp:132
+msgid "Attack:"
+msgstr ""
+
+#: src/gui/status.cpp:133
+msgid "Defense:"
+msgstr ""
+
+#: src/gui/status.cpp:134
+msgid "M.Attack:"
+msgstr ""
+
+#: src/gui/status.cpp:135
+msgid "M.Defense:"
+msgstr ""
+
+#: src/gui/status.cpp:136
+#, c-format
+msgid "% Accuracy:"
+msgstr ""
+
+#: src/gui/status.cpp:137
+#, c-format
+msgid "% Evade:"
+msgstr ""
+
+#: src/gui/status.cpp:138
+msgid "% Reflex:"
+msgstr ""
+
+#: src/gui/status.cpp:282
+msgid "Strength"
+msgstr ""
+
+#: src/gui/status.cpp:283
+msgid "Agility"
+msgstr ""
+
+#: src/gui/status.cpp:284
+msgid "Vitality"
+msgstr ""
+
+#: src/gui/status.cpp:285
+msgid "Intelligence"
+msgstr ""
+
+#: src/gui/status.cpp:286
+msgid "Dexterity"
+msgstr ""
+
+#: src/gui/status.cpp:287
+msgid "Luck"
+msgstr ""
+
+#: src/gui/status.cpp:305
+#, c-format
+msgid "Remaining Status Points: %d"
+msgstr ""
+
+#: src/gui/trade.cpp:61
+msgid "Add"
+msgstr ""
+
+#: src/gui/trade.cpp:64
+msgid "Trade"
+msgstr ""
+
+#: src/gui/trade.cpp:80 src/gui/trade.cpp:156 src/gui/trade.cpp:204
+#, c-format
+msgid "You get %d GP."
+msgstr ""
+
+#: src/gui/trade.cpp:81
+msgid "You give:"
+msgstr ""
+
+#: src/gui/trade.cpp:283
+msgid "Failed adding item. You can not overlap one kind of item on the window."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:93
+msgid "Updating..."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:119
+msgid "Play"
+msgstr ""
+
+#: src/gui/updatewindow.cpp:525
+msgid "Completed"
+msgstr ""
+
+#: src/resources/itemdb.cpp:99
+msgid "Unnamed"
+msgstr ""
+
+#: src/main.cpp:769
+msgid "Got disconnected from server!"
+msgstr ""
+
+#: src/main.cpp:956
+msgid "Connecting to map server..."
+msgstr ""
+
+#: src/main.cpp:964
+msgid "Connecting to character server..."
+msgstr ""
+
+#: src/main.cpp:972
+msgid "Connecting to account server..."
+msgstr ""
diff --git a/po/es.po b/po/es.po
new file mode 100644
index 00000000..f4f67a3f
--- /dev/null
+++ b/po/es.po
@@ -0,0 +1,985 @@
+# Spanish translation for tmw
+# Copyright (c) 2007 Rosetta Contributors and Canonical Ltd 2007
+# This file is distributed under the same license as the tmw package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2007.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: tmw\n"
+"Report-Msgid-Bugs-To: themanaworld-devel@lists.sourceforge.net\n"
+"POT-Creation-Date: 2009-01-08 22:10+0100\n"
+"PO-Revision-Date: 2008-10-15 01:37+0000\n"
+"Last-Translator: catalania <Unknown>\n"
+"Language-Team: Spanish <es@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-01-06 12:40+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#: src/gui/buy.cpp:43 src/gui/buy.cpp:61 src/gui/buysell.cpp:35
+msgid "Buy"
+msgstr "Comprar"
+
+#: src/gui/buy.cpp:58 src/gui/buy.cpp:239 src/gui/sell.cpp:65
+#: src/gui/sell.cpp:259
+#, c-format
+msgid "Price: %d GP / Total: %d GP"
+msgstr "Precio: %d GP / Total: %d GP"
+
+#: src/gui/buy.cpp:62 src/gui/sell.cpp:69
+msgid "Quit"
+msgstr "Salir"
+
+#: src/gui/buy.cpp:63 src/gui/buy.cpp:206 src/gui/buy.cpp:224
+#: src/gui/inventorywindow.cpp:150 src/gui/inventorywindow.cpp:160
+#: src/gui/sell.cpp:70 src/gui/sell.cpp:230 src/gui/sell.cpp:244
+#: src/gui/trade.cpp:94 src/gui/trade.cpp:266
+#, c-format
+msgid "Description: %s"
+msgstr "Descripción: %s"
+
+#: src/gui/buy.cpp:64 src/gui/buy.cpp:208 src/gui/buy.cpp:225
+#: src/gui/inventorywindow.cpp:149 src/gui/inventorywindow.cpp:158
+#: src/gui/sell.cpp:71 src/gui/sell.cpp:232 src/gui/sell.cpp:245
+#, c-format
+msgid "Effect: %s"
+msgstr "Efecto: %s"
+
+#: src/gui/buysell.cpp:31
+#, fuzzy
+msgid "Shop"
+msgstr "Detener"
+
+#: src/gui/buysell.cpp:35 src/gui/sell.cpp:48 src/gui/sell.cpp:68
+msgid "Sell"
+msgstr "Vender"
+
+#: src/gui/buysell.cpp:35 src/gui/char_select.cpp:85
+#: src/gui/char_select.cpp:258 src/gui/char_server.cpp:60
+#: src/gui/connection.cpp:47 src/gui/item_amount.cpp:61 src/gui/login.cpp:52
+#: src/gui/npclistdialog.cpp:45 src/gui/register.cpp:76 src/gui/setup.cpp:58
+#: src/gui/trade.cpp:63 src/gui/updatewindow.cpp:118
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: src/gui/char_select.cpp:63
+msgid "Confirm Character Delete"
+msgstr ""
+
+#: src/gui/char_select.cpp:64
+msgid "Are you sure you want to delete this character?"
+msgstr "¿Seguro que quieres borrar este personaje?"
+
+#: src/gui/char_select.cpp:81
+msgid "Select Character"
+msgstr "Seleccionar personaje"
+
+#: src/gui/char_select.cpp:84 src/gui/item_amount.cpp:60 src/gui/login.cpp:51
+#: src/gui/ok_dialog.cpp:37 src/gui/trade.cpp:62
+msgid "Ok"
+msgstr "Aceptar"
+
+#: src/gui/char_select.cpp:86
+msgid "New"
+msgstr "Nuevo"
+
+#: src/gui/char_select.cpp:87 src/gui/setup_players.cpp:220
+msgid "Delete"
+msgstr "Eliminar"
+
+#: src/gui/char_select.cpp:88
+msgid "Previous"
+msgstr "Anterior"
+
+#: src/gui/char_select.cpp:89
+msgid "Next"
+msgstr "Siguiente"
+
+#: src/gui/char_select.cpp:91 src/gui/char_select.cpp:171
+#: src/gui/char_select.cpp:183 src/gui/inventorywindow.cpp:148
+#: src/gui/inventorywindow.cpp:156 src/gui/trade.cpp:92 src/gui/trade.cpp:264
+#, c-format
+msgid "Name: %s"
+msgstr "Nombre: %s"
+
+#: src/gui/char_select.cpp:92 src/gui/char_select.cpp:172
+#: src/gui/char_select.cpp:184 src/gui/status.cpp:51 src/gui/status.cpp:232
+#, c-format
+msgid "Level: %d"
+msgstr "Nivel: %d"
+
+#: src/gui/char_select.cpp:93 src/gui/char_select.cpp:173
+#: src/gui/char_select.cpp:185
+#, fuzzy, c-format
+msgid "Job Level: %d"
+msgstr "Nivel: %d"
+
+#: src/gui/char_select.cpp:94 src/gui/char_select.cpp:186
+#, c-format
+msgid "Money: %d"
+msgstr "Dinero: %d"
+
+#: src/gui/char_select.cpp:174
+#, c-format
+msgid "Gold: %d"
+msgstr ""
+
+#: src/gui/char_select.cpp:243
+msgid "Create Character"
+msgstr "Crear Personaje"
+
+#: src/gui/char_select.cpp:250 src/gui/login.cpp:44 src/gui/register.cpp:65
+msgid "Name:"
+msgstr "Nombre:"
+
+#: src/gui/char_select.cpp:253
+msgid "Hair Color:"
+msgstr "Color de pelo:"
+
+#: src/gui/char_select.cpp:256
+msgid "Hair Style:"
+msgstr "corte de pelo"
+
+#: src/gui/char_select.cpp:257
+msgid "Create"
+msgstr "Crear"
+
+#: src/gui/char_server.cpp:52
+#, fuzzy
+msgid "Select Server"
+msgstr "Seleccionar personaje"
+
+#: src/gui/char_server.cpp:59 src/gui/npclistdialog.cpp:44
+#: src/gui/npc_text.cpp:46
+msgid "OK"
+msgstr ""
+
+#: src/gui/chat.cpp:122
+msgid "Global announcement:"
+msgstr ""
+
+#: src/gui/chat.cpp:125
+#, c-format
+msgid "Global announcement from %s:"
+msgstr ""
+
+#: src/gui/chat.cpp:140 src/gui/login.cpp:46 src/gui/register.cpp:68
+msgid "Server:"
+msgstr "Servidor:"
+
+#: src/gui/chat.cpp:146
+#, c-format
+msgid "%s whispers:"
+msgstr ""
+
+#: src/gui/chat.cpp:283
+#, c-format
+msgid "Whispering to %s: %s"
+msgstr ""
+
+#: src/gui/chat.cpp:356
+msgid "Unknown command"
+msgstr ""
+
+#: src/gui/chat.cpp:366
+msgid "Trade failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:369
+msgid "Emote failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:372
+msgid "Sit failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:375
+msgid "Chat creating failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:378
+msgid "Could not join party!"
+msgstr ""
+
+#: src/gui/chat.cpp:381
+msgid "Cannot shout!"
+msgstr ""
+
+#: src/gui/chat.cpp:389
+msgid "You have not yet reached a high enough lvl!"
+msgstr ""
+
+#: src/gui/chat.cpp:392
+msgid "Insufficient HP!"
+msgstr ""
+
+#: src/gui/chat.cpp:395
+msgid "Insufficient SP!"
+msgstr ""
+
+#: src/gui/chat.cpp:398
+msgid "You have no memos!"
+msgstr ""
+
+#: src/gui/chat.cpp:401
+msgid "You cannot do that right now!"
+msgstr ""
+
+#: src/gui/chat.cpp:404
+msgid "Seems you need more Zeny... ;-)"
+msgstr ""
+
+#: src/gui/chat.cpp:407
+msgid "You cannot use this skill with that kind of weapon!"
+msgstr ""
+
+#: src/gui/chat.cpp:410
+msgid "You need another red gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:413
+msgid "You need another blue gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:416
+msgid "You're carrying to much to do this!"
+msgstr ""
+
+#: src/gui/chat.cpp:419
+msgid "Huh? What's that?"
+msgstr ""
+
+#: src/gui/chat.cpp:425
+msgid "Warp failed..."
+msgstr ""
+
+#: src/gui/chat.cpp:428
+msgid "Could not steal anything..."
+msgstr ""
+
+#: src/gui/chat.cpp:431
+msgid "Poison had no effect..."
+msgstr ""
+
+#: src/gui/chat.cpp:496
+msgid "-- Help --"
+msgstr ""
+
+#: src/gui/chat.cpp:499
+msgid "/announce: Global announcement (GM only)"
+msgstr ""
+
+#: src/gui/chat.cpp:500
+msgid "/clear: Clears this window"
+msgstr ""
+
+#: src/gui/chat.cpp:501
+msgid "/help: Display this help"
+msgstr ""
+
+#: src/gui/chat.cpp:502
+msgid "/where: Display map name"
+msgstr ""
+
+#: src/gui/chat.cpp:503
+msgid "/whisper <nick> <message>: Sends a private <message> to <nick>"
+msgstr ""
+
+#: src/gui/chat.cpp:505
+msgid "/w <nick> <message>: Short form for /whisper"
+msgstr ""
+
+#: src/gui/chat.cpp:506
+msgid "/who: Display number of online users"
+msgstr ""
+
+#: src/gui/chat.cpp:507
+msgid "For more information, type /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:512
+msgid "Command: /announce <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:513
+msgid "*** only available to a GM ***"
+msgstr ""
+
+#: src/gui/chat.cpp:514
+msgid "This command sends the message <msg> to all players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:520
+msgid "Command: /clear"
+msgstr ""
+
+#: src/gui/chat.cpp:521
+msgid "This command clears the chat log of previous chat."
+msgstr ""
+
+#: src/gui/chat.cpp:527
+msgid "Command: /help"
+msgstr ""
+
+#: src/gui/chat.cpp:528
+msgid "This command displays a list of all commands available."
+msgstr ""
+
+#: src/gui/chat.cpp:530
+msgid "Command: /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:531
+msgid "This command displays help on <command>."
+msgstr ""
+
+#: src/gui/chat.cpp:536
+msgid "Command: /where"
+msgstr ""
+
+#: src/gui/chat.cpp:537
+msgid "This command displays the name of the current map."
+msgstr ""
+
+#: src/gui/chat.cpp:543
+msgid "Command: /whisper <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:544
+msgid "Command: /w <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:545
+msgid "This command sends the message <msg> to <nick>."
+msgstr ""
+
+#: src/gui/chat.cpp:547
+msgid "If the <nick> has spaces in it, enclose it in double quotes (\")."
+msgstr ""
+
+#: src/gui/chat.cpp:553
+msgid "Command: /who"
+msgstr ""
+
+#: src/gui/chat.cpp:554
+msgid "This command displays the number of players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:558
+msgid "Unknown command."
+msgstr ""
+
+#: src/gui/chat.cpp:559
+msgid "Type /help for a list of commands."
+msgstr ""
+
+#: src/gui/confirm_dialog.cpp:35
+msgid "Yes"
+msgstr "Sí"
+
+#: src/gui/confirm_dialog.cpp:36
+msgid "No"
+msgstr "No"
+
+#: src/gui/connection.cpp:49 src/gui/updatewindow.cpp:116
+msgid "Connecting..."
+msgstr "Conectando…"
+
+#: src/gui/equipmentwindow.cpp:38 src/gui/menuwindow.cpp:62
+msgid "Equipment"
+msgstr "Equipo"
+
+#: src/gui/help.cpp:33
+msgid "Help"
+msgstr ""
+
+#: src/gui/help.cpp:41
+msgid "Close"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:46 src/gui/menuwindow.cpp:63
+msgid "Inventory"
+msgstr "Inventario"
+
+#: src/gui/inventorywindow.cpp:56 src/gui/inventorywindow.cpp:232
+#: src/gui/skill.cpp:134
+msgid "Use"
+msgstr "Usar"
+
+#: src/gui/inventorywindow.cpp:57
+msgid "Drop"
+msgstr "tirar"
+
+#: src/gui/inventorywindow.cpp:99
+#, c-format
+msgid "Weight: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:104
+#, c-format
+msgid "Slots used: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:225
+msgid "Unequip"
+msgstr "quitarselo"
+
+#: src/gui/inventorywindow.cpp:228
+msgid "Equip"
+msgstr "Equipar"
+
+#: src/gui/item_amount.cpp:76
+msgid "Select amount of items to trade."
+msgstr "Seleccione objetos para comerciar."
+
+#: src/gui/item_amount.cpp:80
+msgid "Select amount of items to drop."
+msgstr "Seleccione objetos para soltar."
+
+#: src/gui/login.cpp:42
+msgid "Login"
+msgstr "conectarse"
+
+#: src/gui/login.cpp:45 src/gui/register.cpp:66
+msgid "Password:"
+msgstr "Contraseña:"
+
+#: src/gui/login.cpp:50
+msgid "Remember Username"
+msgstr ""
+
+#: src/gui/login.cpp:53 src/gui/register.cpp:75
+msgid "Register"
+msgstr "Registrar"
+
+#: src/gui/menuwindow.cpp:61
+msgid "Status"
+msgstr "Estado"
+
+#: src/gui/menuwindow.cpp:64 src/gui/skill.cpp:119
+msgid "Skills"
+msgstr "Habilidades"
+
+#: src/gui/menuwindow.cpp:65
+msgid "Shortcut"
+msgstr "Atajos"
+
+#: src/gui/menuwindow.cpp:66 src/main.cpp:716
+msgid "Setup"
+msgstr "Configuración"
+
+#: src/gui/minimap.cpp:34
+msgid "MiniMap"
+msgstr "Minimapa"
+
+#: src/gui/npclistdialog.cpp:35 src/gui/npc_text.cpp:35
+msgid "NPC"
+msgstr "NPC"
+
+#: src/gui/popupmenu.cpp:81
+#, c-format
+msgid "@@trade|Trade With %s@@"
+msgstr "@@trade|Comerciar con %s@@"
+
+#: src/gui/popupmenu.cpp:83
+#, c-format
+msgid "@@attack|Attack %s@@"
+msgstr "@@attack|Atacar a %s@@"
+
+#: src/gui/popupmenu.cpp:114
+msgid "@@talk|Talk To NPC@@"
+msgstr "@@talk|Hablar al NPC@@"
+
+#: src/gui/popupmenu.cpp:124 src/gui/popupmenu.cpp:140
+#: src/gui/popupmenu.cpp:293
+msgid "@@cancel|Cancel@@"
+msgstr "@@cancel|Cancelar@@"
+
+#: src/gui/popupmenu.cpp:136
+#, c-format
+msgid "@@pickup|Pick Up %s@@"
+msgstr "@@pickup|Recoger %s@@"
+
+#: src/gui/popupmenu.cpp:283
+#, fuzzy
+msgid "@@use|Unequip@@"
+msgstr "@@use|Equipar@@"
+
+#: src/gui/popupmenu.cpp:285
+msgid "@@use|Equip@@"
+msgstr "@@use|Equipar@@"
+
+#: src/gui/popupmenu.cpp:288
+msgid "@@use|Use@@"
+msgstr "@@use|Usar@@"
+
+#: src/gui/popupmenu.cpp:290
+msgid "@@drop|Drop@@"
+msgstr "@@drop|Tirar@@"
+
+#: src/gui/popupmenu.cpp:291
+msgid "@@description|Description@@"
+msgstr "@@description|Descripción@@"
+
+#: src/gui/register.cpp:67
+msgid "Confirm:"
+msgstr "Confirmar:"
+
+#: src/gui/register.cpp:73
+msgid "Male"
+msgstr ""
+
+#: src/gui/register.cpp:74
+msgid "Female"
+msgstr ""
+
+#: src/gui/register.cpp:176
+#, c-format
+msgid "The username needs to be at least %d characters long."
+msgstr "El nombre de usuario debe tener al menos %d caracteres."
+
+#: src/gui/register.cpp:184
+#, c-format
+msgid "The username needs to be less than %d characters long."
+msgstr "El nombre de usuario puede tener como máximo %d caracteres."
+
+#: src/gui/register.cpp:192
+#, c-format
+msgid "The password needs to be at least %d characters long."
+msgstr "La contraseña debe tener al menos %d caracteres."
+
+#: src/gui/register.cpp:200
+#, c-format
+msgid "The password needs to be less than %d characters long."
+msgstr "La contraseña puede tener como máximo %d caracteres."
+
+#: src/gui/register.cpp:207
+msgid "Passwords do not match."
+msgstr "Las contraseñas no coinciden."
+
+#: src/gui/register.cpp:227 src/main.cpp:945
+msgid "Error"
+msgstr "Error"
+
+#: src/gui/setup_audio.cpp:40
+msgid "Sound"
+msgstr "Sonido"
+
+#: src/gui/setup_audio.cpp:46
+msgid "Sfx volume"
+msgstr "Volumen efectos"
+
+#: src/gui/setup_audio.cpp:47
+msgid "Music volume"
+msgstr "Volumen musica"
+
+#: src/gui/setup.cpp:58
+msgid "Apply"
+msgstr "Aplicar"
+
+#: src/gui/setup.cpp:58
+msgid "Reset Windows"
+msgstr "Reiniciar ventanas"
+
+#: src/gui/setup.cpp:79
+msgid "Video"
+msgstr "Vídeo"
+
+#: src/gui/setup.cpp:83
+msgid "Audio"
+msgstr "Audio"
+
+#: src/gui/setup.cpp:87
+msgid "Joystick"
+msgstr "Joystick"
+
+#: src/gui/setup.cpp:91
+msgid "Keyboard"
+msgstr "Teclado"
+
+#: src/gui/setup.cpp:95
+msgid "Players"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:36 src/gui/setup_joystick.cpp:70
+msgid "Press the button to start calibration"
+msgstr "Presione el botón para comenzar la calibración"
+
+#: src/gui/setup_joystick.cpp:37 src/gui/setup_joystick.cpp:68
+msgid "Calibrate"
+msgstr "Calibrar"
+
+#: src/gui/setup_joystick.cpp:38
+msgid "Enable joystick"
+msgstr "Activar joystick"
+
+#: src/gui/setup_joystick.cpp:73
+msgid "Stop"
+msgstr "Detener"
+
+#: src/gui/setup_joystick.cpp:74
+msgid "Rotate the stick"
+msgstr "Gire el stick"
+
+#: src/gui/setup_keyboard.cpp:88
+msgid "Assign"
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:94
+#, fuzzy
+msgid "Default"
+msgstr "Eliminar"
+
+#: src/gui/setup_keyboard.cpp:115
+msgid "Key Conflict(s) Detected."
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:116
+msgid "Resolve them, or gameplay may result in strange behaviour."
+msgstr ""
+
+#: src/gui/setup_players.cpp:53
+#, fuzzy
+msgid "Name"
+msgstr "Nombre:"
+
+#: src/gui/setup_players.cpp:54
+msgid "Relation"
+msgstr ""
+
+#: src/gui/setup_players.cpp:58
+msgid "Neutral"
+msgstr ""
+
+#: src/gui/setup_players.cpp:59
+msgid "Friend"
+msgstr ""
+
+#: src/gui/setup_players.cpp:60
+msgid "Disregarded"
+msgstr ""
+
+#: src/gui/setup_players.cpp:61
+msgid "Ignored"
+msgstr ""
+
+#: src/gui/setup_players.cpp:214
+msgid "Save player list"
+msgstr ""
+
+#: src/gui/setup_players.cpp:216
+msgid "Allow trading"
+msgstr ""
+
+#: src/gui/setup_players.cpp:218
+msgid "Allow whispers"
+msgstr ""
+
+#: src/gui/setup_players.cpp:245
+msgid "When ignoring:"
+msgstr ""
+
+#: src/gui/setup_video.cpp:112
+msgid "Full screen"
+msgstr "Pantalla completa"
+
+#: src/gui/setup_video.cpp:113
+msgid "OpenGL"
+msgstr "OpenGL"
+
+#: src/gui/setup_video.cpp:114
+msgid "Custom cursor"
+msgstr "Cursor propio"
+
+#: src/gui/setup_video.cpp:116
+msgid "FPS Limit:"
+msgstr "Límite de FPS:"
+
+#: src/gui/setup_video.cpp:135
+msgid "Gui opacity"
+msgstr "Transparencia menus"
+
+#: src/gui/setup_video.cpp:192
+msgid "Scroll radius"
+msgstr "Ratio de scroll"
+
+#: src/gui/setup_video.cpp:200
+msgid "Scroll laziness"
+msgstr "Velocidad de scroll"
+
+#: src/gui/setup_video.cpp:208
+msgid "Ambient FX"
+msgstr "Efectos ambientales"
+
+#: src/gui/setup_video.cpp:215 src/gui/setup_video.cpp:412
+msgid "off"
+msgstr "desactivado"
+
+#: src/gui/setup_video.cpp:218 src/gui/setup_video.cpp:234
+#: src/gui/setup_video.cpp:415 src/gui/setup_video.cpp:429
+msgid "low"
+msgstr "bajo"
+
+#: src/gui/setup_video.cpp:221 src/gui/setup_video.cpp:240
+#: src/gui/setup_video.cpp:418 src/gui/setup_video.cpp:435
+msgid "high"
+msgstr "alto"
+
+#: src/gui/setup_video.cpp:227
+msgid "Particle Detail"
+msgstr ""
+
+#: src/gui/setup_video.cpp:237 src/gui/setup_video.cpp:432
+msgid "medium"
+msgstr ""
+
+#: src/gui/setup_video.cpp:243 src/gui/setup_video.cpp:438
+msgid "max"
+msgstr ""
+
+#: src/gui/setup_video.cpp:309
+msgid "Switching to full screen"
+msgstr "Cambiar a pantalla completa"
+
+#: src/gui/setup_video.cpp:310
+msgid "Restart needed for changes to take effect."
+msgstr "Se necesita reiniciar para aplicar los cambios."
+
+#: src/gui/setup_video.cpp:322
+msgid "Changing OpenGL"
+msgstr "Cambiar a OpenGL"
+
+#: src/gui/setup_video.cpp:323
+msgid "Applying change to OpenGL requires restart."
+msgstr "Se necesita reiniciar para aplicar los cambios hechos a OpenGL."
+
+#: src/gui/skill.cpp:79
+msgid "Mystery Skill"
+msgstr ""
+
+#: src/gui/skill.cpp:132 src/gui/skill.cpp:188
+#, c-format
+msgid "Skill points: %d"
+msgstr ""
+
+#: src/gui/skill.cpp:133
+msgid "Up"
+msgstr ""
+
+#: src/gui/status.cpp:52 src/gui/status.cpp:235
+#, fuzzy, c-format
+msgid "Job: %d"
+msgstr "Nivel: %d"
+
+#: src/gui/status.cpp:53 src/gui/status.cpp:238
+#, fuzzy, c-format
+msgid "Money: %d GP"
+msgstr "Dinero: %d"
+
+#: src/gui/status.cpp:127
+#, fuzzy
+msgid "Stats"
+msgstr "Estado"
+
+#: src/gui/status.cpp:128
+msgid "Total"
+msgstr ""
+
+#: src/gui/status.cpp:129
+msgid "Cost"
+msgstr ""
+
+#: src/gui/status.cpp:132
+#, fuzzy
+msgid "Attack:"
+msgstr "Ataque %+d"
+
+#: src/gui/status.cpp:133
+#, fuzzy
+msgid "Defense:"
+msgstr "Defensa %+d"
+
+#: src/gui/status.cpp:134
+#, fuzzy
+msgid "M.Attack:"
+msgstr "Ataque %+d"
+
+#: src/gui/status.cpp:135
+#, fuzzy
+msgid "M.Defense:"
+msgstr "Defensa %+d"
+
+#: src/gui/status.cpp:136
+#, c-format
+msgid "% Accuracy:"
+msgstr ""
+
+#: src/gui/status.cpp:137
+#, c-format
+msgid "% Evade:"
+msgstr ""
+
+#: src/gui/status.cpp:138
+msgid "% Reflex:"
+msgstr ""
+
+#: src/gui/status.cpp:282
+#, fuzzy
+msgid "Strength"
+msgstr "Fuerza:"
+
+#: src/gui/status.cpp:283
+#, fuzzy
+msgid "Agility"
+msgstr "Agilidad:"
+
+#: src/gui/status.cpp:284
+#, fuzzy
+msgid "Vitality"
+msgstr "Vitalidad:"
+
+#: src/gui/status.cpp:285
+#, fuzzy
+msgid "Intelligence"
+msgstr "Inteligencia:"
+
+#: src/gui/status.cpp:286
+#, fuzzy
+msgid "Dexterity"
+msgstr "Destreza:"
+
+#: src/gui/status.cpp:287
+msgid "Luck"
+msgstr ""
+
+#: src/gui/status.cpp:305
+#, c-format
+msgid "Remaining Status Points: %d"
+msgstr ""
+
+#: src/gui/trade.cpp:61
+msgid "Add"
+msgstr "Añadir"
+
+#: src/gui/trade.cpp:64
+msgid "Trade"
+msgstr ""
+
+#: src/gui/trade.cpp:80 src/gui/trade.cpp:156 src/gui/trade.cpp:204
+#, c-format
+msgid "You get %d GP."
+msgstr "Tu consigues %d GP."
+
+#: src/gui/trade.cpp:81
+msgid "You give:"
+msgstr "Tu das:"
+
+#: src/gui/trade.cpp:283
+msgid "Failed adding item. You can not overlap one kind of item on the window."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:93
+msgid "Updating..."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:119
+msgid "Play"
+msgstr ""
+
+#: src/gui/updatewindow.cpp:525
+msgid "Completed"
+msgstr ""
+
+#: src/resources/itemdb.cpp:99
+msgid "Unnamed"
+msgstr ""
+
+#: src/main.cpp:769
+msgid "Got disconnected from server!"
+msgstr ""
+
+#: src/main.cpp:956
+#, fuzzy
+msgid "Connecting to map server..."
+msgstr "Conectando…"
+
+#: src/main.cpp:964
+msgid "Connecting to character server..."
+msgstr ""
+
+#: src/main.cpp:972
+msgid "Connecting to account server..."
+msgstr ""
+
+#~ msgid "Unregister"
+#~ msgstr "Cancelar Cuenta"
+
+#~ msgid "Willpower:"
+#~ msgstr "Fuerza de voluntad:"
+
+#~ msgid "Please distribute %d points"
+#~ msgstr "Distribuya %d puntos"
+
+#~ msgid "Your name needs to be at least 4 characters."
+#~ msgstr "El nombre debe tener al menos 4 caracteres."
+
+#~ msgid "Character stats OK"
+#~ msgstr "Estatus personaje OK"
+
+#~ msgid "Please remove %d points"
+#~ msgstr "por favor quita %d puntos"
+
+#~ msgid "Split"
+#~ msgstr "Dividir"
+
+#~ msgid "Select amount of items to split."
+#~ msgstr "Seleccione objetos para dividir."
+
+#~ msgid "@@split|Split@@"
+#~ msgstr "@@split|Dividir@@"
+
+#~ msgid "Switch server"
+#~ msgstr "Cambiar servidor"
+
+#~ msgid "Switch character"
+#~ msgstr "Cambiar personaje"
+
+#~ msgid "Email:"
+#~ msgstr "Email:"
+
+#~ msgid "Choose your Mana World Server"
+#~ msgstr "Elija su servidor de Mana World"
+
+#~ msgid "Port:"
+#~ msgstr "Puerto:"
+
+#~ msgid "Please type both the address and the port of a server."
+#~ msgstr "Escriba la dirección y el puerto de un servidor."
+
+#~ msgid "Propose trade"
+#~ msgstr "Proponer"
+
+#~ msgid "Confirm trade"
+#~ msgstr "Confirmar"
+
+#~ msgid "Change"
+#~ msgstr "Modificar"
+
+#~ msgid "HP %+d"
+#~ msgstr "HP %+d"
+
+#~ msgid "MP %+d"
+#~ msgstr "MP %+d"
+
+#~ msgid "Confirm"
+#~ msgstr "Confirmar"
+
+#~ msgid "Charisma:"
+#~ msgstr "Carisma:"
+
+#~ msgid "Total Weight: %d - Maximum Weight: %d"
+#~ msgstr "Peso Total: %d - Peso Máximo: %d"
+
+#~ msgid "Keep"
+#~ msgstr "Mantener"
diff --git a/po/fi.po b/po/fi.po
new file mode 100644
index 00000000..80b21093
--- /dev/null
+++ b/po/fi.po
@@ -0,0 +1,995 @@
+# Finnish translation for tmw
+# Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008
+# This file is distributed under the same license as the tmw package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: tmw\n"
+"Report-Msgid-Bugs-To: themanaworld-devel@lists.sourceforge.net\n"
+"POT-Creation-Date: 2009-01-08 22:10+0100\n"
+"PO-Revision-Date: 2008-12-30 10:23+0000\n"
+"Last-Translator: ville-v <villev90@gmail.com>\n"
+"Language-Team: Finnish <fi@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-01-06 12:40+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#: src/gui/buy.cpp:43 src/gui/buy.cpp:61 src/gui/buysell.cpp:35
+msgid "Buy"
+msgstr "Osta"
+
+#: src/gui/buy.cpp:58 src/gui/buy.cpp:239 src/gui/sell.cpp:65
+#: src/gui/sell.cpp:259
+#, c-format
+msgid "Price: %d GP / Total: %d GP"
+msgstr "Kappalehinta: %d GP / Yhteensä: %d GP"
+
+#: src/gui/buy.cpp:62 src/gui/sell.cpp:69
+msgid "Quit"
+msgstr "Sulje"
+
+#: src/gui/buy.cpp:63 src/gui/buy.cpp:206 src/gui/buy.cpp:224
+#: src/gui/inventorywindow.cpp:150 src/gui/inventorywindow.cpp:160
+#: src/gui/sell.cpp:70 src/gui/sell.cpp:230 src/gui/sell.cpp:244
+#: src/gui/trade.cpp:94 src/gui/trade.cpp:266
+#, c-format
+msgid "Description: %s"
+msgstr "Kuvaus: %s"
+
+#: src/gui/buy.cpp:64 src/gui/buy.cpp:208 src/gui/buy.cpp:225
+#: src/gui/inventorywindow.cpp:149 src/gui/inventorywindow.cpp:158
+#: src/gui/sell.cpp:71 src/gui/sell.cpp:232 src/gui/sell.cpp:245
+#, c-format
+msgid "Effect: %s"
+msgstr "Vaikutus: %s"
+
+#: src/gui/buysell.cpp:31
+#, fuzzy
+msgid "Shop"
+msgstr "Lopeta"
+
+#: src/gui/buysell.cpp:35 src/gui/sell.cpp:48 src/gui/sell.cpp:68
+msgid "Sell"
+msgstr "Myy"
+
+#: src/gui/buysell.cpp:35 src/gui/char_select.cpp:85
+#: src/gui/char_select.cpp:258 src/gui/char_server.cpp:60
+#: src/gui/connection.cpp:47 src/gui/item_amount.cpp:61 src/gui/login.cpp:52
+#: src/gui/npclistdialog.cpp:45 src/gui/register.cpp:76 src/gui/setup.cpp:58
+#: src/gui/trade.cpp:63 src/gui/updatewindow.cpp:118
+msgid "Cancel"
+msgstr "Peru"
+
+#: src/gui/char_select.cpp:63
+msgid "Confirm Character Delete"
+msgstr "Vahvista hahmon poistopyyntö"
+
+#: src/gui/char_select.cpp:64
+msgid "Are you sure you want to delete this character?"
+msgstr "Oletko varma, että haluat poistaa tämän hahmon?"
+
+#: src/gui/char_select.cpp:81
+#, fuzzy
+msgid "Select Character"
+msgstr "Luo hahmo"
+
+#: src/gui/char_select.cpp:84 src/gui/item_amount.cpp:60 src/gui/login.cpp:51
+#: src/gui/ok_dialog.cpp:37 src/gui/trade.cpp:62
+msgid "Ok"
+msgstr "Ok"
+
+#: src/gui/char_select.cpp:86
+msgid "New"
+msgstr "Uusi"
+
+#: src/gui/char_select.cpp:87 src/gui/setup_players.cpp:220
+msgid "Delete"
+msgstr "Poista"
+
+#: src/gui/char_select.cpp:88
+msgid "Previous"
+msgstr "Edellinen"
+
+#: src/gui/char_select.cpp:89
+msgid "Next"
+msgstr "Seuraava"
+
+#: src/gui/char_select.cpp:91 src/gui/char_select.cpp:171
+#: src/gui/char_select.cpp:183 src/gui/inventorywindow.cpp:148
+#: src/gui/inventorywindow.cpp:156 src/gui/trade.cpp:92 src/gui/trade.cpp:264
+#, c-format
+msgid "Name: %s"
+msgstr "Nimi: %s"
+
+#: src/gui/char_select.cpp:92 src/gui/char_select.cpp:172
+#: src/gui/char_select.cpp:184 src/gui/status.cpp:51 src/gui/status.cpp:232
+#, c-format
+msgid "Level: %d"
+msgstr "Taso: %d"
+
+#: src/gui/char_select.cpp:93 src/gui/char_select.cpp:173
+#: src/gui/char_select.cpp:185
+#, fuzzy, c-format
+msgid "Job Level: %d"
+msgstr "Taso: %d"
+
+#: src/gui/char_select.cpp:94 src/gui/char_select.cpp:186
+#, c-format
+msgid "Money: %d"
+msgstr "Rahatilanne: %d"
+
+#: src/gui/char_select.cpp:174
+#, c-format
+msgid "Gold: %d"
+msgstr ""
+
+#: src/gui/char_select.cpp:243
+msgid "Create Character"
+msgstr "Luo hahmo"
+
+#: src/gui/char_select.cpp:250 src/gui/login.cpp:44 src/gui/register.cpp:65
+msgid "Name:"
+msgstr "Nimi:"
+
+#: src/gui/char_select.cpp:253
+msgid "Hair Color:"
+msgstr "Hiusten väri:"
+
+#: src/gui/char_select.cpp:256
+msgid "Hair Style:"
+msgstr "Hiustyyli:"
+
+#: src/gui/char_select.cpp:257
+msgid "Create"
+msgstr "Luo"
+
+#: src/gui/char_server.cpp:52
+#, fuzzy
+msgid "Select Server"
+msgstr "Vaihda palvelinta"
+
+#: src/gui/char_server.cpp:59 src/gui/npclistdialog.cpp:44
+#: src/gui/npc_text.cpp:46
+msgid "OK"
+msgstr ""
+
+#: src/gui/chat.cpp:122
+msgid "Global announcement:"
+msgstr ""
+
+#: src/gui/chat.cpp:125
+#, c-format
+msgid "Global announcement from %s:"
+msgstr ""
+
+#: src/gui/chat.cpp:140 src/gui/login.cpp:46 src/gui/register.cpp:68
+msgid "Server:"
+msgstr "Palvelin:"
+
+#: src/gui/chat.cpp:146
+#, c-format
+msgid "%s whispers:"
+msgstr ""
+
+#: src/gui/chat.cpp:283
+#, c-format
+msgid "Whispering to %s: %s"
+msgstr ""
+
+#: src/gui/chat.cpp:356
+msgid "Unknown command"
+msgstr ""
+
+#: src/gui/chat.cpp:366
+msgid "Trade failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:369
+msgid "Emote failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:372
+msgid "Sit failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:375
+msgid "Chat creating failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:378
+msgid "Could not join party!"
+msgstr ""
+
+#: src/gui/chat.cpp:381
+msgid "Cannot shout!"
+msgstr ""
+
+#: src/gui/chat.cpp:389
+msgid "You have not yet reached a high enough lvl!"
+msgstr ""
+
+#: src/gui/chat.cpp:392
+msgid "Insufficient HP!"
+msgstr ""
+
+#: src/gui/chat.cpp:395
+msgid "Insufficient SP!"
+msgstr ""
+
+#: src/gui/chat.cpp:398
+msgid "You have no memos!"
+msgstr ""
+
+#: src/gui/chat.cpp:401
+msgid "You cannot do that right now!"
+msgstr ""
+
+#: src/gui/chat.cpp:404
+msgid "Seems you need more Zeny... ;-)"
+msgstr ""
+
+#: src/gui/chat.cpp:407
+msgid "You cannot use this skill with that kind of weapon!"
+msgstr ""
+
+#: src/gui/chat.cpp:410
+msgid "You need another red gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:413
+msgid "You need another blue gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:416
+msgid "You're carrying to much to do this!"
+msgstr ""
+
+#: src/gui/chat.cpp:419
+msgid "Huh? What's that?"
+msgstr ""
+
+#: src/gui/chat.cpp:425
+msgid "Warp failed..."
+msgstr ""
+
+#: src/gui/chat.cpp:428
+msgid "Could not steal anything..."
+msgstr ""
+
+#: src/gui/chat.cpp:431
+msgid "Poison had no effect..."
+msgstr ""
+
+#: src/gui/chat.cpp:496
+msgid "-- Help --"
+msgstr ""
+
+#: src/gui/chat.cpp:499
+msgid "/announce: Global announcement (GM only)"
+msgstr ""
+
+#: src/gui/chat.cpp:500
+msgid "/clear: Clears this window"
+msgstr ""
+
+#: src/gui/chat.cpp:501
+msgid "/help: Display this help"
+msgstr ""
+
+#: src/gui/chat.cpp:502
+msgid "/where: Display map name"
+msgstr ""
+
+#: src/gui/chat.cpp:503
+msgid "/whisper <nick> <message>: Sends a private <message> to <nick>"
+msgstr ""
+
+#: src/gui/chat.cpp:505
+msgid "/w <nick> <message>: Short form for /whisper"
+msgstr ""
+
+#: src/gui/chat.cpp:506
+msgid "/who: Display number of online users"
+msgstr ""
+
+#: src/gui/chat.cpp:507
+msgid "For more information, type /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:512
+msgid "Command: /announce <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:513
+msgid "*** only available to a GM ***"
+msgstr ""
+
+#: src/gui/chat.cpp:514
+msgid "This command sends the message <msg> to all players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:520
+msgid "Command: /clear"
+msgstr ""
+
+#: src/gui/chat.cpp:521
+msgid "This command clears the chat log of previous chat."
+msgstr ""
+
+#: src/gui/chat.cpp:527
+msgid "Command: /help"
+msgstr ""
+
+#: src/gui/chat.cpp:528
+msgid "This command displays a list of all commands available."
+msgstr ""
+
+#: src/gui/chat.cpp:530
+msgid "Command: /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:531
+msgid "This command displays help on <command>."
+msgstr ""
+
+#: src/gui/chat.cpp:536
+msgid "Command: /where"
+msgstr ""
+
+#: src/gui/chat.cpp:537
+msgid "This command displays the name of the current map."
+msgstr ""
+
+#: src/gui/chat.cpp:543
+msgid "Command: /whisper <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:544
+msgid "Command: /w <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:545
+msgid "This command sends the message <msg> to <nick>."
+msgstr ""
+
+#: src/gui/chat.cpp:547
+msgid "If the <nick> has spaces in it, enclose it in double quotes (\")."
+msgstr ""
+
+#: src/gui/chat.cpp:553
+msgid "Command: /who"
+msgstr ""
+
+#: src/gui/chat.cpp:554
+msgid "This command displays the number of players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:558
+msgid "Unknown command."
+msgstr ""
+
+#: src/gui/chat.cpp:559
+msgid "Type /help for a list of commands."
+msgstr ""
+
+#: src/gui/confirm_dialog.cpp:35
+msgid "Yes"
+msgstr "Kyllä"
+
+#: src/gui/confirm_dialog.cpp:36
+msgid "No"
+msgstr "Ei"
+
+#: src/gui/connection.cpp:49 src/gui/updatewindow.cpp:116
+msgid "Connecting..."
+msgstr "Yhdistetään..."
+
+#: src/gui/equipmentwindow.cpp:38 src/gui/menuwindow.cpp:62
+msgid "Equipment"
+msgstr "Varusteet"
+
+#: src/gui/help.cpp:33
+msgid "Help"
+msgstr ""
+
+#: src/gui/help.cpp:41
+msgid "Close"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:46 src/gui/menuwindow.cpp:63
+msgid "Inventory"
+msgstr "Tavaraluettelo"
+
+#: src/gui/inventorywindow.cpp:56 src/gui/inventorywindow.cpp:232
+#: src/gui/skill.cpp:134
+msgid "Use"
+msgstr "Käytä"
+
+#: src/gui/inventorywindow.cpp:57
+msgid "Drop"
+msgstr "Pudota"
+
+#: src/gui/inventorywindow.cpp:99
+#, c-format
+msgid "Weight: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:104
+#, c-format
+msgid "Slots used: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:225
+msgid "Unequip"
+msgstr "Poista varuste käytöstä"
+
+#: src/gui/inventorywindow.cpp:228
+msgid "Equip"
+msgstr "Ota käyttöön"
+
+#: src/gui/item_amount.cpp:76
+msgid "Select amount of items to trade."
+msgstr "Anna vaihdettavien tavaroiden määrä."
+
+#: src/gui/item_amount.cpp:80
+msgid "Select amount of items to drop."
+msgstr "Anna pudotettavien tavaroiden määrä."
+
+#: src/gui/login.cpp:42
+msgid "Login"
+msgstr "Kirjaudu sisään"
+
+#: src/gui/login.cpp:45 src/gui/register.cpp:66
+msgid "Password:"
+msgstr "Salasana:"
+
+#: src/gui/login.cpp:50
+msgid "Remember Username"
+msgstr "Muista käyttäjätunnus"
+
+#: src/gui/login.cpp:53 src/gui/register.cpp:75
+msgid "Register"
+msgstr "Rekisteröidy"
+
+#: src/gui/menuwindow.cpp:61
+msgid "Status"
+msgstr "Hahmon tiedot"
+
+#: src/gui/menuwindow.cpp:64 src/gui/skill.cpp:119
+msgid "Skills"
+msgstr "Taidot"
+
+#: src/gui/menuwindow.cpp:65
+msgid "Shortcut"
+msgstr "Pikavalinnat"
+
+#: src/gui/menuwindow.cpp:66 src/main.cpp:716
+msgid "Setup"
+msgstr "Asetukset"
+
+#: src/gui/minimap.cpp:34
+msgid "MiniMap"
+msgstr "Apukartta"
+
+#: src/gui/npclistdialog.cpp:35 src/gui/npc_text.cpp:35
+msgid "NPC"
+msgstr "Epäpelattava hahmo"
+
+#: src/gui/popupmenu.cpp:81
+#, c-format
+msgid "@@trade|Trade With %s@@"
+msgstr "@@trade|Vaihda tavaroita %s kanssa@@"
+
+#: src/gui/popupmenu.cpp:83
+#, c-format
+msgid "@@attack|Attack %s@@"
+msgstr "@@attack|Hyökkää %s kimppuun@@"
+
+#: src/gui/popupmenu.cpp:114
+msgid "@@talk|Talk To NPC@@"
+msgstr "@@talk|Puhu epäpelattavalle hahmolle@@"
+
+#: src/gui/popupmenu.cpp:124 src/gui/popupmenu.cpp:140
+#: src/gui/popupmenu.cpp:293
+msgid "@@cancel|Cancel@@"
+msgstr "@@cancel|Peruuta@@"
+
+#: src/gui/popupmenu.cpp:136
+#, c-format
+msgid "@@pickup|Pick Up %s@@"
+msgstr "@@pickup|Poimi %s@@"
+
+#: src/gui/popupmenu.cpp:283
+#, fuzzy
+msgid "@@use|Unequip@@"
+msgstr "@@use|Ota varuste käyttöön@@"
+
+#: src/gui/popupmenu.cpp:285
+msgid "@@use|Equip@@"
+msgstr "@@use|Ota varuste käyttöön@@"
+
+#: src/gui/popupmenu.cpp:288
+msgid "@@use|Use@@"
+msgstr "@@use|Käytä@@"
+
+#: src/gui/popupmenu.cpp:290
+msgid "@@drop|Drop@@"
+msgstr "@@drop|Pudota maahan@@"
+
+#: src/gui/popupmenu.cpp:291
+msgid "@@description|Description@@"
+msgstr "@@description|Kuvaus@@"
+
+#: src/gui/register.cpp:67
+msgid "Confirm:"
+msgstr "Vahvista:"
+
+#: src/gui/register.cpp:73
+msgid "Male"
+msgstr "Miespuolinen"
+
+#: src/gui/register.cpp:74
+msgid "Female"
+msgstr "Naispuolinen"
+
+#: src/gui/register.cpp:176
+#, c-format
+msgid "The username needs to be at least %d characters long."
+msgstr "Käyttäjänimen tulee olla vähintään %d merkkiä pitkä"
+
+#: src/gui/register.cpp:184
+#, c-format
+msgid "The username needs to be less than %d characters long."
+msgstr "Käyttäjänimen tulee olla alle %d merkkiä pitkä."
+
+#: src/gui/register.cpp:192
+#, c-format
+msgid "The password needs to be at least %d characters long."
+msgstr "Salasanan tulee olla vähintään %d merkkiä pitkä"
+
+#: src/gui/register.cpp:200
+#, c-format
+msgid "The password needs to be less than %d characters long."
+msgstr "Salasanan tulee olla alle %d merkkiä pitkä."
+
+#: src/gui/register.cpp:207
+msgid "Passwords do not match."
+msgstr "Salasanat eivät täsmää."
+
+#: src/gui/register.cpp:227 src/main.cpp:945
+msgid "Error"
+msgstr "Virhe"
+
+#: src/gui/setup_audio.cpp:40
+msgid "Sound"
+msgstr "Ääni"
+
+#: src/gui/setup_audio.cpp:46
+msgid "Sfx volume"
+msgstr "Äänitehosteiden voimakkuus"
+
+#: src/gui/setup_audio.cpp:47
+msgid "Music volume"
+msgstr "Musiikin voimakkuus"
+
+#: src/gui/setup.cpp:58
+msgid "Apply"
+msgstr "Käytä"
+
+#: src/gui/setup.cpp:58
+msgid "Reset Windows"
+msgstr "Palauta ikkunoiden oletusasetukset"
+
+#: src/gui/setup.cpp:79
+msgid "Video"
+msgstr "Kuva"
+
+#: src/gui/setup.cpp:83
+msgid "Audio"
+msgstr "Ääni"
+
+#: src/gui/setup.cpp:87
+msgid "Joystick"
+msgstr "Peliohjain"
+
+#: src/gui/setup.cpp:91
+msgid "Keyboard"
+msgstr "Näppäimistö"
+
+#: src/gui/setup.cpp:95
+msgid "Players"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:36 src/gui/setup_joystick.cpp:70
+msgid "Press the button to start calibration"
+msgstr "Paina tätä nappia aloittaaksesi peliohjaimen kalibroinnin"
+
+#: src/gui/setup_joystick.cpp:37 src/gui/setup_joystick.cpp:68
+msgid "Calibrate"
+msgstr "Kalibroi"
+
+#: src/gui/setup_joystick.cpp:38
+msgid "Enable joystick"
+msgstr "Peliohjaintuki päälle"
+
+#: src/gui/setup_joystick.cpp:73
+msgid "Stop"
+msgstr "Lopeta"
+
+#: src/gui/setup_joystick.cpp:74
+msgid "Rotate the stick"
+msgstr "Käytä ohjain ääriasennoissaan pyörittämällä"
+
+#: src/gui/setup_keyboard.cpp:88
+msgid "Assign"
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:94
+#, fuzzy
+msgid "Default"
+msgstr "Poista"
+
+#: src/gui/setup_keyboard.cpp:115
+msgid "Key Conflict(s) Detected."
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:116
+msgid "Resolve them, or gameplay may result in strange behaviour."
+msgstr ""
+
+#: src/gui/setup_players.cpp:53
+#, fuzzy
+msgid "Name"
+msgstr "Nimi:"
+
+#: src/gui/setup_players.cpp:54
+msgid "Relation"
+msgstr ""
+
+#: src/gui/setup_players.cpp:58
+msgid "Neutral"
+msgstr ""
+
+#: src/gui/setup_players.cpp:59
+msgid "Friend"
+msgstr ""
+
+#: src/gui/setup_players.cpp:60
+msgid "Disregarded"
+msgstr ""
+
+#: src/gui/setup_players.cpp:61
+msgid "Ignored"
+msgstr ""
+
+#: src/gui/setup_players.cpp:214
+msgid "Save player list"
+msgstr ""
+
+#: src/gui/setup_players.cpp:216
+msgid "Allow trading"
+msgstr ""
+
+#: src/gui/setup_players.cpp:218
+msgid "Allow whispers"
+msgstr ""
+
+#: src/gui/setup_players.cpp:245
+msgid "When ignoring:"
+msgstr ""
+
+#: src/gui/setup_video.cpp:112
+msgid "Full screen"
+msgstr "Kokoruututila"
+
+#: src/gui/setup_video.cpp:113
+msgid "OpenGL"
+msgstr "OpenGL"
+
+#: src/gui/setup_video.cpp:114
+msgid "Custom cursor"
+msgstr "Tyylitelty hiiren osoitin"
+
+#: src/gui/setup_video.cpp:116
+msgid "FPS Limit:"
+msgstr "Piirtonopeusrajoitin (kuvaa / sekunti)"
+
+#: src/gui/setup_video.cpp:135
+msgid "Gui opacity"
+msgstr "Käyttöliittymän läpinäkyvyys"
+
+#: src/gui/setup_video.cpp:192
+msgid "Scroll radius"
+msgstr "Kameran perässälaahaus"
+
+#: src/gui/setup_video.cpp:200
+msgid "Scroll laziness"
+msgstr "Kameran perässälaahauksen tiukkuus"
+
+#: src/gui/setup_video.cpp:208
+msgid "Ambient FX"
+msgstr "Taustaäänet"
+
+#: src/gui/setup_video.cpp:215 src/gui/setup_video.cpp:412
+msgid "off"
+msgstr "pois päältä"
+
+#: src/gui/setup_video.cpp:218 src/gui/setup_video.cpp:234
+#: src/gui/setup_video.cpp:415 src/gui/setup_video.cpp:429
+msgid "low"
+msgstr "matala"
+
+#: src/gui/setup_video.cpp:221 src/gui/setup_video.cpp:240
+#: src/gui/setup_video.cpp:418 src/gui/setup_video.cpp:435
+msgid "high"
+msgstr "korkea"
+
+#: src/gui/setup_video.cpp:227
+msgid "Particle Detail"
+msgstr ""
+
+#: src/gui/setup_video.cpp:237 src/gui/setup_video.cpp:432
+msgid "medium"
+msgstr ""
+
+#: src/gui/setup_video.cpp:243 src/gui/setup_video.cpp:438
+msgid "max"
+msgstr ""
+
+#: src/gui/setup_video.cpp:309
+msgid "Switching to full screen"
+msgstr "Kokoruututilaan siirtyminen"
+
+#: src/gui/setup_video.cpp:310
+msgid "Restart needed for changes to take effect."
+msgstr "Ohjelma pitää käynnistää uudelleen, jotta muutokset astuvat voimaan."
+
+#: src/gui/setup_video.cpp:322
+msgid "Changing OpenGL"
+msgstr "Vaihdetaan OpenGL -toimintatilaan"
+
+#: src/gui/setup_video.cpp:323
+msgid "Applying change to OpenGL requires restart."
+msgstr "OpenGL -asetusten muutokset vaativat ohjelman uudelleenkäynnistyksen"
+
+#: src/gui/skill.cpp:79
+msgid "Mystery Skill"
+msgstr ""
+
+#: src/gui/skill.cpp:132 src/gui/skill.cpp:188
+#, c-format
+msgid "Skill points: %d"
+msgstr ""
+
+#: src/gui/skill.cpp:133
+msgid "Up"
+msgstr ""
+
+#: src/gui/status.cpp:52 src/gui/status.cpp:235
+#, fuzzy, c-format
+msgid "Job: %d"
+msgstr "Taso: %d"
+
+#: src/gui/status.cpp:53 src/gui/status.cpp:238
+#, fuzzy, c-format
+msgid "Money: %d GP"
+msgstr "Rahatilanne: %d"
+
+#: src/gui/status.cpp:127
+#, fuzzy
+msgid "Stats"
+msgstr "Hahmon tiedot"
+
+#: src/gui/status.cpp:128
+msgid "Total"
+msgstr ""
+
+#: src/gui/status.cpp:129
+msgid "Cost"
+msgstr ""
+
+#: src/gui/status.cpp:132
+#, fuzzy
+msgid "Attack:"
+msgstr "Hyökkäys %+d"
+
+#: src/gui/status.cpp:133
+#, fuzzy
+msgid "Defense:"
+msgstr "Puolustus %+d"
+
+#: src/gui/status.cpp:134
+#, fuzzy
+msgid "M.Attack:"
+msgstr "Hyökkäys %+d"
+
+#: src/gui/status.cpp:135
+#, fuzzy
+msgid "M.Defense:"
+msgstr "Puolustus %+d"
+
+#: src/gui/status.cpp:136
+#, c-format
+msgid "% Accuracy:"
+msgstr ""
+
+#: src/gui/status.cpp:137
+#, c-format
+msgid "% Evade:"
+msgstr ""
+
+#: src/gui/status.cpp:138
+msgid "% Reflex:"
+msgstr ""
+
+#: src/gui/status.cpp:282
+#, fuzzy
+msgid "Strength"
+msgstr "Voima:"
+
+#: src/gui/status.cpp:283
+#, fuzzy
+msgid "Agility"
+msgstr "Ketteryys:"
+
+#: src/gui/status.cpp:284
+#, fuzzy
+msgid "Vitality"
+msgstr "Elinvoima:"
+
+#: src/gui/status.cpp:285
+#, fuzzy
+msgid "Intelligence"
+msgstr "Älykkyys:"
+
+#: src/gui/status.cpp:286
+#, fuzzy
+msgid "Dexterity"
+msgstr "Näppäryys:"
+
+#: src/gui/status.cpp:287
+msgid "Luck"
+msgstr ""
+
+#: src/gui/status.cpp:305
+#, c-format
+msgid "Remaining Status Points: %d"
+msgstr ""
+
+#: src/gui/trade.cpp:61
+msgid "Add"
+msgstr "Lisää"
+
+#: src/gui/trade.cpp:64
+msgid "Trade"
+msgstr ""
+
+#: src/gui/trade.cpp:80 src/gui/trade.cpp:156 src/gui/trade.cpp:204
+#, c-format
+msgid "You get %d GP."
+msgstr "Sait %d GP"
+
+#: src/gui/trade.cpp:81
+msgid "You give:"
+msgstr "Annat:"
+
+#: src/gui/trade.cpp:283
+msgid "Failed adding item. You can not overlap one kind of item on the window."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:93
+msgid "Updating..."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:119
+msgid "Play"
+msgstr ""
+
+#: src/gui/updatewindow.cpp:525
+msgid "Completed"
+msgstr ""
+
+#: src/resources/itemdb.cpp:99
+msgid "Unnamed"
+msgstr ""
+
+#: src/main.cpp:769
+msgid "Got disconnected from server!"
+msgstr ""
+
+#: src/main.cpp:956
+#, fuzzy
+msgid "Connecting to map server..."
+msgstr "Yhdistetään..."
+
+#: src/main.cpp:964
+msgid "Connecting to character server..."
+msgstr ""
+
+#: src/main.cpp:972
+msgid "Connecting to account server..."
+msgstr ""
+
+#~ msgid "Account and Character Management"
+#~ msgstr "Tilin ja hahmojen hallinta"
+
+#~ msgid "Unregister"
+#~ msgstr "Poista palvelimelta"
+
+#~ msgid "Change Password"
+#~ msgstr "Vaihda salasana"
+
+#~ msgid "Change Email Address"
+#~ msgstr "Vaihda sähköpostiosoite"
+
+#~ msgid "Account: %s"
+#~ msgstr "Tili: %s"
+
+#~ msgid "Willpower:"
+#~ msgstr "Tahdonvoima:"
+
+#~ msgid "Please distribute %d points"
+#~ msgstr "Jaa %d pistettä"
+
+#~ msgid "Your name needs to be at least 4 characters."
+#~ msgstr "Nimessäsi täytyy olla ainakin 4 merkkiä."
+
+#~ msgid "Character stats OK"
+#~ msgstr "Hahmon pistejako OK"
+
+#~ msgid "Please remove %d points"
+#~ msgstr "%d pistettä liikaa"
+
+#~ msgid "Split"
+#~ msgstr "Jaa"
+
+#~ msgid "Select amount of items to split."
+#~ msgstr "Anna eri pinoon jaettavien tavaroiden määrä."
+
+#~ msgid "Guilds"
+#~ msgstr "Kiltatoiminta"
+
+#~ msgid "@@guild|Invite %s@@"
+#~ msgstr "@@guild|Kutsu %s mukaan kiltaan@@"
+
+#~ msgid "@@party|Invite %s to join your party@@"
+#~ msgstr "@@party|Kutsu %s mukaan ryhmääsi@@"
+
+#~ msgid "@@split|Split@@"
+#~ msgstr "@@split|Pinon jako@@"
+
+#~ msgid "Switch character"
+#~ msgstr "Vaihda hahmoa"
+
+#~ msgid "Email:"
+#~ msgstr "Sähköpostiosoite:"
+
+#~ msgid "Choose your Mana World Server"
+#~ msgstr "Valitse Mana World -palvelimesi"
+
+#~ msgid "Port:"
+#~ msgstr "Portti:"
+
+#~ msgid "Please type both the address and the port of a server."
+#~ msgstr "Kirjoita kenttiin sekä palvelimen osoite että portti"
+
+#~ msgid "Visible names"
+#~ msgstr "Näytä nimet"
+
+#~ msgid "Propose trade"
+#~ msgstr "Ehdota vaihtokauppaa"
+
+#~ msgid "Confirm trade"
+#~ msgstr "Suostu vaihtokauppaan"
+
+#~ msgid "Change"
+#~ msgstr "Muuta"
+
+#~ msgid "HP %+d"
+#~ msgstr "Iskupisteet %+d"
+
+#~ msgid "MP %+d"
+#~ msgstr "Taikapisteet %+d"
diff --git a/po/fr.po b/po/fr.po
new file mode 100644
index 00000000..3d8a121c
--- /dev/null
+++ b/po/fr.po
@@ -0,0 +1,1012 @@
+# French translation of The Mana World.
+# Copyright (C) 2007 The Mana World Development Team
+# This file is distributed under the same license as the The Mana World package.
+# Guillaume Melquiond <guillaume.melquiond@gmail.com>, 2007.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: The Mana World 0.1.0\n"
+"Report-Msgid-Bugs-To: themanaworld-devel@lists.sourceforge.net\n"
+"POT-Creation-Date: 2009-01-08 22:10+0100\n"
+"PO-Revision-Date: 2008-12-26 10:43+0000\n"
+"Last-Translator: Johan Serre <Unknown>\n"
+"Language-Team: French\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-01-06 12:40+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#: src/gui/buy.cpp:43 src/gui/buy.cpp:61 src/gui/buysell.cpp:35
+msgid "Buy"
+msgstr "Acheter"
+
+#: src/gui/buy.cpp:58 src/gui/buy.cpp:239 src/gui/sell.cpp:65
+#: src/gui/sell.cpp:259
+#, c-format
+msgid "Price: %d GP / Total: %d GP"
+msgstr "Prix : %d PO / Total : %d PO"
+
+#: src/gui/buy.cpp:62 src/gui/sell.cpp:69
+msgid "Quit"
+msgstr "Quitter"
+
+#: src/gui/buy.cpp:63 src/gui/buy.cpp:206 src/gui/buy.cpp:224
+#: src/gui/inventorywindow.cpp:150 src/gui/inventorywindow.cpp:160
+#: src/gui/sell.cpp:70 src/gui/sell.cpp:230 src/gui/sell.cpp:244
+#: src/gui/trade.cpp:94 src/gui/trade.cpp:266
+#, c-format
+msgid "Description: %s"
+msgstr "Description : %s"
+
+#: src/gui/buy.cpp:64 src/gui/buy.cpp:208 src/gui/buy.cpp:225
+#: src/gui/inventorywindow.cpp:149 src/gui/inventorywindow.cpp:158
+#: src/gui/sell.cpp:71 src/gui/sell.cpp:232 src/gui/sell.cpp:245
+#, c-format
+msgid "Effect: %s"
+msgstr "Effet : %s"
+
+#: src/gui/buysell.cpp:31
+#, fuzzy
+msgid "Shop"
+msgstr "Stop"
+
+#: src/gui/buysell.cpp:35 src/gui/sell.cpp:48 src/gui/sell.cpp:68
+msgid "Sell"
+msgstr "Vendre"
+
+#: src/gui/buysell.cpp:35 src/gui/char_select.cpp:85
+#: src/gui/char_select.cpp:258 src/gui/char_server.cpp:60
+#: src/gui/connection.cpp:47 src/gui/item_amount.cpp:61 src/gui/login.cpp:52
+#: src/gui/npclistdialog.cpp:45 src/gui/register.cpp:76 src/gui/setup.cpp:58
+#: src/gui/trade.cpp:63 src/gui/updatewindow.cpp:118
+msgid "Cancel"
+msgstr "Annuler"
+
+#: src/gui/char_select.cpp:63
+msgid "Confirm Character Delete"
+msgstr "Confirmer la suppression du personnage"
+
+#: src/gui/char_select.cpp:64
+msgid "Are you sure you want to delete this character?"
+msgstr "Êtes-vous certain de vouloir supprimer ce personnage ?"
+
+#: src/gui/char_select.cpp:81
+msgid "Select Character"
+msgstr "Choix du personnage"
+
+#: src/gui/char_select.cpp:84 src/gui/item_amount.cpp:60 src/gui/login.cpp:51
+#: src/gui/ok_dialog.cpp:37 src/gui/trade.cpp:62
+msgid "Ok"
+msgstr "Ok"
+
+#: src/gui/char_select.cpp:86
+msgid "New"
+msgstr "Nouveau"
+
+#: src/gui/char_select.cpp:87 src/gui/setup_players.cpp:220
+msgid "Delete"
+msgstr "Supprimer"
+
+#: src/gui/char_select.cpp:88
+msgid "Previous"
+msgstr "Précédent"
+
+#: src/gui/char_select.cpp:89
+msgid "Next"
+msgstr "Suivant"
+
+#: src/gui/char_select.cpp:91 src/gui/char_select.cpp:171
+#: src/gui/char_select.cpp:183 src/gui/inventorywindow.cpp:148
+#: src/gui/inventorywindow.cpp:156 src/gui/trade.cpp:92 src/gui/trade.cpp:264
+#, c-format
+msgid "Name: %s"
+msgstr "Nom : %s"
+
+#: src/gui/char_select.cpp:92 src/gui/char_select.cpp:172
+#: src/gui/char_select.cpp:184 src/gui/status.cpp:51 src/gui/status.cpp:232
+#, c-format
+msgid "Level: %d"
+msgstr "Niveau : %d"
+
+#: src/gui/char_select.cpp:93 src/gui/char_select.cpp:173
+#: src/gui/char_select.cpp:185
+#, fuzzy, c-format
+msgid "Job Level: %d"
+msgstr "Niveau : %d"
+
+#: src/gui/char_select.cpp:94 src/gui/char_select.cpp:186
+#, c-format
+msgid "Money: %d"
+msgstr "Argent : %d"
+
+#: src/gui/char_select.cpp:174
+#, c-format
+msgid "Gold: %d"
+msgstr ""
+
+#: src/gui/char_select.cpp:243
+msgid "Create Character"
+msgstr "Création du personnage"
+
+#: src/gui/char_select.cpp:250 src/gui/login.cpp:44 src/gui/register.cpp:65
+msgid "Name:"
+msgstr "Nom :"
+
+#: src/gui/char_select.cpp:253
+msgid "Hair Color:"
+msgstr "Couleur des cheveux"
+
+#: src/gui/char_select.cpp:256
+msgid "Hair Style:"
+msgstr "Coiffure :"
+
+#: src/gui/char_select.cpp:257
+msgid "Create"
+msgstr "Créer"
+
+#: src/gui/char_server.cpp:52
+#, fuzzy
+msgid "Select Server"
+msgstr "Choix du personnage"
+
+#: src/gui/char_server.cpp:59 src/gui/npclistdialog.cpp:44
+#: src/gui/npc_text.cpp:46
+msgid "OK"
+msgstr ""
+
+#: src/gui/chat.cpp:122
+msgid "Global announcement:"
+msgstr ""
+
+#: src/gui/chat.cpp:125
+#, c-format
+msgid "Global announcement from %s:"
+msgstr ""
+
+#: src/gui/chat.cpp:140 src/gui/login.cpp:46 src/gui/register.cpp:68
+msgid "Server:"
+msgstr "Serveur :"
+
+#: src/gui/chat.cpp:146
+#, c-format
+msgid "%s whispers:"
+msgstr ""
+
+#: src/gui/chat.cpp:283
+#, c-format
+msgid "Whispering to %s: %s"
+msgstr ""
+
+#: src/gui/chat.cpp:356
+msgid "Unknown command"
+msgstr ""
+
+#: src/gui/chat.cpp:366
+msgid "Trade failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:369
+msgid "Emote failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:372
+msgid "Sit failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:375
+msgid "Chat creating failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:378
+msgid "Could not join party!"
+msgstr ""
+
+#: src/gui/chat.cpp:381
+msgid "Cannot shout!"
+msgstr ""
+
+#: src/gui/chat.cpp:389
+msgid "You have not yet reached a high enough lvl!"
+msgstr ""
+
+#: src/gui/chat.cpp:392
+msgid "Insufficient HP!"
+msgstr ""
+
+#: src/gui/chat.cpp:395
+msgid "Insufficient SP!"
+msgstr ""
+
+#: src/gui/chat.cpp:398
+msgid "You have no memos!"
+msgstr ""
+
+#: src/gui/chat.cpp:401
+msgid "You cannot do that right now!"
+msgstr ""
+
+#: src/gui/chat.cpp:404
+msgid "Seems you need more Zeny... ;-)"
+msgstr ""
+
+#: src/gui/chat.cpp:407
+msgid "You cannot use this skill with that kind of weapon!"
+msgstr ""
+
+#: src/gui/chat.cpp:410
+msgid "You need another red gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:413
+msgid "You need another blue gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:416
+msgid "You're carrying to much to do this!"
+msgstr ""
+
+#: src/gui/chat.cpp:419
+msgid "Huh? What's that?"
+msgstr ""
+
+#: src/gui/chat.cpp:425
+msgid "Warp failed..."
+msgstr ""
+
+#: src/gui/chat.cpp:428
+msgid "Could not steal anything..."
+msgstr ""
+
+#: src/gui/chat.cpp:431
+msgid "Poison had no effect..."
+msgstr ""
+
+#: src/gui/chat.cpp:496
+msgid "-- Help --"
+msgstr ""
+
+#: src/gui/chat.cpp:499
+msgid "/announce: Global announcement (GM only)"
+msgstr ""
+
+#: src/gui/chat.cpp:500
+msgid "/clear: Clears this window"
+msgstr ""
+
+#: src/gui/chat.cpp:501
+msgid "/help: Display this help"
+msgstr ""
+
+#: src/gui/chat.cpp:502
+msgid "/where: Display map name"
+msgstr ""
+
+#: src/gui/chat.cpp:503
+msgid "/whisper <nick> <message>: Sends a private <message> to <nick>"
+msgstr ""
+
+#: src/gui/chat.cpp:505
+msgid "/w <nick> <message>: Short form for /whisper"
+msgstr ""
+
+#: src/gui/chat.cpp:506
+msgid "/who: Display number of online users"
+msgstr ""
+
+#: src/gui/chat.cpp:507
+msgid "For more information, type /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:512
+msgid "Command: /announce <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:513
+msgid "*** only available to a GM ***"
+msgstr ""
+
+#: src/gui/chat.cpp:514
+msgid "This command sends the message <msg> to all players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:520
+msgid "Command: /clear"
+msgstr ""
+
+#: src/gui/chat.cpp:521
+msgid "This command clears the chat log of previous chat."
+msgstr ""
+
+#: src/gui/chat.cpp:527
+msgid "Command: /help"
+msgstr ""
+
+#: src/gui/chat.cpp:528
+msgid "This command displays a list of all commands available."
+msgstr ""
+
+#: src/gui/chat.cpp:530
+msgid "Command: /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:531
+msgid "This command displays help on <command>."
+msgstr ""
+
+#: src/gui/chat.cpp:536
+msgid "Command: /where"
+msgstr ""
+
+#: src/gui/chat.cpp:537
+msgid "This command displays the name of the current map."
+msgstr ""
+
+#: src/gui/chat.cpp:543
+msgid "Command: /whisper <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:544
+msgid "Command: /w <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:545
+msgid "This command sends the message <msg> to <nick>."
+msgstr ""
+
+#: src/gui/chat.cpp:547
+msgid "If the <nick> has spaces in it, enclose it in double quotes (\")."
+msgstr ""
+
+#: src/gui/chat.cpp:553
+msgid "Command: /who"
+msgstr ""
+
+#: src/gui/chat.cpp:554
+msgid "This command displays the number of players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:558
+msgid "Unknown command."
+msgstr ""
+
+#: src/gui/chat.cpp:559
+msgid "Type /help for a list of commands."
+msgstr ""
+
+#: src/gui/confirm_dialog.cpp:35
+msgid "Yes"
+msgstr "Oui"
+
+#: src/gui/confirm_dialog.cpp:36
+msgid "No"
+msgstr "Non"
+
+#: src/gui/connection.cpp:49 src/gui/updatewindow.cpp:116
+msgid "Connecting..."
+msgstr "Connexion..."
+
+#: src/gui/equipmentwindow.cpp:38 src/gui/menuwindow.cpp:62
+msgid "Equipment"
+msgstr "Équipement"
+
+#: src/gui/help.cpp:33
+msgid "Help"
+msgstr ""
+
+#: src/gui/help.cpp:41
+msgid "Close"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:46 src/gui/menuwindow.cpp:63
+msgid "Inventory"
+msgstr "Inventaire"
+
+#: src/gui/inventorywindow.cpp:56 src/gui/inventorywindow.cpp:232
+#: src/gui/skill.cpp:134
+msgid "Use"
+msgstr "Utiliser"
+
+#: src/gui/inventorywindow.cpp:57
+msgid "Drop"
+msgstr "Lâcher"
+
+#: src/gui/inventorywindow.cpp:99
+#, c-format
+msgid "Weight: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:104
+#, c-format
+msgid "Slots used: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:225
+msgid "Unequip"
+msgstr "Retirer"
+
+#: src/gui/inventorywindow.cpp:228
+msgid "Equip"
+msgstr "Équiper"
+
+#: src/gui/item_amount.cpp:76
+msgid "Select amount of items to trade."
+msgstr "Choisissez le nombre d'objets à troquer."
+
+#: src/gui/item_amount.cpp:80
+msgid "Select amount of items to drop."
+msgstr "Choisissez le nombre d'objets à lâcher."
+
+#: src/gui/login.cpp:42
+msgid "Login"
+msgstr "Connexion"
+
+#: src/gui/login.cpp:45 src/gui/register.cpp:66
+msgid "Password:"
+msgstr "Mot de passe :"
+
+#: src/gui/login.cpp:50
+msgid "Remember Username"
+msgstr "Se souvenir du nom d'utilisateur"
+
+#: src/gui/login.cpp:53 src/gui/register.cpp:75
+msgid "Register"
+msgstr "S'inscrire"
+
+#: src/gui/menuwindow.cpp:61
+msgid "Status"
+msgstr "Statut"
+
+#: src/gui/menuwindow.cpp:64 src/gui/skill.cpp:119
+msgid "Skills"
+msgstr "Compétences"
+
+#: src/gui/menuwindow.cpp:65
+msgid "Shortcut"
+msgstr "Raccourci"
+
+#: src/gui/menuwindow.cpp:66 src/main.cpp:716
+msgid "Setup"
+msgstr "Configuration"
+
+#: src/gui/minimap.cpp:34
+msgid "MiniMap"
+msgstr "Plan"
+
+#: src/gui/npclistdialog.cpp:35 src/gui/npc_text.cpp:35
+msgid "NPC"
+msgstr "PNJ"
+
+#: src/gui/popupmenu.cpp:81
+#, c-format
+msgid "@@trade|Trade With %s@@"
+msgstr "@@trade|Troquer avec %s@@"
+
+#: src/gui/popupmenu.cpp:83
+#, c-format
+msgid "@@attack|Attack %s@@"
+msgstr "@@attack|Attaquer %s@@"
+
+#: src/gui/popupmenu.cpp:114
+msgid "@@talk|Talk To NPC@@"
+msgstr "@@talk|Parler au PNJ@@"
+
+#: src/gui/popupmenu.cpp:124 src/gui/popupmenu.cpp:140
+#: src/gui/popupmenu.cpp:293
+msgid "@@cancel|Cancel@@"
+msgstr "@@cancel|Annuler@@"
+
+#: src/gui/popupmenu.cpp:136
+#, c-format
+msgid "@@pickup|Pick Up %s@@"
+msgstr "@@pickup|Ramasser %s@@"
+
+#: src/gui/popupmenu.cpp:283
+#, fuzzy
+msgid "@@use|Unequip@@"
+msgstr "@@use|Équiper@@"
+
+#: src/gui/popupmenu.cpp:285
+msgid "@@use|Equip@@"
+msgstr "@@use|Équiper@@"
+
+#: src/gui/popupmenu.cpp:288
+msgid "@@use|Use@@"
+msgstr "@@use|Utiliser@@"
+
+#: src/gui/popupmenu.cpp:290
+msgid "@@drop|Drop@@"
+msgstr "@@drop|Lâcher@@"
+
+#: src/gui/popupmenu.cpp:291
+msgid "@@description|Description@@"
+msgstr "@@description|Description@@"
+
+#: src/gui/register.cpp:67
+msgid "Confirm:"
+msgstr "Vérification :"
+
+#: src/gui/register.cpp:73
+msgid "Male"
+msgstr "Masculin"
+
+#: src/gui/register.cpp:74
+msgid "Female"
+msgstr "Féminin"
+
+#: src/gui/register.cpp:176
+#, c-format
+msgid "The username needs to be at least %d characters long."
+msgstr "Le nom d'utilisateur doit faire au moins %d caractères."
+
+#: src/gui/register.cpp:184
+#, c-format
+msgid "The username needs to be less than %d characters long."
+msgstr "Le nom d'utilisateur doit faire moins de %d caractères."
+
+#: src/gui/register.cpp:192
+#, c-format
+msgid "The password needs to be at least %d characters long."
+msgstr "Le mot de passe doit faire au moins %d caractères."
+
+#: src/gui/register.cpp:200
+#, c-format
+msgid "The password needs to be less than %d characters long."
+msgstr "Le mot de passe doit faire moins de %d caractères."
+
+#: src/gui/register.cpp:207
+msgid "Passwords do not match."
+msgstr "Les deux mots de passe ne correspondent pas."
+
+#: src/gui/register.cpp:227 src/main.cpp:945
+msgid "Error"
+msgstr "Erreur"
+
+#: src/gui/setup_audio.cpp:40
+msgid "Sound"
+msgstr "Son"
+
+#: src/gui/setup_audio.cpp:46
+msgid "Sfx volume"
+msgstr "Volume des effets sonores"
+
+#: src/gui/setup_audio.cpp:47
+msgid "Music volume"
+msgstr "Volume de la musique"
+
+#: src/gui/setup.cpp:58
+msgid "Apply"
+msgstr "Appliquer"
+
+#: src/gui/setup.cpp:58
+msgid "Reset Windows"
+msgstr "Rétablir les fenêtres"
+
+#: src/gui/setup.cpp:79
+msgid "Video"
+msgstr "Vidéo"
+
+#: src/gui/setup.cpp:83
+msgid "Audio"
+msgstr "Audio"
+
+#: src/gui/setup.cpp:87
+msgid "Joystick"
+msgstr "Joystick"
+
+#: src/gui/setup.cpp:91
+msgid "Keyboard"
+msgstr "Clavier"
+
+#: src/gui/setup.cpp:95
+msgid "Players"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:36 src/gui/setup_joystick.cpp:70
+msgid "Press the button to start calibration"
+msgstr "Presser le bouton pour démarrer la calibration"
+
+#: src/gui/setup_joystick.cpp:37 src/gui/setup_joystick.cpp:68
+msgid "Calibrate"
+msgstr "Calibrer"
+
+#: src/gui/setup_joystick.cpp:38
+msgid "Enable joystick"
+msgstr "Activer le joystick"
+
+#: src/gui/setup_joystick.cpp:73
+msgid "Stop"
+msgstr "Stop"
+
+#: src/gui/setup_joystick.cpp:74
+msgid "Rotate the stick"
+msgstr "Tourner le joystick"
+
+#: src/gui/setup_keyboard.cpp:88
+msgid "Assign"
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:94
+#, fuzzy
+msgid "Default"
+msgstr "Supprimer"
+
+#: src/gui/setup_keyboard.cpp:115
+msgid "Key Conflict(s) Detected."
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:116
+msgid "Resolve them, or gameplay may result in strange behaviour."
+msgstr ""
+
+#: src/gui/setup_players.cpp:53
+#, fuzzy
+msgid "Name"
+msgstr "Nom :"
+
+#: src/gui/setup_players.cpp:54
+msgid "Relation"
+msgstr ""
+
+#: src/gui/setup_players.cpp:58
+msgid "Neutral"
+msgstr ""
+
+#: src/gui/setup_players.cpp:59
+msgid "Friend"
+msgstr ""
+
+#: src/gui/setup_players.cpp:60
+msgid "Disregarded"
+msgstr ""
+
+#: src/gui/setup_players.cpp:61
+msgid "Ignored"
+msgstr ""
+
+#: src/gui/setup_players.cpp:214
+msgid "Save player list"
+msgstr ""
+
+#: src/gui/setup_players.cpp:216
+msgid "Allow trading"
+msgstr ""
+
+#: src/gui/setup_players.cpp:218
+msgid "Allow whispers"
+msgstr ""
+
+#: src/gui/setup_players.cpp:245
+msgid "When ignoring:"
+msgstr ""
+
+#: src/gui/setup_video.cpp:112
+msgid "Full screen"
+msgstr "Plein écran"
+
+#: src/gui/setup_video.cpp:113
+msgid "OpenGL"
+msgstr "OpenGL"
+
+#: src/gui/setup_video.cpp:114
+msgid "Custom cursor"
+msgstr "Curseur personnalisé"
+
+#: src/gui/setup_video.cpp:116
+msgid "FPS Limit:"
+msgstr "Limite FPS :"
+
+#: src/gui/setup_video.cpp:135
+msgid "Gui opacity"
+msgstr "Opacité de l'interface"
+
+#: src/gui/setup_video.cpp:192
+msgid "Scroll radius"
+msgstr "Rayon du scrolling"
+
+#: src/gui/setup_video.cpp:200
+msgid "Scroll laziness"
+msgstr "Paresse du scrolling"
+
+#: src/gui/setup_video.cpp:208
+msgid "Ambient FX"
+msgstr "Effets ambiants"
+
+#: src/gui/setup_video.cpp:215 src/gui/setup_video.cpp:412
+msgid "off"
+msgstr "aucun"
+
+#: src/gui/setup_video.cpp:218 src/gui/setup_video.cpp:234
+#: src/gui/setup_video.cpp:415 src/gui/setup_video.cpp:429
+msgid "low"
+msgstr "léger"
+
+#: src/gui/setup_video.cpp:221 src/gui/setup_video.cpp:240
+#: src/gui/setup_video.cpp:418 src/gui/setup_video.cpp:435
+msgid "high"
+msgstr "complet"
+
+#: src/gui/setup_video.cpp:227
+msgid "Particle Detail"
+msgstr ""
+
+#: src/gui/setup_video.cpp:237 src/gui/setup_video.cpp:432
+msgid "medium"
+msgstr ""
+
+#: src/gui/setup_video.cpp:243 src/gui/setup_video.cpp:438
+msgid "max"
+msgstr ""
+
+#: src/gui/setup_video.cpp:309
+msgid "Switching to full screen"
+msgstr "Passage en plein écran"
+
+#: src/gui/setup_video.cpp:310
+msgid "Restart needed for changes to take effect."
+msgstr ""
+"Les changements ne seront pris en compte qu'au prochain démarrage du jeu."
+
+#: src/gui/setup_video.cpp:322
+msgid "Changing OpenGL"
+msgstr "Changement OpenGL"
+
+#: src/gui/setup_video.cpp:323
+msgid "Applying change to OpenGL requires restart."
+msgstr ""
+"Le changement OpenGL ne sera pris en compte qu'au prochain démarrage du jeu."
+
+#: src/gui/skill.cpp:79
+msgid "Mystery Skill"
+msgstr ""
+
+#: src/gui/skill.cpp:132 src/gui/skill.cpp:188
+#, c-format
+msgid "Skill points: %d"
+msgstr ""
+
+#: src/gui/skill.cpp:133
+msgid "Up"
+msgstr ""
+
+#: src/gui/status.cpp:52 src/gui/status.cpp:235
+#, fuzzy, c-format
+msgid "Job: %d"
+msgstr "Niveau : %d"
+
+#: src/gui/status.cpp:53 src/gui/status.cpp:238
+#, fuzzy, c-format
+msgid "Money: %d GP"
+msgstr "Argent : %d"
+
+#: src/gui/status.cpp:127
+#, fuzzy
+msgid "Stats"
+msgstr "Statut"
+
+#: src/gui/status.cpp:128
+msgid "Total"
+msgstr ""
+
+#: src/gui/status.cpp:129
+msgid "Cost"
+msgstr ""
+
+#: src/gui/status.cpp:132
+#, fuzzy
+msgid "Attack:"
+msgstr "Attaque %+d"
+
+#: src/gui/status.cpp:133
+#, fuzzy
+msgid "Defense:"
+msgstr "Défense %+d"
+
+#: src/gui/status.cpp:134
+#, fuzzy
+msgid "M.Attack:"
+msgstr "Attaque %+d"
+
+#: src/gui/status.cpp:135
+#, fuzzy
+msgid "M.Defense:"
+msgstr "Défense %+d"
+
+#: src/gui/status.cpp:136
+#, c-format
+msgid "% Accuracy:"
+msgstr ""
+
+#: src/gui/status.cpp:137
+#, c-format
+msgid "% Evade:"
+msgstr ""
+
+#: src/gui/status.cpp:138
+msgid "% Reflex:"
+msgstr ""
+
+#: src/gui/status.cpp:282
+#, fuzzy
+msgid "Strength"
+msgstr "Force :"
+
+#: src/gui/status.cpp:283
+#, fuzzy
+msgid "Agility"
+msgstr "Agilité :"
+
+#: src/gui/status.cpp:284
+#, fuzzy
+msgid "Vitality"
+msgstr "Vitalité :"
+
+#: src/gui/status.cpp:285
+#, fuzzy
+msgid "Intelligence"
+msgstr "Intelligence :"
+
+#: src/gui/status.cpp:286
+#, fuzzy
+msgid "Dexterity"
+msgstr "Dextérité :"
+
+#: src/gui/status.cpp:287
+msgid "Luck"
+msgstr ""
+
+#: src/gui/status.cpp:305
+#, c-format
+msgid "Remaining Status Points: %d"
+msgstr ""
+
+#: src/gui/trade.cpp:61
+msgid "Add"
+msgstr "Ajouter"
+
+#: src/gui/trade.cpp:64
+msgid "Trade"
+msgstr ""
+
+#: src/gui/trade.cpp:80 src/gui/trade.cpp:156 src/gui/trade.cpp:204
+#, c-format
+msgid "You get %d GP."
+msgstr "Vous obtenez %d PO."
+
+#: src/gui/trade.cpp:81
+msgid "You give:"
+msgstr "Vous donnez :"
+
+#: src/gui/trade.cpp:283
+msgid "Failed adding item. You can not overlap one kind of item on the window."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:93
+msgid "Updating..."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:119
+msgid "Play"
+msgstr ""
+
+#: src/gui/updatewindow.cpp:525
+msgid "Completed"
+msgstr ""
+
+#: src/resources/itemdb.cpp:99
+msgid "Unnamed"
+msgstr ""
+
+#: src/main.cpp:769
+msgid "Got disconnected from server!"
+msgstr ""
+
+#: src/main.cpp:956
+#, fuzzy
+msgid "Connecting to map server..."
+msgstr "Connexion..."
+
+#: src/main.cpp:964
+msgid "Connecting to character server..."
+msgstr ""
+
+#: src/main.cpp:972
+msgid "Connecting to account server..."
+msgstr ""
+
+#~ msgid "Account and Character Management"
+#~ msgstr "Gestion du compte et du personnage"
+
+#~ msgid "Unregister"
+#~ msgstr "Se désinscrire"
+
+#~ msgid "Change Password"
+#~ msgstr "Changer le mot de passe"
+
+#~ msgid "Change Email Address"
+#~ msgstr "Changer l'adresse email"
+
+#~ msgid "Account: %s"
+#~ msgstr "Compte: %s"
+
+#~ msgid "Willpower:"
+#~ msgstr "Volonté :"
+
+#~ msgid "Please distribute %d points"
+#~ msgstr "Veuillez distribuer %d points"
+
+#~ msgid "Your name needs to be at least 4 characters."
+#~ msgstr "Votre nom doit comporter un minimum de 4 caractères"
+
+#~ msgid "Character stats OK"
+#~ msgstr "Caractéristiques Ok"
+
+#~ msgid "Please remove %d points"
+#~ msgstr "Veuillez retirer %d points"
+
+#~ msgid "Split"
+#~ msgstr "Partager"
+
+#~ msgid "Select amount of items to split."
+#~ msgstr "Choisissez le nombre d'objets à déplacer."
+
+#~ msgid "Guilds"
+#~ msgstr "Guildes"
+
+#~ msgid "@@guild|Invite %s@@"
+#~ msgstr "@@guilde|Invite %s@@"
+
+#~ msgid "@@party|Invite %s to join your party@@"
+#~ msgstr "@@partie| Invitation de %s à joindre votre partie @@"
+
+#~ msgid "@@split|Split@@"
+#~ msgstr "@@split|Partager@@"
+
+#~ msgid "Switch server"
+#~ msgstr "Changer de serveur"
+
+#~ msgid "Switch character"
+#~ msgstr "Changer de personnage"
+
+#~ msgid "Email:"
+#~ msgstr "Email :"
+
+#~ msgid "Choose your Mana World Server"
+#~ msgstr "Choisissez votre serveur The Mana World"
+
+#~ msgid "Port:"
+#~ msgstr "Port :"
+
+#~ msgid "Please type both the address and the port of a server."
+#~ msgstr "Veuillez entrer l'adresse et le port du serveur."
+
+#~ msgid "Visible names"
+#~ msgstr "Afficher les noms"
+
+#~ msgid "Propose trade"
+#~ msgstr "Proposer ce troc"
+
+#~ msgid "Confirm trade"
+#~ msgstr "Confirmer ce troc"
+
+#~ msgid "Change"
+#~ msgstr "Changer"
+
+#~ msgid "HP %+d"
+#~ msgstr "PV %+d"
+
+#~ msgid "MP %+d"
+#~ msgstr "PM %+d"
+
+#~ msgid "Confirm"
+#~ msgstr "Confirmer"
+
+#~ msgid "Charisma:"
+#~ msgstr "Charisme :"
+
+#~ msgid "Total Weight: %d - Maximum Weight: %d"
+#~ msgstr "Poids total : %d - Poids maximal : %d"
+
+#~ msgid "Keep"
+#~ msgstr "Conserver"
diff --git a/po/he.po b/po/he.po
new file mode 100644
index 00000000..87766812
--- /dev/null
+++ b/po/he.po
@@ -0,0 +1,995 @@
+# Hebrew translation for tmw
+# Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008
+# This file is distributed under the same license as the tmw package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: tmw\n"
+"Report-Msgid-Bugs-To: themanaworld-devel@lists.sourceforge.net\n"
+"POT-Creation-Date: 2009-01-08 22:10+0100\n"
+"PO-Revision-Date: 2008-10-20 00:23+0000\n"
+"Last-Translator: Ddorda <d.dorda@gmail.com>\n"
+"Language-Team: Hebrew <he@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-01-06 12:40+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#: src/gui/buy.cpp:43 src/gui/buy.cpp:61 src/gui/buysell.cpp:35
+msgid "Buy"
+msgstr "קנה"
+
+#: src/gui/buy.cpp:58 src/gui/buy.cpp:239 src/gui/sell.cpp:65
+#: src/gui/sell.cpp:259
+#, c-format
+msgid "Price: %d GP / Total: %d GP"
+msgstr "מחיר: %d זהב / סה\"כ %d זהב"
+
+#: src/gui/buy.cpp:62 src/gui/sell.cpp:69
+msgid "Quit"
+msgstr "יצי××”"
+
+#: src/gui/buy.cpp:63 src/gui/buy.cpp:206 src/gui/buy.cpp:224
+#: src/gui/inventorywindow.cpp:150 src/gui/inventorywindow.cpp:160
+#: src/gui/sell.cpp:70 src/gui/sell.cpp:230 src/gui/sell.cpp:244
+#: src/gui/trade.cpp:94 src/gui/trade.cpp:266
+#, c-format
+msgid "Description: %s"
+msgstr "תי×ור: %s"
+
+#: src/gui/buy.cpp:64 src/gui/buy.cpp:208 src/gui/buy.cpp:225
+#: src/gui/inventorywindow.cpp:149 src/gui/inventorywindow.cpp:158
+#: src/gui/sell.cpp:71 src/gui/sell.cpp:232 src/gui/sell.cpp:245
+#, c-format
+msgid "Effect: %s"
+msgstr "השפעה: %s"
+
+#: src/gui/buysell.cpp:31
+#, fuzzy
+msgid "Shop"
+msgstr "עצור"
+
+#: src/gui/buysell.cpp:35 src/gui/sell.cpp:48 src/gui/sell.cpp:68
+msgid "Sell"
+msgstr "מכר"
+
+#: src/gui/buysell.cpp:35 src/gui/char_select.cpp:85
+#: src/gui/char_select.cpp:258 src/gui/char_server.cpp:60
+#: src/gui/connection.cpp:47 src/gui/item_amount.cpp:61 src/gui/login.cpp:52
+#: src/gui/npclistdialog.cpp:45 src/gui/register.cpp:76 src/gui/setup.cpp:58
+#: src/gui/trade.cpp:63 src/gui/updatewindow.cpp:118
+msgid "Cancel"
+msgstr "ביטול"
+
+#: src/gui/char_select.cpp:63
+msgid "Confirm Character Delete"
+msgstr "×שר מחיקת שחקן"
+
+#: src/gui/char_select.cpp:64
+msgid "Are you sure you want to delete this character?"
+msgstr "×”×× ×תה בטוח ×›×™ ברצונך למחוק ×ת השחקן?"
+
+#: src/gui/char_select.cpp:81
+#, fuzzy
+msgid "Select Character"
+msgstr "צור שחקן"
+
+#: src/gui/char_select.cpp:84 src/gui/item_amount.cpp:60 src/gui/login.cpp:51
+#: src/gui/ok_dialog.cpp:37 src/gui/trade.cpp:62
+msgid "Ok"
+msgstr "×ישור"
+
+#: src/gui/char_select.cpp:86
+msgid "New"
+msgstr "חדש"
+
+#: src/gui/char_select.cpp:87 src/gui/setup_players.cpp:220
+msgid "Delete"
+msgstr "מחק"
+
+#: src/gui/char_select.cpp:88
+msgid "Previous"
+msgstr "הקוד×"
+
+#: src/gui/char_select.cpp:89
+msgid "Next"
+msgstr "הב×"
+
+#: src/gui/char_select.cpp:91 src/gui/char_select.cpp:171
+#: src/gui/char_select.cpp:183 src/gui/inventorywindow.cpp:148
+#: src/gui/inventorywindow.cpp:156 src/gui/trade.cpp:92 src/gui/trade.cpp:264
+#, c-format
+msgid "Name: %s"
+msgstr "ש×: %s"
+
+#: src/gui/char_select.cpp:92 src/gui/char_select.cpp:172
+#: src/gui/char_select.cpp:184 src/gui/status.cpp:51 src/gui/status.cpp:232
+#, c-format
+msgid "Level: %d"
+msgstr "רמה: %d"
+
+#: src/gui/char_select.cpp:93 src/gui/char_select.cpp:173
+#: src/gui/char_select.cpp:185
+#, fuzzy, c-format
+msgid "Job Level: %d"
+msgstr "רמה: %d"
+
+#: src/gui/char_select.cpp:94 src/gui/char_select.cpp:186
+#, c-format
+msgid "Money: %d"
+msgstr "זהב: %d"
+
+#: src/gui/char_select.cpp:174
+#, c-format
+msgid "Gold: %d"
+msgstr ""
+
+#: src/gui/char_select.cpp:243
+msgid "Create Character"
+msgstr "צור שחקן"
+
+#: src/gui/char_select.cpp:250 src/gui/login.cpp:44 src/gui/register.cpp:65
+msgid "Name:"
+msgstr "ש×:"
+
+#: src/gui/char_select.cpp:253
+msgid "Hair Color:"
+msgstr "צבע שיער:"
+
+#: src/gui/char_select.cpp:256
+msgid "Hair Style:"
+msgstr "תיספורת:"
+
+#: src/gui/char_select.cpp:257
+msgid "Create"
+msgstr "צור"
+
+#: src/gui/char_server.cpp:52
+#, fuzzy
+msgid "Select Server"
+msgstr "החלף שרת"
+
+#: src/gui/char_server.cpp:59 src/gui/npclistdialog.cpp:44
+#: src/gui/npc_text.cpp:46
+msgid "OK"
+msgstr ""
+
+#: src/gui/chat.cpp:122
+msgid "Global announcement:"
+msgstr ""
+
+#: src/gui/chat.cpp:125
+#, c-format
+msgid "Global announcement from %s:"
+msgstr ""
+
+#: src/gui/chat.cpp:140 src/gui/login.cpp:46 src/gui/register.cpp:68
+msgid "Server:"
+msgstr "שרת:"
+
+#: src/gui/chat.cpp:146
+#, c-format
+msgid "%s whispers:"
+msgstr ""
+
+#: src/gui/chat.cpp:283
+#, c-format
+msgid "Whispering to %s: %s"
+msgstr ""
+
+#: src/gui/chat.cpp:356
+msgid "Unknown command"
+msgstr ""
+
+#: src/gui/chat.cpp:366
+msgid "Trade failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:369
+msgid "Emote failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:372
+msgid "Sit failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:375
+msgid "Chat creating failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:378
+msgid "Could not join party!"
+msgstr ""
+
+#: src/gui/chat.cpp:381
+msgid "Cannot shout!"
+msgstr ""
+
+#: src/gui/chat.cpp:389
+msgid "You have not yet reached a high enough lvl!"
+msgstr ""
+
+#: src/gui/chat.cpp:392
+msgid "Insufficient HP!"
+msgstr ""
+
+#: src/gui/chat.cpp:395
+msgid "Insufficient SP!"
+msgstr ""
+
+#: src/gui/chat.cpp:398
+msgid "You have no memos!"
+msgstr ""
+
+#: src/gui/chat.cpp:401
+msgid "You cannot do that right now!"
+msgstr ""
+
+#: src/gui/chat.cpp:404
+msgid "Seems you need more Zeny... ;-)"
+msgstr ""
+
+#: src/gui/chat.cpp:407
+msgid "You cannot use this skill with that kind of weapon!"
+msgstr ""
+
+#: src/gui/chat.cpp:410
+msgid "You need another red gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:413
+msgid "You need another blue gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:416
+msgid "You're carrying to much to do this!"
+msgstr ""
+
+#: src/gui/chat.cpp:419
+msgid "Huh? What's that?"
+msgstr ""
+
+#: src/gui/chat.cpp:425
+msgid "Warp failed..."
+msgstr ""
+
+#: src/gui/chat.cpp:428
+msgid "Could not steal anything..."
+msgstr ""
+
+#: src/gui/chat.cpp:431
+msgid "Poison had no effect..."
+msgstr ""
+
+#: src/gui/chat.cpp:496
+msgid "-- Help --"
+msgstr ""
+
+#: src/gui/chat.cpp:499
+msgid "/announce: Global announcement (GM only)"
+msgstr ""
+
+#: src/gui/chat.cpp:500
+msgid "/clear: Clears this window"
+msgstr ""
+
+#: src/gui/chat.cpp:501
+msgid "/help: Display this help"
+msgstr ""
+
+#: src/gui/chat.cpp:502
+msgid "/where: Display map name"
+msgstr ""
+
+#: src/gui/chat.cpp:503
+msgid "/whisper <nick> <message>: Sends a private <message> to <nick>"
+msgstr ""
+
+#: src/gui/chat.cpp:505
+msgid "/w <nick> <message>: Short form for /whisper"
+msgstr ""
+
+#: src/gui/chat.cpp:506
+msgid "/who: Display number of online users"
+msgstr ""
+
+#: src/gui/chat.cpp:507
+msgid "For more information, type /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:512
+msgid "Command: /announce <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:513
+msgid "*** only available to a GM ***"
+msgstr ""
+
+#: src/gui/chat.cpp:514
+msgid "This command sends the message <msg> to all players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:520
+msgid "Command: /clear"
+msgstr ""
+
+#: src/gui/chat.cpp:521
+msgid "This command clears the chat log of previous chat."
+msgstr ""
+
+#: src/gui/chat.cpp:527
+msgid "Command: /help"
+msgstr ""
+
+#: src/gui/chat.cpp:528
+msgid "This command displays a list of all commands available."
+msgstr ""
+
+#: src/gui/chat.cpp:530
+msgid "Command: /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:531
+msgid "This command displays help on <command>."
+msgstr ""
+
+#: src/gui/chat.cpp:536
+msgid "Command: /where"
+msgstr ""
+
+#: src/gui/chat.cpp:537
+msgid "This command displays the name of the current map."
+msgstr ""
+
+#: src/gui/chat.cpp:543
+msgid "Command: /whisper <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:544
+msgid "Command: /w <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:545
+msgid "This command sends the message <msg> to <nick>."
+msgstr ""
+
+#: src/gui/chat.cpp:547
+msgid "If the <nick> has spaces in it, enclose it in double quotes (\")."
+msgstr ""
+
+#: src/gui/chat.cpp:553
+msgid "Command: /who"
+msgstr ""
+
+#: src/gui/chat.cpp:554
+msgid "This command displays the number of players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:558
+msgid "Unknown command."
+msgstr ""
+
+#: src/gui/chat.cpp:559
+msgid "Type /help for a list of commands."
+msgstr ""
+
+#: src/gui/confirm_dialog.cpp:35
+msgid "Yes"
+msgstr "כן"
+
+#: src/gui/confirm_dialog.cpp:36
+msgid "No"
+msgstr "ל×"
+
+#: src/gui/connection.cpp:49 src/gui/updatewindow.cpp:116
+msgid "Connecting..."
+msgstr "מתחבר..."
+
+#: src/gui/equipmentwindow.cpp:38 src/gui/menuwindow.cpp:62
+msgid "Equipment"
+msgstr "ציוד"
+
+#: src/gui/help.cpp:33
+msgid "Help"
+msgstr ""
+
+#: src/gui/help.cpp:41
+msgid "Close"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:46 src/gui/menuwindow.cpp:63
+msgid "Inventory"
+msgstr "ציוד"
+
+#: src/gui/inventorywindow.cpp:56 src/gui/inventorywindow.cpp:232
+#: src/gui/skill.cpp:134
+msgid "Use"
+msgstr "השתמש"
+
+#: src/gui/inventorywindow.cpp:57
+msgid "Drop"
+msgstr "השלך"
+
+#: src/gui/inventorywindow.cpp:99
+#, c-format
+msgid "Weight: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:104
+#, c-format
+msgid "Slots used: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:225
+msgid "Unequip"
+msgstr "הורד"
+
+#: src/gui/inventorywindow.cpp:228
+msgid "Equip"
+msgstr "החזק"
+
+#: src/gui/item_amount.cpp:76
+msgid "Select amount of items to trade."
+msgstr "בחר כמות ×—×¤×¦×™× ×œ×¡×—×•×¨."
+
+#: src/gui/item_amount.cpp:80
+msgid "Select amount of items to drop."
+msgstr "בחר כמות ×—×¤×¦×™× ×œ×”×©×œ×™×š."
+
+#: src/gui/login.cpp:42
+msgid "Login"
+msgstr "התחברות"
+
+#: src/gui/login.cpp:45 src/gui/register.cpp:66
+msgid "Password:"
+msgstr "סיסמה:"
+
+#: src/gui/login.cpp:50
+msgid "Remember Username"
+msgstr "זכור ×©× ×ž×©×ª×ž×©"
+
+#: src/gui/login.cpp:53 src/gui/register.cpp:75
+msgid "Register"
+msgstr "הרש×"
+
+#: src/gui/menuwindow.cpp:61
+msgid "Status"
+msgstr "מצב"
+
+#: src/gui/menuwindow.cpp:64 src/gui/skill.cpp:119
+msgid "Skills"
+msgstr "כישורי×"
+
+#: src/gui/menuwindow.cpp:65
+msgid "Shortcut"
+msgstr "קיצור-דרך"
+
+#: src/gui/menuwindow.cpp:66 src/main.cpp:716
+msgid "Setup"
+msgstr "הגדרות"
+
+#: src/gui/minimap.cpp:34
+msgid "MiniMap"
+msgstr "מיני-מפה"
+
+#: src/gui/npclistdialog.cpp:35 src/gui/npc_text.cpp:35
+msgid "NPC"
+msgstr "NPC"
+
+#: src/gui/popupmenu.cpp:81
+#, c-format
+msgid "@@trade|Trade With %s@@"
+msgstr "@@trade|סחור ×¢× %s@@"
+
+#: src/gui/popupmenu.cpp:83
+#, c-format
+msgid "@@attack|Attack %s@@"
+msgstr "@@attack|תקוף ×ת %s@@"
+
+#: src/gui/popupmenu.cpp:114
+msgid "@@talk|Talk To NPC@@"
+msgstr "@@talk|דבר ×ל NPC@@"
+
+#: src/gui/popupmenu.cpp:124 src/gui/popupmenu.cpp:140
+#: src/gui/popupmenu.cpp:293
+msgid "@@cancel|Cancel@@"
+msgstr "@@cancel|ביטול@@"
+
+#: src/gui/popupmenu.cpp:136
+#, c-format
+msgid "@@pickup|Pick Up %s@@"
+msgstr "@@pickup|×”×¨× %s@@"
+
+#: src/gui/popupmenu.cpp:283
+#, fuzzy
+msgid "@@use|Unequip@@"
+msgstr "@@use|החזק@@"
+
+#: src/gui/popupmenu.cpp:285
+msgid "@@use|Equip@@"
+msgstr "@@use|החזק@@"
+
+#: src/gui/popupmenu.cpp:288
+msgid "@@use|Use@@"
+msgstr "@@use|Use@@"
+
+#: src/gui/popupmenu.cpp:290
+msgid "@@drop|Drop@@"
+msgstr "@@drop|השלך@@"
+
+#: src/gui/popupmenu.cpp:291
+msgid "@@description|Description@@"
+msgstr "@@description|תי×ור@@"
+
+#: src/gui/register.cpp:67
+msgid "Confirm:"
+msgstr "×שר:"
+
+#: src/gui/register.cpp:73
+msgid "Male"
+msgstr "זכר"
+
+#: src/gui/register.cpp:74
+msgid "Female"
+msgstr "נקבה"
+
+#: src/gui/register.cpp:176
+#, c-format
+msgid "The username needs to be at least %d characters long."
+msgstr "×©× ×”×ž×©×ª×ž×© חייב להכיל לפחות %d תוי×."
+
+#: src/gui/register.cpp:184
+#, c-format
+msgid "The username needs to be less than %d characters long."
+msgstr "×©× ×”×ž×©×ª×ž×© חייב להכיל פחות מ-%d תוי×."
+
+#: src/gui/register.cpp:192
+#, c-format
+msgid "The password needs to be at least %d characters long."
+msgstr "הסיסמה חייבת להכיל לפחות %d תוי×."
+
+#: src/gui/register.cpp:200
+#, c-format
+msgid "The password needs to be less than %d characters long."
+msgstr "הסיסמה חייבת להכיל פחות מ-%d תוי×."
+
+#: src/gui/register.cpp:207
+msgid "Passwords do not match."
+msgstr "הסיסמ×ות ×ינן תו×מות."
+
+#: src/gui/register.cpp:227 src/main.cpp:945
+msgid "Error"
+msgstr "שגי××”"
+
+#: src/gui/setup_audio.cpp:40
+msgid "Sound"
+msgstr "צליל"
+
+#: src/gui/setup_audio.cpp:46
+msgid "Sfx volume"
+msgstr "עוצמת SFX"
+
+#: src/gui/setup_audio.cpp:47
+msgid "Music volume"
+msgstr "עוצמת מוזיקה"
+
+#: src/gui/setup.cpp:58
+msgid "Apply"
+msgstr "×שר"
+
+#: src/gui/setup.cpp:58
+msgid "Reset Windows"
+msgstr "×תחל חלונות"
+
+#: src/gui/setup.cpp:79
+msgid "Video"
+msgstr "ויד×ו"
+
+#: src/gui/setup.cpp:83
+msgid "Audio"
+msgstr "שמע"
+
+#: src/gui/setup.cpp:87
+msgid "Joystick"
+msgstr "ג'ויסטיק"
+
+#: src/gui/setup.cpp:91
+msgid "Keyboard"
+msgstr "מקלדת"
+
+#: src/gui/setup.cpp:95
+msgid "Players"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:36 src/gui/setup_joystick.cpp:70
+msgid "Press the button to start calibration"
+msgstr "לחץ על הכפתור בכדי להתחיל בכיול"
+
+#: src/gui/setup_joystick.cpp:37 src/gui/setup_joystick.cpp:68
+msgid "Calibrate"
+msgstr "כייל"
+
+#: src/gui/setup_joystick.cpp:38
+msgid "Enable joystick"
+msgstr "×פשר ×’'ויסטיק"
+
+#: src/gui/setup_joystick.cpp:73
+msgid "Stop"
+msgstr "עצור"
+
+#: src/gui/setup_joystick.cpp:74
+msgid "Rotate the stick"
+msgstr "סובב ×ת המקל"
+
+#: src/gui/setup_keyboard.cpp:88
+msgid "Assign"
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:94
+#, fuzzy
+msgid "Default"
+msgstr "מחק"
+
+#: src/gui/setup_keyboard.cpp:115
+msgid "Key Conflict(s) Detected."
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:116
+msgid "Resolve them, or gameplay may result in strange behaviour."
+msgstr ""
+
+#: src/gui/setup_players.cpp:53
+#, fuzzy
+msgid "Name"
+msgstr "ש×:"
+
+#: src/gui/setup_players.cpp:54
+msgid "Relation"
+msgstr ""
+
+#: src/gui/setup_players.cpp:58
+msgid "Neutral"
+msgstr ""
+
+#: src/gui/setup_players.cpp:59
+msgid "Friend"
+msgstr ""
+
+#: src/gui/setup_players.cpp:60
+msgid "Disregarded"
+msgstr ""
+
+#: src/gui/setup_players.cpp:61
+msgid "Ignored"
+msgstr ""
+
+#: src/gui/setup_players.cpp:214
+msgid "Save player list"
+msgstr ""
+
+#: src/gui/setup_players.cpp:216
+msgid "Allow trading"
+msgstr ""
+
+#: src/gui/setup_players.cpp:218
+msgid "Allow whispers"
+msgstr ""
+
+#: src/gui/setup_players.cpp:245
+msgid "When ignoring:"
+msgstr ""
+
+#: src/gui/setup_video.cpp:112
+msgid "Full screen"
+msgstr "מסך מל×"
+
+#: src/gui/setup_video.cpp:113
+msgid "OpenGL"
+msgstr "â€OpenGL"
+
+#: src/gui/setup_video.cpp:114
+msgid "Custom cursor"
+msgstr "סמן-עכבר מות××"
+
+#: src/gui/setup_video.cpp:116
+msgid "FPS Limit:"
+msgstr "הגבלת FPS:"
+
+#: src/gui/setup_video.cpp:135
+msgid "Gui opacity"
+msgstr "×טימות Gui"
+
+#: src/gui/setup_video.cpp:192
+msgid "Scroll radius"
+msgstr "תווך גלילה"
+
+#: src/gui/setup_video.cpp:200
+msgid "Scroll laziness"
+msgstr "עצלנות גלילה"
+
+#: src/gui/setup_video.cpp:208
+msgid "Ambient FX"
+msgstr "×ופף FX"
+
+#: src/gui/setup_video.cpp:215 src/gui/setup_video.cpp:412
+msgid "off"
+msgstr "כבוי"
+
+#: src/gui/setup_video.cpp:218 src/gui/setup_video.cpp:234
+#: src/gui/setup_video.cpp:415 src/gui/setup_video.cpp:429
+msgid "low"
+msgstr "נמוך"
+
+#: src/gui/setup_video.cpp:221 src/gui/setup_video.cpp:240
+#: src/gui/setup_video.cpp:418 src/gui/setup_video.cpp:435
+msgid "high"
+msgstr "גבוה"
+
+#: src/gui/setup_video.cpp:227
+msgid "Particle Detail"
+msgstr ""
+
+#: src/gui/setup_video.cpp:237 src/gui/setup_video.cpp:432
+msgid "medium"
+msgstr ""
+
+#: src/gui/setup_video.cpp:243 src/gui/setup_video.cpp:438
+msgid "max"
+msgstr ""
+
+#: src/gui/setup_video.cpp:309
+msgid "Switching to full screen"
+msgstr "מחליף למסך מל×"
+
+#: src/gui/setup_video.cpp:310
+msgid "Restart needed for changes to take effect."
+msgstr "נדרש ×יתחול כדי ×©×”×©×™× ×•×™×™× ×™×”×™×• ברי-תוקף."
+
+#: src/gui/setup_video.cpp:322
+msgid "Changing OpenGL"
+msgstr "משנה OpenGL"
+
+#: src/gui/setup_video.cpp:323
+msgid "Applying change to OpenGL requires restart."
+msgstr "×ישור ×©×™× ×•×™×™× ×¢×‘×•×¨ OpenGL דורש ×יתחול."
+
+#: src/gui/skill.cpp:79
+msgid "Mystery Skill"
+msgstr ""
+
+#: src/gui/skill.cpp:132 src/gui/skill.cpp:188
+#, c-format
+msgid "Skill points: %d"
+msgstr ""
+
+#: src/gui/skill.cpp:133
+msgid "Up"
+msgstr ""
+
+#: src/gui/status.cpp:52 src/gui/status.cpp:235
+#, fuzzy, c-format
+msgid "Job: %d"
+msgstr "רמה: %d"
+
+#: src/gui/status.cpp:53 src/gui/status.cpp:238
+#, fuzzy, c-format
+msgid "Money: %d GP"
+msgstr "זהב: %d"
+
+#: src/gui/status.cpp:127
+#, fuzzy
+msgid "Stats"
+msgstr "מצב"
+
+#: src/gui/status.cpp:128
+msgid "Total"
+msgstr ""
+
+#: src/gui/status.cpp:129
+msgid "Cost"
+msgstr ""
+
+#: src/gui/status.cpp:132
+#, fuzzy
+msgid "Attack:"
+msgstr "התקפה %+d"
+
+#: src/gui/status.cpp:133
+#, fuzzy
+msgid "Defense:"
+msgstr "×”×’× ×” %+d"
+
+#: src/gui/status.cpp:134
+#, fuzzy
+msgid "M.Attack:"
+msgstr "התקפה %+d"
+
+#: src/gui/status.cpp:135
+#, fuzzy
+msgid "M.Defense:"
+msgstr "×”×’× ×” %+d"
+
+#: src/gui/status.cpp:136
+#, c-format
+msgid "% Accuracy:"
+msgstr ""
+
+#: src/gui/status.cpp:137
+#, c-format
+msgid "% Evade:"
+msgstr ""
+
+#: src/gui/status.cpp:138
+msgid "% Reflex:"
+msgstr ""
+
+#: src/gui/status.cpp:282
+#, fuzzy
+msgid "Strength"
+msgstr "עוצמה:"
+
+#: src/gui/status.cpp:283
+#, fuzzy
+msgid "Agility"
+msgstr "זריזות:"
+
+#: src/gui/status.cpp:284
+#, fuzzy
+msgid "Vitality"
+msgstr "חיוניות:"
+
+#: src/gui/status.cpp:285
+#, fuzzy
+msgid "Intelligence"
+msgstr "תבונה:"
+
+#: src/gui/status.cpp:286
+#, fuzzy
+msgid "Dexterity"
+msgstr "מיומנות:"
+
+#: src/gui/status.cpp:287
+msgid "Luck"
+msgstr ""
+
+#: src/gui/status.cpp:305
+#, c-format
+msgid "Remaining Status Points: %d"
+msgstr ""
+
+#: src/gui/trade.cpp:61
+msgid "Add"
+msgstr "הוסף"
+
+#: src/gui/trade.cpp:64
+msgid "Trade"
+msgstr ""
+
+#: src/gui/trade.cpp:80 src/gui/trade.cpp:156 src/gui/trade.cpp:204
+#, c-format
+msgid "You get %d GP."
+msgstr "×תה מקבל %d זהב."
+
+#: src/gui/trade.cpp:81
+msgid "You give:"
+msgstr "×תה נותן:"
+
+#: src/gui/trade.cpp:283
+msgid "Failed adding item. You can not overlap one kind of item on the window."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:93
+msgid "Updating..."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:119
+msgid "Play"
+msgstr ""
+
+#: src/gui/updatewindow.cpp:525
+msgid "Completed"
+msgstr ""
+
+#: src/resources/itemdb.cpp:99
+msgid "Unnamed"
+msgstr ""
+
+#: src/main.cpp:769
+msgid "Got disconnected from server!"
+msgstr ""
+
+#: src/main.cpp:956
+#, fuzzy
+msgid "Connecting to map server..."
+msgstr "מתחבר..."
+
+#: src/main.cpp:964
+msgid "Connecting to character server..."
+msgstr ""
+
+#: src/main.cpp:972
+msgid "Connecting to account server..."
+msgstr ""
+
+#~ msgid "Account and Character Management"
+#~ msgstr "ניהול משתמש ושחקן"
+
+#~ msgid "Unregister"
+#~ msgstr "בטל רישו×"
+
+#~ msgid "Change Password"
+#~ msgstr "שנה סיסמה"
+
+#~ msgid "Change Email Address"
+#~ msgstr "שנה כתובת דו×ר ×לקטרוני"
+
+#~ msgid "Account: %s"
+#~ msgstr "משתמש: %s"
+
+#~ msgid "Willpower:"
+#~ msgstr "כח רצון:"
+
+#~ msgid "Please distribute %d points"
+#~ msgstr "×× × ×—×œ×§ %d נקודות"
+
+#~ msgid "Your name needs to be at least 4 characters."
+#~ msgstr "יש להכניס לפחות 4 ×ª×•×™× ×‘×©×."
+
+#~ msgid "Character stats OK"
+#~ msgstr "נתוני שחקן - ×ישור"
+
+#~ msgid "Please remove %d points"
+#~ msgstr "×× × ×”×¡×¨ %d נקודות"
+
+#~ msgid "Split"
+#~ msgstr "פצל"
+
+#~ msgid "Select amount of items to split."
+#~ msgstr "בחר כמות ×—×¤×¦×™× ×œ×¤×¦×œ."
+
+#~ msgid "Guilds"
+#~ msgstr "גילדות"
+
+#~ msgid "@@guild|Invite %s@@"
+#~ msgstr "@@guild|הזמן ×ת %s@@"
+
+#~ msgid "@@party|Invite %s to join your party@@"
+#~ msgstr "@@party|הזמן ×ת %s להצטרף למסיבה@@"
+
+#~ msgid "@@split|Split@@"
+#~ msgstr "@@split|פצל@@"
+
+#~ msgid "Switch character"
+#~ msgstr "החלף שחקן"
+
+#~ msgid "Email:"
+#~ msgstr "דו×\"ל:"
+
+#~ msgid "Choose your Mana World Server"
+#~ msgstr "בחר ×ת שרת ×”-Mana World"
+
+#~ msgid "Port:"
+#~ msgstr "פורט:"
+
+#~ msgid "Please type both the address and the port of a server."
+#~ msgstr "×× × ×”×›× ×¡ ×’× ×ת כתובת ×•×’× ×ת פורט השרת."
+
+#~ msgid "Visible names"
+#~ msgstr "שמות גלויי×"
+
+#~ msgid "Propose trade"
+#~ msgstr "מציע לחור"
+
+#~ msgid "Confirm trade"
+#~ msgstr "×שר מסחר"
+
+#~ msgid "Change"
+#~ msgstr "שנה"
+
+#~ msgid "HP %+d"
+#~ msgstr "HP %+d"
+
+#~ msgid "MP %+d"
+#~ msgstr "MP %+d"
diff --git a/po/hr.po b/po/hr.po
new file mode 100644
index 00000000..cef7cc6f
--- /dev/null
+++ b/po/hr.po
@@ -0,0 +1,947 @@
+# Croatian translation for tmw
+# Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008
+# This file is distributed under the same license as the tmw package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: tmw\n"
+"Report-Msgid-Bugs-To: themanaworld-devel@lists.sourceforge.net\n"
+"POT-Creation-Date: 2009-01-08 22:10+0100\n"
+"PO-Revision-Date: 2008-12-28 23:36+0000\n"
+"Last-Translator: Dino Paskvan <dpaskvan@gmail.com>\n"
+"Language-Team: Croatian <hr@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-01-06 12:40+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#: src/gui/buy.cpp:43 src/gui/buy.cpp:61 src/gui/buysell.cpp:35
+msgid "Buy"
+msgstr "Kupi"
+
+#: src/gui/buy.cpp:58 src/gui/buy.cpp:239 src/gui/sell.cpp:65
+#: src/gui/sell.cpp:259
+#, c-format
+msgid "Price: %d GP / Total: %d GP"
+msgstr "Cijena: %d zlatnika / Ukupno: %d zlatnika"
+
+#: src/gui/buy.cpp:62 src/gui/sell.cpp:69
+msgid "Quit"
+msgstr "Izlaz"
+
+#: src/gui/buy.cpp:63 src/gui/buy.cpp:206 src/gui/buy.cpp:224
+#: src/gui/inventorywindow.cpp:150 src/gui/inventorywindow.cpp:160
+#: src/gui/sell.cpp:70 src/gui/sell.cpp:230 src/gui/sell.cpp:244
+#: src/gui/trade.cpp:94 src/gui/trade.cpp:266
+#, c-format
+msgid "Description: %s"
+msgstr "Opis: %s"
+
+#: src/gui/buy.cpp:64 src/gui/buy.cpp:208 src/gui/buy.cpp:225
+#: src/gui/inventorywindow.cpp:149 src/gui/inventorywindow.cpp:158
+#: src/gui/sell.cpp:71 src/gui/sell.cpp:232 src/gui/sell.cpp:245
+#, c-format
+msgid "Effect: %s"
+msgstr "UÄinak: %s"
+
+#: src/gui/buysell.cpp:31
+msgid "Shop"
+msgstr ""
+
+#: src/gui/buysell.cpp:35 src/gui/sell.cpp:48 src/gui/sell.cpp:68
+msgid "Sell"
+msgstr ""
+
+#: src/gui/buysell.cpp:35 src/gui/char_select.cpp:85
+#: src/gui/char_select.cpp:258 src/gui/char_server.cpp:60
+#: src/gui/connection.cpp:47 src/gui/item_amount.cpp:61 src/gui/login.cpp:52
+#: src/gui/npclistdialog.cpp:45 src/gui/register.cpp:76 src/gui/setup.cpp:58
+#: src/gui/trade.cpp:63 src/gui/updatewindow.cpp:118
+msgid "Cancel"
+msgstr "Poništi"
+
+#: src/gui/char_select.cpp:63
+msgid "Confirm Character Delete"
+msgstr "Potvrdi Brisanje Lika"
+
+#: src/gui/char_select.cpp:64
+msgid "Are you sure you want to delete this character?"
+msgstr "Da li ste sigurni da želite obrisati ovog lika?"
+
+#: src/gui/char_select.cpp:81
+#, fuzzy
+msgid "Select Character"
+msgstr "Stvori Lika"
+
+#: src/gui/char_select.cpp:84 src/gui/item_amount.cpp:60 src/gui/login.cpp:51
+#: src/gui/ok_dialog.cpp:37 src/gui/trade.cpp:62
+msgid "Ok"
+msgstr "U redu"
+
+#: src/gui/char_select.cpp:86
+msgid "New"
+msgstr "Novi"
+
+#: src/gui/char_select.cpp:87 src/gui/setup_players.cpp:220
+msgid "Delete"
+msgstr "Obriši"
+
+#: src/gui/char_select.cpp:88
+msgid "Previous"
+msgstr "Prethodni"
+
+#: src/gui/char_select.cpp:89
+msgid "Next"
+msgstr "Slijedeći"
+
+#: src/gui/char_select.cpp:91 src/gui/char_select.cpp:171
+#: src/gui/char_select.cpp:183 src/gui/inventorywindow.cpp:148
+#: src/gui/inventorywindow.cpp:156 src/gui/trade.cpp:92 src/gui/trade.cpp:264
+#, c-format
+msgid "Name: %s"
+msgstr "Ime: %s"
+
+#: src/gui/char_select.cpp:92 src/gui/char_select.cpp:172
+#: src/gui/char_select.cpp:184 src/gui/status.cpp:51 src/gui/status.cpp:232
+#, c-format
+msgid "Level: %d"
+msgstr "Nivo: %d"
+
+#: src/gui/char_select.cpp:93 src/gui/char_select.cpp:173
+#: src/gui/char_select.cpp:185
+#, fuzzy, c-format
+msgid "Job Level: %d"
+msgstr "Nivo: %d"
+
+#: src/gui/char_select.cpp:94 src/gui/char_select.cpp:186
+#, c-format
+msgid "Money: %d"
+msgstr "Novac: %d"
+
+#: src/gui/char_select.cpp:174
+#, c-format
+msgid "Gold: %d"
+msgstr ""
+
+#: src/gui/char_select.cpp:243
+msgid "Create Character"
+msgstr "Stvori Lika"
+
+#: src/gui/char_select.cpp:250 src/gui/login.cpp:44 src/gui/register.cpp:65
+msgid "Name:"
+msgstr "Ime:"
+
+#: src/gui/char_select.cpp:253
+msgid "Hair Color:"
+msgstr "Boja kose:"
+
+#: src/gui/char_select.cpp:256
+msgid "Hair Style:"
+msgstr "Frizura:"
+
+#: src/gui/char_select.cpp:257
+msgid "Create"
+msgstr "Stvori"
+
+#: src/gui/char_server.cpp:52
+msgid "Select Server"
+msgstr ""
+
+#: src/gui/char_server.cpp:59 src/gui/npclistdialog.cpp:44
+#: src/gui/npc_text.cpp:46
+msgid "OK"
+msgstr ""
+
+#: src/gui/chat.cpp:122
+msgid "Global announcement:"
+msgstr ""
+
+#: src/gui/chat.cpp:125
+#, c-format
+msgid "Global announcement from %s:"
+msgstr ""
+
+#: src/gui/chat.cpp:140 src/gui/login.cpp:46 src/gui/register.cpp:68
+msgid "Server:"
+msgstr ""
+
+#: src/gui/chat.cpp:146
+#, c-format
+msgid "%s whispers:"
+msgstr ""
+
+#: src/gui/chat.cpp:283
+#, c-format
+msgid "Whispering to %s: %s"
+msgstr ""
+
+#: src/gui/chat.cpp:356
+msgid "Unknown command"
+msgstr ""
+
+#: src/gui/chat.cpp:366
+msgid "Trade failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:369
+msgid "Emote failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:372
+msgid "Sit failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:375
+msgid "Chat creating failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:378
+msgid "Could not join party!"
+msgstr ""
+
+#: src/gui/chat.cpp:381
+msgid "Cannot shout!"
+msgstr ""
+
+#: src/gui/chat.cpp:389
+msgid "You have not yet reached a high enough lvl!"
+msgstr ""
+
+#: src/gui/chat.cpp:392
+msgid "Insufficient HP!"
+msgstr ""
+
+#: src/gui/chat.cpp:395
+msgid "Insufficient SP!"
+msgstr ""
+
+#: src/gui/chat.cpp:398
+msgid "You have no memos!"
+msgstr ""
+
+#: src/gui/chat.cpp:401
+msgid "You cannot do that right now!"
+msgstr ""
+
+#: src/gui/chat.cpp:404
+msgid "Seems you need more Zeny... ;-)"
+msgstr ""
+
+#: src/gui/chat.cpp:407
+msgid "You cannot use this skill with that kind of weapon!"
+msgstr ""
+
+#: src/gui/chat.cpp:410
+msgid "You need another red gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:413
+msgid "You need another blue gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:416
+msgid "You're carrying to much to do this!"
+msgstr ""
+
+#: src/gui/chat.cpp:419
+msgid "Huh? What's that?"
+msgstr ""
+
+#: src/gui/chat.cpp:425
+msgid "Warp failed..."
+msgstr ""
+
+#: src/gui/chat.cpp:428
+msgid "Could not steal anything..."
+msgstr ""
+
+#: src/gui/chat.cpp:431
+msgid "Poison had no effect..."
+msgstr ""
+
+#: src/gui/chat.cpp:496
+msgid "-- Help --"
+msgstr ""
+
+#: src/gui/chat.cpp:499
+msgid "/announce: Global announcement (GM only)"
+msgstr ""
+
+#: src/gui/chat.cpp:500
+msgid "/clear: Clears this window"
+msgstr ""
+
+#: src/gui/chat.cpp:501
+msgid "/help: Display this help"
+msgstr ""
+
+#: src/gui/chat.cpp:502
+msgid "/where: Display map name"
+msgstr ""
+
+#: src/gui/chat.cpp:503
+msgid "/whisper <nick> <message>: Sends a private <message> to <nick>"
+msgstr ""
+
+#: src/gui/chat.cpp:505
+msgid "/w <nick> <message>: Short form for /whisper"
+msgstr ""
+
+#: src/gui/chat.cpp:506
+msgid "/who: Display number of online users"
+msgstr ""
+
+#: src/gui/chat.cpp:507
+msgid "For more information, type /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:512
+msgid "Command: /announce <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:513
+msgid "*** only available to a GM ***"
+msgstr ""
+
+#: src/gui/chat.cpp:514
+msgid "This command sends the message <msg> to all players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:520
+msgid "Command: /clear"
+msgstr ""
+
+#: src/gui/chat.cpp:521
+msgid "This command clears the chat log of previous chat."
+msgstr ""
+
+#: src/gui/chat.cpp:527
+msgid "Command: /help"
+msgstr ""
+
+#: src/gui/chat.cpp:528
+msgid "This command displays a list of all commands available."
+msgstr ""
+
+#: src/gui/chat.cpp:530
+msgid "Command: /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:531
+msgid "This command displays help on <command>."
+msgstr ""
+
+#: src/gui/chat.cpp:536
+msgid "Command: /where"
+msgstr ""
+
+#: src/gui/chat.cpp:537
+msgid "This command displays the name of the current map."
+msgstr ""
+
+#: src/gui/chat.cpp:543
+msgid "Command: /whisper <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:544
+msgid "Command: /w <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:545
+msgid "This command sends the message <msg> to <nick>."
+msgstr ""
+
+#: src/gui/chat.cpp:547
+msgid "If the <nick> has spaces in it, enclose it in double quotes (\")."
+msgstr ""
+
+#: src/gui/chat.cpp:553
+msgid "Command: /who"
+msgstr ""
+
+#: src/gui/chat.cpp:554
+msgid "This command displays the number of players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:558
+msgid "Unknown command."
+msgstr ""
+
+#: src/gui/chat.cpp:559
+msgid "Type /help for a list of commands."
+msgstr ""
+
+#: src/gui/confirm_dialog.cpp:35
+msgid "Yes"
+msgstr "Da"
+
+#: src/gui/confirm_dialog.cpp:36
+msgid "No"
+msgstr "Ne"
+
+#: src/gui/connection.cpp:49 src/gui/updatewindow.cpp:116
+msgid "Connecting..."
+msgstr "Spajanje..."
+
+#: src/gui/equipmentwindow.cpp:38 src/gui/menuwindow.cpp:62
+msgid "Equipment"
+msgstr "Oprema"
+
+#: src/gui/help.cpp:33
+msgid "Help"
+msgstr ""
+
+#: src/gui/help.cpp:41
+msgid "Close"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:46 src/gui/menuwindow.cpp:63
+msgid "Inventory"
+msgstr "Zalihe"
+
+#: src/gui/inventorywindow.cpp:56 src/gui/inventorywindow.cpp:232
+#: src/gui/skill.cpp:134
+msgid "Use"
+msgstr "Upotrijebi"
+
+#: src/gui/inventorywindow.cpp:57
+msgid "Drop"
+msgstr "Ispusti"
+
+#: src/gui/inventorywindow.cpp:99
+#, c-format
+msgid "Weight: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:104
+#, c-format
+msgid "Slots used: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:225
+msgid "Unequip"
+msgstr "Skini opremu"
+
+#: src/gui/inventorywindow.cpp:228
+msgid "Equip"
+msgstr "Opremi"
+
+#: src/gui/item_amount.cpp:76
+msgid "Select amount of items to trade."
+msgstr "Odaberi koliÄinu predmeta za razmjenu."
+
+#: src/gui/item_amount.cpp:80
+msgid "Select amount of items to drop."
+msgstr "Odaberi koliÄinu predmeta za ispuÅ¡tanje."
+
+#: src/gui/login.cpp:42
+msgid "Login"
+msgstr "KorisniÄko ime"
+
+#: src/gui/login.cpp:45 src/gui/register.cpp:66
+msgid "Password:"
+msgstr "Lozinka"
+
+#: src/gui/login.cpp:50
+msgid "Remember Username"
+msgstr "Zapamti korisniÄko ime"
+
+#: src/gui/login.cpp:53 src/gui/register.cpp:75
+msgid "Register"
+msgstr "Registriraj se"
+
+#: src/gui/menuwindow.cpp:61
+msgid "Status"
+msgstr "Stanje"
+
+#: src/gui/menuwindow.cpp:64 src/gui/skill.cpp:119
+msgid "Skills"
+msgstr "Vještine"
+
+#: src/gui/menuwindow.cpp:65
+msgid "Shortcut"
+msgstr "Kratica"
+
+#: src/gui/menuwindow.cpp:66 src/main.cpp:716
+msgid "Setup"
+msgstr "Podešavanje"
+
+#: src/gui/minimap.cpp:34
+msgid "MiniMap"
+msgstr "Karta"
+
+#: src/gui/npclistdialog.cpp:35 src/gui/npc_text.cpp:35
+msgid "NPC"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:81
+#, c-format
+msgid "@@trade|Trade With %s@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:83
+#, c-format
+msgid "@@attack|Attack %s@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:114
+msgid "@@talk|Talk To NPC@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:124 src/gui/popupmenu.cpp:140
+#: src/gui/popupmenu.cpp:293
+msgid "@@cancel|Cancel@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:136
+#, c-format
+msgid "@@pickup|Pick Up %s@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:283
+#, fuzzy
+msgid "@@use|Unequip@@"
+msgstr "Skini opremu"
+
+#: src/gui/popupmenu.cpp:285
+msgid "@@use|Equip@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:288
+msgid "@@use|Use@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:290
+msgid "@@drop|Drop@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:291
+msgid "@@description|Description@@"
+msgstr ""
+
+#: src/gui/register.cpp:67
+msgid "Confirm:"
+msgstr ""
+
+#: src/gui/register.cpp:73
+msgid "Male"
+msgstr "Muško"
+
+#: src/gui/register.cpp:74
+msgid "Female"
+msgstr "Žensko"
+
+#: src/gui/register.cpp:176
+#, c-format
+msgid "The username needs to be at least %d characters long."
+msgstr ""
+
+#: src/gui/register.cpp:184
+#, c-format
+msgid "The username needs to be less than %d characters long."
+msgstr ""
+
+#: src/gui/register.cpp:192
+#, c-format
+msgid "The password needs to be at least %d characters long."
+msgstr ""
+
+#: src/gui/register.cpp:200
+#, c-format
+msgid "The password needs to be less than %d characters long."
+msgstr ""
+
+#: src/gui/register.cpp:207
+msgid "Passwords do not match."
+msgstr ""
+
+#: src/gui/register.cpp:227 src/main.cpp:945
+msgid "Error"
+msgstr "Greška"
+
+#: src/gui/setup_audio.cpp:40
+msgid "Sound"
+msgstr ""
+
+#: src/gui/setup_audio.cpp:46
+msgid "Sfx volume"
+msgstr ""
+
+#: src/gui/setup_audio.cpp:47
+msgid "Music volume"
+msgstr ""
+
+#: src/gui/setup.cpp:58
+msgid "Apply"
+msgstr ""
+
+#: src/gui/setup.cpp:58
+msgid "Reset Windows"
+msgstr ""
+
+#: src/gui/setup.cpp:79
+msgid "Video"
+msgstr ""
+
+#: src/gui/setup.cpp:83
+msgid "Audio"
+msgstr ""
+
+#: src/gui/setup.cpp:87
+msgid "Joystick"
+msgstr ""
+
+#: src/gui/setup.cpp:91
+msgid "Keyboard"
+msgstr ""
+
+#: src/gui/setup.cpp:95
+msgid "Players"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:36 src/gui/setup_joystick.cpp:70
+msgid "Press the button to start calibration"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:37 src/gui/setup_joystick.cpp:68
+msgid "Calibrate"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:38
+msgid "Enable joystick"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:73
+msgid "Stop"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:74
+msgid "Rotate the stick"
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:88
+msgid "Assign"
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:94
+#, fuzzy
+msgid "Default"
+msgstr "Obriši"
+
+#: src/gui/setup_keyboard.cpp:115
+msgid "Key Conflict(s) Detected."
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:116
+msgid "Resolve them, or gameplay may result in strange behaviour."
+msgstr ""
+
+#: src/gui/setup_players.cpp:53
+#, fuzzy
+msgid "Name"
+msgstr "Ime:"
+
+#: src/gui/setup_players.cpp:54
+msgid "Relation"
+msgstr ""
+
+#: src/gui/setup_players.cpp:58
+msgid "Neutral"
+msgstr ""
+
+#: src/gui/setup_players.cpp:59
+msgid "Friend"
+msgstr ""
+
+#: src/gui/setup_players.cpp:60
+msgid "Disregarded"
+msgstr ""
+
+#: src/gui/setup_players.cpp:61
+msgid "Ignored"
+msgstr ""
+
+#: src/gui/setup_players.cpp:214
+msgid "Save player list"
+msgstr ""
+
+#: src/gui/setup_players.cpp:216
+msgid "Allow trading"
+msgstr ""
+
+#: src/gui/setup_players.cpp:218
+msgid "Allow whispers"
+msgstr ""
+
+#: src/gui/setup_players.cpp:245
+msgid "When ignoring:"
+msgstr ""
+
+#: src/gui/setup_video.cpp:112
+msgid "Full screen"
+msgstr ""
+
+#: src/gui/setup_video.cpp:113
+msgid "OpenGL"
+msgstr ""
+
+#: src/gui/setup_video.cpp:114
+msgid "Custom cursor"
+msgstr ""
+
+#: src/gui/setup_video.cpp:116
+msgid "FPS Limit:"
+msgstr ""
+
+#: src/gui/setup_video.cpp:135
+msgid "Gui opacity"
+msgstr ""
+
+#: src/gui/setup_video.cpp:192
+msgid "Scroll radius"
+msgstr ""
+
+#: src/gui/setup_video.cpp:200
+msgid "Scroll laziness"
+msgstr ""
+
+#: src/gui/setup_video.cpp:208
+msgid "Ambient FX"
+msgstr ""
+
+#: src/gui/setup_video.cpp:215 src/gui/setup_video.cpp:412
+msgid "off"
+msgstr ""
+
+#: src/gui/setup_video.cpp:218 src/gui/setup_video.cpp:234
+#: src/gui/setup_video.cpp:415 src/gui/setup_video.cpp:429
+msgid "low"
+msgstr ""
+
+#: src/gui/setup_video.cpp:221 src/gui/setup_video.cpp:240
+#: src/gui/setup_video.cpp:418 src/gui/setup_video.cpp:435
+msgid "high"
+msgstr ""
+
+#: src/gui/setup_video.cpp:227
+msgid "Particle Detail"
+msgstr ""
+
+#: src/gui/setup_video.cpp:237 src/gui/setup_video.cpp:432
+msgid "medium"
+msgstr ""
+
+#: src/gui/setup_video.cpp:243 src/gui/setup_video.cpp:438
+msgid "max"
+msgstr ""
+
+#: src/gui/setup_video.cpp:309
+msgid "Switching to full screen"
+msgstr ""
+
+#: src/gui/setup_video.cpp:310
+msgid "Restart needed for changes to take effect."
+msgstr ""
+
+#: src/gui/setup_video.cpp:322
+msgid "Changing OpenGL"
+msgstr ""
+
+#: src/gui/setup_video.cpp:323
+msgid "Applying change to OpenGL requires restart."
+msgstr ""
+
+#: src/gui/skill.cpp:79
+msgid "Mystery Skill"
+msgstr ""
+
+#: src/gui/skill.cpp:132 src/gui/skill.cpp:188
+#, c-format
+msgid "Skill points: %d"
+msgstr ""
+
+#: src/gui/skill.cpp:133
+msgid "Up"
+msgstr ""
+
+#: src/gui/status.cpp:52 src/gui/status.cpp:235
+#, fuzzy, c-format
+msgid "Job: %d"
+msgstr "Nivo: %d"
+
+#: src/gui/status.cpp:53 src/gui/status.cpp:238
+#, fuzzy, c-format
+msgid "Money: %d GP"
+msgstr "Novac: %d"
+
+#: src/gui/status.cpp:127
+#, fuzzy
+msgid "Stats"
+msgstr "Stanje"
+
+#: src/gui/status.cpp:128
+msgid "Total"
+msgstr ""
+
+#: src/gui/status.cpp:129
+msgid "Cost"
+msgstr ""
+
+#: src/gui/status.cpp:132
+msgid "Attack:"
+msgstr ""
+
+#: src/gui/status.cpp:133
+msgid "Defense:"
+msgstr ""
+
+#: src/gui/status.cpp:134
+msgid "M.Attack:"
+msgstr ""
+
+#: src/gui/status.cpp:135
+msgid "M.Defense:"
+msgstr ""
+
+#: src/gui/status.cpp:136
+#, c-format
+msgid "% Accuracy:"
+msgstr ""
+
+#: src/gui/status.cpp:137
+#, c-format
+msgid "% Evade:"
+msgstr ""
+
+#: src/gui/status.cpp:138
+msgid "% Reflex:"
+msgstr ""
+
+#: src/gui/status.cpp:282
+#, fuzzy
+msgid "Strength"
+msgstr "Snaga:"
+
+#: src/gui/status.cpp:283
+#, fuzzy
+msgid "Agility"
+msgstr "Okretnost:"
+
+#: src/gui/status.cpp:284
+#, fuzzy
+msgid "Vitality"
+msgstr "Vitalnost:"
+
+#: src/gui/status.cpp:285
+#, fuzzy
+msgid "Intelligence"
+msgstr "Inteligencija:"
+
+#: src/gui/status.cpp:286
+#, fuzzy
+msgid "Dexterity"
+msgstr "Spretnost:"
+
+#: src/gui/status.cpp:287
+msgid "Luck"
+msgstr ""
+
+#: src/gui/status.cpp:305
+#, c-format
+msgid "Remaining Status Points: %d"
+msgstr ""
+
+#: src/gui/trade.cpp:61
+msgid "Add"
+msgstr ""
+
+#: src/gui/trade.cpp:64
+msgid "Trade"
+msgstr ""
+
+#: src/gui/trade.cpp:80 src/gui/trade.cpp:156 src/gui/trade.cpp:204
+#, c-format
+msgid "You get %d GP."
+msgstr ""
+
+#: src/gui/trade.cpp:81
+msgid "You give:"
+msgstr ""
+
+#: src/gui/trade.cpp:283
+msgid "Failed adding item. You can not overlap one kind of item on the window."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:93
+msgid "Updating..."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:119
+msgid "Play"
+msgstr ""
+
+#: src/gui/updatewindow.cpp:525
+msgid "Completed"
+msgstr ""
+
+#: src/resources/itemdb.cpp:99
+msgid "Unnamed"
+msgstr ""
+
+#: src/main.cpp:769
+msgid "Got disconnected from server!"
+msgstr ""
+
+#: src/main.cpp:956
+#, fuzzy
+msgid "Connecting to map server..."
+msgstr "Spajanje..."
+
+#: src/main.cpp:964
+msgid "Connecting to character server..."
+msgstr ""
+
+#: src/main.cpp:972
+msgid "Connecting to account server..."
+msgstr ""
+
+#~ msgid "Account and Character Management"
+#~ msgstr "Upravljanje RaÄunom i Likovima"
+
+#~ msgid "Unregister"
+#~ msgstr "Odjavi"
+
+#~ msgid "Change Password"
+#~ msgstr "Promijeni Lozinku"
+
+#~ msgid "Change Email Address"
+#~ msgstr "Promijeni Email Adresu"
+
+#~ msgid "Account: %s"
+#~ msgstr "KorisniÄki raÄun: %s"
+
+#~ msgid "Willpower:"
+#~ msgstr "Snaga volje:"
+
+#~ msgid "Please distribute %d points"
+#~ msgstr "Molimo, rasporedi %d bodova"
+
+#~ msgid "Your name needs to be at least 4 characters."
+#~ msgstr "Ime mora imati barem 4 znaka."
+
+#~ msgid "Character stats OK"
+#~ msgstr "Podaci lika su u redu"
+
+#~ msgid "Please remove %d points"
+#~ msgstr "Molimo, oduzmi %d bodova"
+
+#~ msgid "Split"
+#~ msgstr "Razdvoji"
+
+#~ msgid "Select amount of items to split."
+#~ msgstr "Odaberi koliÄinu predmeta za razdvajanje."
+
+#~ msgid "Guilds"
+#~ msgstr "Cehovi"
diff --git a/po/id.po b/po/id.po
new file mode 100644
index 00000000..6f2dda71
--- /dev/null
+++ b/po/id.po
@@ -0,0 +1,985 @@
+# Indonesian translation for tmw
+# Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008
+# This file is distributed under the same license as the tmw package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: tmw\n"
+"Report-Msgid-Bugs-To: themanaworld-devel@lists.sourceforge.net\n"
+"POT-Creation-Date: 2009-01-08 22:10+0100\n"
+"PO-Revision-Date: 2008-03-26 09:11+0000\n"
+"Last-Translator: ActiveFile <activefile@gmail.com>\n"
+"Language-Team: Indonesian <id@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-01-06 12:40+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#: src/gui/buy.cpp:43 src/gui/buy.cpp:61 src/gui/buysell.cpp:35
+msgid "Buy"
+msgstr "Beli"
+
+#: src/gui/buy.cpp:58 src/gui/buy.cpp:239 src/gui/sell.cpp:65
+#: src/gui/sell.cpp:259
+#, c-format
+msgid "Price: %d GP / Total: %d GP"
+msgstr "Harga: %d GP / Jumlah: %d GP"
+
+#: src/gui/buy.cpp:62 src/gui/sell.cpp:69
+msgid "Quit"
+msgstr "Keluar"
+
+#: src/gui/buy.cpp:63 src/gui/buy.cpp:206 src/gui/buy.cpp:224
+#: src/gui/inventorywindow.cpp:150 src/gui/inventorywindow.cpp:160
+#: src/gui/sell.cpp:70 src/gui/sell.cpp:230 src/gui/sell.cpp:244
+#: src/gui/trade.cpp:94 src/gui/trade.cpp:266
+#, c-format
+msgid "Description: %s"
+msgstr "Deskripsi: %s"
+
+#: src/gui/buy.cpp:64 src/gui/buy.cpp:208 src/gui/buy.cpp:225
+#: src/gui/inventorywindow.cpp:149 src/gui/inventorywindow.cpp:158
+#: src/gui/sell.cpp:71 src/gui/sell.cpp:232 src/gui/sell.cpp:245
+#, c-format
+msgid "Effect: %s"
+msgstr "Efek: %s"
+
+#: src/gui/buysell.cpp:31
+#, fuzzy
+msgid "Shop"
+msgstr "Berhenti"
+
+#: src/gui/buysell.cpp:35 src/gui/sell.cpp:48 src/gui/sell.cpp:68
+msgid "Sell"
+msgstr "Jual"
+
+#: src/gui/buysell.cpp:35 src/gui/char_select.cpp:85
+#: src/gui/char_select.cpp:258 src/gui/char_server.cpp:60
+#: src/gui/connection.cpp:47 src/gui/item_amount.cpp:61 src/gui/login.cpp:52
+#: src/gui/npclistdialog.cpp:45 src/gui/register.cpp:76 src/gui/setup.cpp:58
+#: src/gui/trade.cpp:63 src/gui/updatewindow.cpp:118
+msgid "Cancel"
+msgstr "Batal"
+
+#: src/gui/char_select.cpp:63
+msgid "Confirm Character Delete"
+msgstr ""
+
+#: src/gui/char_select.cpp:64
+msgid "Are you sure you want to delete this character?"
+msgstr "Apakah anda bersungguh-sungguh ingin menghapus karakter ini?"
+
+#: src/gui/char_select.cpp:81
+msgid "Select Character"
+msgstr "Pilih Karakter"
+
+#: src/gui/char_select.cpp:84 src/gui/item_amount.cpp:60 src/gui/login.cpp:51
+#: src/gui/ok_dialog.cpp:37 src/gui/trade.cpp:62
+msgid "Ok"
+msgstr "Ok"
+
+#: src/gui/char_select.cpp:86
+msgid "New"
+msgstr "Buat baru"
+
+#: src/gui/char_select.cpp:87 src/gui/setup_players.cpp:220
+msgid "Delete"
+msgstr "Hapus"
+
+#: src/gui/char_select.cpp:88
+msgid "Previous"
+msgstr "Sebelumnya"
+
+#: src/gui/char_select.cpp:89
+msgid "Next"
+msgstr "Berikutnya"
+
+#: src/gui/char_select.cpp:91 src/gui/char_select.cpp:171
+#: src/gui/char_select.cpp:183 src/gui/inventorywindow.cpp:148
+#: src/gui/inventorywindow.cpp:156 src/gui/trade.cpp:92 src/gui/trade.cpp:264
+#, c-format
+msgid "Name: %s"
+msgstr "Nama: %s"
+
+#: src/gui/char_select.cpp:92 src/gui/char_select.cpp:172
+#: src/gui/char_select.cpp:184 src/gui/status.cpp:51 src/gui/status.cpp:232
+#, c-format
+msgid "Level: %d"
+msgstr "Tingkatan: %d"
+
+#: src/gui/char_select.cpp:93 src/gui/char_select.cpp:173
+#: src/gui/char_select.cpp:185
+#, fuzzy, c-format
+msgid "Job Level: %d"
+msgstr "Tingkatan: %d"
+
+#: src/gui/char_select.cpp:94 src/gui/char_select.cpp:186
+#, c-format
+msgid "Money: %d"
+msgstr "Uang: %d"
+
+#: src/gui/char_select.cpp:174
+#, c-format
+msgid "Gold: %d"
+msgstr ""
+
+#: src/gui/char_select.cpp:243
+msgid "Create Character"
+msgstr "Buat Karakter"
+
+#: src/gui/char_select.cpp:250 src/gui/login.cpp:44 src/gui/register.cpp:65
+msgid "Name:"
+msgstr "Nama:"
+
+#: src/gui/char_select.cpp:253
+msgid "Hair Color:"
+msgstr "Warna Rambut:"
+
+#: src/gui/char_select.cpp:256
+msgid "Hair Style:"
+msgstr "Gaya Rambut:"
+
+#: src/gui/char_select.cpp:257
+msgid "Create"
+msgstr "Buat"
+
+#: src/gui/char_server.cpp:52
+#, fuzzy
+msgid "Select Server"
+msgstr "Pilih Karakter"
+
+#: src/gui/char_server.cpp:59 src/gui/npclistdialog.cpp:44
+#: src/gui/npc_text.cpp:46
+msgid "OK"
+msgstr ""
+
+#: src/gui/chat.cpp:122
+msgid "Global announcement:"
+msgstr ""
+
+#: src/gui/chat.cpp:125
+#, c-format
+msgid "Global announcement from %s:"
+msgstr ""
+
+#: src/gui/chat.cpp:140 src/gui/login.cpp:46 src/gui/register.cpp:68
+msgid "Server:"
+msgstr "Server:"
+
+#: src/gui/chat.cpp:146
+#, c-format
+msgid "%s whispers:"
+msgstr ""
+
+#: src/gui/chat.cpp:283
+#, c-format
+msgid "Whispering to %s: %s"
+msgstr ""
+
+#: src/gui/chat.cpp:356
+msgid "Unknown command"
+msgstr ""
+
+#: src/gui/chat.cpp:366
+msgid "Trade failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:369
+msgid "Emote failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:372
+msgid "Sit failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:375
+msgid "Chat creating failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:378
+msgid "Could not join party!"
+msgstr ""
+
+#: src/gui/chat.cpp:381
+msgid "Cannot shout!"
+msgstr ""
+
+#: src/gui/chat.cpp:389
+msgid "You have not yet reached a high enough lvl!"
+msgstr ""
+
+#: src/gui/chat.cpp:392
+msgid "Insufficient HP!"
+msgstr ""
+
+#: src/gui/chat.cpp:395
+msgid "Insufficient SP!"
+msgstr ""
+
+#: src/gui/chat.cpp:398
+msgid "You have no memos!"
+msgstr ""
+
+#: src/gui/chat.cpp:401
+msgid "You cannot do that right now!"
+msgstr ""
+
+#: src/gui/chat.cpp:404
+msgid "Seems you need more Zeny... ;-)"
+msgstr ""
+
+#: src/gui/chat.cpp:407
+msgid "You cannot use this skill with that kind of weapon!"
+msgstr ""
+
+#: src/gui/chat.cpp:410
+msgid "You need another red gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:413
+msgid "You need another blue gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:416
+msgid "You're carrying to much to do this!"
+msgstr ""
+
+#: src/gui/chat.cpp:419
+msgid "Huh? What's that?"
+msgstr ""
+
+#: src/gui/chat.cpp:425
+msgid "Warp failed..."
+msgstr ""
+
+#: src/gui/chat.cpp:428
+msgid "Could not steal anything..."
+msgstr ""
+
+#: src/gui/chat.cpp:431
+msgid "Poison had no effect..."
+msgstr ""
+
+#: src/gui/chat.cpp:496
+msgid "-- Help --"
+msgstr ""
+
+#: src/gui/chat.cpp:499
+msgid "/announce: Global announcement (GM only)"
+msgstr ""
+
+#: src/gui/chat.cpp:500
+msgid "/clear: Clears this window"
+msgstr ""
+
+#: src/gui/chat.cpp:501
+msgid "/help: Display this help"
+msgstr ""
+
+#: src/gui/chat.cpp:502
+msgid "/where: Display map name"
+msgstr ""
+
+#: src/gui/chat.cpp:503
+msgid "/whisper <nick> <message>: Sends a private <message> to <nick>"
+msgstr ""
+
+#: src/gui/chat.cpp:505
+msgid "/w <nick> <message>: Short form for /whisper"
+msgstr ""
+
+#: src/gui/chat.cpp:506
+msgid "/who: Display number of online users"
+msgstr ""
+
+#: src/gui/chat.cpp:507
+msgid "For more information, type /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:512
+msgid "Command: /announce <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:513
+msgid "*** only available to a GM ***"
+msgstr ""
+
+#: src/gui/chat.cpp:514
+msgid "This command sends the message <msg> to all players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:520
+msgid "Command: /clear"
+msgstr ""
+
+#: src/gui/chat.cpp:521
+msgid "This command clears the chat log of previous chat."
+msgstr ""
+
+#: src/gui/chat.cpp:527
+msgid "Command: /help"
+msgstr ""
+
+#: src/gui/chat.cpp:528
+msgid "This command displays a list of all commands available."
+msgstr ""
+
+#: src/gui/chat.cpp:530
+msgid "Command: /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:531
+msgid "This command displays help on <command>."
+msgstr ""
+
+#: src/gui/chat.cpp:536
+msgid "Command: /where"
+msgstr ""
+
+#: src/gui/chat.cpp:537
+msgid "This command displays the name of the current map."
+msgstr ""
+
+#: src/gui/chat.cpp:543
+msgid "Command: /whisper <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:544
+msgid "Command: /w <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:545
+msgid "This command sends the message <msg> to <nick>."
+msgstr ""
+
+#: src/gui/chat.cpp:547
+msgid "If the <nick> has spaces in it, enclose it in double quotes (\")."
+msgstr ""
+
+#: src/gui/chat.cpp:553
+msgid "Command: /who"
+msgstr ""
+
+#: src/gui/chat.cpp:554
+msgid "This command displays the number of players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:558
+msgid "Unknown command."
+msgstr ""
+
+#: src/gui/chat.cpp:559
+msgid "Type /help for a list of commands."
+msgstr ""
+
+#: src/gui/confirm_dialog.cpp:35
+msgid "Yes"
+msgstr "Ya"
+
+#: src/gui/confirm_dialog.cpp:36
+msgid "No"
+msgstr "Tidak"
+
+#: src/gui/connection.cpp:49 src/gui/updatewindow.cpp:116
+msgid "Connecting..."
+msgstr "Menyambung..."
+
+#: src/gui/equipmentwindow.cpp:38 src/gui/menuwindow.cpp:62
+msgid "Equipment"
+msgstr "Perlengkapan"
+
+#: src/gui/help.cpp:33
+msgid "Help"
+msgstr ""
+
+#: src/gui/help.cpp:41
+msgid "Close"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:46 src/gui/menuwindow.cpp:63
+msgid "Inventory"
+msgstr "Inventaris"
+
+#: src/gui/inventorywindow.cpp:56 src/gui/inventorywindow.cpp:232
+#: src/gui/skill.cpp:134
+msgid "Use"
+msgstr "Gunakan"
+
+#: src/gui/inventorywindow.cpp:57
+msgid "Drop"
+msgstr "Jatuh"
+
+#: src/gui/inventorywindow.cpp:99
+#, c-format
+msgid "Weight: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:104
+#, c-format
+msgid "Slots used: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:225
+msgid "Unequip"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:228
+msgid "Equip"
+msgstr ""
+
+#: src/gui/item_amount.cpp:76
+msgid "Select amount of items to trade."
+msgstr "Pilih jumlah item yang mau di perdagangkan"
+
+#: src/gui/item_amount.cpp:80
+msgid "Select amount of items to drop."
+msgstr "Pilih jumlah item yang mau di buang"
+
+#: src/gui/login.cpp:42
+msgid "Login"
+msgstr "Login"
+
+#: src/gui/login.cpp:45 src/gui/register.cpp:66
+msgid "Password:"
+msgstr "Kata Sandi:"
+
+#: src/gui/login.cpp:50
+msgid "Remember Username"
+msgstr ""
+
+#: src/gui/login.cpp:53 src/gui/register.cpp:75
+msgid "Register"
+msgstr "Mendaftar"
+
+#: src/gui/menuwindow.cpp:61
+msgid "Status"
+msgstr "Status"
+
+#: src/gui/menuwindow.cpp:64 src/gui/skill.cpp:119
+msgid "Skills"
+msgstr "Keahlian"
+
+#: src/gui/menuwindow.cpp:65
+msgid "Shortcut"
+msgstr "Tombol Singkat"
+
+#: src/gui/menuwindow.cpp:66 src/main.cpp:716
+msgid "Setup"
+msgstr "Atur"
+
+#: src/gui/minimap.cpp:34
+msgid "MiniMap"
+msgstr "MiniMap"
+
+#: src/gui/npclistdialog.cpp:35 src/gui/npc_text.cpp:35
+msgid "NPC"
+msgstr "NPC"
+
+#: src/gui/popupmenu.cpp:81
+#, c-format
+msgid "@@trade|Trade With %s@@"
+msgstr "@@trade|Dagang Dengan %s@@"
+
+#: src/gui/popupmenu.cpp:83
+#, c-format
+msgid "@@attack|Attack %s@@"
+msgstr "@@attack|Serang%s@@"
+
+#: src/gui/popupmenu.cpp:114
+msgid "@@talk|Talk To NPC@@"
+msgstr "@@talk|Bicara dengan NPC@@"
+
+#: src/gui/popupmenu.cpp:124 src/gui/popupmenu.cpp:140
+#: src/gui/popupmenu.cpp:293
+msgid "@@cancel|Cancel@@"
+msgstr "@@cancel|Batal@@"
+
+#: src/gui/popupmenu.cpp:136
+#, c-format
+msgid "@@pickup|Pick Up %s@@"
+msgstr "@@pickup|Ambil %s@@"
+
+#: src/gui/popupmenu.cpp:283
+#, fuzzy
+msgid "@@use|Unequip@@"
+msgstr "@@use|Melengkapi@@"
+
+#: src/gui/popupmenu.cpp:285
+msgid "@@use|Equip@@"
+msgstr "@@use|Melengkapi@@"
+
+#: src/gui/popupmenu.cpp:288
+msgid "@@use|Use@@"
+msgstr "@@use|Gunakan@@"
+
+#: src/gui/popupmenu.cpp:290
+msgid "@@drop|Drop@@"
+msgstr "@@drop|Buang@@"
+
+#: src/gui/popupmenu.cpp:291
+msgid "@@description|Description@@"
+msgstr "@@description|Deskripsi@@"
+
+#: src/gui/register.cpp:67
+msgid "Confirm:"
+msgstr "Konfirmasi:"
+
+#: src/gui/register.cpp:73
+msgid "Male"
+msgstr ""
+
+#: src/gui/register.cpp:74
+msgid "Female"
+msgstr ""
+
+#: src/gui/register.cpp:176
+#, c-format
+msgid "The username needs to be at least %d characters long."
+msgstr "Panjang username setidak-tidaknya %d karakter"
+
+#: src/gui/register.cpp:184
+#, c-format
+msgid "The username needs to be less than %d characters long."
+msgstr ""
+
+#: src/gui/register.cpp:192
+#, c-format
+msgid "The password needs to be at least %d characters long."
+msgstr "Panjang kata-sandi setidak-tidaknya %d karakter"
+
+#: src/gui/register.cpp:200
+#, c-format
+msgid "The password needs to be less than %d characters long."
+msgstr ""
+
+#: src/gui/register.cpp:207
+msgid "Passwords do not match."
+msgstr "Kata sandi tidak sama."
+
+#: src/gui/register.cpp:227 src/main.cpp:945
+msgid "Error"
+msgstr "Kesalahan"
+
+#: src/gui/setup_audio.cpp:40
+msgid "Sound"
+msgstr "Suara"
+
+#: src/gui/setup_audio.cpp:46
+msgid "Sfx volume"
+msgstr "Volume sfx"
+
+#: src/gui/setup_audio.cpp:47
+msgid "Music volume"
+msgstr "Volume Musik"
+
+#: src/gui/setup.cpp:58
+msgid "Apply"
+msgstr "Terapkan"
+
+#: src/gui/setup.cpp:58
+msgid "Reset Windows"
+msgstr ""
+
+#: src/gui/setup.cpp:79
+msgid "Video"
+msgstr "Video"
+
+#: src/gui/setup.cpp:83
+msgid "Audio"
+msgstr "Suara"
+
+#: src/gui/setup.cpp:87
+msgid "Joystick"
+msgstr ""
+
+#: src/gui/setup.cpp:91
+msgid "Keyboard"
+msgstr ""
+
+#: src/gui/setup.cpp:95
+msgid "Players"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:36 src/gui/setup_joystick.cpp:70
+msgid "Press the button to start calibration"
+msgstr "Tekan tombol untuk memulai kalibrasi"
+
+#: src/gui/setup_joystick.cpp:37 src/gui/setup_joystick.cpp:68
+msgid "Calibrate"
+msgstr "Kalibrasi"
+
+#: src/gui/setup_joystick.cpp:38
+msgid "Enable joystick"
+msgstr "Membolehkan joistik"
+
+#: src/gui/setup_joystick.cpp:73
+msgid "Stop"
+msgstr "Berhenti"
+
+#: src/gui/setup_joystick.cpp:74
+msgid "Rotate the stick"
+msgstr "Memutar tongkat"
+
+#: src/gui/setup_keyboard.cpp:88
+msgid "Assign"
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:94
+#, fuzzy
+msgid "Default"
+msgstr "Hapus"
+
+#: src/gui/setup_keyboard.cpp:115
+msgid "Key Conflict(s) Detected."
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:116
+msgid "Resolve them, or gameplay may result in strange behaviour."
+msgstr ""
+
+#: src/gui/setup_players.cpp:53
+#, fuzzy
+msgid "Name"
+msgstr "Nama:"
+
+#: src/gui/setup_players.cpp:54
+msgid "Relation"
+msgstr ""
+
+#: src/gui/setup_players.cpp:58
+msgid "Neutral"
+msgstr ""
+
+#: src/gui/setup_players.cpp:59
+msgid "Friend"
+msgstr ""
+
+#: src/gui/setup_players.cpp:60
+msgid "Disregarded"
+msgstr ""
+
+#: src/gui/setup_players.cpp:61
+msgid "Ignored"
+msgstr ""
+
+#: src/gui/setup_players.cpp:214
+msgid "Save player list"
+msgstr ""
+
+#: src/gui/setup_players.cpp:216
+msgid "Allow trading"
+msgstr ""
+
+#: src/gui/setup_players.cpp:218
+msgid "Allow whispers"
+msgstr ""
+
+#: src/gui/setup_players.cpp:245
+msgid "When ignoring:"
+msgstr ""
+
+#: src/gui/setup_video.cpp:112
+msgid "Full screen"
+msgstr "Layar penuh"
+
+#: src/gui/setup_video.cpp:113
+msgid "OpenGL"
+msgstr "OpenGL"
+
+#: src/gui/setup_video.cpp:114
+msgid "Custom cursor"
+msgstr ""
+
+#: src/gui/setup_video.cpp:116
+msgid "FPS Limit:"
+msgstr "Batas FPS"
+
+#: src/gui/setup_video.cpp:135
+msgid "Gui opacity"
+msgstr ""
+
+#: src/gui/setup_video.cpp:192
+msgid "Scroll radius"
+msgstr "Radius gulungan"
+
+#: src/gui/setup_video.cpp:200
+msgid "Scroll laziness"
+msgstr ""
+
+#: src/gui/setup_video.cpp:208
+msgid "Ambient FX"
+msgstr ""
+
+#: src/gui/setup_video.cpp:215 src/gui/setup_video.cpp:412
+msgid "off"
+msgstr "mati"
+
+#: src/gui/setup_video.cpp:218 src/gui/setup_video.cpp:234
+#: src/gui/setup_video.cpp:415 src/gui/setup_video.cpp:429
+msgid "low"
+msgstr "rendah"
+
+#: src/gui/setup_video.cpp:221 src/gui/setup_video.cpp:240
+#: src/gui/setup_video.cpp:418 src/gui/setup_video.cpp:435
+msgid "high"
+msgstr "tinggi"
+
+#: src/gui/setup_video.cpp:227
+msgid "Particle Detail"
+msgstr ""
+
+#: src/gui/setup_video.cpp:237 src/gui/setup_video.cpp:432
+msgid "medium"
+msgstr ""
+
+#: src/gui/setup_video.cpp:243 src/gui/setup_video.cpp:438
+msgid "max"
+msgstr ""
+
+#: src/gui/setup_video.cpp:309
+msgid "Switching to full screen"
+msgstr "Mengganti ke layar penuh"
+
+#: src/gui/setup_video.cpp:310
+msgid "Restart needed for changes to take effect."
+msgstr "Memulai dari awal di butuhkan untuk melihat efek"
+
+#: src/gui/setup_video.cpp:322
+msgid "Changing OpenGL"
+msgstr "Mengubah OpenGL"
+
+#: src/gui/setup_video.cpp:323
+msgid "Applying change to OpenGL requires restart."
+msgstr "Mendaftar perubahan ke OpenGL membutuhkan memulai dari awal"
+
+#: src/gui/skill.cpp:79
+msgid "Mystery Skill"
+msgstr ""
+
+#: src/gui/skill.cpp:132 src/gui/skill.cpp:188
+#, c-format
+msgid "Skill points: %d"
+msgstr ""
+
+#: src/gui/skill.cpp:133
+msgid "Up"
+msgstr ""
+
+#: src/gui/status.cpp:52 src/gui/status.cpp:235
+#, fuzzy, c-format
+msgid "Job: %d"
+msgstr "Tingkatan: %d"
+
+#: src/gui/status.cpp:53 src/gui/status.cpp:238
+#, fuzzy, c-format
+msgid "Money: %d GP"
+msgstr "Uang: %d"
+
+#: src/gui/status.cpp:127
+#, fuzzy
+msgid "Stats"
+msgstr "Status"
+
+#: src/gui/status.cpp:128
+msgid "Total"
+msgstr ""
+
+#: src/gui/status.cpp:129
+msgid "Cost"
+msgstr ""
+
+#: src/gui/status.cpp:132
+#, fuzzy
+msgid "Attack:"
+msgstr "Serangan %+d"
+
+#: src/gui/status.cpp:133
+#, fuzzy
+msgid "Defense:"
+msgstr "Pertahanan %+d"
+
+#: src/gui/status.cpp:134
+#, fuzzy
+msgid "M.Attack:"
+msgstr "Serangan %+d"
+
+#: src/gui/status.cpp:135
+#, fuzzy
+msgid "M.Defense:"
+msgstr "Pertahanan %+d"
+
+#: src/gui/status.cpp:136
+#, c-format
+msgid "% Accuracy:"
+msgstr ""
+
+#: src/gui/status.cpp:137
+#, c-format
+msgid "% Evade:"
+msgstr ""
+
+#: src/gui/status.cpp:138
+msgid "% Reflex:"
+msgstr ""
+
+#: src/gui/status.cpp:282
+#, fuzzy
+msgid "Strength"
+msgstr "Kekuatan"
+
+#: src/gui/status.cpp:283
+#, fuzzy
+msgid "Agility"
+msgstr "Daya/Tenaga Hidup"
+
+#: src/gui/status.cpp:284
+#, fuzzy
+msgid "Vitality"
+msgstr "Daya/Tenaga Hidup"
+
+#: src/gui/status.cpp:285
+#, fuzzy
+msgid "Intelligence"
+msgstr "Kecerdasan"
+
+#: src/gui/status.cpp:286
+#, fuzzy
+msgid "Dexterity"
+msgstr "Ketangkasan"
+
+#: src/gui/status.cpp:287
+msgid "Luck"
+msgstr ""
+
+#: src/gui/status.cpp:305
+#, c-format
+msgid "Remaining Status Points: %d"
+msgstr ""
+
+#: src/gui/trade.cpp:61
+msgid "Add"
+msgstr "Tambah"
+
+#: src/gui/trade.cpp:64
+msgid "Trade"
+msgstr ""
+
+#: src/gui/trade.cpp:80 src/gui/trade.cpp:156 src/gui/trade.cpp:204
+#, c-format
+msgid "You get %d GP."
+msgstr "Anda mendapatkan %d GP."
+
+#: src/gui/trade.cpp:81
+msgid "You give:"
+msgstr "Anda memberikan:"
+
+#: src/gui/trade.cpp:283
+msgid "Failed adding item. You can not overlap one kind of item on the window."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:93
+msgid "Updating..."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:119
+msgid "Play"
+msgstr ""
+
+#: src/gui/updatewindow.cpp:525
+msgid "Completed"
+msgstr ""
+
+#: src/resources/itemdb.cpp:99
+msgid "Unnamed"
+msgstr ""
+
+#: src/main.cpp:769
+msgid "Got disconnected from server!"
+msgstr ""
+
+#: src/main.cpp:956
+#, fuzzy
+msgid "Connecting to map server..."
+msgstr "Menyambung..."
+
+#: src/main.cpp:964
+msgid "Connecting to character server..."
+msgstr ""
+
+#: src/main.cpp:972
+msgid "Connecting to account server..."
+msgstr ""
+
+#~ msgid "Unregister"
+#~ msgstr "Tidak terdaftar"
+
+#~ msgid "Willpower:"
+#~ msgstr "Ketekunan"
+
+#~ msgid "Please distribute %d points"
+#~ msgstr "Tolong distribusikan %d point"
+
+#~ msgid "Your name needs to be at least 4 characters."
+#~ msgstr "Nama anda sekurang-kurangnya harus 4 karakter"
+
+#~ msgid "Character stats OK"
+#~ msgstr "Stats Karakter OK"
+
+#~ msgid "Please remove %d points"
+#~ msgstr "Tolong hilangkan %d point"
+
+#~ msgid "Split"
+#~ msgstr "Pecah"
+
+#~ msgid "Select amount of items to split."
+#~ msgstr "Pilih jumlah item yang mau di pisahkan"
+
+#~ msgid "@@split|Split@@"
+#~ msgstr "@@split|Pisah@@"
+
+#~ msgid "Switch server"
+#~ msgstr "Ganti Server"
+
+#~ msgid "Switch character"
+#~ msgstr "Ganti Karakter"
+
+#~ msgid "Email:"
+#~ msgstr "Email:"
+
+#~ msgid "Choose your Mana World Server"
+#~ msgstr "Pilih Server Mana World"
+
+#~ msgid "Port:"
+#~ msgstr "Port:"
+
+#~ msgid "Please type both the address and the port of a server."
+#~ msgstr "Tolong tulis address dan port dari server"
+
+#~ msgid "Propose trade"
+#~ msgstr "Menawarkan tukar menukar"
+
+#~ msgid "Confirm trade"
+#~ msgstr "Konfirmasi tukar menukar"
+
+#~ msgid "Change"
+#~ msgstr "Ubah"
+
+#~ msgid "HP %+d"
+#~ msgstr "HP %+d"
+
+#~ msgid "MP %+d"
+#~ msgstr "MP %+d"
+
+#~ msgid "Confirm"
+#~ msgstr "Konfirmasi"
+
+#~ msgid "Charisma:"
+#~ msgstr "Karisma"
+
+#~ msgid "Total Weight: %d - Maximum Weight: %d"
+#~ msgstr "Jumlah Berat: %d - Berat Maksimum: %d"
+
+#~ msgid "Keep"
+#~ msgstr "Pertahankan"
diff --git a/po/it.po b/po/it.po
new file mode 100644
index 00000000..a86caec2
--- /dev/null
+++ b/po/it.po
@@ -0,0 +1,987 @@
+# Italian translation of The Mana World.
+# Copyright (C) 2007 The Mana World Development Team
+# This file is distributed under the same license as the The Mana World package.
+# Eugenio Favalli <eugeniofavalli@gmail.com>, 2007.
+# , fuzzy
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: The Mana World 0.1.0\n"
+"Report-Msgid-Bugs-To: themanaworld-devel@lists.sourceforge.net\n"
+"POT-Creation-Date: 2009-01-08 22:10+0100\n"
+"PO-Revision-Date: 2007-12-03 01:45+0000\n"
+"Last-Translator: Bjørn Lindeijer <bjorn@lindeijer.nl>\n"
+"Language-Team: Italian\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-01-06 12:40+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#: src/gui/buy.cpp:43 src/gui/buy.cpp:61 src/gui/buysell.cpp:35
+msgid "Buy"
+msgstr "Compra"
+
+#: src/gui/buy.cpp:58 src/gui/buy.cpp:239 src/gui/sell.cpp:65
+#: src/gui/sell.cpp:259
+#, c-format
+msgid "Price: %d GP / Total: %d GP"
+msgstr "Prezzo: %d GP / Totale: %d GP"
+
+#: src/gui/buy.cpp:62 src/gui/sell.cpp:69
+msgid "Quit"
+msgstr "Esci"
+
+#: src/gui/buy.cpp:63 src/gui/buy.cpp:206 src/gui/buy.cpp:224
+#: src/gui/inventorywindow.cpp:150 src/gui/inventorywindow.cpp:160
+#: src/gui/sell.cpp:70 src/gui/sell.cpp:230 src/gui/sell.cpp:244
+#: src/gui/trade.cpp:94 src/gui/trade.cpp:266
+#, c-format
+msgid "Description: %s"
+msgstr "Descrizione : %s"
+
+#: src/gui/buy.cpp:64 src/gui/buy.cpp:208 src/gui/buy.cpp:225
+#: src/gui/inventorywindow.cpp:149 src/gui/inventorywindow.cpp:158
+#: src/gui/sell.cpp:71 src/gui/sell.cpp:232 src/gui/sell.cpp:245
+#, c-format
+msgid "Effect: %s"
+msgstr "Effetto : %s"
+
+#: src/gui/buysell.cpp:31
+#, fuzzy
+msgid "Shop"
+msgstr "Ferma"
+
+#: src/gui/buysell.cpp:35 src/gui/sell.cpp:48 src/gui/sell.cpp:68
+msgid "Sell"
+msgstr "Vendi"
+
+#: src/gui/buysell.cpp:35 src/gui/char_select.cpp:85
+#: src/gui/char_select.cpp:258 src/gui/char_server.cpp:60
+#: src/gui/connection.cpp:47 src/gui/item_amount.cpp:61 src/gui/login.cpp:52
+#: src/gui/npclistdialog.cpp:45 src/gui/register.cpp:76 src/gui/setup.cpp:58
+#: src/gui/trade.cpp:63 src/gui/updatewindow.cpp:118
+msgid "Cancel"
+msgstr "Cancella"
+
+#: src/gui/char_select.cpp:63
+msgid "Confirm Character Delete"
+msgstr ""
+
+#: src/gui/char_select.cpp:64
+msgid "Are you sure you want to delete this character?"
+msgstr "Sei sicuro di voler cancellare questo personaggio?"
+
+#: src/gui/char_select.cpp:81
+msgid "Select Character"
+msgstr "Scelta Personaggio"
+
+#: src/gui/char_select.cpp:84 src/gui/item_amount.cpp:60 src/gui/login.cpp:51
+#: src/gui/ok_dialog.cpp:37 src/gui/trade.cpp:62
+msgid "Ok"
+msgstr "Ok"
+
+#: src/gui/char_select.cpp:86
+msgid "New"
+msgstr "Nuovo"
+
+#: src/gui/char_select.cpp:87 src/gui/setup_players.cpp:220
+msgid "Delete"
+msgstr "Elimina"
+
+#: src/gui/char_select.cpp:88
+msgid "Previous"
+msgstr "Precedente"
+
+#: src/gui/char_select.cpp:89
+msgid "Next"
+msgstr "Prossimo"
+
+#: src/gui/char_select.cpp:91 src/gui/char_select.cpp:171
+#: src/gui/char_select.cpp:183 src/gui/inventorywindow.cpp:148
+#: src/gui/inventorywindow.cpp:156 src/gui/trade.cpp:92 src/gui/trade.cpp:264
+#, c-format
+msgid "Name: %s"
+msgstr "Nome : %s"
+
+#: src/gui/char_select.cpp:92 src/gui/char_select.cpp:172
+#: src/gui/char_select.cpp:184 src/gui/status.cpp:51 src/gui/status.cpp:232
+#, c-format
+msgid "Level: %d"
+msgstr "Livello: %d"
+
+#: src/gui/char_select.cpp:93 src/gui/char_select.cpp:173
+#: src/gui/char_select.cpp:185
+#, fuzzy, c-format
+msgid "Job Level: %d"
+msgstr "Livello: %d"
+
+#: src/gui/char_select.cpp:94 src/gui/char_select.cpp:186
+#, c-format
+msgid "Money: %d"
+msgstr "Monete: %d"
+
+#: src/gui/char_select.cpp:174
+#, c-format
+msgid "Gold: %d"
+msgstr ""
+
+#: src/gui/char_select.cpp:243
+msgid "Create Character"
+msgstr "Crea Personaggio"
+
+#: src/gui/char_select.cpp:250 src/gui/login.cpp:44 src/gui/register.cpp:65
+msgid "Name:"
+msgstr "Nome :"
+
+#: src/gui/char_select.cpp:253
+msgid "Hair Color:"
+msgstr "Colore Capelli"
+
+#: src/gui/char_select.cpp:256
+msgid "Hair Style:"
+msgstr "Stile Capelli:"
+
+#: src/gui/char_select.cpp:257
+msgid "Create"
+msgstr "Create"
+
+#: src/gui/char_server.cpp:52
+#, fuzzy
+msgid "Select Server"
+msgstr "Scelta Personaggio"
+
+#: src/gui/char_server.cpp:59 src/gui/npclistdialog.cpp:44
+#: src/gui/npc_text.cpp:46
+msgid "OK"
+msgstr ""
+
+#: src/gui/chat.cpp:122
+msgid "Global announcement:"
+msgstr ""
+
+#: src/gui/chat.cpp:125
+#, c-format
+msgid "Global announcement from %s:"
+msgstr ""
+
+#: src/gui/chat.cpp:140 src/gui/login.cpp:46 src/gui/register.cpp:68
+msgid "Server:"
+msgstr "Server:"
+
+#: src/gui/chat.cpp:146
+#, c-format
+msgid "%s whispers:"
+msgstr ""
+
+#: src/gui/chat.cpp:283
+#, c-format
+msgid "Whispering to %s: %s"
+msgstr ""
+
+#: src/gui/chat.cpp:356
+msgid "Unknown command"
+msgstr ""
+
+#: src/gui/chat.cpp:366
+msgid "Trade failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:369
+msgid "Emote failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:372
+msgid "Sit failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:375
+msgid "Chat creating failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:378
+msgid "Could not join party!"
+msgstr ""
+
+#: src/gui/chat.cpp:381
+msgid "Cannot shout!"
+msgstr ""
+
+#: src/gui/chat.cpp:389
+msgid "You have not yet reached a high enough lvl!"
+msgstr ""
+
+#: src/gui/chat.cpp:392
+msgid "Insufficient HP!"
+msgstr ""
+
+#: src/gui/chat.cpp:395
+msgid "Insufficient SP!"
+msgstr ""
+
+#: src/gui/chat.cpp:398
+msgid "You have no memos!"
+msgstr ""
+
+#: src/gui/chat.cpp:401
+msgid "You cannot do that right now!"
+msgstr ""
+
+#: src/gui/chat.cpp:404
+msgid "Seems you need more Zeny... ;-)"
+msgstr ""
+
+#: src/gui/chat.cpp:407
+msgid "You cannot use this skill with that kind of weapon!"
+msgstr ""
+
+#: src/gui/chat.cpp:410
+msgid "You need another red gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:413
+msgid "You need another blue gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:416
+msgid "You're carrying to much to do this!"
+msgstr ""
+
+#: src/gui/chat.cpp:419
+msgid "Huh? What's that?"
+msgstr ""
+
+#: src/gui/chat.cpp:425
+msgid "Warp failed..."
+msgstr ""
+
+#: src/gui/chat.cpp:428
+msgid "Could not steal anything..."
+msgstr ""
+
+#: src/gui/chat.cpp:431
+msgid "Poison had no effect..."
+msgstr ""
+
+#: src/gui/chat.cpp:496
+msgid "-- Help --"
+msgstr ""
+
+#: src/gui/chat.cpp:499
+msgid "/announce: Global announcement (GM only)"
+msgstr ""
+
+#: src/gui/chat.cpp:500
+msgid "/clear: Clears this window"
+msgstr ""
+
+#: src/gui/chat.cpp:501
+msgid "/help: Display this help"
+msgstr ""
+
+#: src/gui/chat.cpp:502
+msgid "/where: Display map name"
+msgstr ""
+
+#: src/gui/chat.cpp:503
+msgid "/whisper <nick> <message>: Sends a private <message> to <nick>"
+msgstr ""
+
+#: src/gui/chat.cpp:505
+msgid "/w <nick> <message>: Short form for /whisper"
+msgstr ""
+
+#: src/gui/chat.cpp:506
+msgid "/who: Display number of online users"
+msgstr ""
+
+#: src/gui/chat.cpp:507
+msgid "For more information, type /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:512
+msgid "Command: /announce <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:513
+msgid "*** only available to a GM ***"
+msgstr ""
+
+#: src/gui/chat.cpp:514
+msgid "This command sends the message <msg> to all players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:520
+msgid "Command: /clear"
+msgstr ""
+
+#: src/gui/chat.cpp:521
+msgid "This command clears the chat log of previous chat."
+msgstr ""
+
+#: src/gui/chat.cpp:527
+msgid "Command: /help"
+msgstr ""
+
+#: src/gui/chat.cpp:528
+msgid "This command displays a list of all commands available."
+msgstr ""
+
+#: src/gui/chat.cpp:530
+msgid "Command: /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:531
+msgid "This command displays help on <command>."
+msgstr ""
+
+#: src/gui/chat.cpp:536
+msgid "Command: /where"
+msgstr ""
+
+#: src/gui/chat.cpp:537
+msgid "This command displays the name of the current map."
+msgstr ""
+
+#: src/gui/chat.cpp:543
+msgid "Command: /whisper <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:544
+msgid "Command: /w <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:545
+msgid "This command sends the message <msg> to <nick>."
+msgstr ""
+
+#: src/gui/chat.cpp:547
+msgid "If the <nick> has spaces in it, enclose it in double quotes (\")."
+msgstr ""
+
+#: src/gui/chat.cpp:553
+msgid "Command: /who"
+msgstr ""
+
+#: src/gui/chat.cpp:554
+msgid "This command displays the number of players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:558
+msgid "Unknown command."
+msgstr ""
+
+#: src/gui/chat.cpp:559
+msgid "Type /help for a list of commands."
+msgstr ""
+
+#: src/gui/confirm_dialog.cpp:35
+msgid "Yes"
+msgstr "Si"
+
+#: src/gui/confirm_dialog.cpp:36
+msgid "No"
+msgstr "No"
+
+#: src/gui/connection.cpp:49 src/gui/updatewindow.cpp:116
+msgid "Connecting..."
+msgstr "Connessione..."
+
+#: src/gui/equipmentwindow.cpp:38 src/gui/menuwindow.cpp:62
+msgid "Equipment"
+msgstr "Equipaggiamento"
+
+#: src/gui/help.cpp:33
+msgid "Help"
+msgstr ""
+
+#: src/gui/help.cpp:41
+msgid "Close"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:46 src/gui/menuwindow.cpp:63
+msgid "Inventory"
+msgstr "Inventario"
+
+#: src/gui/inventorywindow.cpp:56 src/gui/inventorywindow.cpp:232
+#: src/gui/skill.cpp:134
+msgid "Use"
+msgstr "Usa"
+
+#: src/gui/inventorywindow.cpp:57
+msgid "Drop"
+msgstr "Lascia"
+
+#: src/gui/inventorywindow.cpp:99
+#, c-format
+msgid "Weight: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:104
+#, c-format
+msgid "Slots used: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:225
+msgid "Unequip"
+msgstr "Rimuovi"
+
+#: src/gui/inventorywindow.cpp:228
+msgid "Equip"
+msgstr "Equipaggia"
+
+#: src/gui/item_amount.cpp:76
+msgid "Select amount of items to trade."
+msgstr "Seleziona la quantità di oggetti da scambiare."
+
+#: src/gui/item_amount.cpp:80
+msgid "Select amount of items to drop."
+msgstr "Seleziona la quantità di oggetti da lasciare."
+
+#: src/gui/login.cpp:42
+msgid "Login"
+msgstr "Autenticazione"
+
+#: src/gui/login.cpp:45 src/gui/register.cpp:66
+msgid "Password:"
+msgstr "Password:"
+
+#: src/gui/login.cpp:50
+msgid "Remember Username"
+msgstr ""
+
+#: src/gui/login.cpp:53 src/gui/register.cpp:75
+msgid "Register"
+msgstr "Registra"
+
+#: src/gui/menuwindow.cpp:61
+msgid "Status"
+msgstr "Stato"
+
+#: src/gui/menuwindow.cpp:64 src/gui/skill.cpp:119
+msgid "Skills"
+msgstr "Abilità"
+
+#: src/gui/menuwindow.cpp:65
+msgid "Shortcut"
+msgstr "Scorciatoia"
+
+#: src/gui/menuwindow.cpp:66 src/main.cpp:716
+msgid "Setup"
+msgstr "Impostazioni"
+
+#: src/gui/minimap.cpp:34
+msgid "MiniMap"
+msgstr "Mini mappa"
+
+#: src/gui/npclistdialog.cpp:35 src/gui/npc_text.cpp:35
+msgid "NPC"
+msgstr "NPC"
+
+#: src/gui/popupmenu.cpp:81
+#, c-format
+msgid "@@trade|Trade With %s@@"
+msgstr "@@trade|Scambia Con %s@@"
+
+#: src/gui/popupmenu.cpp:83
+#, c-format
+msgid "@@attack|Attack %s@@"
+msgstr "@@attack|Attacca %s@@"
+
+#: src/gui/popupmenu.cpp:114
+msgid "@@talk|Talk To NPC@@"
+msgstr "@@talk|Parla con NPC@@"
+
+#: src/gui/popupmenu.cpp:124 src/gui/popupmenu.cpp:140
+#: src/gui/popupmenu.cpp:293
+msgid "@@cancel|Cancel@@"
+msgstr "@@cancel|Cancella@@"
+
+#: src/gui/popupmenu.cpp:136
+#, c-format
+msgid "@@pickup|Pick Up %s@@"
+msgstr "@@pickup|Raccogli %s@@"
+
+#: src/gui/popupmenu.cpp:283
+#, fuzzy
+msgid "@@use|Unequip@@"
+msgstr "@@use|Equipaggia@@"
+
+#: src/gui/popupmenu.cpp:285
+msgid "@@use|Equip@@"
+msgstr "@@use|Equipaggia@@"
+
+#: src/gui/popupmenu.cpp:288
+msgid "@@use|Use@@"
+msgstr "@@usa|Usa@@"
+
+#: src/gui/popupmenu.cpp:290
+msgid "@@drop|Drop@@"
+msgstr "@@drop|Lascia@@"
+
+#: src/gui/popupmenu.cpp:291
+msgid "@@description|Description@@"
+msgstr "@@description|Descrizione@@"
+
+#: src/gui/register.cpp:67
+msgid "Confirm:"
+msgstr "Conferma:"
+
+#: src/gui/register.cpp:73
+msgid "Male"
+msgstr ""
+
+#: src/gui/register.cpp:74
+msgid "Female"
+msgstr ""
+
+#: src/gui/register.cpp:176
+#, c-format
+msgid "The username needs to be at least %d characters long."
+msgstr "Il nome utente deve contenere almeno %d caratteri."
+
+#: src/gui/register.cpp:184
+#, c-format
+msgid "The username needs to be less than %d characters long."
+msgstr "Il nome utente deve avere meno di %d caratteri."
+
+#: src/gui/register.cpp:192
+#, c-format
+msgid "The password needs to be at least %d characters long."
+msgstr "La password deve essere lunga almeno %d caratteri."
+
+#: src/gui/register.cpp:200
+#, c-format
+msgid "The password needs to be less than %d characters long."
+msgstr "La password deve contenere meno di %d caratteri."
+
+#: src/gui/register.cpp:207
+msgid "Passwords do not match."
+msgstr "Le password non corrispondono."
+
+#: src/gui/register.cpp:227 src/main.cpp:945
+msgid "Error"
+msgstr "Errore"
+
+#: src/gui/setup_audio.cpp:40
+msgid "Sound"
+msgstr "Suono"
+
+#: src/gui/setup_audio.cpp:46
+msgid "Sfx volume"
+msgstr "Volume effetti sonori"
+
+#: src/gui/setup_audio.cpp:47
+msgid "Music volume"
+msgstr "Volume musica"
+
+#: src/gui/setup.cpp:58
+msgid "Apply"
+msgstr "Applica"
+
+#: src/gui/setup.cpp:58
+msgid "Reset Windows"
+msgstr "Resetta finestre"
+
+#: src/gui/setup.cpp:79
+msgid "Video"
+msgstr "Video"
+
+#: src/gui/setup.cpp:83
+msgid "Audio"
+msgstr "Audio"
+
+#: src/gui/setup.cpp:87
+msgid "Joystick"
+msgstr "Joystick"
+
+#: src/gui/setup.cpp:91
+msgid "Keyboard"
+msgstr ""
+
+#: src/gui/setup.cpp:95
+msgid "Players"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:36 src/gui/setup_joystick.cpp:70
+msgid "Press the button to start calibration"
+msgstr "Premi il pulsante per cominciare la calibrazione"
+
+#: src/gui/setup_joystick.cpp:37 src/gui/setup_joystick.cpp:68
+msgid "Calibrate"
+msgstr "Calibra"
+
+#: src/gui/setup_joystick.cpp:38
+msgid "Enable joystick"
+msgstr "Abilita joystick"
+
+#: src/gui/setup_joystick.cpp:73
+msgid "Stop"
+msgstr "Ferma"
+
+#: src/gui/setup_joystick.cpp:74
+msgid "Rotate the stick"
+msgstr "Ruota la manopola"
+
+#: src/gui/setup_keyboard.cpp:88
+msgid "Assign"
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:94
+#, fuzzy
+msgid "Default"
+msgstr "Elimina"
+
+#: src/gui/setup_keyboard.cpp:115
+msgid "Key Conflict(s) Detected."
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:116
+msgid "Resolve them, or gameplay may result in strange behaviour."
+msgstr ""
+
+#: src/gui/setup_players.cpp:53
+#, fuzzy
+msgid "Name"
+msgstr "Nome :"
+
+#: src/gui/setup_players.cpp:54
+msgid "Relation"
+msgstr ""
+
+#: src/gui/setup_players.cpp:58
+msgid "Neutral"
+msgstr ""
+
+#: src/gui/setup_players.cpp:59
+msgid "Friend"
+msgstr ""
+
+#: src/gui/setup_players.cpp:60
+msgid "Disregarded"
+msgstr ""
+
+#: src/gui/setup_players.cpp:61
+msgid "Ignored"
+msgstr ""
+
+#: src/gui/setup_players.cpp:214
+msgid "Save player list"
+msgstr ""
+
+#: src/gui/setup_players.cpp:216
+msgid "Allow trading"
+msgstr ""
+
+#: src/gui/setup_players.cpp:218
+msgid "Allow whispers"
+msgstr ""
+
+#: src/gui/setup_players.cpp:245
+msgid "When ignoring:"
+msgstr ""
+
+#: src/gui/setup_video.cpp:112
+msgid "Full screen"
+msgstr "Schermo intero"
+
+#: src/gui/setup_video.cpp:113
+msgid "OpenGL"
+msgstr "OpenGL"
+
+#: src/gui/setup_video.cpp:114
+msgid "Custom cursor"
+msgstr "Cursore personalizzato"
+
+#: src/gui/setup_video.cpp:116
+msgid "FPS Limit:"
+msgstr "Limita FPS:"
+
+#: src/gui/setup_video.cpp:135
+msgid "Gui opacity"
+msgstr "Opacità IU"
+
+#: src/gui/setup_video.cpp:192
+msgid "Scroll radius"
+msgstr "Raggio dello scroll"
+
+#: src/gui/setup_video.cpp:200
+msgid "Scroll laziness"
+msgstr "Lentezza dello scroll"
+
+#: src/gui/setup_video.cpp:208
+msgid "Ambient FX"
+msgstr "Suoni ambientali"
+
+#: src/gui/setup_video.cpp:215 src/gui/setup_video.cpp:412
+msgid "off"
+msgstr "Spento"
+
+#: src/gui/setup_video.cpp:218 src/gui/setup_video.cpp:234
+#: src/gui/setup_video.cpp:415 src/gui/setup_video.cpp:429
+msgid "low"
+msgstr "Basso"
+
+#: src/gui/setup_video.cpp:221 src/gui/setup_video.cpp:240
+#: src/gui/setup_video.cpp:418 src/gui/setup_video.cpp:435
+msgid "high"
+msgstr "Alto"
+
+#: src/gui/setup_video.cpp:227
+msgid "Particle Detail"
+msgstr ""
+
+#: src/gui/setup_video.cpp:237 src/gui/setup_video.cpp:432
+msgid "medium"
+msgstr ""
+
+#: src/gui/setup_video.cpp:243 src/gui/setup_video.cpp:438
+msgid "max"
+msgstr ""
+
+#: src/gui/setup_video.cpp:309
+msgid "Switching to full screen"
+msgstr "Modalità a schermo intero"
+
+#: src/gui/setup_video.cpp:310
+msgid "Restart needed for changes to take effect."
+msgstr "Riavvio necessario affinchè i cambiamenti abbiano effetto."
+
+#: src/gui/setup_video.cpp:322
+msgid "Changing OpenGL"
+msgstr "Modifica OpenGL"
+
+#: src/gui/setup_video.cpp:323
+msgid "Applying change to OpenGL requires restart."
+msgstr "Applicare le modifiche ad OpenGL richiede il riavvio."
+
+#: src/gui/skill.cpp:79
+msgid "Mystery Skill"
+msgstr ""
+
+#: src/gui/skill.cpp:132 src/gui/skill.cpp:188
+#, c-format
+msgid "Skill points: %d"
+msgstr ""
+
+#: src/gui/skill.cpp:133
+msgid "Up"
+msgstr ""
+
+#: src/gui/status.cpp:52 src/gui/status.cpp:235
+#, fuzzy, c-format
+msgid "Job: %d"
+msgstr "Livello: %d"
+
+#: src/gui/status.cpp:53 src/gui/status.cpp:238
+#, fuzzy, c-format
+msgid "Money: %d GP"
+msgstr "Monete: %d"
+
+#: src/gui/status.cpp:127
+#, fuzzy
+msgid "Stats"
+msgstr "Stato"
+
+#: src/gui/status.cpp:128
+msgid "Total"
+msgstr ""
+
+#: src/gui/status.cpp:129
+msgid "Cost"
+msgstr ""
+
+#: src/gui/status.cpp:132
+#, fuzzy
+msgid "Attack:"
+msgstr "Attacco %+d"
+
+#: src/gui/status.cpp:133
+#, fuzzy
+msgid "Defense:"
+msgstr "Difesa %+d"
+
+#: src/gui/status.cpp:134
+#, fuzzy
+msgid "M.Attack:"
+msgstr "Attacco %+d"
+
+#: src/gui/status.cpp:135
+#, fuzzy
+msgid "M.Defense:"
+msgstr "Difesa %+d"
+
+#: src/gui/status.cpp:136
+#, c-format
+msgid "% Accuracy:"
+msgstr ""
+
+#: src/gui/status.cpp:137
+#, c-format
+msgid "% Evade:"
+msgstr ""
+
+#: src/gui/status.cpp:138
+msgid "% Reflex:"
+msgstr ""
+
+#: src/gui/status.cpp:282
+#, fuzzy
+msgid "Strength"
+msgstr "Forza:"
+
+#: src/gui/status.cpp:283
+#, fuzzy
+msgid "Agility"
+msgstr "Agilità:"
+
+#: src/gui/status.cpp:284
+#, fuzzy
+msgid "Vitality"
+msgstr "Vitalità:"
+
+#: src/gui/status.cpp:285
+#, fuzzy
+msgid "Intelligence"
+msgstr "Intelligenza:"
+
+#: src/gui/status.cpp:286
+#, fuzzy
+msgid "Dexterity"
+msgstr "Destrezza:"
+
+#: src/gui/status.cpp:287
+msgid "Luck"
+msgstr ""
+
+#: src/gui/status.cpp:305
+#, c-format
+msgid "Remaining Status Points: %d"
+msgstr ""
+
+#: src/gui/trade.cpp:61
+msgid "Add"
+msgstr "Aggiungi"
+
+#: src/gui/trade.cpp:64
+msgid "Trade"
+msgstr ""
+
+#: src/gui/trade.cpp:80 src/gui/trade.cpp:156 src/gui/trade.cpp:204
+#, c-format
+msgid "You get %d GP."
+msgstr "Ottieni %d GP."
+
+#: src/gui/trade.cpp:81
+msgid "You give:"
+msgstr "Dai:"
+
+#: src/gui/trade.cpp:283
+msgid "Failed adding item. You can not overlap one kind of item on the window."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:93
+msgid "Updating..."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:119
+msgid "Play"
+msgstr ""
+
+#: src/gui/updatewindow.cpp:525
+msgid "Completed"
+msgstr ""
+
+#: src/resources/itemdb.cpp:99
+msgid "Unnamed"
+msgstr ""
+
+#: src/main.cpp:769
+msgid "Got disconnected from server!"
+msgstr ""
+
+#: src/main.cpp:956
+#, fuzzy
+msgid "Connecting to map server..."
+msgstr "Connessione..."
+
+#: src/main.cpp:964
+msgid "Connecting to character server..."
+msgstr ""
+
+#: src/main.cpp:972
+msgid "Connecting to account server..."
+msgstr ""
+
+#~ msgid "Unregister"
+#~ msgstr "Cancella registrazione"
+
+#~ msgid "Willpower:"
+#~ msgstr "Volontà:"
+
+#~ msgid "Please distribute %d points"
+#~ msgstr "Prego distribuisci %d points"
+
+#~ msgid "Your name needs to be at least 4 characters."
+#~ msgstr "Il tuo nome deve contenere almeno 4 caratteri."
+
+#~ msgid "Character stats OK"
+#~ msgstr "Statistiche personaggio OK"
+
+#~ msgid "Please remove %d points"
+#~ msgstr "Prego rimuovi %d punti"
+
+#~ msgid "Split"
+#~ msgstr "Lascia"
+
+#~ msgid "Select amount of items to split."
+#~ msgstr "Seleziona la quantità di oggetti da lasciare."
+
+#~ msgid "@@split|Split@@"
+#~ msgstr "@@split|Lascia@@"
+
+#~ msgid "Switch server"
+#~ msgstr "Cambia server"
+
+#~ msgid "Switch character"
+#~ msgstr "Cambia personaggio"
+
+#~ msgid "Email:"
+#~ msgstr "Email:"
+
+#~ msgid "Choose your Mana World Server"
+#~ msgstr "Scegli il tuo server Mana World"
+
+#~ msgid "Port:"
+#~ msgstr "Porta:"
+
+#~ msgid "Please type both the address and the port of a server."
+#~ msgstr "Per favore inserisci l'indirizzo e la porta del server."
+
+#~ msgid "Propose trade"
+#~ msgstr "Inizia uno scambio"
+
+#~ msgid "Confirm trade"
+#~ msgstr "Conferma scambio"
+
+#~ msgid "Change"
+#~ msgstr "Cambia"
+
+#~ msgid "HP %+d"
+#~ msgstr "PF %+d"
+
+#~ msgid "MP %+d"
+#~ msgstr "PM %+d"
+
+#~ msgid "Confirm"
+#~ msgstr "Conferma"
+
+#~ msgid "Charisma:"
+#~ msgstr "Carisma:"
+
+#~ msgid "Total Weight: %d - Maximum Weight: %d"
+#~ msgstr "Peso totale : %d - Peso massimo : %d"
+
+#~ msgid "Keep"
+#~ msgstr "Mantieni"
diff --git a/po/ja.po b/po/ja.po
new file mode 100644
index 00000000..bd629cd2
--- /dev/null
+++ b/po/ja.po
@@ -0,0 +1,932 @@
+# Japanese translation for tmw
+# Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008
+# This file is distributed under the same license as the tmw package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: tmw\n"
+"Report-Msgid-Bugs-To: themanaworld-devel@lists.sourceforge.net\n"
+"POT-Creation-Date: 2009-01-08 22:10+0100\n"
+"PO-Revision-Date: 2008-06-28 16:27+0000\n"
+"Last-Translator: fate <Unknown>\n"
+"Language-Team: Japanese <ja@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-01-06 12:40+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#: src/gui/buy.cpp:43 src/gui/buy.cpp:61 src/gui/buysell.cpp:35
+msgid "Buy"
+msgstr "è²·ã†"
+
+#: src/gui/buy.cpp:58 src/gui/buy.cpp:239 src/gui/sell.cpp:65
+#: src/gui/sell.cpp:259
+#, c-format
+msgid "Price: %d GP / Total: %d GP"
+msgstr "価格: %d GP / åˆè¨ˆ: %d GP"
+
+#: src/gui/buy.cpp:62 src/gui/sell.cpp:69
+msgid "Quit"
+msgstr "終了"
+
+#: src/gui/buy.cpp:63 src/gui/buy.cpp:206 src/gui/buy.cpp:224
+#: src/gui/inventorywindow.cpp:150 src/gui/inventorywindow.cpp:160
+#: src/gui/sell.cpp:70 src/gui/sell.cpp:230 src/gui/sell.cpp:244
+#: src/gui/trade.cpp:94 src/gui/trade.cpp:266
+#, c-format
+msgid "Description: %s"
+msgstr "å状: %s"
+
+#: src/gui/buy.cpp:64 src/gui/buy.cpp:208 src/gui/buy.cpp:225
+#: src/gui/inventorywindow.cpp:149 src/gui/inventorywindow.cpp:158
+#: src/gui/sell.cpp:71 src/gui/sell.cpp:232 src/gui/sell.cpp:245
+#, c-format
+msgid "Effect: %s"
+msgstr "効用: %s"
+
+#: src/gui/buysell.cpp:31
+msgid "Shop"
+msgstr ""
+
+#: src/gui/buysell.cpp:35 src/gui/sell.cpp:48 src/gui/sell.cpp:68
+msgid "Sell"
+msgstr ""
+
+#: src/gui/buysell.cpp:35 src/gui/char_select.cpp:85
+#: src/gui/char_select.cpp:258 src/gui/char_server.cpp:60
+#: src/gui/connection.cpp:47 src/gui/item_amount.cpp:61 src/gui/login.cpp:52
+#: src/gui/npclistdialog.cpp:45 src/gui/register.cpp:76 src/gui/setup.cpp:58
+#: src/gui/trade.cpp:63 src/gui/updatewindow.cpp:118
+msgid "Cancel"
+msgstr "å–消"
+
+#: src/gui/char_select.cpp:63
+msgid "Confirm Character Delete"
+msgstr ""
+
+#: src/gui/char_select.cpp:64
+msgid "Are you sure you want to delete this character?"
+msgstr "ã“ã®ã‚­ãƒ£ãƒ©ã¯æ¶ˆã—ã¦ã‚‚ã„ã„ã§ã™ã‹?"
+
+#: src/gui/char_select.cpp:81
+msgid "Select Character"
+msgstr "キャラをé¸æŠž"
+
+#: src/gui/char_select.cpp:84 src/gui/item_amount.cpp:60 src/gui/login.cpp:51
+#: src/gui/ok_dialog.cpp:37 src/gui/trade.cpp:62
+msgid "Ok"
+msgstr "了解"
+
+#: src/gui/char_select.cpp:86
+msgid "New"
+msgstr "æ–°è¦"
+
+#: src/gui/char_select.cpp:87 src/gui/setup_players.cpp:220
+msgid "Delete"
+msgstr "削除"
+
+#: src/gui/char_select.cpp:88
+msgid "Previous"
+msgstr "å‰ã¸"
+
+#: src/gui/char_select.cpp:89
+msgid "Next"
+msgstr "次ã¸"
+
+#: src/gui/char_select.cpp:91 src/gui/char_select.cpp:171
+#: src/gui/char_select.cpp:183 src/gui/inventorywindow.cpp:148
+#: src/gui/inventorywindow.cpp:156 src/gui/trade.cpp:92 src/gui/trade.cpp:264
+#, c-format
+msgid "Name: %s"
+msgstr "åå‰: %s"
+
+#: src/gui/char_select.cpp:92 src/gui/char_select.cpp:172
+#: src/gui/char_select.cpp:184 src/gui/status.cpp:51 src/gui/status.cpp:232
+#, c-format
+msgid "Level: %d"
+msgstr "レベル: %d"
+
+#: src/gui/char_select.cpp:93 src/gui/char_select.cpp:173
+#: src/gui/char_select.cpp:185
+#, fuzzy, c-format
+msgid "Job Level: %d"
+msgstr "レベル: %d"
+
+#: src/gui/char_select.cpp:94 src/gui/char_select.cpp:186
+#, c-format
+msgid "Money: %d"
+msgstr "GP: %d"
+
+#: src/gui/char_select.cpp:174
+#, c-format
+msgid "Gold: %d"
+msgstr ""
+
+#: src/gui/char_select.cpp:243
+msgid "Create Character"
+msgstr "キャラを作æˆ"
+
+#: src/gui/char_select.cpp:250 src/gui/login.cpp:44 src/gui/register.cpp:65
+msgid "Name:"
+msgstr "åå‰:"
+
+#: src/gui/char_select.cpp:253
+msgid "Hair Color:"
+msgstr "髪ã®è‰²ï¼š"
+
+#: src/gui/char_select.cpp:256
+msgid "Hair Style:"
+msgstr "髪型:"
+
+#: src/gui/char_select.cpp:257
+msgid "Create"
+msgstr "作æˆ"
+
+#: src/gui/char_server.cpp:52
+#, fuzzy
+msgid "Select Server"
+msgstr "キャラをé¸æŠž"
+
+#: src/gui/char_server.cpp:59 src/gui/npclistdialog.cpp:44
+#: src/gui/npc_text.cpp:46
+msgid "OK"
+msgstr ""
+
+#: src/gui/chat.cpp:122
+msgid "Global announcement:"
+msgstr ""
+
+#: src/gui/chat.cpp:125
+#, c-format
+msgid "Global announcement from %s:"
+msgstr ""
+
+#: src/gui/chat.cpp:140 src/gui/login.cpp:46 src/gui/register.cpp:68
+msgid "Server:"
+msgstr "サーãƒ:"
+
+#: src/gui/chat.cpp:146
+#, c-format
+msgid "%s whispers:"
+msgstr ""
+
+#: src/gui/chat.cpp:283
+#, c-format
+msgid "Whispering to %s: %s"
+msgstr ""
+
+#: src/gui/chat.cpp:356
+msgid "Unknown command"
+msgstr ""
+
+#: src/gui/chat.cpp:366
+msgid "Trade failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:369
+msgid "Emote failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:372
+msgid "Sit failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:375
+msgid "Chat creating failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:378
+msgid "Could not join party!"
+msgstr ""
+
+#: src/gui/chat.cpp:381
+msgid "Cannot shout!"
+msgstr ""
+
+#: src/gui/chat.cpp:389
+msgid "You have not yet reached a high enough lvl!"
+msgstr ""
+
+#: src/gui/chat.cpp:392
+msgid "Insufficient HP!"
+msgstr ""
+
+#: src/gui/chat.cpp:395
+msgid "Insufficient SP!"
+msgstr ""
+
+#: src/gui/chat.cpp:398
+msgid "You have no memos!"
+msgstr ""
+
+#: src/gui/chat.cpp:401
+msgid "You cannot do that right now!"
+msgstr ""
+
+#: src/gui/chat.cpp:404
+msgid "Seems you need more Zeny... ;-)"
+msgstr ""
+
+#: src/gui/chat.cpp:407
+msgid "You cannot use this skill with that kind of weapon!"
+msgstr ""
+
+#: src/gui/chat.cpp:410
+msgid "You need another red gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:413
+msgid "You need another blue gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:416
+msgid "You're carrying to much to do this!"
+msgstr ""
+
+#: src/gui/chat.cpp:419
+msgid "Huh? What's that?"
+msgstr ""
+
+#: src/gui/chat.cpp:425
+msgid "Warp failed..."
+msgstr ""
+
+#: src/gui/chat.cpp:428
+msgid "Could not steal anything..."
+msgstr ""
+
+#: src/gui/chat.cpp:431
+msgid "Poison had no effect..."
+msgstr ""
+
+#: src/gui/chat.cpp:496
+msgid "-- Help --"
+msgstr ""
+
+#: src/gui/chat.cpp:499
+msgid "/announce: Global announcement (GM only)"
+msgstr ""
+
+#: src/gui/chat.cpp:500
+msgid "/clear: Clears this window"
+msgstr ""
+
+#: src/gui/chat.cpp:501
+msgid "/help: Display this help"
+msgstr ""
+
+#: src/gui/chat.cpp:502
+msgid "/where: Display map name"
+msgstr ""
+
+#: src/gui/chat.cpp:503
+msgid "/whisper <nick> <message>: Sends a private <message> to <nick>"
+msgstr ""
+
+#: src/gui/chat.cpp:505
+msgid "/w <nick> <message>: Short form for /whisper"
+msgstr ""
+
+#: src/gui/chat.cpp:506
+msgid "/who: Display number of online users"
+msgstr ""
+
+#: src/gui/chat.cpp:507
+msgid "For more information, type /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:512
+msgid "Command: /announce <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:513
+msgid "*** only available to a GM ***"
+msgstr ""
+
+#: src/gui/chat.cpp:514
+msgid "This command sends the message <msg> to all players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:520
+msgid "Command: /clear"
+msgstr ""
+
+#: src/gui/chat.cpp:521
+msgid "This command clears the chat log of previous chat."
+msgstr ""
+
+#: src/gui/chat.cpp:527
+msgid "Command: /help"
+msgstr ""
+
+#: src/gui/chat.cpp:528
+msgid "This command displays a list of all commands available."
+msgstr ""
+
+#: src/gui/chat.cpp:530
+msgid "Command: /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:531
+msgid "This command displays help on <command>."
+msgstr ""
+
+#: src/gui/chat.cpp:536
+msgid "Command: /where"
+msgstr ""
+
+#: src/gui/chat.cpp:537
+msgid "This command displays the name of the current map."
+msgstr ""
+
+#: src/gui/chat.cpp:543
+msgid "Command: /whisper <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:544
+msgid "Command: /w <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:545
+msgid "This command sends the message <msg> to <nick>."
+msgstr ""
+
+#: src/gui/chat.cpp:547
+msgid "If the <nick> has spaces in it, enclose it in double quotes (\")."
+msgstr ""
+
+#: src/gui/chat.cpp:553
+msgid "Command: /who"
+msgstr ""
+
+#: src/gui/chat.cpp:554
+msgid "This command displays the number of players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:558
+msgid "Unknown command."
+msgstr ""
+
+#: src/gui/chat.cpp:559
+msgid "Type /help for a list of commands."
+msgstr ""
+
+#: src/gui/confirm_dialog.cpp:35
+msgid "Yes"
+msgstr "ã¯ã„"
+
+#: src/gui/confirm_dialog.cpp:36
+msgid "No"
+msgstr "ã„ã„ãˆ"
+
+#: src/gui/connection.cpp:49 src/gui/updatewindow.cpp:116
+msgid "Connecting..."
+msgstr "接続ã—ã¦ã„ã¾ã™..."
+
+#: src/gui/equipmentwindow.cpp:38 src/gui/menuwindow.cpp:62
+msgid "Equipment"
+msgstr ""
+
+#: src/gui/help.cpp:33
+msgid "Help"
+msgstr ""
+
+#: src/gui/help.cpp:41
+msgid "Close"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:46 src/gui/menuwindow.cpp:63
+msgid "Inventory"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:56 src/gui/inventorywindow.cpp:232
+#: src/gui/skill.cpp:134
+msgid "Use"
+msgstr "使ã†"
+
+#: src/gui/inventorywindow.cpp:57
+msgid "Drop"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:99
+#, c-format
+msgid "Weight: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:104
+#, c-format
+msgid "Slots used: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:225
+msgid "Unequip"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:228
+msgid "Equip"
+msgstr ""
+
+#: src/gui/item_amount.cpp:76
+msgid "Select amount of items to trade."
+msgstr ""
+
+#: src/gui/item_amount.cpp:80
+msgid "Select amount of items to drop."
+msgstr ""
+
+#: src/gui/login.cpp:42
+msgid "Login"
+msgstr "ログイン"
+
+#: src/gui/login.cpp:45 src/gui/register.cpp:66
+msgid "Password:"
+msgstr "パスワード:"
+
+#: src/gui/login.cpp:50
+msgid "Remember Username"
+msgstr ""
+
+#: src/gui/login.cpp:53 src/gui/register.cpp:75
+msgid "Register"
+msgstr ""
+
+#: src/gui/menuwindow.cpp:61
+msgid "Status"
+msgstr "状態"
+
+#: src/gui/menuwindow.cpp:64 src/gui/skill.cpp:119
+msgid "Skills"
+msgstr ""
+
+#: src/gui/menuwindow.cpp:65
+msgid "Shortcut"
+msgstr ""
+
+#: src/gui/menuwindow.cpp:66 src/main.cpp:716
+msgid "Setup"
+msgstr "セットアップ"
+
+#: src/gui/minimap.cpp:34
+msgid "MiniMap"
+msgstr ""
+
+#: src/gui/npclistdialog.cpp:35 src/gui/npc_text.cpp:35
+msgid "NPC"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:81
+#, c-format
+msgid "@@trade|Trade With %s@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:83
+#, c-format
+msgid "@@attack|Attack %s@@"
+msgstr "@@attack|%sを攻撃ã™ã‚‹@@"
+
+#: src/gui/popupmenu.cpp:114
+msgid "@@talk|Talk To NPC@@"
+msgstr "@@talk|NPCã‚’å–‹ã‚‹@@"
+
+#: src/gui/popupmenu.cpp:124 src/gui/popupmenu.cpp:140
+#: src/gui/popupmenu.cpp:293
+msgid "@@cancel|Cancel@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:136
+#, c-format
+msgid "@@pickup|Pick Up %s@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:283
+#, fuzzy
+msgid "@@use|Unequip@@"
+msgstr "@@use|使ã†@@"
+
+#: src/gui/popupmenu.cpp:285
+msgid "@@use|Equip@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:288
+msgid "@@use|Use@@"
+msgstr "@@use|使ã†@@"
+
+#: src/gui/popupmenu.cpp:290
+msgid "@@drop|Drop@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:291
+msgid "@@description|Description@@"
+msgstr ""
+
+#: src/gui/register.cpp:67
+msgid "Confirm:"
+msgstr ""
+
+#: src/gui/register.cpp:73
+msgid "Male"
+msgstr ""
+
+#: src/gui/register.cpp:74
+msgid "Female"
+msgstr ""
+
+#: src/gui/register.cpp:176
+#, c-format
+msgid "The username needs to be at least %d characters long."
+msgstr ""
+
+#: src/gui/register.cpp:184
+#, c-format
+msgid "The username needs to be less than %d characters long."
+msgstr ""
+
+#: src/gui/register.cpp:192
+#, c-format
+msgid "The password needs to be at least %d characters long."
+msgstr ""
+
+#: src/gui/register.cpp:200
+#, c-format
+msgid "The password needs to be less than %d characters long."
+msgstr ""
+
+#: src/gui/register.cpp:207
+msgid "Passwords do not match."
+msgstr "パスワードãŒä¸€è‡´ã—ã¦ã„ã¾ã›ã‚“。"
+
+#: src/gui/register.cpp:227 src/main.cpp:945
+msgid "Error"
+msgstr "エラー"
+
+#: src/gui/setup_audio.cpp:40
+msgid "Sound"
+msgstr ""
+
+#: src/gui/setup_audio.cpp:46
+msgid "Sfx volume"
+msgstr ""
+
+#: src/gui/setup_audio.cpp:47
+msgid "Music volume"
+msgstr ""
+
+#: src/gui/setup.cpp:58
+msgid "Apply"
+msgstr ""
+
+#: src/gui/setup.cpp:58
+msgid "Reset Windows"
+msgstr ""
+
+#: src/gui/setup.cpp:79
+msgid "Video"
+msgstr ""
+
+#: src/gui/setup.cpp:83
+msgid "Audio"
+msgstr "音声"
+
+#: src/gui/setup.cpp:87
+msgid "Joystick"
+msgstr ""
+
+#: src/gui/setup.cpp:91
+msgid "Keyboard"
+msgstr ""
+
+#: src/gui/setup.cpp:95
+msgid "Players"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:36 src/gui/setup_joystick.cpp:70
+msgid "Press the button to start calibration"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:37 src/gui/setup_joystick.cpp:68
+msgid "Calibrate"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:38
+msgid "Enable joystick"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:73
+msgid "Stop"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:74
+msgid "Rotate the stick"
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:88
+msgid "Assign"
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:94
+#, fuzzy
+msgid "Default"
+msgstr "削除"
+
+#: src/gui/setup_keyboard.cpp:115
+msgid "Key Conflict(s) Detected."
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:116
+msgid "Resolve them, or gameplay may result in strange behaviour."
+msgstr ""
+
+#: src/gui/setup_players.cpp:53
+#, fuzzy
+msgid "Name"
+msgstr "åå‰:"
+
+#: src/gui/setup_players.cpp:54
+msgid "Relation"
+msgstr ""
+
+#: src/gui/setup_players.cpp:58
+msgid "Neutral"
+msgstr ""
+
+#: src/gui/setup_players.cpp:59
+msgid "Friend"
+msgstr ""
+
+#: src/gui/setup_players.cpp:60
+msgid "Disregarded"
+msgstr ""
+
+#: src/gui/setup_players.cpp:61
+msgid "Ignored"
+msgstr ""
+
+#: src/gui/setup_players.cpp:214
+msgid "Save player list"
+msgstr ""
+
+#: src/gui/setup_players.cpp:216
+msgid "Allow trading"
+msgstr ""
+
+#: src/gui/setup_players.cpp:218
+msgid "Allow whispers"
+msgstr ""
+
+#: src/gui/setup_players.cpp:245
+msgid "When ignoring:"
+msgstr ""
+
+#: src/gui/setup_video.cpp:112
+msgid "Full screen"
+msgstr ""
+
+#: src/gui/setup_video.cpp:113
+msgid "OpenGL"
+msgstr ""
+
+#: src/gui/setup_video.cpp:114
+msgid "Custom cursor"
+msgstr ""
+
+#: src/gui/setup_video.cpp:116
+msgid "FPS Limit:"
+msgstr ""
+
+#: src/gui/setup_video.cpp:135
+msgid "Gui opacity"
+msgstr ""
+
+#: src/gui/setup_video.cpp:192
+msgid "Scroll radius"
+msgstr ""
+
+#: src/gui/setup_video.cpp:200
+msgid "Scroll laziness"
+msgstr ""
+
+#: src/gui/setup_video.cpp:208
+msgid "Ambient FX"
+msgstr ""
+
+#: src/gui/setup_video.cpp:215 src/gui/setup_video.cpp:412
+msgid "off"
+msgstr ""
+
+#: src/gui/setup_video.cpp:218 src/gui/setup_video.cpp:234
+#: src/gui/setup_video.cpp:415 src/gui/setup_video.cpp:429
+msgid "low"
+msgstr ""
+
+#: src/gui/setup_video.cpp:221 src/gui/setup_video.cpp:240
+#: src/gui/setup_video.cpp:418 src/gui/setup_video.cpp:435
+msgid "high"
+msgstr ""
+
+#: src/gui/setup_video.cpp:227
+msgid "Particle Detail"
+msgstr ""
+
+#: src/gui/setup_video.cpp:237 src/gui/setup_video.cpp:432
+msgid "medium"
+msgstr ""
+
+#: src/gui/setup_video.cpp:243 src/gui/setup_video.cpp:438
+msgid "max"
+msgstr ""
+
+#: src/gui/setup_video.cpp:309
+msgid "Switching to full screen"
+msgstr ""
+
+#: src/gui/setup_video.cpp:310
+msgid "Restart needed for changes to take effect."
+msgstr ""
+
+#: src/gui/setup_video.cpp:322
+msgid "Changing OpenGL"
+msgstr ""
+
+#: src/gui/setup_video.cpp:323
+msgid "Applying change to OpenGL requires restart."
+msgstr ""
+
+#: src/gui/skill.cpp:79
+msgid "Mystery Skill"
+msgstr ""
+
+#: src/gui/skill.cpp:132 src/gui/skill.cpp:188
+#, c-format
+msgid "Skill points: %d"
+msgstr ""
+
+#: src/gui/skill.cpp:133
+msgid "Up"
+msgstr ""
+
+#: src/gui/status.cpp:52 src/gui/status.cpp:235
+#, fuzzy, c-format
+msgid "Job: %d"
+msgstr "レベル: %d"
+
+#: src/gui/status.cpp:53 src/gui/status.cpp:238
+#, fuzzy, c-format
+msgid "Money: %d GP"
+msgstr "GP: %d"
+
+#: src/gui/status.cpp:127
+#, fuzzy
+msgid "Stats"
+msgstr "状態"
+
+#: src/gui/status.cpp:128
+msgid "Total"
+msgstr ""
+
+#: src/gui/status.cpp:129
+msgid "Cost"
+msgstr ""
+
+#: src/gui/status.cpp:132
+msgid "Attack:"
+msgstr ""
+
+#: src/gui/status.cpp:133
+msgid "Defense:"
+msgstr ""
+
+#: src/gui/status.cpp:134
+msgid "M.Attack:"
+msgstr ""
+
+#: src/gui/status.cpp:135
+msgid "M.Defense:"
+msgstr ""
+
+#: src/gui/status.cpp:136
+#, c-format
+msgid "% Accuracy:"
+msgstr ""
+
+#: src/gui/status.cpp:137
+#, c-format
+msgid "% Evade:"
+msgstr ""
+
+#: src/gui/status.cpp:138
+msgid "% Reflex:"
+msgstr ""
+
+#: src/gui/status.cpp:282
+#, fuzzy
+msgid "Strength"
+msgstr "筋力:"
+
+#: src/gui/status.cpp:283
+#, fuzzy
+msgid "Agility"
+msgstr "ç´ æ—©ã•:"
+
+#: src/gui/status.cpp:284
+#, fuzzy
+msgid "Vitality"
+msgstr "体力:"
+
+#: src/gui/status.cpp:285
+#, fuzzy
+msgid "Intelligence"
+msgstr "知性:"
+
+#: src/gui/status.cpp:286
+#, fuzzy
+msgid "Dexterity"
+msgstr "æ•æ·:"
+
+#: src/gui/status.cpp:287
+msgid "Luck"
+msgstr ""
+
+#: src/gui/status.cpp:305
+#, c-format
+msgid "Remaining Status Points: %d"
+msgstr ""
+
+#: src/gui/trade.cpp:61
+msgid "Add"
+msgstr ""
+
+#: src/gui/trade.cpp:64
+msgid "Trade"
+msgstr ""
+
+#: src/gui/trade.cpp:80 src/gui/trade.cpp:156 src/gui/trade.cpp:204
+#, c-format
+msgid "You get %d GP."
+msgstr ""
+
+#: src/gui/trade.cpp:81
+msgid "You give:"
+msgstr ""
+
+#: src/gui/trade.cpp:283
+msgid "Failed adding item. You can not overlap one kind of item on the window."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:93
+msgid "Updating..."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:119
+msgid "Play"
+msgstr ""
+
+#: src/gui/updatewindow.cpp:525
+msgid "Completed"
+msgstr ""
+
+#: src/resources/itemdb.cpp:99
+msgid "Unnamed"
+msgstr ""
+
+#: src/main.cpp:769
+msgid "Got disconnected from server!"
+msgstr ""
+
+#: src/main.cpp:956
+#, fuzzy
+msgid "Connecting to map server..."
+msgstr "接続ã—ã¦ã„ã¾ã™..."
+
+#: src/main.cpp:964
+msgid "Connecting to character server..."
+msgstr ""
+
+#: src/main.cpp:972
+msgid "Connecting to account server..."
+msgstr ""
+
+#~ msgid "Unregister"
+#~ msgstr "登録削除"
+
+#~ msgid "Willpower:"
+#~ msgstr "精神:"
+
+#~ msgid "Please distribute %d points"
+#~ msgstr "%d ãƒã‚¤ãƒ³ãƒˆã‚’å–り分ã‘ãã ã•ã„"
+
+#~ msgid "Split"
+#~ msgstr "分割"
+
+#~ msgid "Email:"
+#~ msgstr "Eメール:"
+
+#~ msgid "Port:"
+#~ msgstr "ãƒãƒ¼ãƒˆ:"
+
+#~ msgid "Confirm"
+#~ msgstr "確èª"
+
+#~ msgid "Charisma:"
+#~ msgstr "魅力:"
diff --git a/po/nl.po b/po/nl.po
new file mode 100644
index 00000000..c2700ada
--- /dev/null
+++ b/po/nl.po
@@ -0,0 +1,957 @@
+# Dutch translation of The Mana World.
+# Copyright (c) 2007 The Mana World Development Team
+# This file is distributed under the same license as the The Mana World package.
+# Bjørn Lindeijer <bjorn@lindeijer.nl>, 2007.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: The Mana World 0.1.0\n"
+"Report-Msgid-Bugs-To: themanaworld-devel@lists.sourceforge.net\n"
+"POT-Creation-Date: 2009-01-08 22:10+0100\n"
+"PO-Revision-Date: 2008-10-10 00:04+0000\n"
+"Last-Translator: Bjørn Lindeijer <bjorn@lindeijer.nl>\n"
+"Language-Team: Dutch\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-01-06 12:40+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#: src/gui/buy.cpp:43 src/gui/buy.cpp:61 src/gui/buysell.cpp:35
+msgid "Buy"
+msgstr "Kopen"
+
+#: src/gui/buy.cpp:58 src/gui/buy.cpp:239 src/gui/sell.cpp:65
+#: src/gui/sell.cpp:259
+#, c-format
+msgid "Price: %d GP / Total: %d GP"
+msgstr ""
+
+#: src/gui/buy.cpp:62 src/gui/sell.cpp:69
+msgid "Quit"
+msgstr "Afsluiten"
+
+#: src/gui/buy.cpp:63 src/gui/buy.cpp:206 src/gui/buy.cpp:224
+#: src/gui/inventorywindow.cpp:150 src/gui/inventorywindow.cpp:160
+#: src/gui/sell.cpp:70 src/gui/sell.cpp:230 src/gui/sell.cpp:244
+#: src/gui/trade.cpp:94 src/gui/trade.cpp:266
+#, c-format
+msgid "Description: %s"
+msgstr "Beschrijving: %s"
+
+#: src/gui/buy.cpp:64 src/gui/buy.cpp:208 src/gui/buy.cpp:225
+#: src/gui/inventorywindow.cpp:149 src/gui/inventorywindow.cpp:158
+#: src/gui/sell.cpp:71 src/gui/sell.cpp:232 src/gui/sell.cpp:245
+#, c-format
+msgid "Effect: %s"
+msgstr "Effect: %s"
+
+#: src/gui/buysell.cpp:31
+#, fuzzy
+msgid "Shop"
+msgstr "Stoppen"
+
+#: src/gui/buysell.cpp:35 src/gui/sell.cpp:48 src/gui/sell.cpp:68
+msgid "Sell"
+msgstr ""
+
+#: src/gui/buysell.cpp:35 src/gui/char_select.cpp:85
+#: src/gui/char_select.cpp:258 src/gui/char_server.cpp:60
+#: src/gui/connection.cpp:47 src/gui/item_amount.cpp:61 src/gui/login.cpp:52
+#: src/gui/npclistdialog.cpp:45 src/gui/register.cpp:76 src/gui/setup.cpp:58
+#: src/gui/trade.cpp:63 src/gui/updatewindow.cpp:118
+msgid "Cancel"
+msgstr "Annuleren"
+
+#: src/gui/char_select.cpp:63
+msgid "Confirm Character Delete"
+msgstr ""
+
+#: src/gui/char_select.cpp:64
+msgid "Are you sure you want to delete this character?"
+msgstr "Weet je zeker dat je deze personage wilt verwijderen?"
+
+#: src/gui/char_select.cpp:81
+msgid "Select Character"
+msgstr "Kies Personage"
+
+#: src/gui/char_select.cpp:84 src/gui/item_amount.cpp:60 src/gui/login.cpp:51
+#: src/gui/ok_dialog.cpp:37 src/gui/trade.cpp:62
+msgid "Ok"
+msgstr "Oké"
+
+#: src/gui/char_select.cpp:86
+msgid "New"
+msgstr "Nieuw"
+
+#: src/gui/char_select.cpp:87 src/gui/setup_players.cpp:220
+msgid "Delete"
+msgstr "Verwijderen"
+
+#: src/gui/char_select.cpp:88
+msgid "Previous"
+msgstr "Vorige"
+
+#: src/gui/char_select.cpp:89
+msgid "Next"
+msgstr "Volgende"
+
+#: src/gui/char_select.cpp:91 src/gui/char_select.cpp:171
+#: src/gui/char_select.cpp:183 src/gui/inventorywindow.cpp:148
+#: src/gui/inventorywindow.cpp:156 src/gui/trade.cpp:92 src/gui/trade.cpp:264
+#, c-format
+msgid "Name: %s"
+msgstr "Naam: %s"
+
+#: src/gui/char_select.cpp:92 src/gui/char_select.cpp:172
+#: src/gui/char_select.cpp:184 src/gui/status.cpp:51 src/gui/status.cpp:232
+#, c-format
+msgid "Level: %d"
+msgstr "Level: %d"
+
+#: src/gui/char_select.cpp:93 src/gui/char_select.cpp:173
+#: src/gui/char_select.cpp:185
+#, fuzzy, c-format
+msgid "Job Level: %d"
+msgstr "Level: %d"
+
+#: src/gui/char_select.cpp:94 src/gui/char_select.cpp:186
+#, c-format
+msgid "Money: %d"
+msgstr "Geld: %d"
+
+#: src/gui/char_select.cpp:174
+#, c-format
+msgid "Gold: %d"
+msgstr ""
+
+#: src/gui/char_select.cpp:243
+msgid "Create Character"
+msgstr "Personage Aanmaken"
+
+#: src/gui/char_select.cpp:250 src/gui/login.cpp:44 src/gui/register.cpp:65
+msgid "Name:"
+msgstr "Naam:"
+
+#: src/gui/char_select.cpp:253
+msgid "Hair Color:"
+msgstr "Haarkleur:"
+
+#: src/gui/char_select.cpp:256
+msgid "Hair Style:"
+msgstr "Haarstijl:"
+
+#: src/gui/char_select.cpp:257
+msgid "Create"
+msgstr "Aanmaken"
+
+#: src/gui/char_server.cpp:52
+#, fuzzy
+msgid "Select Server"
+msgstr "Kies Personage"
+
+#: src/gui/char_server.cpp:59 src/gui/npclistdialog.cpp:44
+#: src/gui/npc_text.cpp:46
+msgid "OK"
+msgstr ""
+
+#: src/gui/chat.cpp:122
+msgid "Global announcement:"
+msgstr ""
+
+#: src/gui/chat.cpp:125
+#, c-format
+msgid "Global announcement from %s:"
+msgstr ""
+
+#: src/gui/chat.cpp:140 src/gui/login.cpp:46 src/gui/register.cpp:68
+msgid "Server:"
+msgstr "Server:"
+
+#: src/gui/chat.cpp:146
+#, c-format
+msgid "%s whispers:"
+msgstr ""
+
+#: src/gui/chat.cpp:283
+#, c-format
+msgid "Whispering to %s: %s"
+msgstr ""
+
+#: src/gui/chat.cpp:356
+msgid "Unknown command"
+msgstr ""
+
+#: src/gui/chat.cpp:366
+msgid "Trade failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:369
+msgid "Emote failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:372
+msgid "Sit failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:375
+msgid "Chat creating failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:378
+msgid "Could not join party!"
+msgstr ""
+
+#: src/gui/chat.cpp:381
+msgid "Cannot shout!"
+msgstr ""
+
+#: src/gui/chat.cpp:389
+msgid "You have not yet reached a high enough lvl!"
+msgstr ""
+
+#: src/gui/chat.cpp:392
+msgid "Insufficient HP!"
+msgstr ""
+
+#: src/gui/chat.cpp:395
+msgid "Insufficient SP!"
+msgstr ""
+
+#: src/gui/chat.cpp:398
+msgid "You have no memos!"
+msgstr ""
+
+#: src/gui/chat.cpp:401
+msgid "You cannot do that right now!"
+msgstr ""
+
+#: src/gui/chat.cpp:404
+msgid "Seems you need more Zeny... ;-)"
+msgstr ""
+
+#: src/gui/chat.cpp:407
+msgid "You cannot use this skill with that kind of weapon!"
+msgstr ""
+
+#: src/gui/chat.cpp:410
+msgid "You need another red gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:413
+msgid "You need another blue gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:416
+msgid "You're carrying to much to do this!"
+msgstr ""
+
+#: src/gui/chat.cpp:419
+msgid "Huh? What's that?"
+msgstr ""
+
+#: src/gui/chat.cpp:425
+msgid "Warp failed..."
+msgstr ""
+
+#: src/gui/chat.cpp:428
+msgid "Could not steal anything..."
+msgstr ""
+
+#: src/gui/chat.cpp:431
+msgid "Poison had no effect..."
+msgstr ""
+
+#: src/gui/chat.cpp:496
+msgid "-- Help --"
+msgstr ""
+
+#: src/gui/chat.cpp:499
+msgid "/announce: Global announcement (GM only)"
+msgstr ""
+
+#: src/gui/chat.cpp:500
+msgid "/clear: Clears this window"
+msgstr ""
+
+#: src/gui/chat.cpp:501
+msgid "/help: Display this help"
+msgstr ""
+
+#: src/gui/chat.cpp:502
+msgid "/where: Display map name"
+msgstr ""
+
+#: src/gui/chat.cpp:503
+msgid "/whisper <nick> <message>: Sends a private <message> to <nick>"
+msgstr ""
+
+#: src/gui/chat.cpp:505
+msgid "/w <nick> <message>: Short form for /whisper"
+msgstr ""
+
+#: src/gui/chat.cpp:506
+msgid "/who: Display number of online users"
+msgstr ""
+
+#: src/gui/chat.cpp:507
+msgid "For more information, type /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:512
+msgid "Command: /announce <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:513
+msgid "*** only available to a GM ***"
+msgstr ""
+
+#: src/gui/chat.cpp:514
+msgid "This command sends the message <msg> to all players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:520
+msgid "Command: /clear"
+msgstr ""
+
+#: src/gui/chat.cpp:521
+msgid "This command clears the chat log of previous chat."
+msgstr ""
+
+#: src/gui/chat.cpp:527
+msgid "Command: /help"
+msgstr ""
+
+#: src/gui/chat.cpp:528
+msgid "This command displays a list of all commands available."
+msgstr ""
+
+#: src/gui/chat.cpp:530
+msgid "Command: /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:531
+msgid "This command displays help on <command>."
+msgstr ""
+
+#: src/gui/chat.cpp:536
+msgid "Command: /where"
+msgstr ""
+
+#: src/gui/chat.cpp:537
+msgid "This command displays the name of the current map."
+msgstr ""
+
+#: src/gui/chat.cpp:543
+msgid "Command: /whisper <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:544
+msgid "Command: /w <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:545
+msgid "This command sends the message <msg> to <nick>."
+msgstr ""
+
+#: src/gui/chat.cpp:547
+msgid "If the <nick> has spaces in it, enclose it in double quotes (\")."
+msgstr ""
+
+#: src/gui/chat.cpp:553
+msgid "Command: /who"
+msgstr ""
+
+#: src/gui/chat.cpp:554
+msgid "This command displays the number of players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:558
+msgid "Unknown command."
+msgstr ""
+
+#: src/gui/chat.cpp:559
+msgid "Type /help for a list of commands."
+msgstr ""
+
+#: src/gui/confirm_dialog.cpp:35
+msgid "Yes"
+msgstr "Ja"
+
+#: src/gui/confirm_dialog.cpp:36
+msgid "No"
+msgstr "Nee"
+
+#: src/gui/connection.cpp:49 src/gui/updatewindow.cpp:116
+msgid "Connecting..."
+msgstr "Verbinden..."
+
+#: src/gui/equipmentwindow.cpp:38 src/gui/menuwindow.cpp:62
+msgid "Equipment"
+msgstr "Uitrusting"
+
+#: src/gui/help.cpp:33
+msgid "Help"
+msgstr ""
+
+#: src/gui/help.cpp:41
+msgid "Close"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:46 src/gui/menuwindow.cpp:63
+msgid "Inventory"
+msgstr "Inventaris"
+
+#: src/gui/inventorywindow.cpp:56 src/gui/inventorywindow.cpp:232
+#: src/gui/skill.cpp:134
+msgid "Use"
+msgstr "Gebruiken"
+
+#: src/gui/inventorywindow.cpp:57
+msgid "Drop"
+msgstr "Neerleggen"
+
+#: src/gui/inventorywindow.cpp:99
+#, c-format
+msgid "Weight: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:104
+#, c-format
+msgid "Slots used: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:225
+msgid "Unequip"
+msgstr "Afdoen"
+
+#: src/gui/inventorywindow.cpp:228
+msgid "Equip"
+msgstr "Uitrusten"
+
+#: src/gui/item_amount.cpp:76
+msgid "Select amount of items to trade."
+msgstr "Selecteer het aantal exemplaren om te verhandelen"
+
+#: src/gui/item_amount.cpp:80
+msgid "Select amount of items to drop."
+msgstr "Selecteer het aantal exemplaren om neer te leggen"
+
+#: src/gui/login.cpp:42
+msgid "Login"
+msgstr "Inloggen"
+
+#: src/gui/login.cpp:45 src/gui/register.cpp:66
+msgid "Password:"
+msgstr "Wachtword:"
+
+#: src/gui/login.cpp:50
+msgid "Remember Username"
+msgstr ""
+
+#: src/gui/login.cpp:53 src/gui/register.cpp:75
+msgid "Register"
+msgstr "Aanmelden"
+
+#: src/gui/menuwindow.cpp:61
+msgid "Status"
+msgstr "Status"
+
+#: src/gui/menuwindow.cpp:64 src/gui/skill.cpp:119
+msgid "Skills"
+msgstr "Vaardigheden"
+
+#: src/gui/menuwindow.cpp:65
+msgid "Shortcut"
+msgstr ""
+
+#: src/gui/menuwindow.cpp:66 src/main.cpp:716
+msgid "Setup"
+msgstr "Configureren"
+
+#: src/gui/minimap.cpp:34
+msgid "MiniMap"
+msgstr "Kaartje"
+
+#: src/gui/npclistdialog.cpp:35 src/gui/npc_text.cpp:35
+msgid "NPC"
+msgstr "NPC"
+
+#: src/gui/popupmenu.cpp:81
+#, c-format
+msgid "@@trade|Trade With %s@@"
+msgstr "@@trade|Handelen met %s@@"
+
+#: src/gui/popupmenu.cpp:83
+#, c-format
+msgid "@@attack|Attack %s@@"
+msgstr "@@attack|%s aanvallen@@"
+
+#: src/gui/popupmenu.cpp:114
+msgid "@@talk|Talk To NPC@@"
+msgstr "@@talk|Praat met NPC@@"
+
+#: src/gui/popupmenu.cpp:124 src/gui/popupmenu.cpp:140
+#: src/gui/popupmenu.cpp:293
+msgid "@@cancel|Cancel@@"
+msgstr "@@cancel|Annuleren@@"
+
+#: src/gui/popupmenu.cpp:136
+#, c-format
+msgid "@@pickup|Pick Up %s@@"
+msgstr "@@pickup|%s oppakken@@"
+
+#: src/gui/popupmenu.cpp:283
+#, fuzzy
+msgid "@@use|Unequip@@"
+msgstr "@@use|Uitrusten@@"
+
+#: src/gui/popupmenu.cpp:285
+msgid "@@use|Equip@@"
+msgstr "@@use|Uitrusten@@"
+
+#: src/gui/popupmenu.cpp:288
+msgid "@@use|Use@@"
+msgstr "@@use|Gebruiken@@"
+
+#: src/gui/popupmenu.cpp:290
+msgid "@@drop|Drop@@"
+msgstr "@@drop|Neerleggen@@"
+
+#: src/gui/popupmenu.cpp:291
+msgid "@@description|Description@@"
+msgstr "@@description|Beschrijving@@"
+
+#: src/gui/register.cpp:67
+msgid "Confirm:"
+msgstr "Bevestigen:"
+
+#: src/gui/register.cpp:73
+msgid "Male"
+msgstr ""
+
+#: src/gui/register.cpp:74
+msgid "Female"
+msgstr ""
+
+#: src/gui/register.cpp:176
+#, c-format
+msgid "The username needs to be at least %d characters long."
+msgstr "De gebruikersnaam moet uit ten minste %d tekens bestaan."
+
+#: src/gui/register.cpp:184
+#, c-format
+msgid "The username needs to be less than %d characters long."
+msgstr "De gebruikersnaam moet uit minder dan %d tekens bestaan."
+
+#: src/gui/register.cpp:192
+#, c-format
+msgid "The password needs to be at least %d characters long."
+msgstr "Het wachtwoord moet uit ten minste %d tekens bestaan."
+
+#: src/gui/register.cpp:200
+#, c-format
+msgid "The password needs to be less than %d characters long."
+msgstr "Het wachtwoord moet uit minder dan %d tekens bestaan."
+
+#: src/gui/register.cpp:207
+msgid "Passwords do not match."
+msgstr "Wachtwoorden komen niet overeen."
+
+#: src/gui/register.cpp:227 src/main.cpp:945
+msgid "Error"
+msgstr "Fout"
+
+#: src/gui/setup_audio.cpp:40
+msgid "Sound"
+msgstr "Geluid"
+
+#: src/gui/setup_audio.cpp:46
+msgid "Sfx volume"
+msgstr "Volume van geluiden"
+
+#: src/gui/setup_audio.cpp:47
+msgid "Music volume"
+msgstr "Muziek volume"
+
+#: src/gui/setup.cpp:58
+msgid "Apply"
+msgstr "Toepassen"
+
+#: src/gui/setup.cpp:58
+msgid "Reset Windows"
+msgstr "Vensters in beginstand"
+
+#: src/gui/setup.cpp:79
+msgid "Video"
+msgstr "Video"
+
+#: src/gui/setup.cpp:83
+msgid "Audio"
+msgstr "Audio"
+
+#: src/gui/setup.cpp:87
+msgid "Joystick"
+msgstr "Joystick"
+
+#: src/gui/setup.cpp:91
+msgid "Keyboard"
+msgstr ""
+
+#: src/gui/setup.cpp:95
+msgid "Players"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:36 src/gui/setup_joystick.cpp:70
+msgid "Press the button to start calibration"
+msgstr "Druk op de knop om het kalibreren te starten"
+
+#: src/gui/setup_joystick.cpp:37 src/gui/setup_joystick.cpp:68
+msgid "Calibrate"
+msgstr "Kalibreren"
+
+#: src/gui/setup_joystick.cpp:38
+msgid "Enable joystick"
+msgstr "Joystick activeren"
+
+#: src/gui/setup_joystick.cpp:73
+msgid "Stop"
+msgstr "Stoppen"
+
+#: src/gui/setup_joystick.cpp:74
+msgid "Rotate the stick"
+msgstr "Maak rondjes met de stick"
+
+#: src/gui/setup_keyboard.cpp:88
+msgid "Assign"
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:94
+#, fuzzy
+msgid "Default"
+msgstr "Verwijderen"
+
+#: src/gui/setup_keyboard.cpp:115
+msgid "Key Conflict(s) Detected."
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:116
+msgid "Resolve them, or gameplay may result in strange behaviour."
+msgstr ""
+
+#: src/gui/setup_players.cpp:53
+#, fuzzy
+msgid "Name"
+msgstr "Naam:"
+
+#: src/gui/setup_players.cpp:54
+msgid "Relation"
+msgstr ""
+
+#: src/gui/setup_players.cpp:58
+msgid "Neutral"
+msgstr ""
+
+#: src/gui/setup_players.cpp:59
+msgid "Friend"
+msgstr ""
+
+#: src/gui/setup_players.cpp:60
+msgid "Disregarded"
+msgstr ""
+
+#: src/gui/setup_players.cpp:61
+msgid "Ignored"
+msgstr ""
+
+#: src/gui/setup_players.cpp:214
+msgid "Save player list"
+msgstr ""
+
+#: src/gui/setup_players.cpp:216
+msgid "Allow trading"
+msgstr ""
+
+#: src/gui/setup_players.cpp:218
+msgid "Allow whispers"
+msgstr ""
+
+#: src/gui/setup_players.cpp:245
+msgid "When ignoring:"
+msgstr ""
+
+#: src/gui/setup_video.cpp:112
+msgid "Full screen"
+msgstr "Volledig scherm"
+
+#: src/gui/setup_video.cpp:113
+msgid "OpenGL"
+msgstr "OpenGL"
+
+#: src/gui/setup_video.cpp:114
+msgid "Custom cursor"
+msgstr "Aangepaste cursor"
+
+#: src/gui/setup_video.cpp:116
+msgid "FPS Limit:"
+msgstr "FPS limiet:"
+
+#: src/gui/setup_video.cpp:135
+msgid "Gui opacity"
+msgstr "Dekking van de GUI"
+
+#: src/gui/setup_video.cpp:192
+msgid "Scroll radius"
+msgstr "Scroll radius"
+
+#: src/gui/setup_video.cpp:200
+msgid "Scroll laziness"
+msgstr "Scroll vertraging"
+
+#: src/gui/setup_video.cpp:208
+msgid "Ambient FX"
+msgstr "Omgevingseffecten"
+
+#: src/gui/setup_video.cpp:215 src/gui/setup_video.cpp:412
+msgid "off"
+msgstr "uit"
+
+#: src/gui/setup_video.cpp:218 src/gui/setup_video.cpp:234
+#: src/gui/setup_video.cpp:415 src/gui/setup_video.cpp:429
+msgid "low"
+msgstr "laag"
+
+#: src/gui/setup_video.cpp:221 src/gui/setup_video.cpp:240
+#: src/gui/setup_video.cpp:418 src/gui/setup_video.cpp:435
+msgid "high"
+msgstr "hoog"
+
+#: src/gui/setup_video.cpp:227
+msgid "Particle Detail"
+msgstr ""
+
+#: src/gui/setup_video.cpp:237 src/gui/setup_video.cpp:432
+msgid "medium"
+msgstr ""
+
+#: src/gui/setup_video.cpp:243 src/gui/setup_video.cpp:438
+msgid "max"
+msgstr ""
+
+#: src/gui/setup_video.cpp:309
+msgid "Switching to full screen"
+msgstr "Overgaan naar volledig scherm"
+
+#: src/gui/setup_video.cpp:310
+msgid "Restart needed for changes to take effect."
+msgstr "De veranderingen worden pas actief na opnieuw opstarten"
+
+#: src/gui/setup_video.cpp:322
+msgid "Changing OpenGL"
+msgstr "Veranderen van OpenGL"
+
+#: src/gui/setup_video.cpp:323
+msgid "Applying change to OpenGL requires restart."
+msgstr "Het wisselen van of naar OpenGL wordt pas actief na opnieuw opstarten"
+
+#: src/gui/skill.cpp:79
+msgid "Mystery Skill"
+msgstr ""
+
+#: src/gui/skill.cpp:132 src/gui/skill.cpp:188
+#, c-format
+msgid "Skill points: %d"
+msgstr ""
+
+#: src/gui/skill.cpp:133
+msgid "Up"
+msgstr ""
+
+#: src/gui/status.cpp:52 src/gui/status.cpp:235
+#, fuzzy, c-format
+msgid "Job: %d"
+msgstr "Level: %d"
+
+#: src/gui/status.cpp:53 src/gui/status.cpp:238
+#, fuzzy, c-format
+msgid "Money: %d GP"
+msgstr "Geld: %d"
+
+#: src/gui/status.cpp:127
+#, fuzzy
+msgid "Stats"
+msgstr "Status"
+
+#: src/gui/status.cpp:128
+msgid "Total"
+msgstr ""
+
+#: src/gui/status.cpp:129
+msgid "Cost"
+msgstr ""
+
+#: src/gui/status.cpp:132
+msgid "Attack:"
+msgstr ""
+
+#: src/gui/status.cpp:133
+msgid "Defense:"
+msgstr ""
+
+#: src/gui/status.cpp:134
+msgid "M.Attack:"
+msgstr ""
+
+#: src/gui/status.cpp:135
+msgid "M.Defense:"
+msgstr ""
+
+#: src/gui/status.cpp:136
+#, c-format
+msgid "% Accuracy:"
+msgstr ""
+
+#: src/gui/status.cpp:137
+#, c-format
+msgid "% Evade:"
+msgstr ""
+
+#: src/gui/status.cpp:138
+msgid "% Reflex:"
+msgstr ""
+
+#: src/gui/status.cpp:282
+#, fuzzy
+msgid "Strength"
+msgstr "Sterkte:"
+
+#: src/gui/status.cpp:283
+#, fuzzy
+msgid "Agility"
+msgstr "Agiliteit:"
+
+#: src/gui/status.cpp:284
+#, fuzzy
+msgid "Vitality"
+msgstr "Vitaliteit:"
+
+#: src/gui/status.cpp:285
+#, fuzzy
+msgid "Intelligence"
+msgstr "Intelligentie:"
+
+#: src/gui/status.cpp:286
+#, fuzzy
+msgid "Dexterity"
+msgstr "Dexteriteit:"
+
+#: src/gui/status.cpp:287
+msgid "Luck"
+msgstr ""
+
+#: src/gui/status.cpp:305
+#, c-format
+msgid "Remaining Status Points: %d"
+msgstr ""
+
+#: src/gui/trade.cpp:61
+msgid "Add"
+msgstr ""
+
+#: src/gui/trade.cpp:64
+msgid "Trade"
+msgstr ""
+
+#: src/gui/trade.cpp:80 src/gui/trade.cpp:156 src/gui/trade.cpp:204
+#, c-format
+msgid "You get %d GP."
+msgstr ""
+
+#: src/gui/trade.cpp:81
+msgid "You give:"
+msgstr "Je geeft:"
+
+#: src/gui/trade.cpp:283
+msgid "Failed adding item. You can not overlap one kind of item on the window."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:93
+msgid "Updating..."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:119
+msgid "Play"
+msgstr ""
+
+#: src/gui/updatewindow.cpp:525
+msgid "Completed"
+msgstr ""
+
+#: src/resources/itemdb.cpp:99
+msgid "Unnamed"
+msgstr ""
+
+#: src/main.cpp:769
+msgid "Got disconnected from server!"
+msgstr ""
+
+#: src/main.cpp:956
+#, fuzzy
+msgid "Connecting to map server..."
+msgstr "Verbinden..."
+
+#: src/main.cpp:964
+msgid "Connecting to character server..."
+msgstr ""
+
+#: src/main.cpp:972
+msgid "Connecting to account server..."
+msgstr ""
+
+#~ msgid "Unregister"
+#~ msgstr "Registreren"
+
+#~ msgid "Willpower:"
+#~ msgstr "Wilskracht:"
+
+#~ msgid "Please distribute %d points"
+#~ msgstr "Nog %d punten te verdelen"
+
+#~ msgid "Your name needs to be at least 4 characters."
+#~ msgstr "Je naam moet uit tenminste 4 tekens bestaan"
+
+#~ msgid "Character stats OK"
+#~ msgstr "Attributen van personage OK"
+
+#~ msgid "Please remove %d points"
+#~ msgstr "Verwijder alstublieft %d punten"
+
+#~ msgid "Split"
+#~ msgstr "Splitsen"
+
+#~ msgid "Switch server"
+#~ msgstr "Van server wisselen"
+
+#~ msgid "Switch character"
+#~ msgstr "Van personage wisselen"
+
+#~ msgid "Email:"
+#~ msgstr "E-mail:"
+
+#~ msgid "Choose your Mana World Server"
+#~ msgstr "Kies uw Mana World server"
+
+#~ msgid "Port:"
+#~ msgstr "Poort:"
+
+#~ msgid "Confirm"
+#~ msgstr "Bevestigen"
+
+#~ msgid "Charisma:"
+#~ msgstr "Charisma:"
+
+#~ msgid "Total Weight: %d - Maximum Weight: %d"
+#~ msgstr "Totaal gewicht: %d - Maximum gewicht: %d"
+
+#~ msgid "Keep"
+#~ msgstr "Behouden"
diff --git a/po/pl.po b/po/pl.po
new file mode 100644
index 00000000..46cee40e
--- /dev/null
+++ b/po/pl.po
@@ -0,0 +1,991 @@
+# Polish translation of The Mana World.
+# Copyright (C) 2007 The Mana World Development Team
+# This file is distributed under the same license as the The Mana World package.
+# Mateusz Jedrasik <m.jedrasik@gmail.com>, 2007.
+# Zuzanna K. Filutowska <platyna@platinum.linux.pl>, 2007.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: The Mana World 0.1.0\n"
+"Report-Msgid-Bugs-To: themanaworld-devel@lists.sourceforge.net\n"
+"POT-Creation-Date: 2009-01-08 22:10+0100\n"
+"PO-Revision-Date: 2008-10-10 05:26+0000\n"
+"Last-Translator: Michał Trzebiatowski <Unknown>\n"
+"Language-Team: <pl@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-01-06 12:40+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#: src/gui/buy.cpp:43 src/gui/buy.cpp:61 src/gui/buysell.cpp:35
+msgid "Buy"
+msgstr "Kup"
+
+#: src/gui/buy.cpp:58 src/gui/buy.cpp:239 src/gui/sell.cpp:65
+#: src/gui/sell.cpp:259
+#, c-format
+msgid "Price: %d GP / Total: %d GP"
+msgstr "Cena: %d GP / Razem: %d GP"
+
+#: src/gui/buy.cpp:62 src/gui/sell.cpp:69
+msgid "Quit"
+msgstr "Wyjdź"
+
+#: src/gui/buy.cpp:63 src/gui/buy.cpp:206 src/gui/buy.cpp:224
+#: src/gui/inventorywindow.cpp:150 src/gui/inventorywindow.cpp:160
+#: src/gui/sell.cpp:70 src/gui/sell.cpp:230 src/gui/sell.cpp:244
+#: src/gui/trade.cpp:94 src/gui/trade.cpp:266
+#, c-format
+msgid "Description: %s"
+msgstr "Opis: %s"
+
+#: src/gui/buy.cpp:64 src/gui/buy.cpp:208 src/gui/buy.cpp:225
+#: src/gui/inventorywindow.cpp:149 src/gui/inventorywindow.cpp:158
+#: src/gui/sell.cpp:71 src/gui/sell.cpp:232 src/gui/sell.cpp:245
+#, c-format
+msgid "Effect: %s"
+msgstr "Efekt: %s"
+
+#: src/gui/buysell.cpp:31
+#, fuzzy
+msgid "Shop"
+msgstr "Zatrzymaj"
+
+#: src/gui/buysell.cpp:35 src/gui/sell.cpp:48 src/gui/sell.cpp:68
+msgid "Sell"
+msgstr "Sprzedaj"
+
+#: src/gui/buysell.cpp:35 src/gui/char_select.cpp:85
+#: src/gui/char_select.cpp:258 src/gui/char_server.cpp:60
+#: src/gui/connection.cpp:47 src/gui/item_amount.cpp:61 src/gui/login.cpp:52
+#: src/gui/npclistdialog.cpp:45 src/gui/register.cpp:76 src/gui/setup.cpp:58
+#: src/gui/trade.cpp:63 src/gui/updatewindow.cpp:118
+msgid "Cancel"
+msgstr "Anuluj"
+
+#: src/gui/char_select.cpp:63
+msgid "Confirm Character Delete"
+msgstr ""
+
+#: src/gui/char_select.cpp:64
+msgid "Are you sure you want to delete this character?"
+msgstr "Czy jesteś pewien, że chcesz usunąć tę postać?"
+
+#: src/gui/char_select.cpp:81
+msgid "Select Character"
+msgstr "Wybierz postać"
+
+#: src/gui/char_select.cpp:84 src/gui/item_amount.cpp:60 src/gui/login.cpp:51
+#: src/gui/ok_dialog.cpp:37 src/gui/trade.cpp:62
+msgid "Ok"
+msgstr "Ok"
+
+#: src/gui/char_select.cpp:86
+msgid "New"
+msgstr "Nowa"
+
+#: src/gui/char_select.cpp:87 src/gui/setup_players.cpp:220
+msgid "Delete"
+msgstr "Usuń"
+
+#: src/gui/char_select.cpp:88
+msgid "Previous"
+msgstr "Poprzedni"
+
+#: src/gui/char_select.cpp:89
+msgid "Next"
+msgstr "Następny"
+
+#: src/gui/char_select.cpp:91 src/gui/char_select.cpp:171
+#: src/gui/char_select.cpp:183 src/gui/inventorywindow.cpp:148
+#: src/gui/inventorywindow.cpp:156 src/gui/trade.cpp:92 src/gui/trade.cpp:264
+#, c-format
+msgid "Name: %s"
+msgstr "ImiÄ™: %s"
+
+#: src/gui/char_select.cpp:92 src/gui/char_select.cpp:172
+#: src/gui/char_select.cpp:184 src/gui/status.cpp:51 src/gui/status.cpp:232
+#, c-format
+msgid "Level: %d"
+msgstr "Poziom: %d"
+
+#: src/gui/char_select.cpp:93 src/gui/char_select.cpp:173
+#: src/gui/char_select.cpp:185
+#, fuzzy, c-format
+msgid "Job Level: %d"
+msgstr "Poziom: %d"
+
+#: src/gui/char_select.cpp:94 src/gui/char_select.cpp:186
+#, c-format
+msgid "Money: %d"
+msgstr "PieniÄ…dze: %d"
+
+#: src/gui/char_select.cpp:174
+#, c-format
+msgid "Gold: %d"
+msgstr ""
+
+#: src/gui/char_select.cpp:243
+msgid "Create Character"
+msgstr "Stwórz postać"
+
+#: src/gui/char_select.cpp:250 src/gui/login.cpp:44 src/gui/register.cpp:65
+msgid "Name:"
+msgstr "ImiÄ™:"
+
+#: src/gui/char_select.cpp:253
+msgid "Hair Color:"
+msgstr "Kolor włosów:"
+
+#: src/gui/char_select.cpp:256
+msgid "Hair Style:"
+msgstr "Fryzura:"
+
+#: src/gui/char_select.cpp:257
+msgid "Create"
+msgstr "Stwórz"
+
+#: src/gui/char_server.cpp:52
+#, fuzzy
+msgid "Select Server"
+msgstr "Wybierz postać"
+
+#: src/gui/char_server.cpp:59 src/gui/npclistdialog.cpp:44
+#: src/gui/npc_text.cpp:46
+msgid "OK"
+msgstr ""
+
+#: src/gui/chat.cpp:122
+msgid "Global announcement:"
+msgstr ""
+
+#: src/gui/chat.cpp:125
+#, c-format
+msgid "Global announcement from %s:"
+msgstr ""
+
+#: src/gui/chat.cpp:140 src/gui/login.cpp:46 src/gui/register.cpp:68
+msgid "Server:"
+msgstr "Serwer:"
+
+#: src/gui/chat.cpp:146
+#, c-format
+msgid "%s whispers:"
+msgstr ""
+
+#: src/gui/chat.cpp:283
+#, c-format
+msgid "Whispering to %s: %s"
+msgstr ""
+
+#: src/gui/chat.cpp:356
+msgid "Unknown command"
+msgstr ""
+
+#: src/gui/chat.cpp:366
+msgid "Trade failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:369
+msgid "Emote failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:372
+msgid "Sit failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:375
+msgid "Chat creating failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:378
+msgid "Could not join party!"
+msgstr ""
+
+#: src/gui/chat.cpp:381
+msgid "Cannot shout!"
+msgstr ""
+
+#: src/gui/chat.cpp:389
+msgid "You have not yet reached a high enough lvl!"
+msgstr ""
+
+#: src/gui/chat.cpp:392
+msgid "Insufficient HP!"
+msgstr ""
+
+#: src/gui/chat.cpp:395
+msgid "Insufficient SP!"
+msgstr ""
+
+#: src/gui/chat.cpp:398
+msgid "You have no memos!"
+msgstr ""
+
+#: src/gui/chat.cpp:401
+msgid "You cannot do that right now!"
+msgstr ""
+
+#: src/gui/chat.cpp:404
+msgid "Seems you need more Zeny... ;-)"
+msgstr ""
+
+#: src/gui/chat.cpp:407
+msgid "You cannot use this skill with that kind of weapon!"
+msgstr ""
+
+#: src/gui/chat.cpp:410
+msgid "You need another red gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:413
+msgid "You need another blue gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:416
+msgid "You're carrying to much to do this!"
+msgstr ""
+
+#: src/gui/chat.cpp:419
+msgid "Huh? What's that?"
+msgstr ""
+
+#: src/gui/chat.cpp:425
+msgid "Warp failed..."
+msgstr ""
+
+#: src/gui/chat.cpp:428
+msgid "Could not steal anything..."
+msgstr ""
+
+#: src/gui/chat.cpp:431
+msgid "Poison had no effect..."
+msgstr ""
+
+#: src/gui/chat.cpp:496
+msgid "-- Help --"
+msgstr ""
+
+#: src/gui/chat.cpp:499
+msgid "/announce: Global announcement (GM only)"
+msgstr ""
+
+#: src/gui/chat.cpp:500
+msgid "/clear: Clears this window"
+msgstr ""
+
+#: src/gui/chat.cpp:501
+msgid "/help: Display this help"
+msgstr ""
+
+#: src/gui/chat.cpp:502
+msgid "/where: Display map name"
+msgstr ""
+
+#: src/gui/chat.cpp:503
+msgid "/whisper <nick> <message>: Sends a private <message> to <nick>"
+msgstr ""
+
+#: src/gui/chat.cpp:505
+msgid "/w <nick> <message>: Short form for /whisper"
+msgstr ""
+
+#: src/gui/chat.cpp:506
+msgid "/who: Display number of online users"
+msgstr ""
+
+#: src/gui/chat.cpp:507
+msgid "For more information, type /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:512
+msgid "Command: /announce <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:513
+msgid "*** only available to a GM ***"
+msgstr ""
+
+#: src/gui/chat.cpp:514
+msgid "This command sends the message <msg> to all players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:520
+msgid "Command: /clear"
+msgstr ""
+
+#: src/gui/chat.cpp:521
+msgid "This command clears the chat log of previous chat."
+msgstr ""
+
+#: src/gui/chat.cpp:527
+msgid "Command: /help"
+msgstr ""
+
+#: src/gui/chat.cpp:528
+msgid "This command displays a list of all commands available."
+msgstr ""
+
+#: src/gui/chat.cpp:530
+msgid "Command: /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:531
+msgid "This command displays help on <command>."
+msgstr ""
+
+#: src/gui/chat.cpp:536
+msgid "Command: /where"
+msgstr ""
+
+#: src/gui/chat.cpp:537
+msgid "This command displays the name of the current map."
+msgstr ""
+
+#: src/gui/chat.cpp:543
+msgid "Command: /whisper <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:544
+msgid "Command: /w <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:545
+msgid "This command sends the message <msg> to <nick>."
+msgstr ""
+
+#: src/gui/chat.cpp:547
+msgid "If the <nick> has spaces in it, enclose it in double quotes (\")."
+msgstr ""
+
+#: src/gui/chat.cpp:553
+msgid "Command: /who"
+msgstr ""
+
+#: src/gui/chat.cpp:554
+msgid "This command displays the number of players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:558
+msgid "Unknown command."
+msgstr ""
+
+#: src/gui/chat.cpp:559
+msgid "Type /help for a list of commands."
+msgstr ""
+
+#: src/gui/confirm_dialog.cpp:35
+msgid "Yes"
+msgstr "Tak"
+
+#: src/gui/confirm_dialog.cpp:36
+msgid "No"
+msgstr "Nie"
+
+#: src/gui/connection.cpp:49 src/gui/updatewindow.cpp:116
+msgid "Connecting..."
+msgstr "ÅÄ…czenie..."
+
+#: src/gui/equipmentwindow.cpp:38 src/gui/menuwindow.cpp:62
+msgid "Equipment"
+msgstr "Ekwipunek"
+
+#: src/gui/help.cpp:33
+msgid "Help"
+msgstr ""
+
+#: src/gui/help.cpp:41
+msgid "Close"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:46 src/gui/menuwindow.cpp:63
+msgid "Inventory"
+msgstr "Inwentarz"
+
+#: src/gui/inventorywindow.cpp:56 src/gui/inventorywindow.cpp:232
+#: src/gui/skill.cpp:134
+msgid "Use"
+msgstr "Użyj"
+
+#: src/gui/inventorywindow.cpp:57
+msgid "Drop"
+msgstr "Upuść"
+
+#: src/gui/inventorywindow.cpp:99
+#, c-format
+msgid "Weight: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:104
+#, c-format
+msgid "Slots used: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:225
+msgid "Unequip"
+msgstr "Zdejmij"
+
+#: src/gui/inventorywindow.cpp:228
+msgid "Equip"
+msgstr "Załóż"
+
+#: src/gui/item_amount.cpp:76
+msgid "Select amount of items to trade."
+msgstr "Wybierz ilość przedmiotów do wymiany."
+
+#: src/gui/item_amount.cpp:80
+msgid "Select amount of items to drop."
+msgstr "Wybierz ilość przedmiotów do upuszczenia."
+
+#: src/gui/login.cpp:42
+msgid "Login"
+msgstr "Użytkownik"
+
+#: src/gui/login.cpp:45 src/gui/register.cpp:66
+msgid "Password:"
+msgstr "Hasło:"
+
+#: src/gui/login.cpp:50
+msgid "Remember Username"
+msgstr ""
+
+#: src/gui/login.cpp:53 src/gui/register.cpp:75
+msgid "Register"
+msgstr "Rejestruj"
+
+#: src/gui/menuwindow.cpp:61
+msgid "Status"
+msgstr "Stan"
+
+#: src/gui/menuwindow.cpp:64 src/gui/skill.cpp:119
+msgid "Skills"
+msgstr "Zdolności"
+
+#: src/gui/menuwindow.cpp:65
+msgid "Shortcut"
+msgstr "Skrót"
+
+#: src/gui/menuwindow.cpp:66 src/main.cpp:716
+msgid "Setup"
+msgstr "Konfiguracja"
+
+#: src/gui/minimap.cpp:34
+msgid "MiniMap"
+msgstr "MiniMapa"
+
+#: src/gui/npclistdialog.cpp:35 src/gui/npc_text.cpp:35
+msgid "NPC"
+msgstr "NPC"
+
+#: src/gui/popupmenu.cpp:81
+#, c-format
+msgid "@@trade|Trade With %s@@"
+msgstr "@@trade|Targ z %s@@"
+
+#: src/gui/popupmenu.cpp:83
+#, c-format
+msgid "@@attack|Attack %s@@"
+msgstr "@@attack|Atakuj %s@@"
+
+#: src/gui/popupmenu.cpp:114
+msgid "@@talk|Talk To NPC@@"
+msgstr "@@talk|Rozmawiaj z NPC@@"
+
+#: src/gui/popupmenu.cpp:124 src/gui/popupmenu.cpp:140
+#: src/gui/popupmenu.cpp:293
+msgid "@@cancel|Cancel@@"
+msgstr "@@cancel|Anuluj@@"
+
+#: src/gui/popupmenu.cpp:136
+#, c-format
+msgid "@@pickup|Pick Up %s@@"
+msgstr "@@pickup|PodnieÅ› %s@@"
+
+#: src/gui/popupmenu.cpp:283
+#, fuzzy
+msgid "@@use|Unequip@@"
+msgstr "@@use|Załóż@@"
+
+#: src/gui/popupmenu.cpp:285
+msgid "@@use|Equip@@"
+msgstr "@@use|Załóż@@"
+
+#: src/gui/popupmenu.cpp:288
+msgid "@@use|Use@@"
+msgstr "@@use|Użyj@@"
+
+#: src/gui/popupmenu.cpp:290
+msgid "@@drop|Drop@@"
+msgstr "@@drop|Upuść@@"
+
+#: src/gui/popupmenu.cpp:291
+msgid "@@description|Description@@"
+msgstr "@@description|Opis@@"
+
+#: src/gui/register.cpp:67
+msgid "Confirm:"
+msgstr "Potwierdź:"
+
+#: src/gui/register.cpp:73
+msgid "Male"
+msgstr "Mężczyzna"
+
+#: src/gui/register.cpp:74
+msgid "Female"
+msgstr "Kobieta"
+
+#: src/gui/register.cpp:176
+#, c-format
+msgid "The username needs to be at least %d characters long."
+msgstr "Nazwa użytkownika musi być długa na conajmniej %d znaków."
+
+#: src/gui/register.cpp:184
+#, c-format
+msgid "The username needs to be less than %d characters long."
+msgstr "Nazwa użytkownika musi mieć mniej niż %d znaków."
+
+#: src/gui/register.cpp:192
+#, c-format
+msgid "The password needs to be at least %d characters long."
+msgstr "Hasło musi mieć conajmniej %d znaków."
+
+#: src/gui/register.cpp:200
+#, c-format
+msgid "The password needs to be less than %d characters long."
+msgstr "Hasło nie może mieć więcej jak %d znaków."
+
+#: src/gui/register.cpp:207
+msgid "Passwords do not match."
+msgstr "Hasła nie zgadzają się."
+
+#: src/gui/register.cpp:227 src/main.cpp:945
+msgid "Error"
+msgstr "BÅ‚Ä…d"
+
+#: src/gui/setup_audio.cpp:40
+msgid "Sound"
+msgstr "Dźwięk"
+
+#: src/gui/setup_audio.cpp:46
+msgid "Sfx volume"
+msgstr "Głośność efektów dźwiękowych"
+
+#: src/gui/setup_audio.cpp:47
+msgid "Music volume"
+msgstr "Głośność muzyki"
+
+#: src/gui/setup.cpp:58
+msgid "Apply"
+msgstr "Zastosuj"
+
+#: src/gui/setup.cpp:58
+msgid "Reset Windows"
+msgstr "Zresetuj okna"
+
+#: src/gui/setup.cpp:79
+msgid "Video"
+msgstr "Obraz"
+
+#: src/gui/setup.cpp:83
+msgid "Audio"
+msgstr "Dźwięk"
+
+#: src/gui/setup.cpp:87
+msgid "Joystick"
+msgstr "Joystick"
+
+#: src/gui/setup.cpp:91
+msgid "Keyboard"
+msgstr ""
+
+#: src/gui/setup.cpp:95
+msgid "Players"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:36 src/gui/setup_joystick.cpp:70
+msgid "Press the button to start calibration"
+msgstr "Wciśnij przycisk aby rozpocząć kalibrację"
+
+#: src/gui/setup_joystick.cpp:37 src/gui/setup_joystick.cpp:68
+msgid "Calibrate"
+msgstr "Kalibruj"
+
+#: src/gui/setup_joystick.cpp:38
+msgid "Enable joystick"
+msgstr "WÅ‚Ä…cz joystick"
+
+#: src/gui/setup_joystick.cpp:73
+msgid "Stop"
+msgstr "Zatrzymaj"
+
+#: src/gui/setup_joystick.cpp:74
+msgid "Rotate the stick"
+msgstr "Obróć drążek"
+
+#: src/gui/setup_keyboard.cpp:88
+msgid "Assign"
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:94
+#, fuzzy
+msgid "Default"
+msgstr "Usuń"
+
+#: src/gui/setup_keyboard.cpp:115
+msgid "Key Conflict(s) Detected."
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:116
+msgid "Resolve them, or gameplay may result in strange behaviour."
+msgstr ""
+
+#: src/gui/setup_players.cpp:53
+#, fuzzy
+msgid "Name"
+msgstr "ImiÄ™:"
+
+#: src/gui/setup_players.cpp:54
+msgid "Relation"
+msgstr ""
+
+#: src/gui/setup_players.cpp:58
+msgid "Neutral"
+msgstr ""
+
+#: src/gui/setup_players.cpp:59
+msgid "Friend"
+msgstr ""
+
+#: src/gui/setup_players.cpp:60
+msgid "Disregarded"
+msgstr ""
+
+#: src/gui/setup_players.cpp:61
+msgid "Ignored"
+msgstr ""
+
+#: src/gui/setup_players.cpp:214
+msgid "Save player list"
+msgstr ""
+
+#: src/gui/setup_players.cpp:216
+msgid "Allow trading"
+msgstr ""
+
+#: src/gui/setup_players.cpp:218
+msgid "Allow whispers"
+msgstr ""
+
+#: src/gui/setup_players.cpp:245
+msgid "When ignoring:"
+msgstr ""
+
+#: src/gui/setup_video.cpp:112
+msgid "Full screen"
+msgstr "Pełen ekran"
+
+#: src/gui/setup_video.cpp:113
+msgid "OpenGL"
+msgstr "OpenGL"
+
+#: src/gui/setup_video.cpp:114
+msgid "Custom cursor"
+msgstr "WÅ‚asny kursor"
+
+#: src/gui/setup_video.cpp:116
+msgid "FPS Limit:"
+msgstr "Limit FPS:"
+
+#: src/gui/setup_video.cpp:135
+msgid "Gui opacity"
+msgstr "Przezroczystość GUI"
+
+#: src/gui/setup_video.cpp:192
+msgid "Scroll radius"
+msgstr "Skok przy przewijaniu ekranu"
+
+#: src/gui/setup_video.cpp:200
+msgid "Scroll laziness"
+msgstr "Opóźnienie przy przewijaniu ekranu"
+
+#: src/gui/setup_video.cpp:208
+msgid "Ambient FX"
+msgstr "Dźwięki otoczenia"
+
+#: src/gui/setup_video.cpp:215 src/gui/setup_video.cpp:412
+msgid "off"
+msgstr "wyłączone"
+
+#: src/gui/setup_video.cpp:218 src/gui/setup_video.cpp:234
+#: src/gui/setup_video.cpp:415 src/gui/setup_video.cpp:429
+msgid "low"
+msgstr "niskie"
+
+#: src/gui/setup_video.cpp:221 src/gui/setup_video.cpp:240
+#: src/gui/setup_video.cpp:418 src/gui/setup_video.cpp:435
+msgid "high"
+msgstr "wysokie"
+
+#: src/gui/setup_video.cpp:227
+msgid "Particle Detail"
+msgstr ""
+
+#: src/gui/setup_video.cpp:237 src/gui/setup_video.cpp:432
+msgid "medium"
+msgstr ""
+
+#: src/gui/setup_video.cpp:243 src/gui/setup_video.cpp:438
+msgid "max"
+msgstr ""
+
+#: src/gui/setup_video.cpp:309
+msgid "Switching to full screen"
+msgstr "Przełączanie na pełen ekran"
+
+#: src/gui/setup_video.cpp:310
+msgid "Restart needed for changes to take effect."
+msgstr "Wymagane ponowne uruchomienia aby zastosować zmiany."
+
+#: src/gui/setup_video.cpp:322
+msgid "Changing OpenGL"
+msgstr "Zmień ustawienia OpenGL"
+
+#: src/gui/setup_video.cpp:323
+msgid "Applying change to OpenGL requires restart."
+msgstr ""
+"Zastosowywanie zmian w konfiguracji OpenGL wymaga ponownego uruchomienia."
+
+#: src/gui/skill.cpp:79
+msgid "Mystery Skill"
+msgstr ""
+
+#: src/gui/skill.cpp:132 src/gui/skill.cpp:188
+#, c-format
+msgid "Skill points: %d"
+msgstr ""
+
+#: src/gui/skill.cpp:133
+msgid "Up"
+msgstr ""
+
+#: src/gui/status.cpp:52 src/gui/status.cpp:235
+#, fuzzy, c-format
+msgid "Job: %d"
+msgstr "Poziom: %d"
+
+#: src/gui/status.cpp:53 src/gui/status.cpp:238
+#, fuzzy, c-format
+msgid "Money: %d GP"
+msgstr "PieniÄ…dze: %d"
+
+#: src/gui/status.cpp:127
+#, fuzzy
+msgid "Stats"
+msgstr "Stan"
+
+#: src/gui/status.cpp:128
+msgid "Total"
+msgstr ""
+
+#: src/gui/status.cpp:129
+msgid "Cost"
+msgstr ""
+
+#: src/gui/status.cpp:132
+#, fuzzy
+msgid "Attack:"
+msgstr "Atak %+d"
+
+#: src/gui/status.cpp:133
+#, fuzzy
+msgid "Defense:"
+msgstr "Obrona %+d"
+
+#: src/gui/status.cpp:134
+#, fuzzy
+msgid "M.Attack:"
+msgstr "Atak %+d"
+
+#: src/gui/status.cpp:135
+#, fuzzy
+msgid "M.Defense:"
+msgstr "Obrona %+d"
+
+#: src/gui/status.cpp:136
+#, c-format
+msgid "% Accuracy:"
+msgstr ""
+
+#: src/gui/status.cpp:137
+#, c-format
+msgid "% Evade:"
+msgstr ""
+
+#: src/gui/status.cpp:138
+msgid "% Reflex:"
+msgstr ""
+
+#: src/gui/status.cpp:282
+#, fuzzy
+msgid "Strength"
+msgstr "Siła:"
+
+#: src/gui/status.cpp:283
+#, fuzzy
+msgid "Agility"
+msgstr "Zwinność:"
+
+#: src/gui/status.cpp:284
+#, fuzzy
+msgid "Vitality"
+msgstr "Witalność:"
+
+#: src/gui/status.cpp:285
+#, fuzzy
+msgid "Intelligence"
+msgstr "Inteligencja:"
+
+#: src/gui/status.cpp:286
+#, fuzzy
+msgid "Dexterity"
+msgstr "Zręczność:"
+
+#: src/gui/status.cpp:287
+msgid "Luck"
+msgstr ""
+
+#: src/gui/status.cpp:305
+#, c-format
+msgid "Remaining Status Points: %d"
+msgstr ""
+
+#: src/gui/trade.cpp:61
+msgid "Add"
+msgstr "Dodaj"
+
+#: src/gui/trade.cpp:64
+msgid "Trade"
+msgstr ""
+
+#: src/gui/trade.cpp:80 src/gui/trade.cpp:156 src/gui/trade.cpp:204
+#, c-format
+msgid "You get %d GP."
+msgstr "Otrzymujesz %d GP"
+
+#: src/gui/trade.cpp:81
+msgid "You give:"
+msgstr "Dajesz:"
+
+#: src/gui/trade.cpp:283
+msgid "Failed adding item. You can not overlap one kind of item on the window."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:93
+msgid "Updating..."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:119
+msgid "Play"
+msgstr ""
+
+#: src/gui/updatewindow.cpp:525
+msgid "Completed"
+msgstr ""
+
+#: src/resources/itemdb.cpp:99
+msgid "Unnamed"
+msgstr ""
+
+#: src/main.cpp:769
+msgid "Got disconnected from server!"
+msgstr ""
+
+#: src/main.cpp:956
+#, fuzzy
+msgid "Connecting to map server..."
+msgstr "ÅÄ…czenie..."
+
+#: src/main.cpp:964
+msgid "Connecting to character server..."
+msgstr ""
+
+#: src/main.cpp:972
+msgid "Connecting to account server..."
+msgstr ""
+
+#~ msgid "Unregister"
+#~ msgstr "Wyrejestruj"
+
+#~ msgid "Change Password"
+#~ msgstr "Zmień hasło"
+
+#~ msgid "Willpower:"
+#~ msgstr "Siła woli:"
+
+#~ msgid "Please distribute %d points"
+#~ msgstr "Proszę wykorzystać %d punktów"
+
+#~ msgid "Your name needs to be at least 4 characters."
+#~ msgstr "Twoje imię musi mieć conajmniej 4 znaki."
+
+#~ msgid "Character stats OK"
+#~ msgstr "Statystyki postaci w porzÄ…dku."
+
+#~ msgid "Please remove %d points"
+#~ msgstr "Proszę usunąć %d punktów"
+
+#~ msgid "Split"
+#~ msgstr "Podziel"
+
+#~ msgid "Select amount of items to split."
+#~ msgstr "Wybierz ilość przedmiotów do podziału."
+
+#~ msgid "@@split|Split@@"
+#~ msgstr "@@split|Rozdziel@@"
+
+#~ msgid "Switch server"
+#~ msgstr "Zmień serwer"
+
+#~ msgid "Switch character"
+#~ msgstr "Zmień postać"
+
+#~ msgid "Email:"
+#~ msgstr "Adres e-mail:"
+
+#~ msgid "Choose your Mana World Server"
+#~ msgstr "Wybierz serwer Mana World"
+
+#~ msgid "Port:"
+#~ msgstr "Port:"
+
+#~ msgid "Please type both the address and the port of a server."
+#~ msgstr "Proszę wpisać adres i port serwera"
+
+#~ msgid "Propose trade"
+#~ msgstr "Oferuj handel"
+
+#~ msgid "Confirm trade"
+#~ msgstr "Potwierdź handel"
+
+#~ msgid "Change"
+#~ msgstr "Zmień"
+
+#~ msgid "HP %+d"
+#~ msgstr "PÅ» %+d"
+
+#~ msgid "MP %+d"
+#~ msgstr "PM %+d"
+
+#~ msgid "Confirm"
+#~ msgstr "Potwierdź"
+
+#~ msgid "Charisma:"
+#~ msgstr "Charyzma:"
+
+#~ msgid "Total Weight: %d - Maximum Weight: %d"
+#~ msgstr "Całkowita waga: %d - Maksymalna waga: %d"
+
+#~ msgid "Keep"
+#~ msgstr "Zachowaj"
diff --git a/po/pt.po b/po/pt.po
new file mode 100644
index 00000000..bd9630d1
--- /dev/null
+++ b/po/pt.po
@@ -0,0 +1,993 @@
+# Portuguese translation for tmw
+# Copyright (c) 2007 Rosetta Contributors and Canonical Ltd 2007
+# This file is distributed under the same license as the tmw package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2007.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: tmw\n"
+"Report-Msgid-Bugs-To: themanaworld-devel@lists.sourceforge.net\n"
+"POT-Creation-Date: 2009-01-08 22:10+0100\n"
+"PO-Revision-Date: 2008-02-03 10:14+0000\n"
+"Last-Translator: Tiago Silva <Unknown>\n"
+"Language-Team: Portuguese <pt@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-01-06 12:40+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#: src/gui/buy.cpp:43 src/gui/buy.cpp:61 src/gui/buysell.cpp:35
+msgid "Buy"
+msgstr "Comprar"
+
+#: src/gui/buy.cpp:58 src/gui/buy.cpp:239 src/gui/sell.cpp:65
+#: src/gui/sell.cpp:259
+#, c-format
+msgid "Price: %d GP / Total: %d GP"
+msgstr "Preço: %d GP / Total: %d GP"
+
+#: src/gui/buy.cpp:62 src/gui/sell.cpp:69
+msgid "Quit"
+msgstr "Sair"
+
+#: src/gui/buy.cpp:63 src/gui/buy.cpp:206 src/gui/buy.cpp:224
+#: src/gui/inventorywindow.cpp:150 src/gui/inventorywindow.cpp:160
+#: src/gui/sell.cpp:70 src/gui/sell.cpp:230 src/gui/sell.cpp:244
+#: src/gui/trade.cpp:94 src/gui/trade.cpp:266
+#, c-format
+msgid "Description: %s"
+msgstr "Descrição: %s"
+
+#: src/gui/buy.cpp:64 src/gui/buy.cpp:208 src/gui/buy.cpp:225
+#: src/gui/inventorywindow.cpp:149 src/gui/inventorywindow.cpp:158
+#: src/gui/sell.cpp:71 src/gui/sell.cpp:232 src/gui/sell.cpp:245
+#, c-format
+msgid "Effect: %s"
+msgstr "Efeito: %s"
+
+#: src/gui/buysell.cpp:31
+#, fuzzy
+msgid "Shop"
+msgstr "Parar"
+
+#: src/gui/buysell.cpp:35 src/gui/sell.cpp:48 src/gui/sell.cpp:68
+msgid "Sell"
+msgstr "Vender"
+
+#: src/gui/buysell.cpp:35 src/gui/char_select.cpp:85
+#: src/gui/char_select.cpp:258 src/gui/char_server.cpp:60
+#: src/gui/connection.cpp:47 src/gui/item_amount.cpp:61 src/gui/login.cpp:52
+#: src/gui/npclistdialog.cpp:45 src/gui/register.cpp:76 src/gui/setup.cpp:58
+#: src/gui/trade.cpp:63 src/gui/updatewindow.cpp:118
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: src/gui/char_select.cpp:63
+msgid "Confirm Character Delete"
+msgstr ""
+
+#: src/gui/char_select.cpp:64
+msgid "Are you sure you want to delete this character?"
+msgstr "Tem a certeza que quer apagar este personagem"
+
+#: src/gui/char_select.cpp:81
+msgid "Select Character"
+msgstr "Seleccione um Personagem"
+
+#: src/gui/char_select.cpp:84 src/gui/item_amount.cpp:60 src/gui/login.cpp:51
+#: src/gui/ok_dialog.cpp:37 src/gui/trade.cpp:62
+msgid "Ok"
+msgstr "Ok"
+
+#: src/gui/char_select.cpp:86
+msgid "New"
+msgstr "Novo"
+
+#: src/gui/char_select.cpp:87 src/gui/setup_players.cpp:220
+msgid "Delete"
+msgstr "Eliminar"
+
+#: src/gui/char_select.cpp:88
+msgid "Previous"
+msgstr "Anterior"
+
+#: src/gui/char_select.cpp:89
+msgid "Next"
+msgstr "Seguinte"
+
+#: src/gui/char_select.cpp:91 src/gui/char_select.cpp:171
+#: src/gui/char_select.cpp:183 src/gui/inventorywindow.cpp:148
+#: src/gui/inventorywindow.cpp:156 src/gui/trade.cpp:92 src/gui/trade.cpp:264
+#, c-format
+msgid "Name: %s"
+msgstr "Nome: %s"
+
+#: src/gui/char_select.cpp:92 src/gui/char_select.cpp:172
+#: src/gui/char_select.cpp:184 src/gui/status.cpp:51 src/gui/status.cpp:232
+#, c-format
+msgid "Level: %d"
+msgstr "Nível: %d"
+
+#: src/gui/char_select.cpp:93 src/gui/char_select.cpp:173
+#: src/gui/char_select.cpp:185
+#, fuzzy, c-format
+msgid "Job Level: %d"
+msgstr "Nível: %d"
+
+#: src/gui/char_select.cpp:94 src/gui/char_select.cpp:186
+#, c-format
+msgid "Money: %d"
+msgstr "Dinheiro: %d"
+
+#: src/gui/char_select.cpp:174
+#, c-format
+msgid "Gold: %d"
+msgstr ""
+
+#: src/gui/char_select.cpp:243
+msgid "Create Character"
+msgstr "Criar Personagem"
+
+#: src/gui/char_select.cpp:250 src/gui/login.cpp:44 src/gui/register.cpp:65
+msgid "Name:"
+msgstr "Nome:"
+
+#: src/gui/char_select.cpp:253
+msgid "Hair Color:"
+msgstr "Cor de Cabelo:"
+
+#: src/gui/char_select.cpp:256
+msgid "Hair Style:"
+msgstr "Estilo do Cabelo:"
+
+#: src/gui/char_select.cpp:257
+msgid "Create"
+msgstr "Criar"
+
+#: src/gui/char_server.cpp:52
+#, fuzzy
+msgid "Select Server"
+msgstr "Seleccione um Personagem"
+
+#: src/gui/char_server.cpp:59 src/gui/npclistdialog.cpp:44
+#: src/gui/npc_text.cpp:46
+msgid "OK"
+msgstr ""
+
+#: src/gui/chat.cpp:122
+msgid "Global announcement:"
+msgstr ""
+
+#: src/gui/chat.cpp:125
+#, c-format
+msgid "Global announcement from %s:"
+msgstr ""
+
+#: src/gui/chat.cpp:140 src/gui/login.cpp:46 src/gui/register.cpp:68
+msgid "Server:"
+msgstr "Servidor:"
+
+#: src/gui/chat.cpp:146
+#, c-format
+msgid "%s whispers:"
+msgstr ""
+
+#: src/gui/chat.cpp:283
+#, c-format
+msgid "Whispering to %s: %s"
+msgstr ""
+
+#: src/gui/chat.cpp:356
+msgid "Unknown command"
+msgstr ""
+
+#: src/gui/chat.cpp:366
+msgid "Trade failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:369
+msgid "Emote failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:372
+msgid "Sit failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:375
+msgid "Chat creating failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:378
+msgid "Could not join party!"
+msgstr ""
+
+#: src/gui/chat.cpp:381
+msgid "Cannot shout!"
+msgstr ""
+
+#: src/gui/chat.cpp:389
+msgid "You have not yet reached a high enough lvl!"
+msgstr ""
+
+#: src/gui/chat.cpp:392
+msgid "Insufficient HP!"
+msgstr ""
+
+#: src/gui/chat.cpp:395
+msgid "Insufficient SP!"
+msgstr ""
+
+#: src/gui/chat.cpp:398
+msgid "You have no memos!"
+msgstr ""
+
+#: src/gui/chat.cpp:401
+msgid "You cannot do that right now!"
+msgstr ""
+
+#: src/gui/chat.cpp:404
+msgid "Seems you need more Zeny... ;-)"
+msgstr ""
+
+#: src/gui/chat.cpp:407
+msgid "You cannot use this skill with that kind of weapon!"
+msgstr ""
+
+#: src/gui/chat.cpp:410
+msgid "You need another red gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:413
+msgid "You need another blue gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:416
+msgid "You're carrying to much to do this!"
+msgstr ""
+
+#: src/gui/chat.cpp:419
+msgid "Huh? What's that?"
+msgstr ""
+
+#: src/gui/chat.cpp:425
+msgid "Warp failed..."
+msgstr ""
+
+#: src/gui/chat.cpp:428
+msgid "Could not steal anything..."
+msgstr ""
+
+#: src/gui/chat.cpp:431
+msgid "Poison had no effect..."
+msgstr ""
+
+#: src/gui/chat.cpp:496
+msgid "-- Help --"
+msgstr ""
+
+#: src/gui/chat.cpp:499
+msgid "/announce: Global announcement (GM only)"
+msgstr ""
+
+#: src/gui/chat.cpp:500
+msgid "/clear: Clears this window"
+msgstr ""
+
+#: src/gui/chat.cpp:501
+msgid "/help: Display this help"
+msgstr ""
+
+#: src/gui/chat.cpp:502
+msgid "/where: Display map name"
+msgstr ""
+
+#: src/gui/chat.cpp:503
+msgid "/whisper <nick> <message>: Sends a private <message> to <nick>"
+msgstr ""
+
+#: src/gui/chat.cpp:505
+msgid "/w <nick> <message>: Short form for /whisper"
+msgstr ""
+
+#: src/gui/chat.cpp:506
+msgid "/who: Display number of online users"
+msgstr ""
+
+#: src/gui/chat.cpp:507
+msgid "For more information, type /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:512
+msgid "Command: /announce <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:513
+msgid "*** only available to a GM ***"
+msgstr ""
+
+#: src/gui/chat.cpp:514
+msgid "This command sends the message <msg> to all players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:520
+msgid "Command: /clear"
+msgstr ""
+
+#: src/gui/chat.cpp:521
+msgid "This command clears the chat log of previous chat."
+msgstr ""
+
+#: src/gui/chat.cpp:527
+msgid "Command: /help"
+msgstr ""
+
+#: src/gui/chat.cpp:528
+msgid "This command displays a list of all commands available."
+msgstr ""
+
+#: src/gui/chat.cpp:530
+msgid "Command: /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:531
+msgid "This command displays help on <command>."
+msgstr ""
+
+#: src/gui/chat.cpp:536
+msgid "Command: /where"
+msgstr ""
+
+#: src/gui/chat.cpp:537
+msgid "This command displays the name of the current map."
+msgstr ""
+
+#: src/gui/chat.cpp:543
+msgid "Command: /whisper <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:544
+msgid "Command: /w <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:545
+msgid "This command sends the message <msg> to <nick>."
+msgstr ""
+
+#: src/gui/chat.cpp:547
+msgid "If the <nick> has spaces in it, enclose it in double quotes (\")."
+msgstr ""
+
+#: src/gui/chat.cpp:553
+msgid "Command: /who"
+msgstr ""
+
+#: src/gui/chat.cpp:554
+msgid "This command displays the number of players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:558
+msgid "Unknown command."
+msgstr ""
+
+#: src/gui/chat.cpp:559
+msgid "Type /help for a list of commands."
+msgstr ""
+
+#: src/gui/confirm_dialog.cpp:35
+msgid "Yes"
+msgstr "Sim"
+
+#: src/gui/confirm_dialog.cpp:36
+msgid "No"
+msgstr "Não"
+
+#: src/gui/connection.cpp:49 src/gui/updatewindow.cpp:116
+msgid "Connecting..."
+msgstr "Conectando..."
+
+#: src/gui/equipmentwindow.cpp:38 src/gui/menuwindow.cpp:62
+msgid "Equipment"
+msgstr "Equipamento"
+
+#: src/gui/help.cpp:33
+msgid "Help"
+msgstr ""
+
+#: src/gui/help.cpp:41
+msgid "Close"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:46 src/gui/menuwindow.cpp:63
+msgid "Inventory"
+msgstr "Inventário"
+
+#: src/gui/inventorywindow.cpp:56 src/gui/inventorywindow.cpp:232
+#: src/gui/skill.cpp:134
+msgid "Use"
+msgstr "Usar"
+
+#: src/gui/inventorywindow.cpp:57
+msgid "Drop"
+msgstr "Largar"
+
+#: src/gui/inventorywindow.cpp:99
+#, c-format
+msgid "Weight: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:104
+#, c-format
+msgid "Slots used: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:225
+msgid "Unequip"
+msgstr "Desequipar"
+
+#: src/gui/inventorywindow.cpp:228
+msgid "Equip"
+msgstr "Equipar"
+
+#: src/gui/item_amount.cpp:76
+msgid "Select amount of items to trade."
+msgstr "Seleccionar a quantidade de itens a negociar."
+
+#: src/gui/item_amount.cpp:80
+msgid "Select amount of items to drop."
+msgstr "Seleccionar a quantidade de itens a largar."
+
+#: src/gui/login.cpp:42
+msgid "Login"
+msgstr "Autenticar"
+
+#: src/gui/login.cpp:45 src/gui/register.cpp:66
+msgid "Password:"
+msgstr "Senha:"
+
+#: src/gui/login.cpp:50
+msgid "Remember Username"
+msgstr ""
+
+#: src/gui/login.cpp:53 src/gui/register.cpp:75
+msgid "Register"
+msgstr "Registo"
+
+#: src/gui/menuwindow.cpp:61
+msgid "Status"
+msgstr "Estado"
+
+#: src/gui/menuwindow.cpp:64 src/gui/skill.cpp:119
+msgid "Skills"
+msgstr "Competências"
+
+#: src/gui/menuwindow.cpp:65
+msgid "Shortcut"
+msgstr "Atalho"
+
+#: src/gui/menuwindow.cpp:66 src/main.cpp:716
+msgid "Setup"
+msgstr "Configuração"
+
+#: src/gui/minimap.cpp:34
+msgid "MiniMap"
+msgstr "MiniMapa"
+
+#: src/gui/npclistdialog.cpp:35 src/gui/npc_text.cpp:35
+msgid "NPC"
+msgstr "NPC"
+
+#: src/gui/popupmenu.cpp:81
+#, c-format
+msgid "@@trade|Trade With %s@@"
+msgstr "@@trade|Negociar com %s@@"
+
+#: src/gui/popupmenu.cpp:83
+#, c-format
+msgid "@@attack|Attack %s@@"
+msgstr "@@attack|Atacar %s@@"
+
+#: src/gui/popupmenu.cpp:114
+msgid "@@talk|Talk To NPC@@"
+msgstr "@@talk|Falar com o NPC@@"
+
+#: src/gui/popupmenu.cpp:124 src/gui/popupmenu.cpp:140
+#: src/gui/popupmenu.cpp:293
+msgid "@@cancel|Cancel@@"
+msgstr "@@cancel|Cancelar@@"
+
+#: src/gui/popupmenu.cpp:136
+#, c-format
+msgid "@@pickup|Pick Up %s@@"
+msgstr "@@pickup|Apanhar %s@@"
+
+#: src/gui/popupmenu.cpp:283
+#, fuzzy
+msgid "@@use|Unequip@@"
+msgstr "@@use|Equipar@@"
+
+#: src/gui/popupmenu.cpp:285
+msgid "@@use|Equip@@"
+msgstr "@@use|Equipar@@"
+
+#: src/gui/popupmenu.cpp:288
+msgid "@@use|Use@@"
+msgstr "@@use|Usar@@"
+
+#: src/gui/popupmenu.cpp:290
+msgid "@@drop|Drop@@"
+msgstr "@@drop|Largar@@"
+
+#: src/gui/popupmenu.cpp:291
+msgid "@@description|Description@@"
+msgstr "@@descrição|Descrição@@"
+
+#: src/gui/register.cpp:67
+msgid "Confirm:"
+msgstr "Confirmar:"
+
+#: src/gui/register.cpp:73
+msgid "Male"
+msgstr ""
+
+#: src/gui/register.cpp:74
+msgid "Female"
+msgstr ""
+
+#: src/gui/register.cpp:176
+#, c-format
+msgid "The username needs to be at least %d characters long."
+msgstr "O nome de utilizador necessita de pelo menos %d caracteres."
+
+#: src/gui/register.cpp:184
+#, c-format
+msgid "The username needs to be less than %d characters long."
+msgstr "O nome de utilizador só pode ter %d caracteres."
+
+#: src/gui/register.cpp:192
+#, c-format
+msgid "The password needs to be at least %d characters long."
+msgstr "A password necessita de pelo menos %d caracteres."
+
+#: src/gui/register.cpp:200
+#, c-format
+msgid "The password needs to be less than %d characters long."
+msgstr "A password só pode ter até %d caracteres."
+
+#: src/gui/register.cpp:207
+msgid "Passwords do not match."
+msgstr "As senhas não coincidem."
+
+#: src/gui/register.cpp:227 src/main.cpp:945
+msgid "Error"
+msgstr "Erro"
+
+#: src/gui/setup_audio.cpp:40
+msgid "Sound"
+msgstr "Som"
+
+#: src/gui/setup_audio.cpp:46
+msgid "Sfx volume"
+msgstr "Volume dos Efeitos"
+
+#: src/gui/setup_audio.cpp:47
+msgid "Music volume"
+msgstr "Volume da Música"
+
+#: src/gui/setup.cpp:58
+msgid "Apply"
+msgstr "Aplicar"
+
+#: src/gui/setup.cpp:58
+msgid "Reset Windows"
+msgstr "Reiniciar Janelas"
+
+#: src/gui/setup.cpp:79
+msgid "Video"
+msgstr "Vídeo"
+
+#: src/gui/setup.cpp:83
+msgid "Audio"
+msgstr "Ãudio"
+
+#: src/gui/setup.cpp:87
+msgid "Joystick"
+msgstr "Joystick"
+
+#: src/gui/setup.cpp:91
+msgid "Keyboard"
+msgstr ""
+
+#: src/gui/setup.cpp:95
+msgid "Players"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:36 src/gui/setup_joystick.cpp:70
+msgid "Press the button to start calibration"
+msgstr "Pressione o botão para começar a calibragem"
+
+#: src/gui/setup_joystick.cpp:37 src/gui/setup_joystick.cpp:68
+msgid "Calibrate"
+msgstr "Calibrar"
+
+#: src/gui/setup_joystick.cpp:38
+msgid "Enable joystick"
+msgstr "Habilitar Joystick"
+
+#: src/gui/setup_joystick.cpp:73
+msgid "Stop"
+msgstr "Parar"
+
+#: src/gui/setup_joystick.cpp:74
+msgid "Rotate the stick"
+msgstr "Rode o manipulo"
+
+#: src/gui/setup_keyboard.cpp:88
+msgid "Assign"
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:94
+#, fuzzy
+msgid "Default"
+msgstr "Eliminar"
+
+#: src/gui/setup_keyboard.cpp:115
+msgid "Key Conflict(s) Detected."
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:116
+msgid "Resolve them, or gameplay may result in strange behaviour."
+msgstr ""
+
+#: src/gui/setup_players.cpp:53
+#, fuzzy
+msgid "Name"
+msgstr "Nome:"
+
+#: src/gui/setup_players.cpp:54
+msgid "Relation"
+msgstr ""
+
+#: src/gui/setup_players.cpp:58
+msgid "Neutral"
+msgstr ""
+
+#: src/gui/setup_players.cpp:59
+msgid "Friend"
+msgstr ""
+
+#: src/gui/setup_players.cpp:60
+msgid "Disregarded"
+msgstr ""
+
+#: src/gui/setup_players.cpp:61
+msgid "Ignored"
+msgstr ""
+
+#: src/gui/setup_players.cpp:214
+msgid "Save player list"
+msgstr ""
+
+#: src/gui/setup_players.cpp:216
+msgid "Allow trading"
+msgstr ""
+
+#: src/gui/setup_players.cpp:218
+msgid "Allow whispers"
+msgstr ""
+
+#: src/gui/setup_players.cpp:245
+msgid "When ignoring:"
+msgstr ""
+
+#: src/gui/setup_video.cpp:112
+msgid "Full screen"
+msgstr "Ecrã completo"
+
+#: src/gui/setup_video.cpp:113
+msgid "OpenGL"
+msgstr "OpenGL"
+
+#: src/gui/setup_video.cpp:114
+msgid "Custom cursor"
+msgstr "Cursor personalizado"
+
+#: src/gui/setup_video.cpp:116
+msgid "FPS Limit:"
+msgstr "Limite de FPS:"
+
+#: src/gui/setup_video.cpp:135
+msgid "Gui opacity"
+msgstr "Opacidade do Interface"
+
+#: src/gui/setup_video.cpp:192
+msgid "Scroll radius"
+msgstr ""
+
+#: src/gui/setup_video.cpp:200
+msgid "Scroll laziness"
+msgstr ""
+
+#: src/gui/setup_video.cpp:208
+msgid "Ambient FX"
+msgstr "Efeitos Ambientais"
+
+#: src/gui/setup_video.cpp:215 src/gui/setup_video.cpp:412
+msgid "off"
+msgstr "desligado"
+
+#: src/gui/setup_video.cpp:218 src/gui/setup_video.cpp:234
+#: src/gui/setup_video.cpp:415 src/gui/setup_video.cpp:429
+msgid "low"
+msgstr "baixo"
+
+#: src/gui/setup_video.cpp:221 src/gui/setup_video.cpp:240
+#: src/gui/setup_video.cpp:418 src/gui/setup_video.cpp:435
+msgid "high"
+msgstr "elevado"
+
+#: src/gui/setup_video.cpp:227
+msgid "Particle Detail"
+msgstr ""
+
+#: src/gui/setup_video.cpp:237 src/gui/setup_video.cpp:432
+msgid "medium"
+msgstr ""
+
+#: src/gui/setup_video.cpp:243 src/gui/setup_video.cpp:438
+msgid "max"
+msgstr ""
+
+#: src/gui/setup_video.cpp:309
+msgid "Switching to full screen"
+msgstr "Mudar para ecrã completo"
+
+#: src/gui/setup_video.cpp:310
+msgid "Restart needed for changes to take effect."
+msgstr "É necessário reiniciar para as alterações terem efeito."
+
+#: src/gui/setup_video.cpp:322
+msgid "Changing OpenGL"
+msgstr "Mudando OpenGL"
+
+#: src/gui/setup_video.cpp:323
+msgid "Applying change to OpenGL requires restart."
+msgstr "É necessário reiniciar para as alterações ao OpenGl terem efeito."
+
+#: src/gui/skill.cpp:79
+msgid "Mystery Skill"
+msgstr ""
+
+#: src/gui/skill.cpp:132 src/gui/skill.cpp:188
+#, c-format
+msgid "Skill points: %d"
+msgstr ""
+
+#: src/gui/skill.cpp:133
+msgid "Up"
+msgstr ""
+
+#: src/gui/status.cpp:52 src/gui/status.cpp:235
+#, fuzzy, c-format
+msgid "Job: %d"
+msgstr "Nível: %d"
+
+#: src/gui/status.cpp:53 src/gui/status.cpp:238
+#, fuzzy, c-format
+msgid "Money: %d GP"
+msgstr "Dinheiro: %d"
+
+#: src/gui/status.cpp:127
+#, fuzzy
+msgid "Stats"
+msgstr "Estado"
+
+#: src/gui/status.cpp:128
+msgid "Total"
+msgstr ""
+
+#: src/gui/status.cpp:129
+msgid "Cost"
+msgstr ""
+
+#: src/gui/status.cpp:132
+#, fuzzy
+msgid "Attack:"
+msgstr ""
+"Copy text \t\r\n"
+"Ataque %+d"
+
+#: src/gui/status.cpp:133
+#, fuzzy
+msgid "Defense:"
+msgstr ""
+"Copy text \t\r\n"
+"Defesa %+d"
+
+#: src/gui/status.cpp:134
+#, fuzzy
+msgid "M.Attack:"
+msgstr ""
+"Copy text \t\r\n"
+"Ataque %+d"
+
+#: src/gui/status.cpp:135
+#, fuzzy
+msgid "M.Defense:"
+msgstr ""
+"Copy text \t\r\n"
+"Defesa %+d"
+
+#: src/gui/status.cpp:136
+#, c-format
+msgid "% Accuracy:"
+msgstr ""
+
+#: src/gui/status.cpp:137
+#, c-format
+msgid "% Evade:"
+msgstr ""
+
+#: src/gui/status.cpp:138
+msgid "% Reflex:"
+msgstr ""
+
+#: src/gui/status.cpp:282
+#, fuzzy
+msgid "Strength"
+msgstr "Força:"
+
+#: src/gui/status.cpp:283
+#, fuzzy
+msgid "Agility"
+msgstr "Agilidade:"
+
+#: src/gui/status.cpp:284
+#, fuzzy
+msgid "Vitality"
+msgstr "Vitalidade:"
+
+#: src/gui/status.cpp:285
+#, fuzzy
+msgid "Intelligence"
+msgstr "Inteligência:"
+
+#: src/gui/status.cpp:286
+#, fuzzy
+msgid "Dexterity"
+msgstr "Destreza:"
+
+#: src/gui/status.cpp:287
+msgid "Luck"
+msgstr ""
+
+#: src/gui/status.cpp:305
+#, c-format
+msgid "Remaining Status Points: %d"
+msgstr ""
+
+#: src/gui/trade.cpp:61
+msgid "Add"
+msgstr "Adicionar"
+
+#: src/gui/trade.cpp:64
+msgid "Trade"
+msgstr ""
+
+#: src/gui/trade.cpp:80 src/gui/trade.cpp:156 src/gui/trade.cpp:204
+#, c-format
+msgid "You get %d GP."
+msgstr "Recebe %d GP."
+
+#: src/gui/trade.cpp:81
+msgid "You give:"
+msgstr "Dá:"
+
+#: src/gui/trade.cpp:283
+msgid "Failed adding item. You can not overlap one kind of item on the window."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:93
+msgid "Updating..."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:119
+msgid "Play"
+msgstr ""
+
+#: src/gui/updatewindow.cpp:525
+msgid "Completed"
+msgstr ""
+
+#: src/resources/itemdb.cpp:99
+msgid "Unnamed"
+msgstr ""
+
+#: src/main.cpp:769
+msgid "Got disconnected from server!"
+msgstr ""
+
+#: src/main.cpp:956
+#, fuzzy
+msgid "Connecting to map server..."
+msgstr "Conectando..."
+
+#: src/main.cpp:964
+msgid "Connecting to character server..."
+msgstr ""
+
+#: src/main.cpp:972
+msgid "Connecting to account server..."
+msgstr ""
+
+#~ msgid "Unregister"
+#~ msgstr "Remover o Registo"
+
+#~ msgid "Willpower:"
+#~ msgstr "Força de Vontade:"
+
+#~ msgid "Please distribute %d points"
+#~ msgstr "Por favor distribua %d potos"
+
+#~ msgid "Your name needs to be at least 4 characters."
+#~ msgstr "O seu nome necessita de pelo menos 4 caracteres"
+
+#~ msgid "Character stats OK"
+#~ msgstr "Estatisticas da personagem OK"
+
+#~ msgid "Please remove %d points"
+#~ msgstr "Por favor remova %d pontos"
+
+#~ msgid "Split"
+#~ msgstr "Dividir"
+
+#~ msgid "Select amount of items to split."
+#~ msgstr "Seleccionar a quantidade de itens a dividir."
+
+#~ msgid "@@split|Split@@"
+#~ msgstr "@@split|Dividir@@"
+
+#~ msgid "Switch server"
+#~ msgstr "Mudar de servidor"
+
+#~ msgid "Switch character"
+#~ msgstr "Mudar de personagem"
+
+#~ msgid "Email:"
+#~ msgstr "Email:"
+
+#~ msgid "Choose your Mana World Server"
+#~ msgstr "Escolha o seu Servidor de Mana World"
+
+#~ msgid "Port:"
+#~ msgstr "Porta:"
+
+#~ msgid "Please type both the address and the port of a server."
+#~ msgstr "Por favor escreva o endereço e a porta do servidor."
+
+#~ msgid "Propose trade"
+#~ msgstr "Propor Negócio"
+
+#~ msgid "Confirm trade"
+#~ msgstr "Confirmar negócio"
+
+#~ msgid "Change"
+#~ msgstr "Modificar"
+
+#~ msgid "HP %+d"
+#~ msgstr "HP %+d"
+
+#~ msgid "MP %+d"
+#~ msgstr "MP %+d"
+
+#~ msgid "Confirm"
+#~ msgstr "Confirmar"
+
+#~ msgid "Charisma:"
+#~ msgstr "Carisma:"
+
+#~ msgid "Total Weight: %d - Maximum Weight: %d"
+#~ msgstr "Peso Total: %d - Peso Máximo: %d"
+
+#~ msgid "Keep"
+#~ msgstr "Manter"
diff --git a/po/pt_BR.po b/po/pt_BR.po
new file mode 100644
index 00000000..586cfc2d
--- /dev/null
+++ b/po/pt_BR.po
@@ -0,0 +1,1009 @@
+# Brazilian Portuguese translation for tmw
+# Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008
+# This file is distributed under the same license as the tmw package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: tmw\n"
+"Report-Msgid-Bugs-To: themanaworld-devel@lists.sourceforge.net\n"
+"POT-Creation-Date: 2009-01-08 22:10+0100\n"
+"PO-Revision-Date: 2008-12-14 21:37+0000\n"
+"Last-Translator: Enrico Nicoletto <liverig@gmail.com>\n"
+"Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-01-06 12:40+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#: src/gui/buy.cpp:43 src/gui/buy.cpp:61 src/gui/buysell.cpp:35
+msgid "Buy"
+msgstr "Comprar"
+
+#: src/gui/buy.cpp:58 src/gui/buy.cpp:239 src/gui/sell.cpp:65
+#: src/gui/sell.cpp:259
+#, c-format
+msgid "Price: %d GP / Total: %d GP"
+msgstr "Preço: %d GP / Total: %d GP"
+
+#: src/gui/buy.cpp:62 src/gui/sell.cpp:69
+msgid "Quit"
+msgstr "Sair"
+
+#: src/gui/buy.cpp:63 src/gui/buy.cpp:206 src/gui/buy.cpp:224
+#: src/gui/inventorywindow.cpp:150 src/gui/inventorywindow.cpp:160
+#: src/gui/sell.cpp:70 src/gui/sell.cpp:230 src/gui/sell.cpp:244
+#: src/gui/trade.cpp:94 src/gui/trade.cpp:266
+#, c-format
+msgid "Description: %s"
+msgstr "Descrição: %s"
+
+#: src/gui/buy.cpp:64 src/gui/buy.cpp:208 src/gui/buy.cpp:225
+#: src/gui/inventorywindow.cpp:149 src/gui/inventorywindow.cpp:158
+#: src/gui/sell.cpp:71 src/gui/sell.cpp:232 src/gui/sell.cpp:245
+#, c-format
+msgid "Effect: %s"
+msgstr "Efeito: %s"
+
+#: src/gui/buysell.cpp:31
+#, fuzzy
+msgid "Shop"
+msgstr "Parar"
+
+#: src/gui/buysell.cpp:35 src/gui/sell.cpp:48 src/gui/sell.cpp:68
+msgid "Sell"
+msgstr "Vender"
+
+#: src/gui/buysell.cpp:35 src/gui/char_select.cpp:85
+#: src/gui/char_select.cpp:258 src/gui/char_server.cpp:60
+#: src/gui/connection.cpp:47 src/gui/item_amount.cpp:61 src/gui/login.cpp:52
+#: src/gui/npclistdialog.cpp:45 src/gui/register.cpp:76 src/gui/setup.cpp:58
+#: src/gui/trade.cpp:63 src/gui/updatewindow.cpp:118
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: src/gui/char_select.cpp:63
+msgid "Confirm Character Delete"
+msgstr "Confimar exclusão do personagem"
+
+#: src/gui/char_select.cpp:64
+msgid "Are you sure you want to delete this character?"
+msgstr "Tem certeza de que deseja excluir este personagem?"
+
+#: src/gui/char_select.cpp:81
+msgid "Select Character"
+msgstr "Selecionar personagem"
+
+#: src/gui/char_select.cpp:84 src/gui/item_amount.cpp:60 src/gui/login.cpp:51
+#: src/gui/ok_dialog.cpp:37 src/gui/trade.cpp:62
+msgid "Ok"
+msgstr "Ok"
+
+#: src/gui/char_select.cpp:86
+msgid "New"
+msgstr "Novo"
+
+#: src/gui/char_select.cpp:87 src/gui/setup_players.cpp:220
+msgid "Delete"
+msgstr "Excluir"
+
+#: src/gui/char_select.cpp:88
+msgid "Previous"
+msgstr "Anterior"
+
+#: src/gui/char_select.cpp:89
+msgid "Next"
+msgstr "Próximo"
+
+#: src/gui/char_select.cpp:91 src/gui/char_select.cpp:171
+#: src/gui/char_select.cpp:183 src/gui/inventorywindow.cpp:148
+#: src/gui/inventorywindow.cpp:156 src/gui/trade.cpp:92 src/gui/trade.cpp:264
+#, c-format
+msgid "Name: %s"
+msgstr "Nome: %s"
+
+#: src/gui/char_select.cpp:92 src/gui/char_select.cpp:172
+#: src/gui/char_select.cpp:184 src/gui/status.cpp:51 src/gui/status.cpp:232
+#, c-format
+msgid "Level: %d"
+msgstr "Nível: %d"
+
+#: src/gui/char_select.cpp:93 src/gui/char_select.cpp:173
+#: src/gui/char_select.cpp:185
+#, fuzzy, c-format
+msgid "Job Level: %d"
+msgstr "Nível: %d"
+
+#: src/gui/char_select.cpp:94 src/gui/char_select.cpp:186
+#, c-format
+msgid "Money: %d"
+msgstr "Dinheiro: %d"
+
+#: src/gui/char_select.cpp:174
+#, c-format
+msgid "Gold: %d"
+msgstr ""
+
+#: src/gui/char_select.cpp:243
+msgid "Create Character"
+msgstr "Criar Personagem"
+
+#: src/gui/char_select.cpp:250 src/gui/login.cpp:44 src/gui/register.cpp:65
+msgid "Name:"
+msgstr "Nome:"
+
+#: src/gui/char_select.cpp:253
+msgid "Hair Color:"
+msgstr "Cor do Cabelo:"
+
+#: src/gui/char_select.cpp:256
+msgid "Hair Style:"
+msgstr "Estilo do Cabelo:"
+
+#: src/gui/char_select.cpp:257
+msgid "Create"
+msgstr "Criar"
+
+#: src/gui/char_server.cpp:52
+#, fuzzy
+msgid "Select Server"
+msgstr "Selecionar personagem"
+
+#: src/gui/char_server.cpp:59 src/gui/npclistdialog.cpp:44
+#: src/gui/npc_text.cpp:46
+msgid "OK"
+msgstr ""
+
+#: src/gui/chat.cpp:122
+msgid "Global announcement:"
+msgstr ""
+
+#: src/gui/chat.cpp:125
+#, c-format
+msgid "Global announcement from %s:"
+msgstr ""
+
+#: src/gui/chat.cpp:140 src/gui/login.cpp:46 src/gui/register.cpp:68
+msgid "Server:"
+msgstr "Servidor:"
+
+#: src/gui/chat.cpp:146
+#, c-format
+msgid "%s whispers:"
+msgstr ""
+
+#: src/gui/chat.cpp:283
+#, c-format
+msgid "Whispering to %s: %s"
+msgstr ""
+
+#: src/gui/chat.cpp:356
+msgid "Unknown command"
+msgstr ""
+
+#: src/gui/chat.cpp:366
+msgid "Trade failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:369
+msgid "Emote failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:372
+msgid "Sit failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:375
+msgid "Chat creating failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:378
+msgid "Could not join party!"
+msgstr ""
+
+#: src/gui/chat.cpp:381
+msgid "Cannot shout!"
+msgstr ""
+
+#: src/gui/chat.cpp:389
+msgid "You have not yet reached a high enough lvl!"
+msgstr ""
+
+#: src/gui/chat.cpp:392
+msgid "Insufficient HP!"
+msgstr ""
+
+#: src/gui/chat.cpp:395
+msgid "Insufficient SP!"
+msgstr ""
+
+#: src/gui/chat.cpp:398
+msgid "You have no memos!"
+msgstr ""
+
+#: src/gui/chat.cpp:401
+msgid "You cannot do that right now!"
+msgstr ""
+
+#: src/gui/chat.cpp:404
+msgid "Seems you need more Zeny... ;-)"
+msgstr ""
+
+#: src/gui/chat.cpp:407
+msgid "You cannot use this skill with that kind of weapon!"
+msgstr ""
+
+#: src/gui/chat.cpp:410
+msgid "You need another red gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:413
+msgid "You need another blue gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:416
+msgid "You're carrying to much to do this!"
+msgstr ""
+
+#: src/gui/chat.cpp:419
+msgid "Huh? What's that?"
+msgstr ""
+
+#: src/gui/chat.cpp:425
+msgid "Warp failed..."
+msgstr ""
+
+#: src/gui/chat.cpp:428
+msgid "Could not steal anything..."
+msgstr ""
+
+#: src/gui/chat.cpp:431
+msgid "Poison had no effect..."
+msgstr ""
+
+#: src/gui/chat.cpp:496
+msgid "-- Help --"
+msgstr ""
+
+#: src/gui/chat.cpp:499
+msgid "/announce: Global announcement (GM only)"
+msgstr ""
+
+#: src/gui/chat.cpp:500
+msgid "/clear: Clears this window"
+msgstr ""
+
+#: src/gui/chat.cpp:501
+msgid "/help: Display this help"
+msgstr ""
+
+#: src/gui/chat.cpp:502
+msgid "/where: Display map name"
+msgstr ""
+
+#: src/gui/chat.cpp:503
+msgid "/whisper <nick> <message>: Sends a private <message> to <nick>"
+msgstr ""
+
+#: src/gui/chat.cpp:505
+msgid "/w <nick> <message>: Short form for /whisper"
+msgstr ""
+
+#: src/gui/chat.cpp:506
+msgid "/who: Display number of online users"
+msgstr ""
+
+#: src/gui/chat.cpp:507
+msgid "For more information, type /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:512
+msgid "Command: /announce <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:513
+msgid "*** only available to a GM ***"
+msgstr ""
+
+#: src/gui/chat.cpp:514
+msgid "This command sends the message <msg> to all players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:520
+msgid "Command: /clear"
+msgstr ""
+
+#: src/gui/chat.cpp:521
+msgid "This command clears the chat log of previous chat."
+msgstr ""
+
+#: src/gui/chat.cpp:527
+msgid "Command: /help"
+msgstr ""
+
+#: src/gui/chat.cpp:528
+msgid "This command displays a list of all commands available."
+msgstr ""
+
+#: src/gui/chat.cpp:530
+msgid "Command: /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:531
+msgid "This command displays help on <command>."
+msgstr ""
+
+#: src/gui/chat.cpp:536
+msgid "Command: /where"
+msgstr ""
+
+#: src/gui/chat.cpp:537
+msgid "This command displays the name of the current map."
+msgstr ""
+
+#: src/gui/chat.cpp:543
+msgid "Command: /whisper <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:544
+msgid "Command: /w <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:545
+msgid "This command sends the message <msg> to <nick>."
+msgstr ""
+
+#: src/gui/chat.cpp:547
+msgid "If the <nick> has spaces in it, enclose it in double quotes (\")."
+msgstr ""
+
+#: src/gui/chat.cpp:553
+msgid "Command: /who"
+msgstr ""
+
+#: src/gui/chat.cpp:554
+msgid "This command displays the number of players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:558
+msgid "Unknown command."
+msgstr ""
+
+#: src/gui/chat.cpp:559
+msgid "Type /help for a list of commands."
+msgstr ""
+
+#: src/gui/confirm_dialog.cpp:35
+msgid "Yes"
+msgstr "Sim"
+
+#: src/gui/confirm_dialog.cpp:36
+msgid "No"
+msgstr "Não"
+
+#: src/gui/connection.cpp:49 src/gui/updatewindow.cpp:116
+msgid "Connecting..."
+msgstr "Conectando..."
+
+#: src/gui/equipmentwindow.cpp:38 src/gui/menuwindow.cpp:62
+msgid "Equipment"
+msgstr "Equipamento"
+
+#: src/gui/help.cpp:33
+msgid "Help"
+msgstr ""
+
+#: src/gui/help.cpp:41
+msgid "Close"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:46 src/gui/menuwindow.cpp:63
+msgid "Inventory"
+msgstr "Inventório"
+
+#: src/gui/inventorywindow.cpp:56 src/gui/inventorywindow.cpp:232
+#: src/gui/skill.cpp:134
+msgid "Use"
+msgstr "Usar"
+
+#: src/gui/inventorywindow.cpp:57
+msgid "Drop"
+msgstr "Descartar"
+
+#: src/gui/inventorywindow.cpp:99
+#, c-format
+msgid "Weight: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:104
+#, c-format
+msgid "Slots used: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:225
+msgid "Unequip"
+msgstr "Desequipar"
+
+#: src/gui/inventorywindow.cpp:228
+msgid "Equip"
+msgstr "Equipar"
+
+#: src/gui/item_amount.cpp:76
+msgid "Select amount of items to trade."
+msgstr "Selecionar montante de itens para negociar."
+
+#: src/gui/item_amount.cpp:80
+msgid "Select amount of items to drop."
+msgstr "Selecionar montante de itens para descartar."
+
+#: src/gui/login.cpp:42
+msgid "Login"
+msgstr "Login"
+
+#: src/gui/login.cpp:45 src/gui/register.cpp:66
+msgid "Password:"
+msgstr "Senha:"
+
+#: src/gui/login.cpp:50
+msgid "Remember Username"
+msgstr "Lembrar nome de usuário"
+
+#: src/gui/login.cpp:53 src/gui/register.cpp:75
+msgid "Register"
+msgstr "Registrar"
+
+#: src/gui/menuwindow.cpp:61
+msgid "Status"
+msgstr "Status"
+
+#: src/gui/menuwindow.cpp:64 src/gui/skill.cpp:119
+msgid "Skills"
+msgstr "Habilidades"
+
+#: src/gui/menuwindow.cpp:65
+msgid "Shortcut"
+msgstr "Atalho"
+
+#: src/gui/menuwindow.cpp:66 src/main.cpp:716
+msgid "Setup"
+msgstr "Configurar"
+
+#: src/gui/minimap.cpp:34
+msgid "MiniMap"
+msgstr "MiniMapa"
+
+#: src/gui/npclistdialog.cpp:35 src/gui/npc_text.cpp:35
+msgid "NPC"
+msgstr "NPC"
+
+#: src/gui/popupmenu.cpp:81
+#, c-format
+msgid "@@trade|Trade With %s@@"
+msgstr "@@Negociar|Negociar com %s@@"
+
+#: src/gui/popupmenu.cpp:83
+#, c-format
+msgid "@@attack|Attack %s@@"
+msgstr "@@atacar|Atacar %s@@"
+
+#: src/gui/popupmenu.cpp:114
+msgid "@@talk|Talk To NPC@@"
+msgstr "@@falar|Falar com NPC@@"
+
+#: src/gui/popupmenu.cpp:124 src/gui/popupmenu.cpp:140
+#: src/gui/popupmenu.cpp:293
+msgid "@@cancel|Cancel@@"
+msgstr "@@cancelar|Cancelar@@"
+
+#: src/gui/popupmenu.cpp:136
+#, c-format
+msgid "@@pickup|Pick Up %s@@"
+msgstr "@@pegar|Pegar %s@@"
+
+#: src/gui/popupmenu.cpp:283
+#, fuzzy
+msgid "@@use|Unequip@@"
+msgstr "@@usar|Equipar@@"
+
+#: src/gui/popupmenu.cpp:285
+msgid "@@use|Equip@@"
+msgstr "@@usar|Equipar@@"
+
+#: src/gui/popupmenu.cpp:288
+msgid "@@use|Use@@"
+msgstr "@@usar|Usar@@"
+
+#: src/gui/popupmenu.cpp:290
+msgid "@@drop|Drop@@"
+msgstr "@@descartar|Descartar@@"
+
+#: src/gui/popupmenu.cpp:291
+msgid "@@description|Description@@"
+msgstr "@@descrição|Descrição@@"
+
+#: src/gui/register.cpp:67
+msgid "Confirm:"
+msgstr "Confirmar:"
+
+#: src/gui/register.cpp:73
+msgid "Male"
+msgstr "Homem"
+
+#: src/gui/register.cpp:74
+msgid "Female"
+msgstr "Mulher"
+
+#: src/gui/register.cpp:176
+#, c-format
+msgid "The username needs to be at least %d characters long."
+msgstr "O nome do usuário precisa ter pelo menos %d caracteres."
+
+#: src/gui/register.cpp:184
+#, c-format
+msgid "The username needs to be less than %d characters long."
+msgstr "O nome do usuário tem que ser inferior a %d caracteres."
+
+#: src/gui/register.cpp:192
+#, c-format
+msgid "The password needs to be at least %d characters long."
+msgstr "A senha deve ter pelo menos %d caracteres."
+
+#: src/gui/register.cpp:200
+#, c-format
+msgid "The password needs to be less than %d characters long."
+msgstr "A senha deve ser menor que %d caracteres."
+
+#: src/gui/register.cpp:207
+msgid "Passwords do not match."
+msgstr "Senhas não conferem."
+
+#: src/gui/register.cpp:227 src/main.cpp:945
+msgid "Error"
+msgstr "Erro"
+
+#: src/gui/setup_audio.cpp:40
+msgid "Sound"
+msgstr "Som"
+
+#: src/gui/setup_audio.cpp:46
+msgid "Sfx volume"
+msgstr "Volume Sfx"
+
+#: src/gui/setup_audio.cpp:47
+msgid "Music volume"
+msgstr "Volume da Música"
+
+#: src/gui/setup.cpp:58
+msgid "Apply"
+msgstr "Aplicar"
+
+#: src/gui/setup.cpp:58
+msgid "Reset Windows"
+msgstr "Restaurar janelas"
+
+#: src/gui/setup.cpp:79
+msgid "Video"
+msgstr "Vídeo"
+
+#: src/gui/setup.cpp:83
+msgid "Audio"
+msgstr "Ãudio"
+
+#: src/gui/setup.cpp:87
+msgid "Joystick"
+msgstr "Joystick"
+
+#: src/gui/setup.cpp:91
+msgid "Keyboard"
+msgstr "Teclado"
+
+#: src/gui/setup.cpp:95
+msgid "Players"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:36 src/gui/setup_joystick.cpp:70
+msgid "Press the button to start calibration"
+msgstr "Aperto o botão para começar a calibração"
+
+#: src/gui/setup_joystick.cpp:37 src/gui/setup_joystick.cpp:68
+msgid "Calibrate"
+msgstr "Calibrar"
+
+#: src/gui/setup_joystick.cpp:38
+msgid "Enable joystick"
+msgstr "Habilitar joystick"
+
+#: src/gui/setup_joystick.cpp:73
+msgid "Stop"
+msgstr "Parar"
+
+#: src/gui/setup_joystick.cpp:74
+msgid "Rotate the stick"
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:88
+msgid "Assign"
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:94
+#, fuzzy
+msgid "Default"
+msgstr "Excluir"
+
+#: src/gui/setup_keyboard.cpp:115
+msgid "Key Conflict(s) Detected."
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:116
+msgid "Resolve them, or gameplay may result in strange behaviour."
+msgstr ""
+
+#: src/gui/setup_players.cpp:53
+#, fuzzy
+msgid "Name"
+msgstr "Nome:"
+
+#: src/gui/setup_players.cpp:54
+msgid "Relation"
+msgstr ""
+
+#: src/gui/setup_players.cpp:58
+msgid "Neutral"
+msgstr ""
+
+#: src/gui/setup_players.cpp:59
+msgid "Friend"
+msgstr ""
+
+#: src/gui/setup_players.cpp:60
+msgid "Disregarded"
+msgstr ""
+
+#: src/gui/setup_players.cpp:61
+msgid "Ignored"
+msgstr ""
+
+#: src/gui/setup_players.cpp:214
+msgid "Save player list"
+msgstr ""
+
+#: src/gui/setup_players.cpp:216
+msgid "Allow trading"
+msgstr ""
+
+#: src/gui/setup_players.cpp:218
+msgid "Allow whispers"
+msgstr ""
+
+#: src/gui/setup_players.cpp:245
+msgid "When ignoring:"
+msgstr ""
+
+#: src/gui/setup_video.cpp:112
+msgid "Full screen"
+msgstr "Tela cheia"
+
+#: src/gui/setup_video.cpp:113
+msgid "OpenGL"
+msgstr "OpenGL"
+
+#: src/gui/setup_video.cpp:114
+msgid "Custom cursor"
+msgstr "Cursor customizado"
+
+#: src/gui/setup_video.cpp:116
+msgid "FPS Limit:"
+msgstr "Limite FPS:"
+
+#: src/gui/setup_video.cpp:135
+msgid "Gui opacity"
+msgstr "Opacidade da GUI"
+
+#: src/gui/setup_video.cpp:192
+msgid "Scroll radius"
+msgstr ""
+
+#: src/gui/setup_video.cpp:200
+msgid "Scroll laziness"
+msgstr ""
+
+#: src/gui/setup_video.cpp:208
+msgid "Ambient FX"
+msgstr "Ambiente FX"
+
+#: src/gui/setup_video.cpp:215 src/gui/setup_video.cpp:412
+msgid "off"
+msgstr "desligado"
+
+#: src/gui/setup_video.cpp:218 src/gui/setup_video.cpp:234
+#: src/gui/setup_video.cpp:415 src/gui/setup_video.cpp:429
+msgid "low"
+msgstr "baixo"
+
+#: src/gui/setup_video.cpp:221 src/gui/setup_video.cpp:240
+#: src/gui/setup_video.cpp:418 src/gui/setup_video.cpp:435
+msgid "high"
+msgstr "alto"
+
+#: src/gui/setup_video.cpp:227
+msgid "Particle Detail"
+msgstr ""
+
+#: src/gui/setup_video.cpp:237 src/gui/setup_video.cpp:432
+msgid "medium"
+msgstr ""
+
+#: src/gui/setup_video.cpp:243 src/gui/setup_video.cpp:438
+msgid "max"
+msgstr ""
+
+#: src/gui/setup_video.cpp:309
+msgid "Switching to full screen"
+msgstr "Mudando para Tela cheia"
+
+#: src/gui/setup_video.cpp:310
+msgid "Restart needed for changes to take effect."
+msgstr "É preciso reiniciar para as mudanças terem efeito."
+
+#: src/gui/setup_video.cpp:322
+msgid "Changing OpenGL"
+msgstr "Trocando OpenGL"
+
+#: src/gui/setup_video.cpp:323
+msgid "Applying change to OpenGL requires restart."
+msgstr "Aplicando mudança a OpenGL requer reiniciar o jogo."
+
+#: src/gui/skill.cpp:79
+msgid "Mystery Skill"
+msgstr ""
+
+#: src/gui/skill.cpp:132 src/gui/skill.cpp:188
+#, c-format
+msgid "Skill points: %d"
+msgstr ""
+
+#: src/gui/skill.cpp:133
+msgid "Up"
+msgstr ""
+
+#: src/gui/status.cpp:52 src/gui/status.cpp:235
+#, fuzzy, c-format
+msgid "Job: %d"
+msgstr "Nível: %d"
+
+#: src/gui/status.cpp:53 src/gui/status.cpp:238
+#, fuzzy, c-format
+msgid "Money: %d GP"
+msgstr "Dinheiro: %d"
+
+#: src/gui/status.cpp:127
+#, fuzzy
+msgid "Stats"
+msgstr "Status"
+
+#: src/gui/status.cpp:128
+msgid "Total"
+msgstr ""
+
+#: src/gui/status.cpp:129
+msgid "Cost"
+msgstr ""
+
+#: src/gui/status.cpp:132
+#, fuzzy
+msgid "Attack:"
+msgstr "Ataque %+d"
+
+#: src/gui/status.cpp:133
+#, fuzzy
+msgid "Defense:"
+msgstr "Defesa %+d"
+
+#: src/gui/status.cpp:134
+#, fuzzy
+msgid "M.Attack:"
+msgstr "Ataque %+d"
+
+#: src/gui/status.cpp:135
+#, fuzzy
+msgid "M.Defense:"
+msgstr "Defesa %+d"
+
+#: src/gui/status.cpp:136
+#, c-format
+msgid "% Accuracy:"
+msgstr ""
+
+#: src/gui/status.cpp:137
+#, c-format
+msgid "% Evade:"
+msgstr ""
+
+#: src/gui/status.cpp:138
+msgid "% Reflex:"
+msgstr ""
+
+#: src/gui/status.cpp:282
+#, fuzzy
+msgid "Strength"
+msgstr "Força:"
+
+#: src/gui/status.cpp:283
+#, fuzzy
+msgid "Agility"
+msgstr "Agilidade:"
+
+#: src/gui/status.cpp:284
+#, fuzzy
+msgid "Vitality"
+msgstr "Vitalidade:"
+
+#: src/gui/status.cpp:285
+#, fuzzy
+msgid "Intelligence"
+msgstr "Inteligência:"
+
+#: src/gui/status.cpp:286
+#, fuzzy
+msgid "Dexterity"
+msgstr "Destreza:"
+
+#: src/gui/status.cpp:287
+msgid "Luck"
+msgstr ""
+
+#: src/gui/status.cpp:305
+#, c-format
+msgid "Remaining Status Points: %d"
+msgstr ""
+
+#: src/gui/trade.cpp:61
+msgid "Add"
+msgstr "Adicionar"
+
+#: src/gui/trade.cpp:64
+msgid "Trade"
+msgstr ""
+
+#: src/gui/trade.cpp:80 src/gui/trade.cpp:156 src/gui/trade.cpp:204
+#, c-format
+msgid "You get %d GP."
+msgstr "Voc pegou %d GP."
+
+#: src/gui/trade.cpp:81
+msgid "You give:"
+msgstr "Você dá:"
+
+#: src/gui/trade.cpp:283
+msgid "Failed adding item. You can not overlap one kind of item on the window."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:93
+msgid "Updating..."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:119
+msgid "Play"
+msgstr ""
+
+#: src/gui/updatewindow.cpp:525
+msgid "Completed"
+msgstr ""
+
+#: src/resources/itemdb.cpp:99
+msgid "Unnamed"
+msgstr ""
+
+#: src/main.cpp:769
+msgid "Got disconnected from server!"
+msgstr ""
+
+#: src/main.cpp:956
+#, fuzzy
+msgid "Connecting to map server..."
+msgstr "Conectando..."
+
+#: src/main.cpp:964
+msgid "Connecting to character server..."
+msgstr ""
+
+#: src/main.cpp:972
+msgid "Connecting to account server..."
+msgstr ""
+
+#~ msgid "Account and Character Management"
+#~ msgstr "Gerenciamento de Conta e Personagem"
+
+#~ msgid "Unregister"
+#~ msgstr "Cancelar Registro"
+
+#~ msgid "Change Password"
+#~ msgstr "Alterar senha"
+
+#~ msgid "Change Email Address"
+#~ msgstr "Alterar e-mail"
+
+#~ msgid "Account: %s"
+#~ msgstr "Conta: %s"
+
+#~ msgid "Willpower:"
+#~ msgstr "Força de Vontade:"
+
+#~ msgid "Please distribute %d points"
+#~ msgstr "Por favor distribua %d pontos"
+
+#~ msgid "Your name needs to be at least 4 characters."
+#~ msgstr "Seu nome precisa ter no mínimo 4 caracteres."
+
+#~ msgid "Character stats OK"
+#~ msgstr "Status do personagem OK"
+
+#~ msgid "Please remove %d points"
+#~ msgstr "Por favor remova %d pontos"
+
+#~ msgid "Split"
+#~ msgstr "Dividir"
+
+#~ msgid "Select amount of items to split."
+#~ msgstr "Selecionar montante de itens para dividir."
+
+#~ msgid "Guilds"
+#~ msgstr "Guildas"
+
+#~ msgid "@@guild|Invite %s@@"
+#~ msgstr "@@guilda|convidar %s@@"
+
+#~ msgid "@@party|Invite %s to join your party@@"
+#~ msgstr "@@grupo|Convidar %s para entrar para o seu grupo"
+
+#~ msgid "@@split|Split@@"
+#~ msgstr "@@dividir|Dividir@@"
+
+#~ msgid "Switch server"
+#~ msgstr "Trocar servidor"
+
+#~ msgid "Switch character"
+#~ msgstr "Trocar de Personagem"
+
+#~ msgid "Email:"
+#~ msgstr "Email:"
+
+#~ msgid "Choose your Mana World Server"
+#~ msgstr "Escolha seu Servidor de Mana World"
+
+#~ msgid "Port:"
+#~ msgstr "Porta:"
+
+#~ msgid "Please type both the address and the port of a server."
+#~ msgstr "Por favor especifique ambos os Endereços e a Porta do servidor"
+
+#~ msgid "Visible names"
+#~ msgstr "Nomes visíveis"
+
+#~ msgid "Propose trade"
+#~ msgstr "Propor negócio"
+
+#~ msgid "Confirm trade"
+#~ msgstr "Confirmar negócio"
+
+#~ msgid "Change"
+#~ msgstr "Mudar"
+
+#~ msgid "HP %+d"
+#~ msgstr "HP %+d"
+
+#~ msgid "MP %+d"
+#~ msgstr "MP %+d"
+
+#~ msgid "Confirm"
+#~ msgstr "Confirmar"
+
+#~ msgid "Charisma:"
+#~ msgstr "Carisma:"
+
+#~ msgid "Total Weight: %d - Maximum Weight: %d"
+#~ msgstr "Peso Total: %d - Peso Máximo: %d"
+
+#~ msgid "Keep"
+#~ msgstr "Manter"
diff --git a/po/ru.po b/po/ru.po
new file mode 100644
index 00000000..94be1f08
--- /dev/null
+++ b/po/ru.po
@@ -0,0 +1,985 @@
+# Russian translation for tmw
+# Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008
+# This file is distributed under the same license as the tmw package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: tmw\n"
+"Report-Msgid-Bugs-To: themanaworld-devel@lists.sourceforge.net\n"
+"POT-Creation-Date: 2009-01-08 22:10+0100\n"
+"PO-Revision-Date: 2008-01-08 11:50+0000\n"
+"Last-Translator: idle sign <Unknown>\n"
+"Language-Team: Russian <ru@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-01-06 12:40+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#: src/gui/buy.cpp:43 src/gui/buy.cpp:61 src/gui/buysell.cpp:35
+msgid "Buy"
+msgstr "Купить"
+
+#: src/gui/buy.cpp:58 src/gui/buy.cpp:239 src/gui/sell.cpp:65
+#: src/gui/sell.cpp:259
+#, c-format
+msgid "Price: %d GP / Total: %d GP"
+msgstr "СтоимоÑÑ‚ÑŒ: %d GP / Ð’Ñегоl: %d GP"
+
+#: src/gui/buy.cpp:62 src/gui/sell.cpp:69
+msgid "Quit"
+msgstr "Выход"
+
+#: src/gui/buy.cpp:63 src/gui/buy.cpp:206 src/gui/buy.cpp:224
+#: src/gui/inventorywindow.cpp:150 src/gui/inventorywindow.cpp:160
+#: src/gui/sell.cpp:70 src/gui/sell.cpp:230 src/gui/sell.cpp:244
+#: src/gui/trade.cpp:94 src/gui/trade.cpp:266
+#, c-format
+msgid "Description: %s"
+msgstr "ОпиÑание: %s"
+
+#: src/gui/buy.cpp:64 src/gui/buy.cpp:208 src/gui/buy.cpp:225
+#: src/gui/inventorywindow.cpp:149 src/gui/inventorywindow.cpp:158
+#: src/gui/sell.cpp:71 src/gui/sell.cpp:232 src/gui/sell.cpp:245
+#, c-format
+msgid "Effect: %s"
+msgstr "Эффект: %s"
+
+#: src/gui/buysell.cpp:31
+#, fuzzy
+msgid "Shop"
+msgstr "Стоп"
+
+#: src/gui/buysell.cpp:35 src/gui/sell.cpp:48 src/gui/sell.cpp:68
+msgid "Sell"
+msgstr "Продать"
+
+#: src/gui/buysell.cpp:35 src/gui/char_select.cpp:85
+#: src/gui/char_select.cpp:258 src/gui/char_server.cpp:60
+#: src/gui/connection.cpp:47 src/gui/item_amount.cpp:61 src/gui/login.cpp:52
+#: src/gui/npclistdialog.cpp:45 src/gui/register.cpp:76 src/gui/setup.cpp:58
+#: src/gui/trade.cpp:63 src/gui/updatewindow.cpp:118
+msgid "Cancel"
+msgstr "Отмена"
+
+#: src/gui/char_select.cpp:63
+msgid "Confirm Character Delete"
+msgstr ""
+
+#: src/gui/char_select.cpp:64
+msgid "Are you sure you want to delete this character?"
+msgstr "Ð’Ñ‹ уверены, что хотите удалить Ñтого перÑонажа?"
+
+#: src/gui/char_select.cpp:81
+msgid "Select Character"
+msgstr "Выбор перÑонажа"
+
+#: src/gui/char_select.cpp:84 src/gui/item_amount.cpp:60 src/gui/login.cpp:51
+#: src/gui/ok_dialog.cpp:37 src/gui/trade.cpp:62
+msgid "Ok"
+msgstr "Ok"
+
+#: src/gui/char_select.cpp:86
+msgid "New"
+msgstr "Ðовый"
+
+#: src/gui/char_select.cpp:87 src/gui/setup_players.cpp:220
+msgid "Delete"
+msgstr "Удалить"
+
+#: src/gui/char_select.cpp:88
+msgid "Previous"
+msgstr "Предыдущий"
+
+#: src/gui/char_select.cpp:89
+msgid "Next"
+msgstr "Следующий"
+
+#: src/gui/char_select.cpp:91 src/gui/char_select.cpp:171
+#: src/gui/char_select.cpp:183 src/gui/inventorywindow.cpp:148
+#: src/gui/inventorywindow.cpp:156 src/gui/trade.cpp:92 src/gui/trade.cpp:264
+#, c-format
+msgid "Name: %s"
+msgstr "ИмÑ: %s"
+
+#: src/gui/char_select.cpp:92 src/gui/char_select.cpp:172
+#: src/gui/char_select.cpp:184 src/gui/status.cpp:51 src/gui/status.cpp:232
+#, c-format
+msgid "Level: %d"
+msgstr "Уровень: %d"
+
+#: src/gui/char_select.cpp:93 src/gui/char_select.cpp:173
+#: src/gui/char_select.cpp:185
+#, fuzzy, c-format
+msgid "Job Level: %d"
+msgstr "Уровень: %d"
+
+#: src/gui/char_select.cpp:94 src/gui/char_select.cpp:186
+#, c-format
+msgid "Money: %d"
+msgstr "Деньги: %d"
+
+#: src/gui/char_select.cpp:174
+#, c-format
+msgid "Gold: %d"
+msgstr ""
+
+#: src/gui/char_select.cpp:243
+msgid "Create Character"
+msgstr "Создать перÑонажа"
+
+#: src/gui/char_select.cpp:250 src/gui/login.cpp:44 src/gui/register.cpp:65
+msgid "Name:"
+msgstr "ИмÑ:"
+
+#: src/gui/char_select.cpp:253
+msgid "Hair Color:"
+msgstr "Цвет волоÑ:"
+
+#: src/gui/char_select.cpp:256
+msgid "Hair Style:"
+msgstr "Стрижка:"
+
+#: src/gui/char_select.cpp:257
+msgid "Create"
+msgstr "Создать"
+
+#: src/gui/char_server.cpp:52
+#, fuzzy
+msgid "Select Server"
+msgstr "Выбор перÑонажа"
+
+#: src/gui/char_server.cpp:59 src/gui/npclistdialog.cpp:44
+#: src/gui/npc_text.cpp:46
+msgid "OK"
+msgstr ""
+
+#: src/gui/chat.cpp:122
+msgid "Global announcement:"
+msgstr ""
+
+#: src/gui/chat.cpp:125
+#, c-format
+msgid "Global announcement from %s:"
+msgstr ""
+
+#: src/gui/chat.cpp:140 src/gui/login.cpp:46 src/gui/register.cpp:68
+msgid "Server:"
+msgstr "Сервер:"
+
+#: src/gui/chat.cpp:146
+#, c-format
+msgid "%s whispers:"
+msgstr ""
+
+#: src/gui/chat.cpp:283
+#, c-format
+msgid "Whispering to %s: %s"
+msgstr ""
+
+#: src/gui/chat.cpp:356
+msgid "Unknown command"
+msgstr ""
+
+#: src/gui/chat.cpp:366
+msgid "Trade failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:369
+msgid "Emote failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:372
+msgid "Sit failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:375
+msgid "Chat creating failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:378
+msgid "Could not join party!"
+msgstr ""
+
+#: src/gui/chat.cpp:381
+msgid "Cannot shout!"
+msgstr ""
+
+#: src/gui/chat.cpp:389
+msgid "You have not yet reached a high enough lvl!"
+msgstr ""
+
+#: src/gui/chat.cpp:392
+msgid "Insufficient HP!"
+msgstr ""
+
+#: src/gui/chat.cpp:395
+msgid "Insufficient SP!"
+msgstr ""
+
+#: src/gui/chat.cpp:398
+msgid "You have no memos!"
+msgstr ""
+
+#: src/gui/chat.cpp:401
+msgid "You cannot do that right now!"
+msgstr ""
+
+#: src/gui/chat.cpp:404
+msgid "Seems you need more Zeny... ;-)"
+msgstr ""
+
+#: src/gui/chat.cpp:407
+msgid "You cannot use this skill with that kind of weapon!"
+msgstr ""
+
+#: src/gui/chat.cpp:410
+msgid "You need another red gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:413
+msgid "You need another blue gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:416
+msgid "You're carrying to much to do this!"
+msgstr ""
+
+#: src/gui/chat.cpp:419
+msgid "Huh? What's that?"
+msgstr ""
+
+#: src/gui/chat.cpp:425
+msgid "Warp failed..."
+msgstr ""
+
+#: src/gui/chat.cpp:428
+msgid "Could not steal anything..."
+msgstr ""
+
+#: src/gui/chat.cpp:431
+msgid "Poison had no effect..."
+msgstr ""
+
+#: src/gui/chat.cpp:496
+msgid "-- Help --"
+msgstr ""
+
+#: src/gui/chat.cpp:499
+msgid "/announce: Global announcement (GM only)"
+msgstr ""
+
+#: src/gui/chat.cpp:500
+msgid "/clear: Clears this window"
+msgstr ""
+
+#: src/gui/chat.cpp:501
+msgid "/help: Display this help"
+msgstr ""
+
+#: src/gui/chat.cpp:502
+msgid "/where: Display map name"
+msgstr ""
+
+#: src/gui/chat.cpp:503
+msgid "/whisper <nick> <message>: Sends a private <message> to <nick>"
+msgstr ""
+
+#: src/gui/chat.cpp:505
+msgid "/w <nick> <message>: Short form for /whisper"
+msgstr ""
+
+#: src/gui/chat.cpp:506
+msgid "/who: Display number of online users"
+msgstr ""
+
+#: src/gui/chat.cpp:507
+msgid "For more information, type /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:512
+msgid "Command: /announce <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:513
+msgid "*** only available to a GM ***"
+msgstr ""
+
+#: src/gui/chat.cpp:514
+msgid "This command sends the message <msg> to all players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:520
+msgid "Command: /clear"
+msgstr ""
+
+#: src/gui/chat.cpp:521
+msgid "This command clears the chat log of previous chat."
+msgstr ""
+
+#: src/gui/chat.cpp:527
+msgid "Command: /help"
+msgstr ""
+
+#: src/gui/chat.cpp:528
+msgid "This command displays a list of all commands available."
+msgstr ""
+
+#: src/gui/chat.cpp:530
+msgid "Command: /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:531
+msgid "This command displays help on <command>."
+msgstr ""
+
+#: src/gui/chat.cpp:536
+msgid "Command: /where"
+msgstr ""
+
+#: src/gui/chat.cpp:537
+msgid "This command displays the name of the current map."
+msgstr ""
+
+#: src/gui/chat.cpp:543
+msgid "Command: /whisper <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:544
+msgid "Command: /w <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:545
+msgid "This command sends the message <msg> to <nick>."
+msgstr ""
+
+#: src/gui/chat.cpp:547
+msgid "If the <nick> has spaces in it, enclose it in double quotes (\")."
+msgstr ""
+
+#: src/gui/chat.cpp:553
+msgid "Command: /who"
+msgstr ""
+
+#: src/gui/chat.cpp:554
+msgid "This command displays the number of players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:558
+msgid "Unknown command."
+msgstr ""
+
+#: src/gui/chat.cpp:559
+msgid "Type /help for a list of commands."
+msgstr ""
+
+#: src/gui/confirm_dialog.cpp:35
+msgid "Yes"
+msgstr "Да"
+
+#: src/gui/confirm_dialog.cpp:36
+msgid "No"
+msgstr "Ðет"
+
+#: src/gui/connection.cpp:49 src/gui/updatewindow.cpp:116
+msgid "Connecting..."
+msgstr "Соединение..."
+
+#: src/gui/equipmentwindow.cpp:38 src/gui/menuwindow.cpp:62
+msgid "Equipment"
+msgstr "СнарÑжение"
+
+#: src/gui/help.cpp:33
+msgid "Help"
+msgstr ""
+
+#: src/gui/help.cpp:41
+msgid "Close"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:46 src/gui/menuwindow.cpp:63
+msgid "Inventory"
+msgstr "Инвентарь"
+
+#: src/gui/inventorywindow.cpp:56 src/gui/inventorywindow.cpp:232
+#: src/gui/skill.cpp:134
+msgid "Use"
+msgstr "ИÑпользовать"
+
+#: src/gui/inventorywindow.cpp:57
+msgid "Drop"
+msgstr "СброÑить"
+
+#: src/gui/inventorywindow.cpp:99
+#, c-format
+msgid "Weight: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:104
+#, c-format
+msgid "Slots used: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:225
+msgid "Unequip"
+msgstr "СнÑÑ‚ÑŒ"
+
+#: src/gui/inventorywindow.cpp:228
+msgid "Equip"
+msgstr "Ðадеть"
+
+#: src/gui/item_amount.cpp:76
+msgid "Select amount of items to trade."
+msgstr "Сколько предметов продать."
+
+#: src/gui/item_amount.cpp:80
+msgid "Select amount of items to drop."
+msgstr "Сколько предметов ÑброÑить."
+
+#: src/gui/login.cpp:42
+msgid "Login"
+msgstr "Вход"
+
+#: src/gui/login.cpp:45 src/gui/register.cpp:66
+msgid "Password:"
+msgstr "Пароль:"
+
+#: src/gui/login.cpp:50
+msgid "Remember Username"
+msgstr ""
+
+#: src/gui/login.cpp:53 src/gui/register.cpp:75
+msgid "Register"
+msgstr "ЗарегиÑтрироватьÑÑ"
+
+#: src/gui/menuwindow.cpp:61
+msgid "Status"
+msgstr "СоÑтоÑние"
+
+#: src/gui/menuwindow.cpp:64 src/gui/skill.cpp:119
+msgid "Skills"
+msgstr "УмениÑ"
+
+#: src/gui/menuwindow.cpp:65
+msgid "Shortcut"
+msgstr "Клавиша"
+
+#: src/gui/menuwindow.cpp:66 src/main.cpp:716
+msgid "Setup"
+msgstr "ÐаÑтройка"
+
+#: src/gui/minimap.cpp:34
+msgid "MiniMap"
+msgstr "МиниКарта"
+
+#: src/gui/npclistdialog.cpp:35 src/gui/npc_text.cpp:35
+msgid "NPC"
+msgstr "NPC"
+
+#: src/gui/popupmenu.cpp:81
+#, c-format
+msgid "@@trade|Trade With %s@@"
+msgstr "@@trade|Торговать Ñ %s@@"
+
+#: src/gui/popupmenu.cpp:83
+#, c-format
+msgid "@@attack|Attack %s@@"
+msgstr "@@attack|Ðтаковать %s@@"
+
+#: src/gui/popupmenu.cpp:114
+msgid "@@talk|Talk To NPC@@"
+msgstr "@@talk|Говорить Ñ NPC@@"
+
+#: src/gui/popupmenu.cpp:124 src/gui/popupmenu.cpp:140
+#: src/gui/popupmenu.cpp:293
+msgid "@@cancel|Cancel@@"
+msgstr "@@cancelОтмена@@"
+
+#: src/gui/popupmenu.cpp:136
+#, c-format
+msgid "@@pickup|Pick Up %s@@"
+msgstr "@@pickup|Подобрать %s@@"
+
+#: src/gui/popupmenu.cpp:283
+#, fuzzy
+msgid "@@use|Unequip@@"
+msgstr "@@use|Ðадеть@@"
+
+#: src/gui/popupmenu.cpp:285
+msgid "@@use|Equip@@"
+msgstr "@@use|Ðадеть@@"
+
+#: src/gui/popupmenu.cpp:288
+msgid "@@use|Use@@"
+msgstr "@@use|ИÑпользовать@@"
+
+#: src/gui/popupmenu.cpp:290
+msgid "@@drop|Drop@@"
+msgstr "@@drop|СброÑить@@"
+
+#: src/gui/popupmenu.cpp:291
+msgid "@@description|Description@@"
+msgstr "@@description|ОпиÑание@@"
+
+#: src/gui/register.cpp:67
+msgid "Confirm:"
+msgstr "Подтвердите:"
+
+#: src/gui/register.cpp:73
+msgid "Male"
+msgstr ""
+
+#: src/gui/register.cpp:74
+msgid "Female"
+msgstr ""
+
+#: src/gui/register.cpp:176
+#, c-format
+msgid "The username needs to be at least %d characters long."
+msgstr "Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ñодержать не менее %d Ñимволов."
+
+#: src/gui/register.cpp:184
+#, c-format
+msgid "The username needs to be less than %d characters long."
+msgstr "Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð½Ðµ должно Ñодержать более %d Ñимволов."
+
+#: src/gui/register.cpp:192
+#, c-format
+msgid "The password needs to be at least %d characters long."
+msgstr "Пароль должен Ñодержать не менее %d Ñимволов."
+
+#: src/gui/register.cpp:200
+#, c-format
+msgid "The password needs to be less than %d characters long."
+msgstr "Пароль не должен Ñодержать более %d Ñимволов."
+
+#: src/gui/register.cpp:207
+msgid "Passwords do not match."
+msgstr "Пароли не Ñовпадают."
+
+#: src/gui/register.cpp:227 src/main.cpp:945
+msgid "Error"
+msgstr "Ошибка"
+
+#: src/gui/setup_audio.cpp:40
+msgid "Sound"
+msgstr "Звук"
+
+#: src/gui/setup_audio.cpp:46
+msgid "Sfx volume"
+msgstr "ГромкоÑÑ‚ÑŒ Ñффектов"
+
+#: src/gui/setup_audio.cpp:47
+msgid "Music volume"
+msgstr "ГромкоÑÑ‚ÑŒ музыки"
+
+#: src/gui/setup.cpp:58
+msgid "Apply"
+msgstr "Применить"
+
+#: src/gui/setup.cpp:58
+msgid "Reset Windows"
+msgstr "ВоÑÑтановить раÑположение окон"
+
+#: src/gui/setup.cpp:79
+msgid "Video"
+msgstr "Видео"
+
+#: src/gui/setup.cpp:83
+msgid "Audio"
+msgstr "Ðудио"
+
+#: src/gui/setup.cpp:87
+msgid "Joystick"
+msgstr "ДжойÑтик"
+
+#: src/gui/setup.cpp:91
+msgid "Keyboard"
+msgstr ""
+
+#: src/gui/setup.cpp:95
+msgid "Players"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:36 src/gui/setup_joystick.cpp:70
+msgid "Press the button to start calibration"
+msgstr "Ðажмите кнопку, чтобы начать калибровку"
+
+#: src/gui/setup_joystick.cpp:37 src/gui/setup_joystick.cpp:68
+msgid "Calibrate"
+msgstr "Калибровать"
+
+#: src/gui/setup_joystick.cpp:38
+msgid "Enable joystick"
+msgstr "ИÑпользовать джойÑтик"
+
+#: src/gui/setup_joystick.cpp:73
+msgid "Stop"
+msgstr "Стоп"
+
+#: src/gui/setup_joystick.cpp:74
+msgid "Rotate the stick"
+msgstr "Вращайте рукоÑÑ‚ÑŒ"
+
+#: src/gui/setup_keyboard.cpp:88
+msgid "Assign"
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:94
+#, fuzzy
+msgid "Default"
+msgstr "Удалить"
+
+#: src/gui/setup_keyboard.cpp:115
+msgid "Key Conflict(s) Detected."
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:116
+msgid "Resolve them, or gameplay may result in strange behaviour."
+msgstr ""
+
+#: src/gui/setup_players.cpp:53
+#, fuzzy
+msgid "Name"
+msgstr "ИмÑ:"
+
+#: src/gui/setup_players.cpp:54
+msgid "Relation"
+msgstr ""
+
+#: src/gui/setup_players.cpp:58
+msgid "Neutral"
+msgstr ""
+
+#: src/gui/setup_players.cpp:59
+msgid "Friend"
+msgstr ""
+
+#: src/gui/setup_players.cpp:60
+msgid "Disregarded"
+msgstr ""
+
+#: src/gui/setup_players.cpp:61
+msgid "Ignored"
+msgstr ""
+
+#: src/gui/setup_players.cpp:214
+msgid "Save player list"
+msgstr ""
+
+#: src/gui/setup_players.cpp:216
+msgid "Allow trading"
+msgstr ""
+
+#: src/gui/setup_players.cpp:218
+msgid "Allow whispers"
+msgstr ""
+
+#: src/gui/setup_players.cpp:245
+msgid "When ignoring:"
+msgstr ""
+
+#: src/gui/setup_video.cpp:112
+msgid "Full screen"
+msgstr "Ðа полный Ñкран"
+
+#: src/gui/setup_video.cpp:113
+msgid "OpenGL"
+msgstr "OpenGL"
+
+#: src/gui/setup_video.cpp:114
+msgid "Custom cursor"
+msgstr "Выборочный курÑор"
+
+#: src/gui/setup_video.cpp:116
+msgid "FPS Limit:"
+msgstr "Ограничение кадр/Ñ:"
+
+#: src/gui/setup_video.cpp:135
+msgid "Gui opacity"
+msgstr "ПрозрачноÑÑ‚ÑŒ интерфейÑа"
+
+#: src/gui/setup_video.cpp:192
+msgid "Scroll radius"
+msgstr "Ð Ð°Ð´Ð¸ÑƒÑ Ð¿Ñ€Ð¾ÐºÑ€ÑƒÑ‚ÐºÐ¸"
+
+#: src/gui/setup_video.cpp:200
+msgid "Scroll laziness"
+msgstr "ЗаторможенноÑÑ‚ÑŒ прокрутки"
+
+#: src/gui/setup_video.cpp:208
+msgid "Ambient FX"
+msgstr "Эффекты окружающей Ñреды"
+
+#: src/gui/setup_video.cpp:215 src/gui/setup_video.cpp:412
+msgid "off"
+msgstr "выкл"
+
+#: src/gui/setup_video.cpp:218 src/gui/setup_video.cpp:234
+#: src/gui/setup_video.cpp:415 src/gui/setup_video.cpp:429
+msgid "low"
+msgstr "низ."
+
+#: src/gui/setup_video.cpp:221 src/gui/setup_video.cpp:240
+#: src/gui/setup_video.cpp:418 src/gui/setup_video.cpp:435
+msgid "high"
+msgstr "выÑ."
+
+#: src/gui/setup_video.cpp:227
+msgid "Particle Detail"
+msgstr ""
+
+#: src/gui/setup_video.cpp:237 src/gui/setup_video.cpp:432
+msgid "medium"
+msgstr ""
+
+#: src/gui/setup_video.cpp:243 src/gui/setup_video.cpp:438
+msgid "max"
+msgstr ""
+
+#: src/gui/setup_video.cpp:309
+msgid "Switching to full screen"
+msgstr "Переключение в полноÑкранный режим"
+
+#: src/gui/setup_video.cpp:310
+msgid "Restart needed for changes to take effect."
+msgstr "Ð”Ð»Ñ Ð²ÑÑ‚ÑƒÐ¿Ð»ÐµÐ½Ð¸Ñ Ð² Ñилу выбранных наÑтроек требуетÑÑ Ð¿ÐµÑ€ÐµÐ·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ° игры."
+
+#: src/gui/setup_video.cpp:322
+msgid "Changing OpenGL"
+msgstr "Переключение на OpenGL"
+
+#: src/gui/setup_video.cpp:323
+msgid "Applying change to OpenGL requires restart."
+msgstr "Переход к OpenGL требует перезагрузки игры."
+
+#: src/gui/skill.cpp:79
+msgid "Mystery Skill"
+msgstr ""
+
+#: src/gui/skill.cpp:132 src/gui/skill.cpp:188
+#, c-format
+msgid "Skill points: %d"
+msgstr ""
+
+#: src/gui/skill.cpp:133
+msgid "Up"
+msgstr ""
+
+#: src/gui/status.cpp:52 src/gui/status.cpp:235
+#, fuzzy, c-format
+msgid "Job: %d"
+msgstr "Уровень: %d"
+
+#: src/gui/status.cpp:53 src/gui/status.cpp:238
+#, fuzzy, c-format
+msgid "Money: %d GP"
+msgstr "Деньги: %d"
+
+#: src/gui/status.cpp:127
+#, fuzzy
+msgid "Stats"
+msgstr "СоÑтоÑние"
+
+#: src/gui/status.cpp:128
+msgid "Total"
+msgstr ""
+
+#: src/gui/status.cpp:129
+msgid "Cost"
+msgstr ""
+
+#: src/gui/status.cpp:132
+#, fuzzy
+msgid "Attack:"
+msgstr "Ðтака %+d"
+
+#: src/gui/status.cpp:133
+#, fuzzy
+msgid "Defense:"
+msgstr "Защита %+d"
+
+#: src/gui/status.cpp:134
+#, fuzzy
+msgid "M.Attack:"
+msgstr "Ðтака %+d"
+
+#: src/gui/status.cpp:135
+#, fuzzy
+msgid "M.Defense:"
+msgstr "Защита %+d"
+
+#: src/gui/status.cpp:136
+#, c-format
+msgid "% Accuracy:"
+msgstr ""
+
+#: src/gui/status.cpp:137
+#, c-format
+msgid "% Evade:"
+msgstr ""
+
+#: src/gui/status.cpp:138
+msgid "% Reflex:"
+msgstr ""
+
+#: src/gui/status.cpp:282
+#, fuzzy
+msgid "Strength"
+msgstr "Сила:"
+
+#: src/gui/status.cpp:283
+#, fuzzy
+msgid "Agility"
+msgstr "ВыноÑливоÑÑ‚ÑŒ:"
+
+#: src/gui/status.cpp:284
+#, fuzzy
+msgid "Vitality"
+msgstr "ЖивучеÑÑ‚ÑŒ:"
+
+#: src/gui/status.cpp:285
+#, fuzzy
+msgid "Intelligence"
+msgstr "Интеллект:"
+
+#: src/gui/status.cpp:286
+#, fuzzy
+msgid "Dexterity"
+msgstr "ЛовкоÑÑ‚ÑŒ:"
+
+#: src/gui/status.cpp:287
+msgid "Luck"
+msgstr ""
+
+#: src/gui/status.cpp:305
+#, c-format
+msgid "Remaining Status Points: %d"
+msgstr ""
+
+#: src/gui/trade.cpp:61
+msgid "Add"
+msgstr "Добавить"
+
+#: src/gui/trade.cpp:64
+msgid "Trade"
+msgstr ""
+
+#: src/gui/trade.cpp:80 src/gui/trade.cpp:156 src/gui/trade.cpp:204
+#, c-format
+msgid "You get %d GP."
+msgstr "Вы получили %d GP."
+
+#: src/gui/trade.cpp:81
+msgid "You give:"
+msgstr "Вы отдаете:"
+
+#: src/gui/trade.cpp:283
+msgid "Failed adding item. You can not overlap one kind of item on the window."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:93
+msgid "Updating..."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:119
+msgid "Play"
+msgstr ""
+
+#: src/gui/updatewindow.cpp:525
+msgid "Completed"
+msgstr ""
+
+#: src/resources/itemdb.cpp:99
+msgid "Unnamed"
+msgstr ""
+
+#: src/main.cpp:769
+msgid "Got disconnected from server!"
+msgstr ""
+
+#: src/main.cpp:956
+#, fuzzy
+msgid "Connecting to map server..."
+msgstr "Соединение..."
+
+#: src/main.cpp:964
+msgid "Connecting to character server..."
+msgstr ""
+
+#: src/main.cpp:972
+msgid "Connecting to account server..."
+msgstr ""
+
+#~ msgid "Unregister"
+#~ msgstr "Удалить региÑтрацию"
+
+#~ msgid "Willpower:"
+#~ msgstr "Сила волиr:"
+
+#~ msgid "Please distribute %d points"
+#~ msgstr "РаÑпределите очки (%d)"
+
+#~ msgid "Your name needs to be at least 4 characters."
+#~ msgstr "Ð˜Ð¼Ñ Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ñодержать не менее четырех Ñимволов."
+
+#~ msgid "Character stats OK"
+#~ msgstr "Данные перÑонажа в порÑдке"
+
+#~ msgid "Please remove %d points"
+#~ msgstr "Снимите очки (%d)"
+
+#~ msgid "Split"
+#~ msgstr "Разделить"
+
+#~ msgid "Select amount of items to split."
+#~ msgstr "Сколько предметов разделить."
+
+#~ msgid "@@split|Split@@"
+#~ msgstr "@@split|Разделить@@"
+
+#~ msgid "Switch server"
+#~ msgstr "Сменить Ñервер"
+
+#~ msgid "Switch character"
+#~ msgstr "Сменить перÑонажа"
+
+#~ msgid "Email:"
+#~ msgstr "Email:"
+
+#~ msgid "Choose your Mana World Server"
+#~ msgstr "Выберите Ñервер Mana World"
+
+#~ msgid "Port:"
+#~ msgstr "Порт:"
+
+#~ msgid "Please type both the address and the port of a server."
+#~ msgstr "Следует указать Ð°Ð´Ñ€ÐµÑ Ð¸ порт Ñервера."
+
+#~ msgid "Propose trade"
+#~ msgstr "Предложить торговлю"
+
+#~ msgid "Confirm trade"
+#~ msgstr "ПринÑÑ‚ÑŒ предложение торговли"
+
+#~ msgid "Change"
+#~ msgstr "Сменить"
+
+#~ msgid "HP %+d"
+#~ msgstr "HP %+d"
+
+#~ msgid "MP %+d"
+#~ msgstr "Мана %+d"
+
+#~ msgid "Confirm"
+#~ msgstr "Подтвердить"
+
+#~ msgid "Charisma:"
+#~ msgstr "Харизма:"
+
+#~ msgid "Total Weight: %d - Maximum Weight: %d"
+#~ msgstr "Суммарный веÑ: %d - МакÑ. веÑ: %d"
+
+#~ msgid "Keep"
+#~ msgstr "ОÑтавить"
diff --git a/po/sk.po b/po/sk.po
new file mode 100644
index 00000000..453c67dc
--- /dev/null
+++ b/po/sk.po
@@ -0,0 +1,917 @@
+# Slovak translation for tmw
+# Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008
+# This file is distributed under the same license as the tmw package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: tmw\n"
+"Report-Msgid-Bugs-To: themanaworld-devel@lists.sourceforge.net\n"
+"POT-Creation-Date: 2009-01-08 22:10+0100\n"
+"PO-Revision-Date: 2008-12-30 14:07+0000\n"
+"Last-Translator: TomasKovacik <nail@nodomain.sk>\n"
+"Language-Team: Slovak <sk@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-01-06 12:40+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#: src/gui/buy.cpp:43 src/gui/buy.cpp:61 src/gui/buysell.cpp:35
+msgid "Buy"
+msgstr "Kúpiť"
+
+#: src/gui/buy.cpp:58 src/gui/buy.cpp:239 src/gui/sell.cpp:65
+#: src/gui/sell.cpp:259
+#, c-format
+msgid "Price: %d GP / Total: %d GP"
+msgstr "Cena: %d GP / Spolu: %d GP"
+
+#: src/gui/buy.cpp:62 src/gui/sell.cpp:69
+msgid "Quit"
+msgstr "UkonÄiÅ¥"
+
+#: src/gui/buy.cpp:63 src/gui/buy.cpp:206 src/gui/buy.cpp:224
+#: src/gui/inventorywindow.cpp:150 src/gui/inventorywindow.cpp:160
+#: src/gui/sell.cpp:70 src/gui/sell.cpp:230 src/gui/sell.cpp:244
+#: src/gui/trade.cpp:94 src/gui/trade.cpp:266
+#, c-format
+msgid "Description: %s"
+msgstr "Popis: %s"
+
+#: src/gui/buy.cpp:64 src/gui/buy.cpp:208 src/gui/buy.cpp:225
+#: src/gui/inventorywindow.cpp:149 src/gui/inventorywindow.cpp:158
+#: src/gui/sell.cpp:71 src/gui/sell.cpp:232 src/gui/sell.cpp:245
+#, c-format
+msgid "Effect: %s"
+msgstr "Effekt: %s"
+
+#: src/gui/buysell.cpp:31
+msgid "Shop"
+msgstr ""
+
+#: src/gui/buysell.cpp:35 src/gui/sell.cpp:48 src/gui/sell.cpp:68
+msgid "Sell"
+msgstr ""
+
+#: src/gui/buysell.cpp:35 src/gui/char_select.cpp:85
+#: src/gui/char_select.cpp:258 src/gui/char_server.cpp:60
+#: src/gui/connection.cpp:47 src/gui/item_amount.cpp:61 src/gui/login.cpp:52
+#: src/gui/npclistdialog.cpp:45 src/gui/register.cpp:76 src/gui/setup.cpp:58
+#: src/gui/trade.cpp:63 src/gui/updatewindow.cpp:118
+msgid "Cancel"
+msgstr "Zrušiť"
+
+#: src/gui/char_select.cpp:63
+msgid "Confirm Character Delete"
+msgstr "Potvrdte zmazanie postavy"
+
+#: src/gui/char_select.cpp:64
+msgid "Are you sure you want to delete this character?"
+msgstr "Naozaj chcete odstrániť túto postavu?"
+
+#: src/gui/char_select.cpp:81
+#, fuzzy
+msgid "Select Character"
+msgstr "Vytvoriť postavu"
+
+#: src/gui/char_select.cpp:84 src/gui/item_amount.cpp:60 src/gui/login.cpp:51
+#: src/gui/ok_dialog.cpp:37 src/gui/trade.cpp:62
+msgid "Ok"
+msgstr "Ano"
+
+#: src/gui/char_select.cpp:86
+msgid "New"
+msgstr "Nový"
+
+#: src/gui/char_select.cpp:87 src/gui/setup_players.cpp:220
+msgid "Delete"
+msgstr "Vymazať"
+
+#: src/gui/char_select.cpp:88
+msgid "Previous"
+msgstr "Predchádzajúci"
+
+#: src/gui/char_select.cpp:89
+msgid "Next"
+msgstr "Nasledujúci"
+
+#: src/gui/char_select.cpp:91 src/gui/char_select.cpp:171
+#: src/gui/char_select.cpp:183 src/gui/inventorywindow.cpp:148
+#: src/gui/inventorywindow.cpp:156 src/gui/trade.cpp:92 src/gui/trade.cpp:264
+#, c-format
+msgid "Name: %s"
+msgstr ""
+
+#: src/gui/char_select.cpp:92 src/gui/char_select.cpp:172
+#: src/gui/char_select.cpp:184 src/gui/status.cpp:51 src/gui/status.cpp:232
+#, c-format
+msgid "Level: %d"
+msgstr "Level: %d"
+
+#: src/gui/char_select.cpp:93 src/gui/char_select.cpp:173
+#: src/gui/char_select.cpp:185
+#, fuzzy, c-format
+msgid "Job Level: %d"
+msgstr "Level: %d"
+
+#: src/gui/char_select.cpp:94 src/gui/char_select.cpp:186
+#, c-format
+msgid "Money: %d"
+msgstr "Peniaze: %d"
+
+#: src/gui/char_select.cpp:174
+#, c-format
+msgid "Gold: %d"
+msgstr ""
+
+#: src/gui/char_select.cpp:243
+msgid "Create Character"
+msgstr "Vytvoriť postavu"
+
+#: src/gui/char_select.cpp:250 src/gui/login.cpp:44 src/gui/register.cpp:65
+msgid "Name:"
+msgstr "Meno"
+
+#: src/gui/char_select.cpp:253
+msgid "Hair Color:"
+msgstr "Farba vlasov:"
+
+#: src/gui/char_select.cpp:256
+msgid "Hair Style:"
+msgstr "Štýl vlasov:"
+
+#: src/gui/char_select.cpp:257
+msgid "Create"
+msgstr "Vytvoriť"
+
+#: src/gui/char_server.cpp:52
+msgid "Select Server"
+msgstr ""
+
+#: src/gui/char_server.cpp:59 src/gui/npclistdialog.cpp:44
+#: src/gui/npc_text.cpp:46
+msgid "OK"
+msgstr ""
+
+#: src/gui/chat.cpp:122
+msgid "Global announcement:"
+msgstr ""
+
+#: src/gui/chat.cpp:125
+#, c-format
+msgid "Global announcement from %s:"
+msgstr ""
+
+#: src/gui/chat.cpp:140 src/gui/login.cpp:46 src/gui/register.cpp:68
+msgid "Server:"
+msgstr ""
+
+#: src/gui/chat.cpp:146
+#, c-format
+msgid "%s whispers:"
+msgstr ""
+
+#: src/gui/chat.cpp:283
+#, c-format
+msgid "Whispering to %s: %s"
+msgstr ""
+
+#: src/gui/chat.cpp:356
+msgid "Unknown command"
+msgstr ""
+
+#: src/gui/chat.cpp:366
+msgid "Trade failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:369
+msgid "Emote failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:372
+msgid "Sit failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:375
+msgid "Chat creating failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:378
+msgid "Could not join party!"
+msgstr ""
+
+#: src/gui/chat.cpp:381
+msgid "Cannot shout!"
+msgstr ""
+
+#: src/gui/chat.cpp:389
+msgid "You have not yet reached a high enough lvl!"
+msgstr ""
+
+#: src/gui/chat.cpp:392
+msgid "Insufficient HP!"
+msgstr ""
+
+#: src/gui/chat.cpp:395
+msgid "Insufficient SP!"
+msgstr ""
+
+#: src/gui/chat.cpp:398
+msgid "You have no memos!"
+msgstr ""
+
+#: src/gui/chat.cpp:401
+msgid "You cannot do that right now!"
+msgstr ""
+
+#: src/gui/chat.cpp:404
+msgid "Seems you need more Zeny... ;-)"
+msgstr ""
+
+#: src/gui/chat.cpp:407
+msgid "You cannot use this skill with that kind of weapon!"
+msgstr ""
+
+#: src/gui/chat.cpp:410
+msgid "You need another red gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:413
+msgid "You need another blue gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:416
+msgid "You're carrying to much to do this!"
+msgstr ""
+
+#: src/gui/chat.cpp:419
+msgid "Huh? What's that?"
+msgstr ""
+
+#: src/gui/chat.cpp:425
+msgid "Warp failed..."
+msgstr ""
+
+#: src/gui/chat.cpp:428
+msgid "Could not steal anything..."
+msgstr ""
+
+#: src/gui/chat.cpp:431
+msgid "Poison had no effect..."
+msgstr ""
+
+#: src/gui/chat.cpp:496
+msgid "-- Help --"
+msgstr ""
+
+#: src/gui/chat.cpp:499
+msgid "/announce: Global announcement (GM only)"
+msgstr ""
+
+#: src/gui/chat.cpp:500
+msgid "/clear: Clears this window"
+msgstr ""
+
+#: src/gui/chat.cpp:501
+msgid "/help: Display this help"
+msgstr ""
+
+#: src/gui/chat.cpp:502
+msgid "/where: Display map name"
+msgstr ""
+
+#: src/gui/chat.cpp:503
+msgid "/whisper <nick> <message>: Sends a private <message> to <nick>"
+msgstr ""
+
+#: src/gui/chat.cpp:505
+msgid "/w <nick> <message>: Short form for /whisper"
+msgstr ""
+
+#: src/gui/chat.cpp:506
+msgid "/who: Display number of online users"
+msgstr ""
+
+#: src/gui/chat.cpp:507
+msgid "For more information, type /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:512
+msgid "Command: /announce <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:513
+msgid "*** only available to a GM ***"
+msgstr ""
+
+#: src/gui/chat.cpp:514
+msgid "This command sends the message <msg> to all players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:520
+msgid "Command: /clear"
+msgstr ""
+
+#: src/gui/chat.cpp:521
+msgid "This command clears the chat log of previous chat."
+msgstr ""
+
+#: src/gui/chat.cpp:527
+msgid "Command: /help"
+msgstr ""
+
+#: src/gui/chat.cpp:528
+msgid "This command displays a list of all commands available."
+msgstr ""
+
+#: src/gui/chat.cpp:530
+msgid "Command: /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:531
+msgid "This command displays help on <command>."
+msgstr ""
+
+#: src/gui/chat.cpp:536
+msgid "Command: /where"
+msgstr ""
+
+#: src/gui/chat.cpp:537
+msgid "This command displays the name of the current map."
+msgstr ""
+
+#: src/gui/chat.cpp:543
+msgid "Command: /whisper <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:544
+msgid "Command: /w <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:545
+msgid "This command sends the message <msg> to <nick>."
+msgstr ""
+
+#: src/gui/chat.cpp:547
+msgid "If the <nick> has spaces in it, enclose it in double quotes (\")."
+msgstr ""
+
+#: src/gui/chat.cpp:553
+msgid "Command: /who"
+msgstr ""
+
+#: src/gui/chat.cpp:554
+msgid "This command displays the number of players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:558
+msgid "Unknown command."
+msgstr ""
+
+#: src/gui/chat.cpp:559
+msgid "Type /help for a list of commands."
+msgstr ""
+
+#: src/gui/confirm_dialog.cpp:35
+msgid "Yes"
+msgstr ""
+
+#: src/gui/confirm_dialog.cpp:36
+msgid "No"
+msgstr ""
+
+#: src/gui/connection.cpp:49 src/gui/updatewindow.cpp:116
+msgid "Connecting..."
+msgstr ""
+
+#: src/gui/equipmentwindow.cpp:38 src/gui/menuwindow.cpp:62
+msgid "Equipment"
+msgstr ""
+
+#: src/gui/help.cpp:33
+msgid "Help"
+msgstr ""
+
+#: src/gui/help.cpp:41
+msgid "Close"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:46 src/gui/menuwindow.cpp:63
+msgid "Inventory"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:56 src/gui/inventorywindow.cpp:232
+#: src/gui/skill.cpp:134
+msgid "Use"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:57
+msgid "Drop"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:99
+#, c-format
+msgid "Weight: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:104
+#, c-format
+msgid "Slots used: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:225
+msgid "Unequip"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:228
+msgid "Equip"
+msgstr ""
+
+#: src/gui/item_amount.cpp:76
+msgid "Select amount of items to trade."
+msgstr ""
+
+#: src/gui/item_amount.cpp:80
+msgid "Select amount of items to drop."
+msgstr ""
+
+#: src/gui/login.cpp:42
+msgid "Login"
+msgstr ""
+
+#: src/gui/login.cpp:45 src/gui/register.cpp:66
+msgid "Password:"
+msgstr ""
+
+#: src/gui/login.cpp:50
+msgid "Remember Username"
+msgstr ""
+
+#: src/gui/login.cpp:53 src/gui/register.cpp:75
+msgid "Register"
+msgstr ""
+
+#: src/gui/menuwindow.cpp:61
+msgid "Status"
+msgstr ""
+
+#: src/gui/menuwindow.cpp:64 src/gui/skill.cpp:119
+msgid "Skills"
+msgstr ""
+
+#: src/gui/menuwindow.cpp:65
+msgid "Shortcut"
+msgstr ""
+
+#: src/gui/menuwindow.cpp:66 src/main.cpp:716
+msgid "Setup"
+msgstr ""
+
+#: src/gui/minimap.cpp:34
+msgid "MiniMap"
+msgstr ""
+
+#: src/gui/npclistdialog.cpp:35 src/gui/npc_text.cpp:35
+msgid "NPC"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:81
+#, c-format
+msgid "@@trade|Trade With %s@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:83
+#, c-format
+msgid "@@attack|Attack %s@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:114
+msgid "@@talk|Talk To NPC@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:124 src/gui/popupmenu.cpp:140
+#: src/gui/popupmenu.cpp:293
+msgid "@@cancel|Cancel@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:136
+#, c-format
+msgid "@@pickup|Pick Up %s@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:283
+msgid "@@use|Unequip@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:285
+msgid "@@use|Equip@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:288
+msgid "@@use|Use@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:290
+msgid "@@drop|Drop@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:291
+msgid "@@description|Description@@"
+msgstr ""
+
+#: src/gui/register.cpp:67
+msgid "Confirm:"
+msgstr ""
+
+#: src/gui/register.cpp:73
+msgid "Male"
+msgstr "Muž"
+
+#: src/gui/register.cpp:74
+msgid "Female"
+msgstr "Žena"
+
+#: src/gui/register.cpp:176
+#, c-format
+msgid "The username needs to be at least %d characters long."
+msgstr ""
+
+#: src/gui/register.cpp:184
+#, c-format
+msgid "The username needs to be less than %d characters long."
+msgstr ""
+
+#: src/gui/register.cpp:192
+#, c-format
+msgid "The password needs to be at least %d characters long."
+msgstr ""
+
+#: src/gui/register.cpp:200
+#, c-format
+msgid "The password needs to be less than %d characters long."
+msgstr ""
+
+#: src/gui/register.cpp:207
+msgid "Passwords do not match."
+msgstr ""
+
+#: src/gui/register.cpp:227 src/main.cpp:945
+msgid "Error"
+msgstr ""
+
+#: src/gui/setup_audio.cpp:40
+msgid "Sound"
+msgstr ""
+
+#: src/gui/setup_audio.cpp:46
+msgid "Sfx volume"
+msgstr ""
+
+#: src/gui/setup_audio.cpp:47
+msgid "Music volume"
+msgstr ""
+
+#: src/gui/setup.cpp:58
+msgid "Apply"
+msgstr ""
+
+#: src/gui/setup.cpp:58
+msgid "Reset Windows"
+msgstr ""
+
+#: src/gui/setup.cpp:79
+msgid "Video"
+msgstr ""
+
+#: src/gui/setup.cpp:83
+msgid "Audio"
+msgstr ""
+
+#: src/gui/setup.cpp:87
+msgid "Joystick"
+msgstr ""
+
+#: src/gui/setup.cpp:91
+msgid "Keyboard"
+msgstr ""
+
+#: src/gui/setup.cpp:95
+msgid "Players"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:36 src/gui/setup_joystick.cpp:70
+msgid "Press the button to start calibration"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:37 src/gui/setup_joystick.cpp:68
+msgid "Calibrate"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:38
+msgid "Enable joystick"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:73
+msgid "Stop"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:74
+msgid "Rotate the stick"
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:88
+msgid "Assign"
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:94
+#, fuzzy
+msgid "Default"
+msgstr "Vymazať"
+
+#: src/gui/setup_keyboard.cpp:115
+msgid "Key Conflict(s) Detected."
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:116
+msgid "Resolve them, or gameplay may result in strange behaviour."
+msgstr ""
+
+#: src/gui/setup_players.cpp:53
+#, fuzzy
+msgid "Name"
+msgstr "Meno"
+
+#: src/gui/setup_players.cpp:54
+msgid "Relation"
+msgstr ""
+
+#: src/gui/setup_players.cpp:58
+msgid "Neutral"
+msgstr ""
+
+#: src/gui/setup_players.cpp:59
+msgid "Friend"
+msgstr ""
+
+#: src/gui/setup_players.cpp:60
+msgid "Disregarded"
+msgstr ""
+
+#: src/gui/setup_players.cpp:61
+msgid "Ignored"
+msgstr ""
+
+#: src/gui/setup_players.cpp:214
+msgid "Save player list"
+msgstr ""
+
+#: src/gui/setup_players.cpp:216
+msgid "Allow trading"
+msgstr ""
+
+#: src/gui/setup_players.cpp:218
+msgid "Allow whispers"
+msgstr ""
+
+#: src/gui/setup_players.cpp:245
+msgid "When ignoring:"
+msgstr ""
+
+#: src/gui/setup_video.cpp:112
+msgid "Full screen"
+msgstr ""
+
+#: src/gui/setup_video.cpp:113
+msgid "OpenGL"
+msgstr ""
+
+#: src/gui/setup_video.cpp:114
+msgid "Custom cursor"
+msgstr ""
+
+#: src/gui/setup_video.cpp:116
+msgid "FPS Limit:"
+msgstr ""
+
+#: src/gui/setup_video.cpp:135
+msgid "Gui opacity"
+msgstr ""
+
+#: src/gui/setup_video.cpp:192
+msgid "Scroll radius"
+msgstr ""
+
+#: src/gui/setup_video.cpp:200
+msgid "Scroll laziness"
+msgstr ""
+
+#: src/gui/setup_video.cpp:208
+msgid "Ambient FX"
+msgstr ""
+
+#: src/gui/setup_video.cpp:215 src/gui/setup_video.cpp:412
+msgid "off"
+msgstr ""
+
+#: src/gui/setup_video.cpp:218 src/gui/setup_video.cpp:234
+#: src/gui/setup_video.cpp:415 src/gui/setup_video.cpp:429
+msgid "low"
+msgstr ""
+
+#: src/gui/setup_video.cpp:221 src/gui/setup_video.cpp:240
+#: src/gui/setup_video.cpp:418 src/gui/setup_video.cpp:435
+msgid "high"
+msgstr ""
+
+#: src/gui/setup_video.cpp:227
+msgid "Particle Detail"
+msgstr ""
+
+#: src/gui/setup_video.cpp:237 src/gui/setup_video.cpp:432
+msgid "medium"
+msgstr ""
+
+#: src/gui/setup_video.cpp:243 src/gui/setup_video.cpp:438
+msgid "max"
+msgstr ""
+
+#: src/gui/setup_video.cpp:309
+msgid "Switching to full screen"
+msgstr ""
+
+#: src/gui/setup_video.cpp:310
+msgid "Restart needed for changes to take effect."
+msgstr ""
+
+#: src/gui/setup_video.cpp:322
+msgid "Changing OpenGL"
+msgstr ""
+
+#: src/gui/setup_video.cpp:323
+msgid "Applying change to OpenGL requires restart."
+msgstr ""
+
+#: src/gui/skill.cpp:79
+msgid "Mystery Skill"
+msgstr ""
+
+#: src/gui/skill.cpp:132 src/gui/skill.cpp:188
+#, c-format
+msgid "Skill points: %d"
+msgstr ""
+
+#: src/gui/skill.cpp:133
+msgid "Up"
+msgstr ""
+
+#: src/gui/status.cpp:52 src/gui/status.cpp:235
+#, fuzzy, c-format
+msgid "Job: %d"
+msgstr "Level: %d"
+
+#: src/gui/status.cpp:53 src/gui/status.cpp:238
+#, fuzzy, c-format
+msgid "Money: %d GP"
+msgstr "Peniaze: %d"
+
+#: src/gui/status.cpp:127
+msgid "Stats"
+msgstr ""
+
+#: src/gui/status.cpp:128
+msgid "Total"
+msgstr ""
+
+#: src/gui/status.cpp:129
+msgid "Cost"
+msgstr ""
+
+#: src/gui/status.cpp:132
+msgid "Attack:"
+msgstr ""
+
+#: src/gui/status.cpp:133
+msgid "Defense:"
+msgstr ""
+
+#: src/gui/status.cpp:134
+msgid "M.Attack:"
+msgstr ""
+
+#: src/gui/status.cpp:135
+msgid "M.Defense:"
+msgstr ""
+
+#: src/gui/status.cpp:136
+#, c-format
+msgid "% Accuracy:"
+msgstr ""
+
+#: src/gui/status.cpp:137
+#, c-format
+msgid "% Evade:"
+msgstr ""
+
+#: src/gui/status.cpp:138
+msgid "% Reflex:"
+msgstr ""
+
+#: src/gui/status.cpp:282
+#, fuzzy
+msgid "Strength"
+msgstr "Sila:"
+
+#: src/gui/status.cpp:283
+msgid "Agility"
+msgstr ""
+
+#: src/gui/status.cpp:284
+msgid "Vitality"
+msgstr ""
+
+#: src/gui/status.cpp:285
+#, fuzzy
+msgid "Intelligence"
+msgstr "Inteligencia:"
+
+#: src/gui/status.cpp:286
+msgid "Dexterity"
+msgstr ""
+
+#: src/gui/status.cpp:287
+msgid "Luck"
+msgstr ""
+
+#: src/gui/status.cpp:305
+#, c-format
+msgid "Remaining Status Points: %d"
+msgstr ""
+
+#: src/gui/trade.cpp:61
+msgid "Add"
+msgstr ""
+
+#: src/gui/trade.cpp:64
+msgid "Trade"
+msgstr ""
+
+#: src/gui/trade.cpp:80 src/gui/trade.cpp:156 src/gui/trade.cpp:204
+#, c-format
+msgid "You get %d GP."
+msgstr ""
+
+#: src/gui/trade.cpp:81
+msgid "You give:"
+msgstr ""
+
+#: src/gui/trade.cpp:283
+msgid "Failed adding item. You can not overlap one kind of item on the window."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:93
+msgid "Updating..."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:119
+msgid "Play"
+msgstr ""
+
+#: src/gui/updatewindow.cpp:525
+msgid "Completed"
+msgstr ""
+
+#: src/resources/itemdb.cpp:99
+msgid "Unnamed"
+msgstr ""
+
+#: src/main.cpp:769
+msgid "Got disconnected from server!"
+msgstr ""
+
+#: src/main.cpp:956
+msgid "Connecting to map server..."
+msgstr ""
+
+#: src/main.cpp:964
+msgid "Connecting to character server..."
+msgstr ""
+
+#: src/main.cpp:972
+msgid "Connecting to account server..."
+msgstr ""
+
+#~ msgid "Account and Character Management"
+#~ msgstr "ÚÄet a správa postáv"
+
+#~ msgid "Unregister"
+#~ msgstr "Zrušiť registráciu"
+
+#~ msgid "Change Password"
+#~ msgstr "Zmeniť heslo"
+
+#~ msgid "Change Email Address"
+#~ msgstr "Zmeniť Emailovú adresu"
+
+#~ msgid "Account: %s"
+#~ msgstr "ÚÄet: %s"
diff --git a/po/sv.po b/po/sv.po
new file mode 100644
index 00000000..85e37a50
--- /dev/null
+++ b/po/sv.po
@@ -0,0 +1,985 @@
+# Swedish translation for tmw
+# Copyright (c) 2007 Rosetta Contributors and Canonical Ltd 2007
+# This file is distributed under the same license as the tmw package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2007.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: tmw\n"
+"Report-Msgid-Bugs-To: themanaworld-devel@lists.sourceforge.net\n"
+"POT-Creation-Date: 2009-01-08 22:10+0100\n"
+"PO-Revision-Date: 2008-05-07 19:04+0000\n"
+"Last-Translator: Kess Vargavind <Unknown>\n"
+"Language-Team: Swedish <sv@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-01-06 12:40+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#: src/gui/buy.cpp:43 src/gui/buy.cpp:61 src/gui/buysell.cpp:35
+msgid "Buy"
+msgstr "Köp"
+
+#: src/gui/buy.cpp:58 src/gui/buy.cpp:239 src/gui/sell.cpp:65
+#: src/gui/sell.cpp:259
+#, c-format
+msgid "Price: %d GP / Total: %d GP"
+msgstr "Pris: %d GP / Totalt: %d GP"
+
+#: src/gui/buy.cpp:62 src/gui/sell.cpp:69
+msgid "Quit"
+msgstr "Avsluta"
+
+#: src/gui/buy.cpp:63 src/gui/buy.cpp:206 src/gui/buy.cpp:224
+#: src/gui/inventorywindow.cpp:150 src/gui/inventorywindow.cpp:160
+#: src/gui/sell.cpp:70 src/gui/sell.cpp:230 src/gui/sell.cpp:244
+#: src/gui/trade.cpp:94 src/gui/trade.cpp:266
+#, c-format
+msgid "Description: %s"
+msgstr "Beskrivning: %s"
+
+#: src/gui/buy.cpp:64 src/gui/buy.cpp:208 src/gui/buy.cpp:225
+#: src/gui/inventorywindow.cpp:149 src/gui/inventorywindow.cpp:158
+#: src/gui/sell.cpp:71 src/gui/sell.cpp:232 src/gui/sell.cpp:245
+#, c-format
+msgid "Effect: %s"
+msgstr "Effekt: %s"
+
+#: src/gui/buysell.cpp:31
+#, fuzzy
+msgid "Shop"
+msgstr "Stopp"
+
+#: src/gui/buysell.cpp:35 src/gui/sell.cpp:48 src/gui/sell.cpp:68
+msgid "Sell"
+msgstr "Sälj"
+
+#: src/gui/buysell.cpp:35 src/gui/char_select.cpp:85
+#: src/gui/char_select.cpp:258 src/gui/char_server.cpp:60
+#: src/gui/connection.cpp:47 src/gui/item_amount.cpp:61 src/gui/login.cpp:52
+#: src/gui/npclistdialog.cpp:45 src/gui/register.cpp:76 src/gui/setup.cpp:58
+#: src/gui/trade.cpp:63 src/gui/updatewindow.cpp:118
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: src/gui/char_select.cpp:63
+msgid "Confirm Character Delete"
+msgstr ""
+
+#: src/gui/char_select.cpp:64
+msgid "Are you sure you want to delete this character?"
+msgstr "Är du säker på att du vill ta bort den här karaktären?"
+
+#: src/gui/char_select.cpp:81
+msgid "Select Character"
+msgstr "Välj karaktär"
+
+#: src/gui/char_select.cpp:84 src/gui/item_amount.cpp:60 src/gui/login.cpp:51
+#: src/gui/ok_dialog.cpp:37 src/gui/trade.cpp:62
+msgid "Ok"
+msgstr "Ok"
+
+#: src/gui/char_select.cpp:86
+msgid "New"
+msgstr "Ny"
+
+#: src/gui/char_select.cpp:87 src/gui/setup_players.cpp:220
+msgid "Delete"
+msgstr "Ta bort"
+
+#: src/gui/char_select.cpp:88
+msgid "Previous"
+msgstr "Föregående"
+
+#: src/gui/char_select.cpp:89
+msgid "Next"
+msgstr "Nästa"
+
+#: src/gui/char_select.cpp:91 src/gui/char_select.cpp:171
+#: src/gui/char_select.cpp:183 src/gui/inventorywindow.cpp:148
+#: src/gui/inventorywindow.cpp:156 src/gui/trade.cpp:92 src/gui/trade.cpp:264
+#, c-format
+msgid "Name: %s"
+msgstr "Namn: %s"
+
+#: src/gui/char_select.cpp:92 src/gui/char_select.cpp:172
+#: src/gui/char_select.cpp:184 src/gui/status.cpp:51 src/gui/status.cpp:232
+#, c-format
+msgid "Level: %d"
+msgstr "Nivå: %d"
+
+#: src/gui/char_select.cpp:93 src/gui/char_select.cpp:173
+#: src/gui/char_select.cpp:185
+#, fuzzy, c-format
+msgid "Job Level: %d"
+msgstr "Nivå: %d"
+
+#: src/gui/char_select.cpp:94 src/gui/char_select.cpp:186
+#, c-format
+msgid "Money: %d"
+msgstr "Pengar: %d"
+
+#: src/gui/char_select.cpp:174
+#, c-format
+msgid "Gold: %d"
+msgstr ""
+
+#: src/gui/char_select.cpp:243
+msgid "Create Character"
+msgstr "Skapa karaktär"
+
+#: src/gui/char_select.cpp:250 src/gui/login.cpp:44 src/gui/register.cpp:65
+msgid "Name:"
+msgstr "Namn:"
+
+#: src/gui/char_select.cpp:253
+msgid "Hair Color:"
+msgstr "Hårfärg:"
+
+#: src/gui/char_select.cpp:256
+msgid "Hair Style:"
+msgstr "Frisyr:"
+
+#: src/gui/char_select.cpp:257
+msgid "Create"
+msgstr "Skapa"
+
+#: src/gui/char_server.cpp:52
+#, fuzzy
+msgid "Select Server"
+msgstr "Välj karaktär"
+
+#: src/gui/char_server.cpp:59 src/gui/npclistdialog.cpp:44
+#: src/gui/npc_text.cpp:46
+msgid "OK"
+msgstr ""
+
+#: src/gui/chat.cpp:122
+msgid "Global announcement:"
+msgstr ""
+
+#: src/gui/chat.cpp:125
+#, c-format
+msgid "Global announcement from %s:"
+msgstr ""
+
+#: src/gui/chat.cpp:140 src/gui/login.cpp:46 src/gui/register.cpp:68
+msgid "Server:"
+msgstr "Server:"
+
+#: src/gui/chat.cpp:146
+#, c-format
+msgid "%s whispers:"
+msgstr ""
+
+#: src/gui/chat.cpp:283
+#, c-format
+msgid "Whispering to %s: %s"
+msgstr ""
+
+#: src/gui/chat.cpp:356
+msgid "Unknown command"
+msgstr ""
+
+#: src/gui/chat.cpp:366
+msgid "Trade failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:369
+msgid "Emote failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:372
+msgid "Sit failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:375
+msgid "Chat creating failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:378
+msgid "Could not join party!"
+msgstr ""
+
+#: src/gui/chat.cpp:381
+msgid "Cannot shout!"
+msgstr ""
+
+#: src/gui/chat.cpp:389
+msgid "You have not yet reached a high enough lvl!"
+msgstr ""
+
+#: src/gui/chat.cpp:392
+msgid "Insufficient HP!"
+msgstr ""
+
+#: src/gui/chat.cpp:395
+msgid "Insufficient SP!"
+msgstr ""
+
+#: src/gui/chat.cpp:398
+msgid "You have no memos!"
+msgstr ""
+
+#: src/gui/chat.cpp:401
+msgid "You cannot do that right now!"
+msgstr ""
+
+#: src/gui/chat.cpp:404
+msgid "Seems you need more Zeny... ;-)"
+msgstr ""
+
+#: src/gui/chat.cpp:407
+msgid "You cannot use this skill with that kind of weapon!"
+msgstr ""
+
+#: src/gui/chat.cpp:410
+msgid "You need another red gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:413
+msgid "You need another blue gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:416
+msgid "You're carrying to much to do this!"
+msgstr ""
+
+#: src/gui/chat.cpp:419
+msgid "Huh? What's that?"
+msgstr ""
+
+#: src/gui/chat.cpp:425
+msgid "Warp failed..."
+msgstr ""
+
+#: src/gui/chat.cpp:428
+msgid "Could not steal anything..."
+msgstr ""
+
+#: src/gui/chat.cpp:431
+msgid "Poison had no effect..."
+msgstr ""
+
+#: src/gui/chat.cpp:496
+msgid "-- Help --"
+msgstr ""
+
+#: src/gui/chat.cpp:499
+msgid "/announce: Global announcement (GM only)"
+msgstr ""
+
+#: src/gui/chat.cpp:500
+msgid "/clear: Clears this window"
+msgstr ""
+
+#: src/gui/chat.cpp:501
+msgid "/help: Display this help"
+msgstr ""
+
+#: src/gui/chat.cpp:502
+msgid "/where: Display map name"
+msgstr ""
+
+#: src/gui/chat.cpp:503
+msgid "/whisper <nick> <message>: Sends a private <message> to <nick>"
+msgstr ""
+
+#: src/gui/chat.cpp:505
+msgid "/w <nick> <message>: Short form for /whisper"
+msgstr ""
+
+#: src/gui/chat.cpp:506
+msgid "/who: Display number of online users"
+msgstr ""
+
+#: src/gui/chat.cpp:507
+msgid "For more information, type /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:512
+msgid "Command: /announce <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:513
+msgid "*** only available to a GM ***"
+msgstr ""
+
+#: src/gui/chat.cpp:514
+msgid "This command sends the message <msg> to all players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:520
+msgid "Command: /clear"
+msgstr ""
+
+#: src/gui/chat.cpp:521
+msgid "This command clears the chat log of previous chat."
+msgstr ""
+
+#: src/gui/chat.cpp:527
+msgid "Command: /help"
+msgstr ""
+
+#: src/gui/chat.cpp:528
+msgid "This command displays a list of all commands available."
+msgstr ""
+
+#: src/gui/chat.cpp:530
+msgid "Command: /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:531
+msgid "This command displays help on <command>."
+msgstr ""
+
+#: src/gui/chat.cpp:536
+msgid "Command: /where"
+msgstr ""
+
+#: src/gui/chat.cpp:537
+msgid "This command displays the name of the current map."
+msgstr ""
+
+#: src/gui/chat.cpp:543
+msgid "Command: /whisper <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:544
+msgid "Command: /w <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:545
+msgid "This command sends the message <msg> to <nick>."
+msgstr ""
+
+#: src/gui/chat.cpp:547
+msgid "If the <nick> has spaces in it, enclose it in double quotes (\")."
+msgstr ""
+
+#: src/gui/chat.cpp:553
+msgid "Command: /who"
+msgstr ""
+
+#: src/gui/chat.cpp:554
+msgid "This command displays the number of players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:558
+msgid "Unknown command."
+msgstr ""
+
+#: src/gui/chat.cpp:559
+msgid "Type /help for a list of commands."
+msgstr ""
+
+#: src/gui/confirm_dialog.cpp:35
+msgid "Yes"
+msgstr "Ja"
+
+#: src/gui/confirm_dialog.cpp:36
+msgid "No"
+msgstr "Nej"
+
+#: src/gui/connection.cpp:49 src/gui/updatewindow.cpp:116
+msgid "Connecting..."
+msgstr "Ansluter..."
+
+#: src/gui/equipmentwindow.cpp:38 src/gui/menuwindow.cpp:62
+msgid "Equipment"
+msgstr "Utrustning"
+
+#: src/gui/help.cpp:33
+msgid "Help"
+msgstr ""
+
+#: src/gui/help.cpp:41
+msgid "Close"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:46 src/gui/menuwindow.cpp:63
+msgid "Inventory"
+msgstr "Inventarium"
+
+#: src/gui/inventorywindow.cpp:56 src/gui/inventorywindow.cpp:232
+#: src/gui/skill.cpp:134
+msgid "Use"
+msgstr "Använd"
+
+#: src/gui/inventorywindow.cpp:57
+msgid "Drop"
+msgstr "Släpp"
+
+#: src/gui/inventorywindow.cpp:99
+#, c-format
+msgid "Weight: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:104
+#, c-format
+msgid "Slots used: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:225
+msgid "Unequip"
+msgstr "Avrusta"
+
+#: src/gui/inventorywindow.cpp:228
+msgid "Equip"
+msgstr "Utrusta"
+
+#: src/gui/item_amount.cpp:76
+msgid "Select amount of items to trade."
+msgstr "Välj antal föremål att handla med."
+
+#: src/gui/item_amount.cpp:80
+msgid "Select amount of items to drop."
+msgstr "Välj antal föremål att släppa."
+
+#: src/gui/login.cpp:42
+msgid "Login"
+msgstr "Användarnamn"
+
+#: src/gui/login.cpp:45 src/gui/register.cpp:66
+msgid "Password:"
+msgstr "Lösenord:"
+
+#: src/gui/login.cpp:50
+msgid "Remember Username"
+msgstr ""
+
+#: src/gui/login.cpp:53 src/gui/register.cpp:75
+msgid "Register"
+msgstr "Registrera"
+
+#: src/gui/menuwindow.cpp:61
+msgid "Status"
+msgstr "Status"
+
+#: src/gui/menuwindow.cpp:64 src/gui/skill.cpp:119
+msgid "Skills"
+msgstr "Färdigheter"
+
+#: src/gui/menuwindow.cpp:65
+msgid "Shortcut"
+msgstr "Genväg"
+
+#: src/gui/menuwindow.cpp:66 src/main.cpp:716
+msgid "Setup"
+msgstr "Inställningar"
+
+#: src/gui/minimap.cpp:34
+msgid "MiniMap"
+msgstr "Minikarta"
+
+#: src/gui/npclistdialog.cpp:35 src/gui/npc_text.cpp:35
+msgid "NPC"
+msgstr "NPC"
+
+#: src/gui/popupmenu.cpp:81
+#, c-format
+msgid "@@trade|Trade With %s@@"
+msgstr "@@trade|Handla med %s@@"
+
+#: src/gui/popupmenu.cpp:83
+#, c-format
+msgid "@@attack|Attack %s@@"
+msgstr "@@attack|Attackera %s@@"
+
+#: src/gui/popupmenu.cpp:114
+msgid "@@talk|Talk To NPC@@"
+msgstr "@@talk|Prata med NPC@@"
+
+#: src/gui/popupmenu.cpp:124 src/gui/popupmenu.cpp:140
+#: src/gui/popupmenu.cpp:293
+msgid "@@cancel|Cancel@@"
+msgstr "@@cancel|Avbryt@@"
+
+#: src/gui/popupmenu.cpp:136
+#, c-format
+msgid "@@pickup|Pick Up %s@@"
+msgstr "@@pickup|Plocka upp %s@@"
+
+#: src/gui/popupmenu.cpp:283
+#, fuzzy
+msgid "@@use|Unequip@@"
+msgstr "@@use|Utrusta@@"
+
+#: src/gui/popupmenu.cpp:285
+msgid "@@use|Equip@@"
+msgstr "@@use|Utrusta@@"
+
+#: src/gui/popupmenu.cpp:288
+msgid "@@use|Use@@"
+msgstr "@@use|Använd@@"
+
+#: src/gui/popupmenu.cpp:290
+msgid "@@drop|Drop@@"
+msgstr "@@drop|Släpp@@"
+
+#: src/gui/popupmenu.cpp:291
+msgid "@@description|Description@@"
+msgstr "@@description|Beskrivning@@"
+
+#: src/gui/register.cpp:67
+msgid "Confirm:"
+msgstr "Bekräfta:"
+
+#: src/gui/register.cpp:73
+msgid "Male"
+msgstr ""
+
+#: src/gui/register.cpp:74
+msgid "Female"
+msgstr ""
+
+#: src/gui/register.cpp:176
+#, c-format
+msgid "The username needs to be at least %d characters long."
+msgstr "Användarnamnet måste vara minst %d tecken långt."
+
+#: src/gui/register.cpp:184
+#, c-format
+msgid "The username needs to be less than %d characters long."
+msgstr "Användarnamnet måste vara kortare än %d tecken."
+
+#: src/gui/register.cpp:192
+#, c-format
+msgid "The password needs to be at least %d characters long."
+msgstr "Lösenordet måste vara minst %d tecken långt."
+
+#: src/gui/register.cpp:200
+#, c-format
+msgid "The password needs to be less than %d characters long."
+msgstr "Lösenordet måste vara kortare än %d tecken."
+
+#: src/gui/register.cpp:207
+msgid "Passwords do not match."
+msgstr "Lösenorden stämmer inte överens."
+
+#: src/gui/register.cpp:227 src/main.cpp:945
+msgid "Error"
+msgstr "Fel"
+
+#: src/gui/setup_audio.cpp:40
+msgid "Sound"
+msgstr "Ljud"
+
+#: src/gui/setup_audio.cpp:46
+msgid "Sfx volume"
+msgstr "Volym för ljudeffekter"
+
+#: src/gui/setup_audio.cpp:47
+msgid "Music volume"
+msgstr "Musikvolym"
+
+#: src/gui/setup.cpp:58
+msgid "Apply"
+msgstr "Verkställ"
+
+#: src/gui/setup.cpp:58
+msgid "Reset Windows"
+msgstr "Återställ fönster"
+
+#: src/gui/setup.cpp:79
+msgid "Video"
+msgstr "Video"
+
+#: src/gui/setup.cpp:83
+msgid "Audio"
+msgstr "Ljud"
+
+#: src/gui/setup.cpp:87
+msgid "Joystick"
+msgstr "Joystick"
+
+#: src/gui/setup.cpp:91
+msgid "Keyboard"
+msgstr ""
+
+#: src/gui/setup.cpp:95
+msgid "Players"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:36 src/gui/setup_joystick.cpp:70
+msgid "Press the button to start calibration"
+msgstr "Klicka på knappen för att starta kalibreringen"
+
+#: src/gui/setup_joystick.cpp:37 src/gui/setup_joystick.cpp:68
+msgid "Calibrate"
+msgstr "Kalibrera"
+
+#: src/gui/setup_joystick.cpp:38
+msgid "Enable joystick"
+msgstr "Aktivera joystick"
+
+#: src/gui/setup_joystick.cpp:73
+msgid "Stop"
+msgstr "Stopp"
+
+#: src/gui/setup_joystick.cpp:74
+msgid "Rotate the stick"
+msgstr "Rotera spaken"
+
+#: src/gui/setup_keyboard.cpp:88
+msgid "Assign"
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:94
+#, fuzzy
+msgid "Default"
+msgstr "Ta bort"
+
+#: src/gui/setup_keyboard.cpp:115
+msgid "Key Conflict(s) Detected."
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:116
+msgid "Resolve them, or gameplay may result in strange behaviour."
+msgstr ""
+
+#: src/gui/setup_players.cpp:53
+#, fuzzy
+msgid "Name"
+msgstr "Namn:"
+
+#: src/gui/setup_players.cpp:54
+msgid "Relation"
+msgstr ""
+
+#: src/gui/setup_players.cpp:58
+msgid "Neutral"
+msgstr ""
+
+#: src/gui/setup_players.cpp:59
+msgid "Friend"
+msgstr ""
+
+#: src/gui/setup_players.cpp:60
+msgid "Disregarded"
+msgstr ""
+
+#: src/gui/setup_players.cpp:61
+msgid "Ignored"
+msgstr ""
+
+#: src/gui/setup_players.cpp:214
+msgid "Save player list"
+msgstr ""
+
+#: src/gui/setup_players.cpp:216
+msgid "Allow trading"
+msgstr ""
+
+#: src/gui/setup_players.cpp:218
+msgid "Allow whispers"
+msgstr ""
+
+#: src/gui/setup_players.cpp:245
+msgid "When ignoring:"
+msgstr ""
+
+#: src/gui/setup_video.cpp:112
+msgid "Full screen"
+msgstr "Helskärm"
+
+#: src/gui/setup_video.cpp:113
+msgid "OpenGL"
+msgstr "OpenGL"
+
+#: src/gui/setup_video.cpp:114
+msgid "Custom cursor"
+msgstr "Särskild muspekare"
+
+#: src/gui/setup_video.cpp:116
+msgid "FPS Limit:"
+msgstr "FPS-gräns:"
+
+#: src/gui/setup_video.cpp:135
+msgid "Gui opacity"
+msgstr "Genomskinlighet"
+
+#: src/gui/setup_video.cpp:192
+msgid "Scroll radius"
+msgstr "Rullningsradie"
+
+#: src/gui/setup_video.cpp:200
+msgid "Scroll laziness"
+msgstr "Tröghet för rullning"
+
+#: src/gui/setup_video.cpp:208
+msgid "Ambient FX"
+msgstr "Omgivande FX"
+
+#: src/gui/setup_video.cpp:215 src/gui/setup_video.cpp:412
+msgid "off"
+msgstr "av"
+
+#: src/gui/setup_video.cpp:218 src/gui/setup_video.cpp:234
+#: src/gui/setup_video.cpp:415 src/gui/setup_video.cpp:429
+msgid "low"
+msgstr "låg"
+
+#: src/gui/setup_video.cpp:221 src/gui/setup_video.cpp:240
+#: src/gui/setup_video.cpp:418 src/gui/setup_video.cpp:435
+msgid "high"
+msgstr "hög"
+
+#: src/gui/setup_video.cpp:227
+msgid "Particle Detail"
+msgstr ""
+
+#: src/gui/setup_video.cpp:237 src/gui/setup_video.cpp:432
+msgid "medium"
+msgstr ""
+
+#: src/gui/setup_video.cpp:243 src/gui/setup_video.cpp:438
+msgid "max"
+msgstr ""
+
+#: src/gui/setup_video.cpp:309
+msgid "Switching to full screen"
+msgstr "Byte till helskärm"
+
+#: src/gui/setup_video.cpp:310
+msgid "Restart needed for changes to take effect."
+msgstr "Omstart krävs för att ändringarna ska synas."
+
+#: src/gui/setup_video.cpp:322
+msgid "Changing OpenGL"
+msgstr "Ändrar OpenGL"
+
+#: src/gui/setup_video.cpp:323
+msgid "Applying change to OpenGL requires restart."
+msgstr "Ändringar i OpenGL kräver omstart."
+
+#: src/gui/skill.cpp:79
+msgid "Mystery Skill"
+msgstr ""
+
+#: src/gui/skill.cpp:132 src/gui/skill.cpp:188
+#, c-format
+msgid "Skill points: %d"
+msgstr ""
+
+#: src/gui/skill.cpp:133
+msgid "Up"
+msgstr ""
+
+#: src/gui/status.cpp:52 src/gui/status.cpp:235
+#, fuzzy, c-format
+msgid "Job: %d"
+msgstr "Nivå: %d"
+
+#: src/gui/status.cpp:53 src/gui/status.cpp:238
+#, fuzzy, c-format
+msgid "Money: %d GP"
+msgstr "Pengar: %d"
+
+#: src/gui/status.cpp:127
+#, fuzzy
+msgid "Stats"
+msgstr "Status"
+
+#: src/gui/status.cpp:128
+msgid "Total"
+msgstr ""
+
+#: src/gui/status.cpp:129
+msgid "Cost"
+msgstr ""
+
+#: src/gui/status.cpp:132
+#, fuzzy
+msgid "Attack:"
+msgstr "Attack %+d"
+
+#: src/gui/status.cpp:133
+#, fuzzy
+msgid "Defense:"
+msgstr "Försvar %+d"
+
+#: src/gui/status.cpp:134
+#, fuzzy
+msgid "M.Attack:"
+msgstr "Attack %+d"
+
+#: src/gui/status.cpp:135
+#, fuzzy
+msgid "M.Defense:"
+msgstr "Försvar %+d"
+
+#: src/gui/status.cpp:136
+#, c-format
+msgid "% Accuracy:"
+msgstr ""
+
+#: src/gui/status.cpp:137
+#, c-format
+msgid "% Evade:"
+msgstr ""
+
+#: src/gui/status.cpp:138
+msgid "% Reflex:"
+msgstr ""
+
+#: src/gui/status.cpp:282
+#, fuzzy
+msgid "Strength"
+msgstr "Styrka:"
+
+#: src/gui/status.cpp:283
+#, fuzzy
+msgid "Agility"
+msgstr "Smidighet:"
+
+#: src/gui/status.cpp:284
+#, fuzzy
+msgid "Vitality"
+msgstr "Hälsa:"
+
+#: src/gui/status.cpp:285
+#, fuzzy
+msgid "Intelligence"
+msgstr "Intelligens:"
+
+#: src/gui/status.cpp:286
+#, fuzzy
+msgid "Dexterity"
+msgstr "Skicklighet:"
+
+#: src/gui/status.cpp:287
+msgid "Luck"
+msgstr ""
+
+#: src/gui/status.cpp:305
+#, c-format
+msgid "Remaining Status Points: %d"
+msgstr ""
+
+#: src/gui/trade.cpp:61
+msgid "Add"
+msgstr "Lägg till"
+
+#: src/gui/trade.cpp:64
+msgid "Trade"
+msgstr ""
+
+#: src/gui/trade.cpp:80 src/gui/trade.cpp:156 src/gui/trade.cpp:204
+#, c-format
+msgid "You get %d GP."
+msgstr "Du får %d GP."
+
+#: src/gui/trade.cpp:81
+msgid "You give:"
+msgstr "Du ger:"
+
+#: src/gui/trade.cpp:283
+msgid "Failed adding item. You can not overlap one kind of item on the window."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:93
+msgid "Updating..."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:119
+msgid "Play"
+msgstr ""
+
+#: src/gui/updatewindow.cpp:525
+msgid "Completed"
+msgstr ""
+
+#: src/resources/itemdb.cpp:99
+msgid "Unnamed"
+msgstr ""
+
+#: src/main.cpp:769
+msgid "Got disconnected from server!"
+msgstr ""
+
+#: src/main.cpp:956
+#, fuzzy
+msgid "Connecting to map server..."
+msgstr "Ansluter..."
+
+#: src/main.cpp:964
+msgid "Connecting to character server..."
+msgstr ""
+
+#: src/main.cpp:972
+msgid "Connecting to account server..."
+msgstr ""
+
+#~ msgid "Unregister"
+#~ msgstr "Avregistrera"
+
+#~ msgid "Willpower:"
+#~ msgstr "Viljestyrka:"
+
+#~ msgid "Please distribute %d points"
+#~ msgstr "Var vänlig fördela %d poäng"
+
+#~ msgid "Your name needs to be at least 4 characters."
+#~ msgstr "Ditt namn måste vara minst 4 tecken långt."
+
+#~ msgid "Character stats OK"
+#~ msgstr "Karaktärens värden OK"
+
+#~ msgid "Please remove %d points"
+#~ msgstr "Var vänlig ta bort %d poäng"
+
+#~ msgid "Split"
+#~ msgstr "Dela"
+
+#~ msgid "Select amount of items to split."
+#~ msgstr "Välj antal föremål att dela."
+
+#~ msgid "@@split|Split@@"
+#~ msgstr "@@split|Dela@@"
+
+#~ msgid "Switch server"
+#~ msgstr "Byt server"
+
+#~ msgid "Switch character"
+#~ msgstr "Byt karaktär"
+
+#~ msgid "Email:"
+#~ msgstr "E-post:"
+
+#~ msgid "Choose your Mana World Server"
+#~ msgstr "Välj din Mana World-server"
+
+#~ msgid "Port:"
+#~ msgstr "Port:"
+
+#~ msgid "Please type both the address and the port of a server."
+#~ msgstr "Var vänlig skriv både adressen och porten till en server."
+
+#~ msgid "Propose trade"
+#~ msgstr "Föreslå handel"
+
+#~ msgid "Confirm trade"
+#~ msgstr "Bekräfta handel"
+
+#~ msgid "Change"
+#~ msgstr "Ändra"
+
+#~ msgid "HP %+d"
+#~ msgstr "Hälsa %+d"
+
+#~ msgid "MP %+d"
+#~ msgstr "Mana %+d"
+
+#~ msgid "Confirm"
+#~ msgstr "Bekräfta"
+
+#~ msgid "Charisma:"
+#~ msgstr "Karisma:"
+
+#~ msgid "Total Weight: %d - Maximum Weight: %d"
+#~ msgstr "Nuvarande vikt: %d - Maxvikt: %d"
+
+#~ msgid "Keep"
+#~ msgstr "Behåll"
diff --git a/po/th.po b/po/th.po
new file mode 100644
index 00000000..e2ee2ab5
--- /dev/null
+++ b/po/th.po
@@ -0,0 +1,919 @@
+# Thai translation for tmw
+# Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008
+# This file is distributed under the same license as the tmw package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: tmw\n"
+"Report-Msgid-Bugs-To: themanaworld-devel@lists.sourceforge.net\n"
+"POT-Creation-Date: 2009-01-08 22:10+0100\n"
+"PO-Revision-Date: 2008-11-25 06:16+0000\n"
+"Last-Translator: Tharawut Paripaiboon <Unknown>\n"
+"Language-Team: Thai <th@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-01-06 12:40+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#: src/gui/buy.cpp:43 src/gui/buy.cpp:61 src/gui/buysell.cpp:35
+msgid "Buy"
+msgstr "ซื้อ"
+
+#: src/gui/buy.cpp:58 src/gui/buy.cpp:239 src/gui/sell.cpp:65
+#: src/gui/sell.cpp:259
+#, c-format
+msgid "Price: %d GP / Total: %d GP"
+msgstr "ราคา: %d GP / ทั้งหมด: %d GP"
+
+#: src/gui/buy.cpp:62 src/gui/sell.cpp:69
+msgid "Quit"
+msgstr "ออà¸"
+
+#: src/gui/buy.cpp:63 src/gui/buy.cpp:206 src/gui/buy.cpp:224
+#: src/gui/inventorywindow.cpp:150 src/gui/inventorywindow.cpp:160
+#: src/gui/sell.cpp:70 src/gui/sell.cpp:230 src/gui/sell.cpp:244
+#: src/gui/trade.cpp:94 src/gui/trade.cpp:266
+#, c-format
+msgid "Description: %s"
+msgstr ""
+
+#: src/gui/buy.cpp:64 src/gui/buy.cpp:208 src/gui/buy.cpp:225
+#: src/gui/inventorywindow.cpp:149 src/gui/inventorywindow.cpp:158
+#: src/gui/sell.cpp:71 src/gui/sell.cpp:232 src/gui/sell.cpp:245
+#, c-format
+msgid "Effect: %s"
+msgstr ""
+
+#: src/gui/buysell.cpp:31
+msgid "Shop"
+msgstr ""
+
+#: src/gui/buysell.cpp:35 src/gui/sell.cpp:48 src/gui/sell.cpp:68
+msgid "Sell"
+msgstr ""
+
+#: src/gui/buysell.cpp:35 src/gui/char_select.cpp:85
+#: src/gui/char_select.cpp:258 src/gui/char_server.cpp:60
+#: src/gui/connection.cpp:47 src/gui/item_amount.cpp:61 src/gui/login.cpp:52
+#: src/gui/npclistdialog.cpp:45 src/gui/register.cpp:76 src/gui/setup.cpp:58
+#: src/gui/trade.cpp:63 src/gui/updatewindow.cpp:118
+msgid "Cancel"
+msgstr "ยà¸à¹€à¸¥à¸´à¸"
+
+#: src/gui/char_select.cpp:63
+msgid "Confirm Character Delete"
+msgstr "ยืนยันà¸à¸²à¸£à¸¥à¸šà¸•à¸±à¸§à¸¥à¸°à¸„ร"
+
+#: src/gui/char_select.cpp:64
+msgid "Are you sure you want to delete this character?"
+msgstr "คุณà¹à¸™à¹ˆà¹ƒà¸ˆà¹à¸¥à¹‰à¸§à¸«à¸£à¸·à¸­à¸—ี่จะลบตัวละครนี้?"
+
+#: src/gui/char_select.cpp:81
+#, fuzzy
+msgid "Select Character"
+msgstr "สร้างตัวละคร"
+
+#: src/gui/char_select.cpp:84 src/gui/item_amount.cpp:60 src/gui/login.cpp:51
+#: src/gui/ok_dialog.cpp:37 src/gui/trade.cpp:62
+msgid "Ok"
+msgstr "ตà¸à¸¥à¸‡"
+
+#: src/gui/char_select.cpp:86
+msgid "New"
+msgstr "สร้างใหม่"
+
+#: src/gui/char_select.cpp:87 src/gui/setup_players.cpp:220
+msgid "Delete"
+msgstr "ลบทิ้ง"
+
+#: src/gui/char_select.cpp:88
+msgid "Previous"
+msgstr "à¸à¹ˆà¸­à¸™à¸«à¸™à¹‰à¸²"
+
+#: src/gui/char_select.cpp:89
+msgid "Next"
+msgstr "ถัดไป"
+
+#: src/gui/char_select.cpp:91 src/gui/char_select.cpp:171
+#: src/gui/char_select.cpp:183 src/gui/inventorywindow.cpp:148
+#: src/gui/inventorywindow.cpp:156 src/gui/trade.cpp:92 src/gui/trade.cpp:264
+#, c-format
+msgid "Name: %s"
+msgstr "ชื่อ: %s"
+
+#: src/gui/char_select.cpp:92 src/gui/char_select.cpp:172
+#: src/gui/char_select.cpp:184 src/gui/status.cpp:51 src/gui/status.cpp:232
+#, c-format
+msgid "Level: %d"
+msgstr ""
+
+#: src/gui/char_select.cpp:93 src/gui/char_select.cpp:173
+#: src/gui/char_select.cpp:185
+#, c-format
+msgid "Job Level: %d"
+msgstr ""
+
+#: src/gui/char_select.cpp:94 src/gui/char_select.cpp:186
+#, c-format
+msgid "Money: %d"
+msgstr ""
+
+#: src/gui/char_select.cpp:174
+#, c-format
+msgid "Gold: %d"
+msgstr ""
+
+#: src/gui/char_select.cpp:243
+msgid "Create Character"
+msgstr "สร้างตัวละคร"
+
+#: src/gui/char_select.cpp:250 src/gui/login.cpp:44 src/gui/register.cpp:65
+msgid "Name:"
+msgstr "ชื่อ:"
+
+#: src/gui/char_select.cpp:253
+msgid "Hair Color:"
+msgstr "สีผม:"
+
+#: src/gui/char_select.cpp:256
+msgid "Hair Style:"
+msgstr "ทรงผม:"
+
+#: src/gui/char_select.cpp:257
+msgid "Create"
+msgstr "สร้าง"
+
+#: src/gui/char_server.cpp:52
+msgid "Select Server"
+msgstr ""
+
+#: src/gui/char_server.cpp:59 src/gui/npclistdialog.cpp:44
+#: src/gui/npc_text.cpp:46
+msgid "OK"
+msgstr ""
+
+#: src/gui/chat.cpp:122
+msgid "Global announcement:"
+msgstr ""
+
+#: src/gui/chat.cpp:125
+#, c-format
+msgid "Global announcement from %s:"
+msgstr ""
+
+#: src/gui/chat.cpp:140 src/gui/login.cpp:46 src/gui/register.cpp:68
+msgid "Server:"
+msgstr ""
+
+#: src/gui/chat.cpp:146
+#, c-format
+msgid "%s whispers:"
+msgstr ""
+
+#: src/gui/chat.cpp:283
+#, c-format
+msgid "Whispering to %s: %s"
+msgstr ""
+
+#: src/gui/chat.cpp:356
+msgid "Unknown command"
+msgstr ""
+
+#: src/gui/chat.cpp:366
+msgid "Trade failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:369
+msgid "Emote failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:372
+msgid "Sit failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:375
+msgid "Chat creating failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:378
+msgid "Could not join party!"
+msgstr ""
+
+#: src/gui/chat.cpp:381
+msgid "Cannot shout!"
+msgstr ""
+
+#: src/gui/chat.cpp:389
+msgid "You have not yet reached a high enough lvl!"
+msgstr ""
+
+#: src/gui/chat.cpp:392
+msgid "Insufficient HP!"
+msgstr ""
+
+#: src/gui/chat.cpp:395
+msgid "Insufficient SP!"
+msgstr ""
+
+#: src/gui/chat.cpp:398
+msgid "You have no memos!"
+msgstr ""
+
+#: src/gui/chat.cpp:401
+msgid "You cannot do that right now!"
+msgstr ""
+
+#: src/gui/chat.cpp:404
+msgid "Seems you need more Zeny... ;-)"
+msgstr ""
+
+#: src/gui/chat.cpp:407
+msgid "You cannot use this skill with that kind of weapon!"
+msgstr ""
+
+#: src/gui/chat.cpp:410
+msgid "You need another red gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:413
+msgid "You need another blue gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:416
+msgid "You're carrying to much to do this!"
+msgstr ""
+
+#: src/gui/chat.cpp:419
+msgid "Huh? What's that?"
+msgstr ""
+
+#: src/gui/chat.cpp:425
+msgid "Warp failed..."
+msgstr ""
+
+#: src/gui/chat.cpp:428
+msgid "Could not steal anything..."
+msgstr ""
+
+#: src/gui/chat.cpp:431
+msgid "Poison had no effect..."
+msgstr ""
+
+#: src/gui/chat.cpp:496
+msgid "-- Help --"
+msgstr ""
+
+#: src/gui/chat.cpp:499
+msgid "/announce: Global announcement (GM only)"
+msgstr ""
+
+#: src/gui/chat.cpp:500
+msgid "/clear: Clears this window"
+msgstr ""
+
+#: src/gui/chat.cpp:501
+msgid "/help: Display this help"
+msgstr ""
+
+#: src/gui/chat.cpp:502
+msgid "/where: Display map name"
+msgstr ""
+
+#: src/gui/chat.cpp:503
+msgid "/whisper <nick> <message>: Sends a private <message> to <nick>"
+msgstr ""
+
+#: src/gui/chat.cpp:505
+msgid "/w <nick> <message>: Short form for /whisper"
+msgstr ""
+
+#: src/gui/chat.cpp:506
+msgid "/who: Display number of online users"
+msgstr ""
+
+#: src/gui/chat.cpp:507
+msgid "For more information, type /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:512
+msgid "Command: /announce <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:513
+msgid "*** only available to a GM ***"
+msgstr ""
+
+#: src/gui/chat.cpp:514
+msgid "This command sends the message <msg> to all players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:520
+msgid "Command: /clear"
+msgstr ""
+
+#: src/gui/chat.cpp:521
+msgid "This command clears the chat log of previous chat."
+msgstr ""
+
+#: src/gui/chat.cpp:527
+msgid "Command: /help"
+msgstr ""
+
+#: src/gui/chat.cpp:528
+msgid "This command displays a list of all commands available."
+msgstr ""
+
+#: src/gui/chat.cpp:530
+msgid "Command: /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:531
+msgid "This command displays help on <command>."
+msgstr ""
+
+#: src/gui/chat.cpp:536
+msgid "Command: /where"
+msgstr ""
+
+#: src/gui/chat.cpp:537
+msgid "This command displays the name of the current map."
+msgstr ""
+
+#: src/gui/chat.cpp:543
+msgid "Command: /whisper <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:544
+msgid "Command: /w <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:545
+msgid "This command sends the message <msg> to <nick>."
+msgstr ""
+
+#: src/gui/chat.cpp:547
+msgid "If the <nick> has spaces in it, enclose it in double quotes (\")."
+msgstr ""
+
+#: src/gui/chat.cpp:553
+msgid "Command: /who"
+msgstr ""
+
+#: src/gui/chat.cpp:554
+msgid "This command displays the number of players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:558
+msgid "Unknown command."
+msgstr ""
+
+#: src/gui/chat.cpp:559
+msgid "Type /help for a list of commands."
+msgstr ""
+
+#: src/gui/confirm_dialog.cpp:35
+msgid "Yes"
+msgstr "ใช่"
+
+#: src/gui/confirm_dialog.cpp:36
+msgid "No"
+msgstr "ไม่"
+
+#: src/gui/connection.cpp:49 src/gui/updatewindow.cpp:116
+msgid "Connecting..."
+msgstr "à¸à¸³à¸¥à¸±à¸‡à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­..."
+
+#: src/gui/equipmentwindow.cpp:38 src/gui/menuwindow.cpp:62
+msgid "Equipment"
+msgstr ""
+
+#: src/gui/help.cpp:33
+msgid "Help"
+msgstr ""
+
+#: src/gui/help.cpp:41
+msgid "Close"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:46 src/gui/menuwindow.cpp:63
+msgid "Inventory"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:56 src/gui/inventorywindow.cpp:232
+#: src/gui/skill.cpp:134
+msgid "Use"
+msgstr "ใช้"
+
+#: src/gui/inventorywindow.cpp:57
+msgid "Drop"
+msgstr "ทิ้ง"
+
+#: src/gui/inventorywindow.cpp:99
+#, c-format
+msgid "Weight: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:104
+#, c-format
+msgid "Slots used: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:225
+msgid "Unequip"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:228
+msgid "Equip"
+msgstr ""
+
+#: src/gui/item_amount.cpp:76
+msgid "Select amount of items to trade."
+msgstr ""
+
+#: src/gui/item_amount.cpp:80
+msgid "Select amount of items to drop."
+msgstr ""
+
+#: src/gui/login.cpp:42
+msgid "Login"
+msgstr "เข้าระบบ"
+
+#: src/gui/login.cpp:45 src/gui/register.cpp:66
+msgid "Password:"
+msgstr "รหัสผ่าน:"
+
+#: src/gui/login.cpp:50
+msgid "Remember Username"
+msgstr ""
+
+#: src/gui/login.cpp:53 src/gui/register.cpp:75
+msgid "Register"
+msgstr "สมัครสมาชิà¸"
+
+#: src/gui/menuwindow.cpp:61
+msgid "Status"
+msgstr "สถานะ"
+
+#: src/gui/menuwindow.cpp:64 src/gui/skill.cpp:119
+msgid "Skills"
+msgstr ""
+
+#: src/gui/menuwindow.cpp:65
+msgid "Shortcut"
+msgstr ""
+
+#: src/gui/menuwindow.cpp:66 src/main.cpp:716
+msgid "Setup"
+msgstr "ตั้งค่า"
+
+#: src/gui/minimap.cpp:34
+msgid "MiniMap"
+msgstr ""
+
+#: src/gui/npclistdialog.cpp:35 src/gui/npc_text.cpp:35
+msgid "NPC"
+msgstr "NPC"
+
+#: src/gui/popupmenu.cpp:81
+#, c-format
+msgid "@@trade|Trade With %s@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:83
+#, c-format
+msgid "@@attack|Attack %s@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:114
+msgid "@@talk|Talk To NPC@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:124 src/gui/popupmenu.cpp:140
+#: src/gui/popupmenu.cpp:293
+msgid "@@cancel|Cancel@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:136
+#, c-format
+msgid "@@pickup|Pick Up %s@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:283
+msgid "@@use|Unequip@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:285
+msgid "@@use|Equip@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:288
+msgid "@@use|Use@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:290
+msgid "@@drop|Drop@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:291
+msgid "@@description|Description@@"
+msgstr ""
+
+#: src/gui/register.cpp:67
+msgid "Confirm:"
+msgstr "ยืนยัน:"
+
+#: src/gui/register.cpp:73
+msgid "Male"
+msgstr "ชาย"
+
+#: src/gui/register.cpp:74
+msgid "Female"
+msgstr "หà¸à¸´à¸‡"
+
+#: src/gui/register.cpp:176
+#, c-format
+msgid "The username needs to be at least %d characters long."
+msgstr ""
+
+#: src/gui/register.cpp:184
+#, c-format
+msgid "The username needs to be less than %d characters long."
+msgstr ""
+
+#: src/gui/register.cpp:192
+#, c-format
+msgid "The password needs to be at least %d characters long."
+msgstr ""
+
+#: src/gui/register.cpp:200
+#, c-format
+msgid "The password needs to be less than %d characters long."
+msgstr ""
+
+#: src/gui/register.cpp:207
+msgid "Passwords do not match."
+msgstr ""
+
+#: src/gui/register.cpp:227 src/main.cpp:945
+msgid "Error"
+msgstr "ผิดพลาด"
+
+#: src/gui/setup_audio.cpp:40
+msgid "Sound"
+msgstr ""
+
+#: src/gui/setup_audio.cpp:46
+msgid "Sfx volume"
+msgstr ""
+
+#: src/gui/setup_audio.cpp:47
+msgid "Music volume"
+msgstr ""
+
+#: src/gui/setup.cpp:58
+msgid "Apply"
+msgstr ""
+
+#: src/gui/setup.cpp:58
+msgid "Reset Windows"
+msgstr ""
+
+#: src/gui/setup.cpp:79
+msgid "Video"
+msgstr ""
+
+#: src/gui/setup.cpp:83
+msgid "Audio"
+msgstr ""
+
+#: src/gui/setup.cpp:87
+msgid "Joystick"
+msgstr ""
+
+#: src/gui/setup.cpp:91
+msgid "Keyboard"
+msgstr ""
+
+#: src/gui/setup.cpp:95
+msgid "Players"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:36 src/gui/setup_joystick.cpp:70
+msgid "Press the button to start calibration"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:37 src/gui/setup_joystick.cpp:68
+msgid "Calibrate"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:38
+msgid "Enable joystick"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:73
+msgid "Stop"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:74
+msgid "Rotate the stick"
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:88
+msgid "Assign"
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:94
+#, fuzzy
+msgid "Default"
+msgstr "ลบทิ้ง"
+
+#: src/gui/setup_keyboard.cpp:115
+msgid "Key Conflict(s) Detected."
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:116
+msgid "Resolve them, or gameplay may result in strange behaviour."
+msgstr ""
+
+#: src/gui/setup_players.cpp:53
+#, fuzzy
+msgid "Name"
+msgstr "ชื่อ:"
+
+#: src/gui/setup_players.cpp:54
+msgid "Relation"
+msgstr ""
+
+#: src/gui/setup_players.cpp:58
+msgid "Neutral"
+msgstr ""
+
+#: src/gui/setup_players.cpp:59
+msgid "Friend"
+msgstr ""
+
+#: src/gui/setup_players.cpp:60
+msgid "Disregarded"
+msgstr ""
+
+#: src/gui/setup_players.cpp:61
+msgid "Ignored"
+msgstr ""
+
+#: src/gui/setup_players.cpp:214
+msgid "Save player list"
+msgstr ""
+
+#: src/gui/setup_players.cpp:216
+msgid "Allow trading"
+msgstr ""
+
+#: src/gui/setup_players.cpp:218
+msgid "Allow whispers"
+msgstr ""
+
+#: src/gui/setup_players.cpp:245
+msgid "When ignoring:"
+msgstr ""
+
+#: src/gui/setup_video.cpp:112
+msgid "Full screen"
+msgstr ""
+
+#: src/gui/setup_video.cpp:113
+msgid "OpenGL"
+msgstr ""
+
+#: src/gui/setup_video.cpp:114
+msgid "Custom cursor"
+msgstr ""
+
+#: src/gui/setup_video.cpp:116
+msgid "FPS Limit:"
+msgstr ""
+
+#: src/gui/setup_video.cpp:135
+msgid "Gui opacity"
+msgstr ""
+
+#: src/gui/setup_video.cpp:192
+msgid "Scroll radius"
+msgstr ""
+
+#: src/gui/setup_video.cpp:200
+msgid "Scroll laziness"
+msgstr ""
+
+#: src/gui/setup_video.cpp:208
+msgid "Ambient FX"
+msgstr ""
+
+#: src/gui/setup_video.cpp:215 src/gui/setup_video.cpp:412
+msgid "off"
+msgstr ""
+
+#: src/gui/setup_video.cpp:218 src/gui/setup_video.cpp:234
+#: src/gui/setup_video.cpp:415 src/gui/setup_video.cpp:429
+msgid "low"
+msgstr ""
+
+#: src/gui/setup_video.cpp:221 src/gui/setup_video.cpp:240
+#: src/gui/setup_video.cpp:418 src/gui/setup_video.cpp:435
+msgid "high"
+msgstr ""
+
+#: src/gui/setup_video.cpp:227
+msgid "Particle Detail"
+msgstr ""
+
+#: src/gui/setup_video.cpp:237 src/gui/setup_video.cpp:432
+msgid "medium"
+msgstr ""
+
+#: src/gui/setup_video.cpp:243 src/gui/setup_video.cpp:438
+msgid "max"
+msgstr ""
+
+#: src/gui/setup_video.cpp:309
+msgid "Switching to full screen"
+msgstr ""
+
+#: src/gui/setup_video.cpp:310
+msgid "Restart needed for changes to take effect."
+msgstr ""
+
+#: src/gui/setup_video.cpp:322
+msgid "Changing OpenGL"
+msgstr ""
+
+#: src/gui/setup_video.cpp:323
+msgid "Applying change to OpenGL requires restart."
+msgstr ""
+
+#: src/gui/skill.cpp:79
+msgid "Mystery Skill"
+msgstr ""
+
+#: src/gui/skill.cpp:132 src/gui/skill.cpp:188
+#, c-format
+msgid "Skill points: %d"
+msgstr ""
+
+#: src/gui/skill.cpp:133
+msgid "Up"
+msgstr ""
+
+#: src/gui/status.cpp:52 src/gui/status.cpp:235
+#, c-format
+msgid "Job: %d"
+msgstr ""
+
+#: src/gui/status.cpp:53 src/gui/status.cpp:238
+#, c-format
+msgid "Money: %d GP"
+msgstr ""
+
+#: src/gui/status.cpp:127
+#, fuzzy
+msgid "Stats"
+msgstr "สถานะ"
+
+#: src/gui/status.cpp:128
+msgid "Total"
+msgstr ""
+
+#: src/gui/status.cpp:129
+msgid "Cost"
+msgstr ""
+
+#: src/gui/status.cpp:132
+msgid "Attack:"
+msgstr ""
+
+#: src/gui/status.cpp:133
+msgid "Defense:"
+msgstr ""
+
+#: src/gui/status.cpp:134
+msgid "M.Attack:"
+msgstr ""
+
+#: src/gui/status.cpp:135
+msgid "M.Defense:"
+msgstr ""
+
+#: src/gui/status.cpp:136
+#, c-format
+msgid "% Accuracy:"
+msgstr ""
+
+#: src/gui/status.cpp:137
+#, c-format
+msgid "% Evade:"
+msgstr ""
+
+#: src/gui/status.cpp:138
+msgid "% Reflex:"
+msgstr ""
+
+#: src/gui/status.cpp:282
+#, fuzzy
+msgid "Strength"
+msgstr "Strength:"
+
+#: src/gui/status.cpp:283
+#, fuzzy
+msgid "Agility"
+msgstr "Agility:"
+
+#: src/gui/status.cpp:284
+#, fuzzy
+msgid "Vitality"
+msgstr "Vitality:"
+
+#: src/gui/status.cpp:285
+#, fuzzy
+msgid "Intelligence"
+msgstr "Intelligence:"
+
+#: src/gui/status.cpp:286
+#, fuzzy
+msgid "Dexterity"
+msgstr "Dexterity:"
+
+#: src/gui/status.cpp:287
+msgid "Luck"
+msgstr ""
+
+#: src/gui/status.cpp:305
+#, c-format
+msgid "Remaining Status Points: %d"
+msgstr ""
+
+#: src/gui/trade.cpp:61
+msgid "Add"
+msgstr ""
+
+#: src/gui/trade.cpp:64
+msgid "Trade"
+msgstr ""
+
+#: src/gui/trade.cpp:80 src/gui/trade.cpp:156 src/gui/trade.cpp:204
+#, c-format
+msgid "You get %d GP."
+msgstr ""
+
+#: src/gui/trade.cpp:81
+msgid "You give:"
+msgstr ""
+
+#: src/gui/trade.cpp:283
+msgid "Failed adding item. You can not overlap one kind of item on the window."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:93
+msgid "Updating..."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:119
+msgid "Play"
+msgstr ""
+
+#: src/gui/updatewindow.cpp:525
+msgid "Completed"
+msgstr ""
+
+#: src/resources/itemdb.cpp:99
+msgid "Unnamed"
+msgstr ""
+
+#: src/main.cpp:769
+msgid "Got disconnected from server!"
+msgstr ""
+
+#: src/main.cpp:956
+#, fuzzy
+msgid "Connecting to map server..."
+msgstr "à¸à¸³à¸¥à¸±à¸‡à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­..."
+
+#: src/main.cpp:964
+msgid "Connecting to character server..."
+msgstr ""
+
+#: src/main.cpp:972
+msgid "Connecting to account server..."
+msgstr ""
+
+#~ msgid "Change Password"
+#~ msgstr "เปลี่ยนรหัสผ่าน"
+
+#~ msgid "Change Email Address"
+#~ msgstr "เปลี่ยนที่อยู่ Email"
+
+#~ msgid "Willpower:"
+#~ msgstr "Willpower:"
+
+#~ msgid "Email:"
+#~ msgstr "Email:"
diff --git a/po/tmw.pot b/po/tmw.pot
new file mode 100644
index 00000000..9e8e8579
--- /dev/null
+++ b/po/tmw.pot
@@ -0,0 +1,896 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The Mana World Development Team
+# 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: themanaworld-devel@lists.sourceforge.net\n"
+"POT-Creation-Date: 2009-01-08 22:10+0100\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"
+
+#: src/gui/buy.cpp:43 src/gui/buy.cpp:61 src/gui/buysell.cpp:35
+msgid "Buy"
+msgstr ""
+
+#: src/gui/buy.cpp:58 src/gui/buy.cpp:239 src/gui/sell.cpp:65
+#: src/gui/sell.cpp:259
+#, c-format
+msgid "Price: %d GP / Total: %d GP"
+msgstr ""
+
+#: src/gui/buy.cpp:62 src/gui/sell.cpp:69
+msgid "Quit"
+msgstr ""
+
+#: src/gui/buy.cpp:63 src/gui/buy.cpp:206 src/gui/buy.cpp:224
+#: src/gui/inventorywindow.cpp:150 src/gui/inventorywindow.cpp:160
+#: src/gui/sell.cpp:70 src/gui/sell.cpp:230 src/gui/sell.cpp:244
+#: src/gui/trade.cpp:94 src/gui/trade.cpp:266
+#, c-format
+msgid "Description: %s"
+msgstr ""
+
+#: src/gui/buy.cpp:64 src/gui/buy.cpp:208 src/gui/buy.cpp:225
+#: src/gui/inventorywindow.cpp:149 src/gui/inventorywindow.cpp:158
+#: src/gui/sell.cpp:71 src/gui/sell.cpp:232 src/gui/sell.cpp:245
+#, c-format
+msgid "Effect: %s"
+msgstr ""
+
+#: src/gui/buysell.cpp:31
+msgid "Shop"
+msgstr ""
+
+#: src/gui/buysell.cpp:35 src/gui/sell.cpp:48 src/gui/sell.cpp:68
+msgid "Sell"
+msgstr ""
+
+#: src/gui/buysell.cpp:35 src/gui/char_select.cpp:85
+#: src/gui/char_select.cpp:258 src/gui/char_server.cpp:60
+#: src/gui/connection.cpp:47 src/gui/item_amount.cpp:61 src/gui/login.cpp:52
+#: src/gui/npclistdialog.cpp:45 src/gui/register.cpp:76 src/gui/setup.cpp:58
+#: src/gui/trade.cpp:63 src/gui/updatewindow.cpp:118
+msgid "Cancel"
+msgstr ""
+
+#: src/gui/char_select.cpp:63
+msgid "Confirm Character Delete"
+msgstr ""
+
+#: src/gui/char_select.cpp:64
+msgid "Are you sure you want to delete this character?"
+msgstr ""
+
+#: src/gui/char_select.cpp:81
+msgid "Select Character"
+msgstr ""
+
+#: src/gui/char_select.cpp:84 src/gui/item_amount.cpp:60 src/gui/login.cpp:51
+#: src/gui/ok_dialog.cpp:37 src/gui/trade.cpp:62
+msgid "Ok"
+msgstr ""
+
+#: src/gui/char_select.cpp:86
+msgid "New"
+msgstr ""
+
+#: src/gui/char_select.cpp:87 src/gui/setup_players.cpp:220
+msgid "Delete"
+msgstr ""
+
+#: src/gui/char_select.cpp:88
+msgid "Previous"
+msgstr ""
+
+#: src/gui/char_select.cpp:89
+msgid "Next"
+msgstr ""
+
+#: src/gui/char_select.cpp:91 src/gui/char_select.cpp:171
+#: src/gui/char_select.cpp:183 src/gui/inventorywindow.cpp:148
+#: src/gui/inventorywindow.cpp:156 src/gui/trade.cpp:92 src/gui/trade.cpp:264
+#, c-format
+msgid "Name: %s"
+msgstr ""
+
+#: src/gui/char_select.cpp:92 src/gui/char_select.cpp:172
+#: src/gui/char_select.cpp:184 src/gui/status.cpp:51 src/gui/status.cpp:232
+#, c-format
+msgid "Level: %d"
+msgstr ""
+
+#: src/gui/char_select.cpp:93 src/gui/char_select.cpp:173
+#: src/gui/char_select.cpp:185
+#, c-format
+msgid "Job Level: %d"
+msgstr ""
+
+#: src/gui/char_select.cpp:94 src/gui/char_select.cpp:186
+#, c-format
+msgid "Money: %d"
+msgstr ""
+
+#: src/gui/char_select.cpp:174
+#, c-format
+msgid "Gold: %d"
+msgstr ""
+
+#: src/gui/char_select.cpp:243
+msgid "Create Character"
+msgstr ""
+
+#: src/gui/char_select.cpp:250 src/gui/login.cpp:44 src/gui/register.cpp:65
+msgid "Name:"
+msgstr ""
+
+#: src/gui/char_select.cpp:253
+msgid "Hair Color:"
+msgstr ""
+
+#: src/gui/char_select.cpp:256
+msgid "Hair Style:"
+msgstr ""
+
+#: src/gui/char_select.cpp:257
+msgid "Create"
+msgstr ""
+
+#: src/gui/char_server.cpp:52
+msgid "Select Server"
+msgstr ""
+
+#: src/gui/char_server.cpp:59 src/gui/npclistdialog.cpp:44
+#: src/gui/npc_text.cpp:46
+msgid "OK"
+msgstr ""
+
+#: src/gui/chat.cpp:122
+msgid "Global announcement:"
+msgstr ""
+
+#: src/gui/chat.cpp:125
+#, c-format
+msgid "Global announcement from %s:"
+msgstr ""
+
+#: src/gui/chat.cpp:140 src/gui/login.cpp:46 src/gui/register.cpp:68
+msgid "Server:"
+msgstr ""
+
+#: src/gui/chat.cpp:146
+#, c-format
+msgid "%s whispers:"
+msgstr ""
+
+#: src/gui/chat.cpp:283
+#, c-format
+msgid "Whispering to %s: %s"
+msgstr ""
+
+#: src/gui/chat.cpp:356
+msgid "Unknown command"
+msgstr ""
+
+#: src/gui/chat.cpp:366
+msgid "Trade failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:369
+msgid "Emote failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:372
+msgid "Sit failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:375
+msgid "Chat creating failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:378
+msgid "Could not join party!"
+msgstr ""
+
+#: src/gui/chat.cpp:381
+msgid "Cannot shout!"
+msgstr ""
+
+#: src/gui/chat.cpp:389
+msgid "You have not yet reached a high enough lvl!"
+msgstr ""
+
+#: src/gui/chat.cpp:392
+msgid "Insufficient HP!"
+msgstr ""
+
+#: src/gui/chat.cpp:395
+msgid "Insufficient SP!"
+msgstr ""
+
+#: src/gui/chat.cpp:398
+msgid "You have no memos!"
+msgstr ""
+
+#: src/gui/chat.cpp:401
+msgid "You cannot do that right now!"
+msgstr ""
+
+#: src/gui/chat.cpp:404
+msgid "Seems you need more Zeny... ;-)"
+msgstr ""
+
+#: src/gui/chat.cpp:407
+msgid "You cannot use this skill with that kind of weapon!"
+msgstr ""
+
+#: src/gui/chat.cpp:410
+msgid "You need another red gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:413
+msgid "You need another blue gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:416
+msgid "You're carrying to much to do this!"
+msgstr ""
+
+#: src/gui/chat.cpp:419
+msgid "Huh? What's that?"
+msgstr ""
+
+#: src/gui/chat.cpp:425
+msgid "Warp failed..."
+msgstr ""
+
+#: src/gui/chat.cpp:428
+msgid "Could not steal anything..."
+msgstr ""
+
+#: src/gui/chat.cpp:431
+msgid "Poison had no effect..."
+msgstr ""
+
+#: src/gui/chat.cpp:496
+msgid "-- Help --"
+msgstr ""
+
+#: src/gui/chat.cpp:499
+msgid "/announce: Global announcement (GM only)"
+msgstr ""
+
+#: src/gui/chat.cpp:500
+msgid "/clear: Clears this window"
+msgstr ""
+
+#: src/gui/chat.cpp:501
+msgid "/help: Display this help"
+msgstr ""
+
+#: src/gui/chat.cpp:502
+msgid "/where: Display map name"
+msgstr ""
+
+#: src/gui/chat.cpp:503
+msgid "/whisper <nick> <message>: Sends a private <message> to <nick>"
+msgstr ""
+
+#: src/gui/chat.cpp:505
+msgid "/w <nick> <message>: Short form for /whisper"
+msgstr ""
+
+#: src/gui/chat.cpp:506
+msgid "/who: Display number of online users"
+msgstr ""
+
+#: src/gui/chat.cpp:507
+msgid "For more information, type /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:512
+msgid "Command: /announce <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:513
+msgid "*** only available to a GM ***"
+msgstr ""
+
+#: src/gui/chat.cpp:514
+msgid "This command sends the message <msg> to all players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:520
+msgid "Command: /clear"
+msgstr ""
+
+#: src/gui/chat.cpp:521
+msgid "This command clears the chat log of previous chat."
+msgstr ""
+
+#: src/gui/chat.cpp:527
+msgid "Command: /help"
+msgstr ""
+
+#: src/gui/chat.cpp:528
+msgid "This command displays a list of all commands available."
+msgstr ""
+
+#: src/gui/chat.cpp:530
+msgid "Command: /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:531
+msgid "This command displays help on <command>."
+msgstr ""
+
+#: src/gui/chat.cpp:536
+msgid "Command: /where"
+msgstr ""
+
+#: src/gui/chat.cpp:537
+msgid "This command displays the name of the current map."
+msgstr ""
+
+#: src/gui/chat.cpp:543
+msgid "Command: /whisper <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:544
+msgid "Command: /w <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:545
+msgid "This command sends the message <msg> to <nick>."
+msgstr ""
+
+#: src/gui/chat.cpp:547
+msgid "If the <nick> has spaces in it, enclose it in double quotes (\")."
+msgstr ""
+
+#: src/gui/chat.cpp:553
+msgid "Command: /who"
+msgstr ""
+
+#: src/gui/chat.cpp:554
+msgid "This command displays the number of players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:558
+msgid "Unknown command."
+msgstr ""
+
+#: src/gui/chat.cpp:559
+msgid "Type /help for a list of commands."
+msgstr ""
+
+#: src/gui/confirm_dialog.cpp:35
+msgid "Yes"
+msgstr ""
+
+#: src/gui/confirm_dialog.cpp:36
+msgid "No"
+msgstr ""
+
+#: src/gui/connection.cpp:49 src/gui/updatewindow.cpp:116
+msgid "Connecting..."
+msgstr ""
+
+#: src/gui/equipmentwindow.cpp:38 src/gui/menuwindow.cpp:62
+msgid "Equipment"
+msgstr ""
+
+#: src/gui/help.cpp:33
+msgid "Help"
+msgstr ""
+
+#: src/gui/help.cpp:41
+msgid "Close"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:46 src/gui/menuwindow.cpp:63
+msgid "Inventory"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:56 src/gui/inventorywindow.cpp:232
+#: src/gui/skill.cpp:134
+msgid "Use"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:57
+msgid "Drop"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:99
+#, c-format
+msgid "Weight: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:104
+#, c-format
+msgid "Slots used: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:225
+msgid "Unequip"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:228
+msgid "Equip"
+msgstr ""
+
+#: src/gui/item_amount.cpp:76
+msgid "Select amount of items to trade."
+msgstr ""
+
+#: src/gui/item_amount.cpp:80
+msgid "Select amount of items to drop."
+msgstr ""
+
+#: src/gui/login.cpp:42
+msgid "Login"
+msgstr ""
+
+#: src/gui/login.cpp:45 src/gui/register.cpp:66
+msgid "Password:"
+msgstr ""
+
+#: src/gui/login.cpp:50
+msgid "Remember Username"
+msgstr ""
+
+#: src/gui/login.cpp:53 src/gui/register.cpp:75
+msgid "Register"
+msgstr ""
+
+#: src/gui/menuwindow.cpp:61
+msgid "Status"
+msgstr ""
+
+#: src/gui/menuwindow.cpp:64 src/gui/skill.cpp:119
+msgid "Skills"
+msgstr ""
+
+#: src/gui/menuwindow.cpp:65
+msgid "Shortcut"
+msgstr ""
+
+#: src/gui/menuwindow.cpp:66 src/main.cpp:716
+msgid "Setup"
+msgstr ""
+
+#: src/gui/minimap.cpp:34
+msgid "MiniMap"
+msgstr ""
+
+#: src/gui/npclistdialog.cpp:35 src/gui/npc_text.cpp:35
+msgid "NPC"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:81
+#, c-format
+msgid "@@trade|Trade With %s@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:83
+#, c-format
+msgid "@@attack|Attack %s@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:114
+msgid "@@talk|Talk To NPC@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:124 src/gui/popupmenu.cpp:140
+#: src/gui/popupmenu.cpp:293
+msgid "@@cancel|Cancel@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:136
+#, c-format
+msgid "@@pickup|Pick Up %s@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:283
+msgid "@@use|Unequip@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:285
+msgid "@@use|Equip@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:288
+msgid "@@use|Use@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:290
+msgid "@@drop|Drop@@"
+msgstr ""
+
+#: src/gui/popupmenu.cpp:291
+msgid "@@description|Description@@"
+msgstr ""
+
+#: src/gui/register.cpp:67
+msgid "Confirm:"
+msgstr ""
+
+#: src/gui/register.cpp:73
+msgid "Male"
+msgstr ""
+
+#: src/gui/register.cpp:74
+msgid "Female"
+msgstr ""
+
+#: src/gui/register.cpp:176
+#, c-format
+msgid "The username needs to be at least %d characters long."
+msgstr ""
+
+#: src/gui/register.cpp:184
+#, c-format
+msgid "The username needs to be less than %d characters long."
+msgstr ""
+
+#: src/gui/register.cpp:192
+#, c-format
+msgid "The password needs to be at least %d characters long."
+msgstr ""
+
+#: src/gui/register.cpp:200
+#, c-format
+msgid "The password needs to be less than %d characters long."
+msgstr ""
+
+#: src/gui/register.cpp:207
+msgid "Passwords do not match."
+msgstr ""
+
+#: src/gui/register.cpp:227 src/main.cpp:945
+msgid "Error"
+msgstr ""
+
+#: src/gui/setup_audio.cpp:40
+msgid "Sound"
+msgstr ""
+
+#: src/gui/setup_audio.cpp:46
+msgid "Sfx volume"
+msgstr ""
+
+#: src/gui/setup_audio.cpp:47
+msgid "Music volume"
+msgstr ""
+
+#: src/gui/setup.cpp:58
+msgid "Apply"
+msgstr ""
+
+#: src/gui/setup.cpp:58
+msgid "Reset Windows"
+msgstr ""
+
+#: src/gui/setup.cpp:79
+msgid "Video"
+msgstr ""
+
+#: src/gui/setup.cpp:83
+msgid "Audio"
+msgstr ""
+
+#: src/gui/setup.cpp:87
+msgid "Joystick"
+msgstr ""
+
+#: src/gui/setup.cpp:91
+msgid "Keyboard"
+msgstr ""
+
+#: src/gui/setup.cpp:95
+msgid "Players"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:36 src/gui/setup_joystick.cpp:70
+msgid "Press the button to start calibration"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:37 src/gui/setup_joystick.cpp:68
+msgid "Calibrate"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:38
+msgid "Enable joystick"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:73
+msgid "Stop"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:74
+msgid "Rotate the stick"
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:88
+msgid "Assign"
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:94
+msgid "Default"
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:115
+msgid "Key Conflict(s) Detected."
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:116
+msgid "Resolve them, or gameplay may result in strange behaviour."
+msgstr ""
+
+#: src/gui/setup_players.cpp:53
+msgid "Name"
+msgstr ""
+
+#: src/gui/setup_players.cpp:54
+msgid "Relation"
+msgstr ""
+
+#: src/gui/setup_players.cpp:58
+msgid "Neutral"
+msgstr ""
+
+#: src/gui/setup_players.cpp:59
+msgid "Friend"
+msgstr ""
+
+#: src/gui/setup_players.cpp:60
+msgid "Disregarded"
+msgstr ""
+
+#: src/gui/setup_players.cpp:61
+msgid "Ignored"
+msgstr ""
+
+#: src/gui/setup_players.cpp:214
+msgid "Save player list"
+msgstr ""
+
+#: src/gui/setup_players.cpp:216
+msgid "Allow trading"
+msgstr ""
+
+#: src/gui/setup_players.cpp:218
+msgid "Allow whispers"
+msgstr ""
+
+#: src/gui/setup_players.cpp:245
+msgid "When ignoring:"
+msgstr ""
+
+#: src/gui/setup_video.cpp:112
+msgid "Full screen"
+msgstr ""
+
+#: src/gui/setup_video.cpp:113
+msgid "OpenGL"
+msgstr ""
+
+#: src/gui/setup_video.cpp:114
+msgid "Custom cursor"
+msgstr ""
+
+#: src/gui/setup_video.cpp:116
+msgid "FPS Limit:"
+msgstr ""
+
+#: src/gui/setup_video.cpp:135
+msgid "Gui opacity"
+msgstr ""
+
+#: src/gui/setup_video.cpp:192
+msgid "Scroll radius"
+msgstr ""
+
+#: src/gui/setup_video.cpp:200
+msgid "Scroll laziness"
+msgstr ""
+
+#: src/gui/setup_video.cpp:208
+msgid "Ambient FX"
+msgstr ""
+
+#: src/gui/setup_video.cpp:215 src/gui/setup_video.cpp:412
+msgid "off"
+msgstr ""
+
+#: src/gui/setup_video.cpp:218 src/gui/setup_video.cpp:234
+#: src/gui/setup_video.cpp:415 src/gui/setup_video.cpp:429
+msgid "low"
+msgstr ""
+
+#: src/gui/setup_video.cpp:221 src/gui/setup_video.cpp:240
+#: src/gui/setup_video.cpp:418 src/gui/setup_video.cpp:435
+msgid "high"
+msgstr ""
+
+#: src/gui/setup_video.cpp:227
+msgid "Particle Detail"
+msgstr ""
+
+#: src/gui/setup_video.cpp:237 src/gui/setup_video.cpp:432
+msgid "medium"
+msgstr ""
+
+#: src/gui/setup_video.cpp:243 src/gui/setup_video.cpp:438
+msgid "max"
+msgstr ""
+
+#: src/gui/setup_video.cpp:309
+msgid "Switching to full screen"
+msgstr ""
+
+#: src/gui/setup_video.cpp:310
+msgid "Restart needed for changes to take effect."
+msgstr ""
+
+#: src/gui/setup_video.cpp:322
+msgid "Changing OpenGL"
+msgstr ""
+
+#: src/gui/setup_video.cpp:323
+msgid "Applying change to OpenGL requires restart."
+msgstr ""
+
+#: src/gui/skill.cpp:79
+msgid "Mystery Skill"
+msgstr ""
+
+#: src/gui/skill.cpp:132 src/gui/skill.cpp:188
+#, c-format
+msgid "Skill points: %d"
+msgstr ""
+
+#: src/gui/skill.cpp:133
+msgid "Up"
+msgstr ""
+
+#: src/gui/status.cpp:52 src/gui/status.cpp:235
+#, c-format
+msgid "Job: %d"
+msgstr ""
+
+#: src/gui/status.cpp:53 src/gui/status.cpp:238
+#, c-format
+msgid "Money: %d GP"
+msgstr ""
+
+#: src/gui/status.cpp:127
+msgid "Stats"
+msgstr ""
+
+#: src/gui/status.cpp:128
+msgid "Total"
+msgstr ""
+
+#: src/gui/status.cpp:129
+msgid "Cost"
+msgstr ""
+
+#: src/gui/status.cpp:132
+msgid "Attack:"
+msgstr ""
+
+#: src/gui/status.cpp:133
+msgid "Defense:"
+msgstr ""
+
+#: src/gui/status.cpp:134
+msgid "M.Attack:"
+msgstr ""
+
+#: src/gui/status.cpp:135
+msgid "M.Defense:"
+msgstr ""
+
+#: src/gui/status.cpp:136
+#, c-format
+msgid "% Accuracy:"
+msgstr ""
+
+#: src/gui/status.cpp:137
+#, c-format
+msgid "% Evade:"
+msgstr ""
+
+#: src/gui/status.cpp:138
+msgid "% Reflex:"
+msgstr ""
+
+#: src/gui/status.cpp:282
+msgid "Strength"
+msgstr ""
+
+#: src/gui/status.cpp:283
+msgid "Agility"
+msgstr ""
+
+#: src/gui/status.cpp:284
+msgid "Vitality"
+msgstr ""
+
+#: src/gui/status.cpp:285
+msgid "Intelligence"
+msgstr ""
+
+#: src/gui/status.cpp:286
+msgid "Dexterity"
+msgstr ""
+
+#: src/gui/status.cpp:287
+msgid "Luck"
+msgstr ""
+
+#: src/gui/status.cpp:305
+#, c-format
+msgid "Remaining Status Points: %d"
+msgstr ""
+
+#: src/gui/trade.cpp:61
+msgid "Add"
+msgstr ""
+
+#: src/gui/trade.cpp:64
+msgid "Trade"
+msgstr ""
+
+#: src/gui/trade.cpp:80 src/gui/trade.cpp:156 src/gui/trade.cpp:204
+#, c-format
+msgid "You get %d GP."
+msgstr ""
+
+#: src/gui/trade.cpp:81
+msgid "You give:"
+msgstr ""
+
+#: src/gui/trade.cpp:283
+msgid "Failed adding item. You can not overlap one kind of item on the window."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:93
+msgid "Updating..."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:119
+msgid "Play"
+msgstr ""
+
+#: src/gui/updatewindow.cpp:525
+msgid "Completed"
+msgstr ""
+
+#: src/resources/itemdb.cpp:99
+msgid "Unnamed"
+msgstr ""
+
+#: src/main.cpp:769
+msgid "Got disconnected from server!"
+msgstr ""
+
+#: src/main.cpp:956
+msgid "Connecting to map server..."
+msgstr ""
+
+#: src/main.cpp:964
+msgid "Connecting to character server..."
+msgstr ""
+
+#: src/main.cpp:972
+msgid "Connecting to account server..."
+msgstr ""
diff --git a/po/zh_CN.po b/po/zh_CN.po
new file mode 100644
index 00000000..031fde9c
--- /dev/null
+++ b/po/zh_CN.po
@@ -0,0 +1,985 @@
+# Simplified Chinese translation for tmw
+# Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008
+# This file is distributed under the same license as the tmw package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: tmw\n"
+"Report-Msgid-Bugs-To: themanaworld-devel@lists.sourceforge.net\n"
+"POT-Creation-Date: 2009-01-08 22:10+0100\n"
+"PO-Revision-Date: 2008-09-17 14:41+0000\n"
+"Last-Translator: luojie-dune <Unknown>\n"
+"Language-Team: Simplified Chinese <zh_CN@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-01-06 12:40+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#: src/gui/buy.cpp:43 src/gui/buy.cpp:61 src/gui/buysell.cpp:35
+msgid "Buy"
+msgstr "ä¹°"
+
+#: src/gui/buy.cpp:58 src/gui/buy.cpp:239 src/gui/sell.cpp:65
+#: src/gui/sell.cpp:259
+#, c-format
+msgid "Price: %d GP / Total: %d GP"
+msgstr "价格:%d GP/总数:%d GP"
+
+#: src/gui/buy.cpp:62 src/gui/sell.cpp:69
+msgid "Quit"
+msgstr "退出"
+
+#: src/gui/buy.cpp:63 src/gui/buy.cpp:206 src/gui/buy.cpp:224
+#: src/gui/inventorywindow.cpp:150 src/gui/inventorywindow.cpp:160
+#: src/gui/sell.cpp:70 src/gui/sell.cpp:230 src/gui/sell.cpp:244
+#: src/gui/trade.cpp:94 src/gui/trade.cpp:266
+#, c-format
+msgid "Description: %s"
+msgstr "æ述:%s"
+
+#: src/gui/buy.cpp:64 src/gui/buy.cpp:208 src/gui/buy.cpp:225
+#: src/gui/inventorywindow.cpp:149 src/gui/inventorywindow.cpp:158
+#: src/gui/sell.cpp:71 src/gui/sell.cpp:232 src/gui/sell.cpp:245
+#, c-format
+msgid "Effect: %s"
+msgstr "å½±å“: %s"
+
+#: src/gui/buysell.cpp:31
+#, fuzzy
+msgid "Shop"
+msgstr "åœæ­¢"
+
+#: src/gui/buysell.cpp:35 src/gui/sell.cpp:48 src/gui/sell.cpp:68
+msgid "Sell"
+msgstr "出售"
+
+#: src/gui/buysell.cpp:35 src/gui/char_select.cpp:85
+#: src/gui/char_select.cpp:258 src/gui/char_server.cpp:60
+#: src/gui/connection.cpp:47 src/gui/item_amount.cpp:61 src/gui/login.cpp:52
+#: src/gui/npclistdialog.cpp:45 src/gui/register.cpp:76 src/gui/setup.cpp:58
+#: src/gui/trade.cpp:63 src/gui/updatewindow.cpp:118
+msgid "Cancel"
+msgstr "å–消"
+
+#: src/gui/char_select.cpp:63
+msgid "Confirm Character Delete"
+msgstr ""
+
+#: src/gui/char_select.cpp:64
+msgid "Are you sure you want to delete this character?"
+msgstr "你确定想删除这个较色"
+
+#: src/gui/char_select.cpp:81
+msgid "Select Character"
+msgstr "选择较色"
+
+#: src/gui/char_select.cpp:84 src/gui/item_amount.cpp:60 src/gui/login.cpp:51
+#: src/gui/ok_dialog.cpp:37 src/gui/trade.cpp:62
+msgid "Ok"
+msgstr "OK"
+
+#: src/gui/char_select.cpp:86
+msgid "New"
+msgstr "新建"
+
+#: src/gui/char_select.cpp:87 src/gui/setup_players.cpp:220
+msgid "Delete"
+msgstr "删除"
+
+#: src/gui/char_select.cpp:88
+msgid "Previous"
+msgstr "上一页"
+
+#: src/gui/char_select.cpp:89
+msgid "Next"
+msgstr "下一页"
+
+#: src/gui/char_select.cpp:91 src/gui/char_select.cpp:171
+#: src/gui/char_select.cpp:183 src/gui/inventorywindow.cpp:148
+#: src/gui/inventorywindow.cpp:156 src/gui/trade.cpp:92 src/gui/trade.cpp:264
+#, c-format
+msgid "Name: %s"
+msgstr "å字:%s"
+
+#: src/gui/char_select.cpp:92 src/gui/char_select.cpp:172
+#: src/gui/char_select.cpp:184 src/gui/status.cpp:51 src/gui/status.cpp:232
+#, c-format
+msgid "Level: %d"
+msgstr "等级:%d"
+
+#: src/gui/char_select.cpp:93 src/gui/char_select.cpp:173
+#: src/gui/char_select.cpp:185
+#, fuzzy, c-format
+msgid "Job Level: %d"
+msgstr "等级:%d"
+
+#: src/gui/char_select.cpp:94 src/gui/char_select.cpp:186
+#, c-format
+msgid "Money: %d"
+msgstr "金钱:%d"
+
+#: src/gui/char_select.cpp:174
+#, c-format
+msgid "Gold: %d"
+msgstr ""
+
+#: src/gui/char_select.cpp:243
+msgid "Create Character"
+msgstr "创建角色"
+
+#: src/gui/char_select.cpp:250 src/gui/login.cpp:44 src/gui/register.cpp:65
+msgid "Name:"
+msgstr "å称"
+
+#: src/gui/char_select.cpp:253
+msgid "Hair Color:"
+msgstr "头å‘颜色"
+
+#: src/gui/char_select.cpp:256
+msgid "Hair Style:"
+msgstr "å‘åž‹"
+
+#: src/gui/char_select.cpp:257
+msgid "Create"
+msgstr "建立"
+
+#: src/gui/char_server.cpp:52
+#, fuzzy
+msgid "Select Server"
+msgstr "选择较色"
+
+#: src/gui/char_server.cpp:59 src/gui/npclistdialog.cpp:44
+#: src/gui/npc_text.cpp:46
+msgid "OK"
+msgstr ""
+
+#: src/gui/chat.cpp:122
+msgid "Global announcement:"
+msgstr ""
+
+#: src/gui/chat.cpp:125
+#, c-format
+msgid "Global announcement from %s:"
+msgstr ""
+
+#: src/gui/chat.cpp:140 src/gui/login.cpp:46 src/gui/register.cpp:68
+msgid "Server:"
+msgstr "æœåŠ¡å™¨ï¼š"
+
+#: src/gui/chat.cpp:146
+#, c-format
+msgid "%s whispers:"
+msgstr ""
+
+#: src/gui/chat.cpp:283
+#, c-format
+msgid "Whispering to %s: %s"
+msgstr ""
+
+#: src/gui/chat.cpp:356
+msgid "Unknown command"
+msgstr ""
+
+#: src/gui/chat.cpp:366
+msgid "Trade failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:369
+msgid "Emote failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:372
+msgid "Sit failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:375
+msgid "Chat creating failed!"
+msgstr ""
+
+#: src/gui/chat.cpp:378
+msgid "Could not join party!"
+msgstr ""
+
+#: src/gui/chat.cpp:381
+msgid "Cannot shout!"
+msgstr ""
+
+#: src/gui/chat.cpp:389
+msgid "You have not yet reached a high enough lvl!"
+msgstr ""
+
+#: src/gui/chat.cpp:392
+msgid "Insufficient HP!"
+msgstr ""
+
+#: src/gui/chat.cpp:395
+msgid "Insufficient SP!"
+msgstr ""
+
+#: src/gui/chat.cpp:398
+msgid "You have no memos!"
+msgstr ""
+
+#: src/gui/chat.cpp:401
+msgid "You cannot do that right now!"
+msgstr ""
+
+#: src/gui/chat.cpp:404
+msgid "Seems you need more Zeny... ;-)"
+msgstr ""
+
+#: src/gui/chat.cpp:407
+msgid "You cannot use this skill with that kind of weapon!"
+msgstr ""
+
+#: src/gui/chat.cpp:410
+msgid "You need another red gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:413
+msgid "You need another blue gem!"
+msgstr ""
+
+#: src/gui/chat.cpp:416
+msgid "You're carrying to much to do this!"
+msgstr ""
+
+#: src/gui/chat.cpp:419
+msgid "Huh? What's that?"
+msgstr ""
+
+#: src/gui/chat.cpp:425
+msgid "Warp failed..."
+msgstr ""
+
+#: src/gui/chat.cpp:428
+msgid "Could not steal anything..."
+msgstr ""
+
+#: src/gui/chat.cpp:431
+msgid "Poison had no effect..."
+msgstr ""
+
+#: src/gui/chat.cpp:496
+msgid "-- Help --"
+msgstr ""
+
+#: src/gui/chat.cpp:499
+msgid "/announce: Global announcement (GM only)"
+msgstr ""
+
+#: src/gui/chat.cpp:500
+msgid "/clear: Clears this window"
+msgstr ""
+
+#: src/gui/chat.cpp:501
+msgid "/help: Display this help"
+msgstr ""
+
+#: src/gui/chat.cpp:502
+msgid "/where: Display map name"
+msgstr ""
+
+#: src/gui/chat.cpp:503
+msgid "/whisper <nick> <message>: Sends a private <message> to <nick>"
+msgstr ""
+
+#: src/gui/chat.cpp:505
+msgid "/w <nick> <message>: Short form for /whisper"
+msgstr ""
+
+#: src/gui/chat.cpp:506
+msgid "/who: Display number of online users"
+msgstr ""
+
+#: src/gui/chat.cpp:507
+msgid "For more information, type /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:512
+msgid "Command: /announce <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:513
+msgid "*** only available to a GM ***"
+msgstr ""
+
+#: src/gui/chat.cpp:514
+msgid "This command sends the message <msg> to all players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:520
+msgid "Command: /clear"
+msgstr ""
+
+#: src/gui/chat.cpp:521
+msgid "This command clears the chat log of previous chat."
+msgstr ""
+
+#: src/gui/chat.cpp:527
+msgid "Command: /help"
+msgstr ""
+
+#: src/gui/chat.cpp:528
+msgid "This command displays a list of all commands available."
+msgstr ""
+
+#: src/gui/chat.cpp:530
+msgid "Command: /help <command>"
+msgstr ""
+
+#: src/gui/chat.cpp:531
+msgid "This command displays help on <command>."
+msgstr ""
+
+#: src/gui/chat.cpp:536
+msgid "Command: /where"
+msgstr ""
+
+#: src/gui/chat.cpp:537
+msgid "This command displays the name of the current map."
+msgstr ""
+
+#: src/gui/chat.cpp:543
+msgid "Command: /whisper <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:544
+msgid "Command: /w <nick> <msg>"
+msgstr ""
+
+#: src/gui/chat.cpp:545
+msgid "This command sends the message <msg> to <nick>."
+msgstr ""
+
+#: src/gui/chat.cpp:547
+msgid "If the <nick> has spaces in it, enclose it in double quotes (\")."
+msgstr ""
+
+#: src/gui/chat.cpp:553
+msgid "Command: /who"
+msgstr ""
+
+#: src/gui/chat.cpp:554
+msgid "This command displays the number of players currently online."
+msgstr ""
+
+#: src/gui/chat.cpp:558
+msgid "Unknown command."
+msgstr ""
+
+#: src/gui/chat.cpp:559
+msgid "Type /help for a list of commands."
+msgstr ""
+
+#: src/gui/confirm_dialog.cpp:35
+msgid "Yes"
+msgstr "是"
+
+#: src/gui/confirm_dialog.cpp:36
+msgid "No"
+msgstr "å¦"
+
+#: src/gui/connection.cpp:49 src/gui/updatewindow.cpp:116
+msgid "Connecting..."
+msgstr "连接中..."
+
+#: src/gui/equipmentwindow.cpp:38 src/gui/menuwindow.cpp:62
+msgid "Equipment"
+msgstr "装备"
+
+#: src/gui/help.cpp:33
+msgid "Help"
+msgstr ""
+
+#: src/gui/help.cpp:41
+msgid "Close"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:46 src/gui/menuwindow.cpp:63
+msgid "Inventory"
+msgstr "清å•"
+
+#: src/gui/inventorywindow.cpp:56 src/gui/inventorywindow.cpp:232
+#: src/gui/skill.cpp:134
+msgid "Use"
+msgstr "使用"
+
+#: src/gui/inventorywindow.cpp:57
+msgid "Drop"
+msgstr "丢弃"
+
+#: src/gui/inventorywindow.cpp:99
+#, c-format
+msgid "Weight: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:104
+#, c-format
+msgid "Slots used: %d / %d"
+msgstr ""
+
+#: src/gui/inventorywindow.cpp:225
+msgid "Unequip"
+msgstr "å¸ä¸‹è£…备"
+
+#: src/gui/inventorywindow.cpp:228
+msgid "Equip"
+msgstr "装备"
+
+#: src/gui/item_amount.cpp:76
+msgid "Select amount of items to trade."
+msgstr "请选择交易的物å“æ•°é‡"
+
+#: src/gui/item_amount.cpp:80
+msgid "Select amount of items to drop."
+msgstr "请选择丢弃的物å“æ•°é‡"
+
+#: src/gui/login.cpp:42
+msgid "Login"
+msgstr "登陆"
+
+#: src/gui/login.cpp:45 src/gui/register.cpp:66
+msgid "Password:"
+msgstr "密ç ï¼š"
+
+#: src/gui/login.cpp:50
+msgid "Remember Username"
+msgstr ""
+
+#: src/gui/login.cpp:53 src/gui/register.cpp:75
+msgid "Register"
+msgstr "注册"
+
+#: src/gui/menuwindow.cpp:61
+msgid "Status"
+msgstr "状æ€"
+
+#: src/gui/menuwindow.cpp:64 src/gui/skill.cpp:119
+msgid "Skills"
+msgstr "技能"
+
+#: src/gui/menuwindow.cpp:65
+msgid "Shortcut"
+msgstr "å¿«æ·é”®"
+
+#: src/gui/menuwindow.cpp:66 src/main.cpp:716
+msgid "Setup"
+msgstr "安装"
+
+#: src/gui/minimap.cpp:34
+msgid "MiniMap"
+msgstr "å°åœ°å›¾"
+
+#: src/gui/npclistdialog.cpp:35 src/gui/npc_text.cpp:35
+msgid "NPC"
+msgstr "NPC"
+
+#: src/gui/popupmenu.cpp:81
+#, c-format
+msgid "@@trade|Trade With %s@@"
+msgstr "@@交易|与%s交易@@"
+
+#: src/gui/popupmenu.cpp:83
+#, c-format
+msgid "@@attack|Attack %s@@"
+msgstr "@@攻击|攻击%s@@"
+
+#: src/gui/popupmenu.cpp:114
+msgid "@@talk|Talk To NPC@@"
+msgstr "@@è°ˆè¯|å’ŒNPCè°ˆè¯@@"
+
+#: src/gui/popupmenu.cpp:124 src/gui/popupmenu.cpp:140
+#: src/gui/popupmenu.cpp:293
+msgid "@@cancel|Cancel@@"
+msgstr "@@å–消|å–消@@"
+
+#: src/gui/popupmenu.cpp:136
+#, c-format
+msgid "@@pickup|Pick Up %s@@"
+msgstr "@@æ¡èµ·|æ¡èµ·%s@@"
+
+#: src/gui/popupmenu.cpp:283
+#, fuzzy
+msgid "@@use|Unequip@@"
+msgstr "@@使用|装备@@"
+
+#: src/gui/popupmenu.cpp:285
+msgid "@@use|Equip@@"
+msgstr "@@使用|装备@@"
+
+#: src/gui/popupmenu.cpp:288
+msgid "@@use|Use@@"
+msgstr "@@使用|使用@@"
+
+#: src/gui/popupmenu.cpp:290
+msgid "@@drop|Drop@@"
+msgstr "@@丢弃|丢弃@@"
+
+#: src/gui/popupmenu.cpp:291
+msgid "@@description|Description@@"
+msgstr "@@æè¿°|æè¿°@@"
+
+#: src/gui/register.cpp:67
+msgid "Confirm:"
+msgstr "确定"
+
+#: src/gui/register.cpp:73
+msgid "Male"
+msgstr ""
+
+#: src/gui/register.cpp:74
+msgid "Female"
+msgstr ""
+
+#: src/gui/register.cpp:176
+#, c-format
+msgid "The username needs to be at least %d characters long."
+msgstr "用户å至少需è¦%d个字符"
+
+#: src/gui/register.cpp:184
+#, c-format
+msgid "The username needs to be less than %d characters long."
+msgstr "用户åä¸èƒ½å°‘于%d个字符"
+
+#: src/gui/register.cpp:192
+#, c-format
+msgid "The password needs to be at least %d characters long."
+msgstr "密ç éœ€è¦è‡³å°‘%d个字符"
+
+#: src/gui/register.cpp:200
+#, c-format
+msgid "The password needs to be less than %d characters long."
+msgstr "密ç ä¸èƒ½å°‘于%d个字符"
+
+#: src/gui/register.cpp:207
+msgid "Passwords do not match."
+msgstr "密ç ä¸ä¸€è‡´."
+
+#: src/gui/register.cpp:227 src/main.cpp:945
+msgid "Error"
+msgstr "错误"
+
+#: src/gui/setup_audio.cpp:40
+msgid "Sound"
+msgstr "声音"
+
+#: src/gui/setup_audio.cpp:46
+msgid "Sfx volume"
+msgstr "音效声é‡"
+
+#: src/gui/setup_audio.cpp:47
+msgid "Music volume"
+msgstr "音ä¹å£°é‡"
+
+#: src/gui/setup.cpp:58
+msgid "Apply"
+msgstr "应用"
+
+#: src/gui/setup.cpp:58
+msgid "Reset Windows"
+msgstr "é‡ç½®çª—å£"
+
+#: src/gui/setup.cpp:79
+msgid "Video"
+msgstr "视频"
+
+#: src/gui/setup.cpp:83
+msgid "Audio"
+msgstr "音频"
+
+#: src/gui/setup.cpp:87
+msgid "Joystick"
+msgstr "游æˆæ†"
+
+#: src/gui/setup.cpp:91
+msgid "Keyboard"
+msgstr ""
+
+#: src/gui/setup.cpp:95
+msgid "Players"
+msgstr ""
+
+#: src/gui/setup_joystick.cpp:36 src/gui/setup_joystick.cpp:70
+msgid "Press the button to start calibration"
+msgstr "按下开始校准按钮"
+
+#: src/gui/setup_joystick.cpp:37 src/gui/setup_joystick.cpp:68
+msgid "Calibrate"
+msgstr "校准"
+
+#: src/gui/setup_joystick.cpp:38
+msgid "Enable joystick"
+msgstr "å¯ç”¨æ¸¸æˆæ†"
+
+#: src/gui/setup_joystick.cpp:73
+msgid "Stop"
+msgstr "åœæ­¢"
+
+#: src/gui/setup_joystick.cpp:74
+msgid "Rotate the stick"
+msgstr "旋转手柄"
+
+#: src/gui/setup_keyboard.cpp:88
+msgid "Assign"
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:94
+#, fuzzy
+msgid "Default"
+msgstr "删除"
+
+#: src/gui/setup_keyboard.cpp:115
+msgid "Key Conflict(s) Detected."
+msgstr ""
+
+#: src/gui/setup_keyboard.cpp:116
+msgid "Resolve them, or gameplay may result in strange behaviour."
+msgstr ""
+
+#: src/gui/setup_players.cpp:53
+#, fuzzy
+msgid "Name"
+msgstr "å称"
+
+#: src/gui/setup_players.cpp:54
+msgid "Relation"
+msgstr ""
+
+#: src/gui/setup_players.cpp:58
+msgid "Neutral"
+msgstr ""
+
+#: src/gui/setup_players.cpp:59
+msgid "Friend"
+msgstr ""
+
+#: src/gui/setup_players.cpp:60
+msgid "Disregarded"
+msgstr ""
+
+#: src/gui/setup_players.cpp:61
+msgid "Ignored"
+msgstr ""
+
+#: src/gui/setup_players.cpp:214
+msgid "Save player list"
+msgstr ""
+
+#: src/gui/setup_players.cpp:216
+msgid "Allow trading"
+msgstr ""
+
+#: src/gui/setup_players.cpp:218
+msgid "Allow whispers"
+msgstr ""
+
+#: src/gui/setup_players.cpp:245
+msgid "When ignoring:"
+msgstr ""
+
+#: src/gui/setup_video.cpp:112
+msgid "Full screen"
+msgstr "å…¨å±"
+
+#: src/gui/setup_video.cpp:113
+msgid "OpenGL"
+msgstr "OpenGL"
+
+#: src/gui/setup_video.cpp:114
+msgid "Custom cursor"
+msgstr "通常的光标"
+
+#: src/gui/setup_video.cpp:116
+msgid "FPS Limit:"
+msgstr "FPSé™åˆ¶"
+
+#: src/gui/setup_video.cpp:135
+msgid "Gui opacity"
+msgstr "Gui é€æ˜Žåº¦"
+
+#: src/gui/setup_video.cpp:192
+msgid "Scroll radius"
+msgstr "滚动åŠå¾„"
+
+#: src/gui/setup_video.cpp:200
+msgid "Scroll laziness"
+msgstr "拉动æžé™"
+
+#: src/gui/setup_video.cpp:208
+msgid "Ambient FX"
+msgstr "环境音效"
+
+#: src/gui/setup_video.cpp:215 src/gui/setup_video.cpp:412
+msgid "off"
+msgstr "离线"
+
+#: src/gui/setup_video.cpp:218 src/gui/setup_video.cpp:234
+#: src/gui/setup_video.cpp:415 src/gui/setup_video.cpp:429
+msgid "low"
+msgstr "低"
+
+#: src/gui/setup_video.cpp:221 src/gui/setup_video.cpp:240
+#: src/gui/setup_video.cpp:418 src/gui/setup_video.cpp:435
+msgid "high"
+msgstr "高"
+
+#: src/gui/setup_video.cpp:227
+msgid "Particle Detail"
+msgstr ""
+
+#: src/gui/setup_video.cpp:237 src/gui/setup_video.cpp:432
+msgid "medium"
+msgstr ""
+
+#: src/gui/setup_video.cpp:243 src/gui/setup_video.cpp:438
+msgid "max"
+msgstr ""
+
+#: src/gui/setup_video.cpp:309
+msgid "Switching to full screen"
+msgstr "切æ¢åˆ°å…¨å±"
+
+#: src/gui/setup_video.cpp:310
+msgid "Restart needed for changes to take effect."
+msgstr "åªæœ‰æ”¹å˜ç”Ÿæ•ˆåŽæ‰èƒ½é‡å¯"
+
+#: src/gui/setup_video.cpp:322
+msgid "Changing OpenGL"
+msgstr "改å˜æˆOpenGL"
+
+#: src/gui/setup_video.cpp:323
+msgid "Applying change to OpenGL requires restart."
+msgstr "è¿ç”¨æ”¹å˜ä¸ºOpenGL需è¦é‡æ–°å¼€å§‹"
+
+#: src/gui/skill.cpp:79
+msgid "Mystery Skill"
+msgstr ""
+
+#: src/gui/skill.cpp:132 src/gui/skill.cpp:188
+#, c-format
+msgid "Skill points: %d"
+msgstr ""
+
+#: src/gui/skill.cpp:133
+msgid "Up"
+msgstr ""
+
+#: src/gui/status.cpp:52 src/gui/status.cpp:235
+#, fuzzy, c-format
+msgid "Job: %d"
+msgstr "等级:%d"
+
+#: src/gui/status.cpp:53 src/gui/status.cpp:238
+#, fuzzy, c-format
+msgid "Money: %d GP"
+msgstr "金钱:%d"
+
+#: src/gui/status.cpp:127
+#, fuzzy
+msgid "Stats"
+msgstr "状æ€"
+
+#: src/gui/status.cpp:128
+msgid "Total"
+msgstr ""
+
+#: src/gui/status.cpp:129
+msgid "Cost"
+msgstr ""
+
+#: src/gui/status.cpp:132
+#, fuzzy
+msgid "Attack:"
+msgstr "攻击 %+d"
+
+#: src/gui/status.cpp:133
+#, fuzzy
+msgid "Defense:"
+msgstr "防护 %+d"
+
+#: src/gui/status.cpp:134
+#, fuzzy
+msgid "M.Attack:"
+msgstr "攻击 %+d"
+
+#: src/gui/status.cpp:135
+#, fuzzy
+msgid "M.Defense:"
+msgstr "防护 %+d"
+
+#: src/gui/status.cpp:136
+#, c-format
+msgid "% Accuracy:"
+msgstr ""
+
+#: src/gui/status.cpp:137
+#, c-format
+msgid "% Evade:"
+msgstr ""
+
+#: src/gui/status.cpp:138
+msgid "% Reflex:"
+msgstr ""
+
+#: src/gui/status.cpp:282
+#, fuzzy
+msgid "Strength"
+msgstr "力é‡"
+
+#: src/gui/status.cpp:283
+#, fuzzy
+msgid "Agility"
+msgstr "æ•æ·:"
+
+#: src/gui/status.cpp:284
+#, fuzzy
+msgid "Vitality"
+msgstr "体力:"
+
+#: src/gui/status.cpp:285
+#, fuzzy
+msgid "Intelligence"
+msgstr "智力:"
+
+#: src/gui/status.cpp:286
+#, fuzzy
+msgid "Dexterity"
+msgstr "智慧:"
+
+#: src/gui/status.cpp:287
+msgid "Luck"
+msgstr ""
+
+#: src/gui/status.cpp:305
+#, c-format
+msgid "Remaining Status Points: %d"
+msgstr ""
+
+#: src/gui/trade.cpp:61
+msgid "Add"
+msgstr "添加"
+
+#: src/gui/trade.cpp:64
+msgid "Trade"
+msgstr ""
+
+#: src/gui/trade.cpp:80 src/gui/trade.cpp:156 src/gui/trade.cpp:204
+#, c-format
+msgid "You get %d GP."
+msgstr "你得到%d GP."
+
+#: src/gui/trade.cpp:81
+msgid "You give:"
+msgstr "你得到:"
+
+#: src/gui/trade.cpp:283
+msgid "Failed adding item. You can not overlap one kind of item on the window."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:93
+msgid "Updating..."
+msgstr ""
+
+#: src/gui/updatewindow.cpp:119
+msgid "Play"
+msgstr ""
+
+#: src/gui/updatewindow.cpp:525
+msgid "Completed"
+msgstr ""
+
+#: src/resources/itemdb.cpp:99
+msgid "Unnamed"
+msgstr ""
+
+#: src/main.cpp:769
+msgid "Got disconnected from server!"
+msgstr ""
+
+#: src/main.cpp:956
+#, fuzzy
+msgid "Connecting to map server..."
+msgstr "连接中..."
+
+#: src/main.cpp:964
+msgid "Connecting to character server..."
+msgstr ""
+
+#: src/main.cpp:972
+msgid "Connecting to account server..."
+msgstr ""
+
+#~ msgid "Unregister"
+#~ msgstr "注销"
+
+#~ msgid "Willpower:"
+#~ msgstr "æ„志力:"
+
+#~ msgid "Please distribute %d points"
+#~ msgstr "请分å‘%d点数"
+
+#~ msgid "Your name needs to be at least 4 characters."
+#~ msgstr "ä½ çš„å字需è¦è‡³å°‘4个字符"
+
+#~ msgid "Character stats OK"
+#~ msgstr "角色状æ€å¯ä»¥"
+
+#~ msgid "Please remove %d points"
+#~ msgstr "请删除%d点数"
+
+#~ msgid "Split"
+#~ msgstr "分离"
+
+#~ msgid "Select amount of items to split."
+#~ msgstr "请选择你分离的物å“çš„æ•°é‡"
+
+#~ msgid "@@split|Split@@"
+#~ msgstr "@@分离|分离@@"
+
+#~ msgid "Switch server"
+#~ msgstr "交æ¢æœåŠ¡å™¨"
+
+#~ msgid "Switch character"
+#~ msgstr "交æ¢è§’色"
+
+#~ msgid "Email:"
+#~ msgstr "电å­é‚®ä»¶"
+
+#~ msgid "Choose your Mana World Server"
+#~ msgstr "请选择你的魔法世界æœåŠ¡å™¨"
+
+#~ msgid "Port:"
+#~ msgstr "端å£ï¼š"
+
+#~ msgid "Please type both the address and the port of a server."
+#~ msgstr "请输入æœåŠ¡å™¨çš„IP地å€å’Œç«¯å£"
+
+#~ msgid "Propose trade"
+#~ msgstr "打算交易"
+
+#~ msgid "Confirm trade"
+#~ msgstr "决定交易"
+
+#~ msgid "Change"
+#~ msgstr "改å˜"
+
+#~ msgid "HP %+d"
+#~ msgstr "HP %+d"
+
+#~ msgid "MP %+d"
+#~ msgstr "MP %+d"
+
+#~ msgid "Confirm"
+#~ msgstr "确定"
+
+#~ msgid "Charisma:"
+#~ msgstr "魅力:"
+
+#~ msgid "Total Weight: %d - Maximum Weight: %d"
+#~ msgstr "总的力é‡ï¼š%d - 最大力é‡ï¼š%d"
+
+#~ msgid "Keep"
+#~ msgstr "ä¿æŒ"
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 130452c6..27d1e1d8 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -51,8 +51,8 @@ MARK_AS_ADVANCED(SDL_LIBRARY)
SET(SRCS
gui/widgets/resizegrip.cpp
gui/widgets/resizegrip.h
- gui/box.cpp
- gui/box.h
+ gui/widgets/layout.cpp
+ gui/widgets/layout.h
gui/browserbox.cpp
gui/browserbox.h
gui/buddywindow.cpp
@@ -87,8 +87,6 @@ SET(SRCS
gui/gccontainer.h
gui/gui.cpp
gui/gui.h
- gui/hbox.cpp
- gui/hbox.h
gui/help.cpp
gui/help.h
gui/inttextbox.cpp
@@ -134,6 +132,8 @@ SET(SRCS
gui/register.h
gui/scrollarea.cpp
gui/scrollarea.h
+ gui/sdlinput.cpp
+ gui/sdlinput.h
gui/sell.cpp
gui/sell.h
gui/setup_audio.cpp
@@ -173,8 +173,6 @@ SET(SRCS
gui/trade.h
gui/updatewindow.h
gui/updatewindow.cpp
- gui/vbox.h
- gui/vbox.cpp
gui/viewport.cpp
gui/viewport.h
gui/window.cpp
@@ -261,6 +259,7 @@ SET(SRCS
utils/base64.h
utils/dtor.h
utils/fastsqrt.h
+ utils/gettext.h
utils/strprintf.cpp
utils/strprintf.h
utils/tostring.h
@@ -328,6 +327,8 @@ SET(SRCS
player.h
player_relations.cpp
player_relations.h
+ position.cpp
+ position.h
properties.h
serverinfo.h
shopitem.cpp
@@ -340,6 +341,7 @@ SET(SRCS
textparticle.cpp
textparticle.h
tileset.h
+ vector.cpp
vector.h
)
diff --git a/src/Makefile.am b/src/Makefile.am
index 1f23e328..d882f426 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,8 +1,10 @@
+AUTOMAKE_OPTIONS = subdir-objects
+
bin_PROGRAMS = tmw
-tmw_SOURCES = gui/widgets/resizegrip.cpp \
+tmw_SOURCES = gui/widgets/layout.cpp \
+ gui/widgets/layout.h \
+ gui/widgets/resizegrip.cpp \
gui/widgets/resizegrip.h \
- gui/box.h \
- gui/box.cpp \
gui/browserbox.cpp \
gui/browserbox.h \
gui/buddywindow.cpp \
@@ -37,8 +39,6 @@ tmw_SOURCES = gui/widgets/resizegrip.cpp \
gui/gccontainer.h \
gui/gui.cpp \
gui/gui.h \
- gui/hbox.h \
- gui/hbox.cpp \
gui/help.cpp \
gui/help.h \
gui/inttextbox.h \
@@ -86,6 +86,8 @@ tmw_SOURCES = gui/widgets/resizegrip.cpp \
gui/register.h \
gui/scrollarea.cpp \
gui/scrollarea.h \
+ gui/sdlinput.cpp \
+ gui/sdlinput.h \
gui/sell.cpp \
gui/sell.h \
gui/setup_audio.cpp \
@@ -125,8 +127,6 @@ tmw_SOURCES = gui/widgets/resizegrip.cpp \
gui/trade.h \
gui/updatewindow.h \
gui/updatewindow.cpp \
- gui/vbox.h \
- gui/vbox.cpp \
gui/viewport.cpp \
gui/viewport.h \
gui/window.cpp \
@@ -213,6 +213,7 @@ tmw_SOURCES = gui/widgets/resizegrip.cpp \
utils/base64.h \
utils/dtor.h \
utils/fastsqrt.h \
+ utils/gettext.h \
utils/strprintf.cpp \
utils/strprintf.h \
utils/tostring.h \
@@ -283,6 +284,8 @@ tmw_SOURCES = gui/widgets/resizegrip.cpp \
player.h \
player_relations.cpp \
player_relations.h \
+ position.cpp \
+ position.h \
properties.h \
serverinfo.h \
shopitem.cpp \
@@ -301,15 +304,11 @@ tmw_SOURCES = gui/widgets/resizegrip.cpp \
textparticle.cpp \
textparticle.h \
tileset.h \
+ vector.cpp \
vector.h
# set the include path found by configure
INCLUDES = \
$(all_includes) \
- -DTMW_DATADIR=\""$(pkgdatadir)/"\"
-
-# the library search path.
-tmw_LDFLAGS = $(all_libraries) $(LIBSDL_RPATH) `pkg-config --libs libxml-2.0`
-tmw_CXXFLAGS = -Wall $(LIBSDL_CFLAGS) `pkg-config --cflags libxml-2.0` $(CURL_CFLAGS)
-tmw_LDADD = $(LIBSDL_LIBS) -lguichan_sdl $(CURL_LIBS)
-tmw_TARGET = tmw
+ -DTMW_DATADIR=\""$(pkgdatadir)/"\" \
+ -DLOCALEDIR=\""$(localedir)"\"
diff --git a/src/SDLMain.h b/src/SDLMain.h
index 4683df57..4683df57 100755..100644
--- a/src/SDLMain.h
+++ b/src/SDLMain.h
diff --git a/src/SDLMain.m b/src/SDLMain.m
index 3d02719c..3d02719c 100755..100644
--- a/src/SDLMain.m
+++ b/src/SDLMain.m
diff --git a/src/animatedsprite.h b/src/animatedsprite.h
index 405bf42e..41857d8f 100644
--- a/src/animatedsprite.h
+++ b/src/animatedsprite.h
@@ -50,7 +50,8 @@ class AnimatedSprite
* @param filename the file of the sprite to animate
* @param variant the sprite variant
*/
- static AnimatedSprite *load(std::string const &filename, int variant = 0);
+ static AnimatedSprite *load(const std::string &filename,
+ int variant = 0);
/**
* Destructor.
@@ -60,50 +61,42 @@ class AnimatedSprite
/**
* Resets the animated sprite.
*/
- void
- reset();
+ void reset();
/**
* Plays an action using the current direction
*/
- void
- play(SpriteAction action);
+ void play(SpriteAction action);
/**
* Inform the animation of the passed time so that it can output the
* correct animation frame.
*/
- void
- update(int time);
+ void update(int time);
/**
* Draw the current animation frame at the coordinates given in screen
* pixels.
*/
- bool
- draw(Graphics* graphics, int posX, int posY) const;
+ bool draw(Graphics* graphics, int posX, int posY) const;
/**
* gets the width in pixels of the image of the current frame
*/
- int
- getWidth() const;
+ int getWidth() const;
/**
* gets the height in pixels of the image of the current frame
*/
- int
- getHeight() const;
+ int getHeight() const;
/**
* Sets the direction.
*/
- void
- setDirection(SpriteDirection direction);
+ void setDirection(SpriteDirection direction);
private:
- bool
- updateCurrentAnimation(unsigned int dt);
+ bool updateCurrentAnimation(unsigned int dt);
SpriteDirection mDirection; /**< The sprite direction. */
int mLastTime; /**< The last time update was called. */
diff --git a/src/being.cpp b/src/being.cpp
index 88063ac1..c04aeaa9 100644
--- a/src/being.cpp
+++ b/src/being.cpp
@@ -70,7 +70,7 @@ Being::Being(int id, int job, Map *map):
mMap(NULL),
mEquippedWeapon(NULL),
mHairStyle(1), mHairColor(0),
- mGender(2),
+ mGender(GENDER_UNSPECIFIED),
mSpeechTime(0),
mPx(0), mPy(0),
mStunMode(0),
@@ -322,29 +322,29 @@ void Being::nextStep()
return;
}
- PATH_NODE node = mPath.front();
+ Position pos = mPath.front();
mPath.pop_front();
int dir = 0;
- if (node.x > mX)
+ if (pos.x > mX)
dir |= RIGHT;
- else if (node.x < mX)
+ else if (pos.x < mX)
dir |= LEFT;
- if (node.y > mY)
+ if (pos.y > mY)
dir |= DOWN;
- else if (node.y < mY)
+ else if (pos.y < mY)
dir |= UP;
setDirection(dir);
- if (mMap->tileCollides(node.x, node.y))
+ if (mMap->tileCollides(pos.x, pos.y))
{
setAction(STAND);
return;
}
- mX = node.x;
- mY = node.y;
+ mX = pos.x;
+ mY = pos.y;
setAction(WALK);
mWalkTime += mWalkSpeed / 10;
}
@@ -669,9 +669,10 @@ static void initializeHair()
if (hairInitialized)
return;
- // Hairstyles are encoded as negative numbers. Count how far negative we can go.
+ // Hairstyles are encoded as negative numbers. Count how far negative we
+ // can go.
int hairstylesCtr = -1;
- while (ItemDB::get(hairstylesCtr).getSprite(0) != "error.xml")
+ while (ItemDB::get(hairstylesCtr).getSprite(GENDER_MALE) != "error.xml")
--hairstylesCtr;
hairStylesNr = -hairstylesCtr; // done.
diff --git a/src/being.h b/src/being.h
index f48ebae2..e70cdd09 100644
--- a/src/being.h
+++ b/src/being.h
@@ -28,6 +28,7 @@
#include <SDL_types.h>
#include <set>
+#include "position.h"
#include "sprite.h"
#include "map.h"
#include "animatedsprite.h"
@@ -46,26 +47,13 @@ class ImageSet;
class Particle;
class Text;
-
class StatusEffect;
-/**
- * A position along a being's path.
- */
-struct PATH_NODE
-{
- /**
- * Constructor.
- */
- PATH_NODE(unsigned short x, unsigned short y):
- x(x), y(y)
- { }
-
- unsigned short x;
- unsigned short y;
+enum Gender {
+ GENDER_MALE = 0,
+ GENDER_FEMALE = 1,
+ GENDER_UNSPECIFIED = 2
};
-typedef std::list<PATH_NODE> Path;
-typedef Path::iterator PathIterator;
class Being : public Sprite
{
@@ -115,10 +103,7 @@ class Being : public Sprite
/**
* Directions, to be used as bitmask values
*/
- static const char DOWN = 1;
- static const char LEFT = 2;
- static const char UP = 4;
- static const char RIGHT = 8;
+ enum { DOWN = 1, LEFT = 2, UP = 4, RIGHT = 8 };
Uint16 mJob; /**< Job (player job, npc, monster, ) */
Uint16 mX, mY; /**< Tile coordinates */
@@ -213,12 +198,12 @@ class Being : public Sprite
/**
* Sets the gender of this being.
*/
- virtual void setGender(int gender) { mGender = gender; }
+ virtual void setGender(Gender gender) { mGender = gender; }
/**
* Gets the gender of this being.
*/
- int getGender() const { return mGender; }
+ Gender getGender() const { return mGender; }
/**
* Makes this being take the next step of his path.
@@ -438,7 +423,7 @@ class Being : public Sprite
Path mPath;
Text *mSpeech;
Uint16 mHairStyle, mHairColor;
- Uint8 mGender;
+ Gender mGender;
Uint32 mSpeechTime;
Sint32 mPx, mPy; /**< Pixel coordinates */
Uint16 mStunMode; /**< Stun mode; zero if not stunned */
diff --git a/src/game.cpp b/src/game.cpp
index a4d15548..a788c51a 100644
--- a/src/game.cpp
+++ b/src/game.cpp
@@ -26,7 +26,6 @@
#include <sstream>
#include <string>
-#include <guichan/sdl/sdlinput.hpp>
#include <guichan/exception.hpp>
#include "beingmanager.h"
@@ -59,6 +58,7 @@
#include "gui/npclistdialog.h"
#include "gui/npc_text.h"
#include "gui/ok_dialog.h"
+#include "gui/sdlinput.h"
#include "gui/sell.h"
#include "gui/setup.h"
#include "gui/skill.h"
@@ -83,7 +83,6 @@
#include "resources/imagewriter.h"
extern Graphics *graphics;
-extern gcn::SDLInput *guiInput;
class Map;
@@ -229,6 +228,7 @@ void createGuiWindows(Network *network)
*/
void destroyGuiWindows()
{
+ logger->setChatWindow(NULL);
delete chatWindow;
delete statusWindow;
delete miniStatusWindow;
diff --git a/src/graphics.cpp b/src/graphics.cpp
index c8cb0091..6920bcb0 100644
--- a/src/graphics.cpp
+++ b/src/graphics.cpp
@@ -123,7 +123,7 @@ bool Graphics::drawImage(Image *image, int x, int y)
{
return drawImage(image, 0, 0, x, y, image->mBounds.w, image->mBounds.h);
}
-#include <cstdio>
+
bool Graphics::drawImage(Image *image, int srcX, int srcY, int dstX, int dstY,
int width, int height, bool)
{
diff --git a/src/gui/browserbox.cpp b/src/gui/browserbox.cpp
index 3e446928..03540d31 100644
--- a/src/gui/browserbox.cpp
+++ b/src/gui/browserbox.cpp
@@ -21,11 +21,8 @@
#include <algorithm>
-#include <guichan/graphics.hpp>
-#include <guichan/imagefont.hpp>
-#include <guichan/mouseinput.hpp>
-
#include "browserbox.h"
+
#include "linkhandler.h"
#include "truetypefont.h"
@@ -143,7 +140,7 @@ void BrowserBox::addRow(const std::string &row)
if (mMode == AUTO_WRAP)
{
- unsigned int j, y = 0;
+ unsigned int y = 0;
unsigned int nextChar;
const char *hyphen = "~";
int hyphenWidth = font->getWidth(hyphen);
@@ -152,7 +149,7 @@ void BrowserBox::addRow(const std::string &row)
for (TextRowIterator i = mTextRows.begin(); i != mTextRows.end(); i++)
{
std::string row = *i;
- for (j = 0; j < row.size(); j++)
+ for (unsigned int j = 0; j < row.size(); j++)
{
std::string character = row.substr(j, 1);
x += font->getWidth(character);
@@ -266,7 +263,6 @@ BrowserBox::draw(gcn::Graphics *graphics)
}
}
- unsigned int j;
int x = 0, y = 0;
int wrappedLines = 0;
TrueTypeFont *font = static_cast<TrueTypeFont*>(getFont());
@@ -277,17 +273,45 @@ BrowserBox::draw(gcn::Graphics *graphics)
int selColor = BLACK;
int prevColor = selColor;
std::string row = *(i);
+ bool wrapped = false;
x = 0;
- for (j = 0; j < row.size(); j++)
+ // Check for separator lines
+ if (row.find("---", 0) == 0)
+ {
+ for (x = 0; x < getWidth(); x++)
+ {
+ font->drawString(graphics, "-", x, y);
+ x += font->getWidth("-") - 2;
+ }
+ y += font->getHeight();
+ continue;
+ }
+
+ // TODO: Check if we must take texture size limits into account here
+ // TODO: Check if some of the O(n) calls can be removed
+ for (std::string::size_type start = 0, end = std::string::npos;
+ start != std::string::npos;
+ start = end, end = std::string::npos)
{
- if ( (mUseLinksAndUserColors && (j + 3) <= row.size()) ||
- (!mUseLinksAndUserColors && (j == 0)) )
+ // Wrapped line continuation shall be indented
+ if (wrapped)
+ {
+ y += font->getHeight();
+ x = 15;
+ }
+
+ // "Tokenize" the string at control sequences
+ if (mUseLinksAndUserColors)
+ end = row.find("##", start + 1);
+
+ if (mUseLinksAndUserColors ||
+ (!mUseLinksAndUserColors && (start == 0)))
{
// Check for color change in format "##x", x = [L,P,0..9]
- if ((row.at(j) == '#') && (row.at(j + 1) == '#'))
+ if (row.find("##", start) == start && row.size() > start + 2)
{
- switch (row.at(j + 2))
+ switch (row.at(start + 2))
{
case 'L': // Link color
prevColor = selColor;
@@ -337,72 +361,64 @@ BrowserBox::draw(gcn::Graphics *graphics)
prevColor = selColor;
selColor = BLACK;
}
- j += 3;
-
- if (j == row.size())
- {
- break;
- }
+ start += 3;
}
graphics->setColor(gcn::Color(selColor));
}
- // Check for line separators in format "---"
- if (row == "---")
- {
- for (x = 0; x < getWidth(); x++)
- {
- font->drawString(graphics, "-", x, y);
- x += font->getWidth("-") - 2;
- }
- break;
- }
- // Draw each char
- else
- {
- std::string character = row.substr(j, 1);
- font->drawString(graphics, character, x, y);
- x += font->getWidth(character.c_str());
+ std::string::size_type len =
+ end == std::string::npos ? end : end - start;
+ std::string part = row.substr(start, len);
- // Auto wrap mode
- if (mMode == AUTO_WRAP)
+ // Auto wrap mode
+ if (mMode == AUTO_WRAP &&
+ (x + font->getWidth(part.c_str()) + 10) > getWidth())
+ {
+ bool forced = false;
+ char const *hyphen = "~";
+ int hyphenWidth = font->getWidth(hyphen);
+
+ /* FIXME: This code layout makes it easy to crash remote
+ clients by talking garbage. Forged long utf-8 characters
+ will cause either a buffer underflow in substr or an
+ infinite loop in the main loop. */
+ do
{
- unsigned int nextChar = j + 1;
- const char *hyphen = "~";
- int hyphenWidth = font->getWidth(hyphen);
+ if (!forced)
+ end = row.rfind(" ", end);
- // Wraping between words (at blank spaces)
- if ((nextChar < row.size()) && (row.at(nextChar) == ' '))
+ // Check if we have to (stupidly) force-wrap
+ if (end == std::string::npos || end <= start)
{
- int nextSpacePos = row.find(" ", (nextChar + 1));
- if (nextSpacePos <= 0)
- {
- nextSpacePos = row.size() - 1;
- }
- int nextWordWidth = font->getWidth(
- row.substr(nextChar,
- (nextSpacePos - nextChar)));
-
- if ((x + nextWordWidth + 10) > getWidth())
- {
- x = 15; // Ident in new line
- y += font->getHeight();
- wrappedLines++;
- j++;
- }
+ forced = true;
+ end = row.size();
+ x += hyphenWidth * 2; // Account for the wrap-notifier
+ continue;
}
- // Wrapping looong lines (brutal force)
- else if ((x + 2 * hyphenWidth) > getWidth())
- {
- font->drawString(graphics, hyphen,
- getWidth() - hyphenWidth, y);
- x = 15; // Ident in new line
- y += font->getHeight();
- wrappedLines++;
- }
+ // Skip to the start of the current character
+ while ((row[end] & 192) == 128)
+ end--;
+ end--; // And then to the last byte of the previous one
+
+ part = row.substr(start, end - start + 1);
+ } while ((x + font->getWidth(part.c_str()) + 10) > getWidth());
+
+ if (forced)
+ {
+ x -= hyphenWidth; // Remove the wrap-notifier accounting
+ font->drawString(graphics, hyphen,
+ getWidth() - hyphenWidth, y);
+ end++; // Skip to the next character
}
+ else
+ end += 2; // Skip to after the space
+
+ wrapped = true;
+ wrappedLines++;
}
+ font->drawString(graphics, part, x, y);
+ x += font->getWidth(part.c_str());
}
y += font->getHeight();
setHeight((mTextRows.size() + wrappedLines) * font->getHeight());
diff --git a/src/gui/browserbox.h b/src/gui/browserbox.h
index 465ff497..cb4c23ed 100644
--- a/src/gui/browserbox.h
+++ b/src/gui/browserbox.h
@@ -25,8 +25,8 @@
#include <iosfwd>
#include <vector>
-#include <guichan/widget.hpp>
#include <guichan/mouselistener.hpp>
+#include <guichan/widget.hpp>
#include "../guichanfwd.h"
#include "../main.h"
diff --git a/src/gui/buy.cpp b/src/gui/buy.cpp
index 714f52db..4d028ab3 100644
--- a/src/gui/buy.cpp
+++ b/src/gui/buy.cpp
@@ -29,15 +29,18 @@
#include "shoplistbox.h"
#include "slider.h"
+#include "widgets/layout.h"
+
#include "../npc.h"
#include "../net/messageout.h"
#include "../net/protocol.h"
-#include "../utils/tostring.h"
+#include "../utils/gettext.h"
+#include "../utils/strprintf.h"
BuyDialog::BuyDialog(Network *network):
- Window("Buy"), mNetwork(network),
+ Window(_("Buy")), mNetwork(network),
mMoney(0), mAmountItems(0), mMaxItems(0)
{
setWindowName("Buy");
@@ -52,17 +55,16 @@ BuyDialog::BuyDialog(Network *network):
mScrollArea = new ScrollArea(mShopItemList);
mSlider = new Slider(1.0);
mQuantityLabel = new gcn::Label("0");
- mMoneyLabel = new gcn::Label("Price : 0 GP / 0 GP");
+ mMoneyLabel = new gcn::Label(strprintf(_("Price: %d GP / Total: %d GP"), 0, 0));
mIncreaseButton = new Button("+", "+", this);
mDecreaseButton = new Button("-", "-", this);
- mBuyButton = new Button("Buy", "buy", this);
- mQuitButton = new Button("Quit", "quit", this);
- mItemDescLabel = new gcn::Label("Description:");
- mItemEffectLabel = new gcn::Label("Effect:");
+ mBuyButton = new Button(_("Buy"), "buy", this);
+ mQuitButton = new Button(_("Quit"), "quit", this);
+ mItemDescLabel = new gcn::Label(strprintf(_("Description: %s"), ""));
+ mItemEffectLabel = new gcn::Label(strprintf(_("Effect: %s"), ""));
mIncreaseButton->setSize(20, 20);
mDecreaseButton->setSize(20, 20);
- mQuantityLabel->setWidth(60);
mScrollArea->setHorizontalScrollPolicy(gcn::ScrollArea::SHOW_NEVER);
mIncreaseButton->setEnabled(false);
@@ -70,22 +72,22 @@ BuyDialog::BuyDialog(Network *network):
mBuyButton->setEnabled(false);
mSlider->setEnabled(false);
- mShopItemList->setActionEventId("item");
mSlider->setActionEventId("slider");
-
- mShopItemList->addSelectionListener(this);
mSlider->addActionListener(this);
+ mShopItemList->addSelectionListener(this);
- add(mScrollArea);
- add(mSlider);
- add(mQuantityLabel);
- add(mBuyButton);
- add(mQuitButton);
- add(mIncreaseButton);
- add(mDecreaseButton);
- add(mMoneyLabel);
- add(mItemDescLabel);
- add(mItemEffectLabel);
+ place(0, 0, mScrollArea, 5).setPadding(3);
+ place(0, 1, mQuantityLabel, 2);
+ place(2, 1, mSlider, 3);
+ place(0, 2, mMoneyLabel, 5);
+ place(0, 3, mItemEffectLabel, 5);
+ place(0, 4, mItemDescLabel, 5);
+ place(0, 5, mDecreaseButton);
+ place(1, 5, mIncreaseButton);
+ place(3, 5, mBuyButton);
+ place(4, 5, mQuitButton);
+ Layout &layout = getLayout();
+ layout.setRowHeight(0, Layout::AUTO_SET);
loadWindowState();
setLocationRelativeTo(getParent());
@@ -159,7 +161,7 @@ void BuyDialog::action(const gcn::ActionEvent &event)
}
// TODO: Actually we'd have a bug elsewhere if this check for the number
// of items to be bought ever fails, Bertram removed the assertions, is
- // there a better way to ensure this fails in an _obivous_ way in C++?
+ // there a better way to ensure this fails in an _obvious_ way in C++?
else if (event.getId() == "buy" && mAmountItems > 0 &&
mAmountItems <= mMaxItems)
{
@@ -191,53 +193,7 @@ void BuyDialog::valueChanged(const gcn::SelectionEvent &event)
mSlider->gcn::Slider::setScale(1, mMaxItems);
}
-void BuyDialog::widgetResized(const gcn::Event &event)
-{
- Window::widgetResized(event);
-
- const gcn::Rectangle &area = getChildrenArea();
- const int width = area.width;
- const int height = area.height;
-
- mDecreaseButton->setPosition(8, height - 8 - mDecreaseButton->getHeight());
- mIncreaseButton->setPosition(
- mDecreaseButton->getX() + mDecreaseButton->getWidth() + 5,
- mDecreaseButton->getY());
-
- mQuitButton->setPosition(
- width - 8 - mQuitButton->getWidth(),
- height - 8 - mQuitButton->getHeight());
- mBuyButton->setPosition(
- mQuitButton->getX() - 5 - mBuyButton->getWidth(),
- mQuitButton->getY());
-
- mItemDescLabel->setDimension(gcn::Rectangle(8,
- mBuyButton->getY() - 5 - mItemDescLabel->getHeight(),
- width - 16,
- mItemDescLabel->getHeight()));
- mItemEffectLabel->setDimension(gcn::Rectangle(8,
- mItemDescLabel->getY() - 5 - mItemEffectLabel->getHeight(),
- width - 16,
- mItemEffectLabel->getHeight()));
- mMoneyLabel->setDimension(gcn::Rectangle(8,
- mItemEffectLabel->getY() - 5 - mMoneyLabel->getHeight(),
- width - 16,
- mMoneyLabel->getHeight()));
-
- mQuantityLabel->setPosition(
- width - mQuantityLabel->getWidth() - 8,
- mMoneyLabel->getY() - 5 - mQuantityLabel->getHeight());
- mSlider->setDimension(gcn::Rectangle(8,
- mQuantityLabel->getY(),
- mQuantityLabel->getX() - 8 - 8,
- 10));
-
- mScrollArea->setDimension(gcn::Rectangle(8, 8, width - 16,
- mSlider->getY() - 5 - 8));
-}
-
-void
-BuyDialog::updateButtonsAndLabels()
+void BuyDialog::updateButtonsAndLabels()
{
const int selectedItem = mShopItemList->getSelected();
int price = 0;
@@ -246,8 +202,10 @@ BuyDialog::updateButtonsAndLabels()
{
const ItemInfo &info = mShopItems->at(selectedItem)->getInfo();
- mItemDescLabel->setCaption("Description: " + info.getDescription());
- mItemEffectLabel->setCaption("Effect: " + info.getEffect());
+ mItemDescLabel->setCaption
+ (strprintf(_("Description: %s"), info.getDescription().c_str()));
+ mItemEffectLabel->setCaption
+ (strprintf(_("Effect: %s"), info.getEffect().c_str()));
int itemPrice = mShopItems->at(selectedItem)->getPrice();
@@ -263,8 +221,8 @@ BuyDialog::updateButtonsAndLabels()
}
else
{
- mItemDescLabel->setCaption("Description:");
- mItemEffectLabel->setCaption("Effect:");
+ mItemDescLabel->setCaption(strprintf(_("Description: %s"), ""));
+ mItemEffectLabel->setCaption(strprintf(_("Effect: %s"), ""));
mMaxItems = 0;
mAmountItems = 0;
}
@@ -276,8 +234,7 @@ BuyDialog::updateButtonsAndLabels()
mSlider->setEnabled(mMaxItems > 1);
// Update quantity and money labels
- mQuantityLabel->setCaption(
- toString(mAmountItems) + " / " + toString(mMaxItems));
- mMoneyLabel->setCaption("Price: " + toString(price) + " GP / "
- + toString(mMoney - price) + " GP" );
+ mQuantityLabel->setCaption(strprintf("%d / %d", mAmountItems, mMaxItems));
+ mMoneyLabel->setCaption
+ (strprintf(_("Price: %d GP / Total: %d GP"), price, mMoney - price));
}
diff --git a/src/gui/buy.h b/src/gui/buy.h
index 0915385a..329d35ec 100644
--- a/src/gui/buy.h
+++ b/src/gui/buy.h
@@ -93,13 +93,7 @@ class BuyDialog : public Window, public gcn::ActionListener,
/**
* Updates the state of buttons and labels.
*/
- void
- updateButtonsAndLabels();
-
- /**
- * Called whenever the widget changes size.
- */
- void widgetResized(const gcn::Event &event);
+ void updateButtonsAndLabels();
private:
Network *mNetwork;
diff --git a/src/gui/buysell.cpp b/src/gui/buysell.cpp
index 42380882..a8223ca4 100644
--- a/src/gui/buysell.cpp
+++ b/src/gui/buysell.cpp
@@ -25,18 +25,20 @@
#include "../npc.h"
+#include "../utils/gettext.h"
+
BuySellDialog::BuySellDialog():
- Window("Shop")
+ Window(_("Shop"))
{
Button *buyButton = 0;
- const char *buttonNames[] = {
- "Buy", "Sell", "Cancel", 0
+ static const char *buttonNames[] = {
+ N_("Buy"), N_("Sell"), N_("Cancel"), 0
};
int x = 10, y = 10;
for (const char **curBtn = buttonNames; *curBtn; curBtn++)
{
- Button *btn = new Button(*curBtn, *curBtn, this);
+ Button *btn = new Button(gettext(*curBtn), *curBtn, this);
if (!buyButton) buyButton = btn; // For focus request
btn->setPosition(x, y);
add(btn);
diff --git a/src/gui/char_select.cpp b/src/gui/char_select.cpp
index d951f12e..643a598f 100644
--- a/src/gui/char_select.cpp
+++ b/src/gui/char_select.cpp
@@ -31,6 +31,8 @@
#include "playerbox.h"
#include "textfield.h"
+#include "widgets/layout.h"
+
#include "../game.h"
#include "../localplayer.h"
#include "../main.h"
@@ -38,7 +40,8 @@
#include "../net/charserverhandler.h"
#include "../net/messageout.h"
-#include "../utils/tostring.h"
+#include "../utils/gettext.h"
+#include "../utils/strprintf.h"
#include "../utils/trim.h"
// Defined in main.cpp, used here for setting the char create dialog
@@ -57,8 +60,8 @@ class CharDeleteConfirm : public ConfirmDialog
};
CharDeleteConfirm::CharDeleteConfirm(CharSelectDialog *m):
- ConfirmDialog("Confirm", "Are you sure you want to delete this character?",
- m),
+ ConfirmDialog(_("Confirm Character Delete"),
+ _("Are you sure you want to delete this character?"), m),
master(m)
{
}
@@ -74,55 +77,42 @@ void CharDeleteConfirm::action(const gcn::ActionEvent &event)
CharSelectDialog::CharSelectDialog(Network *network,
LockedArray<LocalPlayer*> *charInfo,
- unsigned char gender):
- Window("Select Character"), mNetwork(network),
+ Gender gender):
+ Window(_("Select Character")), mNetwork(network),
mCharInfo(charInfo), mGender(gender), mCharSelected(false)
{
- mSelectButton = new Button("Ok", "ok", this);
- mCancelButton = new Button("Cancel", "cancel", this);
- mNewCharButton = new Button("New", "new", this);
- mDelCharButton = new Button("Delete", "delete", this);
- mPreviousButton = new Button("Previous", "previous", this);
- mNextButton = new Button("Next", "next", this);
-
- mNameLabel = new gcn::Label("Name");
- mLevelLabel = new gcn::Label("Level");
- mJobLevelLabel = new gcn::Label("Job Level");
- mMoneyLabel = new gcn::Label("Money");
- mPlayerBox = new PlayerBox();
-
- int w = 195;
- int h = 220;
- setContentSize(w, h);
- mPlayerBox->setDimension(gcn::Rectangle(5, 5, w - 10, 90));
- mNameLabel->setDimension(gcn::Rectangle(10, 100, 128, 16));
- mLevelLabel->setDimension(gcn::Rectangle(10, 116, 128, 16));
- mJobLevelLabel->setDimension(gcn::Rectangle(10, 132, 128, 16));
- mMoneyLabel->setDimension(gcn::Rectangle(10, 148, 128, 16));
- mPreviousButton->setPosition(5, 170);
- mNextButton->setPosition(mPreviousButton->getWidth() + 10, 170);
- mNewCharButton->setPosition(5, h - 5 - mNewCharButton->getHeight());
- mDelCharButton->setPosition(
- 5 + mNewCharButton->getWidth() + 5,
- mNewCharButton->getY());
- mCancelButton->setPosition(
- w - 5 - mCancelButton->getWidth(),
- mNewCharButton->getY());
- mSelectButton->setPosition(
- mCancelButton->getX() - 5 - mSelectButton->getWidth(),
- mNewCharButton->getY());
-
- add(mPlayerBox);
- add(mSelectButton);
- add(mCancelButton);
- add(mNewCharButton);
- add(mDelCharButton);
- add(mPreviousButton);
- add(mNextButton);
- add(mNameLabel);
- add(mLevelLabel);
- add(mJobLevelLabel);
- add(mMoneyLabel);
+ mSelectButton = new Button(_("Ok"), "ok", this);
+ mCancelButton = new Button(_("Cancel"), "cancel", this);
+ mNewCharButton = new Button(_("New"), "new", this);
+ mDelCharButton = new Button(_("Delete"), "delete", this);
+ mPreviousButton = new Button(_("Previous"), "previous", this);
+ mNextButton = new Button(_("Next"), "next", this);
+
+ mNameLabel = new gcn::Label(strprintf(_("Name: %s"), ""));
+ mLevelLabel = new gcn::Label(strprintf(_("Level: %d"), 0));
+ mJobLevelLabel = new gcn::Label(strprintf(_("Job Level: %d"), 0));
+ mMoneyLabel = new gcn::Label(strprintf(_("Money: %d"), 0));
+
+ // Control that shows the Player
+ mPlayerBox = new PlayerBox;
+ mPlayerBox->setWidth(74);
+
+ ContainerPlacer place;
+ place = getPlacer(0, 0);
+ place(0, 0, mPlayerBox, 1, 6).setPadding(3);
+ place(1, 0, mNameLabel, 3);
+ place(1, 1, mLevelLabel, 3);
+ place(1, 2, mJobLevelLabel, 3);
+ place(1, 3, mMoneyLabel, 3);
+ place(1, 4, mPreviousButton);
+ place(2, 4, mNextButton);
+ place(1, 5, mNewCharButton);
+ place(2, 5, mDelCharButton);
+ place.getCell().matchColWidth(1, 2);
+ place = getPlacer(0, 2);
+ place(0, 0, mSelectButton);
+ place(1, 0, mCancelButton);
+ reflowLayout(265, 0);
setLocationRelativeTo(getParent());
setVisible(true);
@@ -178,10 +168,10 @@ void CharSelectDialog::updatePlayerInfo()
if (pi)
{
- mNameLabel->setCaption(pi->getName());
- mLevelLabel->setCaption("Lvl: " + toString(pi->mLevel));
- mJobLevelLabel->setCaption("Job Lvl: " + toString(pi->mJobLevel));
- mMoneyLabel->setCaption("Gold: " + toString(pi->mGp));
+ mNameLabel->setCaption(strprintf(_("Name: %s"), pi->getName().c_str()));
+ mLevelLabel->setCaption(strprintf(_("Level: %d"), pi->mLevel));
+ mJobLevelLabel->setCaption(strprintf(_("Job Level: %d"), pi->mJobLevel));
+ mMoneyLabel->setCaption(strprintf(_("Gold: %d"), pi->mGp));
if (!mCharSelected)
{
mNewCharButton->setEnabled(false);
@@ -190,10 +180,10 @@ void CharSelectDialog::updatePlayerInfo()
}
}
else {
- mNameLabel->setCaption("Name");
- mLevelLabel->setCaption("Level");
- mJobLevelLabel->setCaption("Job Level");
- mMoneyLabel->setCaption("Money");
+ mNameLabel->setCaption(strprintf(_("Name: %s"), ""));
+ mLevelLabel->setCaption(strprintf(_("Level: %d"), 0));
+ mJobLevelLabel->setCaption(strprintf(_("Job Level: %d"), 0));
+ mMoneyLabel->setCaption(strprintf(_("Money: %d"), 0));
mNewCharButton->setEnabled(true);
mDelCharButton->setEnabled(false);
mSelectButton->setEnabled(false);
@@ -249,23 +239,23 @@ bool CharSelectDialog::selectByName(const std::string &name)
}
CharCreateDialog::CharCreateDialog(Window *parent, int slot, Network *network,
- unsigned char gender):
- Window("Create Character", true, parent), mNetwork(network), mSlot(slot)
+ Gender gender):
+ Window(_("Create Character"), true, parent), mNetwork(network), mSlot(slot)
{
mPlayer = new Player(0, 0, NULL);
mPlayer->setGender(gender);
mPlayer->setHairStyle(rand() % Being::getHairStylesNr(), rand() % Being::getHairColorsNr());
mNameField = new TextField("");
- mNameLabel = new gcn::Label("Name:");
+ mNameLabel = new gcn::Label(_("Name:"));
mNextHairColorButton = new Button(">", "nextcolor", this);
mPrevHairColorButton = new Button("<", "prevcolor", this);
- mHairColorLabel = new gcn::Label("Hair Color:");
+ mHairColorLabel = new gcn::Label(_("Hair Color:"));
mNextHairStyleButton = new Button(">", "nextstyle", this);
mPrevHairStyleButton = new Button("<", "prevstyle", this);
- mHairStyleLabel = new gcn::Label("Hair Style:");
- mCreateButton = new Button("Create", "create", this);
- mCancelButton = new Button("Cancel", "cancel", this);
+ mHairStyleLabel = new gcn::Label(_("Hair Style:"));
+ mCreateButton = new Button(_("Create"), "create", this);
+ mCancelButton = new Button(_("Cancel"), "cancel", this);
mPlayerBox = new PlayerBox(mPlayer);
mNameField->setActionEventId("create");
diff --git a/src/gui/char_select.h b/src/gui/char_select.h
index 0890bea9..22c247b6 100644
--- a/src/gui/char_select.h
+++ b/src/gui/char_select.h
@@ -26,6 +26,7 @@
#include "../guichanfwd.h"
#include "../lockedarray.h"
+#include "../being.h"
#include <guichan/actionlistener.hpp>
@@ -48,7 +49,7 @@ class CharSelectDialog : public Window, public gcn::ActionListener
*/
CharSelectDialog(Network *network,
LockedArray<LocalPlayer*> *charInfo,
- unsigned char gender);
+ Gender gender);
void action(const gcn::ActionEvent &event);
@@ -76,7 +77,7 @@ class CharSelectDialog : public Window, public gcn::ActionListener
PlayerBox *mPlayerBox;
- unsigned char mGender;
+ Gender mGender;
bool mCharSelected;
/**
@@ -102,7 +103,7 @@ class CharCreateDialog : public Window, public gcn::ActionListener
* Constructor.
*/
CharCreateDialog(Window *parent, int slot, Network *network,
- unsigned char gender);
+ Gender gender);
/**
* Destructor.
diff --git a/src/gui/char_server.cpp b/src/gui/char_server.cpp
index ce068ad1..3d3309fb 100644
--- a/src/gui/char_server.cpp
+++ b/src/gui/char_server.cpp
@@ -31,6 +31,8 @@
#include "../net/network.h" // TODO this is just for iptostring, move that?
+#include "../utils/gettext.h"
+#include "../utils/strprintf.h"
#include "../utils/tostring.h"
extern SERVER_INFO **server_info;
@@ -47,15 +49,15 @@ class ServerListModel : public gcn::ListModel {
};
ServerSelectDialog::ServerSelectDialog(LoginData *loginData, int nextState):
- Window("Select Server"),
+ Window(_("Select Server")),
mLoginData(loginData),
mNextState(nextState)
{
mServerListModel = new ServerListModel();
mServerList = new ListBox(mServerListModel);
ScrollArea *mScrollArea = new ScrollArea(mServerList);
- mOkButton = new Button("OK", "ok", this);
- Button *mCancelButton = new Button("Cancel", "cancel", this);
+ mOkButton = new Button(_("OK"), "ok", this);
+ Button *mCancelButton = new Button(_("Cancel"), "cancel", this);
setContentSize(200, 100);
diff --git a/src/gui/chat.cpp b/src/gui/chat.cpp
index edde42d0..d61ec021 100644
--- a/src/gui/chat.cpp
+++ b/src/gui/chat.cpp
@@ -23,13 +23,13 @@
#include <sstream>
#include <guichan/focushandler.hpp>
-#include <guichan/key.hpp>
#include "chat.h"
#include "browserbox.h"
#include "chatinput.h"
#include "scrollarea.h"
+#include "sdlinput.h"
#include "windowcontainer.h"
#include "../configuration.h"
@@ -39,6 +39,8 @@
#include "../net/messageout.h"
#include "../net/protocol.h"
+#include "../utils/gettext.h"
+#include "../utils/strprintf.h"
#include "../utils/trim.h"
ChatWindow::ChatWindow(Network *network):
@@ -91,8 +93,7 @@ void ChatWindow::widgetResized(const gcn::Event &event)
mChatInput->getHeight() - 5);
}
-void
-ChatWindow::chatLog(std::string line, int own)
+void ChatWindow::chatLog(std::string line, int own)
{
// Trim whitespace
trim(line);
@@ -117,11 +118,14 @@ ChatWindow::chatLog(std::string line, int own)
std::string lineColor = "##0"; // Equiv. to BrowserBox::BLACK
switch (own) {
case BY_GM:
- if (tmp.nick.empty())
- tmp.nick = std::string("Global announcement: ");
- else
- tmp.nick = std::string("Global announcement from " + tmp.nick
- + std::string(": "));
+ if (tmp.nick.empty()) {
+ tmp.nick = _("Global announcement:");
+ tmp.nick += " ";
+ } else {
+ tmp.nick = strprintf(_("Global announcement from %s:"),
+ tmp.nick.c_str());
+ tmp.nick += " ";
+ }
lineColor = "##1"; // Equiv. to BrowserBox::RED
break;
case BY_PLAYER:
@@ -133,12 +137,14 @@ ChatWindow::chatLog(std::string line, int own)
lineColor = "##0"; // Equiv. to BrowserBox::BLACK
break;
case BY_SERVER:
- tmp.nick = "Server: ";
+ tmp.nick = _("Server:");
+ tmp.nick += " ";
tmp.text = line;
lineColor = "##7"; // Equiv. to BrowserBox::PINK
break;
case ACT_WHISPER:
- tmp.nick += CAT_WHISPER;
+ tmp.nick = strprintf(_("%s whispers:"), tmp.nick.c_str());
+ tmp.nick += " ";
lineColor = "##3"; // Equiv. to BrowserBox::BLUE
break;
case ACT_IS:
@@ -182,14 +188,12 @@ ChatWindow::chatLog(std::string line, int own)
}
}
-void
-ChatWindow::chatLog(CHATSKILL act)
+void ChatWindow::chatLog(CHATSKILL act)
{
chatLog(const_msg(act), BY_SERVER);
}
-void
-ChatWindow::action(const gcn::ActionEvent &event)
+void ChatWindow::action(const gcn::ActionEvent &event)
{
if (event.getId() == "chatinput")
{
@@ -222,8 +226,7 @@ ChatWindow::action(const gcn::ActionEvent &event)
}
}
-void
-ChatWindow::requestChatFocus()
+void ChatWindow::requestChatFocus()
{
// Make sure chatWindow is visible
if (!isVisible())
@@ -243,19 +246,18 @@ ChatWindow::requestChatFocus()
mChatInput->requestFocus();
}
-bool
-ChatWindow::isInputFocused()
+bool ChatWindow::isInputFocused()
{
return mChatInput->isFocused();
}
-void
-ChatWindow::whisper(const std::string &nick, std::string msg, int prefixlen)
+void ChatWindow::whisper(const std::string &nick, std::string msg,
+ int prefixlen)
{
std::string recvnick = "";
msg.erase(0, prefixlen + 1);
- if (msg.substr(0,1) == "\"")
+ if (msg.substr(0, 1) == "\"")
{
const std::string::size_type pos = msg.find('"', 1);
if (pos != std::string::npos) {
@@ -278,11 +280,12 @@ ChatWindow::whisper(const std::string &nick, std::string msg, int prefixlen)
outMsg.writeString(recvnick, 24);
outMsg.writeString(msg, msg.length());
- chatLog("Whispering to " + recvnick + " : " + msg, BY_PLAYER);
+ chatLog(strprintf(_("Whispering to %s: %s"),
+ recvnick.c_str(), msg.c_str()),
+ BY_PLAYER);
}
-void
-ChatWindow::chatSend(const std::string &nick, std::string msg)
+void ChatWindow::chatSend(const std::string &nick, std::string msg)
{
/* Some messages are managed client side, while others
* require server handling by proper packet. Probably
@@ -350,81 +353,82 @@ ChatWindow::chatSend(const std::string &nick, std::string msg)
whisper(nick, msg, IS_SHORT_WHISPER_LENGTH);
else
{
- chatLog("Unknown command", BY_SERVER);
+ chatLog(_("Unknown command"), BY_SERVER);
}
}
-std::string
-ChatWindow::const_msg(CHATSKILL act)
+std::string ChatWindow::const_msg(CHATSKILL act)
{
std::string msg;
if (act.success == SKILL_FAILED && act.skill == SKILL_BASIC) {
switch (act.bskill) {
- case BSKILL_TRADE :
- msg = "Trade failed!";
+ case BSKILL_TRADE:
+ msg = _("Trade failed!");
break;
- case BSKILL_EMOTE :
- msg = "Emote failed!";
+ case BSKILL_EMOTE:
+ msg = _("Emote failed!");
break;
- case BSKILL_SIT :
- msg = "Sit failed!";
+ case BSKILL_SIT:
+ msg = _("Sit failed!");
break;
- case BSKILL_CREATECHAT :
- msg = "Chat creating failed!";
+ case BSKILL_CREATECHAT:
+ msg = _("Chat creating failed!");
break;
- case BSKILL_JOINPARTY :
- msg = "Could not join party!";
+ case BSKILL_JOINPARTY:
+ msg = _("Could not join party!");
break;
- case BSKILL_SHOUT :
- msg = "Cannot shout!";
+ case BSKILL_SHOUT:
+ msg = _("Cannot shout!");
break;
}
+ msg += " ";
+
switch (act.reason) {
- case RFAIL_SKILLDEP :
- msg += " You have not yet reached a high enough lvl!";
+ case RFAIL_SKILLDEP:
+ msg += _("You have not yet reached a high enough lvl!");
break;
- case RFAIL_INSUFHP :
- msg += " Insufficient HP!";
+ case RFAIL_INSUFHP:
+ msg += _("Insufficient HP!");
break;
- case RFAIL_INSUFSP :
- msg += " Insufficient SP!";
+ case RFAIL_INSUFSP:
+ msg += _("Insufficient SP!");
break;
- case RFAIL_NOMEMO :
- msg += " You have no memos!";
+ case RFAIL_NOMEMO:
+ msg += _("You have no memos!");
break;
- case RFAIL_SKILLDELAY :
- msg += " You cannot do that right now!";
+ case RFAIL_SKILLDELAY:
+ msg += _("You cannot do that right now!");
break;
- case RFAIL_ZENY :
- msg += " Seems you need more Zeny... ;-)";
+ case RFAIL_ZENY:
+ msg += _("Seems you need more Zeny... ;-)");
break;
- case RFAIL_WEAPON :
- msg += " You cannot use this skill with that kind of weapon!";
+ case RFAIL_WEAPON:
+ msg += _("You cannot use this skill with that kind of weapon!");
break;
- case RFAIL_REDGEM :
- msg += " You need another red gem!";
+ case RFAIL_REDGEM:
+ msg += _("You need another red gem!");
break;
- case RFAIL_BLUEGEM :
- msg += " You need another blue gem!";
+ case RFAIL_BLUEGEM:
+ msg += _("You need another blue gem!");
break;
- case RFAIL_OVERWEIGHT :
- msg += " You're carrying to much to do this!";
+ case RFAIL_OVERWEIGHT:
+ msg += _("You're carrying to much to do this!");
break;
- default :
- msg += " Huh? What's that?";
+ default:
+ msg += _("Huh? What's that?");
break;
}
} else {
- switch(act.skill) {
+ switch (act.skill) {
case SKILL_WARP :
- msg = "Warp failed...";
+ msg = _("Warp failed...");
break;
case SKILL_STEAL :
- msg = "Could not steal anything...";
+ msg = _("Could not steal anything...");
break;
case SKILL_ENVENOM :
- msg = "Poison had no effect...";
+ msg = _("Poison had no effect...");
break;
}
}
@@ -432,8 +436,7 @@ ChatWindow::const_msg(CHATSKILL act)
return msg;
}
-void
-ChatWindow::scroll(int amount)
+void ChatWindow::scroll(int amount)
{
if (!isVisible())
return;
@@ -445,10 +448,9 @@ ChatWindow::scroll(int amount)
mTextOutput->showPart(scr);
}
-void
-ChatWindow::keyPressed(gcn::KeyEvent &event)
+void ChatWindow::keyPressed(gcn::KeyEvent &event)
{
- if (event.getKey().getValue() == gcn::Key::DOWN &&
+ if (event.getKey().getValue() == Key::DOWN &&
mCurHist != mHistory.end())
{
// Move forward through the history
@@ -461,7 +463,7 @@ ChatWindow::keyPressed(gcn::KeyEvent &event)
mCurHist = prevHist;
}
}
- else if (event.getKey().getValue() == gcn::Key::UP &&
+ else if (event.getKey().getValue() == Key::UP &&
mCurHist != mHistory.begin() && mHistory.size() > 0)
{
// Move backward through the history
@@ -471,15 +473,13 @@ ChatWindow::keyPressed(gcn::KeyEvent &event)
}
}
-void
-ChatWindow::setInputText(std::string input_str)
+void ChatWindow::setInputText(std::string input_str)
{
mChatInput->setText(input_str + " ");
requestChatFocus();
}
-void
-ChatWindow::setVisible(bool isVisible)
+void ChatWindow::setVisible(bool isVisible)
{
Window::setVisible(isVisible);
@@ -493,67 +493,68 @@ ChatWindow::setVisible(bool isVisible)
void ChatWindow::help(const std::string &msg1, const std::string &msg2)
{
- chatLog("-- Help --", BY_SERVER);
+ chatLog(_("-- Help --"), BY_SERVER);
if (msg1 == "")
{
- chatLog("/announce: Global announcement (GM only)", BY_SERVER);
- chatLog("/clear: Clears this window", BY_SERVER);
- chatLog("/help: Display this help.", BY_SERVER);
- chatLog("/where: Display map name", BY_SERVER);
- chatLog("/whisper <nick> <message>: Sends a private <message>"
- " to <nick>", BY_SERVER);
- chatLog("/w <nick> <message>: Short form for /whisper", BY_SERVER);
- chatLog("/who: Display number of online users", BY_SERVER);
- chatLog("For more information, type /help <command>", BY_SERVER);
+ chatLog(_("/announce: Global announcement (GM only)"), BY_SERVER);
+ chatLog(_("/clear: Clears this window"), BY_SERVER);
+ chatLog(_("/help: Display this help"), BY_SERVER);
+ chatLog(_("/where: Display map name"), BY_SERVER);
+ chatLog(_("/whisper <nick> <message>: Sends a private <message>"
+ " to <nick>"), BY_SERVER);
+ chatLog(_("/w <nick> <message>: Short form for /whisper"), BY_SERVER);
+ chatLog(_("/who: Display number of online users"), BY_SERVER);
+ chatLog(_("For more information, type /help <command>"), BY_SERVER);
return;
}
if (msg1 == "announce")
{
- chatLog("Command: /announce <msg>", BY_SERVER);
- chatLog("*** only available to a GM ***", BY_SERVER);
- chatLog("This command sends the message <msg> to "
- "all players currently online.", BY_SERVER);
+ chatLog(_("Command: /announce <msg>"), BY_SERVER);
+ chatLog(_("*** only available to a GM ***"), BY_SERVER);
+ chatLog(_("This command sends the message <msg> to "
+ "all players currently online."), BY_SERVER);
return;
}
if (msg1 == "clear")
{
- chatLog("Command: /clear", BY_SERVER);
- chatLog("This command clears the chat log of previous chat.",
+ chatLog(_("Command: /clear"), BY_SERVER);
+ chatLog(_("This command clears the chat log of previous chat."),
BY_SERVER);
return;
}
if (msg1 == "help")
{
- chatLog("Command: /help", BY_SERVER);
- chatLog("This command displays a list of all commands available.",
+ chatLog(_("Command: /help"), BY_SERVER);
+ chatLog(_("This command displays a list of all commands available."),
BY_SERVER);
- chatLog("Command: /help <command>", BY_SERVER);
- chatLog("This command displays help on <command>.", BY_SERVER);
+ chatLog(_("Command: /help <command>"), BY_SERVER);
+ chatLog(_("This command displays help on <command>."), BY_SERVER);
return;
}
if (msg1 == "where")
{
- chatLog("Command: /where", BY_SERVER);
- chatLog("This command displays the name of the current map.",
+ chatLog(_("Command: /where"), BY_SERVER);
+ chatLog(_("This command displays the name of the current map."),
BY_SERVER);
return;
}
if (msg1 == "whisper" || msg1 == "w")
{
- chatLog("Command: /whisper <nick> <msg>", BY_SERVER);
- chatLog("Command: /w <nick> <msg>", BY_SERVER);
- chatLog("This command sends the message <msg> to <nick>.", BY_SERVER);
- chatLog("If the <nick> has spaces in it, enclose it in "
- "double quotes (\").", BY_SERVER);
+ chatLog(_("Command: /whisper <nick> <msg>"), BY_SERVER);
+ chatLog(_("Command: /w <nick> <msg>"), BY_SERVER);
+ chatLog(_("This command sends the message <msg> to <nick>."),
+ BY_SERVER);
+ chatLog(_("If the <nick> has spaces in it, enclose it in "
+ "double quotes (\")."), BY_SERVER);
return;
}
if (msg1 == "who")
{
- chatLog("Command: /who", BY_SERVER);
- chatLog("This command displays the number of players currently "
- "online.", BY_SERVER);
+ chatLog(_("Command: /who"), BY_SERVER);
+ chatLog(_("This command displays the number of players currently "
+ "online."), BY_SERVER);
return;
}
- chatLog("Unknown command.", BY_SERVER);
- chatLog("Type /help for a list of commands.", BY_SERVER);
+ chatLog(_("Unknown command."), BY_SERVER);
+ chatLog(_("Type /help for a list of commands."), BY_SERVER);
}
diff --git a/src/gui/chat.h b/src/gui/chat.h
index 09c3712b..dc0d002d 100644
--- a/src/gui/chat.h
+++ b/src/gui/chat.h
@@ -183,20 +183,16 @@ class ChatWindow : public Window, public gcn::ActionListener,
* // for simple message by a user /- message
* chatlog.chat_send("Zaeiru", "Hello to all users on the screen!");
*/
- void
- chatSend(const std::string &nick, std::string msg);
+ void chatSend(const std::string &nick, std::string msg);
/** Called when key is pressed */
- void
- keyPressed(gcn::KeyEvent &event);
+ void keyPressed(gcn::KeyEvent &event);
/** Called to set current text */
- void
- setInputText(std::string input_str);
+ void setInputText(std::string input_str);
/** Override to reset mTmpVisible */
- void
- setVisible(bool visible);
+ void setVisible(bool visible);
/**
* Scrolls the chat window
@@ -205,8 +201,7 @@ class ChatWindow : public Window, public gcn::ActionListener,
* up, positive numbers scroll down. The absolute amount indicates the
* amount of 1/8ths of chat window real estate that should be scrolled.
*/
- void
- scroll(int amount);
+ void scroll(int amount);
/**
* help implements the /help command
@@ -214,15 +209,13 @@ class ChatWindow : public Window, public gcn::ActionListener,
* @param msg1 is the command that the player needs help on
* @param msg2 is the sub-command relating to the command
*/
- void
- help(const std::string &msg1, const std::string &msg2);
+ void help(const std::string &msg1, const std::string &msg2);
private:
Network *mNetwork;
bool mTmpVisible;
- void
- whisper(const std::string &nick, std::string msg, int prefixlen);
+ void whisper(const std::string &nick, std::string msg, int prefixlen);
/** One item in the chat log */
struct CHATLOG
diff --git a/src/gui/confirm_dialog.cpp b/src/gui/confirm_dialog.cpp
index 9ef94f62..5f2b9cb2 100644
--- a/src/gui/confirm_dialog.cpp
+++ b/src/gui/confirm_dialog.cpp
@@ -25,14 +25,15 @@
#include "button.h"
+#include "../utils/gettext.h"
ConfirmDialog::ConfirmDialog(const std::string &title, const std::string &msg,
Window *parent):
Window(title, true, parent)
{
gcn::Label *textLabel = new gcn::Label(msg);
- gcn::Button *yesButton = new Button("Yes", "yes", this);
- gcn::Button *noButton = new Button("No", "no", this);
+ gcn::Button *yesButton = new Button(_("Yes"), "yes", this);
+ gcn::Button *noButton = new Button(_("No"), "no", this);
int w = textLabel->getWidth() + 20;
int inWidth = yesButton->getWidth() + noButton->getWidth() + 5;
diff --git a/src/gui/connection.cpp b/src/gui/connection.cpp
index 8ad3b436..0f43ff14 100644
--- a/src/gui/connection.cpp
+++ b/src/gui/connection.cpp
@@ -30,6 +30,8 @@
#include "../main.h"
+#include "../utils/gettext.h"
+
namespace {
struct ConnectionActionListener : public gcn::ActionListener
{
@@ -42,9 +44,9 @@ ConnectionDialog::ConnectionDialog():
{
setContentSize(200, 100);
- Button *cancelButton = new Button("Cancel", "cancelButton", &listener);
+ Button *cancelButton = new Button(_("Cancel"), "cancelButton", &listener);
mProgressBar = new ProgressBar(0.0, 200 - 10, 20, 128, 128, 128);
- gcn::Label *label = new gcn::Label("Connecting...");
+ gcn::Label *label = new gcn::Label(_("Connecting..."));
cancelButton->setPosition(5, 100 - 5 - cancelButton->getHeight());
mProgressBar->setPosition(5, cancelButton->getY() - 25);
diff --git a/src/gui/equipmentwindow.cpp b/src/gui/equipmentwindow.cpp
index 762ca8e8..f3a143be 100644
--- a/src/gui/equipmentwindow.cpp
+++ b/src/gui/equipmentwindow.cpp
@@ -31,10 +31,12 @@
#include "../resources/iteminfo.h"
#include "../resources/resourcemanager.h"
+#include "../utils/gettext.h"
#include "../utils/tostring.h"
EquipmentWindow::EquipmentWindow(Equipment *equipment):
- Window("Equipment"), mEquipment(equipment)
+ Window(_("Equipment")),
+ mEquipment(equipment)
{
setWindowName("Equipment");
setCloseButton(true);
diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp
index a65cb0fb..87bab0ea 100644
--- a/src/gui/gui.cpp
+++ b/src/gui/gui.cpp
@@ -24,12 +24,9 @@
#include <guichan/exception.hpp>
#include <guichan/image.hpp>
#include <guichan/imagefont.hpp>
-#include <SDL/SDL_ttf.h>
-
-// Should stay here because of Guichan being sensitive to headers order
-#include <guichan/sdl/sdlinput.hpp>
#include "focushandler.h"
+#include "sdlinput.h"
#include "truetypefont.h"
#include "viewport.h"
#include "window.h"
@@ -48,7 +45,7 @@
// Guichan stuff
Gui *gui;
Viewport *viewport; /**< Viewport on the map. */
-gcn::SDLInput *guiInput; /**< GUI input. */
+SDLInput *guiInput;
// Fonts used in showing hits
gcn::Font *hitRedFont;
@@ -91,7 +88,7 @@ Gui::Gui(Graphics *graphics):
gcn::Image::setImageLoader(&imageLoader);
// Set input
- guiInput = new gcn::SDLInput();
+ guiInput = new SDLInput;
setInput(guiInput);
// Set focus handler
@@ -106,9 +103,12 @@ Gui::Gui(Graphics *graphics):
Window::setWindowContainer(guiTop);
setTop(guiTop);
- // Set global font (based on ISO-8859-15)
+ ResourceManager *resman = ResourceManager::getInstance();
+
+ // Set global font
+ std::string path = resman->getPath("fonts/dejavusans.ttf");
try {
- mGuiFont = new TrueTypeFont("data/fonts/dejavusans.ttf", 12);
+ mGuiFont = new TrueTypeFont(path, 11);
}
catch (gcn::Exception e)
{
diff --git a/src/gui/gui.h b/src/gui/gui.h
index 15d5d99c..7d390df9 100644
--- a/src/gui/gui.h
+++ b/src/gui/gui.h
@@ -29,6 +29,7 @@
class GuiConfigListener;
class Graphics;
class ImageSet;
+class SDLInput;
class Viewport;
/**
@@ -115,7 +116,7 @@ class Gui : public gcn::Gui
extern Gui *gui; /**< The GUI system */
extern Viewport *viewport; /**< The viewport */
-extern gcn::SDLInput *guiInput; /**< GUI input */
+extern SDLInput *guiInput; /**< GUI input */
/**
* Fonts used in showing hits
diff --git a/src/gui/hbox.cpp b/src/gui/hbox.cpp
deleted file mode 100644
index 020e85c6..00000000
--- a/src/gui/hbox.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * The Mana World
- * Copyright 2004 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
- */
-
-#include "hbox.h"
-
-void HBox::draw(gcn::Graphics *graphics)
-{
- int widgetCount = mWidgets.size();
- int childHeight = getHeight();
- if (widgetCount == 0)
- return;
- int childWidth = getWidth() / widgetCount;
-
- int i = 0;
- for (WidgetIterator w = mWidgets.begin(); w != mWidgets.end(); w++) {
- (*w)->setPosition(childWidth * i - padding, 0);
- (*w)->setSize(childWidth, childHeight);
- i++;
- }
- gcn::Container::draw(graphics);
-}
diff --git a/src/gui/help.cpp b/src/gui/help.cpp
index 290679b9..a52119b8 100644
--- a/src/gui/help.cpp
+++ b/src/gui/help.cpp
@@ -27,8 +27,10 @@
#include "../resources/resourcemanager.h"
+#include "../utils/gettext.h"
+
HelpWindow::HelpWindow():
- Window("Help")
+ Window(_("Help"))
{
setContentSize(455, 350);
setWindowName("Help");
@@ -36,7 +38,7 @@ HelpWindow::HelpWindow():
mBrowserBox = new BrowserBox();
mBrowserBox->setOpaque(false);
mScrollArea = new ScrollArea(mBrowserBox);
- Button *okButton = new Button("Close", "close", this);
+ Button *okButton = new Button(_("Close"), "close", this);
mScrollArea->setDimension(gcn::Rectangle(
5, 5, 445, 335 - okButton->getHeight()));
diff --git a/src/gui/inttextbox.cpp b/src/gui/inttextbox.cpp
index 4825fbf5..a995f084 100644
--- a/src/gui/inttextbox.cpp
+++ b/src/gui/inttextbox.cpp
@@ -21,7 +21,7 @@
#include "inttextbox.h"
-#include <guichan/key.hpp>
+#include "sdlinput.h"
#include "../utils/tostring.h"
@@ -35,17 +35,20 @@ IntTextBox::keyPressed(gcn::KeyEvent &event)
{
const gcn::Key &key = event.getKey();
- if (key.isNumber() || key.getValue() == gcn::Key::BACKSPACE
- || key.getValue() == gcn::Key::DELETE)
+ if (key.getValue() == Key::BACKSPACE ||
+ key.getValue() == Key::DELETE)
{
- gcn::TextBox::keyPressed(event);
+ setText(std::string());
+ event.consume();
}
- std::stringstream s(gcn::TextBox::getText());
+ if (!key.isNumber()) return;
+ TextField::keyPressed(event);
+
+ std::istringstream s(getText());
int i;
s >> i;
- if (gcn::TextBox::getText() != "")
- setInt(i);
+ setInt(i);
}
void IntTextBox::setRange(int min, int max)
@@ -56,9 +59,7 @@ void IntTextBox::setRange(int min, int max)
int IntTextBox::getInt()
{
- if (gcn::TextBox::getText() == "")
- return 0;
- return mValue;
+ return getText().empty() ? mMin : mValue;
}
void IntTextBox::setInt(int i)
diff --git a/src/gui/inttextbox.h b/src/gui/inttextbox.h
index 8fc8e404..8dad0c39 100644
--- a/src/gui/inttextbox.h
+++ b/src/gui/inttextbox.h
@@ -22,12 +22,12 @@
#ifndef INTTEXTBOX_H
#define INTTEXTBOX_H
-#include "textbox.h"
+#include "textfield.h"
/**
* TextBox which only accepts numbers as input.
*/
-class IntTextBox : public TextBox
+class IntTextBox : public TextField
{
public:
/**
diff --git a/src/gui/inventorywindow.cpp b/src/gui/inventorywindow.cpp
index 0e1c5291..ac368aa7 100644
--- a/src/gui/inventorywindow.cpp
+++ b/src/gui/inventorywindow.cpp
@@ -39,10 +39,11 @@
#include "../resources/iteminfo.h"
-#include "../utils/tostring.h"
+#include "../utils/gettext.h"
+#include "../utils/strprintf.h"
InventoryWindow::InventoryWindow():
- Window("Inventory")
+ Window(_("Inventory"))
{
setWindowName("Inventory");
setResizable(true);
@@ -52,8 +53,8 @@ InventoryWindow::InventoryWindow():
// If you adjust these defaults, don't forget to adjust the trade window's.
setDefaultSize(115, 25, 322, 200);
- mUseButton = new Button("Use", "use", this);
- mDropButton = new Button("Drop", "drop", this);
+ mUseButton = new Button(_("Use"), "use", this);
+ mDropButton = new Button(_("Drop"), "drop", this);
mItems = new ItemContainer(player_node->getInventory());
mItems->addSelectionListener(this);
@@ -95,15 +96,14 @@ void InventoryWindow::logic()
updateButtons();
// Update weight information
- mWeightLabel->setCaption(
- "Weight: " + toString(player_node->mTotalWeight) +
- "/" + toString(player_node->mMaxWeight));
+ mWeightLabel->setCaption(strprintf(_("Weight: %d / %d"),
+ player_node->mTotalWeight,
+ player_node->mMaxWeight));
// Update number of items in inventory
- mInvenSlotLabel->setCaption(
- "Slots used: "
- + toString(player_node->getInventory()->getNumberOfSlotsUsed())
- + "/" + toString(player_node->getInventory()->getInventorySize()));
+ mInvenSlotLabel->setCaption(strprintf(_("Slots used: %d / %d"),
+ player_node->getInventory()->getNumberOfSlotsUsed(),
+ player_node->getInventory()->getInventorySize()));
}
void InventoryWindow::action(const gcn::ActionEvent &event)
@@ -145,20 +145,20 @@ void InventoryWindow::valueChanged(const gcn::SelectionEvent &event)
// Update name, effect and description
if (!item)
{
- mItemNameLabel->setCaption("Name:");
- mItemEffectLabel->setCaption("Effect:");
- mItemDescriptionLabel->setCaption("Description:");
+ mItemNameLabel->setCaption(strprintf(_("Name: %s"), ""));
+ mItemEffectLabel->setCaption(strprintf(_("Effect: %s"), ""));
+ mItemDescriptionLabel->setCaption(strprintf(_("Description: %s"), ""));
}
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->setCaption(
+ strprintf(_("Name: %s"), itemInfo.getName().c_str()));
+ mItemEffectLabel->setCaption(
+ strprintf(_("Effect: %s"), itemInfo.getEffect().c_str()));
+ mItemDescriptionLabel->setCaption(
+ strprintf(_("Description: %s"),
+ itemInfo.getDescription().c_str()));
}
}
@@ -170,7 +170,8 @@ void InventoryWindow::mouseClicked(gcn::MouseEvent &event)
{
Item *item = mItems->getSelectedItem();
- if (!item) return;
+ if (!item)
+ return;
/* Convert relative to the window coordinates to absolute screen
* coordinates.
@@ -221,14 +222,14 @@ void InventoryWindow::updateButtons()
if (selectedItem && selectedItem->isEquipment())
{
if (selectedItem->isEquipped()) {
- mUseButton->setCaption("Unequip");
+ mUseButton->setCaption(_("Unequip"));
}
else {
- mUseButton->setCaption("Equip");
+ mUseButton->setCaption(_("Equip"));
}
}
else {
- mUseButton->setCaption("Use");
+ mUseButton->setCaption(_("Use"));
}
mUseButton->setEnabled(selectedItem != 0);
diff --git a/src/gui/item_amount.cpp b/src/gui/item_amount.cpp
index 2e8941e8..17c3243a 100644
--- a/src/gui/item_amount.cpp
+++ b/src/gui/item_amount.cpp
@@ -26,64 +26,64 @@
#include "slider.h"
#include "trade.h"
+#include "widgets/layout.h"
+
#include "../item.h"
#include "../localplayer.h"
+#include "../utils/gettext.h"
+
ItemAmountWindow::ItemAmountWindow(int usage, Window *parent, Item *item):
- Window("Select amount of items to drop.", true, parent),
+ Window("", true, parent),
mItem(item)
{
- // New labels
+ const int maxRange = mItem->getQuantity();
+
+ // Integer field
mItemAmountTextBox = new IntTextBox(1);
+ mItemAmountTextBox->setRange(1, maxRange);
+ mItemAmountTextBox->setWidth(30);
+ mItemAmountTextBox->setActionEventId("Dummy");
+ mItemAmountTextBox->addActionListener(this);
+
+ // Slider
+ mItemAmountSlide = new Slider(1.0, maxRange);
+ mItemAmountSlide->setHeight(10);
+ mItemAmountSlide->setActionEventId("Slide");
+ mItemAmountSlide->addActionListener(this);
- // New buttons
+ // Buttons
Button *minusButton = new Button("-", "Minus", this);
+ minusButton->setSize(20, 20);
Button *plusButton = new Button("+", "Plus", this);
- Button *okButton = new Button("Okay", "Drop", this);
- Button *cancelButton = new Button("Cancel", "Cancel", this);
- mItemAmountSlide = new Slider(1.0, mItem->getQuantity());
-
- mItemAmountTextBox->setRange(1, mItem->getQuantity());
- mItemAmountSlide->setDimension(gcn::Rectangle(5, 120, 180, 10));
-
- // Set button events Id
- mItemAmountSlide->setActionEventId("Slide");
-
- // Set position
- mItemAmountTextBox->setPosition(35, 10);
- mItemAmountTextBox->setSize(24, 16);
- plusButton->setPosition(60, 5);
- minusButton->setPosition(10, 5);
- mItemAmountSlide->setPosition(10, 35);
- okButton->setPosition(10, 50);
- cancelButton->setPosition(60, 50);
-
- // Assemble
- add(mItemAmountTextBox);
- add(plusButton);
- add(minusButton);
- add(mItemAmountSlide);
- add(okButton);
- add(cancelButton);
-
- mItemAmountSlide->addActionListener(this);
+ plusButton->setSize(20, 20);
+ Button *okButton = new Button(_("Ok"), "Drop", this);
+ Button *cancelButton = new Button(_("Cancel"), "Cancel", this);
+
+ // Set positions
+ place(0, 0, minusButton);
+ place(1, 0, mItemAmountTextBox).setPadding(2);
+ place(2, 0, plusButton);
+ place(0, 1, mItemAmountSlide, 6);
+ place(4, 2, okButton);
+ place(5, 2, cancelButton);
+ reflowLayout(250, 0);
resetAmount();
switch (usage) {
case AMOUNT_TRADE_ADD:
- setCaption("Select amount of items to trade.");
+ setCaption(_("Select amount of items to trade."));
okButton->setActionEventId("AddTrade");
break;
case AMOUNT_ITEM_DROP:
- setCaption("Select amount of items to drop.");
+ setCaption(_("Select amount of items to drop."));
okButton->setActionEventId("Drop");
break;
default:
break;
}
- setContentSize(200, 80);
setLocationRelativeTo(getParentWindow());
setVisible(true);
}
@@ -101,16 +101,6 @@ void ItemAmountWindow::action(const gcn::ActionEvent &event)
{
scheduleDelete();
}
- else if (event.getId() == "Drop")
- {
- player_node->dropItem(mItem, mItemAmountTextBox->getInt());
- scheduleDelete();
- }
- else if (event.getId() == "AddTrade")
- {
- tradeWindow->tradeItem(mItem, mItemAmountTextBox->getInt());
- scheduleDelete();
- }
else if (event.getId() == "Plus")
{
amount++;
@@ -123,7 +113,16 @@ void ItemAmountWindow::action(const gcn::ActionEvent &event)
{
amount = static_cast<int>(mItemAmountSlide->getValue());
}
+ else if (event.getId() == "Drop")
+ {
+ player_node->dropItem(mItem, mItemAmountTextBox->getInt());
+ scheduleDelete();
+ }
+ else if (event.getId() == "AddTrade")
+ {
+ tradeWindow->tradeItem(mItem, mItemAmountTextBox->getInt());
+ scheduleDelete();
+ }
mItemAmountTextBox->setInt(amount);
mItemAmountSlide->setValue(amount);
}
-
diff --git a/src/gui/itemcontainer.cpp b/src/gui/itemcontainer.cpp
index 9115b1fb..65f8132a 100644
--- a/src/gui/itemcontainer.cpp
+++ b/src/gui/itemcontainer.cpp
@@ -115,6 +115,7 @@ void ItemContainer::draw(gcn::Graphics *graphics)
}
// Draw item caption
+ graphics->setColor(gcn::Color(0, 0, 0));
graphics->drawText(
(item->isEquipped() ? "Eq." : toString(item->getQuantity())),
itemX + gridWidth / 2,
diff --git a/src/gui/itemshortcutcontainer.cpp b/src/gui/itemshortcutcontainer.cpp
index 2ea5d584..ac62dbd6 100644
--- a/src/gui/itemshortcutcontainer.cpp
+++ b/src/gui/itemshortcutcontainer.cpp
@@ -75,6 +75,7 @@ ItemShortcutContainer::draw(gcn::Graphics *graphics)
{
Graphics *g = static_cast<Graphics*>(graphics);
+ graphics->setColor(gcn::Color(0, 0, 0));
graphics->setFont(getFont());
for (int i = 0; i < mMaxItems; i++)
diff --git a/src/gui/login.cpp b/src/gui/login.cpp
index 06a5f9f0..db81c683 100644
--- a/src/gui/login.cpp
+++ b/src/gui/login.cpp
@@ -34,46 +34,23 @@
#include "passwordfield.h"
#include "textfield.h"
+#include "widgets/layout.h"
+
+#include "../utils/gettext.h"
+
LoginDialog::LoginDialog(LoginData *loginData):
- Window("Login"), mLoginData(loginData)
+ Window(_("Login")), mLoginData(loginData)
{
- gcn::Label *userLabel = new gcn::Label("Name:");
- gcn::Label *passLabel = new gcn::Label("Password:");
- gcn::Label *serverLabel = new gcn::Label("Server:");
+ gcn::Label *userLabel = new gcn::Label(_("Name:"));
+ gcn::Label *passLabel = new gcn::Label(_("Password:"));
+ gcn::Label *serverLabel = new gcn::Label(_("Server:"));
mUserField = new TextField(mLoginData->username);
mPassField = new PasswordField(mLoginData->password);
mServerField = new TextField(mLoginData->hostname);
- mKeepCheck = new CheckBox("Keep", mLoginData->remember);
- mOkButton = new Button("OK", "ok", this);
- mCancelButton = new Button("Cancel", "cancel", this);
- mRegisterButton = new Button("Register", "register", this);
-
- const int width = 220;
- const int height = 100;
-
- setContentSize(width, height);
-
- userLabel->setPosition(5, 5);
- passLabel->setPosition(5, 14 + userLabel->getHeight());
- serverLabel->setPosition(
- 5, 23 + userLabel->getHeight() + passLabel->getHeight());
- mUserField->setPosition(65, 5);
- mPassField->setPosition(65, 14 + userLabel->getHeight());
- mServerField->setPosition(
- 65, 23 + userLabel->getHeight() + passLabel->getHeight());
- mUserField->setWidth(width - 70);
- mPassField->setWidth(width - 70);
- mServerField->setWidth(width - 70);
- mKeepCheck->setPosition(4, 77);
- mCancelButton->setPosition(
- width - mCancelButton->getWidth() - 5,
- height - mCancelButton->getHeight() - 5);
- mOkButton->setPosition(
- mCancelButton->getX() - mOkButton->getWidth() - 5,
- height - mOkButton->getHeight() - 5);
- mRegisterButton->setPosition(
- mKeepCheck->getX() + mKeepCheck->getWidth() + 10,
- height - mRegisterButton->getHeight() - 5);
+ mKeepCheck = new CheckBox(_("Remember Username"), mLoginData->remember);
+ mOkButton = new Button(_("Ok"), "ok", this);
+ mCancelButton = new Button(_("Cancel"), "cancel", this);
+ mRegisterButton = new Button(_("Register"), "register", this);
mUserField->setActionEventId("ok");
mPassField->setActionEventId("ok");
@@ -87,16 +64,17 @@ LoginDialog::LoginDialog(LoginData *loginData):
mServerField->addActionListener(this);
mKeepCheck->addActionListener(this);
- add(userLabel);
- add(passLabel);
- add(serverLabel);
- add(mUserField);
- add(mPassField);
- add(mServerField);
- add(mKeepCheck);
- add(mOkButton);
- add(mCancelButton);
- add(mRegisterButton);
+ place(0, 0, userLabel);
+ place(0, 1, passLabel);
+ place(0, 2, serverLabel);
+ place(1, 0, mUserField, 3).setPadding(2);
+ place(1, 1, mPassField, 3).setPadding(2);
+ place(1, 2, mServerField, 3).setPadding(2);
+ place(0, 3, mKeepCheck, 4);
+ place(0, 4, mRegisterButton).setHAlign(LayoutCell::LEFT);
+ place(2, 4, mOkButton);
+ place(3, 4, mCancelButton);
+ reflowLayout(250, 0);
setLocationRelativeTo(getParent());
setVisible(true);
@@ -114,8 +92,7 @@ LoginDialog::~LoginDialog()
{
}
-void
-LoginDialog::action(const gcn::ActionEvent &event)
+void LoginDialog::action(const gcn::ActionEvent &event)
{
if (event.getId() == "ok" && canSubmit())
{
@@ -145,14 +122,12 @@ LoginDialog::action(const gcn::ActionEvent &event)
}
}
-void
-LoginDialog::keyPressed(gcn::KeyEvent &keyEvent)
+void LoginDialog::keyPressed(gcn::KeyEvent &keyEvent)
{
mOkButton->setEnabled(canSubmit());
}
-bool
-LoginDialog::canSubmit()
+bool LoginDialog::canSubmit()
{
return !mUserField->getText().empty() &&
!mPassField->getText().empty() &&
diff --git a/src/gui/menuwindow.cpp b/src/gui/menuwindow.cpp
index 3c3e4ab8..0893cb1c 100644
--- a/src/gui/menuwindow.cpp
+++ b/src/gui/menuwindow.cpp
@@ -28,6 +28,8 @@
#include "button.h"
#include "windowcontainer.h"
+#include "../utils/gettext.h"
+
extern Window *setupWindow;
extern Window *inventoryWindow;
extern Window *equipmentWindow;
@@ -54,21 +56,21 @@ MenuWindow::MenuWindow():
setTitleBarHeight(0);
// Buttons
- const char *buttonNames[] =
+ static const char *buttonNames[] =
{
- "Status",
- "Equipment",
- "Inventory",
- "Skills",
- "Shortcut",
- "Setup",
+ N_("Status"),
+ N_("Equipment"),
+ N_("Inventory"),
+ N_("Skills"),
+ N_("Shortcut"),
+ N_("Setup"),
0
};
int x = 0, h = 0;
for (const char **curBtn = buttonNames; *curBtn; curBtn++)
{
- gcn::Button *btn = new Button(*curBtn, *curBtn, &listener);
+ gcn::Button *btn = new Button(gettext(*curBtn), *curBtn, &listener);
btn->setPosition(x, 0);
add(btn);
x += btn->getWidth() + 3;
diff --git a/src/gui/minimap.cpp b/src/gui/minimap.cpp
index 231c749f..55132d6d 100644
--- a/src/gui/minimap.cpp
+++ b/src/gui/minimap.cpp
@@ -28,8 +28,10 @@
#include "../resources/image.h"
+#include "../utils/gettext.h"
+
Minimap::Minimap():
- Window("Map"),
+ Window(_("MiniMap")),
mMapImage(NULL)
{
setWindowName("MiniMap");
diff --git a/src/gui/npc_text.cpp b/src/gui/npc_text.cpp
index 34c9cce1..c9ace303 100644
--- a/src/gui/npc_text.cpp
+++ b/src/gui/npc_text.cpp
@@ -29,8 +29,10 @@
#include "../npc.h"
+#include "../utils/gettext.h"
+
NpcTextDialog::NpcTextDialog():
- Window("NPC")
+ Window(_("NPC"))
{
setResizable(true);
@@ -41,7 +43,7 @@ NpcTextDialog::NpcTextDialog():
mTextBox->setEditable(false);
scrollArea = new ScrollArea(mTextBox);
- okButton = new Button("OK", "ok", this);
+ okButton = new Button(_("OK"), "ok", this);
setContentSize(260, 175);
scrollArea->setHorizontalScrollPolicy(gcn::ScrollArea::SHOW_NEVER);
diff --git a/src/gui/npclistdialog.cpp b/src/gui/npclistdialog.cpp
index cdd38312..bff6994d 100644
--- a/src/gui/npclistdialog.cpp
+++ b/src/gui/npclistdialog.cpp
@@ -29,8 +29,10 @@
#include "../npc.h"
+#include "../utils/gettext.h"
+
NpcListDialog::NpcListDialog():
- Window("NPC")
+ Window(_("NPC"))
{
setResizable(true);
@@ -39,8 +41,8 @@ NpcListDialog::NpcListDialog():
mItemList = new ListBox(this);
scrollArea = new ScrollArea(mItemList);
- okButton = new Button("OK", "ok", this);
- cancelButton = new Button("Cancel", "cancel", this);
+ okButton = new Button(_("OK"), "ok", this);
+ cancelButton = new Button(_("Cancel"), "cancel", this);
setContentSize(260, 175);
scrollArea->setHorizontalScrollPolicy(gcn::ScrollArea::SHOW_NEVER);
diff --git a/src/gui/ok_dialog.cpp b/src/gui/ok_dialog.cpp
index d43c8e69..9db3cd7b 100644
--- a/src/gui/ok_dialog.cpp
+++ b/src/gui/ok_dialog.cpp
@@ -24,6 +24,8 @@
#include "button.h"
#include "scrollarea.h"
+#include "../utils/gettext.h"
+
OkDialog::OkDialog(const std::string &title, const std::string &msg,
Window *parent):
Window(title, true, parent)
@@ -32,7 +34,7 @@ OkDialog::OkDialog(const std::string &title, const std::string &msg,
textBox->setEditable(false);
gcn::ScrollArea *scrollArea = new ScrollArea(textBox);
- gcn::Button *okButton = new Button("Ok", "ok", this);
+ gcn::Button *okButton = new Button(_("Ok"), "ok", this);
setContentSize(260, 175);
scrollArea->setHorizontalScrollPolicy(gcn::ScrollArea::SHOW_NEVER);
diff --git a/src/gui/popupmenu.cpp b/src/gui/popupmenu.cpp
index 07719d2c..1f5b3556 100644
--- a/src/gui/popupmenu.cpp
+++ b/src/gui/popupmenu.cpp
@@ -42,6 +42,9 @@
#include "../resources/iteminfo.h"
#include "../resources/itemdb.h"
+#include "../utils/gettext.h"
+#include "../utils/strprintf.h"
+
extern std::string tradePartnerName;
PopupMenu::PopupMenu():
@@ -52,7 +55,7 @@ PopupMenu::PopupMenu():
{
setResizable(false);
setTitleBarHeight(0);
- mShowTitle = false;
+ setShowTitle(false);
mBrowserBox = new BrowserBox();
mBrowserBox->setPosition(4, 4);
@@ -74,8 +77,10 @@ void PopupMenu::showPopup(int x, int y, Being *being)
// Players can be traded with. Later also attack, follow and
// add as buddy will be options in this menu.
const std::string &name = being->getName();
- mBrowserBox->addRow("@@trade|Trade With " + name + "@@");
- mBrowserBox->addRow("@@attack|Attack " + name + "@@");
+ mBrowserBox->addRow(
+ strprintf(_("@@trade|Trade With %s@@"), name.c_str()));
+ mBrowserBox->addRow(
+ strprintf(_("@@attack|Attack %s@@"), name.c_str()));
mBrowserBox->addRow("##3---");
@@ -106,7 +111,7 @@ void PopupMenu::showPopup(int x, int y, Being *being)
case Being::NPC:
// NPCs can be talked to (single option, candidate for removal
// unless more options would be added)
- mBrowserBox->addRow("@@talk|Talk To NPC@@");
+ mBrowserBox->addRow(_("@@talk|Talk To NPC@@"));
break;
default:
@@ -116,7 +121,7 @@ void PopupMenu::showPopup(int x, int y, Being *being)
//browserBox->addRow("@@look|Look To@@");
mBrowserBox->addRow("##3---");
- mBrowserBox->addRow("@@cancel|Cancel@@");
+ mBrowserBox->addRow(_("@@cancel|Cancel@@"));
showPopup(x, y);
}
@@ -128,11 +133,11 @@ void PopupMenu::showPopup(int x, int y, FloorItem *floorItem)
// Floor item can be picked up (single option, candidate for removal)
std::string name = ItemDB::get(mFloorItem->getItemId()).getName();
- mBrowserBox->addRow("@@pickup|Pick Up " + name + "@@");
+ mBrowserBox->addRow(strprintf(_("@@pickup|Pick Up %s@@"), name.c_str()));
//browserBox->addRow("@@look|Look To@@");
mBrowserBox->addRow("##3---");
- mBrowserBox->addRow("@@cancel|Cancel@@");
+ mBrowserBox->addRow(_("@@cancel|Cancel@@"));
showPopup(x, y);
}
@@ -275,17 +280,17 @@ void PopupMenu::showPopup(int x, int y, Item *item)
if (item->isEquipment())
{
if (item->isEquipped())
- mBrowserBox->addRow("@@use|Unequip@@");
+ mBrowserBox->addRow(_("@@use|Unequip@@"));
else
- mBrowserBox->addRow("@@use|Equip@@");
+ mBrowserBox->addRow(_("@@use|Equip@@"));
}
else
- mBrowserBox->addRow("@@use|Use@@");
+ mBrowserBox->addRow(_("@@use|Use@@"));
- mBrowserBox->addRow("@@drop|Drop@@");
- mBrowserBox->addRow("@@description|Description@@");
+ mBrowserBox->addRow(_("@@drop|Drop@@"));
+ mBrowserBox->addRow(_("@@description|Description@@"));
mBrowserBox->addRow("##3---");
- mBrowserBox->addRow("@@cancel|Cancel@@");
+ mBrowserBox->addRow(_("@@cancel|Cancel@@"));
showPopup(x, y);
}
diff --git a/src/gui/radiobutton.cpp b/src/gui/radiobutton.cpp
index 5f929e62..619ec84f 100644
--- a/src/gui/radiobutton.cpp
+++ b/src/gui/radiobutton.cpp
@@ -81,3 +81,22 @@ void RadioButton::drawBox(gcn::Graphics* graphics)
static_cast<Graphics*>(graphics)->drawImage(box, 2, 2);
}
}
+
+void RadioButton::draw(gcn::Graphics* graphics)
+{
+
+ graphics->pushClipArea(gcn::Rectangle(1,
+ 1,
+ getWidth() - 1,
+ getHeight() - 1));
+
+ drawBox(graphics);
+
+ graphics->popClipArea();
+
+ graphics->setFont(getFont());
+ graphics->setColor(getForegroundColor());
+
+ int h = getHeight() + getHeight() / 2;
+ graphics->drawText(getCaption(), h - 2, 0);
+}
diff --git a/src/gui/radiobutton.h b/src/gui/radiobutton.h
index 6506444f..09f703dc 100644
--- a/src/gui/radiobutton.h
+++ b/src/gui/radiobutton.h
@@ -48,6 +48,12 @@ class RadioButton : public gcn::RadioButton {
*/
void drawBox(gcn::Graphics* graphics);
+ /**
+ * Implementation of the draw methods.
+ * Thus, avoiding the rhomb around the radio button.
+ */
+ void draw(gcn::Graphics* graphics);
+
private:
static int instances;
static Image *radioNormal;
diff --git a/src/gui/register.cpp b/src/gui/register.cpp
index 2a97a3e5..ce36efa2 100644
--- a/src/gui/register.cpp
+++ b/src/gui/register.cpp
@@ -39,6 +39,9 @@
#include "textfield.h"
#include "ok_dialog.h"
+#include "../utils/gettext.h"
+#include "../utils/strprintf.h"
+
void
WrongDataNoticeListener::setTarget(gcn::TextField *textField)
{
@@ -59,18 +62,18 @@ RegisterDialog::RegisterDialog(LoginData *loginData):
mWrongDataNoticeListener(new WrongDataNoticeListener()),
mLoginData(loginData)
{
- gcn::Label *userLabel = new gcn::Label("Name:");
- gcn::Label *passwordLabel = new gcn::Label("Password:");
- gcn::Label *confirmLabel = new gcn::Label("Confirm:");
- gcn::Label *serverLabel = new gcn::Label("Server:");
+ gcn::Label *userLabel = new gcn::Label(_("Name:"));
+ gcn::Label *passwordLabel = new gcn::Label(_("Password:"));
+ gcn::Label *confirmLabel = new gcn::Label(_("Confirm:"));
+ gcn::Label *serverLabel = new gcn::Label(_("Server:"));
mUserField = new TextField(loginData->username);
mPasswordField = new PasswordField(loginData->password);
mConfirmField = new PasswordField();
mServerField = new TextField(loginData->hostname);
- mMaleButton = new RadioButton("Male", "sex", true);
- mFemaleButton = new RadioButton("Female", "sex", false);
- mRegisterButton = new Button("Register", "register", this);
- mCancelButton = new Button("Cancel", "cancel", this);
+ mMaleButton = new RadioButton(_("Male"), "sex", true);
+ mFemaleButton = new RadioButton(_("Female"), "sex", false);
+ mRegisterButton = new Button(_("Register"), "register", this);
+ mCancelButton = new Button(_("Cancel"), "cancel", this);
const int width = 220;
const int height = 150;
@@ -163,45 +166,45 @@ RegisterDialog::action(const gcn::ActionEvent &event)
const std::string user = mUserField->getText();
logger->log("RegisterDialog::register Username is %s", user.c_str());
- std::stringstream errorMsg;
+ std::string errorMsg;
int error = 0;
if (user.length() < LEN_MIN_USERNAME)
{
// Name too short
- errorMsg << "The username needs to be at least "
- << LEN_MIN_USERNAME
- << " characters long.";
+ errorMsg = strprintf
+ (_("The username needs to be at least %d characters long."),
+ LEN_MIN_USERNAME);
error = 1;
}
else if (user.length() > LEN_MAX_USERNAME - 1 )
{
// Name too long
- errorMsg << "The username needs to be less than "
- << LEN_MAX_USERNAME
- << " characters long.";
+ errorMsg = strprintf
+ (_("The username needs to be less than %d characters long."),
+ LEN_MAX_USERNAME);
error = 1;
}
else if (mPasswordField->getText().length() < LEN_MIN_PASSWORD)
{
// Pass too short
- errorMsg << "The password needs to be at least "
- << LEN_MIN_PASSWORD
- << " characters long.";
+ errorMsg = strprintf
+ (_("The password needs to be at least %d characters long."),
+ LEN_MIN_PASSWORD);
error = 2;
}
else if (mPasswordField->getText().length() > LEN_MAX_PASSWORD - 1 )
{
// Pass too long
- errorMsg << "The password needs to be less than "
- << LEN_MAX_PASSWORD
- << " characters long.";
+ errorMsg = strprintf
+ (_("The password needs to be less than %d characters long."),
+ LEN_MAX_PASSWORD);
error = 2;
}
else if (mPasswordField->getText() != mConfirmField->getText())
{
// Password does not match with the confirmation one
- errorMsg << "Passwords do not match.";
+ errorMsg = _("Passwords do not match.");
error = 2;
}
@@ -220,8 +223,8 @@ RegisterDialog::action(const gcn::ActionEvent &event)
mWrongDataNoticeListener->setTarget(this->mPasswordField);
}
- OkDialog *mWrongRegisterNotice = new OkDialog("Error",
- errorMsg.str());
+ OkDialog *mWrongRegisterNotice =
+ new OkDialog(_("Error"), errorMsg);
mWrongRegisterNotice->addActionListener(mWrongDataNoticeListener);
}
else
diff --git a/src/gui/sdlinput.cpp b/src/gui/sdlinput.cpp
new file mode 100644
index 00000000..ee94b2c6
--- /dev/null
+++ b/src/gui/sdlinput.cpp
@@ -0,0 +1,429 @@
+/* _______ __ __ __ ______ __ __ _______ __ __
+ * / _____/\ / /\ / /\ / /\ / ____/\ / /\ / /\ / ___ /\ / |\/ /\
+ * / /\____\// / // / // / // /\___\// /_// / // /\_/ / // , |/ / /
+ * / / /__ / / // / // / // / / / ___ / // ___ / // /| ' / /
+ * / /_// /\ / /_// / // / // /_/_ / / // / // /\_/ / // / | / /
+ * /______/ //______/ //_/ //_____/\ /_/ //_/ //_/ //_/ //_/ /|_/ /
+ * \______\/ \______\/ \_\/ \_____\/ \_\/ \_\/ \_\/ \_\/ \_\/ \_\/
+ *
+ * Copyright (c) 2004, 2005, 2006, 2007 Olof Naessén and Per Larsson
+ * Copyright 2007 The Mana World Development Team
+ *
+ * Js_./
+ * Per Larsson a.k.a finalman _RqZ{a<^_aa
+ * Olof Naessén a.k.a jansem/yakslem _asww7!uY`> )\a//
+ * _Qhm`] _f "'c 1!5m
+ * Visit: http://guichan.darkbits.org )Qk<P ` _: :+' .' "{[
+ * .)j(] .d_/ '-( P . S
+ * License: (BSD) <Td/Z <fP"5(\"??"\a. .L
+ * Redistribution and use in source and _dV>ws?a-?' ._/L #'
+ * binary forms, with or without )4d[#7r, . ' )d`)[
+ * modification, are permitted provided _Q-5'5W..j/?' -?!\)cam'
+ * that the following conditions are met: j<<WP+k/);. _W=j f
+ * 1. Redistributions of source code must .$%w\/]Q . ."' . mj$
+ * retain the above copyright notice, ]E.pYY(Q]>. a J@\
+ * this list of conditions and the j(]1u<sE"L,. . ./^ ]{a
+ * following disclaimer. 4'_uomm\. )L);-4 (3=
+ * 2. Redistributions in binary form must )_]X{Z('a_"a7'<a"a, ]"[
+ * reproduce the above copyright notice, #}<]m7`Za??4,P-"'7. ).m
+ * this list of conditions and the ]d2e)Q(<Q( ?94 b- LQ/
+ * following disclaimer in the <B!</]C)d_, '(<' .f. =C+m
+ * documentation and/or other materials .Z!=J ]e []('-4f _ ) -.)m]'
+ * provided with the distribution. .w[5]' _[ /.)_-"+? _/ <W"
+ * 3. Neither the name of Guichan nor the :$we` _! + _/ . j?
+ * names of its contributors may be used =3)= _f (_yQmWW$#( "
+ * to endorse or promote products derived - W, sQQQQmZQ#Wwa]..
+ * from this software without specific (js, \[QQW$QWW#?!V"".
+ * prior written permission. ]y:.<\.. .
+ * -]n w/ ' [.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT )/ )/ !
+ * HOLDERS AND CONTRIBUTORS "AS IS" AND ANY < (; sac , '
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, ]^ .- %
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF c < r
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR aga< <La
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 5% )P'-3L
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR _bQf` y`..)a
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ,J?4P'.P"_(\?d'.,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES _Pa,)!f/<[]/ ?"
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT _2-..:. .r+_,.. .
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ?a.<%"' " -'.a_ _,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ^
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "sdlinput.h"
+
+#include <guichan/exception.hpp>
+
+SDLInput::SDLInput()
+{
+ mMouseInWindow = true;
+ mMouseDown = false;
+}
+
+bool SDLInput::isKeyQueueEmpty()
+{
+ return mKeyInputQueue.empty();
+}
+
+gcn::KeyInput SDLInput::dequeueKeyInput()
+{
+ gcn::KeyInput keyInput;
+
+ if (mKeyInputQueue.empty())
+ {
+ throw GCN_EXCEPTION("The queue is empty.");
+ }
+
+ keyInput = mKeyInputQueue.front();
+ mKeyInputQueue.pop();
+
+ return keyInput;
+}
+
+bool SDLInput::isMouseQueueEmpty()
+{
+ return mMouseInputQueue.empty();
+}
+
+gcn::MouseInput SDLInput::dequeueMouseInput()
+{
+ gcn::MouseInput mouseInput;
+
+ if (mMouseInputQueue.empty())
+ {
+ throw GCN_EXCEPTION("The queue is empty.");
+ }
+
+ mouseInput = mMouseInputQueue.front();
+ mMouseInputQueue.pop();
+
+ return mouseInput;
+}
+
+void SDLInput::pushInput(SDL_Event event)
+{
+ gcn::KeyInput keyInput;
+ gcn::MouseInput mouseInput;
+
+ switch (event.type)
+ {
+ case SDL_KEYDOWN:
+ keyInput.setKey(gcn::Key(convertKeyCharacter(event)));
+ keyInput.setType(gcn::KeyInput::PRESSED);
+ keyInput.setShiftPressed(event.key.keysym.mod & KMOD_SHIFT);
+ keyInput.setControlPressed(event.key.keysym.mod & KMOD_CTRL);
+ keyInput.setAltPressed(event.key.keysym.mod & KMOD_ALT);
+ keyInput.setMetaPressed(event.key.keysym.mod & KMOD_META);
+ keyInput.setNumericPad(event.key.keysym.sym >= SDLK_KP0
+ && event.key.keysym.sym <= SDLK_KP_EQUALS);
+
+ mKeyInputQueue.push(keyInput);
+ break;
+
+ case SDL_KEYUP:
+ keyInput.setKey(gcn::Key(convertKeyCharacter(event)));
+ keyInput.setType(gcn::KeyInput::RELEASED);
+ keyInput.setShiftPressed(event.key.keysym.mod & KMOD_SHIFT);
+ keyInput.setControlPressed(event.key.keysym.mod & KMOD_CTRL);
+ keyInput.setAltPressed(event.key.keysym.mod & KMOD_ALT);
+ keyInput.setMetaPressed(event.key.keysym.mod & KMOD_META);
+ keyInput.setNumericPad(event.key.keysym.sym >= SDLK_KP0
+ && event.key.keysym.sym <= SDLK_KP_EQUALS);
+
+ mKeyInputQueue.push(keyInput);
+ break;
+
+ case SDL_MOUSEBUTTONDOWN:
+ mMouseDown = true;
+ mouseInput.setX(event.button.x);
+ mouseInput.setY(event.button.y);
+ mouseInput.setButton(convertMouseButton(event.button.button));
+
+ if (event.button.button == SDL_BUTTON_WHEELDOWN)
+ {
+ mouseInput.setType(gcn::MouseInput::WHEEL_MOVED_DOWN);
+ }
+ else if (event.button.button == SDL_BUTTON_WHEELUP)
+ {
+ mouseInput.setType(gcn::MouseInput::WHEEL_MOVED_UP);
+ }
+ else
+ {
+ mouseInput.setType(gcn::MouseInput::PRESSED);
+ }
+ mouseInput.setTimeStamp(SDL_GetTicks());
+ mMouseInputQueue.push(mouseInput);
+ break;
+
+ case SDL_MOUSEBUTTONUP:
+ mMouseDown = false;
+ mouseInput.setX(event.button.x);
+ mouseInput.setY(event.button.y);
+ mouseInput.setButton(convertMouseButton(event.button.button));
+ mouseInput.setType(gcn::MouseInput::RELEASED);
+ mouseInput.setTimeStamp(SDL_GetTicks());
+ mMouseInputQueue.push(mouseInput);
+ break;
+
+ case SDL_MOUSEMOTION:
+ mouseInput.setX(event.button.x);
+ mouseInput.setY(event.button.y);
+ mouseInput.setButton(gcn::MouseInput::EMPTY);
+ mouseInput.setType(gcn::MouseInput::MOVED);
+ mouseInput.setTimeStamp(SDL_GetTicks());
+ mMouseInputQueue.push(mouseInput);
+ break;
+
+ case SDL_ACTIVEEVENT:
+ /*
+ * This occurs when the mouse leaves the window and the Gui-chan
+ * application loses its mousefocus.
+ */
+ if ((event.active.state & SDL_APPMOUSEFOCUS)
+ && !event.active.gain)
+ {
+ mMouseInWindow = false;
+
+ if (!mMouseDown)
+ {
+ mouseInput.setX(-1);
+ mouseInput.setY(-1);
+ mouseInput.setButton(gcn::MouseInput::EMPTY);
+ mouseInput.setType(gcn::MouseInput::MOVED);
+ mMouseInputQueue.push(mouseInput);
+ }
+ }
+
+ if ((event.active.state & SDL_APPMOUSEFOCUS)
+ && event.active.gain)
+ {
+ mMouseInWindow = true;
+ }
+ break;
+
+ } // end switch
+}
+
+int SDLInput::convertMouseButton(int button)
+{
+ switch (button)
+ {
+ case SDL_BUTTON_LEFT:
+ return gcn::MouseInput::LEFT;
+ case SDL_BUTTON_RIGHT:
+ return gcn::MouseInput::RIGHT;
+ case SDL_BUTTON_MIDDLE:
+ return gcn::MouseInput::MIDDLE;
+ default:
+ // We have an unknown mouse type which is ignored.
+ return button;
+ }
+}
+
+int SDLInput::convertKeyCharacter(SDL_Event event)
+{
+ SDL_keysym keysym = event.key.keysym;
+
+ int value = keysym.unicode;
+
+ switch (keysym.sym)
+ {
+ case SDLK_TAB:
+ value = Key::TAB;
+ break;
+ case SDLK_LALT:
+ value = Key::LEFT_ALT;
+ break;
+ case SDLK_RALT:
+ value = Key::RIGHT_ALT;
+ break;
+ case SDLK_LSHIFT:
+ value = Key::LEFT_SHIFT;
+ break;
+ case SDLK_RSHIFT:
+ value = Key::RIGHT_SHIFT;
+ break;
+ case SDLK_LCTRL:
+ value = Key::LEFT_CONTROL;
+ break;
+ case SDLK_RCTRL:
+ value = Key::RIGHT_CONTROL;
+ break;
+ case SDLK_BACKSPACE:
+ value = Key::BACKSPACE;
+ break;
+ case SDLK_PAUSE:
+ value = Key::PAUSE;
+ break;
+ case SDLK_SPACE:
+ // Special characters like ~ (tilde) ends up
+ // with the keysym.sym SDLK_SPACE which
+ // without this check would be lost. The check
+ // is only valid on key down events in SDL.
+ if (event.type == SDL_KEYUP || keysym.unicode == ' ')
+ {
+ value = Key::SPACE;
+ }
+ break;
+ case SDLK_ESCAPE:
+ value = Key::ESCAPE;
+ break;
+ case SDLK_DELETE:
+ value = Key::DELETE;
+ break;
+ case SDLK_INSERT:
+ value = Key::INSERT;
+ break;
+ case SDLK_HOME:
+ value = Key::HOME;
+ break;
+ case SDLK_END:
+ value = Key::END;
+ break;
+ case SDLK_PAGEUP:
+ value = Key::PAGE_UP;
+ break;
+ case SDLK_PRINT:
+ value = Key::PRINT_SCREEN;
+ break;
+ case SDLK_PAGEDOWN:
+ value = Key::PAGE_DOWN;
+ break;
+ case SDLK_F1:
+ value = Key::F1;
+ break;
+ case SDLK_F2:
+ value = Key::F2;
+ break;
+ case SDLK_F3:
+ value = Key::F3;
+ break;
+ case SDLK_F4:
+ value = Key::F4;
+ break;
+ case SDLK_F5:
+ value = Key::F5;
+ break;
+ case SDLK_F6:
+ value = Key::F6;
+ break;
+ case SDLK_F7:
+ value = Key::F7;
+ break;
+ case SDLK_F8:
+ value = Key::F8;
+ break;
+ case SDLK_F9:
+ value = Key::F9;
+ break;
+ case SDLK_F10:
+ value = Key::F10;
+ break;
+ case SDLK_F11:
+ value = Key::F11;
+ break;
+ case SDLK_F12:
+ value = Key::F12;
+ break;
+ case SDLK_F13:
+ value = Key::F13;
+ break;
+ case SDLK_F14:
+ value = Key::F14;
+ break;
+ case SDLK_F15:
+ value = Key::F15;
+ break;
+ case SDLK_NUMLOCK:
+ value = Key::NUM_LOCK;
+ break;
+ case SDLK_CAPSLOCK:
+ value = Key::CAPS_LOCK;
+ break;
+ case SDLK_SCROLLOCK:
+ value = Key::SCROLL_LOCK;
+ break;
+ case SDLK_RMETA:
+ value = Key::RIGHT_META;
+ break;
+ case SDLK_LMETA:
+ value = Key::LEFT_META;
+ break;
+ case SDLK_LSUPER:
+ value = Key::LEFT_SUPER;
+ break;
+ case SDLK_RSUPER:
+ value = Key::RIGHT_SUPER;
+ break;
+ case SDLK_MODE:
+ value = Key::ALT_GR;
+ break;
+ case SDLK_UP:
+ value = Key::UP;
+ break;
+ case SDLK_DOWN:
+ value = Key::DOWN;
+ break;
+ case SDLK_LEFT:
+ value = Key::LEFT;
+ break;
+ case SDLK_RIGHT:
+ value = Key::RIGHT;
+ break;
+ case SDLK_RETURN:
+ value = Key::ENTER;
+ break;
+ case SDLK_KP_ENTER:
+ value = Key::ENTER;
+ break;
+
+ default:
+ break;
+ }
+
+ if (!(keysym.mod & KMOD_NUM))
+ {
+ switch (keysym.sym)
+ {
+ case SDLK_KP0:
+ value = Key::INSERT;
+ break;
+ case SDLK_KP1:
+ value = Key::END;
+ break;
+ case SDLK_KP2:
+ value = Key::DOWN;
+ break;
+ case SDLK_KP3:
+ value = Key::PAGE_DOWN;
+ break;
+ case SDLK_KP4:
+ value = Key::LEFT;
+ break;
+ case SDLK_KP5:
+ value = 0;
+ break;
+ case SDLK_KP6:
+ value = Key::RIGHT;
+ break;
+ case SDLK_KP7:
+ value = Key::HOME;
+ break;
+ case SDLK_KP8:
+ value = Key::UP;
+ break;
+ case SDLK_KP9:
+ value = Key::PAGE_UP;
+ break;
+ default:
+ break;
+ }
+ }
+
+ return value;
+}
diff --git a/src/gui/sdlinput.h b/src/gui/sdlinput.h
new file mode 100644
index 00000000..72d949e1
--- /dev/null
+++ b/src/gui/sdlinput.h
@@ -0,0 +1,188 @@
+/* _______ __ __ __ ______ __ __ _______ __ __
+ * / _____/\ / /\ / /\ / /\ / ____/\ / /\ / /\ / ___ /\ / |\/ /\
+ * / /\____\// / // / // / // /\___\// /_// / // /\_/ / // , |/ / /
+ * / / /__ / / // / // / // / / / ___ / // ___ / // /| ' / /
+ * / /_// /\ / /_// / // / // /_/_ / / // / // /\_/ / // / | / /
+ * /______/ //______/ //_/ //_____/\ /_/ //_/ //_/ //_/ //_/ /|_/ /
+ * \______\/ \______\/ \_\/ \_____\/ \_\/ \_\/ \_\/ \_\/ \_\/ \_\/
+ *
+ * Copyright (c) 2004, 2005, 2006, 2007 Olof Naessén and Per Larsson
+ * Copyright 2007 The Mana World Development Team
+ *
+ * Js_./
+ * Per Larsson a.k.a finalman _RqZ{a<^_aa
+ * Olof Naessén a.k.a jansem/yakslem _asww7!uY`> )\a//
+ * _Qhm`] _f "'c 1!5m
+ * Visit: http://guichan.darkbits.org )Qk<P ` _: :+' .' "{[
+ * .)j(] .d_/ '-( P . S
+ * License: (BSD) <Td/Z <fP"5(\"??"\a. .L
+ * Redistribution and use in source and _dV>ws?a-?' ._/L #'
+ * binary forms, with or without )4d[#7r, . ' )d`)[
+ * modification, are permitted provided _Q-5'5W..j/?' -?!\)cam'
+ * that the following conditions are met: j<<WP+k/);. _W=j f
+ * 1. Redistributions of source code must .$%w\/]Q . ."' . mj$
+ * retain the above copyright notice, ]E.pYY(Q]>. a J@\
+ * this list of conditions and the j(]1u<sE"L,. . ./^ ]{a
+ * following disclaimer. 4'_uomm\. )L);-4 (3=
+ * 2. Redistributions in binary form must )_]X{Z('a_"a7'<a"a, ]"[
+ * reproduce the above copyright notice, #}<]m7`Za??4,P-"'7. ).m
+ * this list of conditions and the ]d2e)Q(<Q( ?94 b- LQ/
+ * following disclaimer in the <B!</]C)d_, '(<' .f. =C+m
+ * documentation and/or other materials .Z!=J ]e []('-4f _ ) -.)m]'
+ * provided with the distribution. .w[5]' _[ /.)_-"+? _/ <W"
+ * 3. Neither the name of Guichan nor the :$we` _! + _/ . j?
+ * names of its contributors may be used =3)= _f (_yQmWW$#( "
+ * to endorse or promote products derived - W, sQQQQmZQ#Wwa]..
+ * from this software without specific (js, \[QQW$QWW#?!V"".
+ * prior written permission. ]y:.<\.. .
+ * -]n w/ ' [.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT )/ )/ !
+ * HOLDERS AND CONTRIBUTORS "AS IS" AND ANY < (; sac , '
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, ]^ .- %
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF c < r
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR aga< <La
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 5% )P'-3L
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR _bQf` y`..)a
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ,J?4P'.P"_(\?d'.,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES _Pa,)!f/<[]/ ?"
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT _2-..:. .r+_,.. .
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ?a.<%"' " -'.a_ _,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ^
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _TMW_SDLINPUT_
+#define _TMW_SDLINPUT_
+
+#include <queue>
+
+#include <SDL/SDL.h>
+
+#include <guichan/input.hpp>
+#include <guichan/keyinput.hpp>
+#include <guichan/mouseinput.hpp>
+#include <guichan/platform.hpp>
+
+namespace Key
+{
+ enum
+ {
+ SPACE = ' ',
+ TAB = '\t',
+ ENTER = '\n',
+ // Negative values, to avoid conflicts with higher character codes.
+ LEFT_ALT = -1000,
+ RIGHT_ALT,
+ LEFT_SHIFT,
+ RIGHT_SHIFT,
+ LEFT_CONTROL,
+ RIGHT_CONTROL,
+ LEFT_META,
+ RIGHT_META,
+ LEFT_SUPER,
+ RIGHT_SUPER,
+ INSERT,
+ HOME,
+ PAGE_UP,
+ DELETE,
+ END,
+ PAGE_DOWN,
+ ESCAPE,
+ CAPS_LOCK,
+ BACKSPACE,
+ F1,
+ F2,
+ F3,
+ F4,
+ F5,
+ F6,
+ F7,
+ F8,
+ F9,
+ F10,
+ F11,
+ F12,
+ F13,
+ F14,
+ F15,
+ PRINT_SCREEN,
+ SCROLL_LOCK,
+ PAUSE,
+ NUM_LOCK,
+ ALT_GR,
+ LEFT,
+ RIGHT,
+ UP,
+ DOWN
+ };
+}
+
+/**
+ * SDL implementation of Input.
+ */
+class SDLInput : public gcn::Input
+{
+public:
+
+ /**
+ * Constructor.
+ */
+ SDLInput();
+
+ /**
+ * Pushes an SDL event. It should be called at least once per frame to
+ * update input with user input.
+ *
+ * @param event an event from SDL.
+ */
+ virtual void pushInput(SDL_Event event);
+
+ /**
+ * Polls all input. It exists for input driver compatibility. If you
+ * only use SDL and plan sticking with SDL you can safely ignore this
+ * function as it in the SDL case does nothing.
+ */
+ virtual void _pollInput() { }
+
+
+ // Inherited from Input
+
+ virtual bool isKeyQueueEmpty();
+
+ virtual gcn::KeyInput dequeueKeyInput();
+
+ virtual bool isMouseQueueEmpty();
+
+ virtual gcn::MouseInput dequeueMouseInput();
+
+protected:
+ /**
+ * Converts a mouse button from SDL to a Guichan mouse button
+ * representation.
+ *
+ * @param button an SDL mouse button.
+ * @return a Guichan mouse button.
+ */
+ int convertMouseButton(int button);
+
+ /**
+ * Converts an SDL event key to a key value.
+ *
+ * @param event an SDL event with a key to convert.
+ * @return a key value.
+ * @see Key
+ */
+ int convertKeyCharacter(SDL_Event event);
+
+ std::queue<gcn::KeyInput> mKeyInputQueue;
+ std::queue<gcn::MouseInput> mMouseInputQueue;
+
+ bool mMouseDown;
+ bool mMouseInWindow;
+};
+
+#endif
diff --git a/src/gui/sell.cpp b/src/gui/sell.cpp
index 6df1cbf6..f7f66345 100644
--- a/src/gui/sell.cpp
+++ b/src/gui/sell.cpp
@@ -31,6 +31,8 @@
#include "shop.h"
#include "slider.h"
+#include "widgets/layout.h"
+
#include "../item.h"
#include "../npc.h"
@@ -39,10 +41,11 @@
#include "../net/messageout.h"
#include "../net/protocol.h"
-#include "../utils/tostring.h"
+#include "../utils/gettext.h"
+#include "../utils/strprintf.h"
SellDialog::SellDialog(Network *network):
- Window("Sell"),
+ Window(_("Sell")),
mNetwork(network),
mMaxItems(0), mAmountItems(0)
{
@@ -58,17 +61,17 @@ SellDialog::SellDialog(Network *network):
mScrollArea = new ScrollArea(mShopItemList);
mSlider = new Slider(1.0);
mQuantityLabel = new gcn::Label("0");
- mMoneyLabel = new gcn::Label("Money: 0 GP / Total: 0 GP");
+ mMoneyLabel = new gcn::Label(
+ strprintf(_("Price: %d GP / Total: %d GP"), 0, 0));
mIncreaseButton = new Button("+", "+", this);
mDecreaseButton = new Button("-", "-", this);
- mSellButton = new Button("Sell", "sell", this);
- mQuitButton = new Button("Quit", "quit", this);
- mItemDescLabel = new gcn::Label("Description:");
- mItemEffectLabel = new gcn::Label("Effect:");
+ mSellButton = new Button(_("Sell"), "sell", this);
+ mQuitButton = new Button(_("Quit"), "quit", this);
+ mItemDescLabel = new gcn::Label(strprintf(_("Description: %s"), ""));
+ mItemEffectLabel = new gcn::Label(strprintf(_("Effect: %s"), ""));
mIncreaseButton->setSize(20, 20);
mDecreaseButton->setSize(20, 20);
- mQuantityLabel->setWidth(60);
mScrollArea->setHorizontalScrollPolicy(gcn::ScrollArea::SHOW_NEVER);
mIncreaseButton->setEnabled(false);
@@ -77,23 +80,22 @@ SellDialog::SellDialog(Network *network):
mSlider->setEnabled(false);
mShopItemList->setPriceCheck(false);
- mShopItemList->setActionEventId("item");
- mSlider->setActionEventId("slider");
-
- mShopItemList->addActionListener(this);
mShopItemList->addSelectionListener(this);
+ mSlider->setActionEventId("slider");
mSlider->addActionListener(this);
- add(mScrollArea);
- add(mSlider);
- add(mQuantityLabel);
- add(mMoneyLabel);
- add(mItemEffectLabel);
- add(mItemDescLabel);
- add(mIncreaseButton);
- add(mDecreaseButton);
- add(mSellButton);
- add(mQuitButton);
+ place(0, 0, mScrollArea, 5).setPadding(3);
+ place(0, 1, mQuantityLabel, 2);
+ place(2, 1, mSlider, 3);
+ place(0, 2, mMoneyLabel, 5);
+ place(0, 3, mItemEffectLabel, 5);
+ place(0, 4, mItemDescLabel, 5);
+ place(0, 5, mDecreaseButton);
+ place(1, 5, mIncreaseButton);
+ place(3, 5, mSellButton);
+ place(4, 5, mQuitButton);
+ Layout &layout = getLayout();
+ layout.setRowHeight(0, Layout::AUTO_SET);
loadWindowState();
setLocationRelativeTo(getParent());
@@ -210,65 +212,25 @@ void SellDialog::valueChanged(const gcn::SelectionEvent &event)
mSlider->gcn::Slider::setScale(1, mMaxItems);
}
-void SellDialog::widgetResized(const gcn::Event &event)
-{
- Window::widgetResized(event);
-
- gcn::Rectangle area = getChildrenArea();
- int width = area.width;
- int height = area.height;
-
- mDecreaseButton->setPosition(8, height - 8 - mDecreaseButton->getHeight());
- mIncreaseButton->setPosition(
- mDecreaseButton->getX() + mDecreaseButton->getWidth() + 5,
- mDecreaseButton->getY());
-
- mQuitButton->setPosition(
- width - 8 - mQuitButton->getWidth(),
- height - 8 - mQuitButton->getHeight());
- mSellButton->setPosition(
- mQuitButton->getX() - 5 - mSellButton->getWidth(),
- mQuitButton->getY());
-
- mItemDescLabel->setDimension(gcn::Rectangle(8,
- mSellButton->getY() - 5 - mItemDescLabel->getHeight(),
- width - 16,
- mItemDescLabel->getHeight()));
- mItemEffectLabel->setDimension(gcn::Rectangle(8,
- mItemDescLabel->getY() - 5 - mItemEffectLabel->getHeight(),
- width - 16,
- mItemEffectLabel->getHeight()));
- mMoneyLabel->setDimension(gcn::Rectangle(8,
- mItemEffectLabel->getY() - 5 - mMoneyLabel->getHeight(),
- width - 16,
- mMoneyLabel->getHeight()));
-
- mQuantityLabel->setPosition(
- width - mQuantityLabel->getWidth() - 8,
- mMoneyLabel->getY() - 5 - mQuantityLabel->getHeight());
- mSlider->setDimension(gcn::Rectangle(8,
- mQuantityLabel->getY(),
- mQuantityLabel->getX() - 8 - 8,
- 10));
-
- mScrollArea->setDimension(gcn::Rectangle(8, 8, width - 16,
- mSlider->getY() - 5 - 8));
-}
-
void SellDialog::setMoney(int amount)
{
mPlayerMoney = amount;
mShopItemList->setPlayersMoney(amount);
}
-void
-SellDialog::updateButtonsAndLabels()
+void SellDialog::updateButtonsAndLabels()
{
int selectedItem = mShopItemList->getSelected();
int income = 0;
if (selectedItem > -1)
{
+ const ItemInfo &info = mShopItems->at(selectedItem)->getInfo();
+ mItemDescLabel->setCaption
+ (strprintf(_("Description: %s"), info.getDescription().c_str()));
+ mItemEffectLabel->setCaption
+ (strprintf(_("Effect: %s"), info.getEffect().c_str()));
+
mMaxItems = mShopItems->at(selectedItem)->getQuantity();
if (mAmountItems > mMaxItems)
{
@@ -276,17 +238,13 @@ SellDialog::updateButtonsAndLabels()
}
income = mAmountItems * mShopItems->at(selectedItem)->getPrice();
-
- const ItemInfo &info = mShopItems->at(selectedItem)->getInfo();
- mItemDescLabel->setCaption("Description: " + info.getDescription());
- mItemEffectLabel->setCaption("Effect: " + info.getEffect());
}
else
{
+ mItemDescLabel->setCaption(strprintf(_("Description: %s"), ""));
+ mItemEffectLabel->setCaption(strprintf(_("Effect: %s"), ""));
mMaxItems = 0;
mAmountItems = 0;
- mItemDescLabel->setCaption("Description:");
- mItemEffectLabel->setCaption("Effect:");
}
// Update Buttons and slider
@@ -296,8 +254,8 @@ SellDialog::updateButtonsAndLabels()
mSlider->setEnabled(mMaxItems > 1);
// Update the quantity and money labels
- mQuantityLabel->setCaption(
- toString(mAmountItems) + " / " + toString(mMaxItems));
- mMoneyLabel->setCaption("Money: " + toString(income) + " GP / Total: "
- + toString(mPlayerMoney + income) + " GP");
+ mQuantityLabel->setCaption(strprintf("%d / %d", mAmountItems, mMaxItems));
+ mMoneyLabel->setCaption
+ (strprintf(_("Price: %d GP / Total: %d GP"),
+ income, mPlayerMoney + income));
}
diff --git a/src/gui/sell.h b/src/gui/sell.h
index 48961efc..0bf8b5a6 100644
--- a/src/gui/sell.h
+++ b/src/gui/sell.h
@@ -77,11 +77,6 @@ class SellDialog : public Window, gcn::ActionListener, gcn::SelectionListener
void valueChanged(const gcn::SelectionEvent &event);
/**
- * Called whenever the widget changes size.
- */
- void widgetResized(const gcn::Event &event);
-
- /**
* Gives Player's Money amount
*/
void setMoney(int amount);
diff --git a/src/gui/setup.cpp b/src/gui/setup.cpp
index 2da9d1b5..067d8d64 100644
--- a/src/gui/setup.cpp
+++ b/src/gui/setup.cpp
@@ -32,6 +32,8 @@
#include "tabbedcontainer.h"
#include "../utils/dtor.h"
+#include "../utils/gettext.h"
+
#include <iostream>
extern Window *statusWindow;
@@ -52,12 +54,12 @@ Setup::Setup():
int height = 265;
setContentSize(width, height);
- const char *buttonNames[] = {
- "Apply", "Cancel", "Reset Windows", 0
+ static const char *buttonNames[] = {
+ N_("Apply"), N_("Cancel"), N_("Reset Windows"), 0
};
int x = width;
for (const char **curBtn = buttonNames; *curBtn; ++curBtn) {
- Button *btn = new Button(*curBtn, *curBtn, this);
+ Button *btn = new Button(gettext(*curBtn), *curBtn, this);
x -= btn->getWidth() + 5;
btn->setPosition(x, height - btn->getHeight() - 5);
add(btn);
@@ -74,23 +76,23 @@ Setup::Setup():
SetupTab *tab;
tab = new Setup_Video();
- panel->addTab(tab, "Video");
+ panel->addTab(tab, _("Video"));
mTabs.push_back(tab);
tab = new Setup_Audio();
- panel->addTab(tab, "Audio");
+ panel->addTab(tab, _("Audio"));
mTabs.push_back(tab);
tab = new Setup_Joystick();
- panel->addTab(tab, "Joystick");
+ panel->addTab(tab, _("Joystick"));
mTabs.push_back(tab);
tab = new Setup_Keyboard();
- panel->addTab(tab, "Keyboard");
+ panel->addTab(tab, _("Keyboard"));
mTabs.push_back(tab);
tab = new Setup_Players();
- panel->addTab(tab, "Players");
+ panel->addTab(tab, _("Players"));
mTabs.push_back(tab);
add(panel);
diff --git a/src/gui/setup_audio.cpp b/src/gui/setup_audio.cpp
index a027e133..c595edc9 100644
--- a/src/gui/setup_audio.cpp
+++ b/src/gui/setup_audio.cpp
@@ -31,18 +31,20 @@
#include "../log.h"
#include "../sound.h"
+#include "../utils/gettext.h"
+
Setup_Audio::Setup_Audio():
mMusicVolume((int)config.getValue("musicVolume", 60)),
mSfxVolume((int)config.getValue("sfxVolume", 100)),
mSoundEnabled(config.getValue("sound", 0)),
- mSoundCheckBox(new CheckBox("Sound", mSoundEnabled)),
+ mSoundCheckBox(new CheckBox(_("Sound"), mSoundEnabled)),
mSfxSlider(new Slider(0, 128)),
mMusicSlider(new Slider(0, 128))
{
setOpaque(false);
- gcn::Label *sfxLabel = new gcn::Label("Sfx volume");
- gcn::Label *musicLabel = new gcn::Label("Music volume");
+ gcn::Label *sfxLabel = new gcn::Label(_("Sfx volume"));
+ gcn::Label *musicLabel = new gcn::Label(_("Music volume"));
mSfxSlider->setActionEventId("sfx");
mMusicSlider->setActionEventId("music");
diff --git a/src/gui/setup_joystick.cpp b/src/gui/setup_joystick.cpp
index c59068f7..a718f87e 100644
--- a/src/gui/setup_joystick.cpp
+++ b/src/gui/setup_joystick.cpp
@@ -28,12 +28,14 @@
#include "../configuration.h"
#include "../joystick.h"
+#include "../utils/gettext.h"
+
extern Joystick *joystick;
Setup_Joystick::Setup_Joystick():
- mCalibrateLabel(new gcn::Label("Press the button to start calibration")),
- mCalibrateButton(new Button("Calibrate", "calibrate", this)),
- mJoystickEnabled(new CheckBox("Enable joystick"))
+ mCalibrateLabel(new gcn::Label(_("Press the button to start calibration"))),
+ mCalibrateButton(new Button(_("Calibrate"), "calibrate", this)),
+ mJoystickEnabled(new CheckBox(_("Enable joystick")))
{
setOpaque(false);
mJoystickEnabled->setPosition(10, 10);
@@ -63,13 +65,13 @@ void Setup_Joystick::action(const gcn::ActionEvent &event)
else
{
if (joystick->isCalibrating()) {
- mCalibrateButton->setCaption("Calibrate");
- mCalibrateLabel->setCaption(
- "Press the button to start calibration");
+ mCalibrateButton->setCaption(_("Calibrate"));
+ mCalibrateLabel->setCaption
+ (_("Press the button to start calibration"));
joystick->finishCalibration();
} else {
- mCalibrateButton->setCaption("Stop");
- mCalibrateLabel->setCaption("Rotate the stick");
+ mCalibrateButton->setCaption(_("Stop"));
+ mCalibrateLabel->setCaption(_("Rotate the stick"));
joystick->startCalibration();
}
}
diff --git a/src/gui/setup_keyboard.cpp b/src/gui/setup_keyboard.cpp
index c6247487..de3c0ce1 100644
--- a/src/gui/setup_keyboard.cpp
+++ b/src/gui/setup_keyboard.cpp
@@ -32,6 +32,7 @@
#include "../configuration.h"
#include "../keyboardconfig.h"
+#include "../utils/gettext.h"
#include "../utils/tostring.h"
#include <SDL_keyboard.h>
@@ -84,13 +85,13 @@ Setup_Keyboard::Setup_Keyboard():
scrollArea->setDimension(gcn::Rectangle(10, 10, 200, 140));
add(scrollArea);
- mAssignKeyButton = new Button("Assign", "assign", this);
+ mAssignKeyButton = new Button(_("Assign"), "assign", this);
mAssignKeyButton->setPosition(165, 155);
mAssignKeyButton->addActionListener(this);
mAssignKeyButton->setEnabled(false);
add(mAssignKeyButton);
- mMakeDefaultButton = new Button("Default", "makeDefault", this);
+ mMakeDefaultButton = new Button(_("Default"), "makeDefault", this);
mMakeDefaultButton->setPosition(10, 155);
mMakeDefaultButton->addActionListener(this);
add(mMakeDefaultButton);
@@ -111,8 +112,9 @@ void Setup_Keyboard::apply()
if (keyboard.hasConflicts())
{
- new OkDialog("Key Conflict(s) Detected.",
- "Resolve them, or gameplay may result in strange behaviour.");
+ new OkDialog(_("Key Conflict(s) Detected."),
+ _("Resolve them, or gameplay may result in strange "
+ "behaviour."));
}
keyboard.setEnabled(true);
keyboard.store();
@@ -170,7 +172,7 @@ void Setup_Keyboard::newKeyCallback(int index)
void Setup_Keyboard::refreshKeys()
{
- for(int i = 0; i < keyboard.KEY_TOTAL; i++)
+ for (int i = 0; i < keyboard.KEY_TOTAL; i++)
{
refreshAssignedKey(i);
}
diff --git a/src/gui/setup_players.cpp b/src/gui/setup_players.cpp
index c556a82d..122f54e1 100644
--- a/src/gui/setup_players.cpp
+++ b/src/gui/setup_players.cpp
@@ -30,6 +30,8 @@
#include "../log.h"
#include "../sound.h"
+#include "../utils/gettext.h"
+
#include <guichan/widgets/dropdown.hpp>
#include <guichan/widgets/label.hpp>
@@ -47,10 +49,16 @@
#define WIDGET_AT(row, column) (((row) * COLUMNS_NR) + column)
-static std::string table_titles[COLUMNS_NR] = {"name", "relation"};
+static const char *table_titles[COLUMNS_NR] = {
+ N_("Name"),
+ N_("Relation")
+};
-static const std::string RELATION_NAMES[PlayerRelation::RELATIONS_NR] = {
- "neutral", "friend", "disregarded", "ignored"
+static const char *RELATION_NAMES[PlayerRelation::RELATIONS_NR] = {
+ N_("Neutral"),
+ N_("Friend"),
+ N_("Disregarded"),
+ N_("Ignored")
};
class PlayerRelationListModel : public gcn::ListModel
@@ -67,7 +75,7 @@ public:
{
if (i >= getNumberOfElements() || i < 0)
return "";
- return RELATION_NAMES[i];
+ return gettext(RELATION_NAMES[i]);
}
};
@@ -136,7 +144,8 @@ public:
virtual void updateModelInRow(int row)
{
- gcn::DropDown *choicebox = dynamic_cast<gcn::DropDown *>(getElementAt(row, RELATION_CHOICE_COLUMN));
+ gcn::DropDown *choicebox = dynamic_cast<gcn::DropDown *>(
+ getElementAt(row, RELATION_CHOICE_COLUMN));
player_relations.setRelation(getPlayerAt(row),
static_cast<PlayerRelation::relation>(choicebox->getSelected()));
}
@@ -202,21 +211,27 @@ Setup_Players::Setup_Players():
mPlayerTable(new GuiTable(mPlayerTableModel)),
mPlayerTitleTable(new GuiTable(mPlayerTableTitleModel)),
mPlayerScrollArea(new ScrollArea(mPlayerTable)),
- mPersistIgnores(new CheckBox("save player list", player_relations.getPersistIgnores())),
- mDefaultTrading(new CheckBox("allow trading", player_relations.getDefault() & PlayerRelation::TRADE)),
- mDefaultWhisper(new CheckBox("allow whispers", player_relations.getDefault() & PlayerRelation::WHISPER)),
- mDeleteButton(new Button("Delete", ACTION_DELETE, this)),
+ mPersistIgnores(new CheckBox(_("Save player list"),
+ player_relations.getPersistIgnores())),
+ mDefaultTrading(new CheckBox(_("Allow trading"),
+ player_relations.getDefault() & PlayerRelation::TRADE)),
+ mDefaultWhisper(new CheckBox(_("Allow whispers"),
+ player_relations.getDefault() & PlayerRelation::WHISPER)),
+ mDeleteButton(new Button(_("Delete"), ACTION_DELETE, this)),
mIgnoreActionChoicesBox(new gcn::DropDown(new IgnoreChoicesListModel()))
{
setOpaque(false);
int table_width = NAME_COLUMN_WIDTH + RELATION_CHOICE_COLUMN_WIDTH;
mPlayerTableTitleModel->fixColumnWidth(NAME_COLUMN, NAME_COLUMN_WIDTH);
- mPlayerTableTitleModel->fixColumnWidth(RELATION_CHOICE_COLUMN, RELATION_CHOICE_COLUMN_WIDTH);
+ mPlayerTableTitleModel->fixColumnWidth(RELATION_CHOICE_COLUMN,
+ RELATION_CHOICE_COLUMN_WIDTH);
mPlayerTitleTable->setDimension(gcn::Rectangle(10, 10, table_width, 10));
mPlayerTitleTable->setBackgroundColor(gcn::Color(0xbf, 0xbf, 0xbf));
- for (int i = 0; i < COLUMNS_NR; i++)
- mPlayerTableTitleModel->set(0, i, new gcn::Label(table_titles[i]));
+ for (int i = 0; i < COLUMNS_NR; i++) {
+ mPlayerTableTitleModel->set(0, i,
+ new gcn::Label(gettext(table_titles[i])));
+ }
mPlayerTitleTable->setLinewiseSelection(true);
mPlayerScrollArea->setDimension(gcn::Rectangle(10, 25, table_width + COLUMNS_NR, 90));
@@ -227,7 +242,7 @@ Setup_Players::Setup_Players():
mDeleteButton->setPosition(10, 118);
- gcn::Label *ignore_action_label = new gcn::Label("When ignoring:");
+ gcn::Label *ignore_action_label = new gcn::Label(_("When ignoring:"));
ignore_action_label->setPosition(80, 118);
mIgnoreActionChoicesBox->setDimension(gcn::Rectangle(80, 132, 120, 12));
@@ -269,9 +284,9 @@ Setup_Players::~Setup_Players()
void Setup_Players::reset()
{
- // We now have to search through the list of ignore choices to find the current
- // selection. We could use an index into the table of config options in
- // player_relations instead of strategies to sidestep this.
+ // We now have to search through the list of ignore choices to find the
+ // current selection. We could use an index into the table of config
+ // options in player_relations instead of strategies to sidestep this.
int selection = 0;
for (unsigned int i = 0; i < player_relations.getPlayerIgnoreStrategies()->size(); ++i)
if ((*player_relations.getPlayerIgnoreStrategies())[i] ==
@@ -303,9 +318,10 @@ void Setup_Players::cancel()
void Setup_Players::action(const gcn::ActionEvent &event)
{
if (event.getId() == ACTION_TABLE) {
- // temporarily eliminate ourselves: we are fully aware of this change, so there is no
- // need for asynchronous updates. (In fact, thouse might destroy the widet that
- // triggered them, which would be rather embarrassing.)
+ // temporarily eliminate ourselves: we are fully aware of this change,
+ // so there is no need for asynchronous updates. (In fact, thouse
+ // might destroy the widet that triggered them, which would be rather
+ // embarrassing.)
player_relations.removeListener(this);
int row = mPlayerTable->getSelectedRow();
@@ -336,6 +352,8 @@ void Setup_Players::action(const gcn::ActionEvent &event)
void Setup_Players::updatedPlayer(const std::string &name)
{
mPlayerTableModel->playerRelationsUpdated();
- mDefaultTrading->setSelected(player_relations.getDefault() & PlayerRelation::TRADE);
- mDefaultWhisper->setSelected(player_relations.getDefault() & PlayerRelation::WHISPER);
+ mDefaultTrading->setSelected(
+ player_relations.getDefault() & PlayerRelation::TRADE);
+ mDefaultWhisper->setSelected(
+ player_relations.getDefault() & PlayerRelation::WHISPER);
}
diff --git a/src/gui/setup_video.cpp b/src/gui/setup_video.cpp
index 23d2d9c2..cc39caed 100644
--- a/src/gui/setup_video.cpp
+++ b/src/gui/setup_video.cpp
@@ -43,6 +43,7 @@
#include "../main.h"
#include "../particle.h"
+#include "../utils/gettext.h"
#include "../utils/tostring.h"
extern Graphics *graphics;
@@ -108,11 +109,11 @@ Setup_Video::Setup_Video():
mFps((int) config.getValue("fpslimit", 0)),
mModeListModel(new ModeListModel),
mModeList(new ListBox(mModeListModel)),
- mFsCheckBox(new CheckBox("Full screen", mFullScreenEnabled)),
- mOpenGLCheckBox(new CheckBox("OpenGL", mOpenGLEnabled)),
- mCustomCursorCheckBox(new CheckBox("Custom cursor", mCustomCursorEnabled)),
+ mFsCheckBox(new CheckBox(_("Full screen"), mFullScreenEnabled)),
+ mOpenGLCheckBox(new CheckBox(_("OpenGL"), mOpenGLEnabled)),
+ mCustomCursorCheckBox(new CheckBox(_("Custom cursor"), mCustomCursorEnabled)),
mAlphaSlider(new Slider(0.2, 1.0)),
- mFpsCheckBox(new CheckBox("FPS Limit: ")),
+ mFpsCheckBox(new CheckBox(_("FPS Limit:"))),
mFpsSlider(new Slider(10, 200)),
mFpsField(new TextField),
mOriginalScrollLaziness((int) config.getValue("ScrollLaziness", 16)),
@@ -131,7 +132,7 @@ Setup_Video::Setup_Video():
setOpaque(false);
ScrollArea *scrollArea = new ScrollArea(mModeList);
- gcn::Label *alphaLabel = new gcn::Label("Gui opacity");
+ gcn::Label *alphaLabel = new gcn::Label(_("Gui opacity"));
mModeList->setEnabled(false);
#ifndef USE_OPENGL
@@ -188,7 +189,7 @@ Setup_Video::Setup_Video():
mParticleDetailField->addKeyListener(this);
mScrollRadiusSlider->setDimension(gcn::Rectangle(10, 120, 75, 10));
- gcn::Label *scrollRadiusLabel = new gcn::Label("Scroll radius");
+ gcn::Label *scrollRadiusLabel = new gcn::Label(_("Scroll radius"));
scrollRadiusLabel->setPosition(90, 120);
mScrollRadiusField->setPosition(mFpsField->getX(), 120);
mScrollRadiusField->setWidth(30);
@@ -196,7 +197,7 @@ Setup_Video::Setup_Video():
mScrollRadiusSlider->setValue(mOriginalScrollRadius);
mScrollLazinessSlider->setDimension(gcn::Rectangle(10, 140, 75, 10));
- gcn::Label *scrollLazinessLabel = new gcn::Label("Scroll laziness");
+ gcn::Label *scrollLazinessLabel = new gcn::Label(_("Scroll laziness"));
scrollLazinessLabel->setPosition(90, 140);
mScrollLazinessField->setPosition(mFpsField->getX(), 140);
mScrollLazinessField->setWidth(30);
@@ -204,42 +205,42 @@ Setup_Video::Setup_Video():
mScrollLazinessSlider->setValue(mOriginalScrollLaziness);
mOverlayDetailSlider->setDimension(gcn::Rectangle(10, 160, 75, 10));
- gcn::Label *overlayDetailLabel = new gcn::Label("Ambient FX");
+ gcn::Label *overlayDetailLabel = new gcn::Label(_("Ambient FX"));
overlayDetailLabel->setPosition(90, 160);
mOverlayDetailField->setPosition(180, 160);
mOverlayDetailField->setWidth(30);
switch (mOverlayDetail)
{
case 0:
- mOverlayDetailField->setCaption("off");
+ mOverlayDetailField->setCaption(_("off"));
break;
case 1:
- mOverlayDetailField->setCaption("low");
+ mOverlayDetailField->setCaption(_("low"));
break;
case 2:
- mOverlayDetailField->setCaption("high");
+ mOverlayDetailField->setCaption(_("high"));
break;
}
mOverlayDetailSlider->setValue(mOverlayDetail);
mParticleDetailSlider->setDimension(gcn::Rectangle(10, 180, 75, 10));
- gcn::Label *particleDetailLabel = new gcn::Label("Particle Detail");
+ gcn::Label *particleDetailLabel = new gcn::Label(_("Particle Detail"));
particleDetailLabel->setPosition(90, 180);
mParticleDetailField->setPosition(180, 180);
mParticleDetailField->setWidth(60);
switch (mParticleDetail)
{
case 0:
- mParticleDetailField->setCaption("low");
+ mParticleDetailField->setCaption(_("low"));
break;
case 1:
- mParticleDetailField->setCaption("medium");
+ mParticleDetailField->setCaption(_("medium"));
break;
case 2:
- mParticleDetailField->setCaption("high");
+ mParticleDetailField->setCaption(_("high"));
break;
case 3:
- mParticleDetailField->setCaption("max");
+ mParticleDetailField->setCaption(_("max"));
break;
}
mParticleDetailSlider->setValue(mParticleDetail);
@@ -305,8 +306,8 @@ void Setup_Video::apply()
}
#if defined(WIN32) || defined(__APPLE__)
} else {
- new OkDialog("Switching to full screen",
- "Restart needed for changes to take effect.");
+ new OkDialog(_("Switching to full screen"),
+ _("Restart needed for changes to take effect."));
}
#endif
config.setValue("screen", fullscreen ? 1 : 0);
@@ -318,8 +319,8 @@ void Setup_Video::apply()
config.setValue("opengl", mOpenGLCheckBox->isSelected() ? 1 : 0);
// OpenGL can currently only be changed by restarting, notify user.
- new OkDialog("Changing OpenGL",
- "Applying change to OpenGL requires restart.");
+ new OkDialog(_("Changing OpenGL"),
+ _("Applying change to OpenGL requires restart."));
}
// FPS change
@@ -408,13 +409,13 @@ void Setup_Video::action(const gcn::ActionEvent &event)
switch (val)
{
case 0:
- mOverlayDetailField->setCaption("off");
+ mOverlayDetailField->setCaption(_("off"));
break;
case 1:
- mOverlayDetailField->setCaption("low");
+ mOverlayDetailField->setCaption(_("low"));
break;
case 2:
- mOverlayDetailField->setCaption("high");
+ mOverlayDetailField->setCaption(_("high"));
break;
}
config.setValue("OverlayDetail", val);
@@ -425,16 +426,16 @@ void Setup_Video::action(const gcn::ActionEvent &event)
switch (val)
{
case 0:
- mParticleDetailField->setCaption("low");
+ mParticleDetailField->setCaption(_("low"));
break;
case 1:
- mParticleDetailField->setCaption("medium");
+ mParticleDetailField->setCaption(_("medium"));
break;
case 2:
- mParticleDetailField->setCaption("high");
+ mParticleDetailField->setCaption(_("high"));
break;
case 3:
- mParticleDetailField->setCaption("max");
+ mParticleDetailField->setCaption(_("max"));
break;
}
config.setValue("particleEmitterSkip", 3 - val);
diff --git a/src/gui/skill.cpp b/src/gui/skill.cpp
index 82108f84..8b8c58cd 100644
--- a/src/gui/skill.cpp
+++ b/src/gui/skill.cpp
@@ -29,12 +29,14 @@
#include "windowcontainer.h"
#include "../localplayer.h"
+#include "../log.h"
#include "../utils/dtor.h"
+#include "../utils/gettext.h"
+#include "../utils/strprintf.h"
#include "../utils/xml.h"
-#include "../log.h"
-#define SKILLS_FILE "skills.xml"
+static const char *SKILLS_FILE = "skills.xml";
struct SkillInfo {
std::string name;
@@ -73,7 +75,10 @@ public:
virtual void update()
{
- static const SkillInfo fakeSkillInfo = { "Mystery Skill", false };
+ static const SkillInfo fakeSkillInfo = {
+ _("Mystery Skill"),
+ false
+ };
mEntriesNr = mDialog->getSkills().size();
resize();
@@ -90,13 +95,13 @@ public:
info = &fakeSkillInfo;
sprintf(tmp, "%c%s", info->modifiable? ' ' : '*', info->name.c_str());
- gcn::Label *name_label = new gcn::Label(std::string(tmp));
+ gcn::Label *name_label = new gcn::Label(tmp);
sprintf(tmp, "Lv:%i", skill->lv);
- gcn::Label *lv_label = new gcn::Label(std::string(tmp));
+ gcn::Label *lv_label = new gcn::Label(tmp);
sprintf(tmp, "Sp:%i", skill->sp);
- gcn::Label *sp_label = new gcn::Label(std::string(tmp));
+ gcn::Label *sp_label = new gcn::Label(tmp);
set(i, 0, name_label);
set(i, 1, lv_label);
@@ -111,7 +116,7 @@ private:
SkillDialog::SkillDialog():
- Window("Skills")
+ Window(_("Skills"))
{
initSkillinfo();
mTableModel = new SkillGuiTableModel(this);
@@ -124,9 +129,9 @@ SkillDialog::SkillDialog():
// mSkillListBox = new ListBox(this);
ScrollArea *skillScrollArea = new ScrollArea(&mTable);
- mPointsLabel = new gcn::Label("Skill Points:");
- mIncButton = new Button("Up", "inc", this);
- mUseButton = new Button("Use", "use", this);
+ mPointsLabel = new gcn::Label(strprintf(_("Skill points: %d"), 0));
+ mIncButton = new Button(_("Up"), "inc", this);
+ mUseButton = new Button(_("Use"), "use", this);
mUseButton->setEnabled(false);
// mSkillListBox->setActionEventId("skill");
@@ -180,11 +185,8 @@ void SkillDialog::action(const gcn::ActionEvent &event)
void SkillDialog::update()
{
- if (mPointsLabel != NULL) {
- char tmp[128];
- sprintf(tmp, "Skill points: %i", player_node->mSkillPoint);
- mPointsLabel->setCaption(tmp);
- }
+ mPointsLabel->setCaption(strprintf(_("Skill points: %d"),
+ player_node->mSkillPoint));
int selectedSkill = mTable.getSelectedRow();
@@ -254,8 +256,7 @@ static void initSkillinfo()
if (!root || !xmlStrEqual(root->name, BAD_CAST "skills"))
{
- logger->log("Error loading skills file: "
- SKILLS_FILE);
+ logger->log("Error loading skills file: %s", SKILLS_FILE);
skill_db.resize(2, emptySkillInfo);
skill_db[1].name = "Basic";
skill_db[1].modifiable = true;
diff --git a/src/gui/status.cpp b/src/gui/status.cpp
index 1a257ae8..a5bb77c3 100644
--- a/src/gui/status.cpp
+++ b/src/gui/status.cpp
@@ -29,6 +29,8 @@
#include "../localplayer.h"
+#include "../utils/gettext.h"
+#include "../utils/strprintf.h"
#include "../utils/tostring.h"
StatusWindow::StatusWindow(LocalPlayer *player):
@@ -46,25 +48,25 @@ StatusWindow::StatusWindow(LocalPlayer *player):
// Status Part
// ----------------------
- mLvlLabel = new gcn::Label("Level:");
- mGpLabel = new gcn::Label("Money:");
- mJobLvlLabel = new gcn::Label("Job:");
+ mLvlLabel = new gcn::Label(strprintf(_("Level: %d"), 0));
+ mGpLabel = new gcn::Label(strprintf(_("Job: %d"), 0));
+ mJobLvlLabel = new gcn::Label(strprintf(_("Money: %d GP"), 0));
mHpLabel = new gcn::Label("HP:");
mHpBar = new ProgressBar(1.0f, 80, 15, 0, 171, 34);
- mHpValueLabel = new gcn::Label("");
+ mHpValueLabel = new gcn::Label;
mXpLabel = new gcn::Label("Exp:");
mXpBar = new ProgressBar(1.0f, 80, 15, 143, 192, 211);
- mXpValueLabel = new gcn::Label("");
+ mXpValueLabel = new gcn::Label;
mMpLabel = new gcn::Label("MP:");
mMpBar = new ProgressBar(1.0f, 80, 15, 26, 102, 230);
- mMpValueLabel = new gcn::Label("");
+ mMpValueLabel = new gcn::Label;
mJobXpLabel = new gcn::Label("Job:");
mJobXpBar = new ProgressBar(1.0f, 80, 15, 220, 135, 203);
- mJobValueLabel = new gcn::Label("");
+ mJobValueLabel = new gcn::Label;
int y = 3;
int x = 5;
@@ -122,34 +124,34 @@ StatusWindow::StatusWindow(LocalPlayer *player):
// ----------------------
// Static Labels
- gcn::Label *mStatsTitleLabel = new gcn::Label("Stats");
- gcn::Label *mStatsTotalLabel = new gcn::Label("Total");
- gcn::Label *mStatsCostLabel = new gcn::Label("Cost");
+ gcn::Label *mStatsTitleLabel = new gcn::Label(_("Stats"));
+ gcn::Label *mStatsTotalLabel = new gcn::Label(_("Total"));
+ gcn::Label *mStatsCostLabel = new gcn::Label(_("Cost"));
// Derived Stats
- mStatsAttackLabel = new gcn::Label("Attack:");
- mStatsDefenseLabel= new gcn::Label("Defense:");
- mStatsMagicAttackLabel = new gcn::Label("M.Attack:");
- mStatsMagicDefenseLabel = new gcn::Label("M.Defense:");
- mStatsAccuracyLabel = new gcn::Label("% Accuracy:");
- mStatsEvadeLabel = new gcn::Label("% Evade:");
- mStatsReflexLabel = new gcn::Label("% Reflex:");
-
- mStatsAttackPoints = new gcn::Label("");
- mStatsDefensePoints = new gcn::Label("");
- mStatsMagicAttackPoints = new gcn::Label("");
- mStatsMagicDefensePoints = new gcn::Label("");
- mStatsAccuracyPoints = new gcn::Label("% Accuracy:");
- mStatsEvadePoints = new gcn::Label("% Evade:");
- mStatsReflexPoints = new gcn::Label("% Reflex:");
+ mStatsAttackLabel = new gcn::Label(_("Attack:"));
+ mStatsDefenseLabel= new gcn::Label(_("Defense:"));
+ mStatsMagicAttackLabel = new gcn::Label(_("M.Attack:"));
+ mStatsMagicDefenseLabel = new gcn::Label(_("M.Defense:"));
+ mStatsAccuracyLabel = new gcn::Label(_("% Accuracy:"));
+ mStatsEvadeLabel = new gcn::Label(_("% Evade:"));
+ mStatsReflexLabel = new gcn::Label(_("% Reflex:"));
+
+ mStatsAttackPoints = new gcn::Label;
+ mStatsDefensePoints = new gcn::Label;
+ mStatsMagicAttackPoints = new gcn::Label;
+ mStatsMagicDefensePoints = new gcn::Label;
+ mStatsAccuracyPoints = new gcn::Label;
+ mStatsEvadePoints = new gcn::Label;
+ mStatsReflexPoints = new gcn::Label;
// New labels
for (int i = 0; i < 6; i++) {
- mStatsLabel[i] = new gcn::Label();
- mStatsDisplayLabel[i] = new gcn::Label();
+ mStatsLabel[i] = new gcn::Label;
+ mStatsDisplayLabel[i] = new gcn::Label;
mPointsLabel[i] = new gcn::Label("0");
}
- mRemainingStatsPointsLabel = new gcn::Label();
+ mRemainingStatsPointsLabel = new gcn::Label;
// Set button events Id
mStatsButton[0] = new Button("+", "STR", this);
@@ -227,13 +229,13 @@ void StatusWindow::update()
{
// Status Part
// -----------
- mLvlLabel->setCaption("Level: " + toString(mPlayer->mLevel));
+ mLvlLabel->setCaption(strprintf(_("Level: %d"), mPlayer->mLevel));
mLvlLabel->adjustSize();
- mJobLvlLabel->setCaption("Job: " + toString(mPlayer->mJobLevel));
+ mJobLvlLabel->setCaption(strprintf(_("Job: %d"), mPlayer->mJobLevel));
mJobLvlLabel->adjustSize();
- mGpLabel->setCaption("Money: " + toString(mPlayer->mGp) + " GP");
+ mGpLabel->setCaption(strprintf(_("Money: %d GP"), mPlayer->mGp));
mGpLabel->adjustSize();
mHpValueLabel->setCaption(toString(mPlayer->mHp) +
@@ -276,20 +278,20 @@ void StatusWindow::update()
// Stats Part
// ----------
- static const std::string attrNames[6] = {
- "Strength",
- "Agility",
- "Vitality",
- "Intelligence",
- "Dexterity",
- "Luck"
+ static const char *attrNames[6] = {
+ N_("Strength"),
+ N_("Agility"),
+ N_("Vitality"),
+ N_("Intelligence"),
+ N_("Dexterity"),
+ N_("Luck")
};
int statusPoints = mPlayer->mStatsPointsToAttribute;
// Update labels
for (int i = 0; i < 6; i++)
{
- mStatsLabel[i]->setCaption(attrNames[i]);
+ mStatsLabel[i]->setCaption(gettext(attrNames[i]));
mStatsDisplayLabel[i]->setCaption(toString((int) mPlayer->mAttr[i]));
mPointsLabel[i]->setCaption(toString((int) mPlayer->mAttrUp[i]));
@@ -299,8 +301,8 @@ void StatusWindow::update()
mStatsButton[i]->setEnabled(mPlayer->mAttrUp[i] <= statusPoints);
}
- mRemainingStatsPointsLabel->setCaption("Remaining Status Points: " +
- toString(statusPoints));
+ mRemainingStatsPointsLabel->setCaption(
+ strprintf(_("Remaining Status Points: %d"), statusPoints));
mRemainingStatsPointsLabel->adjustSize();
// Derived Stats Points
@@ -353,12 +355,12 @@ void StatusWindow::update()
mXpBar->getX() + mXpBar->getWidth() + 5,
mXpLabel->getY());
- mJobXpLabel->setPosition(mXpBar->getX() - mJobXpLabel->getWidth() - 5,
+ mJobXpLabel->setPosition(mXpBar->getX() - mJobXpLabel->getWidth() - 5,
mMpLabel->getY());
mJobXpBar->setPosition(
mJobXpLabel->getX() + mJobXpLabel->getWidth() + 5,
mJobXpLabel->getY());
- mJobValueLabel->setPosition(mJobXpBar->getX() + mJobXpBar->getWidth() + 5,
+ mJobValueLabel->setPosition(mJobXpBar->getX() + mJobXpBar->getWidth() + 5,
mJobXpLabel->getY());
}
diff --git a/src/gui/textfield.cpp b/src/gui/textfield.cpp
index ea82ba77..bbedb29d 100644
--- a/src/gui/textfield.cpp
+++ b/src/gui/textfield.cpp
@@ -19,11 +19,13 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+#include "textfield.h"
+
#include <algorithm>
#include <guichan/font.hpp>
-#include "textfield.h"
+#include "sdlinput.h"
#include "../graphics.h"
@@ -32,6 +34,8 @@
#include "../utils/dtor.h"
+#undef DELETE //Win32 compatibility hack
+
int TextField::instances = 0;
ImageRect TextField::skin;
@@ -100,3 +104,99 @@ void TextField::drawFrame(gcn::Graphics *graphics)
static_cast<Graphics*>(graphics)->drawImageRect(0, 0, w, h, skin);
}
+
+void TextField::keyPressed(gcn::KeyEvent &keyEvent)
+{
+ int val = keyEvent.getKey().getValue();
+
+ if (val >= 32)
+ {
+ int l;
+ if (val < 128) l = 1; // 0xxxxxxx
+ else if (val < 0x800) l = 2; // 110xxxxx 10xxxxxx
+ else if (val < 0x10000) l = 3; // 1110xxxx 10xxxxxx 10xxxxxx
+ else l = 4; // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
+
+ char buf[4];
+ for (int i = 0; i < l; ++i)
+ {
+ buf[i] = val >> (6 * (l - i - 1));
+ if (i > 0) buf[i] = (buf[i] & 63) | 128;
+ }
+
+ if (l > 1) buf[0] |= 255 << (8 - l);
+
+ mText.insert(mCaretPosition, std::string(buf, buf + l));
+ mCaretPosition += l;
+ }
+
+ /* In UTF-8, 10xxxxxx is only used for inner parts of characters. So skip
+ them when processing key presses. */
+
+ switch (val)
+ {
+ case Key::LEFT:
+ {
+ while (mCaretPosition > 0)
+ {
+ --mCaretPosition;
+ if ((mText[mCaretPosition] & 192) != 128)
+ break;
+ }
+ } break;
+
+ case Key::RIGHT:
+ {
+ unsigned sz = mText.size();
+ while (mCaretPosition < sz)
+ {
+ ++mCaretPosition;
+ if (mCaretPosition == sz ||
+ (mText[mCaretPosition] & 192) != 128)
+ break;
+ }
+ } break;
+
+ case Key::DELETE:
+ {
+ unsigned sz = mText.size();
+ while (mCaretPosition < sz)
+ {
+ --sz;
+ mText.erase(mCaretPosition, 1);
+ if (mCaretPosition == sz ||
+ (mText[mCaretPosition] & 192) != 128)
+ break;
+ }
+ } break;
+
+ case Key::BACKSPACE:
+ {
+ while (mCaretPosition > 0)
+ {
+ --mCaretPosition;
+ int v = mText[mCaretPosition];
+ mText.erase(mCaretPosition, 1);
+ if ((v & 192) != 128) break;
+ }
+ } break;
+
+ case Key::ENTER:
+ distributeActionEvent();
+ break;
+
+ case Key::HOME:
+ mCaretPosition = 0;
+ break;
+
+ case Key::END:
+ mCaretPosition = mText.size();
+ break;
+
+ case Key::TAB:
+ return;
+ }
+
+ keyEvent.consume();
+ fixScroll();
+}
diff --git a/src/gui/textfield.h b/src/gui/textfield.h
index 60a50c69..b808fad2 100644
--- a/src/gui/textfield.h
+++ b/src/gui/textfield.h
@@ -53,6 +53,11 @@ class TextField : public gcn::TextField {
*/
void drawFrame(gcn::Graphics *graphics);
+ /**
+ * Processes one keypress.
+ */
+ void keyPressed(gcn::KeyEvent &keyEvent);
+
private:
static int instances;
static ImageRect skin;
diff --git a/src/gui/trade.cpp b/src/gui/trade.cpp
index 9347cc02..405d871f 100644
--- a/src/gui/trade.cpp
+++ b/src/gui/trade.cpp
@@ -41,6 +41,8 @@
#include "../resources/iteminfo.h"
+#include "../utils/gettext.h"
+#include "../utils/strprintf.h"
#include "../utils/tostring.h"
TradeWindow::TradeWindow(Network *network):
@@ -56,10 +58,10 @@ TradeWindow::TradeWindow(Network *network):
setMinWidth(342);
setMinHeight(209);
- mAddButton = new Button("Add", "add", this);
- mOkButton = new Button("Ok", "ok", this);
- mCancelButton = new Button("Cancel", "cancel", this);
- mTradeButton = new Button("Trade", "trade", this);
+ mAddButton = new Button(_("Add"), "add", this);
+ mOkButton = new Button(_("Ok"), "ok", this);
+ mCancelButton = new Button(_("Cancel"), "cancel", this);
+ mTradeButton = new Button(_("Trade"), "trade", this);
mMyItemContainer = new ItemContainer(mMyInventory.get());
mMyItemContainer->addSelectionListener(this);
@@ -75,8 +77,8 @@ TradeWindow::TradeWindow(Network *network):
mPartnerScroll = new ScrollArea(mPartnerItemContainer);
mPartnerScroll->setPosition(8, 64);
- mMoneyLabel = new gcn::Label("You get: 0 GP");
- mMoneyLabel2 = new gcn::Label("You give:");
+ mMoneyLabel = new gcn::Label(strprintf(_("You get %d GP."), 0));
+ mMoneyLabel2 = new gcn::Label(_("You give:"));
mMoneyField = new TextField;
mMoneyField->setWidth(50);
@@ -87,8 +89,9 @@ TradeWindow::TradeWindow(Network *network):
mTradeButton->setEnabled(false);
- mItemNameLabel = new gcn::Label("Name:");
- mItemDescriptionLabel = new gcn::Label("Description:");
+ mItemNameLabel = new gcn::Label(strprintf(_("Name: %s"), ""));
+ mItemDescriptionLabel = new gcn::Label(
+ strprintf(_("Description: %s"), ""));
add(mMyScroll);
add(mPartnerScroll);
@@ -150,7 +153,7 @@ void TradeWindow::widgetResized(const gcn::Event &event)
void TradeWindow::addMoney(int amount)
{
- mMoneyLabel->setCaption("You get: " + toString(amount) + " GP");
+ mMoneyLabel->setCaption(strprintf(_("You get %d GP."), amount));
mMoneyLabel->adjustSize();
}
@@ -198,7 +201,7 @@ void TradeWindow::reset()
mOkButton->setEnabled(true);
mOkOther = false;
mOkMe = false;
- mMoneyLabel->setCaption("You get: 0 GP");
+ mMoneyLabel->setCaption(strprintf(_("You get %d GP."), 0));
mMoneyField->setEnabled(true);
mMoneyField->setText("");
}
@@ -257,21 +260,11 @@ void TradeWindow::valueChanged(const gcn::SelectionEvent &event)
}
// Update name and description
- if (!item)
- {
- mItemNameLabel->setCaption("Name:");
- mItemDescriptionLabel->setCaption("Description:");
- }
- else
- {
- std::string SomeText;
- SomeText = "Name: " + item->getInfo().getName();
- mItemNameLabel->setCaption(SomeText);
- mItemNameLabel->adjustSize();
- SomeText = "Description: " + item->getInfo().getDescription();
- mItemDescriptionLabel->setCaption(SomeText);
- mItemDescriptionLabel->adjustSize();
- }
+ ItemInfo const *info = item ? &item->getInfo() : NULL;
+ mItemNameLabel->setCaption(strprintf(_("Name: %s"),
+ info ? info->getName().c_str() : ""));
+ mItemDescriptionLabel->setCaption(strprintf(_("Description: %s"),
+ info ? info->getDescription().c_str() : ""));
}
void TradeWindow::action(const gcn::ActionEvent &event)
@@ -287,8 +280,8 @@ void TradeWindow::action(const gcn::ActionEvent &event)
return;
if (mMyInventory->contains(item)) {
- chatWindow->chatLog("Failed adding item. You can not "
- "overlap one kind of item on the window.", BY_SERVER);
+ chatWindow->chatLog(_("Failed adding item. You can not "
+ "overlap one kind of item on the window."), BY_SERVER);
return;
}
diff --git a/src/gui/truetypefont.cpp b/src/gui/truetypefont.cpp
index 7f9abd3a..0eed6f08 100644
--- a/src/gui/truetypefont.cpp
+++ b/src/gui/truetypefont.cpp
@@ -17,8 +17,6 @@
* 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$
*/
#include "truetypefont.h"
@@ -47,8 +45,7 @@ class TextChunk
bool operator==(const TextChunk &chunk) const
{
- return (
- chunk.text == text && chunk.color == color);
+ return (chunk.text == text && chunk.color == color);
}
void generate(TTF_Font *font)
@@ -84,7 +81,7 @@ typedef std::list<TextChunk>::iterator CacheIterator;
static int fontCounter;
-TrueTypeFont::TrueTypeFont(const std::string& filename, int size)
+TrueTypeFont::TrueTypeFont(const std::string &filename, int size)
{
if (fontCounter == 0 && TTF_Init() == -1)
{
@@ -167,7 +164,7 @@ void TrueTypeFont::drawString(gcn::Graphics *graphics,
g->drawImage(cache.front().img, x, y);
}
-int TrueTypeFont::getWidth(const std::string& text) const
+int TrueTypeFont::getWidth(const std::string &text) const
{
int w, h;
TTF_SizeUTF8(mFont, text.c_str(), &w, &h);
diff --git a/src/gui/truetypefont.h b/src/gui/truetypefont.h
index 48502f1f..e8617c7d 100644
--- a/src/gui/truetypefont.h
+++ b/src/gui/truetypefont.h
@@ -17,8 +17,6 @@
* 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_TRUETYPEFONT_H
@@ -44,74 +42,7 @@ class TrueTypeFont : public gcn::Font
* @param filename Font filename.
* @param size Font size.
*/
- TrueTypeFont(const std::string& filename, int size);
-
- /**
- * Destructor.
- */
- ~TrueTypeFont();
-
- virtual int getWidth(const std::string& text) const;
-
- virtual int getHeight() const;
-
- /**
- * @see Font::drawString
- */
- void drawString(gcn::Graphics* graphics, const std::string& text, int x, int y);
-
- private:
- TTF_Font *mFont;
-};
-
-#endif
-/*
- * The Mana World
- * Copyright 2004 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_TRUETYPEFONT_H
-#define _TMW_TRUETYPEFONT_H
-
-#include <string>
-
-#include <guichan/font.hpp>
-#include <guichan/graphics.hpp>
-#include <SDL/SDL_ttf.h>
-
-/**
- * A wrapper around SDL_ttf for allowing the use of TrueType fonts.
- *
- * <b>NOTE:</b> This class needs SDL_ttf to be initialized.
- */
-class TrueTypeFont : public gcn::Font
-{
- public:
- /**
- * Constructor.
- *
- * @param filename Font filename.
- * @param size Font size.
- */
- TrueTypeFont(const std::string& filename, int size);
+ TrueTypeFont(const std::string &filename, int size);
/**
* Destructor.
@@ -125,7 +56,9 @@ class TrueTypeFont : public gcn::Font
/**
* @see Font::drawString
*/
- void drawString(gcn::Graphics* graphics, const std::string& text, int x, int y);
+ void drawString(gcn::Graphics *graphics,
+ const std::string &text,
+ int x, int y);
private:
TTF_Font *mFont;
diff --git a/src/gui/updatewindow.cpp b/src/gui/updatewindow.cpp
index 7f7d45fc..a6857d21 100644
--- a/src/gui/updatewindow.cpp
+++ b/src/gui/updatewindow.cpp
@@ -40,6 +40,7 @@
#include "../log.h"
#include "../main.h"
+#include "../utils/gettext.h"
#include "../utils/tostring.h"
#include "../resources/resourcemanager.h"
@@ -89,7 +90,7 @@ loadTextFile(const std::string &fileName)
UpdaterWindow::UpdaterWindow(const std::string &updateHost,
const std::string &updatesDir):
- Window("Updating..."),
+ Window(_("Updating...")),
mThread(NULL),
mDownloadStatus(UPDATE_NEWS),
mUpdateHost(updateHost),
@@ -112,10 +113,10 @@ UpdaterWindow::UpdaterWindow(const std::string &updateHost,
mBrowserBox = new BrowserBox();
mScrollArea = new ScrollArea(mBrowserBox);
- mLabel = new gcn::Label("Connecting...");
+ mLabel = new gcn::Label(_("Connecting..."));
mProgressBar = new ProgressBar(0.0, w - 10, 20, 37, 70, 200);
- mCancelButton = new Button("Cancel", "cancel", this);
- mPlayButton = new Button("Play", "play", this);
+ mCancelButton = new Button(_("Cancel"), "cancel", this);
+ mPlayButton = new Button(_("Play"), "play", this);
mBrowserBox->setOpaque(false);
mPlayButton->setEnabled(false);
@@ -228,8 +229,9 @@ int UpdaterWindow::updateProgress(void *ptr,
float progress = dn / dt;
UpdaterWindow *uw = reinterpret_cast<UpdaterWindow *>(ptr);
- if (progress < 0) progress = 0.0f;
- if (progress > 1) progress = 1.0f;
+ if (progress != progress) progress = 0.0f; // check for NaN
+ if (progress < 0.0f) progress = 0.0f; // no idea how this could ever happen, but why not check for it anyway.
+ if (progress > 1.0f) progress = 1.0f;
uw->setLabel(
uw->mCurrentFile + " (" + toString((int) (progress * 100)) + "%)");
@@ -521,7 +523,7 @@ void UpdaterWindow::logic()
break;
case UPDATE_COMPLETE:
enable();
- setLabel("Completed");
+ setLabel(_("Completed"));
break;
case UPDATE_IDLE:
break;
diff --git a/src/gui/vbox.cpp b/src/gui/vbox.cpp
deleted file mode 100644
index 2ec1112d..00000000
--- a/src/gui/vbox.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * The Mana World
- * Copyright 2004 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
- */
-
-#include "vbox.h"
-
-void VBox::draw(gcn::Graphics *graphics)
-{
- if (mWidgets.empty())
- {
- return;
- }
-
- int childWidth = getWidth();
- int childHeight = getHeight() / mWidgets.size();
- int i = 0;
-
- for (WidgetIterator w = mWidgets.begin(); w != mWidgets.end(); w++)
- {
- (*w)->setPosition(0, childHeight * i - padding);
- (*w)->setSize(childWidth, childHeight);
- i++;
- }
-
- gcn::Container::draw(graphics);
-}
diff --git a/src/gui/viewport.cpp b/src/gui/viewport.cpp
index 37aa40ce..9eab7c95 100644
--- a/src/gui/viewport.cpp
+++ b/src/gui/viewport.cpp
@@ -21,8 +21,6 @@
#include "viewport.h"
-#include <guichan/sdl/sdlinput.hpp>
-
#include "gui.h"
#include "popupmenu.h"
#include "ministatus.h"
diff --git a/src/gui/widgets/layout.cpp b/src/gui/widgets/layout.cpp
new file mode 100644
index 00000000..bcc54cf7
--- /dev/null
+++ b/src/gui/widgets/layout.cpp
@@ -0,0 +1,327 @@
+/*
+ * 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
+ */
+
+#include <cassert>
+
+#include "layout.h"
+
+ContainerPlacer ContainerPlacer::at(int x, int y)
+{
+ return ContainerPlacer(mContainer, &mCell->at(x, y));
+}
+
+LayoutCell &ContainerPlacer::operator()
+ (int x, int y, gcn::Widget *wg, int w, int h)
+{
+ mContainer->add(wg);
+ return mCell->place(wg, x, y, w, h);
+}
+
+LayoutCell::~LayoutCell()
+{
+ if (mType == ARRAY) delete mArray;
+}
+
+LayoutArray &LayoutCell::getArray()
+{
+ assert(mType != WIDGET);
+ if (mType == ARRAY) return *mArray;
+ mArray = new LayoutArray;
+ mType = ARRAY;
+ mExtent[0] = 1;
+ mExtent[1] = 1;
+ mPadding = 0;
+ mAlign[0] = FILL;
+ mAlign[1] = FILL;
+ return *mArray;
+}
+
+void LayoutCell::reflow(int nx, int ny, int nw, int nh)
+{
+ assert(mType != NONE);
+ nx += mPadding;
+ ny += mPadding;
+ nw -= 2 * mPadding;
+ nh -= 2 * mPadding;
+ if (mType == ARRAY)
+ mArray->reflow(nx, ny, nw, nh);
+ else
+ mWidget->setDimension(gcn::Rectangle(nx, ny, nw, nh));
+}
+
+void LayoutCell::computeSizes()
+{
+ assert(mType == ARRAY);
+
+ for (std::vector< std::vector< LayoutCell * > >::iterator
+ i = mArray->mCells.begin(), i_end = mArray->mCells.end();
+ i != i_end; ++i)
+ {
+ for (std::vector< LayoutCell * >::iterator
+ j = i->begin(), j_end = i->end(); j != j_end; ++j)
+ {
+ LayoutCell *cell = *j;
+ if (cell && cell->mType == ARRAY) cell->computeSizes();
+ }
+ }
+
+ mSize[0] = mArray->getSize(0);
+ mSize[1] = mArray->getSize(1);
+}
+
+LayoutArray::LayoutArray(): mSpacing(4)
+{
+}
+
+LayoutArray::~LayoutArray()
+{
+ for (std::vector< std::vector< LayoutCell * > >::iterator
+ i = mCells.begin(), i_end = mCells.end(); i != i_end; ++i)
+ {
+ for (std::vector< LayoutCell * >::iterator
+ j = i->begin(), j_end = i->end(); j != j_end; ++j)
+ {
+ delete *j;
+ }
+ }
+}
+
+LayoutCell &LayoutArray::at(int x, int y, int w, int h)
+{
+ resizeGrid(x + w, y + h);
+ LayoutCell *&cell = mCells[y][x];
+ if (!cell)
+ {
+ cell = new LayoutCell;
+ }
+ return *cell;
+}
+
+void LayoutArray::resizeGrid(int w, int h)
+{
+ bool extW = w && w > (int)mSizes[0].size(),
+ extH = h && h > (int)mSizes[1].size();
+ if (!extW && !extH) return;
+
+ if (extH)
+ {
+ mSizes[1].resize(h, Layout::AUTO_DEF);
+ mCells.resize(h);
+ if (!extW) w = mSizes[0].size();
+ }
+
+ if (extW)
+ {
+ mSizes[0].resize(w, Layout::AUTO_DEF);
+ }
+
+ for (std::vector< std::vector< LayoutCell * > >::iterator
+ i = mCells.begin(), i_end = mCells.end(); i != i_end; ++i)
+ {
+ i->resize(w, NULL);
+ }
+}
+
+void LayoutArray::setColWidth(int n, int w)
+{
+ resizeGrid(n + 1, 0);
+ mSizes[0][n] = w;
+}
+
+void LayoutArray::setRowHeight(int n, int h)
+{
+ resizeGrid(0, n + 1);
+ mSizes[1][n] = h;
+}
+
+void LayoutArray::matchColWidth(int n1, int n2)
+{
+ resizeGrid(std::max(n1, n2) + 1, 0);
+ std::vector< short > widths = getSizes(0, Layout::AUTO_DEF);
+ int s = std::max(widths[n1], widths[n2]);
+ mSizes[0][n1] = s;
+ mSizes[0][n2] = s;
+}
+
+void LayoutArray::extend(int x, int y, int w, int h)
+{
+ LayoutCell &cell = at(x, y, w, h);
+ cell.mExtent[0] = w;
+ cell.mExtent[1] = h;
+}
+
+LayoutCell &LayoutArray::place(gcn::Widget *widget, int x, int y, int w, int h)
+{
+ LayoutCell &cell = at(x, y, w, h);
+ assert(cell.mType == LayoutCell::NONE);
+ cell.mType = LayoutCell::WIDGET;
+ cell.mWidget = widget;
+ cell.mSize[0] = w == 1 ? widget->getWidth() : 0;
+ cell.mSize[1] = h == 1 ? widget->getHeight() : 0;
+ cell.mExtent[0] = w;
+ cell.mExtent[1] = h;
+ cell.mPadding = 0;
+ cell.mAlign[0] = LayoutCell::FILL;
+ cell.mAlign[1] = LayoutCell::FILL;
+ short &cs = mSizes[0][x], &rs = mSizes[1][y];
+ if (cs == Layout::AUTO_DEF && w == 1) cs = 0;
+ if (rs == Layout::AUTO_DEF && h == 1) rs = 0;
+ return cell;
+}
+
+void LayoutArray::align(int &pos, int &size, int dim,
+ LayoutCell const &cell, short *sizes) const
+{
+ int size_max = sizes[0];
+ for (int i = 1; i < cell.mExtent[dim]; ++i)
+ size_max += sizes[i] + mSpacing;
+ size = std::min<int>(cell.mSize[dim], size_max);
+
+ switch (cell.mAlign[dim])
+ {
+ case LayoutCell::LEFT:
+ return;
+ case LayoutCell::RIGHT:
+ pos += size_max - size;
+ return;
+ case LayoutCell::CENTER:
+ pos += (size_max - size) / 2;
+ return;
+ case LayoutCell::FILL:
+ size = size_max;
+ return;
+ }
+}
+
+std::vector< short > LayoutArray::getSizes(int dim, int upp) const
+{
+ int gridW = mSizes[0].size(), gridH = mSizes[1].size();
+ std::vector< short > sizes = mSizes[dim];
+
+ // Compute minimum sizes.
+ for (int gridY = 0; gridY < gridH; ++gridY)
+ {
+ for (int gridX = 0; gridX < gridW; ++gridX)
+ {
+ LayoutCell const *cell = mCells[gridY][gridX];
+ if (!cell || cell->mType == LayoutCell::NONE) continue;
+
+ if (cell->mExtent[dim] == 1)
+ {
+ int n = dim == 0 ? gridX : gridY;
+ int s = cell->mSize[dim] + cell->mPadding * 2;
+ if (s > sizes[n]) sizes[n] = s;
+ }
+ }
+ }
+
+ if (upp == Layout::AUTO_DEF) return sizes;
+
+ // Compute the FILL sizes.
+ int nb = sizes.size();
+ int nbFill = 0;
+ for (int i = 0; i < nb; ++i)
+ {
+ if (mSizes[dim][i] <= Layout::AUTO_DEF)
+ {
+ ++nbFill;
+ if (mSizes[dim][i] == Layout::AUTO_SET ||
+ sizes[i] <= Layout::AUTO_DEF)
+ {
+ sizes[i] = 0;
+ }
+ }
+ upp -= sizes[i] + mSpacing;
+ }
+ upp = upp + mSpacing;
+
+ if (nbFill == 0) return sizes;
+
+ for (int i = 0; i < nb; ++i)
+ {
+ if (mSizes[dim][i] > Layout::AUTO_DEF) continue;
+ int s = upp / nbFill;
+ sizes[i] += s;
+ upp -= s;
+ --nbFill;
+ }
+
+ return sizes;
+}
+
+int LayoutArray::getSize(int dim) const
+{
+ std::vector< short > sizes = getSizes(dim, Layout::AUTO_DEF);
+ int size = 0;
+ int nb = sizes.size();
+ for (int i = 0; i < nb; ++i)
+ {
+ if (sizes[i] > Layout::AUTO_DEF) size += sizes[i];
+ size += mSpacing;
+ }
+ return size - mSpacing;
+}
+
+void LayoutArray::reflow(int nx, int ny, int nw, int nh)
+{
+ int gridW = mSizes[0].size(), gridH = mSizes[1].size();
+
+ std::vector< short > widths = getSizes(0, nw);
+ std::vector< short > heights = getSizes(1, nh);
+
+ int y = ny;
+ for (int gridY = 0; gridY < gridH; ++gridY)
+ {
+ int x = nx;
+ for (int gridX = 0; gridX < gridW; ++gridX)
+ {
+ LayoutCell *cell = mCells[gridY][gridX];
+ if (cell && cell->mType != LayoutCell::NONE)
+ {
+ int dx = x, dy = y, dw, dh;
+ align(dx, dw, 0, *cell, &widths[gridX]);
+ align(dy, dh, 1, *cell, &heights[gridY]);
+ cell->reflow(dx, dy, dw, dh);
+ }
+ x += widths[gridX] + mSpacing;
+ }
+ y += heights[gridY] + mSpacing;
+ }
+}
+
+Layout::Layout(): mComputed(false)
+{
+ getArray();
+ setPadding(6);
+}
+
+void Layout::reflow(int &nw, int &nh)
+{
+ if (!mComputed)
+ {
+ computeSizes();
+ mComputed = true;
+ }
+
+ nw = nw == 0 ? mSize[0] + 2 * mPadding : nw;
+ nh = nh == 0 ? mSize[1] + 2 * mPadding : nh;
+ LayoutCell::reflow(0, 0, nw, nh);
+}
diff --git a/src/gui/widgets/layout.h b/src/gui/widgets/layout.h
new file mode 100644
index 00000000..d631c154
--- /dev/null
+++ b/src/gui/widgets/layout.h
@@ -0,0 +1,320 @@
+/*
+ * 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
+ */
+
+#ifndef _TMW_WIDGET_LAYOUT_H__
+#define _TMW_WIDGET_LAYOUT_H__
+
+#include <vector>
+
+#include <guichan/widgets/container.hpp>
+
+class LayoutCell;
+
+/**
+ * This class is a helper for adding widgets to nested tables in a window.
+ */
+class ContainerPlacer
+{
+ public:
+
+ ContainerPlacer(gcn::Container *c = NULL, LayoutCell *l = NULL):
+ mContainer(c), mCell(l)
+ {}
+
+ /**
+ * Gets the pointed cell.
+ */
+ LayoutCell &getCell()
+ { return *mCell; }
+
+ /**
+ * Returns a placer for the same container but to an inner cell.
+ */
+ ContainerPlacer at(int x, int y);
+
+ /**
+ * Adds the given widget to the container and places it in the layout.
+ * @see LayoutArray::place
+ */
+ LayoutCell &operator()
+ (int x, int y, gcn::Widget *, int w = 1, int h = 1);
+
+ private:
+
+ gcn::Container *mContainer;
+ LayoutCell *mCell;
+};
+
+/**
+ * This class contains a rectangular array of cells.
+ */
+class LayoutArray
+{
+ friend class LayoutCell;
+
+ public:
+
+ LayoutArray();
+
+ ~LayoutArray();
+
+ /**
+ * Returns a reference on the cell at given position.
+ */
+ LayoutCell &at(int x, int y, int w = 1, int h = 1);
+
+ /**
+ * Places a widget in a given cell.
+ * @param w number of columns the widget spawns.
+ * @param h number of rows the widget spawns.
+ * @note When @a w is 1, the width of column @a x is reset to zero if
+ * it was AUTO_DEF. Similarly for @a h.
+ */
+ LayoutCell &place(gcn::Widget *, int x, int y, int w = 1, int h = 1);
+
+ /**
+ * Sets the minimum width of a column.
+ */
+ void setColWidth(int n, int w);
+
+ /**
+ * Sets the minimum height of a row.
+ */
+ void setRowHeight(int n, int h);
+
+ /**
+ * Sets the widths of two columns to the maximum of their widths.
+ */
+ void matchColWidth(int n1, int n2);
+
+ /**
+ * Spawns a cell over several columns/rows.
+ */
+ void extend(int x, int y, int w, int h);
+
+ /**
+ * Computes and sets the positions of all the widgets.
+ * @param nW width of the array, used to resize the AUTO_ columns.
+ * @param nH height of the array, used to resize the AUTO_ rows.
+ */
+ void reflow(int nX, int nY, int nW, int nH);
+
+ private:
+
+ // Copy not allowed, as the array owns all its cells.
+ LayoutArray(LayoutArray const &);
+ LayoutArray &operator=(LayoutArray const &);
+
+ /**
+ * Gets the position and size of a widget along a given axis
+ */
+ void align(int &pos, int &size, int dim,
+ LayoutCell const &cell, short *sizes) const;
+
+ /**
+ * Ensures the private vectors are large enough.
+ */
+ void resizeGrid(int w, int h);
+
+ /**
+ * Gets the column/row sizes along a given axis.
+ * @param upp target size for the array. Ignored if AUTO_DEF.
+ */
+ std::vector< short > getSizes(int dim, int upp) const;
+
+ /**
+ * Gets the total size along a given axis.
+ */
+ int getSize(int dim) const;
+
+ std::vector< short > mSizes[2];
+ std::vector< std::vector < LayoutCell * > > mCells;
+
+ char mSpacing;
+};
+
+/**
+ * This class describes the formatting of a widget in the cell of a layout
+ * table. Horizontally, a widget can either fill the width of the cell (minus
+ * the cell padding), or it can retain its size and be flushed left, or flush
+ * right, or centered in the cell. The process is similar for the vertical
+ * alignment, except that top is represented by LEFT and bottom by RIGHT.
+ */
+class LayoutCell
+{
+ friend class Layout;
+ friend class LayoutArray;
+
+ public:
+
+ enum Alignment
+ {
+ LEFT, RIGHT, CENTER, FILL
+ };
+
+ LayoutCell(): mType(NONE) {}
+
+ ~LayoutCell();
+
+ /**
+ * Sets the padding around the cell content.
+ */
+ LayoutCell &setPadding(int p)
+ { mPadding = p; return *this; }
+
+ /**
+ * Sets the horizontal alignment of the cell content.
+ */
+ LayoutCell &setHAlign(Alignment a)
+ { mAlign[0] = a; return *this; }
+
+ /**
+ * Sets the vertical alignment of the cell content.
+ */
+ LayoutCell &setVAlign(Alignment a)
+ { mAlign[1] = a; return *this; }
+
+ /**
+ * @see LayoutArray::at
+ */
+ LayoutCell &at(int x, int y)
+ { return getArray().at(x, y); }
+
+ /**
+ * @see LayoutArray::place
+ */
+ LayoutCell &place(gcn::Widget *wg, int x, int y, int w = 1, int h = 1)
+ { return getArray().place(wg, x, y, w, h); }
+
+ /**
+ * @see LayoutArray::matchColWidth
+ */
+ void matchColWidth(int n1, int n2)
+ { getArray().matchColWidth(n1, n2); }
+
+ /**
+ * @see LayoutArray::setColWidth
+ */
+ void setColWidth(int n, int w)
+ { getArray().setColWidth(n, w); }
+
+ /**
+ * @see LayoutArray::setRowHeight
+ */
+ void setRowHeight(int n, int h)
+ { getArray().setRowHeight(n, h); }
+
+ /**
+ * @see LayoutArray::extend.
+ */
+ void extend(int x, int y, int w, int h)
+ { getArray().extend(x, y, w, h); }
+
+ /**
+ * Sets the minimum widths and heights of this cell and of all the
+ * inner cells.
+ */
+ void computeSizes();
+
+ private:
+
+ // Copy not allowed, as the cell may own an array.
+ LayoutCell(LayoutCell const &);
+ LayoutCell &operator=(LayoutCell const &);
+
+ union
+ {
+ gcn::Widget *mWidget;
+ LayoutArray *mArray;
+ };
+
+ enum
+ {
+ NONE, WIDGET, ARRAY
+ };
+
+ /**
+ * Returns the embedded array. Creates it if the cell does not contain
+ * anything yet. Aborts if it contains a widget.
+ */
+ LayoutArray &getArray();
+
+ /**
+ * @see LayoutArray::reflow
+ */
+ void reflow(int nx, int ny, int nw, int nh);
+
+ short mSize[2];
+ char mPadding;
+ char mExtent[2];
+ char mAlign[2];
+ char mNbFill[2];
+ char mType;
+};
+
+/**
+ * This class is an helper for setting the position of widgets. They are
+ * positioned along the cells of some rectangular tables. The layout may either
+ * be a single table or a tree of nested tables.
+ *
+ * The size of a given table column can either be set manually or be chosen
+ * from the widest widget of the column. An empty column has a AUTO_DEF width,
+ * which means it will be extended so that the layout fits its minimum width.
+ *
+ * The process is similar for table rows. By default, there is a spacing of 4
+ * pixels between rows and between columns, and a margin of 6 pixels around the
+ * whole layout.
+ */
+class Layout: public LayoutCell
+{
+ public:
+
+ Layout();
+
+ /**
+ * Sets the margin around the layout.
+ */
+ void setMargin(int m)
+ { setPadding(m); }
+
+ /**
+ * Sets the positions of all the widgets.
+ * @see LayoutArray::reflow
+ */
+ void reflow(int &nW, int &nH);
+
+ /**
+ * When the minimum size of the layout is less than the available size,
+ * the remaining pixels are equally split amongst the FILL items.
+ */
+ enum
+ {
+ AUTO_DEF = -42, /**< Default value, behaves like AUTO_ADD. */
+ AUTO_SET = -43, /**< Uses the share as the new size. */
+ AUTO_ADD = -44 /**< Adds the share to the current size. */
+ };
+
+ private:
+
+ bool mComputed;
+};
+
+#endif
diff --git a/src/gui/window.cpp b/src/gui/window.cpp
index 630b4ddd..dfe7ac64 100644
--- a/src/gui/window.cpp
+++ b/src/gui/window.cpp
@@ -20,8 +20,8 @@
*/
#include <algorithm>
-#include <climits>
#include <cassert>
+#include <climits>
#include <guichan/exception.hpp>
#include <guichan/widgets/icon.hpp>
@@ -29,9 +29,9 @@
#include "window.h"
#include "gui.h"
-#include "gccontainer.h"
#include "windowcontainer.h"
+#include "widgets/layout.h"
#include "widgets/resizegrip.h"
#include "../configlistener.h"
@@ -63,6 +63,7 @@ Window::Window(const std::string& caption, bool modal, Window *parent):
gcn::Window(caption),
mGrip(0),
mParent(parent),
+ mLayout(NULL),
mWindowName("window"),
mShowTitle(true),
mModal(modal),
@@ -76,7 +77,7 @@ Window::Window(const std::string& caption, bool modal, Window *parent):
logger->log("Window::Window(\"%s\")", caption.c_str());
if (!windowContainer) {
- throw GCN_EXCEPTION("Window::Window. no windowContainer set");
+ throw GCN_EXCEPTION("Window::Window(): no windowContainer set");
}
if (instances == 0)
@@ -108,11 +109,6 @@ Window::Window(const std::string& caption, bool modal, Window *parent):
setPadding(3);
setTitleBarHeight(20);
- // Add chrome
- mChrome = new GCContainer();
- mChrome->setOpaque(false);
- gcn::Window::add(mChrome);
-
// Add this window to the window container
windowContainer->add(this);
@@ -145,6 +141,15 @@ Window::~Window()
}
}
+ delete mLayout;
+
+ while (!mWidgets.empty())
+ {
+ gcn::Widget *w = mWidgets.front();
+ remove(w);
+ delete(w);
+ }
+
instances--;
if (instances == 0)
@@ -165,9 +170,6 @@ Window::~Window()
delete border.grid[8];
closeImage->decRef();
}
-
- delete mChrome;
- delete mGrip;
}
void Window::setWindowContainer(WindowContainer *wc)
@@ -202,7 +204,6 @@ void Window::draw(gcn::Graphics *graphics)
void Window::setContentSize(int width, int height)
{
- mChrome->setSize(width, height);
setSize(width + 2 * getPadding(),
height + getPadding() + getTitleBarHeight());
}
@@ -248,10 +249,11 @@ void Window::setResizable(bool r)
mGrip = new ResizeGrip();
mGrip->setX(getWidth() - mGrip->getWidth() - getChildrenArea().x);
mGrip->setY(getHeight() - mGrip->getHeight() - getChildrenArea().y);
- gcn::Window::add(mGrip);
+ add(mGrip);
}
else
{
+ remove(mGrip);
delete mGrip;
mGrip = 0;
}
@@ -259,15 +261,19 @@ void Window::setResizable(bool r)
void Window::widgetResized(const gcn::Event &event)
{
- const gcn::Rectangle area = getChildrenArea();
-
- mChrome->setSize(area.width, area.height);
-
if (mGrip)
{
+ const gcn::Rectangle area = getChildrenArea();
mGrip->setPosition(getWidth() - mGrip->getWidth() - area.x,
getHeight() - mGrip->getHeight() - area.y);
}
+
+ if (mLayout)
+ {
+ int w = getWidth() - 2 * getPadding();
+ int h = getHeight() - getPadding() - getTitleBarHeight();
+ mLayout->reflow(w, h);
+ }
}
void Window::setCloseButton(bool flag)
@@ -292,14 +298,7 @@ bool Window::isSticky()
void Window::setVisible(bool visible)
{
- if (isSticky())
- {
- gcn::Window::setVisible(true);
- }
- else
- {
- gcn::Window::setVisible(visible);
- }
+ gcn::Window::setVisible(isSticky() || visible);
}
void Window::scheduleDelete()
@@ -307,16 +306,6 @@ void Window::scheduleDelete()
windowContainer->scheduleDelete(this);
}
-void Window::add(gcn::Widget *w)
-{
- mChrome->add(w);
-}
-
-void Window::add(gcn::Widget *w, int x, int y)
-{
- mChrome->add(w, x, y);
-}
-
void Window::mousePressed(gcn::MouseEvent &event)
{
// Let Guichan move window to top and figure out title bar drag
@@ -535,3 +524,29 @@ int Window::getResizeHandles(gcn::MouseEvent &event)
return resizeHandles;
}
+
+Layout &Window::getLayout()
+{
+ if (!mLayout) mLayout = new Layout;
+ return *mLayout;
+}
+
+LayoutCell &Window::place(int x, int y, gcn::Widget *wg, int w, int h)
+{
+ add(wg);
+ return getLayout().place(wg, x, y, w, h);
+}
+
+ContainerPlacer Window::getPlacer(int x, int y)
+{
+ return ContainerPlacer(this, &getLayout().at(x, y));
+}
+
+void Window::reflowLayout(int w, int h)
+{
+ assert(mLayout);
+ mLayout->reflow(w, h);
+ delete mLayout;
+ mLayout = NULL;
+ setContentSize(w, h);
+}
diff --git a/src/gui/window.h b/src/gui/window.h
index 984c6f06..a49788a5 100644
--- a/src/gui/window.h
+++ b/src/gui/window.h
@@ -28,11 +28,13 @@
#include "../guichanfwd.h"
class ConfigListener;
-class GCContainer;
+class ContainerPlacer;
+class Image;
class ImageRect;
+class Layout;
+class LayoutCell;
class ResizeGrip;
class WindowContainer;
-class Image;
/**
* A window. This window can be dragged around and has a title bar. Windows are
@@ -59,7 +61,7 @@ class Window : public gcn::Window, gcn::WidgetListener
Window *parent = NULL);
/**
- * Destructor.
+ * Destructor. Deletes all the added widgets.
*/
~Window();
@@ -74,18 +76,6 @@ class Window : public gcn::Window, gcn::WidgetListener
void draw(gcn::Graphics *graphics);
/**
- * Adds a widget to the window. The widget will be deleted by the
- * window.
- */
- void add(gcn::Widget *w);
-
- /**
- * Adds a widget to the window and also specifices its position. The
- * widget will be deleted by the window.
- */
- void add(gcn::Widget *w, int x, int y);
-
- /**
* Sets the size of this window.
*/
void setContentSize(int width, int height);
@@ -163,8 +153,7 @@ class Window : public gcn::Window, gcn::WidgetListener
*
* @return The parent window or <code>NULL</code> if there is none.
*/
- Window*
- getParentWindow() { return mParent; }
+ Window *getParentWindow() { return mParent; }
/**
* Schedule this window for deletion. It will be deleted at the start
@@ -204,14 +193,12 @@ class Window : public gcn::Window, gcn::WidgetListener
/**
* Sets the name of the window. This is not the window title.
*/
- void
- setWindowName(const std::string &name) { mWindowName = name; }
+ void setWindowName(const std::string &name) { mWindowName = name; }
/**
* Returns the name of the window. This is not the window title.
*/
- const std::string&
- getWindowName() { return mWindowName; }
+ const std::string &getWindowName() { return mWindowName; }
/**
* Reads the position (and the size for resizable windows) in the
@@ -220,21 +207,51 @@ class Window : public gcn::Window, gcn::WidgetListener
* Don't forget to set these default values and resizable before
* calling this function.
*/
- virtual void loadWindowState();
+ void loadWindowState();
/**
* Set the default win pos and size.
* (which can be different of the actual ones.)
*/
- virtual void setDefaultSize(int defaultX, int defaultY,
- int defaultWidth, int defaultHeight);
+ void setDefaultSize(int defaultX, int defaultY,
+ int defaultWidth, int defaultHeight);
/**
* Reset the win pos and size to default. Don't forget to set defaults
* first.
*/
- virtual void resetToDefaultSize();
+ void resetToDefaultSize();
+
+ /**
+ * Gets the layout handler for this window.
+ */
+ Layout &getLayout();
+
+ /**
+ * Computes the position of the widgets according to the current
+ * layout. Resizes the window so that the layout fits. Deletes the
+ * layout.
+ * @param w if non-zero, force the window to this width.
+ * @param h if non-zero, force the window to this height.
+ * @note This function is meant to be called with fixed-size windows.
+ */
+ void reflowLayout(int w = 0, int h = 0);
+ /**
+ * Adds a widget to the window and sets it at given cell.
+ */
+ LayoutCell &place(int x, int y, gcn::Widget *, int w = 1, int h = 1);
+
+ /**
+ * Returns a proxy for adding widgets in an inner table of the layout.
+ */
+ ContainerPlacer getPlacer(int x, int y);
+
+ protected:
+ /** The window container windows add themselves to. */
+ static WindowContainer *windowContainer;
+
+ private:
enum ResizeHandles
{
TOP = 0x01,
@@ -243,7 +260,6 @@ class Window : public gcn::Window, gcn::WidgetListener
LEFT = 0x08
};
- protected:
/**
* Determines if the mouse is in a resize area and returns appropriate
* resize handles. Also initializes drag offset in case the resize
@@ -253,9 +269,9 @@ class Window : public gcn::Window, gcn::WidgetListener
*/
int getResizeHandles(gcn::MouseEvent &event);
- GCContainer *mChrome; /**< Contained container */
ResizeGrip *mGrip; /**< Resize grip */
Window *mParent; /**< The parent window */
+ Layout *mLayout; /**< Layout handler */
std::string mWindowName; /**< Name of the window */
bool mShowTitle; /**< Window has a title bar */
bool mModal; /**< Window is modal */
@@ -270,9 +286,6 @@ class Window : public gcn::Window, gcn::WidgetListener
int mDefaultWidth; /**< Default window width */
int mDefaultHeight; /**< Default window height */
- /** The window container windows add themselves to. */
- static WindowContainer *windowContainer;
-
/**
* The config listener that listens to changes relevant to all windows.
*/
diff --git a/src/keyboardconfig.cpp b/src/keyboardconfig.cpp
index 60b0c02a..a471f70f 100644
--- a/src/keyboardconfig.cpp
+++ b/src/keyboardconfig.cpp
@@ -23,8 +23,6 @@
#include "configuration.h"
#include "log.h"
-#include <guichan/sdl/sdlinput.hpp>
-
#include "gui/setup_keyboard.h"
struct KeyData
diff --git a/src/keyboardconfig.h b/src/keyboardconfig.h
index c6769821..414682bc 100644
--- a/src/keyboardconfig.h
+++ b/src/keyboardconfig.h
@@ -24,10 +24,9 @@
#include <string>
+#include "gui/sdlinput.h"
#include "gui/setup_keyboard.h"
-#include <guichan/sdl/sdlinput.hpp>
-
/**
* Each key represents a key function. Such as 'Move up', 'Attack' etc.
*/
diff --git a/src/localplayer.cpp b/src/localplayer.cpp
index 044f62bf..aa27607c 100644
--- a/src/localplayer.cpp
+++ b/src/localplayer.cpp
@@ -276,10 +276,7 @@ void LocalPlayer::setDestination(Uint16 x, Uint16 y)
void LocalPlayer::setWalkingDir(int dir)
{
- if (mWalkingDir != dir)
- {
- mWalkingDir = dir;
- }
+ mWalkingDir = dir;
// If we're not already walking, start walking.
if (mAction != WALK && dir)
diff --git a/src/main.cpp b/src/main.cpp
index d99c1985..584ca5d5 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -29,11 +29,13 @@
#include <SDL_image.h>
#include <guichan/actionlistener.hpp>
-#include <guichan/sdl/sdlinput.hpp>
#include <guichan/widgets/label.hpp>
#include <libxml/parser.h>
+#ifdef WIN32
+#include <SDL_syswm.h>
+#endif
#ifndef WIN32
#include <cerrno>
#include <sys/stat.h>
@@ -64,9 +66,10 @@
#include "gui/ok_dialog.h"
#include "gui/progressbar.h"
#include "gui/register.h"
+#include "gui/sdlinput.h"
#include "gui/setup.h"
-#include "gui/updatewindow.h"
#include "gui/textfield.h"
+#include "gui/updatewindow.h"
#include "net/charserverhandler.h"
#include "net/loginhandler.h"
@@ -81,12 +84,9 @@
#include "resources/resourcemanager.h"
#include "utils/dtor.h"
+#include "utils/gettext.h"
#include "utils/tostring.h"
-#ifdef WIN32
-#include <SDL_syswm.h>
-#endif
-
namespace {
Window *setupWindow = 0;
@@ -268,7 +268,7 @@ void init_engine(const Options &options)
// Add the user's homedir to PhysicsFS search path
resman->addToSearchPath(homeDir, false);
- // Add the main data directory to our PhysicsFS search path
+ // Add the main data directories to our PhysicsFS search path
if (!options.dataPath.empty()) {
resman->addToSearchPath(options.dataPath, true);
}
@@ -647,6 +647,7 @@ void mapLogin(Network *network, LoginData *loginData)
} // namespace
+extern "C" char const *_nl_locale_name_default(void);
/** Main */
int main(int argc, char *argv[])
@@ -667,6 +668,17 @@ int main(int argc, char *argv[])
printVersion();
return 0;
}
+
+#if ENABLE_NLS
+#ifdef WIN32
+ putenv(("LANG=" + std::string(_nl_locale_name_default())).c_str());
+#endif
+ setlocale(LC_MESSAGES, "");
+ bindtextdomain("tmw", LOCALEDIR);
+ bind_textdomain_codeset("tmw", "UTF-8");
+ textdomain("tmw");
+#endif
+
// Initialize libxml2 and check for potential ABI mismatches between
// compiled version and the shared library actually used.
xmlInitParser();
@@ -701,7 +713,7 @@ int main(int argc, char *argv[])
top->add(progressLabel, 15 + progressBar->getWidth(),
progressBar->getY() + 4);
progressBar->setVisible(false);
- gcn::Button *setup = new Button("Setup", "Setup", &listener);
+ gcn::Button *setup = new Button(_("Setup"), "Setup", &listener);
setup->setPosition(top->getWidth() - setup->getWidth() - 3, 3);
top->add(setup);
@@ -754,7 +766,7 @@ int main(int argc, char *argv[])
if (!network->getError().empty()) {
errorMessage = network->getError();
} else {
- errorMessage = "Got disconnected from server!";
+ errorMessage = _("Got disconnected from server!");
}
}
@@ -874,7 +886,8 @@ int main(int argc, char *argv[])
case CHAR_SELECT_STATE:
logger->log("State: CHAR_SELECT");
currentDialog = new CharSelectDialog(network, &charInfo,
- 1 - loginData.sex);
+ (loginData.sex == 0) ?
+ GENDER_FEMALE : GENDER_MALE);
if (((CharSelectDialog*) currentDialog)->
selectByName(options.playername))
@@ -929,7 +942,7 @@ int main(int argc, char *argv[])
case ERROR_STATE:
logger->log("State: ERROR");
- currentDialog = new OkDialog("Error", errorMessage);
+ currentDialog = new OkDialog(_("Error"), errorMessage);
currentDialog->addActionListener(&errorListener);
currentDialog = NULL; // OkDialog deletes itself
network->disconnect();
@@ -939,7 +952,8 @@ int main(int argc, char *argv[])
case CONNECTING_STATE:
logger->log("State: CONNECTING");
progressBar->setVisible(true);
- progressLabel->setCaption("Connecting to map server...");
+ progressLabel->setCaption(
+ _("Connecting to map server..."));
progressLabel->adjustSize();
mapLogin(network, &loginData);
break;
@@ -947,7 +961,7 @@ int main(int argc, char *argv[])
case CHAR_CONNECT_STATE:
progressBar->setVisible(true);
progressLabel->setCaption(
- "Connecting to character server...");
+ _("Connecting to character server..."));
progressLabel->adjustSize();
charLogin(network, &loginData);
break;
@@ -955,7 +969,7 @@ int main(int argc, char *argv[])
case ACCOUNT_STATE:
progressBar->setVisible(true);
progressLabel->setCaption(
- "Connecting to account server...");
+ _("Connecting to account server..."));
progressLabel->adjustSize();
accountLogin(network, &loginData);
break;
diff --git a/src/map.cpp b/src/map.cpp
index 6e33d255..abe87dfd 100644
--- a/src/map.cpp
+++ b/src/map.cpp
@@ -62,6 +62,34 @@ struct Location
MetaTile *tile;
};
+TileAnimation::TileAnimation(Animation *ani):
+ mAnimation(ani),
+ mLastUpdate(tick_time),
+ mLastImage(NULL)
+{
+}
+
+void TileAnimation::update()
+{
+ //update animation
+ mAnimation.update(tick_time - mLastUpdate);
+ mLastUpdate = tick_time;
+
+ // exchange images
+ Image *img = mAnimation.getCurrentImage();
+ if (img != mLastImage)
+ {
+ for (std::list<std::pair<MapLayer*, int> >::iterator i = mAffected.begin();
+ i != mAffected.end();
+ i++)
+ {
+ i->first->setTile(i->second, img);
+ }
+ mLastImage = img;
+ }
+
+}
+
MapLayer::MapLayer(int x, int y, int width, int height, bool isFringeLayer):
mX(x), mY(y),
mWidth(width), mHeight(height),
@@ -79,7 +107,7 @@ MapLayer::~MapLayer()
void MapLayer::setTile(int x, int y, Image *img)
{
- mTiles[x + y * mWidth] = img;
+ setTile(x + y * mWidth, img);
}
Image* MapLayer::getTile(int x, int y) const
@@ -155,6 +183,7 @@ Map::~Map()
delete_all(mLayers);
delete_all(mTilesets);
delete_all(mOverlays);
+ delete_all(mTileAnimations);
}
void Map::initializeOverlays()
@@ -216,6 +245,15 @@ void Map::draw(Graphics *graphics, int scrollX, int scrollY)
// Make sure sprites are sorted
mSprites.sort(spriteCompare);
+ //update animated tiles
+ for (std::map<int, TileAnimation*>::iterator iAni = mTileAnimations.begin();
+ iAni != mTileAnimations.end();
+ iAni++)
+ {
+ iAni->second->update();
+ }
+
+ // draw the game world
Layers::const_iterator layeri = mLayers.begin();
for (; layeri != mLayers.end(); ++layeri) {
(*layeri)->draw(graphics,
@@ -485,7 +523,7 @@ Path Map::findPath(int startX, int startY, int destX, int destY)
while (pathX != startX || pathY != startY)
{
// Add the new path node to the start of the path list
- path.push_front(PATH_NODE(pathX, pathY));
+ path.push_front(Position(pathX, pathY));
// Find out the next parent
MetaTile *tile = getMetaTile(pathX, pathY);
@@ -516,3 +554,14 @@ void Map::initializeParticleEffects(Particle* particleEngine)
particleEngine->addEffect(i->file, i->x, i->y);
}
}
+
+TileAnimation* Map::getAnimationForGid(int gid)
+{
+ std::map<int, TileAnimation*>::iterator i = mTileAnimations.find(gid);
+ if (i == mTileAnimations.end())
+ {
+ return NULL;
+ } else {
+ return i->second;
+ }
+}
diff --git a/src/map.h b/src/map.h
index 6eaf9e43..81d0b629 100644
--- a/src/map.h
+++ b/src/map.h
@@ -25,8 +25,11 @@
#include <list>
#include <vector>
+#include "position.h"
#include "properties.h"
+#include "simpleanimation.h"
+
class AmbientOverlay;
class Graphics;
class Image;
@@ -35,8 +38,6 @@ class Particle;
class Sprite;
class Tileset;
-struct PATH_NODE;
-
typedef std::vector<Tileset*> Tilesets;
typedef std::list<Sprite*> Sprites;
typedef Sprites::iterator SpriteIterator;
@@ -55,13 +56,30 @@ struct MetaTile
MetaTile():whichList(0) {};
// Pathfinding members
- int Fcost; /**< Estimation of total path cost */
- int Gcost; /**< Cost from start to this location */
- int Hcost; /**< Estimated cost to goal */
- int whichList; /**< No list, open list or closed list */
- int parentX; /**< X coordinate of parent tile */
- int parentY; /**< Y coordinate of parent tile */
- bool walkable; /**< Can beings walk on this tile */
+ int Fcost; /**< Estimation of total path cost */
+ int Gcost; /**< Cost from start to this location */
+ int Hcost; /**< Estimated cost to goal */
+ int whichList; /**< No list, open list or closed list */
+ int parentX; /**< X coordinate of parent tile */
+ int parentY; /**< Y coordinate of parent tile */
+ bool walkable; /**< Can beings walk on this tile */
+};
+
+/**
+ * Animation cycle of a tile image which changes the map accordingly.
+ */
+class TileAnimation
+{
+ public:
+ TileAnimation(Animation *ani);
+ void update();
+ void addAffectedTile(MapLayer *layer, int index)
+ { mAffected.push_back(std::make_pair(layer, index)); }
+ private:
+ std::list<std::pair<MapLayer*, int> > mAffected;
+ SimpleAnimation mAnimation;
+ int mLastUpdate;
+ Image* mLastImage;
};
/**
@@ -89,6 +107,11 @@ class MapLayer
void setTile(int x, int y, Image *img);
/**
+ * Set tile image with x + y * width already known.
+ */
+ void setTile(int index, Image *img) { mTiles[index] = img; }
+
+ /**
* Get tile image, with x and y in layer coordinates.
*/
Image *getTile(int x, int y) const;
@@ -204,8 +227,7 @@ class Map : public Properties
/**
* Find a path from one location to the next.
*/
- std::list<PATH_NODE>
- findPath(int startX, int startY, int destX, int destY);
+ Path findPath(int startX, int startY, int destX, int destY);
/**
* Adds a sprite to the map.
@@ -227,8 +249,18 @@ class Map : public Properties
/**
* Initializes all added particle effects
*/
- void
- initializeParticleEffects(Particle* particleEngine);
+ void initializeParticleEffects(Particle* particleEngine);
+
+ /**
+ * Adds a tile animation to the map
+ */
+ void addAnimation(int gid, TileAnimation *animation)
+ { mTileAnimations[gid] = animation; }
+
+ /**
+ * Gets the tile animation for a specific gid
+ */
+ TileAnimation *getAnimationForGid(int gid);
private:
/**
@@ -272,6 +304,8 @@ class Map : public Properties
int y;
};
std::list<ParticleEffectData> particleEffects;
+
+ std::map<int, TileAnimation*> mTileAnimations;
};
#endif
diff --git a/src/net/beinghandler.cpp b/src/net/beinghandler.cpp
index 9d91d988..c8d12499 100644
--- a/src/net/beinghandler.cpp
+++ b/src/net/beinghandler.cpp
@@ -141,7 +141,8 @@ void BeingHandler::handleMessage(MessageIn *msg)
msg->readInt16(); // manner
dstBeing->setStatusEffectBlock(32, msg->readInt16()); // opt3
msg->readInt8(); // karma
- dstBeing->setGender(1 - msg->readInt8()); // gender
+ dstBeing->setGender(
+ (msg->readInt8() == 0) ? GENDER_FEMALE : GENDER_MALE);
// Set these after the gender, as the sprites may be gender-specific
dstBeing->setSprite(Being::BOTTOMCLOTHES_SPRITE, headBottom);
@@ -420,7 +421,8 @@ void BeingHandler::handleMessage(MessageIn *msg)
msg->readInt16(); // manner
dstBeing->setStatusEffectBlock(32, msg->readInt16()); // opt3
msg->readInt8(); // karma
- dstBeing->setGender(1 - msg->readInt8()); // gender
+ dstBeing->setGender(
+ (msg->readInt8() == 0) ? GENDER_FEMALE : GENDER_MALE);
// Set these after the gender, as the sprites may be gender-specific
dstBeing->setSprite(Being::WEAPON_SPRITE, weapon);
diff --git a/src/net/charserverhandler.cpp b/src/net/charserverhandler.cpp
index 249995ee..df3f5ecf 100644
--- a/src/net/charserverhandler.cpp
+++ b/src/net/charserverhandler.cpp
@@ -176,10 +176,11 @@ void CharServerHandler::handleMessage(MessageIn *msg)
}
}
-LocalPlayer* CharServerHandler::readPlayerData(MessageIn &msg, int &slot)
+LocalPlayer *CharServerHandler::readPlayerData(MessageIn &msg, int &slot)
{
LocalPlayer *tempPlayer = new LocalPlayer(mLoginData->account_ID, 0, NULL);
- tempPlayer->setGender(1 - mLoginData->sex);
+ tempPlayer->setGender(
+ (mLoginData->sex == 0) ? GENDER_FEMALE : GENDER_MALE);
tempPlayer->mCharId = msg.readInt32();
tempPlayer->setXp(msg.readInt32());
diff --git a/src/openglgraphics.cpp b/src/openglgraphics.cpp
index d8d7a807..48b10a1f 100644
--- a/src/openglgraphics.cpp
+++ b/src/openglgraphics.cpp
@@ -45,7 +45,8 @@
#include "resources/image.h"
OpenGLGraphics::OpenGLGraphics():
- mAlpha(false), mTexture(false), mColorAlpha(false)
+ mAlpha(false), mTexture(false), mColorAlpha(false),
+ mSync(false)
{
}
@@ -53,6 +54,11 @@ OpenGLGraphics::~OpenGLGraphics()
{
}
+void OpenGLGraphics::setSync(bool sync)
+{
+ mSync = sync;
+}
+
bool OpenGLGraphics::setVideoMode(int w, int h, int bpp, bool fs, bool hwaccel)
{
logger->log("Setting video mode %dx%d %s",
@@ -74,8 +80,10 @@ bool OpenGLGraphics::setVideoMode(int w, int h, int bpp, bool fs, bool hwaccel)
}
#ifdef __APPLE__
-// long VBL = 1;
-// CGLSetParameter(CGLGetCurrentContext(), kCGLCPSwapInterval, &VBL);
+ if (mSync) {
+ const GLint VBL = 1;
+ CGLSetParameter(CGLGetCurrentContext(), kCGLCPSwapInterval, &VBL);
+ }
#endif
// Setup OpenGL
@@ -352,7 +360,7 @@ void OpenGLGraphics::setTexturingAndBlending(bool enable)
void OpenGLGraphics::drawRectangle(const gcn::Rectangle& rect, bool filled)
{
- float offset = filled ? 0 : 0.5f;
+ const float offset = filled ? 0 : 0.5f;
setTexturingAndBlending(false);
diff --git a/src/openglgraphics.h b/src/openglgraphics.h
index 7d39e306..ea30e019 100644
--- a/src/openglgraphics.h
+++ b/src/openglgraphics.h
@@ -31,6 +31,13 @@ class OpenGLGraphics : public Graphics
~OpenGLGraphics();
+ /**
+ * Sets whether vertical refresh syncing is enabled. Takes effect after
+ * the next call to setVideoMode(). Only implemented on MacOS for now.
+ */
+ void setSync(bool sync);
+ bool getSync() const { return mSync; }
+
bool setVideoMode(int w, int h, int bpp, bool fs, bool hwaccel);
bool drawImage(Image *image,
@@ -72,6 +79,7 @@ class OpenGLGraphics : public Graphics
private:
bool mAlpha, mTexture;
bool mColorAlpha;
+ bool mSync;
};
#endif
diff --git a/src/player.cpp b/src/player.cpp
index f43e54d5..f81c039c 100644
--- a/src/player.cpp
+++ b/src/player.cpp
@@ -105,25 +105,17 @@ Player::flash(int time)
}
}
-void Player::setGender(int gender)
+void Player::setGender(Gender gender)
{
- // Players can only be male or female
- if (gender > 1)
- {
- logger->log("Warning: unsupported gender %i, assuming male.", gender);
- gender = 0;
- }
-
-
if (gender != mGender)
{
Being::setGender(gender);
- setSprite(Being::BASE_SPRITE, -100); /* Human base sprite. When implementing
- * different races remove this line
- * and set the base sprite when setting
- * the race of the player character.
- */
+ /* Human base sprite. When implementing different races remove this
+ * line and set the base sprite when setting the race of the player
+ * character.
+ */
+ setSprite(Being::BASE_SPRITE, -100);
// Reload all subsprites
for (int i = 1; i < VECTOREND_SPRITE; i++)
diff --git a/src/player.h b/src/player.h
index 4676124c..268c77bb 100644
--- a/src/player.h
+++ b/src/player.h
@@ -53,7 +53,7 @@ class Player : public Being
getType() const;
virtual void
- setGender(int gender);
+ setGender(Gender gender);
/**
* Sets the hair style and color for this player.
diff --git a/src/gui/box.cpp b/src/position.cpp
index 59d8c135..cc39a1af 100644
--- a/src/gui/box.cpp
+++ b/src/position.cpp
@@ -1,6 +1,6 @@
/*
* The Mana World
- * Copyright 2004 The Mana World Development Team
+ * Copyright 2007 The Mana World Development Team
*
* This file is part of The Mana World.
*
@@ -19,24 +19,27 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-#include "box.h"
+#include "position.h"
-Box::Box():
- padding(0)
+std::ostream& operator <<(std::ostream &os, const Position &p)
{
- setOpaque(false);
+ os << "(" << p.x << ", " << p.y << ")";
+ return os;
}
-Box::~Box()
+std::ostream& operator <<(std::ostream &os, const Path &path)
{
-}
+ Path::const_iterator i = path.begin();
-unsigned int Box::getPadding()
-{
- return padding;
-}
+ os << "(";
+ while (i != path.end())
+ {
+ os << *i;
+ ++i;
+ if (i != path.end())
+ os << ", ";
+ }
+ os << ")";
-void Box::setPadding(unsigned int p)
-{
- padding = p;
+ return os;
}
diff --git a/src/gui/box.h b/src/position.h
index 46654b48..7beb3ef7 100644
--- a/src/gui/box.h
+++ b/src/position.h
@@ -1,6 +1,6 @@
/*
* The Mana World
- * Copyright 2004 The Mana World Development Team
+ * Copyright 2008 The Mana World Development Team
*
* This file is part of The Mana World.
*
@@ -19,40 +19,40 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+#ifndef TMW_POSITION_H
+#define TMW_POSITION_H
-#ifndef BOX_H
-#define BOX_H
+#include <list>
+#include <iostream>
-#include <guichan/widgets/container.hpp>
-
-#include "../guichanfwd.h"
-
-class Box : public gcn::Container
+/**
+ * A position along a being's path.
+ */
+struct Position
{
- public:
- /**
- * Returns padding.
- */
- unsigned int getPadding();
-
- /**
- * Sets padding between widgets.
- */
- void setPadding(unsigned int);
-
- protected:
- Box();
- virtual ~Box();
-
- /**
- * Spacing between client widgets.
- */
- unsigned int padding;
-
- virtual void draw(gcn::Graphics *) = 0;
-
- typedef std::list<gcn::Widget*> Widgets;
- typedef Widgets::iterator WidgetIterator;
+ /**
+ * Constructor.
+ */
+ Position(int x, int y):
+ x(x), y(y)
+ { }
+
+ int x;
+ int y;
};
-#endif
+typedef std::list<Position> Path;
+typedef Path::iterator PathIterator;
+
+/**
+ * Appends a string representation of a position to the output stream.
+ */
+std::ostream& operator <<(std::ostream &os, const Position &p);
+
+/**
+ * Appends a string representation of a path (sequence of positions) to the
+ * output stream.
+ */
+std::ostream& operator <<(std::ostream &os, const Path &path);
+
+#endif // TMW_POSITION_H
diff --git a/src/properties.h b/src/properties.h
index 2eafeeca..a593e8c2 100644
--- a/src/properties.h
+++ b/src/properties.h
@@ -35,8 +35,7 @@ class Properties
/**
* Destructor.
*/
- virtual
- ~Properties() {}
+ virtual ~Properties() {}
/**
* Get a map property.
@@ -46,8 +45,8 @@ class Properties
* @return the value of the given property or the given default when it
* doesn't exist.
*/
- const std::string&
- getProperty(const std::string &name, const std::string &def = "") const
+ const std::string &getProperty(const std::string &name,
+ const std::string &def = "") const
{
PropertyMap::const_iterator i = mProperties.find(name);
return (i != mProperties.end()) ? i->second : def;
@@ -61,7 +60,7 @@ class Properties
* @return the value of the given property, or 0.0f when it doesn't
* exist.
*/
- float getFloatProperty(std::string const &name, float def = 0.0f) const
+ float getFloatProperty(const std::string &name, float def = 0.0f) const
{
PropertyMap::const_iterator i = mProperties.find(name);
float ret = def;
@@ -81,8 +80,7 @@ class Properties
* @return <code>true</code> when a property is defined,
* <code>false</code> otherwise.
*/
- bool
- hasProperty(const std::string &name) const
+ bool hasProperty(const std::string &name) const
{
return (mProperties.find(name) != mProperties.end());
}
@@ -93,8 +91,7 @@ class Properties
* @param name The name of the property.
* @param value The value of the property.
*/
- void
- setProperty(const std::string &name, const std::string &value)
+ void setProperty(const std::string &name, const std::string &value)
{
mProperties[name] = value;
}
diff --git a/src/resources/dye.cpp b/src/resources/dye.cpp
index 3be105d8..d180d725 100644
--- a/src/resources/dye.cpp
+++ b/src/resources/dye.cpp
@@ -26,7 +26,7 @@
#include "../log.h"
-Palette::Palette(std::string const &description)
+Palette::Palette(const std::string &description)
{
int size = description.length();
if (size == 0) return;
@@ -109,7 +109,7 @@ void Palette::getColor(int intensity, int color[3]) const
color[2] = ((255 - t) * b1 + t * b2) / 255;
}
-Dye::Dye(std::string const &description)
+Dye::Dye(const std::string &description)
{
for (int i = 0; i < 7; ++i)
mPalettes[i] = 0;
@@ -175,7 +175,7 @@ void Dye::update(int color[3]) const
mPalettes[i - 1]->getColor(cmax, color);
}
-void Dye::instantiate(std::string &target, std::string const &palettes)
+void Dye::instantiate(std::string &target, const std::string &palettes)
{
std::string::size_type next_pos = target.find('|');
if (next_pos == std::string::npos || palettes.empty()) return;
diff --git a/src/resources/dye.h b/src/resources/dye.h
index 528a1d91..f0bd7aab 100644
--- a/src/resources/dye.h
+++ b/src/resources/dye.h
@@ -36,7 +36,7 @@ class Palette
* The string is either a file name or a sequence of hexadecimal RGB
* values separated by ',' and starting with '#'.
*/
- Palette(std::string const &);
+ Palette(const std::string &);
/**
* Gets a pixel color depending on its intensity.
@@ -63,7 +63,7 @@ class Dye
* The parts of string are separated by semi-colons. Each part starts
* by an uppercase letter, followed by a colon and then a palette name.
*/
- Dye(std::string const &);
+ Dye(const std::string &);
/**
* Destroys the associated palettes.
@@ -79,7 +79,7 @@ class Dye
* Fills the blank in a dye placeholder with some palette names.
*/
static void instantiate(std::string &target,
- std::string const &palettes);
+ const std::string &palettes);
private:
diff --git a/src/resources/imageloader.cpp b/src/resources/imageloader.cpp
index 29458ba3..835ba100 100644
--- a/src/resources/imageloader.cpp
+++ b/src/resources/imageloader.cpp
@@ -88,7 +88,7 @@ void ProxyImage::convertToDisplayFormat()
mSDLImage = NULL;
}
-gcn::Image *ImageLoader::load(std::string const &filename, bool convert)
+gcn::Image *ImageLoader::load(const std::string &filename, bool convert)
{
ResourceManager *resman = ResourceManager::getInstance();
ProxyImage *i = new ProxyImage(resman->loadSDLSurface(filename));
diff --git a/src/resources/imageloader.h b/src/resources/imageloader.h
index 7979fd2f..821a0254 100644
--- a/src/resources/imageloader.h
+++ b/src/resources/imageloader.h
@@ -61,7 +61,8 @@ class ProxyImage : public gcn::Image
class ImageLoader : public gcn::ImageLoader
{
public:
- gcn::Image *load(std::string const &filename, bool convertToDisplayFormat);
+ gcn::Image *load(const std::string &filename,
+ bool convertToDisplayFormat);
};
#endif
diff --git a/src/resources/itemdb.cpp b/src/resources/itemdb.cpp
index c05d4604..4b3024a7 100644
--- a/src/resources/itemdb.cpp
+++ b/src/resources/itemdb.cpp
@@ -30,6 +30,7 @@
#include "../log.h"
#include "../utils/dtor.h"
+#include "../utils/gettext.h"
#include "../utils/xml.h"
namespace
@@ -53,8 +54,8 @@ void ItemDB::load()
mUnknown = new ItemInfo();
mUnknown->setName("Unknown item");
mUnknown->setImageName("");
- mUnknown->setSprite("error.xml", 0);
- mUnknown->setSprite("error.xml", 1);
+ mUnknown->setSprite("error.xml", GENDER_MALE);
+ mUnknown->setSprite("error.xml", GENDER_FEMALE);
XML::Document doc("items.xml");
xmlNodePtr rootNode = doc.rootNode();
@@ -93,9 +94,9 @@ void ItemDB::load()
if (id)
{
- ItemInfo *itemInfo = new ItemInfo();
+ ItemInfo *itemInfo = new ItemInfo;
itemInfo->setImageName(image);
- itemInfo->setName((name == "") ? "Unnamed" : name);
+ itemInfo->setName(name.empty() ? _("Unnamed") : name);
itemInfo->setDescription(description);
itemInfo->setEffect(effect);
itemInfo->setType(type);
@@ -172,12 +173,12 @@ void loadSpriteRef(ItemInfo *itemInfo, xmlNodePtr node)
if (gender == "male" || gender == "unisex")
{
- itemInfo->setSprite(filename, 0);
+ itemInfo->setSprite(filename, GENDER_MALE);
}
if (gender == "female" || gender == "unisex")
{
- itemInfo->setSprite(filename, 1);
+ itemInfo->setSprite(filename, GENDER_FEMALE);
}
}
diff --git a/src/resources/iteminfo.cpp b/src/resources/iteminfo.cpp
index fb2c8ffe..201b8ca9 100644
--- a/src/resources/iteminfo.cpp
+++ b/src/resources/iteminfo.cpp
@@ -24,7 +24,7 @@
#include "itemdb.h"
const std::string&
-ItemInfo::getSprite(int gender) const
+ItemInfo::getSprite(Gender gender) const
{
if (mView)
{
diff --git a/src/resources/iteminfo.h b/src/resources/iteminfo.h
index 4678bc08..b7729d2c 100644
--- a/src/resources/iteminfo.h
+++ b/src/resources/iteminfo.h
@@ -28,6 +28,8 @@
#include "spritedef.h"
+#include "../being.h"
+
enum EquipmentSoundEvent
{
EQUIP_EVENT_STRIKE,
@@ -91,10 +93,10 @@ class ItemInfo
void setView(int view)
{ mView = view; }
- void setSprite(const std::string &animationFile, int gender)
+ void setSprite(const std::string &animationFile, Gender gender)
{ mAnimationFiles[gender] = animationFile; }
- const std::string& getSprite(int gender) const;
+ const std::string& getSprite(Gender gender) const;
void setWeaponType(int);
diff --git a/src/resources/mapreader.cpp b/src/resources/mapreader.cpp
index 835e52b3..4e116889 100644
--- a/src/resources/mapreader.cpp
+++ b/src/resources/mapreader.cpp
@@ -304,7 +304,8 @@ void MapReader::readProperties(xmlNodePtr node, Properties *props)
static void setTile(Map *map, MapLayer *layer, int x, int y, int gid)
{
const Tileset * const set = map->getTilesetWithGid(gid);
- if (layer) {
+ if (layer)
+ {
// Set regular tile on a layer
Image * const img = set ? set->get(gid - set->getFirstGid()) : 0;
layer->setTile(x, y, img);
@@ -407,6 +408,12 @@ void MapReader::readLayer(xmlNodePtr node, Map *map)
setTile(map, layer, x, y, gid);
+ TileAnimation* ani = map->getAnimationForGid(gid);
+ if (ani)
+ {
+ ani->addAffectedTile(layer, x + y * w);
+ }
+
x++;
if (x == w) {
x = 0; y++;
@@ -452,10 +459,12 @@ Tileset *MapReader::readTileset(xmlNodePtr node,
const std::string &path,
Map *map)
{
+ Tileset *set = NULL;
+
if (xmlHasProp(node, BAD_CAST "source"))
{
logger->log("Warning: External tilesets not supported yet.");
- return NULL;
+ return set;
}
const int firstGid = XML::getProperty(node, "firstgid", 0);
@@ -464,34 +473,69 @@ Tileset *MapReader::readTileset(xmlNodePtr node,
for_each_xml_child_node(childNode, node)
{
- if (!xmlStrEqual(childNode->name, BAD_CAST "image"))
- continue;
+ if (xmlStrEqual(childNode->name, BAD_CAST "image"))
+ {
+ const std::string source = XML::getProperty(childNode, "source", "");
- const std::string source = XML::getProperty(childNode, "source", "");
+ if (!source.empty())
+ {
+ std::string sourceStr = source;
+ sourceStr.erase(0, 3); // Remove "../"
+
+ ResourceManager *resman = ResourceManager::getInstance();
+ Image* tilebmp = resman->getImage(sourceStr);
- if (!source.empty())
+ if (tilebmp)
+ {
+ set = new Tileset(tilebmp, tw, th, firstGid);
+ tilebmp->decRef();
+ }
+ else {
+ logger->log("Warning: Failed to load tileset (%s)",
+ source.c_str());
+ }
+ }
+ }
+ else if (xmlStrEqual(childNode->name, BAD_CAST "tile"))
{
- std::string sourceStr = source;
- sourceStr.erase(0, 3); // Remove "../"
+ for_each_xml_child_node(tileNode, childNode)
+ {
+ if (!xmlStrEqual(tileNode->name, BAD_CAST "properties")) continue;
- ResourceManager *resman = ResourceManager::getInstance();
- Image* tilebmp = resman->getImage(sourceStr);
+ int tileGID = firstGid + XML::getProperty(childNode, "id", 0);
- if (tilebmp)
- {
- Tileset *set = new Tileset(tilebmp, tw, th, firstGid);
- tilebmp->decRef();
- return set;
- }
- else {
- logger->log("Warning: Failed to load tileset (%s)",
- source.c_str());
+ // read tile properties to a map for simpler handling
+ std::map<std::string, int> tileProperties;
+ for_each_xml_child_node(propertyNode, tileNode)
+ {
+ if (!xmlStrEqual(propertyNode->name, BAD_CAST "property")) continue;
+ std::string name = XML::getProperty(propertyNode, "name", "");
+ int value = XML::getProperty(propertyNode, "value", 0);
+ tileProperties[name] = value;
+ logger->log("Tile Prop of %d \"%s\" = \"%d\"", tileGID, name.c_str(), value);
+ }
+
+ // create animation
+ if (!set) continue;
+
+ Animation *ani = new Animation();
+ for (int i = 0; ;i++)
+ {
+ std::map<std::string, int>::iterator iFrame, iDelay;
+ iFrame = tileProperties.find("animation-frame" + toString(i));
+ iDelay = tileProperties.find("animation-delay" + toString(i));
+ if (iFrame != tileProperties.end() && iDelay != tileProperties.end())
+ {
+ ani->addFrame(set->get(iFrame->second), iDelay->second, 0, 0);
+ } else {
+ break;
+ }
+ }
+ map->addAnimation(tileGID, new TileAnimation(ani));
+ logger->log("Animation length: %d", ani->getLength());
}
}
-
- // Only one image element expected
- break;
}
- return NULL;
+ return set;
}
diff --git a/src/resources/resourcemanager.cpp b/src/resources/resourcemanager.cpp
index a1965d57..3d42d92e 100644
--- a/src/resources/resourcemanager.cpp
+++ b/src/resources/resourcemanager.cpp
@@ -215,7 +215,7 @@ std::string ResourceManager::getPath(const std::string &file)
return path;
}
-Resource *ResourceManager::get(std::string const &idPath, generator fun,
+Resource *ResourceManager::get(const std::string &idPath, generator fun,
void *data)
{
// Check if the id exists, and return the value if it does.
@@ -267,7 +267,7 @@ struct ResourceLoader
}
};
-Resource *ResourceManager::load(std::string const &path, loader fun)
+Resource *ResourceManager::load(const std::string &path, loader fun)
{
ResourceLoader l = { this, path, fun };
return get(path, ResourceLoader::load, &l);
@@ -309,7 +309,7 @@ struct DyedImageLoader
}
};
-Image *ResourceManager::getImage(std::string const &idPath)
+Image *ResourceManager::getImage(const std::string &idPath)
{
DyedImageLoader l = { this, idPath };
return static_cast<Image*>(get(idPath, DyedImageLoader::load, &l));
@@ -351,8 +351,7 @@ struct SpriteDefLoader
}
};
-SpriteDef *ResourceManager::getSprite
- (std::string const &path, int variant)
+SpriteDef *ResourceManager::getSprite(const std::string &path, int variant)
{
SpriteDefLoader l = { path, variant };
std::stringstream ss;
@@ -381,7 +380,8 @@ void ResourceManager::release(Resource *res)
ResourceManager *ResourceManager::getInstance()
{
// Create a new instance if necessary.
- if (instance == NULL) instance = new ResourceManager();
+ if (!instance)
+ instance = new ResourceManager();
return instance;
}
diff --git a/src/resources/resourcemanager.h b/src/resources/resourcemanager.h
index c1007f4a..e70dfb9d 100644
--- a/src/resources/resourcemanager.h
+++ b/src/resources/resourcemanager.h
@@ -98,7 +98,8 @@ class ResourceManager
bool isDirectory(const std::string &path);
/**
- * Returns the real path to a file
+ * Returns the real path to a file. Note that this method will always
+ * return a path, it does not check whether the file exists.
*
* @param file The file to get the real path to.
* @return The real path.
@@ -114,7 +115,7 @@ class ResourceManager
* @return A valid resource or <code>NULL</code> if the resource could
* not be generated.
*/
- Resource *get(std::string const &idPath, generator fun, void *data);
+ Resource *get(const std::string &idPath, generator fun, void *data);
/**
* Loads a resource from a file and adds it to the resource map.
@@ -124,7 +125,7 @@ class ResourceManager
* @return A valid resource or <code>NULL</code> if the resource could
* not be loaded.
*/
- Resource *load(std::string const &path, loader fun);
+ Resource *load(const std::string &path, loader fun);
/**
* Convenience wrapper around ResourceManager::get for loading
@@ -154,7 +155,7 @@ class ResourceManager
* Creates a sprite definition based on a given path and the supplied
* variant.
*/
- SpriteDef *getSprite(std::string const &path, int variant = 0);
+ SpriteDef *getSprite(const std::string &path, int variant = 0);
/**
* Releases a resource, placing it in the set of orphaned resources.
diff --git a/src/resources/spritedef.cpp b/src/resources/spritedef.cpp
index 3eb1d92b..28db0452 100644
--- a/src/resources/spritedef.cpp
+++ b/src/resources/spritedef.cpp
@@ -46,7 +46,7 @@ Action *SpriteDef::getAction(SpriteAction action) const
return i->second;
}
-SpriteDef *SpriteDef::load(std::string const &animationFile, int variant)
+SpriteDef *SpriteDef::load(const std::string &animationFile, int variant)
{
std::string::size_type pos = animationFile.find('|');
std::string palettes;
@@ -121,7 +121,7 @@ void SpriteDef::loadSprite(xmlNodePtr spriteNode, int variant,
}
}
-void SpriteDef::loadImageSet(xmlNodePtr node, std::string const &palettes)
+void SpriteDef::loadImageSet(xmlNodePtr node, const std::string &palettes)
{
const std::string name = XML::getProperty(node, "name", "");
@@ -146,8 +146,7 @@ void SpriteDef::loadImageSet(xmlNodePtr node, std::string const &palettes)
mImageSets[name] = imageSet;
}
-void
-SpriteDef::loadAction(xmlNodePtr node, int variant_offset)
+void SpriteDef::loadAction(xmlNodePtr node, int variant_offset)
{
const std::string actionName = XML::getProperty(node, "name", "");
const std::string imageSetName = XML::getProperty(node, "imageset", "");
@@ -187,10 +186,9 @@ SpriteDef::loadAction(xmlNodePtr node, int variant_offset)
}
}
-void
-SpriteDef::loadAnimation(xmlNodePtr animationNode,
- Action *action, ImageSet *imageSet,
- int variant_offset)
+void SpriteDef::loadAnimation(xmlNodePtr animationNode,
+ Action *action, ImageSet *imageSet,
+ int variant_offset)
{
const std::string directionName =
XML::getProperty(animationNode, "direction", "");
@@ -267,8 +265,7 @@ SpriteDef::loadAnimation(xmlNodePtr animationNode,
} // for frameNode
}
-void
-SpriteDef::includeSprite(xmlNodePtr includeNode)
+void SpriteDef::includeSprite(xmlNodePtr includeNode)
{
// TODO: Perform circular dependency check, since it's easy to crash the
// client this way.
@@ -289,8 +286,7 @@ SpriteDef::includeSprite(xmlNodePtr includeNode)
loadSprite(rootNode, 0);
}
-void
-SpriteDef::substituteAction(SpriteAction complete, SpriteAction with)
+void SpriteDef::substituteAction(SpriteAction complete, SpriteAction with)
{
if (mActions.find(complete) == mActions.end())
{
@@ -324,8 +320,7 @@ SpriteDef::~SpriteDef()
}
}
-SpriteAction
-SpriteDef::makeSpriteAction(const std::string& action)
+SpriteAction SpriteDef::makeSpriteAction(const std::string &action)
{
if (action == "" || action == "default") {
return ACTION_DEFAULT;
@@ -377,8 +372,7 @@ SpriteDef::makeSpriteAction(const std::string& action)
}
}
-SpriteDirection
-SpriteDef::makeSpriteDirection(const std::string& direction)
+SpriteDirection SpriteDef::makeSpriteDirection(const std::string& direction)
{
if (direction == "" || direction == "default") {
return DIRECTION_DEFAULT;
@@ -397,5 +391,5 @@ SpriteDef::makeSpriteDirection(const std::string& direction)
}
else {
return DIRECTION_INVALID;
- };
+ }
}
diff --git a/src/resources/spritedef.h b/src/resources/spritedef.h
index 88f9b7b7..49a4ca51 100644
--- a/src/resources/spritedef.h
+++ b/src/resources/spritedef.h
@@ -71,7 +71,7 @@ class SpriteDef : public Resource
/**
* Loads a sprite definition file.
*/
- static SpriteDef *load(std::string const &file, int variant);
+ static SpriteDef *load(const std::string &file, int variant);
/**
* Returns the specified action.
@@ -81,8 +81,7 @@ class SpriteDef : public Resource
/**
* Converts a string into a SpriteAction enum.
*/
- static SpriteAction
- makeSpriteAction(const std::string &action);
+ static SpriteAction makeSpriteAction(const std::string &action);
/**
* Converts a string into a SpriteDirection enum.
@@ -111,27 +110,24 @@ class SpriteDef : public Resource
/**
* Loads an imageset element.
*/
- void loadImageSet(xmlNodePtr node, std::string const &palettes);
+ void loadImageSet(xmlNodePtr node, const std::string &palettes);
/**
* Loads an action element.
*/
- void
- loadAction(xmlNodePtr node, int variant_offset);
+ void loadAction(xmlNodePtr node, int variant_offset);
/**
* Loads an animation element.
*/
- void
- loadAnimation(xmlNodePtr animationNode,
- Action *action, ImageSet *imageSet,
- int variant_offset);
+ void loadAnimation(xmlNodePtr animationNode,
+ Action *action, ImageSet *imageSet,
+ int variant_offset);
/**
* Include another sprite into this one.
*/
- void
- includeSprite(xmlNodePtr includeNode);
+ void includeSprite(xmlNodePtr includeNode);
/**
* Complete missing actions by copying existing ones.
@@ -142,8 +138,7 @@ class SpriteDef : public Resource
* When there are no animations defined for the action "complete", its
* animations become a copy of those of the action "with".
*/
- void
- substituteAction(SpriteAction complete, SpriteAction with);
+ void substituteAction(SpriteAction complete, SpriteAction with);
typedef std::map<std::string, ImageSet*> ImageSets;
diff --git a/src/gui/hbox.h b/src/utils/gettext.h
index 4b241383..0cd9114b 100644
--- a/src/gui/hbox.h
+++ b/src/utils/gettext.h
@@ -1,6 +1,6 @@
/*
* The Mana World
- * Copyright 2004 The Mana World Development Team
+ * Copyright 2007 The Mana World Development Team
*
* This file is part of The Mana World.
*
@@ -19,15 +19,26 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-#ifndef HBOX_H
-#define HBOX_H
+#ifndef _TMW_UTILS_GETTEXT_H
+#define _TMW_UTILS_GETTEXT_H
-#include "box.h"
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#if ENABLE_NLS
+
+#include <libintl.h>
+
+#define _(s) ((char const *)gettext(s))
+#define N_(s) ((char const *)s)
-class HBox : public Box
-{
- public:
- void draw(gcn::Graphics *);
-};
+#else
+
+#define gettext(s) ((char const *)s)
+#define _(s) ((char const *)s)
+#define N_(s) ((char const *)s)
+
+#endif
#endif
diff --git a/src/gui/vbox.h b/src/vector.cpp
index 2072ab24..7d5f055a 100644
--- a/src/gui/vbox.h
+++ b/src/vector.cpp
@@ -1,6 +1,6 @@
/*
* The Mana World
- * Copyright 2004 The Mana World Development Team
+ * Copyright 2007 The Mana World Development Team
*
* This file is part of The Mana World.
*
@@ -19,15 +19,10 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-#ifndef VBOX_H
-#define VBOX_H
+#include "vector.h"
-#include "box.h"
-
-class VBox : public Box
+std::ostream& operator <<(std::ostream &os, const Vector &v)
{
- public:
- void draw(gcn::Graphics *);
-};
-
-#endif
+ os << "Vector(" << v.x << ", " << v.y << ", " << v.z << ")";
+ return os;
+}
diff --git a/src/vector.h b/src/vector.h
index b19f6c64..f32b201a 100644
--- a/src/vector.h
+++ b/src/vector.h
@@ -22,6 +22,10 @@
#ifndef _TMW_VECTOR_H_
#define _TMW_VECTOR_H_
+#include <math.h>
+
+#include <iostream>
+
/**
* Vector class. Represents either a 3D point in space, a velocity or a force.
* Provides several convenient operator overloads.
@@ -41,7 +45,7 @@ class Vector
/**
* Constructor.
*/
- Vector(float x, float y, float z):
+ Vector(float x, float y, float z = 0.0f):
x(x),
y(y),
z(z)
@@ -69,11 +73,12 @@ class Vector
/**
* In-place scale vector operator.
*/
- void operator*=(float c)
+ Vector &operator*=(float c)
{
x *= c;
y *= c;
z *= c;
+ return *this;
}
/**
@@ -87,6 +92,17 @@ class Vector
}
/**
+ * In-place scale vector operator.
+ */
+ Vector &operator/=(float c)
+ {
+ x /= c;
+ y /= c;
+ z /= c;
+ return *this;
+ }
+
+ /**
* Add vector operator.
*/
Vector operator+(const Vector &v) const
@@ -99,11 +115,12 @@ class Vector
/**
* In-place add vector operator.
*/
- void operator+=(const Vector &v)
+ Vector &operator+=(const Vector &v)
{
x += v.x;
y += v.y;
z += v.z;
+ return *this;
}
/**
@@ -119,14 +136,55 @@ class Vector
/**
* In-place substract vector operator.
*/
- void operator-=(const Vector &v)
+ Vector &operator-=(const Vector &v)
{
x -= v.x;
y -= v.y;
z -= v.z;
+ return *this;
+ }
+
+ /**
+ * Returns the length of this vector. This method does a relatively
+ * slow square root.
+ */
+ float length() const
+ {
+ return sqrtf(x * x + y * y + z * z);
+ }
+
+ /**
+ * Returns the squared length of this vector. Avoids the square root.
+ */
+ float squaredLength() const
+ {
+ return x * x + y * y + z * z;
+ }
+
+ /**
+ * Returns the manhattan length of this vector.
+ */
+ float manhattanLength() const
+ {
+ return fabsf(x) + fabsf(y) + fabsf(z);
+ }
+
+ /**
+ * Returns a normalized version of this vector. This is a unit vector
+ * running parallel to it.
+ */
+ Vector normalized() const
+ {
+ const float l = length();
+ return Vector(x / l, y / l, z / l);
}
float x, y, z;
};
-#endif
+/**
+ * Appends a string representation of a vector to the output stream.
+ */
+std::ostream& operator <<(std::ostream &os, const Vector &v);
+
+#endif // _TMW_VECTOR_H_
diff --git a/tmw.cbp b/tmw.cbp
index f3dc7258..c7d37951 100644
--- a/tmw.cbp
+++ b/tmw.cbp
@@ -10,6 +10,7 @@
<Option output="tmw.exe" prefix_auto="0" extension_auto="0" />
<Option type="0" />
<Option compiler="gcc" />
+ <Option parameters='-u -d &quot;D:/tmw/data&quot;' />
<Option projectResourceIncludeDirsRelation="0" />
<Compiler>
<Add option="-Wall" />
@@ -99,8 +100,6 @@
<Unit filename="src\game.h" />
<Unit filename="src\graphics.cpp" />
<Unit filename="src\graphics.h" />
- <Unit filename="src\gui\box.cpp" />
- <Unit filename="src\gui\box.h" />
<Unit filename="src\gui\browserbox.cpp" />
<Unit filename="src\gui\browserbox.h" />
<Unit filename="src\gui\buddywindow.cpp" />
@@ -135,8 +134,6 @@
<Unit filename="src\gui\gccontainer.h" />
<Unit filename="src\gui\gui.cpp" />
<Unit filename="src\gui\gui.h" />
- <Unit filename="src\gui\hbox.cpp" />
- <Unit filename="src\gui\hbox.h" />
<Unit filename="src\gui\help.cpp" />
<Unit filename="src\gui\help.h" />
<Unit filename="src\gui\inttextbox.cpp" />
@@ -182,6 +179,8 @@
<Unit filename="src\gui\register.h" />
<Unit filename="src\gui\scrollarea.cpp" />
<Unit filename="src\gui\scrollarea.h" />
+ <Unit filename="src\gui\sdlinput.cpp" />
+ <Unit filename="src\gui\sdlinput.h" />
<Unit filename="src\gui\selectionlistener.h" />
<Unit filename="src\gui\sell.cpp" />
<Unit filename="src\gui\sell.h" />
@@ -224,10 +223,10 @@
<Unit filename="src\gui\truetypefont.h" />
<Unit filename="src\gui\updatewindow.cpp" />
<Unit filename="src\gui\updatewindow.h" />
- <Unit filename="src\gui\vbox.cpp" />
- <Unit filename="src\gui\vbox.h" />
<Unit filename="src\gui\viewport.cpp" />
<Unit filename="src\gui\viewport.h" />
+ <Unit filename="src\gui\widgets\layout.cpp" />
+ <Unit filename="src\gui\widgets\layout.h" />
<Unit filename="src\gui\widgets\resizegrip.cpp" />
<Unit filename="src\gui\widgets\resizegrip.h" />
<Unit filename="src\gui\window.cpp" />
diff --git a/tools/adler32.c b/tools/adler32.c
index 4e851713..5dd7e4c1 100644
--- a/tools/adler32.c
+++ b/tools/adler32.c
@@ -7,6 +7,7 @@
* Usage: adler32 [file]...
*/
+#include <stdlib.h>
#include <stdio.h>
#include <zlib.h>
diff --git a/tools/tmxcopy/main.cpp b/tools/tmxcopy/main.cpp
index 92a69c54..f50c0af4 100644
--- a/tools/tmxcopy/main.cpp
+++ b/tools/tmxcopy/main.cpp
@@ -28,7 +28,7 @@ int main(int argc, char * argv[] )
// parsing command line options
if (argc < 9 || argc > 10)
{
- std::cerr<<"Usage: srcFile x y width height tgtFile x y [outfile]";
+ std::cerr<<"Usage: srcFile x y width height tgtFile x y [outfile]\n";
return -1;
}
diff --git a/tools/tmxcopy/map.cpp b/tools/tmxcopy/map.cpp
index b554aac2..82fe0f8f 100644
--- a/tools/tmxcopy/map.cpp
+++ b/tools/tmxcopy/map.cpp
@@ -23,6 +23,7 @@
#include <map>
#include <list>
+#include <string.h>
#include <zlib.h>
#include "xmlutils.h"
diff --git a/tools/upalyzer/analyze.php b/tools/upalyzer/analyze.php
index 106fcbb5..43057af1 100644
--- a/tools/upalyzer/analyze.php
+++ b/tools/upalyzer/analyze.php
@@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
header("Content-type: text/html");
-header("Cache-Control: no-store, no-cache, must-revalidate");
+header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
@@ -31,6 +31,8 @@ header("Pragma: no-cache");
List of current updates:
<?php
+$download_url_base = 'http://updates.themanaworld.org/tmwdata/';
+$checkout_path = '/home/eathena/public_html/updates/tmwdata/';
$update_file = array_filter(array_reverse(file('resources2.txt')));
$updates = array();
$update_file_maxlen = 0;
@@ -62,16 +64,20 @@ foreach ($update_file as $update_line)
$update['uncompressed_size'] += zip_entry_filesize($zip_entry);
$entry_name = zip_entry_name($zip_entry);
$entry_size = zip_entry_compressedsize($zip_entry);
+ $entry_exists = file_exists($checkout_path . $entry_name);
$entry_used = !array_key_exists($entry_name, $update_entries);
$entries[$entry_name] = array(
'name' => $entry_name,
'size' => $entry_size,
- 'used' => $entry_used);
+ 'used' => $entry_used,
+ 'obsolete' => !$entry_exists);
$update['size'] += $entry_size;
if ($entry_used) {
- $update['used_entry_count']++;
- $update['used_size'] += $entry_size;
+ if ($entry_exists) {
+ $update['used_entry_count']++;
+ $update['used_size'] += $entry_size;
+ }
$update_entries[$entry_name] = $update;
}
@@ -107,7 +113,7 @@ function print_update_name($update, $pad = true)
foreach (array_reverse($updates) as $update)
{
print_update_name($update);
- echo ' '. $update['adler32'];
+ printf(" %8s", $update['adler32']);
printf(" %4d kb", $update['filesize'] / 1024);
if (!$update['zip_error']) {
printf(" %4d kb", $update['uncompressed_size'] / 1024);
@@ -140,8 +146,14 @@ ksort($update_entries);
foreach ($update_entries as $entry => $update)
{
- printf("%-{$update_entry_maxlen}s ", $entry);
- print_update_name($update, false);
+ $exists = file_exists($checkout_path . $entry);
+ printf("<span style=\"color: %s;\">%-{$update_entry_maxlen}s</span> ",
+ $exists ? "black" : "rgb(100,100,100)",
+ $entry);
+ print_update_name($update, true);
+
+ if ($exists && substr($entry, strlen($entry) - 1) != '/')
+ printf(' <a href="%s%s">download</a>', $download_url_base, $entry);
echo "\n";
}
@@ -153,10 +165,13 @@ foreach (array_reverse($updates) as $update)
print "\n<a name=\"".$update['file']."\"/><b>".$update['file']."</b>\n";
foreach ($update['entries'] as $entry_name => $entry) {
- printf("%-{$update_entry_maxlen}s", $entry_name);
- if ($entry['used']) {
+ printf("%s%-{$update_entry_maxlen}s%s",
+ $entry['obsolete'] ? "<span style=\"color: rgb(100,100,100);\">" : "",
+ $entry_name,
+ $entry['obsolete'] ? "</span>" : "");
+ if ($entry['used'] && !$entry['obsolete']) {
echo ' *';
- } else {
+ } elseif (!$entry['obsolete']) {
echo ' ';
print_update_name($update_entries[$entry_name], false);
}