about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMagnus Auvinen <magnus.auvinen@gmail.com>2009-06-15 07:34:25 +0000
committerMagnus Auvinen <magnus.auvinen@gmail.com>2009-06-15 07:34:25 +0000
commitab171f8f303306f5b45e2ccaa4c47404b11b0256 (patch)
tree379a16543832b67012694d04b077b666efafd9f1
parentf9ef0293ff882b97cfe650e92fe0844c8920f4e3 (diff)
downloadzcatch-ab171f8f303306f5b45e2ccaa4c47404b11b0256.tar.gz
zcatch-ab171f8f303306f5b45e2ccaa4c47404b11b0256.zip
updated localization
-rw-r--r--data/languages/swedish.txt520
-rw-r--r--scripts/update_localization.py12
-rw-r--r--src/game/client/components/chat.cpp8
-rw-r--r--src/game/client/components/menus.cpp6
-rw-r--r--src/game/client/components/menus_browser.cpp18
-rw-r--r--src/game/client/components/menus_demo.cpp10
-rw-r--r--src/game/client/components/menus_ingame.cpp65
-rw-r--r--src/game/client/components/menus_settings.cpp48
-rw-r--r--src/game/client/components/scoreboard.cpp28
-rw-r--r--src/game/localization.cpp2
10 files changed, 402 insertions, 315 deletions
diff --git a/data/languages/swedish.txt b/data/languages/swedish.txt
index f96ea220..ab8719f9 100644
--- a/data/languages/swedish.txt
+++ b/data/languages/swedish.txt
@@ -1,366 +1,438 @@
 
 ##### translated strings #####
 
-Fullscreen
-== Fullskärm
+%d of %d servers, %d players
+== %d av %d servrar, %d spelare
 
-Loading
-== Laddar
+Abort
+== Avbryt
 
-Ping
-== Ping
+Address
+== Address
 
-Next Weapon:
-== Nästa vapen:
+All
+== Alla
 
-Internet
-== Internet
+Alpha
+== Alpha
 
-Use sounds
-== Använd ljudeffekter
+Always show name plates
+== Visa alltid namnskyltar
 
-Body
-== Kropp
+Are you sure that you want to quit?
+== Är du säker på att du vill avsluta?
 
-Ping:
-== Ping:
+As this is the first time you launch the game, please enter your nick name below. It's recommended that you check the settings to adjust them to your liking before joining a server.
+== Detta är första gången du startar spelet, var vänligen skriv in ditt smeknamn här nedanför. Det är rekommenderat att du kollar inställningarna och justerar dom till din preferens innan du börjar spela.
 
-Show name plates
-== Visa namnskyltar
+Blue team
+== Blåa laget
 
-Quality Textures
-== Kvalitets texturer
+Blue team wins!
+== Röda laget vann!
 
-News
-== Nyheter
+Body
+== Kropp
 
-Sound
-== Ljud
+Call vote
+== Omröstning
 
-Ok
-== Ok
+Chat
+== Chatt
 
-Call Vote
-== Starta omröstning
+Chat:
+== Chatt:
 
-Favorite
-== Favorit
+Close
+== Stäng
 
-Try again
-== Försök igen
+Compatible version
+== Kompatibel version
 
-Refresh
-== Uppdatera
+Connect
+== Anslut
 
-FSAA samples
-== FSAA samplingar
+Connecting to
+== Ansluter till
 
-No servers match your filter criteria
-== Inga servrar matchar dina filter kriterer
+Console
+== Konsol
 
-Welcome to Teeworlds
-== Välkommen till Teeworlds
+Controls
+== Kontroller
 
-Voting
-== Röstning
+Current
+== Nuvarande
 
-Sat.
-== Mättnad
+Current version: %s
+== Nuvarande version: %s
 
-LAN
-== LAN
+Custom colors
+== Egna färger
 
-Prev. Weapon:
-== Föregående vapen:
+Demos
+== Demon
 
-Standard gametype
-== Standard speltyp
+Disconnect
+== Avsluta
 
-Skins
-== Utseende
+Disconnected
+== Frånkopplad
 
-Quit
-== Avsluta
+Display Modes
+== Skärmlägen
 
-Has people playing
-== Har folk som spelar
+Downloading map
+== Laddar ner karta
 
-Version:
-== Version:
+Draw!
+== Oavgjort!
 
 Dynamic Camera
 == Dynamisk kamera
 
-Remote Console:
-== Serverkonsol:
+Emoticon
+== Känsloikon
 
-Type
-== Typ
+Enter
+== Fortsätt
 
-Disconnected
-== Frånkopplad
+FSAA samples
+== FSAA samplingar
+
+Favorite
+== Favorit
+
+Favorites
+== Favoriter
 
 Feet
 == Fötter
 
-Show only supported
-== Visa endast upplösningar som stöds
+Filter
+== Filter
 
-Miscellaneous
-== Övrigt
+Fire
+== Skjuta
 
-Nickname:
-== Smeknamn:
+Fullscreen
+== Fullskärm
 
 Game
 == Spel
 
-Screenshot:
-== Skärmdump
+Game info
+== Spel info.
 
-Teeworlds %s is out! Download it at www.teeworlds.com!
-== Teeworld %s är släppt! Ladda ner det på www.teeworlds.com!
+Game type
+== Speltyp
 
-Grenade:
-== Granater:
+Game types
+== Speltyper
 
-Connect
-== Anslut
+Graphics
+== Grafik
 
-Info
-== Info
+Grenade
+== Granater
 
-No password
-== Inget lösenord
+Hammer
+== Hammare
 
-Team Chat:
-== Lagchatt:
+Has people playing
+== Har folk som spelar
 
-Refreshing master servers
-== Uppdaterar huvudservrar
+High Detail
+== Extra detaljer
 
-Settings
-== Inställningar
+Hook
+== Haken
 
-Custom colors
-== Egna färger
+Host address
+== Serveraddress
 
-Emoticon:
-== Känsloikon
+Hue
+== Nyans
 
-Server details:
-== Server detaljer:
+Info
+== Info
 
-Shotgun:
-== Hagelgevär:
+Internet
+== Internet
 
-UI Color
-== Gränssnittfärg
+Join blue
+== Spela i blått
 
-Sample rate
-== Samplingsfrekvens
+Join game
+== Spela
 
-Move Left:
-== Gå vänster:
+Join red
+== Spela i rött
 
-V-Sync
-== V-Sync
+Jump
+== Hoppa
 
-Chat
-== Chatt
+Kick
+== Sparka
 
-Yes
-== Ja
+LAN
+== LAN
 
-Console:
-== Konsol:
+Lht.
+== Ljusstyrka
 
-High Detail
-== Extra detaljer
+Loading
+== Laddar
 
-No
-== Nej
+MOTD
+== Meddelande
 
-Reset filter
-== Återställ filter
+Map
+== Karta
 
-Mute when not active
-== Stäng av ljudet när spelet inte är aktivt
+Maximum ping
+== Högsta ping
 
-Password Incorrect
-== Felaktigt lösenord
+Miscellaneous
+== Övrigt
 
-Sound volume
-== Ljud volym
+Mouse sens.
+== Muskänslighet
+
+Move left
+== Gå vänster
 
-Vote No:
-== Rösta nej:
+Move right
+== Gå höger
 
 Movement
 == Förflyttning
 
-Hue
-== Nyans
+Mute when not active
+== Stäng av ljudet när spelet inte är aktivt
 
-As this is the first time you launch the game, please enter your nick name below. It's recommended that you check the settings to adjust them to your liking before joining a server.
-== Detta är första gången du startar spelet, var vänligen skriv in ditt smeknamn här nedanför. Det är rekommenderat att du kollar inställningarna och justerar dom till din preferens innan du börjar spela.
+Name
+== Namn
 
-Rifle:
-== Gevär:
+News
+== Nyheter
 
-Switch weapon on pickup
-== Byt vapen vid upplock
+Next weapon
+== Nästa vapen
 
-Compatible version
-== Kompatibel version
+Nickname:
+== Smeknamn:
 
-Standard map
-== Standard karta
+No
+== Nej
 
-Fire:
-== Skjuta:
+No password
+== Inget lösenord
 
-Host address:
-== Serveraddress
+No servers found
+== Inga servrar hittade
 
-Weapon
-== Vapen
+No servers match your filter criteria
+== Inga servrar matchar dina filter kriterer
 
-Display Modes
-== Skärmlägen
+Ok
+== Ok
 
-Filter
-== Filter
+Password
+== Lösenord
 
-Move Right:
-== Gå höger
+Password Incorrect
+== Felaktigt lösenord
 
-Controls
-== Kontroller
+Password:
+== Lösenord:
 
-Lht.
-== Ljusstyrka
+Ping
+== Ping
 
-Server not full
-== Inte full server
+Pistol
+== Pistol
 
-Chat:
-== Chatt:
+Play
+== Spela
+
+Player
+== Spelare
+
+Players
+== Spelare
+
+Prev. weapon
+== Föregående vapen
+
+Quality Textures
+== Kvalitets texturer
 
 Quick search:
 == Snabbsök:
 
-%d of %d servers, %d players
-== %d av %d servrar, %d spelare
+Quit
+== Avsluta
 
-Demos
-== Demon
+Red team
+== Röda laget
 
-Abort
-== Avbryt
+Red team wins!
+== Röda laget vann!
 
-Always show name plates
-== Visa alltid namnskyltar
+Refresh
+== Uppdatera
 
-Are you sure that you want to quit?
-== Är du säker på att du vill avsluta?
+Refreshing master servers
+== Uppdaterar huvudservrar
 
-Scoreboard:
-== Poänglista
+Remote console
+== Serverkonsol
 
-Mouse sens.
-== Muskänslighet
+Reset filter
+== Återställ filter
 
 Reset to defaults
 == Återställ till standard
 
-Current
-== Nuvarande
+Rifle
+== Gevär
 
-Hook:
-== Haken:
+Round
+== Runda
 
-Map
-== Karta
+Sample rate
+== Samplingsfrekvens
 
-Texture Compression
-== Texturkompression
+Sat.
+== Mättnad
 
-Connecting to
-== Ansluter till
+Score
+== Poäng
 
-Favorites
-== Favoriter
+Score board
+== Poängtavla
 
-Graphics
-== Grafik
+Score limit
+== Poängmål
 
-Alpha
-== Alpha
+Scoreboard
+== Poänglista
 
-Name:
-== Namn:
+Screenshot
+== Skärmdump
 
-Game types:
-== Speltyper:
+Server details
+== Serverdetaljer
 
-Name
-== Namn
+Server info
+== Server info.
 
-You must restart the game for all settings to take effect.
-== Du måste starta om spelet för att ändringarna skall gälla.
+Server not full
+== Inte full server
 
-Maximum ping
-== Högsta ping
+Settings
+== Inställningar
 
-Players
-== Spelare
+Shotgun
+== Hagelgevär
 
-Downloading map
-== Laddar ner karta
+Show name plates
+== Visa namnskyltar
 
-Enter
-== Fortsätt
+Show only supported
+== Visa endast upplösningar som stöds
 
-Jump:
-== Hoppa:
+Skins
+== Utseende
 
-Game Type:
-== Speltyp:
+Sound
+== Ljud
 
-Password:
-== Lösenord:
+Sound volume
+== Ljud volym
 
-Player
-== Spelare
+Spectate
+== Åskåda
 
-Hammer:
-== Hammare:
+Spectators
+== Åskådare
 
-Vote Yes:
-== Rösta ja:
+Standard gametype
+== Standard speltyp
 
-Server Info
-== Server info.
+Standard map
+== Standard karta
 
-Pistol:
-== Pistol:
+Switch weapon on pickup
+== Byt vapen vid anskaffning
 
-##### needs translation ####
+Team
+== Lag
 
-Progression:
-== 
+Team chat
+== Lagchatt
 
-The server is running a non-standard tuning on a pure game mode.
+Teeworlds %s is out! Download it at www.teeworlds.com!
+== Teeworld %s är släppt! Ladda ner det på www.teeworlds.com!
+
+Texture Compression
+== Texturkompression
+
+Time limit
+== Tidsbegränsning
+
+Try again
+== Försök igen
+
+Type
+== Typ
+
+UI Color
+== Gränssnittfärg
+
+Use sounds
+== Använd ljudeffekter
+
+V-Sync
+== V-Sync
+
+Version
+== Version
+
+Vote no
+== Rösta nej
+
+Vote yes
+== Rösta ja
+
+Voting
+== Röstning
+
+Weapon
+== Vapen
+
+Welcome to Teeworlds
+== Välkommen till Teeworlds
+
+Yes
+== Ja
+
+You must restart the game for all settings to take effect.
+== Du måste starta om spelet för att ändringarna skall gälla.
+
+##### needs translation ####
+
+Game over
 == 
 
 N/A
 == 
 
-Current version: %s
+Progression
 == 
 
-No servers found
+The server is running a non-standard tuning on a pure game mode.
 == 
 
 ##### old translations ####
diff --git a/scripts/update_localization.py b/scripts/update_localization.py
index 087f55a4..d3c948aa 100644
--- a/scripts/update_localization.py
+++ b/scripts/update_localization.py
@@ -38,16 +38,20 @@ def load_languagefile(filename):
 
 
 def generate_languagefile(outputfilename, srctable, loctable):
-	f = file(outputfilename, "w")
+	tmpfilename = outputfilename[:-1]+"_"
+	f = file(tmpfilename, "w")
 
 	num_items = 0
 	new_items = 0
 	old_items = 0
 
+	srctable_keys = srctable.keys()
+	srctable_keys.sort()
+
 	print >>f, ""
 	print >>f, "##### translated strings #####"
 	print >>f, ""
-	for k in srctable:
+	for k in srctable_keys:
 		if k in loctable and len(loctable[k]):
 			print >>f, k
 			print >>f, "==", loctable[k]
@@ -57,7 +61,7 @@ def generate_languagefile(outputfilename, srctable, loctable):
 
 	print >>f, "##### needs translation ####"
 	print >>f,  ""
-	for k in srctable:
+	for k in srctable_keys:
 		if not k in loctable or len(loctable[k]) == 0:
 			print >>f, k
 			print >>f, "==", srctable[k]
@@ -78,6 +82,8 @@ def generate_languagefile(outputfilename, srctable, loctable):
 	print "%-40s %8s %8s %8s" % ("filename", "total", "new", "old")
 	print "%-40s %8d %8d %8d" % (outputfilename, num_items, new_items, old_items)
 	f.close()
+	
+	os.rename(tmpfilename, outputfilename)
 
 srctable = parse_source()
 
diff --git a/src/game/client/components/chat.cpp b/src/game/client/components/chat.cpp
index 8ef4e17d..a03aab65 100644
--- a/src/game/client/components/chat.cpp
+++ b/src/game/client/components/chat.cpp
@@ -143,11 +143,13 @@ void CHAT::on_render()
 		cursor.line_width = 200.0f;
 		
 		if(mode == MODE_ALL)
-			gfx_text_ex(&cursor, "All: ", -1);
+			gfx_text_ex(&cursor, localize("All"), -1);
 		else if(mode == MODE_TEAM)
-			gfx_text_ex(&cursor, "Team: ", -1);
+			gfx_text_ex(&cursor, localize("Team"), -1);
 		else
-			gfx_text_ex(&cursor, "Chat: ", -1);
+			gfx_text_ex(&cursor, localize("Chat"), -1);
+
+		gfx_text_ex(&cursor, ": ", -1);
 			
 		gfx_text_ex(&cursor, input.get_string(), input.cursor_offset());
 		TEXT_CURSOR marker = cursor;
diff --git a/src/game/client/components/menus.cpp b/src/game/client/components/menus.cpp
index 932597f7..e58932bf 100644
--- a/src/game/client/components/menus.cpp
+++ b/src/game/client/components/menus.cpp
@@ -515,13 +515,13 @@ int MENUS::render_menubar(RECT r)
 		ui_vsplit_l(&box, 4.0f, 0, &box);
 		ui_vsplit_l(&box, 140.0f, &button, &box);
 		static int server_info_button=0;
-		if (ui_do_button(&server_info_button, localize("Server Info"), active_page==PAGE_SERVER_INFO, &button, ui_draw_menu_tab_button, 0))
+		if (ui_do_button(&server_info_button, localize("Server info"), active_page==PAGE_SERVER_INFO, &button, ui_draw_menu_tab_button, 0))
 			new_page = PAGE_SERVER_INFO;
 
 		ui_vsplit_l(&box, 4.0f, 0, &box);
 		ui_vsplit_l(&box, 140.0f, &button, &box);
 		static int callvote_button=0;
-		if (ui_do_button(&callvote_button, localize("Call Vote"), active_page==PAGE_CALLVOTE, &button, ui_draw_menu_tab_button, 0))
+		if (ui_do_button(&callvote_button, localize("Call vote"), active_page==PAGE_CALLVOTE, &button, ui_draw_menu_tab_button, 0))
 			new_page = PAGE_CALLVOTE;
 			
 		ui_vsplit_l(&box, 30.0f, 0, &box);
@@ -542,7 +542,7 @@ int MENUS::render_menubar(RECT r)
 		popup = POPUP_QUIT;
 
 	ui_vsplit_r(&box, 10.0f, &box, &button);
-	ui_vsplit_r(&box, 120.0f, &box, &button);
+	ui_vsplit_r(&box, 130.0f, &box, &button);
 	static int settings_button=0;
 	if (ui_do_button(&settings_button, localize("Settings"), active_page==PAGE_SETTINGS, &button, ui_draw_menu_tab_button, 0))
 		new_page = PAGE_SETTINGS;
diff --git a/src/game/client/components/menus_browser.cpp b/src/game/client/components/menus_browser.cpp
index d86a727c..a5fdab07 100644
--- a/src/game/client/components/menus_browser.cpp
+++ b/src/game/client/components/menus_browser.cpp
@@ -378,7 +378,7 @@ void MENUS::render_serverbrowser_filters(RECT view)
 		config.b_filter_pure_map ^= 1;
 		
 	ui_hsplit_t(&view, 20.0f, &button, &view);
-	ui_do_label(&button, localize("Game types:"), 14.0f, -1);
+	ui_do_label(&button, localize("Game types"), 14.0f, -1);
 	ui_vsplit_l(&button, 95.0f, 0, &button);
 	ui_margin(&button, 1.0f, &button);
 	ui_do_edit_box(&config.b_filter_gametype, &button, config.b_filter_gametype, sizeof(config.b_filter_gametype), 14.0f);
@@ -431,7 +431,7 @@ void MENUS::render_serverbrowser_serverdetail(RECT view)
 	ui_draw_rect(&server_header, vec4(1,1,1,0.25f), CORNER_T, 4.0f);
 	ui_draw_rect(&server_details, vec4(0,0,0,0.15f), CORNER_B, 4.0f);
 	ui_vsplit_l(&server_header, 8.0f, 0x0, &server_header);
-	ui_do_label(&server_header, localize("Server details:"), font_size+2.0f, -1);
+	ui_do_label(&server_header, localize("Server details"), font_size+2.0f, -1);
 
 	ui_vsplit_l(&server_details, 5.0f, 0x0, &server_details);
 
@@ -441,10 +441,10 @@ void MENUS::render_serverbrowser_serverdetail(RECT view)
 	{
 		RECT row;
 		static LOC_CONSTSTRING labels[] = {
-			localize("Version:"),
-			localize("Game Type:"),
-			localize("Progression:"),
-			localize("Ping:")};
+			localize("Version"),
+			localize("Game type"),
+			localize("Progression"),
+			localize("Ping")};
 
 		RECT left_column;
 		RECT right_column;
@@ -501,7 +501,7 @@ void MENUS::render_serverbrowser_serverdetail(RECT view)
 	ui_draw_rect(&server_header, vec4(1,1,1,0.25f), CORNER_T, 4.0f);
 	ui_draw_rect(&server_scoreboard, vec4(0,0,0,0.15f), CORNER_B, 4.0f);
 	ui_vsplit_l(&server_header, 8.0f, 0x0, &server_header);
-	ui_do_label(&server_header, localize("Scoreboard:"), font_size+2.0f, -1);
+	ui_do_label(&server_header, localize("Scoreboard"), font_size+2.0f, -1);
 
 	ui_vsplit_l(&server_scoreboard, 5.0f, 0x0, &server_scoreboard);
 
@@ -614,7 +614,7 @@ void MENUS::render_serverbrowser(RECT main_view)
 		
 		RECT button;
 		//ui_vsplit_r(&buttons, 20.0f, &buttons, &button);
-		ui_vsplit_r(&status_toolbar, 100.0f, &status_toolbar, &button);
+		ui_vsplit_r(&status_toolbar, 110.0f, &status_toolbar, &button);
 		ui_vmargin(&button, 2.0f, &button);
 		static int refresh_button = 0;
 		if(ui_do_button(&refresh_button, localize("Refresh"), 0, &button, ui_draw_menu_button, 0))
@@ -657,6 +657,6 @@ void MENUS::render_serverbrowser(RECT main_view)
 		ui_hsplit_b(&button_box, 20.0f, &button_box, &button);
 		ui_do_edit_box(&config.ui_server_address, &button, config.ui_server_address, sizeof(config.ui_server_address), 14.0f);
 		ui_hsplit_b(&button_box, 20.0f, &button_box, &button);
-		ui_do_label(&button, localize("Host address:"), 14.0f, -1);
+		ui_do_label(&button, localize("Host address"), 14.0f, -1);
 	}
 }
diff --git a/src/game/client/components/menus_demo.cpp b/src/game/client/components/menus_demo.cpp
index 08db3162..cfd5f568 100644
--- a/src/game/client/components/menus_demo.cpp
+++ b/src/game/client/components/menus_demo.cpp
@@ -164,10 +164,10 @@ void MENUS::render_demoplayer(RECT main_view)
 			str_format(buffer, sizeof(buffer), "x%.1f", info->speed);
 		ui_do_label(&buttonbar, buffer, button.h*0.7f, -1);
 
-		// exit button
+		// close button
 		ui_vsplit_r(&buttonbar, buttonbar_height*3, &buttonbar, &button);
 		static int exit_button = 0;
-		if(ui_do_button(&exit_button, "Exit", 0, &button, ui_draw_demoplayer_button, 0))
+		if(ui_do_button(&exit_button, localize("Close"), 0, &button, ui_draw_demoplayer_button, 0))
 			client_disconnect();
 	}
 }
@@ -371,7 +371,7 @@ void MENUS::render_demolist(RECT main_view)
 	static int num_items = 0;
 	static int demolist_id = 0;
 	
-	ui_do_listbox_start(&demolist_id, &main_view, 17.0f, "Demos", num_items, selected_item);
+	ui_do_listbox_start(&demolist_id, &main_view, 17.0f, localize("Demos"), num_items, selected_item);
 	for(int i = 0; i < num_demos; i++)
 	{
 		LISTBOXITEM item = ui_do_listbox_nextitem((void*)(10+i));
@@ -386,13 +386,13 @@ void MENUS::render_demolist(RECT main_view)
 	ui_vsplit_r(&play_rect, 120.0f, 0x0, &play_rect);
 	
 	static int refresh_button = 0;
-	if(ui_do_button(&refresh_button, "Refresh", 0, &refresh_rect, ui_draw_menu_button, 0))
+	if(ui_do_button(&refresh_button, localize("Refresh"), 0, &refresh_rect, ui_draw_menu_button, 0))
 	{
 		demolist_populate();
 	}	
 	
 	static int play_button = 0;
-	if(ui_do_button(&play_button, "Play", 0, &play_rect, ui_draw_menu_button, 0))
+	if(ui_do_button(&play_button, localize("Play"), 0, &play_rect, ui_draw_menu_button, 0))
 	{
 		if(selected_item >= 0 && selected_item < num_demos)
 			client_demoplayer_play(demos[selected_item].filename);
diff --git a/src/game/client/components/menus_ingame.cpp b/src/game/client/components/menus_ingame.cpp
index 1623075d..83673631 100644
--- a/src/game/client/components/menus_ingame.cpp
+++ b/src/game/client/components/menus_ingame.cpp
@@ -30,7 +30,7 @@ void MENUS::render_game(RECT main_view)
 	
 	ui_vsplit_r(&main_view, 120.0f, &main_view, &button);
 	static int disconnect_button = 0;
-	if(ui_do_button(&disconnect_button, "Disconnect", 0, &button, ui_draw_menu_button, 0))
+	if(ui_do_button(&disconnect_button, localize("Disconnect"), 0, &button, ui_draw_menu_button, 0))
 		client_disconnect();
 
 	if(gameclient.snap.local_info && gameclient.snap.gameobj)
@@ -40,7 +40,7 @@ void MENUS::render_game(RECT main_view)
 			ui_vsplit_l(&main_view, 10.0f, &button, &main_view);
 			ui_vsplit_l(&main_view, 120.0f, &button, &main_view);
 			static int spectate_button = 0;
-			if(ui_do_button(&spectate_button, "Spectate", 0, &button, ui_draw_menu_button, 0))
+			if(ui_do_button(&spectate_button, localize("Spectate"), 0, &button, ui_draw_menu_button, 0))
 			{
 				gameclient.send_switch_team(-1);
 				set_active(false);
@@ -54,7 +54,7 @@ void MENUS::render_game(RECT main_view)
 				ui_vsplit_l(&main_view, 10.0f, &button, &main_view);
 				ui_vsplit_l(&main_view, 120.0f, &button, &main_view);
 				static int spectate_button = 0;
-				if(ui_do_button(&spectate_button, "Join Red", 0, &button, ui_draw_menu_button, 0))
+				if(ui_do_button(&spectate_button, localize("Join red"), 0, &button, ui_draw_menu_button, 0))
 				{
 					gameclient.send_switch_team(0);
 					set_active(false);
@@ -66,7 +66,7 @@ void MENUS::render_game(RECT main_view)
 				ui_vsplit_l(&main_view, 10.0f, &button, &main_view);
 				ui_vsplit_l(&main_view, 120.0f, &button, &main_view);
 				static int spectate_button = 0;
-				if(ui_do_button(&spectate_button, "Join Blue", 0, &button, ui_draw_menu_button, 0))
+				if(ui_do_button(&spectate_button, localize("Join blue"), 0, &button, ui_draw_menu_button, 0))
 				{
 					gameclient.send_switch_team(1);
 					set_active(false);
@@ -80,7 +80,7 @@ void MENUS::render_game(RECT main_view)
 				ui_vsplit_l(&main_view, 10.0f, &button, &main_view);
 				ui_vsplit_l(&main_view, 120.0f, &button, &main_view);
 				static int spectate_button = 0;
-				if(ui_do_button(&spectate_button, "Join Game", 0, &button, ui_draw_menu_button, 0))
+				if(ui_do_button(&spectate_button, localize("Join game"), 0, &button, ui_draw_menu_button, 0))
 				{
 					gameclient.send_switch_team(0);
 					set_active(false);
@@ -186,7 +186,7 @@ void MENUS::render_serverinfo(RECT main_view)
 	x = 5.0f;
 	y = 0.0f;
 	
-	gfx_text(0, serverinfo.x+x, serverinfo.y+y, 32, "Server info", 250);
+	gfx_text(0, serverinfo.x+x, serverinfo.y+y, 32, localize("Server info"), 250);
 	y += 32.0f+5.0f;
 	
 	mem_zero(buf, sizeof(buf));
@@ -194,15 +194,15 @@ void MENUS::render_serverinfo(RECT main_view)
 		buf,
 		sizeof(buf),
 		"%s\n\n"
-		"Address: %s\n"
-		"Ping: %d\n"
-		"Version: %s\n"
-		"Password: %s\n",
+		"%s: %s\n"
+		"%s: %d\n"
+		"%s: %s\n"
+		"%s: %s\n",
 		current_server_info.name,
-		config.ui_server_address,
-		gameclient.snap.local_info->latency,
-		current_server_info.version,
-		current_server_info.flags&1 ? "Yes" : "No"
+		localize("Address"), config.ui_server_address,
+		localize("Ping"), gameclient.snap.local_info->latency,
+		localize("Version"), current_server_info.version,
+		localize("Password"), current_server_info.flags&1 ? localize("Yes") : localize("No")
 	);
 	
 	gfx_text(0, serverinfo.x+x, serverinfo.y+y, 20, buf, 250);
@@ -212,7 +212,7 @@ void MENUS::render_serverinfo(RECT main_view)
 		int is_favorite = client_serverbrowse_isfavorite(current_server_info.netaddr);
 		ui_hsplit_b(&serverinfo, 20.0f, &serverinfo, &button);
 		static int add_fav_button = 0;
-		if (ui_do_button(&add_fav_button, "Favorite", is_favorite, &button, ui_draw_checkbox, 0))
+		if (ui_do_button(&add_fav_button, localize("Favorite"), is_favorite, &button, ui_draw_checkbox, 0))
 		{
 			if(is_favorite)
 				client_serverbrowse_removefavorite(current_server_info.netaddr);
@@ -230,7 +230,7 @@ void MENUS::render_serverinfo(RECT main_view)
 	x = 5.0f;
 	y = 0.0f;
 	
-	gfx_text(0, gameinfo.x+x, gameinfo.y+y, 32, "Game info", 250);
+	gfx_text(0, gameinfo.x+x, gameinfo.y+y, 32, localize("Game info"), 250);
 	y += 32.0f+5.0f;
 	
 	mem_zero(buf, sizeof(buf));
@@ -238,18 +238,17 @@ void MENUS::render_serverinfo(RECT main_view)
 		buf,
 		sizeof(buf),
 		"\n\n"
-		"Gametype: %s\n"
-		"Map: %s\n"
-		"Score limit: %d\n"
-		"Time limit: %d\n"
+		"%s: %s\n"
+		"%s: %s\n"
+		"%s: %d\n"
+		"%s: %d\n"
 		"\n"
-		"Players: %d/%d\n",
-		current_server_info.gametype,
-		current_server_info.map,
-		gameclient.snap.gameobj->score_limit,
-		gameclient.snap.gameobj->time_limit,
-		gameclient.snap.num_players,
-		current_server_info.max_players
+		"%s: %d/%d\n",
+		localize("Game type"), current_server_info.gametype,
+		localize("Map"), current_server_info.map,
+		localize("Score limit"), gameclient.snap.gameobj->score_limit,
+		localize("Time limit"), gameclient.snap.gameobj->time_limit,
+		localize("Players"), gameclient.snap.num_players, current_server_info.max_players
 	);
 	gfx_text(0, gameinfo.x+x, gameinfo.y+y, 20, buf, 250);
 	
@@ -259,7 +258,7 @@ void MENUS::render_serverinfo(RECT main_view)
 	ui_margin(&motd, 5.0f, &motd);
 	y = 0.0f;
 	x = 5.0f;
-	gfx_text(0, motd.x+x, motd.y+y, 32, "MOTD", -1);
+	gfx_text(0, motd.x+x, motd.y+y, 32, localize("MOTD"), -1);
 	y += 32.0f+5.0f;
 	gfx_text(0, motd.x+x, motd.y+y, 16, gameclient.motd->server_motd, (int)motd.w);
 }
@@ -277,7 +276,7 @@ void MENUS::render_servercontrol_server(RECT main_view)
 
 	static int votelist = 0;
 	RECT list = main_view;
-	ui_do_listbox_start(&votelist, &list, 24.0f, "Options", num_options, callvote_selectedoption);
+	ui_do_listbox_start(&votelist, &list, 24.0f, localize("Settings"), num_options, callvote_selectedoption);
 	
 	for(VOTING::VOTEOPTION *option = gameclient.voting->first; option; option = option->next)
 	{
@@ -296,7 +295,7 @@ void MENUS::render_servercontrol_kick(RECT main_view)
 	RECT header, footer;
 	ui_hsplit_t(&main_view, 20, &header, &main_view);
 	ui_draw_rect(&header, vec4(1,1,1,0.25f), CORNER_T, 5.0f); 
-	ui_do_label(&header, "Players", 18.0f, 0);
+	ui_do_label(&header, localize("Players"), 18.0f, 0);
 
 	// draw footers	
 	ui_hsplit_b(&main_view, 20, &main_view, &footer);
@@ -341,7 +340,9 @@ void MENUS::render_servercontrol(RECT main_view)
 	
 	RECT button;
 	
-	const char *tabs[] = {"Options", "Kick"};
+	const char *tabs[] = {
+		localize("Settings"),
+		localize("Kick")};
 	int num_tabs = (int)(sizeof(tabs)/sizeof(*tabs));
 	
 	for(int i = 0; i < num_tabs; i++)
@@ -373,7 +374,7 @@ void MENUS::render_servercontrol(RECT main_view)
 		ui_vsplit_r(&bottom, 120.0f, &bottom, &button);
 		
 		static int callvote_button = 0;
-		if(ui_do_button(&callvote_button, "Call vote", 0, &button, ui_draw_menu_button, 0))
+		if(ui_do_button(&callvote_button, localize("Call vote"), 0, &button, ui_draw_menu_button, 0))
 		{
 			if(control_page == 0)
 			{
diff --git a/src/game/client/components/menus_settings.cpp b/src/game/client/components/menus_settings.cpp
index 60d8d7fc..8d1b1a4e 100644
--- a/src/game/client/components/menus_settings.cpp
+++ b/src/game/client/components/menus_settings.cpp
@@ -54,8 +54,11 @@ void MENUS::render_settings_player(RECT main_view)
 
 	// render settings
 	{	
+		char buf[128];
+		
 		ui_hsplit_t(&main_view, 20.0f, &button, &main_view);
-		ui_do_label(&button, localize("Name:"), 14.0, -1);
+		str_format(buf, sizeof(buf), "%s:", localize("Name"));
+		ui_do_label(&button, buf, 14.0, -1);
 		ui_vsplit_l(&button, 80.0f, 0, &button);
 		ui_vsplit_l(&button, 180.0f, &button, 0);
 		if(ui_do_edit_box(config.player_name, &button, config.player_name, sizeof(config.player_name), 14.0f))
@@ -257,27 +260,27 @@ typedef struct
 static KEYINFO keys[] = 
 {
 	// we need to do localize so the scripts can pickup the string
-	{ localize("Move Left:"), "+left", 0},
-	{ localize("Move Right:"), "+right", 0 },
-	{ localize("Jump:"), "+jump", 0 },
-	{ localize("Fire:"), "+fire", 0 },
-	{ localize("Hook:"), "+hook", 0 },
-	{ localize("Hammer:"), "+weapon1", 0 },
-	{ localize("Pistol:"), "+weapon2", 0 },
-	{ localize("Shotgun:"), "+weapon3", 0 },
-	{ localize("Grenade:"), "+weapon4", 0 },
-	{ localize("Rifle:"), "+weapon5", 0 },
-	{ localize("Next Weapon:"), "+nextweapon", 0 },
-	{ localize("Prev. Weapon:"), "+prevweapon", 0 },
-	{ localize("Vote Yes:"), "vote yes", 0 },
-	{ localize("Vote No:"), "vote no", 0 },
+	{ localize("Move left"), "+left", 0},
+	{ localize("Move right"), "+right", 0 },
+	{ localize("Jump"), "+jump", 0 },
+	{ localize("Fire"), "+fire", 0 },
+	{ localize("Hook"), "+hook", 0 },
+	{ localize("Hammer"), "+weapon1", 0 },
+	{ localize("Pistol"), "+weapon2", 0 },
+	{ localize("Shotgun"), "+weapon3", 0 },
+	{ localize("Grenade"), "+weapon4", 0 },
+	{ localize("Rifle"), "+weapon5", 0 },
+	{ localize("Next weapon"), "+nextweapon", 0 },
+	{ localize("Prev. weapon"), "+prevweapon", 0 },
+	{ localize("Vote yes"), "vote yes", 0 },
+	{ localize("Vote no"), "vote no", 0 },
 	{ localize("Chat:"), "chat all", 0 },
-	{ localize("Team Chat:"), "chat team", 0 },
-	{ localize("Emoticon:"), "+emote", 0 },
-	{ localize("Console:"), "toggle_local_console", 0 },
-	{ localize("Remote Console:"), "toggle_remote_console", 0 },
-	{ localize("Screenshot:"), "screenshot", 0 },
-	{ localize("Scoreboard:"), "+scoreboard", 0 },
+	{ localize("Team chat"), "chat team", 0 },
+	{ localize("Emoticon"), "+emote", 0 },
+	{ localize("Console"), "toggle_local_console", 0 },
+	{ localize("Remote console"), "toggle_remote_console", 0 },
+	{ localize("Screenshot"), "screenshot", 0 },
+	{ localize("Scoreboard"), "+scoreboard", 0 },
 };
 
 const int key_count = sizeof(keys) / sizeof(KEYINFO);
@@ -291,6 +294,9 @@ void MENUS::ui_do_getbuttons(int start, int stop, RECT view)
 		ui_hsplit_t(&view, 20.0f, &button, &view);
 		ui_vsplit_l(&button, 130.0f, &label, &button);
 	
+		char buf[64];
+		str_format(buf, sizeof(buf), "%s:", (const char *)key.name);
+		
 		ui_do_label(&label, key.name, 14.0f, -1);
 		int oldid = key.keyid;
 		int newid = ui_do_key_reader((void *)&keys[i].name, &button, oldid);
diff --git a/src/game/client/components/scoreboard.cpp b/src/game/client/components/scoreboard.cpp
index dc1c4283..2978eff9 100644
--- a/src/game/client/components/scoreboard.cpp
+++ b/src/game/client/components/scoreboard.cpp
@@ -46,21 +46,21 @@ void SCOREBOARD::render_goals(float x, float y, float w)
 	if(gameclient.snap.gameobj && gameclient.snap.gameobj->score_limit)
 	{
 		char buf[64];
-		str_format(buf, sizeof(buf), "Score Limit: %d", gameclient.snap.gameobj->score_limit);
+		str_format(buf, sizeof(buf), "%s: %d", localize("Score limit"), gameclient.snap.gameobj->score_limit);
 		gfx_text(0, x+20.0f, y, 22.0f, buf, -1);
 		tw += gfx_text_width(0, 22.0f, buf, -1);
 	}
 	if(gameclient.snap.gameobj && gameclient.snap.gameobj->time_limit)
 	{
 		char buf[64];
-		str_format(buf, sizeof(buf), "Time Limit: %d min", gameclient.snap.gameobj->time_limit);
+		str_format(buf, sizeof(buf), "%s: %d min", localize("Time limit"), gameclient.snap.gameobj->time_limit);
 		gfx_text(0, x+220.0f, y, 22.0f, buf, -1);
 		tw += gfx_text_width(0, 22.0f, buf, -1);
 	}
 	if(gameclient.snap.gameobj && gameclient.snap.gameobj->round_num && gameclient.snap.gameobj->round_current)
 	{
 		char buf[64];
-		str_format(buf, sizeof(buf), "Round %d/%d", gameclient.snap.gameobj->round_current, gameclient.snap.gameobj->round_num);
+		str_format(buf, sizeof(buf), "%s %d/%d", localize("Round"), gameclient.snap.gameobj->round_current, gameclient.snap.gameobj->round_num);
 		gfx_text(0, x+450.0f, y, 22.0f, buf, -1);
 		
 	/*[48c3fd4c][game/scoreboard]: timelimit x:219.428558
@@ -74,7 +74,7 @@ void SCOREBOARD::render_spectators(float x, float y, float w)
 	int count = 0;
 	float h = 120.0f;
 	
-	str_copy(buffer, "Spectators: ", sizeof(buffer));
+	str_format(buffer, sizeof(buffer), "%s: ", localize("Spectators"));
 
 	gfx_blend_normal();
 	gfx_texture_set(-1);
@@ -120,9 +120,9 @@ void SCOREBOARD::render_scoreboard(float x, float y, float w, int team, const ch
 	if(!title)
 	{
 		if(gameclient.snap.gameobj->game_over)
-			title = "Game Over";
+			title = localize("Game over");
 		else
-			title = "Score Board";
+			title = localize("Score board");
 	}
 
 	float tw = gfx_text_width(0, 48, title, -1);
@@ -181,9 +181,9 @@ void SCOREBOARD::render_scoreboard(float x, float y, float w, int team, const ch
 	}
 
 	// render headlines
-	gfx_text(0, x+10, y, 24.0f, "Score", -1);
-	gfx_text(0, x+125, y, 24.0f, "Name", -1);
-	gfx_text(0, x+w-70, y, 24.0f, "Ping", -1);
+	gfx_text(0, x+10, y, 24.0f, localize("Score"), -1);
+	gfx_text(0, x+125, y, 24.0f, localize("Name"), -1);
+	gfx_text(0, x+w-70, y, 24.0f, localize("Ping"), -1);
 	y += 29.0f;
 
 	float font_size = 35.0f;
@@ -295,18 +295,18 @@ void SCOREBOARD::on_render()
 			
 		if(gameclient.snap.gameobj && gameclient.snap.gameobj->game_over)
 		{
-			const char *text = "DRAW!";
+			const char *text = localize("Draw!");
 			if(gameclient.snap.gameobj->teamscore_red > gameclient.snap.gameobj->teamscore_blue)
-				text = "Red Team Wins!";
+				text = localize("Red team wins!");
 			else if(gameclient.snap.gameobj->teamscore_blue > gameclient.snap.gameobj->teamscore_red)
-				text = "Blue Team Wins!";
+				text = localize("Blue team wins!");
 				
 			float w = gfx_text_width(0, 92.0f, text, -1);
 			gfx_text(0, width/2-w/2, 45, 92.0f, text, -1);
 		}
 		
-		render_scoreboard(width/2-w-20, 150.0f, w, 0, "Red Team");
-		render_scoreboard(width/2 + 20, 150.0f, w, 1, "Blue Team");
+		render_scoreboard(width/2-w-20, 150.0f, w, 0, localize("Red team"));
+		render_scoreboard(width/2 + 20, 150.0f, w, 1, localize("Blue team"));
 	}
 
 	render_goals(width/2-w/2, 150+750+25, w);
diff --git a/src/game/localization.cpp b/src/game/localization.cpp
index 110a0f5e..f78593b1 100644
--- a/src/game/localization.cpp
+++ b/src/game/localization.cpp
@@ -1,6 +1,6 @@
 
 #include "localization.hpp"
-#include <base/tl/algorithms.hpp>
+#include <base/tl/algorithm.hpp>
 
 extern "C" {
 #include <engine/e_linereader.h>