2
0
Эх сурвалжийг харах

Merge remote-tracking branch 'origin/master'

Juan Linietsky 9 жил өмнө
parent
commit
eacb8f04c4
100 өөрчлөгдсөн 794 нэмэгдсэн , 626 устгасан
  1. 3 1
      SConstruct
  2. 1 1
      bin/tests/test_python.cpp
  3. 16 16
      core/bind/core_bind.cpp
  4. 1 1
      core/io/http_client.cpp
  5. 1 1
      core/ustring.cpp
  6. 26 1
      doc/base/classes.xml
  7. 15 15
      drivers/SCsub
  8. 9 9
      drivers/builtin_openssl2/SCsub
  9. 3 3
      drivers/openssl/SCsub
  10. 3 2
      drivers/png/SCsub
  11. 0 1
      platform/android/detect.py
  12. 1 1
      platform/android/globals/global_defaults.h
  13. 1 1
      platform/iphone/globals/global_defaults.h
  14. 15 15
      platform/javascript/dom_keys.h
  15. 4 1
      platform/osx/detect.py
  16. 1 1
      platform/windows/os_windows.h
  17. 1 1
      scene/2d/canvas_modulate.cpp
  18. 1 1
      scene/2d/canvas_modulate.h
  19. 1 1
      scene/2d/path_2d.cpp
  20. 1 1
      scene/2d/sprite.cpp
  21. 2 2
      scene/2d/visibility_notifier_2d.cpp
  22. 7 1
      scene/3d/vehicle_body.cpp
  23. 1 0
      scene/3d/vehicle_body.h
  24. 1 1
      scene/animation/animation_player.cpp
  25. 1 1
      scene/main/http_request.cpp
  26. 3 3
      scene/main/viewport.cpp
  27. 1 1
      scene/resources/curve.cpp
  28. 22 22
      scene/resources/stb_truetype.h
  29. 1 1
      scene/resources/theme.cpp
  30. 1 1
      servers/visual/visual_server_raster.h
  31. 8 8
      tools/editor/addon_editor_plugin.cpp
  32. 14 14
      tools/editor/animation_editor.cpp
  33. 2 2
      tools/editor/call_dialog.cpp
  34. 3 3
      tools/editor/code_editor.cpp
  35. 8 8
      tools/editor/connections_dialog.cpp
  36. 5 5
      tools/editor/create_dialog.cpp
  37. 12 12
      tools/editor/dependency_editor.cpp
  38. 1 1
      tools/editor/editor_file_dialog.cpp
  39. 2 2
      tools/editor/editor_file_system.cpp
  40. 4 4
      tools/editor/editor_help.cpp
  41. 7 7
      tools/editor/editor_import_export.cpp
  42. 83 81
      tools/editor/editor_node.cpp
  43. 2 2
      tools/editor/editor_node.h
  44. 2 2
      tools/editor/editor_reimport_dialog.cpp
  45. 5 5
      tools/editor/editor_run_script.cpp
  46. 4 3
      tools/editor/editor_settings.cpp
  47. 1 1
      tools/editor/editor_sub_scene.cpp
  48. 2 2
      tools/editor/import_settings.cpp
  49. 7 7
      tools/editor/io_plugins/editor_font_import_plugin.cpp
  50. 11 11
      tools/editor/io_plugins/editor_mesh_import_plugin.cpp
  51. 2 2
      tools/editor/io_plugins/editor_sample_import_plugin.cpp
  52. 12 12
      tools/editor/io_plugins/editor_scene_import_plugin.cpp
  53. 15 15
      tools/editor/io_plugins/editor_scene_importer_fbxconv.cpp
  54. 27 27
      tools/editor/io_plugins/editor_texture_import_plugin.cpp
  55. 2 2
      tools/editor/io_plugins/editor_translation_import_plugin.cpp
  56. 1 1
      tools/editor/multi_node_edit.cpp
  57. 11 11
      tools/editor/plugins/animation_player_editor_plugin.cpp
  58. 1 1
      tools/editor/plugins/animation_player_editor_plugin.h
  59. 4 4
      tools/editor/plugins/animation_tree_editor_plugin.cpp
  60. 1 1
      tools/editor/plugins/animation_tree_editor_plugin.h
  61. 2 2
      tools/editor/plugins/baked_light_baker.cpp
  62. 14 14
      tools/editor/plugins/canvas_item_editor_plugin.cpp
  63. 3 3
      tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
  64. 2 2
      tools/editor/plugins/collision_polygon_editor_plugin.cpp
  65. 6 6
      tools/editor/plugins/control_editor_plugin.cpp
  66. 1 1
      tools/editor/plugins/control_editor_plugin.h
  67. 1 1
      tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
  68. 2 2
      tools/editor/plugins/item_list_editor_plugin.cpp
  69. 4 4
      tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
  70. 10 10
      tools/editor/plugins/multimesh_editor_plugin.cpp
  71. 4 4
      tools/editor/plugins/navigation_polygon_editor_plugin.cpp
  72. 1 1
      tools/editor/plugins/particles_2d_editor_plugin.cpp
  73. 1 1
      tools/editor/plugins/particles_editor_plugin.cpp
  74. 5 5
      tools/editor/plugins/path_2d_editor_plugin.cpp
  75. 3 3
      tools/editor/plugins/path_editor_plugin.cpp
  76. 3 3
      tools/editor/plugins/polygon_2d_editor_plugin.cpp
  77. 6 6
      tools/editor/plugins/resource_preloader_editor_plugin.cpp
  78. 2 2
      tools/editor/plugins/rich_text_editor_plugin.cpp
  79. 1 1
      tools/editor/plugins/rich_text_editor_plugin.h
  80. 1 1
      tools/editor/plugins/sample_editor_plugin.cpp
  81. 3 3
      tools/editor/plugins/sample_library_editor_plugin.cpp
  82. 29 10
      tools/editor/plugins/script_editor_plugin.cpp
  83. 1 1
      tools/editor/plugins/shader_editor_plugin.cpp
  84. 174 69
      tools/editor/plugins/shader_graph_editor_plugin.cpp
  85. 5 1
      tools/editor/plugins/shader_graph_editor_plugin.h
  86. 12 12
      tools/editor/plugins/spatial_editor_plugin.cpp
  87. 8 8
      tools/editor/plugins/sprite_frames_editor_plugin.cpp
  88. 1 1
      tools/editor/plugins/sprite_region_editor_plugin.h
  89. 1 1
      tools/editor/plugins/stream_editor_plugin.h
  90. 8 8
      tools/editor/plugins/theme_editor_plugin.cpp
  91. 4 4
      tools/editor/plugins/tile_map_editor_plugin.cpp
  92. 1 1
      tools/editor/plugins/tile_map_editor_plugin.h
  93. 1 1
      tools/editor/plugins/tile_set_editor_plugin.cpp
  94. 23 23
      tools/editor/project_export.cpp
  95. 11 11
      tools/editor/project_manager.cpp
  96. 18 18
      tools/editor/project_settings.cpp
  97. 13 13
      tools/editor/property_editor.cpp
  98. 3 3
      tools/editor/pvrtc_compress.cpp
  99. 1 1
      tools/editor/register_exporters.h
  100. 2 2
      tools/editor/reparent_dialog.cpp

+ 3 - 1
SConstruct

@@ -117,7 +117,7 @@ if profile:
 
 opts=Variables(customs, ARGUMENTS)
 opts.Add('target', 'Compile Target (debug/release_debug/release).', "debug")
-opts.Add('bits', 'Compile Target Bits (default/32/64).', "default")
+opts.Add('bits', 'Compile Target Bits (default/32/64/fat).', "default")
 opts.Add('platform','Platform: '+str(platform_list)+'.',"")
 opts.Add('p','Platform (same as platform=).',"")
 opts.Add('tools','Build Tools (Including Editor): (yes/no)','yes')
@@ -276,6 +276,8 @@ if selected_platform in platform_list:
 		suffix+=".32"
 	elif (env["bits"]=="64"):
 		suffix+=".64"
+	elif (env["bits"]=="fat"):
+		suffix+=".fat"
 
 	suffix+=env.extra_suffix
 

+ 1 - 1
bin/tests/test_python.cpp

@@ -53,4 +53,4 @@ void test() {
 
 }
 
-#endif
+#endif

+ 16 - 16
core/bind/core_bind.cpp

@@ -500,9 +500,9 @@ void _OS::set_icon(const Image& p_icon) {
 }
 
 /**
- *  Get current datetime with consideration for utc and 
+ *  Get current datetime with consideration for utc and
  *     dst
- */ 
+ */
 Dictionary _OS::get_datetime(bool utc) const {
 
 	Dictionary dated = get_date(utc);
@@ -564,17 +564,17 @@ uint64_t _OS::get_unix_time_from_datetime(Dictionary datetime) const {
 
 	// Get all time values from the dictionary, set to zero if it doesn't exist.
 	//   Risk incorrect calculation over throwing errors
-	unsigned int second = ((datetime.has(SECOND_KEY))? 
+	unsigned int second = ((datetime.has(SECOND_KEY))?
 			static_cast<unsigned int>(datetime[SECOND_KEY]): 0);
-	unsigned int minute = ((datetime.has(MINUTE_KEY))? 
+	unsigned int minute = ((datetime.has(MINUTE_KEY))?
 			static_cast<unsigned int>(datetime[MINUTE_KEY]): 0);
-	unsigned int hour = ((datetime.has(HOUR_KEY))? 
+	unsigned int hour = ((datetime.has(HOUR_KEY))?
 			static_cast<unsigned int>(datetime[HOUR_KEY]): 0);
-	unsigned int day = ((datetime.has(DAY_KEY))? 
+	unsigned int day = ((datetime.has(DAY_KEY))?
 			static_cast<unsigned int>(datetime[DAY_KEY]): 0);
-	unsigned int month = ((datetime.has(MONTH_KEY))? 
+	unsigned int month = ((datetime.has(MONTH_KEY))?
 			static_cast<unsigned int>(datetime[MONTH_KEY]) -1: 0);
-	unsigned int year = ((datetime.has(YEAR_KEY))? 
+	unsigned int year = ((datetime.has(YEAR_KEY))?
 			static_cast<unsigned int>(datetime[YEAR_KEY]):0);
 
 	/// How many days come before each month (0-12)
@@ -604,7 +604,7 @@ uint64_t _OS::get_unix_time_from_datetime(Dictionary datetime) const {
 	ERR_FAIL_COND_V( day > MONTH_DAYS_TABLE[LEAPYEAR(year)][month], 0);
 
 	// Calculate all the seconds from months past in this year
-	uint64_t SECONDS_FROM_MONTHS_PAST_THIS_YEAR = 
+	uint64_t SECONDS_FROM_MONTHS_PAST_THIS_YEAR =
 		DAYS_PAST_THIS_YEAR_TABLE[LEAPYEAR(year)][month] * SECONDS_PER_DAY;
 
 	uint64_t SECONDS_FROM_YEARS_PAST = 0;
@@ -614,13 +614,13 @@ uint64_t _OS::get_unix_time_from_datetime(Dictionary datetime) const {
 			SECONDS_PER_DAY;
 	}
 
-	uint64_t epoch = 
-		second + 
-		minute * SECONDS_PER_MINUTE + 
+	uint64_t epoch =
+		second +
+		minute * SECONDS_PER_MINUTE +
 		hour * SECONDS_PER_HOUR +
 		// Subtract 1 from day, since the current day isn't over yet
 		//   and we cannot count all 24 hours.
-		(day-1) * SECONDS_PER_DAY + 
+		(day-1) * SECONDS_PER_DAY +
 		SECONDS_FROM_MONTHS_PAST_THIS_YEAR +
 		SECONDS_FROM_YEARS_PAST;
 	return epoch;
@@ -631,7 +631,7 @@ uint64_t _OS::get_unix_time_from_datetime(Dictionary datetime) const {
  *  Get a dictionary of time values when given epoch time
  *
  *  Dictionary Time values will be a union if values from #get_time
- *    and #get_date dictionaries (with the exception of dst = 
+ *    and #get_date dictionaries (with the exception of dst =
  *    day light standard time, as it cannot be determined from epoch)
  *
  * @param unix_time_val epoch time to convert
@@ -660,14 +660,14 @@ Dictionary _OS::get_datetime_from_unix_time( uint64_t unix_time_val) const {
 	time.hour = dayclock / 3600;
 
 	/* day 0 was a thursday */
-	date.weekday = static_cast<OS::Weekday>((dayno + 4) % 7);       
+	date.weekday = static_cast<OS::Weekday>((dayno + 4) % 7);
 
 	while (dayno >= YEARSIZE(year)) {
 		dayno -= YEARSIZE(year);
 		year++;
 	}
 
-	date.year = year; 
+	date.year = year;
 
 	size_t imonth = 0;
 

+ 1 - 1
core/io/http_client.cpp

@@ -116,7 +116,7 @@ Error HTTPClient::request_raw( Method p_method, const String& p_url, const Vecto
 	}
 	request+="\r\n";
 	CharString cs=request.utf8();
-	
+
 	DVector<uint8_t> data;
 
 	//Maybe this goes faster somehow?

+ 1 - 1
core/ustring.cpp

@@ -3635,7 +3635,7 @@ String String::percent_decode() const {
 
 	CharString cs = utf8();
 	for(int i=0;i<cs.length();i++) {
-		
+
 		uint8_t c = cs[i];
 		if (c=='%' && i<length()-2) {
 

+ 26 - 1
doc/base/classes.xml

@@ -1103,7 +1103,7 @@
 			% key
 		</constant>
 		<constant name="KEY_AMPERSAND" value="38">
-			& key
+			&amp; key
 		</constant>
 		<constant name="KEY_APOSTROPHE" value="39">
 			' key
@@ -7268,12 +7268,14 @@
 			<argument index="0" name="degrees" type="float">
 			</argument>
 			<description>
+			Set rotation of the layer in degree.
 			</description>
 		</method>
 		<method name="get_rotationd" qualifiers="const">
 			<return type="float">
 			</return>
 			<description>
+			Get rotation of the layer in degree.
 			</description>
 		</method>
 		<method name="set_scale">
@@ -12250,18 +12252,21 @@ This approximation makes straight segments between each point, then subdivides t
 			<argument index="0" name="dir" type="String">
 			</argument>
 			<description>
+			Set the current working directory of the file dialog.
 			</description>
 		</method>
 		<method name="set_current_file">
 			<argument index="0" name="file" type="String">
 			</argument>
 			<description>
+			Set the current selected file name of the file dialog.
 			</description>
 		</method>
 		<method name="set_current_path">
 			<argument index="0" name="path" type="String">
 			</argument>
 			<description>
+			Set the current selected file path of the file dialog.
 			</description>
 		</method>
 		<method name="set_mode">
@@ -12282,6 +12287,7 @@ This approximation makes straight segments between each point, then subdivides t
 			<return type="VBoxContainer">
 			</return>
 			<description>
+			Return the vertical box container of the dialog, custom controls can be added to it.
 			</description>
 		</method>
 		<method name="set_access">
@@ -12314,6 +12320,7 @@ This approximation makes straight segments between each point, then subdivides t
 		</method>
 		<method name="invalidate">
 			<description>
+			Invalidate and update the current dialog content list.
 			</description>
 		</method>
 	</methods>
@@ -12351,6 +12358,7 @@ This approximation makes straight segments between each point, then subdivides t
 			The dialog functions as a folder selector, disallowing the selection of any file.
 		</constant>
 		<constant name="MODE_OPEN_ANY" value="3">
+			The dialog allows the selection of a file or a directory.
 		</constant>
 		<constant name="MODE_SAVE_FILE" value="4">
 			The dialog will warn when a file exists.
@@ -21323,24 +21331,28 @@ Example: (content-length:12), (Content-Type:application/json; charset=UTF-8)
 			<argument index="0" name="enabled" type="bool">
 			</argument>
 			<description>
+			Set whether the window is minimized.
 			</description>
 		</method>
 		<method name="is_window_minimized" qualifiers="const">
 			<return type="bool">
 			</return>
 			<description>
+			Return true if the window is minimized.
 			</description>
 		</method>
 		<method name="set_window_maximized">
 			<argument index="0" name="enabled" type="bool">
 			</argument>
 			<description>
+			Set the window size to maximized.
 			</description>
 		</method>
 		<method name="is_window_maximized" qualifiers="const">
 			<return type="bool">
 			</return>
 			<description>
+			Return true if the window is maximized.
 			</description>
 		</method>
 		<method name="set_borderless_window">
@@ -21578,6 +21590,7 @@ Example: (content-length:12), (Content-Type:application/json; charset=UTF-8)
 			<return type="int">
 			</return>
 			<description>
+			Return	the current unix timestamp.
 			</description>
 		</method>
 		<method name="get_datetime_from_unix_time" qualifiers="const">
@@ -21740,6 +21753,7 @@ Example: (content-length:12), (Content-Type:application/json; charset=UTF-8)
 			<return type="String">
 			</return>
 			<description>
+			Return the absolute directory path of user data path([user://]).
 			</description>
 		</method>
 		<method name="get_system_dir" qualifiers="const">
@@ -41487,6 +41501,17 @@ This method controls whether the position between two cached points is interpola
 			<description>
 			</description>
 		</method>
+		<method name="get_linear_velocity" qualifiers="const">
+			<return type="Vector3">
+			</return>
+			<description>
+			Returns the VehicleBody's velocity vector. To get the absolute speed in scalar value, get the length of the return vector in pixels/second. Example:
+			[codeblock]
+			# vehicle is an instance of VehicleBody
+			var speed = vehicle.get_linear_velocity().length()
+			[/codeblock]
+			</description>
+		</method>
 	</methods>
 	<constants>
 	</constants>

+ 15 - 15
drivers/SCsub

@@ -1,9 +1,12 @@
 Import('env')
 
+env_drivers = env.Clone()
+
 env.drivers_sources=[]
 #env.add_source_files(env.drivers_sources,"*.cpp")
-env.Append(CPPPATH=["vorbis"])
-Export('env')
+env_drivers.Append(CPPPATH=["vorbis"])
+
+Export('env_drivers')
 
 SConscript('unix/SCsub');
 SConscript('alsa/SCsub');
@@ -14,12 +17,9 @@ SConscript('gl_context/SCsub');
 SConscript('pnm/SCsub');
 
 if (env['openssl']!='no'):
-	env_ssl = env.Clone()
-	Export('env_ssl')
-
-	env_ssl.Append(CPPFLAGS=['-DOPENSSL_ENABLED']);
+	env_drivers.Append(CPPFLAGS=['-DOPENSSL_ENABLED']);
 	if (env['openssl']=="builtin"):
-		env_ssl.Append(CPPPATH=['#drivers/builtin_openssl2'])
+		env_drivers.Append(CPPPATH=['#drivers/builtin_openssl2'])
 		SConscript("builtin_openssl2/SCsub");
 
 	SConscript('openssl/SCsub')
@@ -47,7 +47,7 @@ if (env["vorbis"]=="yes" or env["speex"]=="yes" or env["theoralib"]=="yes" or en
 if (env["vorbis"]=="yes"):
         SConscript("vorbis/SCsub");
 if (env["opus"]=="yes"):
-		SConscript('opus/SCsub');
+	SConscript('opus/SCsub');
 if (env["tools"]=="yes"):
 	SConscript("convex_decomp/SCsub");
 
@@ -84,14 +84,14 @@ if (env.split_drivers): #split drivers, this used to be needed for windows until
 		base = string.join(fname.split("/")[:2], "/")
 		if base != cur_base and len(list) > max_src:
 			if num > 0:
-				lib = env.Library("drivers"+str(num), list)
+				lib = env_drivers.Library("drivers"+str(num), list)
 				lib_list.append(lib)
 				list = []
 			num = num+1
 		cur_base = base
 		list.append(f)
 
-	lib = env.Library("drivers"+str(num), list)
+	lib = env_drivers.Library("drivers"+str(num), list)
 	lib_list.append(lib)
 
 	if len(lib_list) > 0:
@@ -99,15 +99,15 @@ if (env.split_drivers): #split drivers, this used to be needed for windows until
 		if os.name=='posix' and sys.platform=='msys':
 			env.Replace(ARFLAGS=['rcsT'])
 
-			lib = env.Library("drivers_collated", lib_list)
+			lib = env_drivers.Library("drivers_collated", lib_list)
 			lib_list = [lib]
 
 	drivers_base=[]
-	env.add_source_files(drivers_base,"*.cpp")
-	lib_list.insert(0, env.Library("drivers", drivers_base))
+	env_drivers.add_source_files(drivers_base,"*.cpp")
+	lib_list.insert(0, env_drivers.Library("drivers", drivers_base))
 
 	env.Prepend(LIBS=lib_list)
 else:
-	env.add_source_files(env.drivers_sources,"*.cpp")
-	lib = env.Library("drivers",env.drivers_sources)
+	env_drivers.add_source_files(env.drivers_sources,"*.cpp")
+	lib = env_drivers.Library("drivers",env.drivers_sources)
 	env.Prepend(LIBS=[lib])

+ 9 - 9
drivers/builtin_openssl2/SCsub

@@ -1,5 +1,5 @@
 Import('env')
-Import('env_ssl')
+Import('env_drivers')
 
 openssl_sources = [
 "ssl/t1_lib.c",
@@ -642,17 +642,17 @@ openssl_sources = [
 
 #env.drivers_sources+=openssl_sources
 
-env_ssl.Append(CPPPATH=["#drivers/builtin_openssl2/crypto"])
-env_ssl.Append(CPPPATH=["#drivers/builtin_openssl2/openssl"])
-env_ssl.Append(CPPPATH=["#drivers/builtin_openssl2/crypto/evp"])
-env_ssl.Append(CPPPATH=["#drivers/builtin_openssl2/crypto/asn1"])
-env_ssl.Append(CPPPATH=["#drivers/builtin_openssl2/crypto/modes"])
+env_drivers.Append(CPPPATH=["#drivers/builtin_openssl2/crypto"])
+env_drivers.Append(CPPPATH=["#drivers/builtin_openssl2/openssl"])
+env_drivers.Append(CPPPATH=["#drivers/builtin_openssl2/crypto/evp"])
+env_drivers.Append(CPPPATH=["#drivers/builtin_openssl2/crypto/asn1"])
+env_drivers.Append(CPPPATH=["#drivers/builtin_openssl2/crypto/modes"])
 #env_ssl.Append(CPPPATH=["#drivers/builtin_openssl2/crypto/store"])
-env_ssl.Append(CPPFLAGS=["-DOPENSSL_NO_ASM","-DOPENSSL_THREADS","-DL_ENDIAN"])
+env_drivers.Append(CPPFLAGS=["-DOPENSSL_NO_ASM","-DOPENSSL_THREADS","-DL_ENDIAN"])
 
 # Workaround for compilation error with GCC/Clang when -Werror is too greedy (GH-4517)
 import os
 if not (os.name=="nt" and os.getenv("VSINSTALLDIR")!=None): # not Windows and not MSVC
-	env_ssl.Append(CFLAGS=["-Wno-error=implicit-function-declaration"])
+	env_drivers.Append(CFLAGS=["-Wno-error=implicit-function-declaration"])
 
-env_ssl.add_source_files(env.drivers_sources,openssl_sources)
+env_drivers.add_source_files(env.drivers_sources,openssl_sources)

+ 3 - 3
drivers/openssl/SCsub

@@ -1,6 +1,6 @@
-Import('env_ssl')
+Import('env_drivers')
 Import('env')
 
-env_ssl.add_source_files(env.drivers_sources,"*.cpp")
-env_ssl.add_source_files(env.drivers_sources,"*.c")
+env_drivers.add_source_files(env.drivers_sources,"*.cpp")
+env_drivers.add_source_files(env.drivers_sources,"*.c")
 

+ 3 - 2
drivers/png/SCsub

@@ -1,4 +1,5 @@
 Import('env')
+Import('env_drivers')
 
 
 png_sources = [
@@ -25,7 +26,7 @@ png_sources = [
 # Currently .ASM filter_neon.S does not compile on NT.
 import os
 if ("neon_enabled" in env and env["neon_enabled"]) and os.name!="nt":
-	env.Append(CPPFLAGS=["-DPNG_ARM_NEON_OPT=2"])
+	env_drivers.Append(CPPFLAGS=["-DPNG_ARM_NEON_OPT=2"])
 	env_neon = env.Clone();
 	if "S_compiler" in env:
 		env_neon['CC'] = env['S_compiler']
@@ -33,7 +34,7 @@ if ("neon_enabled" in env and env["neon_enabled"]) and os.name!="nt":
 	png_sources.append(env_neon.Object("#drivers/png/arm/arm_init.c"))
 	png_sources.append(env_neon.Object("#drivers/png/arm/filter_neon.S"))
 else:
-	env.Append(CPPFLAGS=["-DPNG_ARM_NEON_OPT=0"])
+	env_drivers.Append(CPPFLAGS=["-DPNG_ARM_NEON_OPT=0"])
 
 env.drivers_sources+=png_sources
 

+ 0 - 1
platform/android/detect.py

@@ -21,7 +21,6 @@ def get_opts():
 
 	return [
 			('ANDROID_NDK_ROOT', 'the path to Android NDK', os.environ.get("ANDROID_NDK_ROOT", 0)),
-			('NDK_TOOLCHAIN', 'toolchain to use for the NDK',"arm-eabi-4.4.0"),
 			('NDK_TARGET', 'toolchain to use for the NDK',os.environ.get("NDK_TARGET", "arm-linux-androideabi-4.9")),
 			('NDK_TARGET_X86', 'toolchain to use for the NDK x86',os.environ.get("NDK_TARGET_X86", "x86-4.9")),
 			('ndk_platform', 'compile for platform: (android-<api> , example: android-15)',"android-15"),

+ 1 - 1
platform/android/globals/global_defaults.h

@@ -1,3 +1,3 @@
 
 
-void register_android_global_defaults();
+void register_android_global_defaults();

+ 1 - 1
platform/iphone/globals/global_defaults.h

@@ -1,3 +1,3 @@
 
 
-void register_iphone_global_defaults();
+void register_iphone_global_defaults();

+ 15 - 15
platform/javascript/dom_keys.h

@@ -220,17 +220,17 @@
 #define DOM_VK_WIN_OEM_CLEAR 0xFE
 
 int dom2godot_scancode(int dom_keycode) {
-	
+
 	if (DOM_VK_0 <= dom_keycode && dom_keycode <= DOM_VK_Z) {
 		// ASCII intersection
 		return dom_keycode;
 	}
-	
+
 	if (DOM_VK_NUMPAD0 <= dom_keycode && dom_keycode <= DOM_VK_NUMPAD9) {
 		// Numpad numbers
 		return KEY_KP_0 + (dom_keycode - DOM_VK_NUMPAD0);
 	}
-	
+
 	if (DOM_VK_F1 <= dom_keycode && dom_keycode <= DOM_VK_F16) {
 		// F1-F16
 		return KEY_F1 + (dom_keycode - DOM_VK_F1);
@@ -259,7 +259,7 @@ int dom2godot_scancode(int dom_keycode) {
 
 		case DOM_VK_PAUSE: return KEY_PAUSE;
 		case DOM_VK_CAPS_LOCK: return KEY_CAPSLOCK;
-		
+
 		/*
 		case DOM_VK_KANA: return KEY_UNKNOWN;
 		case DOM_VK_HANGUL: return KEY_UNKNOWN;
@@ -269,7 +269,7 @@ int dom2godot_scancode(int dom_keycode) {
 		case DOM_VK_HANJA: return KEY_UNKNOWN;
 		case DOM_VK_KANJI: return KEY_UNKNOWN;
 		*/
-		
+
 		case DOM_VK_ESCAPE: return KEY_ESCAPE;
 		/*
 		case DOM_VK_CONVERT: return KEY_UNKNOWN;
@@ -277,8 +277,8 @@ int dom2godot_scancode(int dom_keycode) {
 		case DOM_VK_ACCEPT: return KEY_UNKNOWN;
 		case DOM_VK_MODECHANGE: return KEY_UNKNOWN;
 		*/
-		
-		case DOM_VK_SPACE: return KEY_SPACE;		
+
+		case DOM_VK_SPACE: return KEY_SPACE;
 		case DOM_VK_PAGE_UP: return KEY_PAGEUP;
 		case DOM_VK_PAGE_DOWN: return KEY_PAGEDOWN;
 		case DOM_VK_END: return KEY_END;
@@ -287,7 +287,7 @@ int dom2godot_scancode(int dom_keycode) {
 		case DOM_VK_UP: return KEY_UP;
 		case DOM_VK_RIGHT: return KEY_RIGHT;
 		case DOM_VK_DOWN: return KEY_DOWN;
-		
+
 		//case DOM_VK_SELECT: return KEY_UNKNOWN;
 
 		case DOM_VK_PRINTSCREEN: // this is the usual printScreen key
@@ -297,7 +297,7 @@ int dom2godot_scancode(int dom_keycode) {
 		//case DOM_VK_EXECUTE: return KEY_UNKNOWN;
 		case DOM_VK_INSERT: return KEY_INSERT;
 		case DOM_VK_DELETE: return KEY_DELETE;
-		
+
 		case DOM_VK_META:
 		case DOM_VK_WIN:
 			return KEY_META;
@@ -312,7 +312,7 @@ int dom2godot_scancode(int dom_keycode) {
 		case DOM_VK_SUBTRACT: return KEY_KP_SUBTRACT;
 		case DOM_VK_DECIMAL: return KEY_KP_PERIOD;
 		case DOM_VK_DIVIDE: return KEY_KP_DIVIDE;
-		
+
 		/*
 		case DOM_VK_F17: return KEY_UNKNOWN;
 		case DOM_VK_F18: return KEY_UNKNOWN;
@@ -323,7 +323,7 @@ int dom2godot_scancode(int dom_keycode) {
 		case DOM_VK_F23: return KEY_UNKNOWN;
 		case DOM_VK_F24: return KEY_UNKNOWN;
 		*/
-		
+
 		case DOM_VK_NUM_LOCK: return KEY_NUMLOCK;
 		case DOM_VK_SCROLL_LOCK: return KEY_SCROLLLOCK;
 
@@ -352,11 +352,11 @@ int dom2godot_scancode(int dom_keycode) {
 		case DOM_VK_OPEN_CURLY_BRACKET: return KEY_BRACELEFT;
 		case DOM_VK_CLOSE_CURLY_BRACKET: return KEY_BRACERIGHT;
 		case DOM_VK_TILDE: return KEY_ASCIITILDE;
-		
+
 		case DOM_VK_VOLUME_MUTE: return KEY_VOLUMEMUTE;
 		case DOM_VK_VOLUME_DOWN: return KEY_VOLUMEDOWN;
 		case DOM_VK_VOLUME_UP: return KEY_VOLUMEUP;
-		
+
 		case DOM_VK_COMMA: return KEY_COMMA;
 		case DOM_VK_PERIOD: return KEY_PERIOD;
 		case DOM_VK_SLASH: return KEY_SLASH;
@@ -365,9 +365,9 @@ int dom2godot_scancode(int dom_keycode) {
 		case DOM_VK_BACK_SLASH: return KEY_BACKSLASH;
 		case DOM_VK_CLOSE_BRACKET: return KEY_BRACKETRIGHT;
 		case DOM_VK_QUOTE: return KEY_APOSTROPHE;
-		
+
 		// rest is OEM/unusual
-		
+
 		default: return KEY_UNKNOWN;
 	};
 }

+ 4 - 1
platform/osx/detect.py

@@ -68,9 +68,12 @@ def configure(env):
 		if (env["bits"]=="64"):
 		    env.Append(CCFLAGS=['-arch', 'x86_64'])
 		    env.Append(LINKFLAGS=['-arch', 'x86_64'])
-		else:
+		elif (env["bits"]=="32"):
 		    env.Append(CCFLAGS=['-arch', 'i386'])
 		    env.Append(LINKFLAGS=['-arch', 'i386'])
+		else:
+		    env.Append(CCFLAGS=['-arch', 'i386', '-arch', 'x86_64'])
+		    env.Append(LINKFLAGS=['-arch', 'i386', '-arch', 'x86_64'])
 	else:
 		#osxcross build
 		root=os.environ.get("OSXCROSS_ROOT",0)

+ 1 - 1
platform/windows/os_windows.h

@@ -103,7 +103,7 @@ class OS_Windows : public OS {
 	HDC		hDC;	// Private GDI Device Context
 	HINSTANCE	hInstance;		// Holds The Instance Of The Application
 	HWND hWnd;
-	
+
 	HCURSOR hCursor;
 
 	Size2 window_rect;

+ 1 - 1
scene/2d/canvas_modulate.cpp

@@ -62,7 +62,7 @@ String CanvasModulate::get_configuration_warning() const {
 	get_tree()->get_nodes_in_group("_canvas_modulate_"+itos(get_canvas().get_id()),&nodes);
 
 	if (nodes.size()>1) {
-		return TTR("Only one visible CanvasModulate is allowed per scene (or set of instanced scenes). The first one created will work, while the rest will be ignored.");
+		return TTR("Only one visible CanvasModulate is allowed per scene (or set of instanced scenes). The first created one will work, while the rest will be ignored.");
 	}
 
 	return String();

+ 1 - 1
scene/2d/canvas_modulate.h

@@ -16,7 +16,7 @@ public:
 	void set_color(const Color& p_color);
 	Color get_color() const;
 
-	String CanvasModulate::get_configuration_warning() const;
+	String get_configuration_warning() const;
 
 	CanvasModulate();
 	~CanvasModulate();

+ 1 - 1
scene/2d/path_2d.cpp

@@ -243,7 +243,7 @@ String PathFollow2D::get_configuration_warning() const {
 		return String();
 
 	if (!get_parent() || !get_parent()->cast_to<Path2D>()) {
-		return TTR("PathFolow2D only works when set as a child of a Path2D node.");
+		return TTR("PathFollow2D only works when set as a child of a Path2D node.");
 	}
 
 	return String();

+ 1 - 1
scene/2d/sprite.cpp

@@ -540,7 +540,7 @@ String ViewportSprite::get_configuration_warning() const {
 			Viewport *vp = n->cast_to<Viewport>();
 			if (!vp->is_set_as_render_target()) {
 
-				return TTR("The Viewport set in the path property must be set as 'render taget' in order for this sprite to work");
+				return TTR("The Viewport set in the path property must be set as 'render target' in order for this sprite to work.");
 			}
 		}
 	}

+ 2 - 2
scene/2d/visibility_notifier_2d.cpp

@@ -347,11 +347,11 @@ void VisibilityEnabler2D::_node_removed(Node* p_node) {
 }
 
 String VisibilityEnabler2D::get_configuration_warning() const {
-
+#ifdef TOOLS_ENABLED
 	if (is_inside_tree() && get_parent() && (get_parent()->get_filename()==String() && get_parent()!=get_tree()->get_edited_scene_root())) {
 		return TTR("VisibilityEnable2D works best when used with the edited scene root directly as parent.");
 	}
-
+#endif
 	return String();
 }
 

+ 7 - 1
scene/3d/vehicle_body.cpp

@@ -936,7 +936,7 @@ void VehicleBody::_direct_state_changed(Object *p_state) {
 		wheel.m_deltaRotation *= real_t(0.99);//damping of rotation when not in contact
 
 	}
-
+	linear_velocity = s->get_linear_velocity();
 }
 
 void VehicleBody::set_mass(real_t p_mass) {
@@ -990,6 +990,10 @@ float VehicleBody::get_steering() const{
 	return m_steeringValue;
 }
 
+Vector3 VehicleBody::get_linear_velocity()
+{
+	return linear_velocity;
+}
 
 void VehicleBody::_bind_methods(){
 
@@ -1008,6 +1012,8 @@ void VehicleBody::_bind_methods(){
 	ObjectTypeDB::bind_method(_MD("set_steering","steering"),&VehicleBody::set_steering);
 	ObjectTypeDB::bind_method(_MD("get_steering"),&VehicleBody::get_steering);
 
+	ObjectTypeDB::bind_method(_MD("get_linear_velocity"),&VehicleBody::get_linear_velocity);
+
 	ObjectTypeDB::bind_method(_MD("_direct_state_changed"),&VehicleBody::_direct_state_changed);
 
 	ADD_PROPERTY( PropertyInfo(Variant::REAL,"motion/engine_force",PROPERTY_HINT_RANGE,"0.00,1024.0,0.01"),_SCS("set_engine_force"),_SCS("get_engine_force"));

+ 1 - 0
scene/3d/vehicle_body.h

@@ -178,6 +178,7 @@ public:
 	void set_steering(float p_steering);
 	float get_steering() const;
 
+	Vector3 get_linear_velocity();
 
 	VehicleBody();
 };

+ 1 - 1
scene/animation/animation_player.cpp

@@ -1012,7 +1012,7 @@ void AnimationPlayer::play(const StringName& p_name, float p_custom_blend, float
 		queued.clear();
 	_set_process(true); // always process when starting an animation
 	playing = true;
-	
+
 	emit_signal(SceneStringNames::get_singleton()->animation_started, c.assigned);
 
 	if (is_inside_tree() &&  get_tree()->is_editor_hint())

+ 1 - 1
scene/main/http_request.cpp

@@ -494,7 +494,7 @@ HTTPRequest::HTTPRequest()
 	max_redirects=8;
 	body_len=-1;
 	got_response=false;
-	validate_ssl=false;	
+	validate_ssl=false;
 	use_ssl=false;
 	response_code=0;
 	request_sent=false;

+ 3 - 3
scene/main/viewport.cpp

@@ -1842,6 +1842,8 @@ void Viewport::_gui_input_event(InputEvent p_event) {
 				if (gui.mouse_over)
 					gui.mouse_over->notification(Control::NOTIFICATION_MOUSE_EXIT);
 
+				_gui_cancel_tooltip();
+
 				if (over)
 					over->notification(Control::NOTIFICATION_MOUSE_ENTER);
 
@@ -1849,8 +1851,6 @@ void Viewport::_gui_input_event(InputEvent p_event) {
 
 			gui.mouse_over=over;
 
-			_gui_cancel_tooltip();
-
 			if (gui.drag_preview) {
 				gui.drag_preview->set_pos(mpos);
 			}
@@ -2407,7 +2407,7 @@ String Viewport::get_configuration_warning() const {
 
 	if (get_parent() && !get_parent()->cast_to<Control>() && !render_target) {
 
-		return TTR("This viewport is not set as render target. If you intend for it to display it's contents directly to the screen, make it a child of a Control so it can obtain a size. Otherwise, make it a RenderTarget and assign it's internal texture to some node for display.");
+		return TTR("This viewport is not set as render target. If you intend for it to display its contents directly to the screen, make it a child of a Control so it can obtain a size. Otherwise, make it a RenderTarget and assign its internal texture to some node for display.");
 	}
 
 	return String();

+ 1 - 1
scene/resources/curve.cpp

@@ -544,7 +544,7 @@ void Curve2D::_bake() const {
 	List<Vector2> pointlist;
 
 	pointlist.push_back(pos); //start always from origin
-	
+
 	for(int i=0;i<points.size()-1;i++) {
 
 		float step = 0.1; // at least 10 substeps ought to be enough?

+ 22 - 22
scene/resources/stb_truetype.h

@@ -29,7 +29,7 @@
 //       "Zer" on mollyrocket (with fix)
 //       Cass Everitt
 //       stoiko (Haemimont Games)
-//       Brian Hook 
+//       Brian Hook
 //       Walter van Niftrik
 //       David Gow
 //       David Given
@@ -218,7 +218,7 @@
 //   Curve tesselation                  120 LOC   \__ 550 LOC Bitmap creation
 //   Bitmap management                  100 LOC   /
 //   Baked bitmap interface              70 LOC  /
-//   Font name matching & access        150 LOC  ---- 150 
+//   Font name matching & access        150 LOC  ---- 150
 //   C runtime library abstraction       60 LOC  ----  60
 //
 //
@@ -311,7 +311,7 @@ int main(int argc, char **argv)
    }
    return 0;
 }
-#endif 
+#endif
 //
 // Output:
 //
@@ -325,9 +325,9 @@ int main(int argc, char **argv)
 //  :@@.  M@M
 //   @@@o@@@@
 //   :M@@V:@@.
-//  
+//
 //////////////////////////////////////////////////////////////////////////////
-// 
+//
 // Complete program: print "Hello World!" banner, with bugs
 //
 #if 0
@@ -599,7 +599,7 @@ STBTT_DEF int  stbtt_PackFontRangesRenderIntoRects(stbtt_pack_context *spc, stbt
 // Calling these functions in sequence is roughly equivalent to calling
 // stbtt_PackFontRanges(). If you more control over the packing of multiple
 // fonts, or if you want to pack custom data into a font texture, take a look
-// at the source to of stbtt_PackFontRanges() and create a custom version 
+// at the source to of stbtt_PackFontRanges() and create a custom version
 // using these functions, e.g. call GatherRects multiple times,
 // building up a single array of rects, then call PackRects once,
 // then call RenderIntoRects repeatedly. This may result in a
@@ -1350,7 +1350,7 @@ STBTT_DEF int stbtt_GetGlyphShape(const stbtt_fontinfo *info, int glyph_index, s
             if (i != 0)
                num_vertices = stbtt__close_shape(vertices, num_vertices, was_off, start_off, sx,sy,scx,scy,cx,cy);
 
-            // now start the new one               
+            // now start the new one
             start_off = !(flags & 1);
             if (start_off) {
                // if we start off with an off-curve point, then when we need to find a point on the curve
@@ -1403,7 +1403,7 @@ STBTT_DEF int stbtt_GetGlyphShape(const stbtt_fontinfo *info, int glyph_index, s
          int comp_num_verts = 0, i;
          stbtt_vertex *comp_verts = 0, *tmp = 0;
          float mtx[6] = {1,0,0,1,0,0}, m, n;
-         
+
          flags = ttSHORT(comp); comp+=2;
          gidx = ttSHORT(comp); comp+=2;
 
@@ -1433,7 +1433,7 @@ STBTT_DEF int stbtt_GetGlyphShape(const stbtt_fontinfo *info, int glyph_index, s
             mtx[2] = ttSHORT(comp)/16384.0f; comp+=2;
             mtx[3] = ttSHORT(comp)/16384.0f; comp+=2;
          }
-         
+
          // Find transformation scales.
          m = (float) STBTT_sqrt(mtx[0]*mtx[0] + mtx[1]*mtx[1]);
          n = (float) STBTT_sqrt(mtx[2]*mtx[2] + mtx[3]*mtx[3]);
@@ -1691,7 +1691,7 @@ static stbtt__active_edge *stbtt__new_active(stbtt__hheap *hh, stbtt__edge *e, i
    float dxdy = (e->x1 - e->x0) / (e->y1 - e->y0);
    STBTT_assert(z != NULL);
    if (!z) return z;
-   
+
    // round dx down to avoid overshooting
    if (dxdy < 0)
       z->dx = -STBTT_ifloor(STBTT_FIX * -dxdy);
@@ -1769,7 +1769,7 @@ static void stbtt__fill_active_edges(unsigned char *scanline, int len, stbtt__ac
             }
          }
       }
-      
+
       e = e->next;
    }
 }
@@ -2441,7 +2441,7 @@ STBTT_DEF unsigned char *stbtt_GetGlyphBitmapSubpixel(const stbtt_fontinfo *info
 {
    int ix0,iy0,ix1,iy1;
    stbtt__bitmap gbm;
-   stbtt_vertex *vertices;   
+   stbtt_vertex *vertices;
    int num_verts = stbtt_GetGlyphShape(info, glyph, &vertices);
 
    if (scale_x == 0) scale_x = scale_y;
@@ -2464,7 +2464,7 @@ STBTT_DEF unsigned char *stbtt_GetGlyphBitmapSubpixel(const stbtt_fontinfo *info
    if (height) *height = gbm.h;
    if (xoff  ) *xoff   = ix0;
    if (yoff  ) *yoff   = iy0;
-   
+
    if (gbm.w && gbm.h) {
       gbm.pixels = (unsigned char *) STBTT_malloc(gbm.w * gbm.h, info->userdata);
       if (gbm.pixels) {
@@ -2475,7 +2475,7 @@ STBTT_DEF unsigned char *stbtt_GetGlyphBitmapSubpixel(const stbtt_fontinfo *info
    }
    STBTT_free(vertices, info->userdata);
    return gbm.pixels;
-}   
+}
 
 STBTT_DEF unsigned char *stbtt_GetGlyphBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int glyph, int *width, int *height, int *xoff, int *yoff)
 {
@@ -2487,7 +2487,7 @@ STBTT_DEF void stbtt_MakeGlyphBitmapSubpixel(const stbtt_fontinfo *info, unsigne
    int ix0,iy0;
    stbtt_vertex *vertices;
    int num_verts = stbtt_GetGlyphShape(info, glyph, &vertices);
-   stbtt__bitmap gbm;   
+   stbtt__bitmap gbm;
 
    stbtt_GetGlyphBitmapBoxSubpixel(info, glyph, scale_x, scale_y, shift_x, shift_y, &ix0,&iy0,0,0);
    gbm.pixels = output;
@@ -2509,7 +2509,7 @@ STBTT_DEF void stbtt_MakeGlyphBitmap(const stbtt_fontinfo *info, unsigned char *
 STBTT_DEF unsigned char *stbtt_GetCodepointBitmapSubpixel(const stbtt_fontinfo *info, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint, int *width, int *height, int *xoff, int *yoff)
 {
    return stbtt_GetGlyphBitmapSubpixel(info, scale_x, scale_y,shift_x,shift_y, stbtt_FindGlyphIndex(info,codepoint), width,height,xoff,yoff);
-}   
+}
 
 STBTT_DEF void stbtt_MakeCodepointBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint)
 {
@@ -2519,7 +2519,7 @@ STBTT_DEF void stbtt_MakeCodepointBitmapSubpixel(const stbtt_fontinfo *info, uns
 STBTT_DEF unsigned char *stbtt_GetCodepointBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int codepoint, int *width, int *height, int *xoff, int *yoff)
 {
    return stbtt_GetCodepointBitmapSubpixel(info, scale_x, scale_y, 0.0f,0.0f, codepoint, width,height,xoff,yoff);
-}   
+}
 
 STBTT_DEF void stbtt_MakeCodepointBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int codepoint)
 {
@@ -2644,7 +2644,7 @@ static void stbrp_init_target(stbrp_context *con, int pw, int ph, stbrp_node *no
    con->y = 0;
    con->bottom_y = 0;
    STBTT__NOTUSED(nodes);
-   STBTT__NOTUSED(num_nodes);   
+   STBTT__NOTUSED(num_nodes);
 }
 
 static void stbrp_pack_rects(stbrp_context *con, stbrp_rect *rects, int num_rects)
@@ -2996,7 +2996,7 @@ STBTT_DEF int stbtt_PackFontRanges(stbtt_pack_context *spc, unsigned char *fontd
    n = 0;
    for (i=0; i < num_ranges; ++i)
       n += ranges[i].num_chars;
-         
+
    rects = (stbrp_rect *) STBTT_malloc(sizeof(*rects) * n, spc->user_allocator_context);
    if (rects == NULL)
       return 0;
@@ -3007,7 +3007,7 @@ STBTT_DEF int stbtt_PackFontRanges(stbtt_pack_context *spc, unsigned char *fontd
    n = stbtt_PackFontRangesGatherRects(spc, &info, ranges, num_ranges, rects);
 
    stbtt_PackFontRangesPackRects(spc, rects, n);
-  
+
    return_value = stbtt_PackFontRangesRenderIntoRects(spc, &info, ranges, num_ranges, rects);
 
    STBTT_free(rects, spc->user_allocator_context);
@@ -3060,7 +3060,7 @@ STBTT_DEF void stbtt_GetPackedQuad(stbtt_packedchar *chardata, int pw, int ph, i
 //
 
 // check if a utf8 string contains a prefix which is the utf16 string; if so return length of matching utf8 string
-static stbtt_int32 stbtt__CompareUTF8toUTF16_bigendian_prefix(const stbtt_uint8 *s1, stbtt_int32 len1, const stbtt_uint8 *s2, stbtt_int32 len2) 
+static stbtt_int32 stbtt__CompareUTF8toUTF16_bigendian_prefix(const stbtt_uint8 *s1, stbtt_int32 len1, const stbtt_uint8 *s2, stbtt_int32 len2)
 {
    stbtt_int32 i=0;
 
@@ -3099,7 +3099,7 @@ static stbtt_int32 stbtt__CompareUTF8toUTF16_bigendian_prefix(const stbtt_uint8
    return i;
 }
 
-STBTT_DEF int stbtt_CompareUTF8toUTF16_bigendian(const char *s1, int len1, const char *s2, int len2) 
+STBTT_DEF int stbtt_CompareUTF8toUTF16_bigendian(const char *s1, int len1, const char *s2, int len2)
 {
    return len1 == stbtt__CompareUTF8toUTF16_bigendian_prefix((const stbtt_uint8*) s1, len1, (const stbtt_uint8*) s2, len2);
 }

+ 1 - 1
scene/resources/theme.cpp

@@ -374,7 +374,7 @@ void Theme::get_stylebox_types(List<StringName> *p_list) const {
 	const StringName *key=NULL;
 	while((key=style_map.next(key))) {
 		p_list->push_back(*key);
-	}	
+	}
 }
 
 void Theme::set_font(const StringName& p_name,const StringName& p_type,const Ref<Font>& p_font) {

+ 1 - 1
servers/visual/visual_server_raster.h

@@ -657,7 +657,7 @@ public:
 
 	virtual RID texture_create();
 	virtual void texture_allocate(RID p_texture,int p_width, int p_height,Image::Format p_format,uint32_t p_flags=TEXTURE_FLAGS_DEFAULT);
-	virtual void texture_set_data(RID p_texture,const Image& p_image,CubeMapSide p_cube_side=CUBEMAP_LEFT);	
+	virtual void texture_set_data(RID p_texture,const Image& p_image,CubeMapSide p_cube_side=CUBEMAP_LEFT);
 	virtual Image texture_get_data(RID p_texture,CubeMapSide p_cube_side=CUBEMAP_LEFT) const;
 	virtual void texture_set_flags(RID p_texture,uint32_t p_flags) ;
 	virtual uint32_t texture_get_flags(RID p_texture) const;

+ 8 - 8
tools/editor/addon_editor_plugin.cpp

@@ -1085,7 +1085,7 @@ EditorAddonLibrary::EditorAddonLibrary() {
 
 
 
-	search_hb->add_child( memnew( Label(TTR("Search: "))));
+	search_hb->add_child( memnew( Label(TTR("Search:")+" ")));
 	filter =memnew( LineEdit );
 	search_hb->add_child(filter);
 	filter->set_h_size_flags(SIZE_EXPAND_FILL);
@@ -1112,7 +1112,7 @@ EditorAddonLibrary::EditorAddonLibrary() {
 	HBoxContainer *search_hb2 = memnew( HBoxContainer );
 	library_main->add_child(search_hb2);
 
-	search_hb2->add_child( memnew( Label("Sort: ")));
+	search_hb2->add_child( memnew( Label(TTR("Sort:")+" ")));
 	sort = memnew( OptionButton );
 	for(int i=0;i<SORT_MAX;i++) {
 		sort->add_item(sort_text[i]);
@@ -1123,26 +1123,26 @@ EditorAddonLibrary::EditorAddonLibrary() {
 	sort->set_h_size_flags(SIZE_EXPAND_FILL);
 
 	reverse = memnew( CheckBox);
-	reverse->set_text("Reverse");
+	reverse->set_text(TTR("Reverse"));
 	search_hb2->add_child(reverse);
 
 	search_hb2->add_child(memnew(VSeparator));
 
 	//search_hb2->add_spacer();
 
-	search_hb2->add_child( memnew( Label("Category: ")));
+	search_hb2->add_child( memnew( Label(TTR("Category:")+" ")));
 	categories = memnew( OptionButton );
-	categories->add_item("All");
+	categories->add_item(TTR("All"));
 	search_hb2->add_child(categories);
 	categories->set_h_size_flags(SIZE_EXPAND_FILL);
 	//search_hb2->add_spacer();
 
 	search_hb2->add_child(memnew(VSeparator));
 
-	search_hb2->add_child( memnew( Label("Site: ")));
+	search_hb2->add_child( memnew( Label(TTR("Site:")+" ")));
 	repository = memnew( OptionButton );
 
-	repository->add_item(TTR("Godot"));
+	repository->add_item("Godot");
 	search_hb2->add_child(repository);
 	repository->set_h_size_flags(SIZE_EXPAND_FILL);
 
@@ -1232,7 +1232,7 @@ EditorAddonLibrary::EditorAddonLibrary() {
 	asset_open = memnew( EditorFileDialog );
 
 	asset_open->set_access(EditorFileDialog::ACCESS_FILESYSTEM);
-	asset_open->add_filter("*.zip ; Assets ZIP File");
+	asset_open->add_filter("*.zip ; "+TTR("Assets ZIP File"));
 	asset_open->set_mode(EditorFileDialog::MODE_OPEN_FILE);
 	add_child(asset_open);
 	asset_open->connect("file_selected",this,"_asset_file_selected");

+ 14 - 14
tools/editor/animation_editor.cpp

@@ -889,7 +889,7 @@ void AnimationKeyEditor::_menu_track(int p_type) {
 				case TRACK_MENU_SET_ALL_TRANS_OUTIN: t=-2.0; break;
 			}
 
-			undo_redo->create_action(TTR("Set Transitions to: ")+rtos(t));
+			undo_redo->create_action(TTR("Set Transitions to:")+" "+rtos(t));
 
 			for(Map<SelectedKey,KeyInfo>::Element *E=selection.back();E;E=E->prev()) {
 
@@ -2096,7 +2096,7 @@ void AnimationKeyEditor::_track_editor_input_event(const InputEvent& p_input) {
 /*
 						if (ofsx < remove_icon->get_width()) {
 
-							undo_redo->create_action(TTR("Remove Anim Track"));
+							undo_redo->create_action("Remove Anim Track");
 							undo_redo->add_do_method(animation.ptr(),"remove_track",idx);
 							undo_redo->add_undo_method(animation.ptr(),"add_track",animation->track_get_type(idx),idx);
 							undo_redo->add_undo_method(animation.ptr(),"track_set_path",idx,animation->track_get_path(idx));
@@ -2129,7 +2129,7 @@ void AnimationKeyEditor::_track_editor_input_event(const InputEvent& p_input) {
 						if (ofsx < move_down_icon->get_width()) {
 
 							if (idx < animation->get_track_count() -1) {
-								undo_redo->create_action(TTR("Move Anim Track Down"));
+								undo_redo->create_action("Move Anim Track Down");
 								undo_redo->add_do_method(animation.ptr(),"track_move_up",idx);
 								undo_redo->add_undo_method(animation.ptr(),"track_move_down",idx+1);
 								undo_redo->commit_action();
@@ -2142,7 +2142,7 @@ void AnimationKeyEditor::_track_editor_input_event(const InputEvent& p_input) {
 						if (ofsx < move_up_icon->get_width()) {
 
 							if (idx >0) {
-								undo_redo->create_action(TTR("Move Anim Track Up"));
+								undo_redo->create_action("Move Anim Track Up");
 								undo_redo->add_do_method(animation.ptr(),"track_move_down",idx);
 								undo_redo->add_undo_method(animation.ptr(),"track_move_up",idx-1);
 								undo_redo->commit_action();
@@ -2893,7 +2893,7 @@ void AnimationKeyEditor::_notification(int p_what) {
 				optimize_dialog->connect("confirmed",this,"_animation_optimize");
 
 				menu_track->get_popup()->add_child(tpp);
-				//menu_track->get_popup()->add_submenu_item(TTR("Set Transitions.."),"Transitions");
+				//menu_track->get_popup()->add_submenu_item("Set Transitions..","Transitions");
 				//menu_track->get_popup()->add_separator();
 				menu_track->get_popup()->add_item(TTR("Optimize Animation"),TRACK_MENU_OPTIMIZE);
 				menu_track->get_popup()->add_item(TTR("Clean-Up Animation"),TRACK_MENU_CLEAN_UP);
@@ -3113,9 +3113,9 @@ void AnimationKeyEditor::_query_insert(const InsertData& p_id) {
 		if (bool(EDITOR_DEF("animation/confirm_insert_track",true))) {
 			//potential new key, does not exist
 			if (insert_data.size()==1)
-				insert_confirm->set_text(TTR("Create NEW track for ")+p_id.query+TTR(" and insert key?"));
+				insert_confirm->set_text(vformat(TTR("Create NEW track for %s and insert key?"),p_id.query));
 			else
-				insert_confirm->set_text(TTR("Create ")+itos(insert_data.size())+TTR(" NEW tracks and insert keys?"));
+				insert_confirm->set_text(vformat(TTR("Create %d NEW tracks and insert keys?"),insert_data.size()));
 
 			insert_confirm->get_ok()->set_text(TTR("Create"));
 			insert_confirm->popup_centered_minsize();
@@ -3510,7 +3510,7 @@ void AnimationKeyEditor::_insert_delay() {
 		return;
 	}
 
-	undo_redo->create_action(TTR("Anim  Insert"));
+	undo_redo->create_action(TTR("Anim Insert"));
 
 	int last_track = animation->get_track_count();
 	bool advance=false;
@@ -3818,7 +3818,7 @@ AnimationKeyEditor::AnimationKeyEditor() {
 	hb->add_child( memnew( VSeparator ) );
 
 	Label *l = memnew( Label );
-	l->set_text(TTR("Len(s):"));
+	l->set_text(TTR("Length (s):"));
 	hb->add_child(l);
 
 	length = memnew( SpinBox );
@@ -3833,7 +3833,7 @@ AnimationKeyEditor::AnimationKeyEditor() {
 	length->connect("value_changed",this,"_animation_len_changed");
 
 	l = memnew( Label );
-	l->set_text(TTR("Step(s):"));
+	l->set_text(TTR("Step (s):"));
 	hb->add_child(l);
 
 	step = memnew( SpinBox );
@@ -3929,7 +3929,7 @@ AnimationKeyEditor::AnimationKeyEditor() {
 
 	/*keying = memnew( Button );
 	keying->set_toggle_mode(true);
-	//keying->set_text(TTR("Keys"));
+	//keying->set_text("Keys");
 	keying->set_anchor_and_margin(MARGIN_LEFT,ANCHOR_END,60);
 	keying->set_anchor_and_margin(MARGIN_RIGHT,ANCHOR_END,10);
 	keying->set_anchor_and_margin(MARGIN_BOTTOM,ANCHOR_BEGIN,55);
@@ -3939,7 +3939,7 @@ AnimationKeyEditor::AnimationKeyEditor() {
 	*/
 
 /*	l = memnew( Label );
-	l->set_text(TTR("Base: "));
+	l->set_text("Base: ");
 	l->set_pos(Point2(0,3));
 //	dr_panel->add_child(l);*/
 
@@ -4089,10 +4089,10 @@ AnimationKeyEditor::AnimationKeyEditor() {
 	cleanup_vb->add_child(cleanup_tracks);
 
 	cleanup_all = memnew( CheckButton );
-	cleanup_all->set_text(TTR("Clean-Up all animations"));
+	cleanup_all->set_text(TTR("Clean-up all animations"));
 	cleanup_vb->add_child(cleanup_all);
 
-	cleanup_dialog->set_title(TTR("Clean up Animation(s) (NO UNDO!)"));
+	cleanup_dialog->set_title(TTR("Clean-Up Animation(s) (NO UNDO!)"));
 	cleanup_dialog->get_ok()->set_text(TTR("Clean-Up"));
 
 	cleanup_dialog->connect("confirmed",this,"_menu_track",varray(TRACK_MENU_CLEAN_UP_CONFIRM));

+ 2 - 2
tools/editor/call_dialog.cpp

@@ -239,7 +239,7 @@ void CallDialog::set_object(Object *p_object,StringName p_selected) {
 	return_value->clear();
 
 	_update_method_list();
-	method_label->set_text(TTR("Method List For ' ")+p_object->get_type()+" ':");
+	method_label->set_text(vformat(TTR("Method List For '%s':"),p_object->get_type()));
 }
 
 CallDialog::CallDialog() {
@@ -323,7 +323,7 @@ CallDialog::CallDialog() {
 
 	label->set_begin( Point2( 15,54) );
 	label->set_end( Point2( 16,44) );
-	label->set_text(TTR("Parameters:"));
+	label->set_text("Parameters:");
 
 	add_child(label);
 	*/

+ 3 - 3
tools/editor/code_editor.cpp

@@ -216,7 +216,7 @@ void FindReplaceDialog::_replace() {
 
 		text_edit->set_v_scroll(vsval);
 //		text_edit->set_h_scroll(hsval);
-		error_label->set_text(TTR("Replaced ")+itos(rc)+TTR(" ocurrence(s)."));
+		error_label->set_text(vformat(TTR("Replaced %d ocurrence(s)."),rc));
 
 
 		//hide();
@@ -274,7 +274,7 @@ bool FindReplaceDialog::_search() {
 		return true;
 	} else {
 
-		set_error(TTR("Not Found!"));
+		set_error(TTR("Not found!"));
 		return false;
 	}
 
@@ -498,7 +498,7 @@ FindReplaceDialog::FindReplaceDialog() {
 
 void CodeTextEditor::_line_col_changed() {
 
-	String text = String()+TTR("Line: ")+itos(text_editor->cursor_get_line()+1)+TTR(", Col: ")+itos(text_editor->cursor_get_column());
+	String text = String()+TTR("Line:")+" "+itos(text_editor->cursor_get_line()+1)+", "+TTR("Col:")+" "+itos(text_editor->cursor_get_column());
 	line_col->set_text(text);
 }
 

+ 8 - 8
tools/editor/connections_dialog.cpp

@@ -294,8 +294,8 @@ void ConnectDialog::_bind_methods() {
 
 ConnectDialog::ConnectDialog() {
 
-	int margin = get_constant("margin",TTR("Dialogs"));
-	int button_margin = get_constant("button_margin",TTR("Dialogs"));
+	int margin = get_constant("margin","Dialogs");
+	int button_margin = get_constant("button_margin","Dialogs");
 
 
 	Label * label = memnew( Label );
@@ -416,7 +416,7 @@ ConnectDialog::ConnectDialog() {
 
 
 	/*dst_method_list = memnew( MenuButton );
-	dst_method_list->set_text(TTR("List.."));
+	dst_method_list->set_text("List..");
 	dst_method_list->set_anchor( MARGIN_RIGHT, ANCHOR_END );
 	dst_method_list->set_anchor( MARGIN_LEFT, ANCHOR_END );
 	dst_method_list->set_anchor( MARGIN_TOP, ANCHOR_END );
@@ -429,7 +429,7 @@ ConnectDialog::ConnectDialog() {
 	make_callback = memnew( CheckButton );
 	make_callback->set_toggle_mode(true);
 	make_callback->set_pressed( EDITOR_DEF("text_editor/create_signal_callbacks",true));
-	make_callback->set_text(TTR("Make Function  "));
+	make_callback->set_text(TTR("Make Function"));
 	dstm_hb->add_child(make_callback);
 
 	deferred = memnew( CheckButton );
@@ -447,7 +447,7 @@ ConnectDialog::ConnectDialog() {
 	realtime->set_anchor( MARGIN_RIGHT, ANCHOR_END );
 	realtime->set_begin( Point2( 120, button_margin-10 ) );
 	realtime->set_end( Point2( 80, margin ) );
-	realtime->set_text(TTR("Realtime"));
+	realtime->set_text("Realtime");
 	add_child(realtime);
 */
 
@@ -465,7 +465,7 @@ ConnectDialog::ConnectDialog() {
 	add_child(error);
 	error->get_ok()->set_text(TTR("Close"));
 	get_ok()->set_text(TTR("Connect"));
-//	error->get_cancel()->set_text(TTR("Close"));
+//	error->get_cancel()->set_text("Close");
 
 
 
@@ -511,7 +511,7 @@ void ConnectionsDialog::_connect() {
 	StringArray args =  it->get_metadata(0).operator Dictionary()["args"];
 	int flags = CONNECT_PERSIST | (defer?CONNECT_DEFERRED:0) | (oshot?CONNECT_ONESHOT:0);
 
-	undo_redo->create_action(TTR("Connect '")+signal+"' to '"+String(dst_method)+"'");
+	undo_redo->create_action(vformat(TTR("Connect '%s' to '%s'"),signal,String(dst_method)));
 	undo_redo->add_do_method(node,"connect",signal,target,dst_method,binds,flags);
 	undo_redo->add_undo_method(node,"disconnect",signal,target,dst_method);
 	undo_redo->add_do_method(this,"update_tree");
@@ -610,7 +610,7 @@ void ConnectionsDialog::_remove_confirm() {
 
 	Dictionary meta=selected->get_metadata(0);
 
-	undo_redo->create_action(TTR("Remove Subscription"));
+	undo_redo->create_action("Remove Subscription");
 	undo_redo->add_do_method(node,"unsubscribe_path_event",meta["from_event"].operator String(),meta["from_path"].operator NodePath(),meta["to_method"].operator String());
 	undo_redo->add_undo_method(node,"subscribe_path_event_persist",meta["from_event"].operator String(),meta["from_path"].operator NodePath(),meta["to_method"].operator String(),Array(),false);
 	undo_redo->add_do_method(this,"update_tree");

+ 5 - 5
tools/editor/create_dialog.cpp

@@ -251,7 +251,7 @@ void CreateDialog::_notification(int p_what) {
 void CreateDialog::set_base_type(const String& p_base) {
 
 	base_type=p_base;
-	set_title(TTR("Create New ")+p_base);
+	set_title(TTR("Create New")+" "+p_base);
 	_update_search();
 }
 
@@ -541,7 +541,7 @@ void CreateDialog::_bind_methods() {
 
 void CreateDialog::set_base_type(const String& p_base) {
 
-	set_title(TTR("Create ")+p_base+" Type");
+	set_title(vformat("Create %s Type",p_base));
 
 	if (base==p_base)
 		return;
@@ -562,14 +562,14 @@ CreateDialog::CreateDialog() {
 	add_child(vbc);
 	set_child_rect(vbc);
 
-	get_ok()->set_text(TTR("Create"));
+	get_ok()->set_text("Create");
 
 	tree = memnew( Tree );
-	vbc->add_margin_child(TTR("Type:"),tree,true);
+	vbc->add_margin_child("Type:",tree,true);
 	//tree->set_hide_root(true);
 
 	filter = memnew( LineEdit );
-	vbc->add_margin_child(TTR("Filter:"),filter);
+	vbc->add_margin_child("Filter:",filter);
 
 	base="Node";
 	set_as_toplevel(true);

+ 12 - 12
tools/editor/dependency_editor.cpp

@@ -27,7 +27,7 @@ void DependencyEditor::_load_pressed(Object* p_item,int p_cell,int p_button){
 	String fname = ti->get_text(0);
 	replacing = ti->get_text(1);
 
-	search->set_title(TTR("Search Replacement For: ")+replacing.get_file());
+	search->set_title(TTR("Search Replacement For:")+" "+replacing.get_file());
 
 	search->clear_filters();
 	List<String> ext;
@@ -180,7 +180,7 @@ void DependencyEditor::_update_list() {
 		String name = path.get_file();
 
 		Ref<Texture> icon;
-		if (has_icon(type,TTR("EditorIcons"))) {
+		if (has_icon(type,"EditorIcons")) {
 			icon=get_icon(type,"EditorIcons");
 		} else {
 			icon=get_icon("Object","EditorIcons");
@@ -209,15 +209,15 @@ void DependencyEditor::edit(const String& p_path) {
 
 
 	editing=p_path;
-	set_title(TTR("Dependencies For: ")+p_path.get_file());
+	set_title(TTR("Dependencies For:")+" "+p_path.get_file());
 
 	_update_list();
 	popup_centered_ratio();
 
 	if (EditorNode::get_singleton()->is_scene_open(p_path)) {
-		EditorNode::get_singleton()->show_warning(TTR("Scene '")+p_path.get_file()+"' is currently being edited.\nChanges will not take effect unless reloaded.");
+		EditorNode::get_singleton()->show_warning(vformat(TTR("Scene '%s' is currently being edited.\nChanges will not take effect unless reloaded."),p_path.get_file()));
 	} else if (ResourceCache::has(p_path)) {
-		EditorNode::get_singleton()->show_warning(TTR("Resource '")+p_path.get_file()+"' is in use.\nChanges will take effect when reloaded.");
+		EditorNode::get_singleton()->show_warning(vformat(TTR("Resource '%s' is in use.\nChanges will take effect when reloaded."),p_path.get_file()));
 	}
 }
 
@@ -301,7 +301,7 @@ void DependencyEditorOwners::_fill_owners(EditorFileSystemDirectory *efsd) {
 
 		Ref<Texture> icon;
 		String type=efsd->get_file_type(i);
-		if (!has_icon(type,TTR("EditorIcons"))) {
+		if (!has_icon(type,"EditorIcons")) {
 			icon=get_icon("Object","EditorIcons");
 		} else {
 			icon=get_icon(type,"EditorIcons");
@@ -319,7 +319,7 @@ void DependencyEditorOwners::show(const String& p_path) {
 	_fill_owners(EditorFileSystem::get_singleton()->get_filesystem());
 	popup_centered_ratio();
 
-	set_title(TTR("Owners Of: ")+p_path.get_file());
+	set_title(TTR("Owners Of:")+" "+p_path.get_file());
 
 }
 
@@ -362,7 +362,7 @@ void DependencyRemoveDialog::_fill_owners(EditorFileSystemDirectory *efsd) {
 
 		Ref<Texture> icon;
 		String type=efsd->get_file_type(i);
-		if (!has_icon(type,TTR("EditorIcons"))) {
+		if (!has_icon(type,"EditorIcons")) {
 			icon=get_icon("Object","EditorIcons");
 		} else {
 			icon=get_icon(type,"EditorIcons");
@@ -448,7 +448,7 @@ void DependencyErrorDialog::show(const String& p_for_file,const Vector<String> &
 
 
 	for_file=p_for_file;
-	set_title(TTR("Error loading: ")+p_for_file.get_file());
+	set_title(TTR("Error loading:")+" "+p_for_file.get_file());
 	files->clear();
 
 	TreeItem *root = files->create_item(NULL);
@@ -461,7 +461,7 @@ void DependencyErrorDialog::show(const String& p_for_file,const Vector<String> &
 			type=report[i].get_slice("::",1);
 
 		Ref<Texture> icon;
-		if (!has_icon(type,TTR("EditorIcons"))) {
+		if (!has_icon(type,"EditorIcons")) {
 			icon=get_icon("Object","EditorIcons");
 		} else {
 			icon=get_icon(type,"EditorIcons");
@@ -523,7 +523,7 @@ void OrphanResourcesDialog::ok_pressed() {
 	if (paths.empty())
 		return;
 
-	delete_confirm->set_text(TTR("Permanently Delete ")+itos(paths.size())+" Item(s) ? (No Undo!!)");
+	delete_confirm->set_text(vformat(TTR("Permanently delete %d item(s)? (No undo!)"),paths.size()));
 	delete_confirm->popup_centered_minsize();
 }
 
@@ -580,7 +580,7 @@ bool OrphanResourcesDialog::_fill_owners(EditorFileSystemDirectory *efsd,HashMap
 				String type=efsd->get_file_type(i);
 
 				Ref<Texture> icon;
-				if (has_icon(type,TTR("EditorIcons"))) {
+				if (has_icon(type,"EditorIcons")) {
 					icon=get_icon(type,"EditorIcons");
 				} else {
 					icon=get_icon("Object","EditorIcons");

+ 1 - 1
tools/editor/editor_file_dialog.cpp

@@ -677,7 +677,7 @@ void EditorFileDialog::update_filters() {
 		if (max_filters<filters.size())
 			all_filters+=", ...";
 
-		filter->add_item(TTR("All Recognized ( ")+all_filters+" )");
+		filter->add_item(TTR("All Recognized")+" ( "+all_filters+" )");
 	}
 	for(int i=0;i<filters.size();i++) {
 

+ 2 - 2
tools/editor/editor_file_system.cpp

@@ -314,7 +314,7 @@ void EditorFileSystem::_scan_filesystem() {
 
 
 
-	EditorProgressBG scan_progress("efs",TTR("ScanFS"),1000);
+	EditorProgressBG scan_progress("efs","ScanFS",1000);
 
 	ScanProgress sp;
 	sp.low=0;
@@ -609,7 +609,7 @@ void EditorFileSystem::_scan_new_dir(EditorFileSystemDirectory *p_dir,DirAccess
 
 			da->change_dir("..");
 		} else {
-			ERR_PRINTS(TTR("Can't go into subdir: ")+E->get());
+			ERR_PRINTS(TTR("Cannot go into subdir:")+" "+E->get());
 		}
 
 		p_progress.update(idx,total);

+ 4 - 4
tools/editor/editor_help.cpp

@@ -519,7 +519,7 @@ EditorHelpIndex::EditorHelpIndex() {
 	search_box->connect("input_event", this, "_sbox_input");
 
 	class_list = memnew( Tree );
-	vbc->add_margin_child(TTR("Class List: "), class_list, true);
+	vbc->add_margin_child(TTR("Class List:")+" ", class_list, true);
 	class_list->set_v_size_flags(SIZE_EXPAND_FILL);
 
 	class_list->connect("item_activated",this,"_tree_item_selected");
@@ -710,7 +710,7 @@ Error EditorHelp::_goto_desc(const String& p_class,int p_vscr) {
 
 	class_desc->push_font(doc_title_font);
 	class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/keyword_color"));
-	class_desc->add_text(TTR("Class: "));
+	class_desc->add_text(TTR("Class:")+" ");
 	class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/base_type_color"));
 	_add_text(p_class);
 	class_desc->pop();
@@ -722,7 +722,7 @@ Error EditorHelp::_goto_desc(const String& p_class,int p_vscr) {
 
 		class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/keyword_color"));
 		class_desc->push_font(doc_title_font);
-		class_desc->add_text(TTR("Inherits: "));
+		class_desc->add_text(TTR("Inherits:")+" ");
 		class_desc->pop();
 		class_desc->pop();
 
@@ -756,7 +756,7 @@ Error EditorHelp::_goto_desc(const String& p_class,int p_vscr) {
 				if (!found) {
 					class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/keyword_color"));
 					class_desc->push_font(doc_title_font);
-					class_desc->add_text("Inherited by: ");
+					class_desc->add_text(TTR("Inherited by:")+" ");
 					class_desc->pop();
 					class_desc->pop();
 

+ 7 - 7
tools/editor/editor_import_export.cpp

@@ -240,12 +240,12 @@ static void _edit_files_with_filter(DirAccess *da,const List<String>& p_filters,
 		for(const List<String>::Element *F=p_filters.front();F;F=F->next()) {
 
 			if (fullpath.matchn(F->get())) {
-				String act = TTR("Added: ");
+				String act = TTR("Added:")+" ";
 
 				if (!exclude) {
 					r_list.insert(fullpath);
 				} else {
-					act = TTR("Removed: ");
+					act = TTR("Removed:")+" ";
 					r_list.erase(fullpath);
 				}
 
@@ -866,7 +866,7 @@ Error EditorExportPlatform::export_project_files(EditorExportSaveFunction p_func
 			Error err = plugin->import2(dst_file,imd,get_image_compression(),true);
 			if (err) {
 
-				EditorNode::add_io_error(TTR("Error saving atlas! ")+dst_file.get_file());
+				EditorNode::add_io_error(TTR("Error saving atlas:")+" "+dst_file.get_file());
 				return ERR_CANT_CREATE;
 			}
 
@@ -916,7 +916,7 @@ Error EditorExportPlatform::export_project_files(EditorExportSaveFunction p_func
 				String path = EditorSettings::get_singleton()->get_settings_path()+"/tmp/tmpatlas.atex";
 				Error err = ResourceSaver::save(path,atex);
 				if (err!=OK) {
-					EditorNode::add_io_error(TTR("Could not save atlas subtexture: ")+path);
+					EditorNode::add_io_error(TTR("Could not save atlas subtexture:")+" "+path);
 					return ERR_CANT_CREATE;
 				}
 				Vector<uint8_t> data = FileAccess::get_file_as_array(path);
@@ -1157,7 +1157,7 @@ Error EditorExportPlatform::save_pack_file(void *p_userdata,const String& p_path
 		MD5Final(&ctx);
 		pd->f->store_buffer(ctx.digest,16);
 	}
-	pd->ep->step(TTR("Storing File: ")+p_path,2+p_file*100/p_total,false);
+	pd->ep->step(TTR("Storing File:")+" "+p_path,2+p_file*100/p_total,false);
 	pd->count++;
 	pd->ftmp->store_buffer(p_data.ptr(),p_data.size());
 	if (pd->alignment > 1) {
@@ -1195,7 +1195,7 @@ Error EditorExportPlatform::save_zip_file(void *p_userdata,const String& p_path,
 	zipWriteInFileInZip(zip,p_data.ptr(),p_data.size());
 	zipCloseFileInZip(zip);
 
-	zd->ep->step(TTR("Storing File: ")+p_path,2+p_file*100/p_total,false);
+	zd->ep->step(TTR("Storing File:")+" "+p_path,2+p_file*100/p_total,false);
 	zd->count++;
 	return OK;
 
@@ -1309,7 +1309,7 @@ Error EditorExportPlatformPC::export_project(const String& p_path, bool p_debug,
 
 
 
-	EditorProgress ep("export",TTR("Exporting for ")+get_name(),102);
+	EditorProgress ep("export",vformat(TTR("Exporting for %s"),get_name()),102);
 
 	const int BUFSIZE = 32768;
 

+ 83 - 81
tools/editor/editor_node.cpp

@@ -432,7 +432,7 @@ void EditorNode::_rebuild_import_menu()
 {
 	PopupMenu* p = import_menu->get_popup();
 	p->clear();
-	p->add_item(TTR("Node from scene"), FILE_IMPORT_SUBSCENE);
+	p->add_item(TTR("Node From Scene"), FILE_IMPORT_SUBSCENE);
 	p->add_separator();
 	for (int i = 0; i < editor_import_export->get_import_plugin_count(); i++) {
 		p->add_item(editor_import_export->get_import_plugin(i)->get_visible_name(), IMPORT_PLUGIN_BASE + i);
@@ -606,15 +606,15 @@ void EditorNode::_dialog_display_file_error(String p_file,Error p_error) {
 
 			case ERR_FILE_CANT_WRITE: {
 
-				accept->set_text(TTR("Can't open file for writing: ")+p_file.extension());
+				accept->set_text(TTR("Can't open file for writing:")+" "+p_file.extension());
 			} break;
 			case ERR_FILE_UNRECOGNIZED: {
 
-				accept->set_text(TTR("File format requested unknown: ")+p_file.extension());
+				accept->set_text(TTR("Requested file format unknown:")+" "+p_file.extension());
 			} break;
 			default: {
 
-				accept->set_text(TTR("Error Saving."));
+				accept->set_text(TTR("Error while saving."));
 			}break;
 		}
 
@@ -1071,8 +1071,8 @@ void EditorNode::_import_action(const String& p_action) {
 
 			current_option=-1;
 			//accept->get_cancel()->hide();
-			accept->get_ok()->set_text(TTR("Ugh"));
-			accept->set_text(TTR("Error importing scene."));
+			accept->get_ok()->set_text("Ugh");
+			accept->set_text("Error importing scene.");
 			accept->popup_centered(Size2(300,70));;
 			return;
 		}
@@ -1087,8 +1087,8 @@ void EditorNode::_import_action(const String& p_action) {
 
 			memdelete(src);
 			//accept->get_cancel()->hide();
-			accept->get_ok()->set_text(TTR("Ugh"));
-			accept->set_text(TTR("Error load scene to update."));
+			accept->get_ok()->set_text("Ugh");
+			accept->set_text("Error load scene to update.");
 			accept->popup_centered(Size2(300,70));;
 			return;
 		}
@@ -1128,8 +1128,8 @@ void EditorNode::_import(const String &p_file) {
 
 		current_option=-1;
 		//accept->get_cancel()->hide();
-		accept->get_ok()->set_text(TTR("Ugh"));
-		accept->set_text(TTR("Error importing scene."));
+		accept->get_ok()->set_text("Ugh");
+		accept->set_text("Error importing scene.");
 		accept->popup_centered(Size2(300,70));;
 		return;
 	}
@@ -1251,7 +1251,7 @@ void EditorNode::_dialog_action(String p_file) {
 					current_option=-1;
 					//accept->get_cancel()->hide();
 					accept->get_ok()->set_text(TTR("I see.."));
-					accept->set_text(TTR("Can't load MeshLibrary for merging!."));
+					accept->set_text(TTR("Can't load MeshLibrary for merging!"));
 					accept->popup_centered_minsize();
 					return;
 				}
@@ -1268,7 +1268,7 @@ void EditorNode::_dialog_action(String p_file) {
 			if (err) {
 
 				accept->get_ok()->set_text(TTR("I see.."));
-				accept->set_text(TTR("Error saving MeshLibrary!."));
+				accept->set_text(TTR("Error saving MeshLibrary!"));
 				accept->popup_centered_minsize();
 				return;
 			}
@@ -1286,7 +1286,7 @@ void EditorNode::_dialog_action(String p_file) {
 						current_option=-1;
 						//accept->get_cancel()->hide();
 						accept->get_ok()->set_text(TTR("I see.."));
-						accept->set_text(TTR("Can't load TileSet for merging!."));
+						accept->set_text(TTR("Can't load TileSet for merging!"));
 						accept->popup_centered_minsize();
 						return;
 					}
@@ -1304,7 +1304,7 @@ void EditorNode::_dialog_action(String p_file) {
 			if (err) {
 
 				accept->get_ok()->set_text(TTR("I see.."));
-				accept->set_text(TTR("Error saving TileSet!."));
+				accept->set_text(TTR("Error saving TileSet!"));
 				accept->popup_centered_minsize();
 				return;
 			}
@@ -1328,7 +1328,7 @@ void EditorNode::_dialog_action(String p_file) {
 			}
 			int ret = unzGoToFirstFile(pkg);
 
-			int fc=0; //coun them
+			int fc=0; //count them
 
 			while(ret==UNZ_OK) {
 				fc++;
@@ -1368,7 +1368,7 @@ void EditorNode::_dialog_action(String p_file) {
 
 				file=file.get_file();
 
-				p.step(TTR("Importing: ")+file,fc);
+				p.step(TTR("Importing:")+" "+file,fc);
 				print_line("IMPORT "+file);
 
 				FileAccess *f = FileAccess::open(EditorSettings::get_singleton()->get_settings_path()+"/templates/"+file,FileAccess::WRITE);
@@ -1454,7 +1454,7 @@ void EditorNode::_dialog_action(String p_file) {
 			_update_layouts_menu();
 
 			if (p_file=="Default") {
-				show_warning(TTR("Restored Default layout to base settings."));
+				show_warning(TTR("Restored default layout to base settings."));
 			}
 
 		} break;
@@ -1712,7 +1712,7 @@ void EditorNode::_edit_current() {
 		_set_top_editors(sub_plugins);
 		_set_editing_top_editors(current_obj);
 		_display_top_editors(true);
-                
+
 	} else if (!editor_plugins_over->get_plugins_list().empty()) {
 
 		_hide_top_editors();
@@ -1769,7 +1769,7 @@ void EditorNode::_edit_current() {
 	}
 
 	//p->add_separator();
-	//p->add_item(TTR("All Methods"),OBJECT_CALL_METHOD);
+	//p->add_item("All Methods",OBJECT_CALL_METHOD);
 
 
 	update_keying();
@@ -1832,7 +1832,7 @@ void EditorNode::_run(bool p_current,const String& p_custom) {
 			current_option=-1;
 			//accept->get_cancel()->hide();
 			accept->get_ok()->set_text(TTR("I see.."));
-			accept->set_text(TTR("No scene to run exists."));
+			accept->set_text(TTR("There is no defined scene to run."));
 			accept->popup_centered_minsize();
 			return;
 		}
@@ -1896,7 +1896,7 @@ void EditorNode::_run(bool p_current,const String& p_custom) {
 					current_option=-1;
 					//accept->get_cancel()->hide();
 					accept->get_ok()->set_text(TTR("I see.."));
-					accept->set_text(TTR("Current scene was never saved, please save scene before running."));
+					accept->set_text(TTR("Current scene was never saved, please save it prior to running."));
 					accept->popup_centered_minsize();
 					return;
 				}
@@ -1998,11 +1998,12 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) {
 	switch( p_option ) {
 		case FILE_NEW_SCENE: {
 
+			// TODO: Drop such obsolete commented code
 			/*
 			if (!p_confirmed) {
-				confirmation->get_ok()->set_text(TTR("Yes"));
+				confirmation->get_ok()->set_text("Yes");
 				//confirmation->get_cancel()->show();
-				confirmation->set_text(TTR("Start a New Scene? (Current will be lost)"));
+				confirmation->set_text("Start a New Scene? (Current will be lost)");
 				confirmation->popup_centered_minsize();
 				break;
 			}*/
@@ -2058,7 +2059,7 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) {
 
 
 			//quick_open->popup("Resource", false, true);
-			//quick_open->set_title(TTR("Quick Search File.."));
+			//quick_open->set_title("Quick Search File..");
 			scenes_dock->focus_on_filter();
 
 		} break;
@@ -2221,7 +2222,7 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) {
 
 				current_option=-1;
 				//confirmation->get_cancel()->hide();
-				accept->get_ok()->set_text(TTR("I see.."));
+				accept->get_ok()->set_text("I see..");
 				accept->set_text("This operation can't be done without a tree root.");
 				accept->popup_centered(Size2(300,70));;
 				break;
@@ -2243,8 +2244,8 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) {
 			} else {
 				current_option=-1;
 				//confirmation->get_cancel()->hide();
-				accept->get_ok()->set_text(TTR("I see.."));
-				accept->set_text(TTR("Please save the scene first."));
+				accept->get_ok()->set_text("I see..");
+				accept->set_text("Please save the scene first.");
 				accept->popup_centered(Size2(300,70));;
 				break;
 
@@ -2259,7 +2260,7 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) {
 			String target = export_db->get_current_platform();
 			Ref<EditorExporter> exporter = export_db->get_exporter(target);
 			if (exporter.is_null()) {
-				accept->set_text(TTR("No exporter for platform '")+target+"' yet.");
+				accept->set_text("No exporter for platform '"+target+"' yet.");
 				accept->popup_centered(Size2(300,70));;
 				return;
 			}
@@ -2343,7 +2344,7 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) {
 
 				confirmation->get_ok()->set_text(TTR("Quit"));
 				//confirmation->get_cancel()->show();
-				confirmation->set_text(TTR("Exit the Editor?"));
+				confirmation->set_text(TTR("Exit the editor?"));
 				confirmation->popup_centered(Size2(180,70));
 				break;
 			}
@@ -2411,7 +2412,7 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) {
 			String filename = scene->get_filename();
 
 			if (filename==String()) {
-				show_warning(TTR("Can't reload a scene that was never saved.."));
+				show_warning(TTR("Can't reload a scene that was never saved."));
 				break;
 			}
 
@@ -2440,7 +2441,7 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) {
 
 				current_option=-1;
 				//accept->get_cancel()->hide();
-				accept->get_ok()->set_text(TTR("I see.."));
+				accept->get_ok()->set_text("I see..");
 				accept->set_text("This operation can't be done without a selected node.");
 				accept->popup_centered(Size2(300,70));;
 				break;
@@ -2452,7 +2453,7 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) {
 
 				current_option=-1;
 				//confirmation->get_cancel()->hide();
-				accept->get_ok()->set_text(TTR("I see.."));
+				accept->get_ok()->set_text("I see..");
 				accept->set_text("This operation can't be done without a selected node.");
 				accept->popup_centered(Size2(300,70));;
 				break;
@@ -2464,8 +2465,8 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) {
 
 				current_option=-1;
 				//accept->get_cancel()->hide();
-				accept->get_ok()->set_text(TTR("Ugh"));
-				accept->set_text(String(TTR("Error loading scene from "))+external_file);
+				accept->get_ok()->set_text("Ugh");
+				accept->set_text("Error loading scene from "+external_file);
 				accept->popup_centered(Size2(300,70));;
 				return;
 			}
@@ -2473,7 +2474,7 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) {
 			instanced_scene->generate_instance_state();
 			instanced_scene->set_filename( Globals::get_singleton()->localize_path(external_file) );
 
-			editor_data.get_undo_redo().create_action(TTR("Instance Scene"));
+			editor_data.get_undo_redo().create_action("Instance Scene");
 			editor_data.get_undo_redo().add_do_method(parent,"add_child",instanced_scene);
 			editor_data.get_undo_redo().add_do_method(instanced_scene,"set_owner",edited_scene);
 			editor_data.get_undo_redo().add_do_reference(instanced_scene);
@@ -2703,11 +2704,11 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) {
 			if (ischecked) {
 				file_server->stop();
 				//debug_button->set_icon(gui_base->get_icon("FileServer","EditorIcons"));
-				//debug_button->get_popup()->set_item_text( debug_button->get_popup()->get_item_index(RUN_FILE_SERVER),TTR("Enable File Server"));
+				//debug_button->get_popup()->set_item_text( debug_button->get_popup()->get_item_index(RUN_FILE_SERVER),"Enable File Server");
 			} else {
 				file_server->start();
 				//debug_button->set_icon(gui_base->get_icon("FileServerActive","EditorIcons"));
-				//debug_button->get_popup()->set_item_text( debug_button->get_popup()->get_item_index(RUN_FILE_SERVER),TTR("Disable File Server"));
+				//debug_button->get_popup()->set_item_text( debug_button->get_popup()->get_item_index(RUN_FILE_SERVER),"Disable File Server");
 			}
 
 			debug_button->get_popup()->set_item_checked( debug_button->get_popup()->get_item_index(RUN_FILE_SERVER),!ischecked);
@@ -2819,9 +2820,9 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) {
 					if (!p_confirmed) {
 
 
-						confirmation->get_ok()->set_text(TTR("Open"));
+						confirmation->get_ok()->set_text("Open");
 						//confirmation->get_cancel()->show();
-						confirmation->set_text(TTR("Current scene changed, save and re-import ?"));
+						confirmation->set_text("Current scene changed, save and re-import ?");
 						confirmation->popup_centered(Size2(300,70));
 						break;
 
@@ -2834,8 +2835,8 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) {
 
 					current_option=-1;
 					//accept->get_cancel()->hide();
-					accept->get_ok()->set_text(TTR("I see.."));
-					accept->set_text(TTR("Can't import if edited scene was not saved.")); //i dont think this code will ever run
+					accept->get_ok()->set_text("I see..");
+					accept->set_text("Can't import if edited scene was not saved."); //i dont think this code will ever run
 					accept->popup_centered(Size2(300,70));;
 					break;
 
@@ -3251,7 +3252,7 @@ Error EditorNode::save_optimized_copy(const String& p_scene,const String& p_pres
 	if (!get_edited_scene()) {
 
 		get_scene()->quit();
-		ERR_EXPLAIN(TTR("No scene to optimize (loading failed?"));
+		ERR_EXPLAIN("No scene to optimize (loading failed?)");
 		ERR_FAIL_V(ERR_FILE_NOT_FOUND);
 	}
 
@@ -3276,10 +3277,10 @@ Error EditorNode::save_optimized_copy(const String& p_scene,const String& p_pres
 	if (!Globals::get_singleton()->has(preset)) {
 
 		//accept->"()->hide();
-		accept->get_ok()->set_text(TTR("I see.."));
-		accept->set_text(TTR("Optimizer preset not found: ")+p_preset);
+		accept->get_ok()->set_text("I see..");
+		accept->set_text("Optimizer preset not found: "+p_preset);
 		accept->popup_centered(Size2(300,70));;
-		ERR_EXPLAIN(TTR("Optimizer preset not found: ")+p_preset);
+		ERR_EXPLAIN("Optimizer preset not found: "+p_preset);
 		ERR_FAIL_V(ERR_INVALID_PARAMETER);
 
 	}
@@ -3299,7 +3300,7 @@ Error EditorNode::save_optimized_copy(const String& p_scene,const String& p_pres
 		}
 	}
 
-	ERR_EXPLAIN(TTR("Preset '")+p_preset+"' references nonexistent saver: "+type);
+	ERR_EXPLAIN("Preset '"+p_preset+"' references nonexistent saver: "+type);
 	ERR_FAIL_COND_V(saver.is_null(),ERR_INVALID_DATA);
 
 	List<Variant> keys;
@@ -3334,8 +3335,8 @@ Error EditorNode::save_optimized_copy(const String& p_scene,const String& p_pres
 
 		current_option=-1;
 		//accept->get_cancel()->hide();
-		accept->get_ok()->set_text(TTR("I see.."));
-		accept->set_text(TTR("Couldn't save scene. Likely dependencies (instances) couldn't be satisfied."));
+		accept->get_ok()->set_text("I see..");
+		accept->set_text("Couldn't save scene. Likely dependencies (instances) couldn't be satisfied.");
 		accept->popup_centered(Size2(300,70));;
 		return ERR_INVALID_DATA;
 
@@ -3345,8 +3346,8 @@ Error EditorNode::save_optimized_copy(const String& p_scene,const String& p_pres
 	if (err) {
 
 		//accept->"()->hide();
-		accept->get_ok()->set_text(TTR("I see.."));
-		accept->set_text(TTR("Error saving optimized scene: ")+path);
+		accept->get_ok()->set_text("I see..");
+		accept->set_text("Error saving optimized scene: "+path);
 		accept->popup_centered(Size2(300,70));;
 
 		ERR_FAIL_COND_V(err,err);
@@ -3635,7 +3636,7 @@ Error EditorNode::load_scene(const String& p_scene, bool p_ignore_broken_deps,bo
 
 	for (Map<String,Set<String> >::Element *E=dependency_errors.front();E;E=E->next()) {
 
-		String txt=TTR("Scene '")+E->key()+"' has broken dependencies:\n";
+		String txt=vformat(TTR("Scene '%s' has broken dependencies:"),E->key())+"\n";
 		for(Set<String>::Element *F=E->get().front();F;F=F->next()) {
 			txt+="\t"+F->get()+"\n";
 		}
@@ -3916,8 +3917,8 @@ void EditorNode::_save_optimized() {
 	if (err) {
 
 		//accept->"()->hide();
-		accept->get_ok()->set_text(TTR("I see.."));
-		accept->set_text(TTR("Error saving optimized scene: ")+path);
+		accept->get_ok()->set_text("I see..");
+		accept->set_text("Error saving optimized scene: "+path);
 		accept->popup_centered(Size2(300,70));;
 		return;
 
@@ -4949,7 +4950,7 @@ Variant EditorNode::drag_files(const Vector<String>& p_files, Control *p_from){
 	if (p_files.size()>max_files) {
 
 		Label* label=memnew( Label );
-		label->set_text(itos(p_files.size()-max_files)+" "+TTR("More File(s)"));
+		label->set_text(vformat(TTR("%d more file(s)"), p_files.size()-max_files));
 		files->add_child(label);
 
 	}
@@ -4980,7 +4981,7 @@ Variant EditorNode::drag_files_and_dirs(const Vector<String>& p_files, Control *
 	if (p_files.size()>max_files) {
 
 		Label* label=memnew( Label );
-		label->set_text(itos(p_files.size()-max_files)+" "+TTR("More File(s) and/or Directory(s)"));
+		label->set_text(vformat(TTR("%d more file(s) or folder(s)"), p_files.size()-max_files));
 		files->add_child(label);
 
 	}
@@ -5151,7 +5152,7 @@ EditorNode::EditorNode() {
 	ObjectTypeDB::set_type_enabled("CollisionShape",true);
 	ObjectTypeDB::set_type_enabled("CollisionShape2D",true);
 	ObjectTypeDB::set_type_enabled("CollisionPolygon2D",true);
-	//ObjectTypeDB::set_type_enabled(TTR("BodyVolumeConvexPolygon"),true);
+	//ObjectTypeDB::set_type_enabled("BodyVolumeConvexPolygon",true);
 
 	gui_base = memnew( Panel );
 	add_child(gui_base);
@@ -5512,20 +5513,20 @@ EditorNode::EditorNode() {
 	menu_panel->add_child( node_menu );
 
 	p=node_menu->get_popup();
-	p->add_item(TTR("Create"),NODE_CREATE);
-	p->add_item(TTR("Instance"),NODE_INSTANCE);
+	p->add_item("Create",NODE_CREATE);
+	p->add_item("Instance",NODE_INSTANCE);
 	p->add_separator();
-	p->add_item(TTR("Reparent"),NODE_REPARENT);
-	p->add_item(TTR("Move Up"),NODE_MOVE_UP);
-	p->add_item(TTR("Move Down"),NODE_MOVE_DOWN);
+	p->add_item("Reparent",NODE_REPARENT);
+	p->add_item("Move Up",NODE_MOVE_UP);
+	p->add_item("Move Down",NODE_MOVE_DOWN);
 	p->add_separator();
-	p->add_item(TTR("Duplicate"),NODE_DUPLICATE);
+	p->add_item("Duplicate",NODE_DUPLICATE);
 	p->add_separator();
-	p->add_item(TTR("Remove (Branch)"),NODE_REMOVE_BRANCH);
-	p->add_item(TTR("Remove (Element)"),NODE_REMOVE_ELEMENT);
+	p->add_item("Remove (Branch)",NODE_REMOVE_BRANCH);
+	p->add_item("Remove (Element)",NODE_REMOVE_ELEMENT);
 	p->add_separator();
-	p->add_item(TTR("Edit Subscriptions.."),NODE_CONNECTIONS);
-	p->add_item(TTR("Edit Groups.."),NODE_GROUPS);
+	p->add_item("Edit Subscriptions..",NODE_CONNECTIONS);
+	p->add_item("Edit Groups..",NODE_GROUPS);
 
 	resource_menu = memnew( MenuButton );
 	resource_menu->set_text("Resource");
@@ -5543,7 +5544,7 @@ EditorNode::EditorNode() {
 	p->connect("item_pressed",this,"_menu_option");
 
 	tool_menu = memnew( MenuButton );
-	tool_menu->set_tooltip(TTR("Miscelaneous project or scene wide tools."));
+	tool_menu->set_tooltip(TTR("Miscellaneous project or scene-wide tools."));
 	tool_menu->set_text(TTR("Tools"));
 
 	//tool_menu->set_icon(gui_base->get_icon("Save","EditorIcons"));
@@ -5602,6 +5603,7 @@ EditorNode::EditorNode() {
 	pause_button->set_disabled(true);
 	play_hb->add_child(pause_button);
 
+
 	stop_button = memnew( ToolButton );
 	play_hb->add_child(stop_button);
 	//stop_button->set_toggle_mode(true);
@@ -5636,7 +5638,7 @@ EditorNode::EditorNode() {
 	play_custom_scene_button->set_focus_mode(Control::FOCUS_NONE);
 	play_custom_scene_button->set_icon(gui_base->get_icon("PlayCustom","EditorIcons"));
 	play_custom_scene_button->connect("pressed", this,"_menu_option",make_binds(RUN_PLAY_CUSTOM_SCENE));
-	play_custom_scene_button->set_tooltip(TTR("Play custom scene (")+keycode_get_string(KEY_MASK_CMD|KEY_MASK_SHIFT|KEY_F5)+").");
+	play_custom_scene_button->set_tooltip(TTR("Play custom scene")+" ("+keycode_get_string(KEY_MASK_CMD|KEY_MASK_SHIFT|KEY_F5)+").");
 
 	debug_button = memnew( MenuButton );
 	debug_button->set_flat(true);
@@ -5645,7 +5647,7 @@ EditorNode::EditorNode() {
 	debug_button->set_focus_mode(Control::FOCUS_NONE);
 	debug_button->set_icon(gui_base->get_icon("Remote","EditorIcons"));
 	//debug_button->connect("pressed", this,"_menu_option",make_binds(RUN_LIVE_DEBUG));
-	debug_button->set_tooltip(TTR("Debug Options"));
+	debug_button->set_tooltip(TTR("Debug options"));
 
 	p=debug_button->get_popup();
 	p->add_check_item(TTR("Live Editing"),RUN_LIVE_DEBUG);
@@ -5723,9 +5725,9 @@ EditorNode::EditorNode() {
 	right_menu_hb->add_child( settings_menu );
 	p=settings_menu->get_popup();
 
-	//p->add_item(TTR("Export Settings"),SETTINGS_EXPORT_PREFERENCES);
+	//p->add_item("Export Settings",SETTINGS_EXPORT_PREFERENCES);
 	p->add_item(TTR("Editor Settings"),SETTINGS_PREFERENCES);
-	//p->add_item(TTR("Optimization Presets"),SETTINGS_OPTIMIZED_PRESETS);
+	//p->add_item("Optimization Presets",SETTINGS_OPTIMIZED_PRESETS);
 	p->add_separator();
 	editor_layouts = memnew( PopupMenu );
 	editor_layouts->set_name("Layouts");
@@ -5783,7 +5785,7 @@ EditorNode::EditorNode() {
 	dock_slot[DOCK_SLOT_LEFT_UR]->add_child(scene_tree_dock);
 #if 0
 	resources_dock = memnew( ResourcesDock(this) );
-	resources_dock->set_name(TTR("Resources"));
+	resources_dock->set_name("Resources");
 	//top_pallete->add_child(resources_dock);
 	dock_slot[DOCK_SLOT_RIGHT_BL]->add_child(resources_dock);
 	//top_pallete->set_v_size_flags(Control::SIZE_EXPAND_FILL);
@@ -5817,21 +5819,21 @@ EditorNode::EditorNode() {
 	prop_editor_base->add_child(prop_editor_hb);
 
 	resource_new_button = memnew( ToolButton );
-	resource_new_button->set_tooltip(TTR("Create a new resource in memory and edit it"));
+	resource_new_button->set_tooltip(TTR("Create a new resource in memory and edit it."));
 	resource_new_button->set_icon(gui_base->get_icon("New","EditorIcons"));
 	prop_editor_hb->add_child(resource_new_button);
 	resource_new_button->connect("pressed",this,"_menu_option",varray(RESOURCE_NEW));
 	resource_new_button->set_focus_mode(Control::FOCUS_NONE);
 
 	resource_load_button = memnew( ToolButton );
-	resource_load_button->set_tooltip(TTR("Load an existing resource from disk and edit it"));
+	resource_load_button->set_tooltip(TTR("Load an existing resource from disk and edit it."));
 	resource_load_button->set_icon(gui_base->get_icon("Load","EditorIcons"));
 	prop_editor_hb->add_child(resource_load_button);
 	resource_load_button->connect("pressed",this,"_menu_option",varray(RESOURCE_LOAD));
 	resource_load_button->set_focus_mode(Control::FOCUS_NONE);
 
 	resource_save_button = memnew( MenuButton );
-	resource_save_button->set_tooltip(TTR("Save the currently edited resource"));
+	resource_save_button->set_tooltip(TTR("Save the currently edited resource."));
 	resource_save_button->set_icon(gui_base->get_icon("Save","EditorIcons"));
 	prop_editor_hb->add_child(resource_save_button);
 	resource_save_button->get_popup()->add_item(TTR("Save"),RESOURCE_SAVE);
@@ -5860,7 +5862,7 @@ EditorNode::EditorNode() {
 
 
 	editor_history_menu = memnew( MenuButton );
-	editor_history_menu->set_tooltip(TTR("History of recently edited objects"));
+	editor_history_menu->set_tooltip(TTR("History of recently edited objects."));
 	editor_history_menu->set_icon( gui_base->get_icon("History","EditorIcons"));
 	prop_editor_hb->add_child(editor_history_menu);
 	editor_history_menu->connect("about_to_show",this,"_prepare_history");
@@ -5896,7 +5898,7 @@ EditorNode::EditorNode() {
 	prop_editor_base->add_child(search_bar);
 	search_bar->hide();
 
-	Label *l = memnew( Label(TTR("Search: ")) );
+	Label *l = memnew( Label(TTR("Search:")+" ") );
 	search_bar->add_child(l);
 
 	search_box = memnew( LineEdit );
@@ -6081,7 +6083,7 @@ EditorNode::EditorNode() {
 
 
 	about = memnew( AcceptDialog );
-	about->set_title(TTR("Thanks so Much!"));
+	about->set_title(TTR("Thanks from the Godot community!"));
 	//about->get_cancel()->hide();
 	about->get_ok()->set_text(TTR("Thanks!"));
 	about->set_hide_on_ok(true);
@@ -6101,7 +6103,7 @@ EditorNode::EditorNode() {
 
 
 	file_templates = memnew( FileDialog );
-	file_templates->set_title(TTR("Import Templates from ZIP file"));
+	file_templates->set_title(TTR("Import Templates From ZIP File"));
 
 	gui_base->add_child( file_templates );
 	file_templates->set_mode(FileDialog::MODE_OPEN_FILE);
@@ -6396,7 +6398,7 @@ EditorNode::EditorNode() {
 
 
 EditorNode::~EditorNode() {
-        
+
 	memdelete( EditorHelp::get_doc_data() );
 	memdelete(editor_selection);
 	memdelete(editor_plugins_over);
@@ -6462,6 +6464,6 @@ EditorPluginList::EditorPluginList() {
 
 EditorPluginList::~EditorPluginList() {
 }
-        
+
 
 

+ 2 - 2
tools/editor/editor_node.h

@@ -451,7 +451,7 @@ private:
 	void _display_top_editors(bool p_display);
 	void _set_top_editors(Vector<EditorPlugin*> p_editor_plugins_over);
 	void _set_editing_top_editors(Object * p_current_object);
-        
+
 	void _quick_opened();
 	void _quick_run();
 
@@ -748,7 +748,7 @@ public:
 	EditorPluginList();
 	~EditorPluginList();
 
-} ; 
+} ;
 
 struct EditorProgressBG {
 

+ 2 - 2
tools/editor/editor_reimport_dialog.cpp

@@ -32,7 +32,7 @@
 void EditorReImportDialog::popup_reimport() {
 
 	if (EditorFileSystem::get_singleton()->is_scanning()) {
-		error->set_text(TTR("Please wait for scan to complete"));
+		error->set_text(TTR("Please wait for scan to complete."));
 		error->popup_centered_minsize();
 		return;
 	}
@@ -92,7 +92,7 @@ void EditorReImportDialog::popup_reimport() {
 void EditorReImportDialog::ok_pressed() {
 
 	if (EditorFileSystem::get_singleton()->is_scanning()) {
-		error->set_text(TTR("Please wait for scan to complete"));
+		error->set_text(TTR("Please wait for scan to complete."));
 		error->popup_centered_minsize();
 		return;
 	}

+ 5 - 5
tools/editor/editor_run_script.cpp

@@ -9,12 +9,12 @@
 void EditorScript::add_root_node(Node *p_node) {
 
 	if (!editor) {
-		EditorNode::add_io_error(TTR("EditorScript::add_root_node : Write your logic in the _run() method."));
+		EditorNode::add_io_error("EditorScript::add_root_node: "+TTR("Write your logic in the _run() method."));
 		return;
 	}
 
 	if (editor->get_edited_scene()) {
-		EditorNode::add_io_error(TTR("EditorScript::add_root_node : There is an edited scene already."));
+		EditorNode::add_io_error("EditorScript::add_root_node: "+TTR("There is an edited scene already."));
 		return;
 	}
 
@@ -24,7 +24,7 @@ void EditorScript::add_root_node(Node *p_node) {
 Node *EditorScript::get_scene() {
 
 	if (!editor) {
-		EditorNode::add_io_error(TTR("EditorScript::get_scene : Write your logic in the _run() method."));
+		EditorNode::add_io_error("EditorScript::get_scene: "+TTR("Write your logic in the _run() method."));
 		return NULL;
 	}
 
@@ -36,7 +36,7 @@ void EditorScript::_run() {
 	Ref<Script> s = get_script();
 	ERR_FAIL_COND(!s.is_valid());
 	if (!get_script_instance()) {
-		EditorNode::add_io_error("Couldn't instance script:\n "+s->get_path()+"\nDid you forget the 'tool' keyword?");
+		EditorNode::add_io_error(TTR("Couldn't instance script:")+"\n "+s->get_path()+"\n"+TTR("Did you forget the 'tool' keyword?"));
 		return;
 
 	}
@@ -46,7 +46,7 @@ void EditorScript::_run() {
 	get_script_instance()->call("_run",NULL,0,ce);
 	if (ce.error!=Variant::CallError::CALL_OK) {
 
-		EditorNode::add_io_error("Couldn't run script:\n "+s->get_path()+"\nDid you forget the '_run' method?");
+		EditorNode::add_io_error(TTR("Couldn't run script:")+"\n "+s->get_path()+"\n"+TTR("Did you forget the '_run' method?"));
 	}
 }
 

+ 4 - 3
tools/editor/editor_settings.cpp

@@ -263,7 +263,7 @@ void EditorSettings::create() {
 
 		memdelete(dir);
 
-		singleton = ResourceLoader::load(config_file_path,TTR("EditorSettings"));
+		singleton = ResourceLoader::load(config_file_path,"EditorSettings");
 		if (singleton.is_null()) {
 			WARN_PRINT("Could not open config file.");
 			goto fail;
@@ -464,7 +464,7 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {
 	set("2d_editor/bone_color2",Color(0.75,0.75,0.75,0.9));
 	set("2d_editor/bone_selected_color",Color(0.9,0.45,0.45,0.9));
 	set("2d_editor/bone_ik_color",Color(0.9,0.9,0.45,0.9));
-	
+
 	set("2d_editor/keep_margins_when_changing_anchors", false);
 
 	set("game_window_placement/rect",0);
@@ -505,7 +505,8 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {
 #else
 	hints["import/pvrtc_texture_tool"]=PropertyInfo(Variant::STRING,"import/pvrtc_texture_tool",PROPERTY_HINT_GLOBAL_FILE,"");
 #endif
-	set(TTR("PVRTC/fast_conversion"),false);
+	// TODO: Rename to "import/pvrtc_fast_conversion" to match other names?
+	set("PVRTC/fast_conversion",false);
 
 
 	set("run/auto_save_before_running",true);

+ 1 - 1
tools/editor/editor_sub_scene.cpp

@@ -198,7 +198,7 @@ EditorSubScene::EditorSubScene() {
 
 	scene=NULL;
 
-	set_title(TTR("Select Sub-Scene.."));
+	set_title(TTR("Select Node(s) to Import"));
 	set_hide_on_ok(false);
 
 	VBoxContainer *vb = memnew( VBoxContainer );

+ 2 - 2
tools/editor/import_settings.cpp

@@ -278,7 +278,7 @@ ImportSettingsDialog::ImportSettingsDialog(EditorNode *p_editor) {
 	set_child_rect(tree);
 	set_title(TTR("Imported Resources"));
 
-	texformat=TTR("Keep,None,Disk,VRAM");
+//	texformat="Keep,None,Disk,VRAM";
 
 	tree->set_hide_root(true);
 	tree->set_columns(2);
@@ -288,7 +288,7 @@ ImportSettingsDialog::ImportSettingsDialog(EditorNode *p_editor) {
 	tree->connect("item_edited",this,"_item_edited");
 	tree->connect("button_pressed",this,"_button_pressed");
 
-//	add_button(TTR("Re-Import"),"reimport");
+//	add_button("Re-Import","reimport");
 	get_ok()->set_text(TTR("Re-Import"));
 	get_cancel()->set_text(TTR("Close"));
 

+ 7 - 7
tools/editor/io_plugins/editor_font_import_plugin.cpp

@@ -527,7 +527,7 @@ class EditorFontImportDialog : public ConfirmationDialog {
 		Ref<ResourceImportMetadata> rimd = get_rimd();
 
 		if (rimd.is_null()) {
-			error_dialog->set_text(TTR("Can't load/process source font"));
+			error_dialog->set_text(TTR("Can't load/process source font."));
 			error_dialog->popup_centered(Size2(200,100));
 			return;
 		}
@@ -657,14 +657,14 @@ public:
 		testhb->add_child(test_color);
 
 		vbl->add_spacer();
-		vbl->add_margin_child(TTR("Test: "),testhb);
+		vbl->add_margin_child(TTR("Test:")+" ",testhb);
 		/*
 		HBoxContainer *upd_hb = memnew( HBoxContainer );
 //		vbl->add_child(upd_hb);
 		upd_hb->add_spacer();
 		Button *update = memnew( Button);
 		upd_hb->add_child(update);
-		update->set_text(TTR("Update"));
+		update->set_text("Update");
 		update->connect("pressed",this,"_update");
 */
 		options = memnew( _EditorFontImportOptions );
@@ -887,7 +887,7 @@ Ref<BitmapFont> EditorFontImportPlugin::generate_font(const Ref<ResourceImportMe
 	if (src_path.extension().to_lower()=="fnt") {
 
 		if (ResourceLoader::load(src_path).is_valid()) {
-			EditorNode::get_singleton()->show_warning(TTR("Path: ")+src_path+"\nIs a Godot font file, please supply a BMFont type file instead.");
+			EditorNode::get_singleton()->show_warning(TTR("Path:")+" "+src_path+"\n"+TTR("This file is already a Godot font file, please supply a BMFont type file instead."));
 			return Ref<BitmapFont>();
 		}
 
@@ -895,7 +895,7 @@ Ref<BitmapFont> EditorFontImportPlugin::generate_font(const Ref<ResourceImportMe
 		font.instance();
 		Error err = font->create_from_fnt(src_path);
 		if (err) {
-			EditorNode::get_singleton()->show_warning(TTR("Path: ")+src_path+"\nFailed opening as BMFont file.");
+			EditorNode::get_singleton()->show_warning(TTR("Path:")+" "+src_path+"\n"+TTR("Failed opening as BMFont file."));
 			return Ref<BitmapFont>();
 		}
 
@@ -939,7 +939,7 @@ Ref<BitmapFont> EditorFontImportPlugin::generate_font(const Ref<ResourceImportMe
 
 	if ( error ) {
 		FT_Done_FreeType( library );
-		ERR_EXPLAIN(TTR("Invalid font size. "));
+		ERR_EXPLAIN(TTR("Invalid font size."));
 		ERR_FAIL_COND_V( error,Ref<BitmapFont>() );
 
 	}
@@ -986,7 +986,7 @@ Ref<BitmapFont> EditorFontImportPlugin::generate_font(const Ref<ResourceImportMe
 		if ( !fa ) {
 
 			FT_Done_FreeType( library );
-			ERR_EXPLAIN(TTR("Invalid font custom source. "));
+			ERR_EXPLAIN(TTR("Invalid font custom source."));
 			ERR_FAIL_COND_V( !fa,Ref<BitmapFont>() );
 
 		}

+ 11 - 11
tools/editor/io_plugins/editor_mesh_import_plugin.cpp

@@ -207,6 +207,13 @@ public:
 			return;
 		}
 
+		String dst = save_path->get_text();
+		if (dst=="") {
+			error_dialog->set_text(TTR("Save path is empty!"));
+			error_dialog->popup_centered_minsize();
+			return;
+		}
+
 		for(int i=0;i<meshes.size();i++) {
 
 			Ref<ResourceImportMetadata> imd = memnew( ResourceImportMetadata );
@@ -224,16 +231,9 @@ public:
 
 			imd->add_source(EditorImportPlugin::validate_source_path(meshes[i]));
 
-			String dst = save_path->get_text();
-			if (dst=="") {
-				error_dialog->set_text(TTR("Save path is empty!"));
-				error_dialog->popup_centered_minsize();
-				return;
-			}
-
-			dst = dst.plus_file(meshes[i].get_file().basename()+".msh");
+			String file_path = dst.plus_file(meshes[i].get_file().basename()+".msh");
 
-			plugin->import(dst,imd);
+			plugin->import(file_path,imd);
 		}
 
 		hide();
@@ -362,7 +362,7 @@ Error EditorMeshImportPlugin::import(const String& p_path, const Ref<ResourceImp
 				if (mesh->surface_get_name(i)!="")
 					name=mesh->surface_get_name(i);
 				else
-					name=TTR("Surface ")+itos(i+1);
+					name=vformat(TTR("Surface %d"),i+1);
 
 				name_map[name]=mesh->surface_get_material(i);
 			}
@@ -498,7 +498,7 @@ Error EditorMeshImportPlugin::import(const String& p_path, const Ref<ResourceImp
 				surf_tool->index();
 				mesh = surf_tool->commit(mesh);
 				if (name=="")
-					name=TTR("Surface ")+itos(mesh->get_surface_count()-1);
+					name=vformat(TTR("Surface %d"),mesh->get_surface_count()-1);
 				mesh->surface_set_name(mesh->get_surface_count()-1,name);
 				name="";
 				surf_tool->clear();

+ 2 - 2
tools/editor/io_plugins/editor_sample_import_plugin.cpp

@@ -262,7 +262,7 @@ public:
 		}
 
 		if (!save_path->get_text().begins_with("res://")) {
-			error_dialog->set_text(TTR("Target path must be full resource path."));
+			error_dialog->set_text(TTR("Target path must be a complete resource path."));
 			error_dialog->popup_centered_minsize();
 			return;
 		}
@@ -406,7 +406,7 @@ String EditorSampleImportPlugin::get_name() const {
 }
 String EditorSampleImportPlugin::get_visible_name() const{
 
-	return TTR("Audio Sample");
+	return "Audio Sample";
 }
 void EditorSampleImportPlugin::import_dialog(const String& p_from){
 

+ 12 - 12
tools/editor/io_plugins/editor_scene_import_plugin.cpp

@@ -686,7 +686,7 @@ void EditorSceneImportDialog::_import(bool p_and_open) {
 	}
 
 	if (!save_path->get_text().begins_with("res://")) {
-		error_dialog->set_text(TTR("Target path must be full resource path."));
+		error_dialog->set_text(TTR("Target path must be a complete resource path."));
 		error_dialog->popup_centered_minsize();
 		return;
 	}
@@ -721,7 +721,7 @@ void EditorSceneImportDialog::_import(bool p_and_open) {
 	if (script_path->get_text()!="") {
 		Ref<Script> scr = ResourceLoader::load(script_path->get_text());
 		if (!scr.is_valid()) {
-			error_dialog->set_text(TTR("Couldn't load Post-Import Script."));
+			error_dialog->set_text(TTR("Couldn't load post-import script."));
 			error_dialog->popup_centered(Size2(200,100));
 			return;
 		}
@@ -730,7 +730,7 @@ void EditorSceneImportDialog::_import(bool p_and_open) {
 		pi->set_script(scr.get_ref_ptr());
 		if (!pi->get_script_instance()) {
 
-			error_dialog->set_text(TTR("Invalid/Broken Script for Post-Import."));
+			error_dialog->set_text(TTR("Invalid/broken script for post-import."));
 			error_dialog->popup_centered(Size2(200,100));
 			return;
 		}
@@ -816,7 +816,7 @@ void EditorSceneImportDialog::_import(bool p_and_open) {
 
 	if (err) {
 
-		error_dialog->set_text(TTR("Error importing scene."));
+		error_dialog->set_text("Error importing scene.");
 		error_dialog->popup_centered(Size2(200,100));
 		return;
 	}
@@ -1164,14 +1164,14 @@ EditorSceneImportDialog::EditorSceneImportDialog(EditorNode *p_editor, EditorSce
 
 	this_import = memnew( OptionButton );
 	this_import->add_item(TTR("Overwrite Existing Scene"));
-	this_import->add_item("Overwrite Existing, Keep Materials");
+	this_import->add_item(TTR("Overwrite Existing, Keep Materials"));
 	this_import->add_item(TTR("Keep Existing, Merge with New"));
 	this_import->add_item(TTR("Keep Existing, Ignore New"));
 	vbc->add_margin_child(TTR("This Time:"),this_import);
 
 	next_import = memnew( OptionButton );
 	next_import->add_item(TTR("Overwrite Existing Scene"));
-	next_import->add_item("Overwrite Existing, Keep Materials");
+	next_import->add_item(TTR("Overwrite Existing, Keep Materials"));
 	next_import->add_item(TTR("Keep Existing, Merge with New"));
 	next_import->add_item(TTR("Keep Existing, Ignore New"));
 	vbc->add_margin_child(TTR("Next Time:"),next_import);
@@ -2735,13 +2735,13 @@ Error EditorSceneImportPlugin::import2(Node *scene, const String& p_dest_path, c
 		post_import_script_path = post_import_script_path;
 		Ref<Script> scr = ResourceLoader::load(post_import_script_path);
 		if (!scr.is_valid()) {
-			EditorNode::add_io_error(TTR("Couldn't load post-import script: '")+post_import_script_path);
+			EditorNode::add_io_error(TTR("Couldn't load post-import script:")+" "+post_import_script_path);
 		} else {
 
 			post_import_script = Ref<EditorScenePostImport>( memnew( EditorScenePostImport ) );
 			post_import_script->set_script(scr.get_ref_ptr());
 			if (!post_import_script->get_script_instance()) {
-				EditorNode::add_io_error(TTR("Invalid/Broken Script for Post-Import: '")+post_import_script_path);
+				EditorNode::add_io_error(TTR("Invalid/broken script for post-import:")+" "+post_import_script_path);
 				post_import_script.unref();
 			}
 		}
@@ -2751,7 +2751,7 @@ Error EditorSceneImportPlugin::import2(Node *scene, const String& p_dest_path, c
 	if (post_import_script.is_valid()) {
 		scene = post_import_script->post_import(scene);
 		if (!scene) {
-			EditorNode::add_io_error(TTR("Error running Post-Import script: '")+post_import_script_path);
+			EditorNode::add_io_error(TTR("Error running post-import script:")+" "+post_import_script_path);
 			return err;
 		}
 
@@ -2780,18 +2780,18 @@ Error EditorSceneImportPlugin::import2(Node *scene, const String& p_dest_path, c
 		String path = texture->get_path();
 		String fname= path.get_file();
 		String target_path = Globals::get_singleton()->localize_path(target_res_path.plus_file(fname));
-		progress.step(TTR("Import Img: ")+fname,3+(idx)*100/imagemap.size());
+		progress.step(TTR("Import Image:")+" "+fname,3+(idx)*100/imagemap.size());
 
 		idx++;
 
 		if (path==target_path) {
 
-			EditorNode::add_io_error(TTR("Can't import a file over itself: '")+target_path);
+			EditorNode::add_io_error(TTR("Can't import a file over itself:")+" "+target_path);
 			continue;
 		}
 
 		if (!target_path.begins_with("res://")) {
-			EditorNode::add_io_error(TTR("Couldn't localize path: '")+target_path+"' (already local)");
+			EditorNode::add_io_error(vformat(TTR("Couldn't localize path: %s (already local)"),target_path));
 			continue;
 		}
 

+ 15 - 15
tools/editor/io_plugins/editor_scene_importer_fbxconv.cpp

@@ -507,15 +507,15 @@ void EditorSceneImporterFBXConv::_parse_materials(State& state) {
 				if (tex.is_valid() && texture.has("type")) {
 
 					String type=texture["type"];
-					if (type==TTR("DIFFUSE"))
+					if (type=="DIFFUSE")
 						mat->set_texture(FixedMaterial::PARAM_DIFFUSE,tex);
-					else if (type==TTR("SPECULAR"))
+					else if (type=="SPECULAR")
 						mat->set_texture(FixedMaterial::PARAM_SPECULAR,tex);
-					else if (type==TTR("SHININESS"))
+					else if (type=="SHININESS")
 						mat->set_texture(FixedMaterial::PARAM_SPECULAR_EXP,tex);
 					else if (type=="NORMAL")
 						mat->set_texture(FixedMaterial::PARAM_NORMAL,tex);
-					else if (type==TTR("EMISSIVE"))
+					else if (type=="EMISSIVE")
 						mat->set_texture(FixedMaterial::PARAM_EMISSION,tex);
 				}
 
@@ -570,13 +570,13 @@ void EditorSceneImporterFBXConv::_parse_surfaces(State& state) {
 				exists[Mesh::ARRAY_COLOR]=true;
 				ofs[Mesh::ARRAY_COLOR]=stride;
 				stride+=4;
-			} else if (attr==TTR("COLORPACKED")) {
+			} else if (attr=="COLORPACKED") {
 				stride+=1; //ignore
-			} else if (attr==TTR("TANGENT")) {
+			} else if (attr=="TANGENT") {
 				exists[Mesh::ARRAY_TANGENT]=true;
 				ofs[Mesh::ARRAY_TANGENT]=stride;
 				stride+=3;
-			} else if (attr==TTR("BINORMAL")) {
+			} else if (attr=="BINORMAL") {
 				binormal_ofs=stride;
 				stride+=3;
 			} else if (attr=="TEXCOORD0") {
@@ -587,10 +587,10 @@ void EditorSceneImporterFBXConv::_parse_surfaces(State& state) {
 				exists[Mesh::ARRAY_TEX_UV2]=true;
 				ofs[Mesh::ARRAY_TEX_UV2]=stride;
 				stride+=2;
-			} else if (attr.begins_with(TTR("TEXCOORD"))) {
+			} else if (attr.begins_with("TEXCOORD")) {
 				stride+=2;
-			} else if (attr.begins_with(TTR("BLENDWEIGHT"))) {
-				int idx=attr.replace(TTR("BLENDWEIGHT"),"").to_int();
+			} else if (attr.begins_with("BLENDWEIGHT")) {
+				int idx=attr.replace("BLENDWEIGHT","").to_int();
 				if (idx==0) {
 					exists[Mesh::ARRAY_BONES]=true;
 					ofs[Mesh::ARRAY_BONES]=stride;
@@ -799,13 +799,13 @@ void EditorSceneImporterFBXConv::_parse_surfaces(State& state) {
 
 			if (part.has("type")) {
 				String type=part["type"];
-				if (type==TTR("LINES"))
+				if (type=="LINES")
 					pt=Mesh::PRIMITIVE_LINES;
-				else if (type==TTR("POINTS"))
+				else if (type=="POINTS")
 					pt=Mesh::PRIMITIVE_POINTS;
-				else if (type==TTR("TRIANGLE_STRIP"))
+				else if (type=="TRIANGLE_STRIP")
 					pt=Mesh::PRIMITIVE_TRIANGLE_STRIP;
-				else if (type==TTR("LINE_STRIP"))
+				else if (type=="LINE_STRIP")
 					pt=Mesh::PRIMITIVE_LINE_STRIP;
 			}
 
@@ -1056,7 +1056,7 @@ Error EditorSceneImporterFBXConv::_parse_fbx(State& state,const String& p_path)
 	}
 
 	args.push_back("-o");
-	args.push_back(TTR("G3DJ"));
+	args.push_back("G3DJ");
 	args.push_back(path);
 
 	int res;

+ 27 - 27
tools/editor/io_plugins/editor_texture_import_plugin.cpp

@@ -53,17 +53,17 @@ static const char *flag_names[]={
 
 #if 0 // not used
 static const char *flag_short_names[]={
-	TTR("Stream"),
-	TTR("FixBorder"),
-	TTR("AlphBit"),
-	TTR("ExtComp"),
-	TTR("NoMipMap"),
-	TTR("Repeat"),
-	TTR("Filter"),
-	TTR("PMAlpha"),
-	TTR("ToLinear"),
-	TTR("ToRG"),
-	TTR("Anisoropic"),
+	"Stream",
+	"FixBorder",
+	"AlphBit",
+	"ExtComp",
+	"NoMipMap",
+	"Repeat",
+	"Filter",
+	"PMAlpha",
+	"ToLinear",
+	"ToRG",
+	"Anisoropic",
 	NULL
 };
 #endif
@@ -343,7 +343,7 @@ void EditorTextureImportDialog::_import() {
 	}
 
 	if (!save_path->get_text().begins_with("res://")) {
-		error_dialog->set_text(TTR("Target path must be full resource path."));
+		error_dialog->set_text(TTR("Target path must be a complete resource path."));
 		error_dialog->popup_centered_minsize();
 		return;
 	}
@@ -382,7 +382,7 @@ void EditorTextureImportDialog::_import() {
 		Error err = plugin->import(dst_file,imd);
 		if (err) {
 
-			error_dialog->set_text(TTR("Error importing: ")+dst_file.get_file());
+			error_dialog->set_text(TTR("Error importing:")+" "+dst_file.get_file());
 			error_dialog->popup_centered(Size2(200,100));
 			return;
 
@@ -391,7 +391,7 @@ void EditorTextureImportDialog::_import() {
 
 		if (files.size()!=1) {
 
-			error_dialog->set_text(TTR("Only one file is required for large texture"));
+			error_dialog->set_text(TTR("Only one file is required for large texture."));
 			error_dialog->popup_centered(Size2(200,100));
 			return;
 
@@ -414,7 +414,7 @@ void EditorTextureImportDialog::_import() {
 		Error err = plugin->import(dst_file,imd);
 		if (err) {
 
-			error_dialog->set_text(TTR("Error importing: ")+dst_file.get_file());
+			error_dialog->set_text(TTR("Error importing:")+" "+dst_file.get_file());
 			error_dialog->popup_centered(Size2(200,100));
 			return;
 
@@ -438,7 +438,7 @@ void EditorTextureImportDialog::_import() {
 			Error err = plugin->import(dst_file,imd);
 			if (err) {
 
-				error_dialog->set_text(TTR("Error importing: ")+dst_file.get_file());
+				error_dialog->set_text(TTR("Error importing:")+" "+dst_file.get_file());
 				error_dialog->popup_centered(Size2(200,100));
 				return;
 
@@ -499,7 +499,7 @@ void EditorTextureImportDialog::_notification(int p_what) {
 
 		List<String> extensions;
 		ImageLoader::get_recognized_extensions(&extensions);
-	//	ResourceLoader::get_recognized_extensions_for_type(TTR("PackedTexture"),&extensions);
+	//	ResourceLoader::get_recognized_extensions_for_type("PackedTexture",&extensions);
 		file_select->clear_filters();
 		for(int i=0;i<extensions.size();i++) {
 
@@ -579,7 +579,7 @@ EditorTextureImportDialog::EditorTextureImportDialog(EditorTextureImportPlugin*
 
 	if (p_atlas) {
 		size->set_val(2048);
-		vbc->add_margin_child(TTR("Max Texture size:"),size);
+		vbc->add_margin_child(TTR("Max Texture Size:"),size);
 	} else {
 		size->set_val(256);
 		vbc->add_margin_child(TTR("Cell Size:"),size);
@@ -612,9 +612,9 @@ EditorTextureImportDialog::EditorTextureImportDialog(EditorTextureImportPlugin*
 	save_file_select->set_mode(EditorFileDialog::MODE_SAVE_FILE);
 	save_file_select->clear_filters();
 	if (large)
-		save_file_select->add_filter("*.ltex;Large Texture");
+		save_file_select->add_filter("*.ltex;"+TTR("Large Texture"));
 	else
-		save_file_select->add_filter("*.tex;Base Atlas Texture");
+		save_file_select->add_filter("*.tex;"+TTR("Base Atlas Texture"));
 	save_file_select->connect("file_selected", this,"_choose_save_dir");
 
 	save_select = memnew(	EditorDirDialog );
@@ -1057,7 +1057,7 @@ Error EditorTextureImportPlugin::import2(const String& p_path, const Ref<Resourc
 
 		err = ResourceSaver::save(p_path,existing);
 		if (err!=OK) {
-			EditorNode::add_io_error(TTR("Couldn't save large texture: ")+p_path);
+			EditorNode::add_io_error(TTR("Couldn't save large texture:")+" "+p_path);
 			return err;
 		}
 
@@ -1072,7 +1072,7 @@ Error EditorTextureImportPlugin::import2(const String& p_path, const Ref<Resourc
 		bool alpha=false;
 		bool crop = from->get_option("crop");
 
-		EditorProgress ep("make_atlas",TTR("Build Atlas For: ")+p_path.get_file(),from->get_source_count()+3);
+		EditorProgress ep("make_atlas",TTR("Build Atlas For:")+" "+p_path.get_file(),from->get_source_count()+3);
 
 		print_line("sources: "+itos(from->get_source_count()));
 
@@ -1081,12 +1081,12 @@ Error EditorTextureImportPlugin::import2(const String& p_path, const Ref<Resourc
 			String path = EditorImportPlugin::expand_source_path(from->get_source_path(i));
 			String md5 = FileAccess::get_md5(path);
 			from->set_source_md5(i,FileAccess::get_md5(path));
-			ep.step(TTR("Loading Image: ")+path,i);
+			ep.step(TTR("Loading Image:")+" "+path,i);
 			print_line("source path: "+path+" md5 "+md5);
 			Image src;
 			Error err = ImageLoader::load_image(path,&src);
 			if (err) {
-				EditorNode::add_io_error(TTR("Couldn't load image: ")+path);
+				EditorNode::add_io_error(TTR("Couldn't load image:")+" "+path);
 				return err;
 			}
 
@@ -1176,7 +1176,7 @@ Error EditorTextureImportPlugin::import2(const String& p_path, const Ref<Resourc
 		Size2i dst_size;
 		EditorAtlas::fit(src_sizes,dst_positions,dst_size);
 
-		print_line("size that workeD: "+itos(dst_size.width)+","+itos(dst_size.height));
+		print_line("size that worked: "+itos(dst_size.width)+","+itos(dst_size.height));
 
 		ep.step(TTR("Blitting Images"),sources.size()+2);
 
@@ -1291,7 +1291,7 @@ Error EditorTextureImportPlugin::import2(const String& p_path, const Ref<Resourc
 				atlases[i]->set_atlas(texture);
 				Error err = ResourceSaver::save(apath,atlases[i]);
 				if (err) {
-					EditorNode::add_io_error(TTR("Couldn't save atlas image: ")+apath);
+					EditorNode::add_io_error(TTR("Couldn't save atlas image:")+" "+apath);
 					return err;
 				}
 				//from->set_source_md5(i,FileAccess::get_md5(apath));
@@ -1433,7 +1433,7 @@ Error EditorTextureImportPlugin::import2(const String& p_path, const Ref<Resourc
 
 	Error err = ResourceSaver::save(p_path,texture,save_flags);
 	if (err!=OK) {
-		EditorNode::add_io_error(TTR("Couldn't save converted texture: ")+p_path);
+		EditorNode::add_io_error(TTR("Couldn't save converted texture:")+" "+p_path);
 		return err;
 	}
 

+ 2 - 2
tools/editor/io_plugins/editor_translation_import_plugin.cpp

@@ -236,7 +236,7 @@ public:
 		}
 
 		if (!save_path->get_text().begins_with("res://")) {
-			error_dialog->set_text(TTR("No target path!!"));
+			error_dialog->set_text(TTR("No target path!"));
 			error_dialog->popup_centered(Size2(200,100));
 		}
 
@@ -258,7 +258,7 @@ public:
 			String savefile = save_path->get_text().plus_file(import_path->get_text().get_file().basename()+"."+locale+".xl");
 			Error err = plugin->import(savefile,imd);
 			if (err!=OK) {
-				error_dialog->set_text(TTR("Couldnt import!"));
+				error_dialog->set_text(TTR("Couldn't import!"));
 				error_dialog->popup_centered(Size2(200,100));
 			} else if (add_to_project->is_pressed()) {
 

+ 1 - 1
tools/editor/multi_node_edit.cpp

@@ -9,7 +9,7 @@ bool MultiNodeEdit::_set(const StringName& p_name, const Variant& p_value){
 
 	UndoRedo *ur=EditorNode::get_singleton()->get_undo_redo();
 
-	ur->create_action(TTR("MultiNode Set ")+String(p_name));
+	ur->create_action(TTR("MultiNode Set")+" "+String(p_name));
 	for (const List<NodePath>::Element *E=nodes.front();E;E=E->next()) {
 
 		if (!es->has_node(E->get()))

+ 11 - 11
tools/editor/plugins/animation_player_editor_plugin.cpp

@@ -496,7 +496,7 @@ void AnimationPlayerEditor::_animation_name_edited() {
 	}
 
 	if (player->has_animation(new_name)) {
-		error_dialog->set_text(TTR("ERROR: Animation Name Already Exists!"));
+		error_dialog->set_text(TTR("ERROR: Animation name already exists!"));
 		error_dialog->popup_centered_minsize();
 		return;
 	}
@@ -1022,7 +1022,7 @@ void AnimationPlayerEditor::_editor_store() {
 		return; //already there
 
 
-	undo_redo->create_action(TTR("Store anim in editor"));
+	undo_redo->create_action("Store anim in editor");
 	undo_redo->add_do_method(key_editor,"set_animation",anim);
 	undo_redo->add_undo_method(key_editor,"remove_animation",anim);
 	undo_redo->commit_action();
@@ -1044,7 +1044,7 @@ void AnimationPlayerEditor::_editor_load(){
 	String base=anim->get_name();
 	bool noname=false;
 	if (base=="") {
-		base=TTR("New Anim");
+		base="New Anim";
 		noname=true;
 	}
 
@@ -1063,7 +1063,7 @@ void AnimationPlayerEditor::_editor_load(){
 	if (noname)
 		anim->set_name(base);
 
-	undo_redo->create_action(TTR("Add Animation From Editor"));
+	undo_redo->create_action("Add Animation From Editor");
 	undo_redo->add_do_method(player,"add_animation",base,anim);
 	undo_redo->add_undo_method(player,"remove_animation",base);
 	undo_redo->add_do_method(this,"_animation_player_changed",player);
@@ -1298,7 +1298,7 @@ AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor) {
 	Label * l;
 
 	/*l= memnew( Label );
-	l->set_text(TTR("Animation Player:"));
+	l->set_text("Animation Player:");
 	add_child(l);*/
 
 	HBoxContainer *hb = memnew( HBoxContainer );
@@ -1306,11 +1306,11 @@ AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor) {
 
 
 	play_bw_from = memnew( ToolButton );
-	play_bw_from->set_tooltip(TTR("Play backwards selected animation from current pos. (A)"));
+	play_bw_from->set_tooltip(TTR("Play selected animation backwards from current pos. (A)"));
 	hb->add_child(play_bw_from);
 
 	play_bw = memnew( ToolButton );
-	play_bw->set_tooltip(TTR("Play backwards selected animation from end. (Shift+A)"));
+	play_bw->set_tooltip(TTR("Play selected animation backwards from end. (Shift+A)"));
 	hb->add_child(play_bw);
 
 	stop = memnew( ToolButton );
@@ -1391,7 +1391,7 @@ AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor) {
 
 	autoplay = memnew( ToolButton );
 	hb->add_child(autoplay);
-	autoplay->set_tooltip(TTR("Autoplay On Load"));
+	autoplay->set_tooltip(TTR("Autoplay on Load"));
 
 
 
@@ -1405,7 +1405,7 @@ AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor) {
 	tool_anim->get_popup()->add_item(TTR("Copy Animation"),TOOL_COPY_ANIM);
 	tool_anim->get_popup()->add_item(TTR("Paste Animation"),TOOL_PASTE_ANIM);
 	//tool_anim->get_popup()->add_separator();
-	//tool_anim->get_popup()->add_item(TTR("Edit Anim Resource"),TOOL_PASTE_ANIM);
+	//tool_anim->get_popup()->add_item("Edit Anim Resource",TOOL_PASTE_ANIM);
 	hb->add_child(tool_anim);
 
 	nodename = memnew( Button );
@@ -1444,7 +1444,7 @@ AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor) {
 
 	error_dialog = memnew( ConfirmationDialog );
 	error_dialog->get_ok()->set_text(TTR("Close"));
-	//error_dialog->get_cancel()->set_text(TTR("Close"));
+	//error_dialog->get_cancel()->set_text("Close");
 	error_dialog->set_text(TTR("Error!"));
 	add_child(error_dialog);
 
@@ -1459,7 +1459,7 @@ AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor) {
 	blend_editor.dialog->set_child_rect(blend_vb);
 	blend_editor.tree = memnew( Tree );
 	blend_editor.tree->set_columns(2);
-	blend_vb->add_margin_child(TTR("Blend Times: "),blend_editor.tree,true);
+	blend_vb->add_margin_child(TTR("Blend Times:"),blend_editor.tree,true);
 	blend_editor.next = memnew( OptionButton );
 	blend_vb->add_margin_child(TTR("Next (Auto Queue):"),blend_editor.next);
 	blend_editor.dialog->set_title(TTR("Cross-Animation Blend Times"));

+ 1 - 1
tools/editor/plugins/animation_player_editor_plugin.h

@@ -203,7 +203,7 @@ public:
 	virtual Dictionary get_state() const { return anim_editor->get_state(); }
 	virtual void set_state(const Dictionary& p_state)  { anim_editor->set_state(p_state); }
 
-	virtual String get_name() const { return TTR("Anim"); }
+	virtual String get_name() const { return "Anim"; }
 	bool has_main_screen() const { return false; }
 	virtual void edit(Object *p_node);
 	virtual bool handles(Object *p_node) const;

+ 4 - 4
tools/editor/plugins/animation_tree_editor_plugin.cpp

@@ -990,12 +990,12 @@ void AnimationTreeEditor::_notification(int p_what) {
 				case AnimationTreePlayer::CONNECT_OK: {
 
 					Ref<Font> f = get_font("font","Label");
-					f->draw(get_canvas_item(),Point2(5,25+f->get_ascent()),TTR("Animation Tree is Valid."),Color(0,1,0.6,0.8));
+					f->draw(get_canvas_item(),Point2(5,25+f->get_ascent()),TTR("Animation tree is valid."),Color(0,1,0.6,0.8));
 				} break;
 				default: {
 
 					   Ref<Font> f = get_font("font","Label");
-					   f->draw(get_canvas_item(),Point2(5,25+f->get_ascent()),TTR("Animation Tree is Invalid."),Color(1,0.6,0.0,0.8));
+					   f->draw(get_canvas_item(),Point2(5,25+f->get_ascent()),TTR("Animation tree is invalid."),Color(1,0.6,0.0,0.8));
 				} break;
 			}
 
@@ -1369,7 +1369,7 @@ AnimationTreeEditor::AnimationTreeEditor() {
 	p->add_item(TTR("TimeSeek Node"),AnimationTreePlayer::NODE_TIMESEEK);
 	p->add_item(TTR("Transition Node"),AnimationTreePlayer::NODE_TRANSITION);
 	p->add_separator();
-	p->add_item(TTR("Import Animations..."), MENU_IMPORT_ANIMATIONS); // wtf
+	p->add_item(TTR("Import Animations.."), MENU_IMPORT_ANIMATIONS); // wtf
 	p->add_separator();
 	p->add_item(TTR("Clear"),MENU_GRAPH_CLEAR);
 
@@ -1524,7 +1524,7 @@ AnimationTreeEditorPlugin::AnimationTreeEditorPlugin(EditorNode *p_node) {
 	anim_tree_editor = memnew( AnimationTreeEditor );
 	anim_tree_editor->set_custom_minimum_size(Size2(0,300));
 
-	button=editor->add_bottom_panel_item(TTR("AnimationTree"),anim_tree_editor);
+	button=editor->add_bottom_panel_item("AnimationTree",anim_tree_editor);
 	button->hide();
 
 

+ 1 - 1
tools/editor/plugins/animation_tree_editor_plugin.h

@@ -180,7 +180,7 @@ class AnimationTreeEditorPlugin : public EditorPlugin {
 
 public:
 
-	virtual String get_name() const { return TTR("AnimTree"); }
+	virtual String get_name() const { return "AnimTree"; }
 	bool has_main_screen() const { return false; }
 	virtual void edit(Object *p_node);
 	virtual bool handles(Object *p_node) const;

+ 2 - 2
tools/editor/plugins/baked_light_baker.cpp

@@ -728,14 +728,14 @@ void BakedLightBaker::_make_octree() {
 	for(int i=0;i<8;i++)
 		root->children[i]=0;
 
-	EditorProgress ep("bake_octree",TTR("Parsing ")+itos(triangles.size())+" Triangles:",triangles.size());
+	EditorProgress ep("bake_octree",vformat(TTR("Parsing %d Triangles:"), triangles.size()),triangles.size());
 
 	for(int i=0;i<triangles.size();i++) {
 
 		_octree_insert(0,&triangles[i],octree_depth-1);
 		if ((i%1000)==0) {
 
-			ep.step(TTR("Triangle# ")+itos(i),i);
+			ep.step(TTR("Triangle #")+itos(i),i);
 		}
 	}
 

+ 14 - 14
tools/editor/plugins/canvas_item_editor_plugin.cpp

@@ -1906,7 +1906,7 @@ void CanvasItemEditor::_viewport_draw() {
 		if (h_scroll->is_visible())
 			size.height-=h_scroll->get_size().height;
 
-		get_stylebox(TTR("EditorFocus"),"EditorStyles")->draw(ci,Rect2(Point2(),size));
+		get_stylebox("EditorFocus","EditorStyles")->draw(ci,Rect2(Point2(),size));
 	}
 
 	Ref<Texture> lock = get_icon("Lock","EditorIcons");
@@ -2229,7 +2229,7 @@ void CanvasItemEditor::_notification(int p_what) {
 		key_insert_button->set_icon(get_icon("Key","EditorIcons"));
 
 
-		//anchor_menu->add_icon_override(TTR("Align Top Left"));
+		//anchor_menu->add_icon_override("Align Top Left");
 		anchor_menu->set_icon(get_icon("Anchor","EditorIcons"));
 		PopupMenu *p=anchor_menu->get_popup();
 
@@ -3147,7 +3147,7 @@ void CanvasItemEditor::end_drag() {
 
 	if (undo_redo) {
 
-		undo_redo->create_action(TTR("Edit CanvasItem"));
+		undo_redo->create_action("Edit CanvasItem");
 		for(CanvasItemMap::Element *E=canvas_items.front();E;E=E->next()) {
 			CanvasItem *canvas_item = E->key();
 			Variant state=canvas_item->edit_get_state();
@@ -3285,7 +3285,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
 	hb->add_child(select_button);
 	select_button->connect("pressed",this,"_tool_select",make_binds(TOOL_SELECT));
 	select_button->set_pressed(true);
-	select_button->set_tooltip("Select Mode (Q)\n"+keycode_get_string(KEY_MASK_CMD)+"Drag: Rotate\nAlt+Drag: Move\nPress 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving).\nAlt+RMB: Depth list selection");
+	select_button->set_tooltip(TTR("Select Mode (Q)")+"\n"+keycode_get_string(KEY_MASK_CMD)+TTR("Drag: Rotate")+"\n"+TTR("Alt+Drag: Move")+"\n"+TTR("Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving).")+"\n"+TTR("Alt+RMB: Depth list selection"));
 
 
 	move_button = memnew( ToolButton );
@@ -3306,13 +3306,13 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
 	list_select_button->set_toggle_mode(true);
 	hb->add_child(list_select_button);
 	list_select_button->connect("pressed",this,"_tool_select",make_binds(TOOL_LIST_SELECT));
-	list_select_button->set_tooltip("Show a list of all objects at the position clicked\n(same as Alt+RMB in selet mode).");
+	list_select_button->set_tooltip(TTR("Show a list of all objects at the position clicked\n(same as Alt+RMB in select mode)."));
 
 	pivot_button = memnew( ToolButton );
 	pivot_button->set_toggle_mode(true);
 	hb->add_child(pivot_button);
 	pivot_button->connect("pressed",this,"_tool_select",make_binds(TOOL_EDIT_PIVOT));
-	pivot_button->set_tooltip(TTR("Click to change object's rotation pivot"));
+	pivot_button->set_tooltip(TTR("Click to change object's rotation pivot."));
 
 	pan_button = memnew( ToolButton );
 	pan_button->set_toggle_mode(true);
@@ -3326,7 +3326,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
 	hb->add_child(lock_button);
 
 	lock_button->connect("pressed",this,"_popup_callback",varray(LOCK_SELECTED));
-	lock_button->set_tooltip("Lock the selected object in-place (can't be moved).");
+	lock_button->set_tooltip(TTR("Lock the selected object in place (can't be moved)."));
 
 	unlock_button = memnew( ToolButton );
 	hb->add_child(unlock_button);
@@ -3336,12 +3336,12 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
 	group_button = memnew( ToolButton );
 	hb->add_child(group_button);
 	group_button->connect("pressed",this,"_popup_callback",varray(GROUP_SELECTED));
-	group_button->set_tooltip("Makes sure the object's' children are not selectable.");
+	group_button->set_tooltip(TTR("Makes sure the object's children are not selectable."));
 
 	ungroup_button = memnew( ToolButton );
 	hb->add_child(ungroup_button);
 	ungroup_button->connect("pressed",this,"_popup_callback",varray(UNGROUP_SELECTED));
-	ungroup_button->set_tooltip("Restores the object's' children ability to be selected.");
+	ungroup_button->set_tooltip(TTR("Restores the object's children's ability to be selected."));
 
 	hb->add_child(memnew(VSeparator));
 
@@ -3375,10 +3375,10 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
 
 
 	/*
-	p->add_item(TTR("Align Horizontal"),ALIGN_HORIZONTAL);
-	p->add_item(TTR("Align Vertical"),ALIGN_VERTICAL);
-	p->add_item(TTR("Space Horizontal"),SPACE_HORIZONTAL);
-	p->add_item(TTR("Space Vertical"),SPACE_VERTICAL);*/
+	p->add_item("Align Horizontal",ALIGN_HORIZONTAL);
+	p->add_item("Align Vertical",ALIGN_VERTICAL);
+	p->add_item("Space Horizontal",SPACE_HORIZONTAL);
+	p->add_item("Space Vertical",SPACE_VERTICAL);*/
 
 	view_menu = memnew( MenuButton );
 	view_menu->set_text(TTR("View"));
@@ -3436,7 +3436,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
 	key_insert_button = memnew( Button );
 	key_insert_button->set_focus_mode(FOCUS_NONE);
 	key_insert_button->connect("pressed",this,"_popup_callback",varray(ANIM_INSERT_KEY));
-	key_insert_button->set_tooltip(TTR("Insert Keys (Insert)"));
+	key_insert_button->set_tooltip(TTR("Insert Keys (Ins)"));
 
 	animation_hb->add_child(key_insert_button);
 

+ 3 - 3
tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp

@@ -390,7 +390,7 @@ CollisionPolygon2DEditor::CollisionPolygon2DEditor(EditorNode *p_editor) {
 	add_child(button_create);
 	button_create->connect("pressed",this,"_menu_option",varray(MODE_CREATE));
 	button_create->set_toggle_mode(true);
-	button_create->set_tooltip(TTR("Create a new polygon from scratch"));
+	button_create->set_tooltip(TTR("Create a new polygon from scratch."));
 
 	button_edit = memnew( ToolButton );
 	add_child(button_edit);
@@ -404,8 +404,8 @@ CollisionPolygon2DEditor::CollisionPolygon2DEditor(EditorNode *p_editor) {
 	options = memnew( MenuButton );
 	add_child(options);
 	options->set_area_as_parent_rect();
-	options->set_text(TTR("Polygon"));
-	//options->get_popup()->add_item(TTR("Parse BBCODE"),PARSE_BBCODE);
+	options->set_text("Polygon");
+	//options->get_popup()->add_item("Parse BBCode",PARSE_BBCODE);
 	options->get_popup()->connect("item_pressed", this,"_menu_option");
 #endif
 

+ 2 - 2
tools/editor/plugins/collision_polygon_editor_plugin.cpp

@@ -559,8 +559,8 @@ CollisionPolygonEditor::CollisionPolygonEditor(EditorNode *p_editor) {
 	options = memnew( MenuButton );
 	add_child(options);
 	options->set_area_as_parent_rect();
-	options->set_text(TTR("Polygon"));
-	//options->get_popup()->add_item(TTR("Parse BBCODE"),PARSE_BBCODE);
+	options->set_text("Polygon");
+	//options->get_popup()->add_item("Parse BBCode",PARSE_BBCODE);
 	options->get_popup()->connect("item_pressed", this,"_menu_option");
 #endif
 

+ 6 - 6
tools/editor/plugins/control_editor_plugin.cpp

@@ -112,7 +112,7 @@ void ControlEditor::_key_move(const Vector2& p_dir, bool p_snap) {
 	if (p_snap)
 		motion*=snap_val->get_text().to_double();
 
-	undo_redo->create_action(TTR("Edit Control"));
+	undo_redo->create_action("Edit Control");
 	for(ControlMap::Element *E=controls.front();E;E=E->next()) {
 		Control *control = E->key();
 		undo_redo->add_do_method(control,"set_pos",control->get_pos()+motion);
@@ -156,7 +156,7 @@ void ControlEditor::_input_event(InputEvent p_event) {
 
 				if (undo_redo) {
 
-					undo_redo->create_action(TTR("Edit Control"));
+					undo_redo->create_action("Edit Control");
 					for(ControlMap::Element *E=controls.front();E;E=E->next()) {
 						Control *control = E->key();
 						undo_redo->add_do_method(control,"set_pos",control->get_pos());
@@ -752,17 +752,17 @@ ControlEditor::ControlEditor(EditorNode *p_editor) {
 	handle_len=10;
 
 	popup=memnew( PopupMenu );
-	popup->add_check_item(TTR("Use Snap"));
-	popup->add_item(TTR("Configure Snap.."));
+	popup->add_check_item("Use Snap");
+	popup->add_item("Configure Snap..");
 	add_child(popup);
 
 	snap_dialog = memnew( ConfirmationDialog );
 	snap_dialog->get_ok()->hide();
-	snap_dialog->get_cancel()->set_text(TTR("Close"));
+	snap_dialog->get_cancel()->set_text("Close");
 	add_child(snap_dialog);
 
 	Label *l = memnew(Label);
-	l->set_text(TTR("Snap:"));
+	l->set_text("Snap:");
 	l->set_pos(Point2(5,5));
 	snap_dialog->add_child(l);
 

+ 1 - 1
tools/editor/plugins/control_editor_plugin.h

@@ -125,7 +125,7 @@ class ControlEditorPlugin : public EditorPlugin {
 
 public:
 
-	virtual String get_name() const { return TTR("GUI"); }
+	virtual String get_name() const { return "GUI"; }
 	bool has_main_screen() const { return true; }
 	virtual void edit(Object *p_object);
 	virtual bool handles(Object *p_object) const;

+ 1 - 1
tools/editor/plugins/cube_grid_theme_editor_plugin.cpp

@@ -256,7 +256,7 @@ void MeshLibraryEditor::_menu_cbk(int p_option) {
 			if (p.begins_with("/MeshLibrary/item") && p.get_slice_count("/")>=3) {
 
 				to_erase = p.get_slice("/",3).to_int();
-				cd->set_text(TTR("Remove Item ")+itos(to_erase)+"?");
+				cd->set_text(vformat(TTR("Remove item %d?"),to_erase));
 				cd->popup_centered(Size2(300,60));
 			}
 		} break;

+ 2 - 2
tools/editor/plugins/item_list_editor_plugin.cpp

@@ -129,7 +129,7 @@ int ItemListOptionButtonPlugin::get_flags() const {
 
 void ItemListOptionButtonPlugin::add_item() {
 
-	ob->add_item( TTR("Item ")+itos(ob->get_item_count()));
+	ob->add_item( vformat(TTR("Item %d"),ob->get_item_count()));
 	_change_notify();
 }
 
@@ -171,7 +171,7 @@ int ItemListPopupMenuPlugin::get_flags() const {
 
 void ItemListPopupMenuPlugin::add_item() {
 
-	pp->add_item( TTR("Item ")+itos(pp->get_item_count()));
+	pp->add_item( vformat(TTR("Item %d"),pp->get_item_count()));
 	_change_notify();
 }
 

+ 4 - 4
tools/editor/plugins/light_occluder_2d_editor_plugin.cpp

@@ -421,13 +421,13 @@ LightOccluder2DEditor::LightOccluder2DEditor(EditorNode *p_editor) {
 	add_child(button_create);
 	button_create->connect("pressed",this,"_menu_option",varray(MODE_CREATE));
 	button_create->set_toggle_mode(true);
-	button_create->set_tooltip(TTR("Create a new polygon from scratch"));
+	button_create->set_tooltip(TTR("Create a new polygon from scratch."));
 
 	button_edit = memnew( ToolButton );
 	add_child(button_edit);
 	button_edit->connect("pressed",this,"_menu_option",varray(MODE_EDIT));
 	button_edit->set_toggle_mode(true);
-	button_edit->set_tooltip("Edit existing polygon:\nLMB: Move Point.\nCtrl+LMB: Split Segment.\nRMB: Erase Point.");
+	button_edit->set_tooltip(TTR("Edit existing polygon:")+"\n"+TTR("LMB: Move Point.")+"\n"+TTR("Ctrl+LMB: Split Segment.")+"\n"+TTR("RMB: Erase Point."));
 
 	create_poly = memnew( ConfirmationDialog );
 	add_child(create_poly);
@@ -440,8 +440,8 @@ LightOccluder2DEditor::LightOccluder2DEditor(EditorNode *p_editor) {
 	options = memnew( MenuButton );
 	add_child(options);
 	options->set_area_as_parent_rect();
-	options->set_text(TTR("Polygon"));
-	//options->get_popup()->add_item(TTR("Parse BBCODE"),PARSE_BBCODE);
+	options->set_text("Polygon");
+	//options->get_popup()->add_item("Parse BBCode",PARSE_BBCODE);
 	options->get_popup()->connect("item_pressed", this,"_menu_option");
 #endif
 

+ 10 - 10
tools/editor/plugins/multimesh_editor_plugin.cpp

@@ -73,7 +73,7 @@ void MultiMeshEditor::_populate() {
 
 		if (!ms_node) {
 
-			err_dialog->set_text(TTR("Mesh source is invalid (Invalid Path)."));
+			err_dialog->set_text(TTR("Mesh source is invalid (invalid path)."));
 			err_dialog->popup_centered_minsize();
 			return;
 		}
@@ -82,7 +82,7 @@ void MultiMeshEditor::_populate() {
 
 		if (!ms_instance) {
 
-			err_dialog->set_text(TTR("Mesh source is invalid (Not a MeshInstance)."));
+			err_dialog->set_text(TTR("Mesh source is invalid (not a MeshInstance)."));
 			err_dialog->popup_centered_minsize();
 			return;
 		}
@@ -91,7 +91,7 @@ void MultiMeshEditor::_populate() {
 
 		if (mesh.is_null()) {
 
-			err_dialog->set_text(TTR("Mesh source is invalid (Contains no Mesh resource)."));
+			err_dialog->set_text(TTR("Mesh source is invalid (contains no Mesh resource)."));
 			err_dialog->popup_centered_minsize();
 			return;
 		}
@@ -109,7 +109,7 @@ void MultiMeshEditor::_populate() {
 
 	if (!ss_node) {
 
-		err_dialog->set_text(TTR("Surface source is invalid (Invalid Path)."));
+		err_dialog->set_text(TTR("Surface source is invalid (invalid path)."));
 		err_dialog->popup_centered_minsize();
 		return;
 	}
@@ -118,7 +118,7 @@ void MultiMeshEditor::_populate() {
 
 	if (!ss_instance) {
 
-		err_dialog->set_text(TTR("Surface source is invalid (Not Geometry)."));
+		err_dialog->set_text(TTR("Surface source is invalid (no geometry)."));
 		err_dialog->popup_centered_minsize();
 		return;
 	}
@@ -129,7 +129,7 @@ void MultiMeshEditor::_populate() {
 
 	if (geometry.size()==0) {
 
-		err_dialog->set_text(TTR("Surface source is invalid (No Faces)."));
+		err_dialog->set_text(TTR("Surface source is invalid (no faces)."));
 		err_dialog->popup_centered_minsize();
 		return;
 	}
@@ -153,10 +153,10 @@ void MultiMeshEditor::_populate() {
 	node->populate_parent(populate_rotate_random->get_val(),populate_tilt_random->get_val(),populate_scale_random->get_val(),populate_scale->get_val());
 
 
-	ERR_EXPLAIN(TTR("Parent is not of type VisualInstance."));
+	ERR_EXPLAIN("Parent is not of type VisualInstance.");
 	ERR_FAIL_COND(!get_parent() || !get_parent()->is_type("VisualInstance"));
 
-	ERR_EXPLAIN(TTR("Multimesh not present"));
+	ERR_EXPLAIN("Multimesh not present.");
 	ERR_FAIL_COND(multimesh.is_null());
 
 	VisualInstance *vi = get_parent()->cast_to<VisualInstance>();
@@ -184,9 +184,9 @@ void MultiMeshEditor::_populate() {
 		area_accum+=area;
 	}
 
-	ERR_EXPLAIN(TTR("Couldn't map area"));
+	ERR_EXPLAIN(TTR("Couldn't map area."));
 	ERR_FAIL_COND(triangle_area_map.size()==0);
-	ERR_EXPLAIN(TTR("Couldn't map area"));
+	ERR_EXPLAIN(TTR("Couldn't map area."));
 	ERR_FAIL_COND(area_accum==0);
 
 

+ 4 - 4
tools/editor/plugins/navigation_polygon_editor_plugin.cpp

@@ -469,13 +469,13 @@ NavigationPolygonEditor::NavigationPolygonEditor(EditorNode *p_editor) {
 	add_child(button_create);
 	button_create->connect("pressed",this,"_menu_option",varray(MODE_CREATE));
 	button_create->set_toggle_mode(true);
-	button_create->set_tooltip(TTR("Create a new polygon from scratch"));
+	button_create->set_tooltip(TTR("Create a new polygon from scratch."));
 
 	button_edit = memnew( ToolButton );
 	add_child(button_edit);
 	button_edit->connect("pressed",this,"_menu_option",varray(MODE_EDIT));
 	button_edit->set_toggle_mode(true);
-	button_edit->set_tooltip("Edit existing polygon:\nLMB: Move Point.\nCtrl+LMB: Split Segment.\nRMB: Erase Point.");
+	button_edit->set_tooltip(TTR("Edit existing polygon:")+"\n"+TTR("LMB: Move Point.")+"\n"+TTR("Ctrl+LMB: Split Segment.")+"\n"+TTR("RMB: Erase Point."));
 	create_nav = memnew( ConfirmationDialog );
 	add_child(create_nav);
 	create_nav->get_ok()->set_text(TTR("Create"));
@@ -487,8 +487,8 @@ NavigationPolygonEditor::NavigationPolygonEditor(EditorNode *p_editor) {
 	options = memnew( MenuButton );
 	add_child(options);
 	options->set_area_as_parent_rect();
-	options->set_text(TTR("Polygon"));
-	//options->get_popup()->add_item(TTR("Parse BBCODE"),PARSE_BBCODE);
+	options->set_text("Polygon");
+	//options->get_popup()->add_item("Parse BBCode",PARSE_BBCODE);
 	options->get_popup()->connect("item_pressed", this,"_menu_option");
 #endif
 

+ 1 - 1
tools/editor/plugins/particles_2d_editor_plugin.cpp

@@ -66,7 +66,7 @@ void Particles2DEditorPlugin::_file_selected(const String& p_file) {
 
 	Image img;
 	Error err = ImageLoader::load_image(p_file,&img);
-	ERR_EXPLAIN(TTR("Error loading image: ")+p_file);
+	ERR_EXPLAIN(TTR("Error loading image:")+" "+p_file);
 	ERR_FAIL_COND(err!=OK);
 
 	img.convert(Image::FORMAT_GRAYSCALE_ALPHA);

+ 1 - 1
tools/editor/plugins/particles_editor_plugin.cpp

@@ -249,7 +249,7 @@ void ParticlesEditor::_generate_emission_points() {
 
 		if (gcount==0) {
 
-			err_dialog->set_text(TTR("No Faces!"));
+			err_dialog->set_text(TTR("No faces!"));
 			err_dialog->popup_centered_minsize();
 			return;
 		}

+ 5 - 5
tools/editor/plugins/path_2d_editor_plugin.cpp

@@ -622,8 +622,8 @@ Path2DEditor::Path2DEditor(EditorNode *p_editor) {
 	options = memnew( MenuButton );
 	add_child(options);
 	options->set_area_as_parent_rect();
-	options->set_text(TTR("Polygon"));
-	//options->get_popup()->add_item(TTR("Parse BBCODE"),PARSE_BBCODE);
+	options->set_text("Polygon");
+	//options->get_popup()->add_item("Parse BBCode",PARSE_BBCODE);
 	options->get_popup()->connect("item_pressed", this,"_menu_option");
 #endif
 
@@ -636,7 +636,7 @@ Path2DEditor::Path2DEditor(EditorNode *p_editor) {
 	curve_edit->set_icon(CanvasItemEditor::get_singleton()->get_icon("CurveEdit","EditorIcons"));
 	curve_edit->set_toggle_mode(true);
 	curve_edit->set_focus_mode(Control::FOCUS_NONE);
-	curve_edit->set_tooltip("Select Points\nShift+Drag: Select Control Points\n"+keycode_get_string(KEY_MASK_CMD)+"Click: Add Point\nRight Click: Delete Point.");
+	curve_edit->set_tooltip(TTR("Select Points")+"\n"+TTR("Shift+Drag: Select Control Points")+"\n"+keycode_get_string(KEY_MASK_CMD)+TTR("Click: Add Point")+"\n"+TTR("Right Click: Delete Point"));
 	curve_edit->connect("pressed",this,"_mode_selected",varray(MODE_EDIT));
 	base_hb->add_child(curve_edit);
 	curve_edit_curve = memnew( ToolButton );
@@ -650,14 +650,14 @@ Path2DEditor::Path2DEditor(EditorNode *p_editor) {
 	curve_create->set_icon(CanvasItemEditor::get_singleton()->get_icon("CurveCreate","EditorIcons"));
 	curve_create->set_toggle_mode(true);
 	curve_create->set_focus_mode(Control::FOCUS_NONE);
-	curve_create->set_tooltip("Add Point (in empty space)\nSplit Segment (in curve).");
+	curve_create->set_tooltip(TTR("Add Point (in empty space)")+"\n"+TTR("Split Segment (in curve)"));
 	curve_create->connect("pressed",this,"_mode_selected",varray(MODE_CREATE));
 	base_hb->add_child(curve_create);
 	curve_del = memnew( ToolButton );
 	curve_del->set_icon(CanvasItemEditor::get_singleton()->get_icon("CurveDelete","EditorIcons"));
 	curve_del->set_toggle_mode(true);
 	curve_del->set_focus_mode(Control::FOCUS_NONE);
-	curve_del->set_tooltip(TTR("Delete Point."));
+	curve_del->set_tooltip(TTR("Delete Point"));
 	curve_del->connect("pressed",this,"_mode_selected",varray(MODE_DELETE));
 	base_hb->add_child(curve_del);
 	curve_close = memnew( ToolButton );

+ 3 - 3
tools/editor/plugins/path_editor_plugin.cpp

@@ -546,21 +546,21 @@ PathEditorPlugin::PathEditorPlugin(EditorNode *p_node) {
 	curve_edit->set_toggle_mode(true);
 	curve_edit->hide();
 	curve_edit->set_focus_mode(Control::FOCUS_NONE);
-	curve_edit->set_tooltip("Select Points\nShift+Drag: Select Control Points\n"+keycode_get_string(KEY_MASK_CMD)+"Click: Add Point\nRight Click: Delete Point.");
+	curve_edit->set_tooltip(TTR("Select Points")+"\n"+TTR("Shift+Drag: Select Control Points")+"\n"+keycode_get_string(KEY_MASK_CMD)+TTR("Click: Add Point")+"\n"+TTR("Right Click: Delete Point"));
 	SpatialEditor::get_singleton()->add_control_to_menu_panel(curve_edit);
 	curve_create = memnew( ToolButton );
 	curve_create->set_icon(SpatialEditor::get_singleton()->get_icon("CurveCreate","EditorIcons"));
 	curve_create->set_toggle_mode(true);
 	curve_create->hide();
 	curve_create->set_focus_mode(Control::FOCUS_NONE);
-	curve_create->set_tooltip("Add Point (in empty space)\nSplit Segment (in curve).");
+	curve_create->set_tooltip(TTR("Add Point (in empty space)")+"\n"+TTR("Split Segment (in curve)"));
 	SpatialEditor::get_singleton()->add_control_to_menu_panel(curve_create);
 	curve_del = memnew( ToolButton );
 	curve_del->set_icon(SpatialEditor::get_singleton()->get_icon("CurveDelete","EditorIcons"));
 	curve_del->set_toggle_mode(true);
 	curve_del->hide();
 	curve_del->set_focus_mode(Control::FOCUS_NONE);
-	curve_del->set_tooltip(TTR("Delete Point."));
+	curve_del->set_tooltip(TTR("Delete Point"));
 	SpatialEditor::get_singleton()->add_control_to_menu_panel(curve_del);
 	curve_close = memnew( ToolButton );
 	curve_close->set_icon(SpatialEditor::get_singleton()->get_icon("CurveClose","EditorIcons"));

+ 3 - 3
tools/editor/plugins/polygon_2d_editor_plugin.cpp

@@ -840,8 +840,8 @@ Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) {
 	options = memnew( MenuButton );
 	add_child(options);
 	options->set_area_as_parent_rect();
-	options->set_text(TTR("Polygon"));
-	//options->get_popup()->add_item(TTR("Parse BBCODE"),PARSE_BBCODE);
+	options->set_text("Polygon");
+	//options->get_popup()->add_item("Parse BBCode",PARSE_BBCODE);
 	options->get_popup()->connect("item_pressed", this,"_menu_option");
 #endif
 
@@ -868,7 +868,7 @@ Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) {
 		uv_button[i]->set_focus_mode(FOCUS_NONE);
 	}
 
-	uv_button[0]->set_tooltip("Move Point\nCtrl: Rotate\nShift: Move All\n:Shift+Ctrl: Scale");
+	uv_button[0]->set_tooltip(TTR("Move Point")+"\n"+TTR("Ctrl: Rotate")+"\n"+TTR("Shift: Move All")+"\n"+TTR("Shift+Ctrl: Scale"));
 	uv_button[1]->set_tooltip(TTR("Move Polygon"));
 	uv_button[2]->set_tooltip(TTR("Rotate Polygon"));
 	uv_button[3]->set_tooltip(TTR("Scale Polygon"));

+ 6 - 6
tools/editor/plugins/resource_preloader_editor_plugin.cpp

@@ -72,7 +72,7 @@ void ResourcePreloaderEditor::_files_load_request(const Vector<String>& p_paths)
 		if (resource.is_null()) {
 			dialog->set_text(TTR("ERROR: Couldn't load resource!"));
 			dialog->set_title(TTR("Error!"));
-			//dialog->get_cancel()->set_text(TTR("Close"));
+			//dialog->get_cancel()->set_text("Close");
 			dialog->get_ok()->set_text(TTR("Close"));
 			dialog->popup_centered_minsize();
 			return; ///beh should show an error i guess
@@ -169,7 +169,7 @@ void ResourcePreloaderEditor::_paste_pressed() {
 	if (!r.is_valid()) {
 		dialog->set_text(TTR("Resource clipboard is empty!"));
 		dialog->set_title(TTR("Error!"));
-		//dialog->get_cancel()->set_text(TTR("Close"));
+		//dialog->get_cancel()->set_text("Close");
 		dialog->get_ok()->set_text(TTR("Close"));
 		dialog->popup_centered_minsize();
 		return; ///beh should show an error i guess
@@ -206,11 +206,11 @@ void ResourcePreloaderEditor::_delete_pressed() {
 
 	_delete_confirm_pressed(); //it has undo.. why bother with a dialog..
 	/*
-	dialog->set_title(TTR("Confirm..."));
-	dialog->set_text(TTR("Remove Resource '")+tree->get_selected()->get_text(0)+"' ?");
-	//dialog->get_cancel()->set_text(TTR("Cancel"));
+	dialog->set_title("Confirm...");
+	dialog->set_text("Remove Resource '"+tree->get_selected()->get_text(0)+"' ?");
+	//dialog->get_cancel()->set_text("Cancel");
 	//dialog->get_ok()->show();
-	dialog->get_ok()->set_text(TTR("Remove"));
+	dialog->get_ok()->set_text("Remove");
 	dialog->popup_centered(Size2(300,60));*/
 
 }

+ 2 - 2
tools/editor/plugins/rich_text_editor_plugin.cpp

@@ -106,8 +106,8 @@ RichTextEditor::RichTextEditor() {
 	CanvasItemEditor::get_singleton()->add_control_to_menu_panel(options);
 	options->set_area_as_parent_rect();
 
-	options->set_text(TTR("RichText"));
-	options->get_popup()->add_item(TTR("Parse BBCODE"),PARSE_BBCODE);
+	options->set_text("RichText");
+	options->get_popup()->add_item(TTR("Parse BBCode"),PARSE_BBCODE);
 	options->get_popup()->add_item(TTR("Clear"),CLEAR);
 
 	options->get_popup()->connect("item_pressed", this,"_menu_option");

+ 1 - 1
tools/editor/plugins/rich_text_editor_plugin.h

@@ -77,7 +77,7 @@ class RichTextEditorPlugin : public EditorPlugin {
 
 public:
 
-	virtual String get_name() const { return TTR("RichText"); }
+	virtual String get_name() const { return "RichText"; }
 	bool has_main_screen() const { return false; }
 	virtual void edit(Object *p_node);
 	virtual bool handles(Object *p_node) const;

+ 1 - 1
tools/editor/plugins/sample_editor_plugin.cpp

@@ -328,7 +328,7 @@ void SampleEditor::_update_sample() {
 		return; //bye or unsupported
 
 	generate_preview_texture(sample,peakdisplay);
-	info_label->set_text(TTR("Length: ")+itos(sample->get_length())+" frames ("+String::num(sample->get_length()/(float)sample->get_mix_rate(),2)+" s), "+(sample->get_format()==Sample::FORMAT_PCM16?"16 Bits, ":"8 bits, ")+(sample->is_stereo()?"Stereo.":"Mono."));
+	info_label->set_text(TTR("Length:")+" "+vformat(TTR("%d frames"), sample->get_length())+" ("+String::num(sample->get_length()/(float)sample->get_mix_rate(),2)+" s), "+(sample->get_format()==Sample::FORMAT_PCM16?TTR("16 Bits"):TTR("8 Bits"))+", "+(sample->is_stereo()?TTR("Stereo"):TTR("Mono"))+".");
 
 	library->add_sample("default",sample);
 }

+ 3 - 3
tools/editor/plugins/sample_library_editor_plugin.cpp

@@ -76,7 +76,7 @@ void SampleLibraryEditor::_file_load_request(const DVector<String>& p_path) {
 		if (sample.is_null()) {
 			dialog->set_text(TTR("ERROR: Couldn't load sample!"));
 			dialog->set_title(TTR("Error!"));
-			//dialog->get_cancel()->set_text(TTR("Close"));
+			//dialog->get_cancel()->set_text("Close");
 			dialog->get_ok()->set_text(TTR("Close"));
 			dialog->popup_centered_minsize();
 			return; ///beh should show an error i guess
@@ -248,7 +248,7 @@ void SampleLibraryEditor::_update_library() {
 		ti->set_cell_mode(2,TreeItem::CELL_MODE_STRING);
 		ti->set_editable(2,false);
 		ti->set_selectable(2,false);
-		ti->set_text(2,String()+/*itos(smp->get_length())+" frames ("+String::num(smp->get_length()/(float)smp->get_mix_rate(),2)+" smp), "+*/(smp->get_format()==Sample::FORMAT_PCM16?"16 Bits, ":(smp->get_format()==Sample::FORMAT_PCM8?"8 bits, ":TTR("IMA-ADPCM,")))+(smp->is_stereo()?"Stereo":"Mono"));
+		ti->set_text(2,String()+(smp->get_format()==Sample::FORMAT_PCM16?TTR("16 Bits")+", ":(smp->get_format()==Sample::FORMAT_PCM8?TTR("8 Bits")+", ":"IMA-ADPCM,"))+(smp->is_stereo()?TTR("Stereo"):TTR("Mono")));
 
 		// Volume dB
 		ti->set_cell_mode(3,TreeItem::CELL_MODE_RANGE);
@@ -457,7 +457,7 @@ SampleLibraryEditor::SampleLibraryEditor() {
 	tree->set_column_title(1,TTR("Preview"));
 	tree->set_column_title(2,TTR("Format"));
 	tree->set_column_title(3,"dB");
-	tree->set_column_title(4,"Pitch");
+	tree->set_column_title(4,TTR("Pitch"));
 	tree->set_column_title(5,"");
 
 	tree->set_column_min_width(1,150);

+ 29 - 10
tools/editor/plugins/script_editor_plugin.cpp

@@ -1252,16 +1252,35 @@ void ScriptEditor::_menu_option(int p_option) {
 				Ref<Script> scr = current->get_edited_script();
 				if (scr.is_null())
 					return;
-				int line = tx->cursor_get_line();
-				int next_line = line + 1;
+
+				int from_line = tx->cursor_get_line();
+				int to_line = tx->cursor_get_line();
 				int column = tx->cursor_get_column();
 
-				if (line >= tx->get_line_count() - 1)
-					tx->set_line(line, tx->get_line(line) + "\n");
+				if (tx->is_selection_active()) {
+					from_line = tx->get_selection_from_line();
+					to_line = tx->get_selection_to_line();
+					column = tx->cursor_get_column();
+				}
+				int next_line = to_line + 1;
+
+				tx->begin_complex_operation();
+				for (int i = from_line; i <= to_line; i++) {
+
+					if (i >= tx->get_line_count() - 1) {
+							tx->set_line(i, tx->get_line(i) + "\n");
+					}
+					String line_clone = tx->get_line(i);
+					tx->insert_at(line_clone, next_line);
+					next_line++;
+				}
 
-				String line_clone = tx->get_line(line);
-				tx->insert_at(line_clone, next_line);
 				tx->cursor_set_column(column);
+				if (tx->is_selection_active()) {
+					tx->select(to_line + 1, tx->get_selection_from_column(), next_line - 1, tx->get_selection_to_column());
+				}
+
+				tx->end_complex_operation();
 				tx->update();
 
 			} break;
@@ -2441,7 +2460,7 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) {
 #else
 	edit_menu->get_popup()->add_item(TTR("Complete Symbol"),EDIT_COMPLETE,KEY_MASK_CMD|KEY_SPACE);
 #endif
-	edit_menu->get_popup()->add_item("Trim Trailing Whitespace", EDIT_TRIM_TRAILING_WHITESAPCE, KEY_MASK_CTRL|KEY_MASK_ALT|KEY_T);
+	edit_menu->get_popup()->add_item(TTR("Trim Trailing Whitespace"), EDIT_TRIM_TRAILING_WHITESAPCE, KEY_MASK_CTRL|KEY_MASK_ALT|KEY_T);
 	edit_menu->get_popup()->add_item(TTR("Auto Indent"),EDIT_AUTO_INDENT,KEY_MASK_CMD|KEY_I);
 	edit_menu->get_popup()->connect("item_pressed", this,"_menu_option");
 
@@ -2477,7 +2496,7 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) {
 	debug_menu->get_popup()->add_item(TTR("Break"),DEBUG_BREAK);
 	debug_menu->get_popup()->add_item(TTR("Continue"),DEBUG_CONTINUE);
 	debug_menu->get_popup()->add_separator();
-	//debug_menu->get_popup()->add_check_item(TTR("Show Debugger"),DEBUG_SHOW);
+	//debug_menu->get_popup()->add_check_item("Show Debugger",DEBUG_SHOW);
 	debug_menu->get_popup()->add_check_item(TTR("Keep Debugger Open"),DEBUG_SHOW_KEEP_OPEN);
 	debug_menu->get_popup()->connect("item_pressed", this,"_menu_option");
 
@@ -2523,7 +2542,7 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) {
 	site_search->set_text(TTR("Tutorials"));
 	site_search->connect("pressed",this,"_menu_option",varray(SEARCH_WEBSITE));
 	menu_hb->add_child(site_search);
-	site_search->set_tooltip(TTR("Open http://www.godotengine.org at tutorials section."));
+	site_search->set_tooltip(TTR("Open https://godotengine.org at tutorials section."));
 
 	class_search = memnew( ToolButton );
 	class_search->set_text(TTR("Classes"));
@@ -2581,7 +2600,7 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) {
 		disk_changed->set_child_rect(vbc);
 
 		Label *dl = memnew( Label );
-		dl->set_text("The following files are newer on disk.\nWhat action should be taken?:");
+		dl->set_text(TTR("The following files are newer on disk.\nWhat action should be taken?:"));
 		vbc->add_child(dl);
 
 		disk_changed_list = memnew( Tree );

+ 1 - 1
tools/editor/plugins/shader_editor_plugin.cpp

@@ -507,7 +507,7 @@ ShaderEditor::ShaderEditor() {
 	search_menu->get_popup()->add_item(TTR("Find Next"),SEARCH_FIND_NEXT,KEY_F3);
 	search_menu->get_popup()->add_item(TTR("Replace.."),SEARCH_REPLACE,KEY_MASK_CMD|KEY_R);
 	search_menu->get_popup()->add_separator();
-//	search_menu->get_popup()->add_item(TTR("Locate Symbol.."),SEARCH_LOCATE_SYMBOL,KEY_MASK_CMD|KEY_K);
+//	search_menu->get_popup()->add_item("Locate Symbol..",SEARCH_LOCATE_SYMBOL,KEY_MASK_CMD|KEY_K);
 	search_menu->get_popup()->add_item(TTR("Goto Line.."),SEARCH_GOTO_LINE,KEY_MASK_CMD|KEY_G);
 	search_menu->get_popup()->connect("item_pressed", this,"_menu_option");
 

+ 174 - 69
tools/editor/plugins/shader_graph_editor_plugin.cpp

@@ -743,7 +743,7 @@ void ShaderGraphView::_vec_op_changed(int p_op, int p_id){
 void ShaderGraphView::_vec_scalar_op_changed(int p_op, int p_id){
 
 	UndoRedo *ur=EditorNode::get_singleton()->get_undo_redo();
-	ur->create_action(TTR("Change VecxScalar Operator"));
+	ur->create_action(TTR("Change Vec Scalar Operator"));
 	ur->add_do_method(graph.ptr(),"vec_scalar_op_node_set_op",type,p_id,p_op);
 	ur->add_undo_method(graph.ptr(),"vec_scalar_op_node_set_op",type,p_id,graph->vec_scalar_op_node_get_op(type,p_id));
 	ur->add_do_method(this,"_update_graph");
@@ -902,7 +902,7 @@ void ShaderGraphView::_variant_edited() {
 				break;
 			}
 		UndoRedo *ur=EditorNode::get_singleton()->get_undo_redo();
-		ur->create_action(TTR("Change default value"));
+		ur->create_action(TTR("Change Default Value"));
 		ur->add_do_method(graph.ptr(),"default_set_value",type,edited_id,edited_def, v);
 		ur->add_undo_method(graph.ptr(),"default_set_value",type,edited_id,edited_def, v2);
 		ur->add_do_method(this,"_update_graph");
@@ -1427,7 +1427,7 @@ void ShaderGraphView::_create_node(int p_id) {
 
 	} break; // all inputs (case Shader type dependent)
 	case ShaderGraph::NODE_SCALAR_CONST: {
-		gn->set_title(TTR("Scalar"));
+		gn->set_title("Scalar");
 		SpinBox *sb = memnew( SpinBox );
 		sb->set_min(-100000);
 		sb->set_max(100000);
@@ -1440,7 +1440,7 @@ void ShaderGraphView::_create_node(int p_id) {
 	} break; //scalar constant
 	case ShaderGraph::NODE_VEC_CONST: {
 
-		gn->set_title(TTR("Vector"));
+		gn->set_title("Vector");
 		Array v3p(true);
 		for(int i=0;i<3;i++) {
 			HBoxContainer *hbc = memnew( HBoxContainer );
@@ -1469,11 +1469,11 @@ void ShaderGraphView::_create_node(int p_id) {
 		cpb->connect("color_changed",this,"_rgb_const_changed",varray(p_id));
 		gn->add_child(cpb);
 		Label *l = memnew( Label );
-		l->set_text(TTR("RGB"));
+		l->set_text("RGB");
 		l->set_align(Label::ALIGN_RIGHT);
 		gn->add_child(l);
 		l = memnew( Label );
-		l->set_text(TTR("Alpha"));
+		l->set_text("Alpha");
 		l->set_align(Label::ALIGN_RIGHT);
 		gn->add_child(l);
 
@@ -1482,7 +1482,7 @@ void ShaderGraphView::_create_node(int p_id) {
 
 	} break; //rgb constant (shows a color picker instead)
 	case ShaderGraph::NODE_XFORM_CONST: {
-		gn->set_title(TTR("XForm"));
+		gn->set_title("XForm");
 		ToolButton *edit = memnew( ToolButton );
 		edit->set_text("edit..");
 		edit->connect("pressed",this,"_xform_const_changed",varray(p_id,edit));
@@ -1492,7 +1492,7 @@ void ShaderGraphView::_create_node(int p_id) {
 	} break; // 4x4 matrix constant
 	case ShaderGraph::NODE_TIME: {
 
-		gn->set_title(TTR("Time"));
+		gn->set_title("Time");
 		Label *l = memnew( Label );
 		l->set_text("(s)");
 		l->set_align(Label::ALIGN_RIGHT);
@@ -1502,24 +1502,24 @@ void ShaderGraphView::_create_node(int p_id) {
 	} break; // time in seconds
 	case ShaderGraph::NODE_SCREEN_TEX: {
 
-		gn->set_title(TTR("ScreenTex"));
+		gn->set_title("ScreenTex");
 		HBoxContainer *hbc = memnew( HBoxContainer );
 		hbc->add_constant_override("separation",0);
 		if (!graph->is_slot_connected(type,p_id,0)) {
 			Vector3 v = graph->default_get_value(type, p_id, 0);
-			hbc->add_child(make_editor(TTR("UV: ") + v,gn,p_id,0,Variant::VECTOR3));
+			hbc->add_child(make_editor("UV: " + v,gn,p_id,0,Variant::VECTOR3));
 		} else {
-			hbc->add_child(make_label(TTR("UV"),Variant::VECTOR3));
+			hbc->add_child(make_label("UV",Variant::VECTOR3));
 		}
 		hbc->add_spacer();
-		hbc->add_child( memnew(Label(TTR("RGB"))));
+		hbc->add_child( memnew(Label("RGB")));
 		gn->add_child(hbc);
 		gn->set_slot(0,true,ShaderGraph::SLOT_TYPE_VEC,typecol[ShaderGraph::SLOT_TYPE_VEC],true,ShaderGraph::SLOT_TYPE_VEC,typecol[ShaderGraph::SLOT_TYPE_VEC]);
 
 	} break; // screen texture sampler (takes UV) (only usable in fragment case Shader)
 	case ShaderGraph::NODE_SCALAR_OP: {
 
-		gn->set_title(TTR("ScalarOp"));
+		gn->set_title("ScalarOp");
 		static const char* op_name[ShaderGraph::SCALAR_MAX_OP]={
 			("Add"),
 			("Sub"),
@@ -1567,7 +1567,7 @@ void ShaderGraphView::_create_node(int p_id) {
 	} break; // scalar vs scalar op (mul: { } break; add: { } break; div: { } break; etc)
 	case ShaderGraph::NODE_VEC_OP: {
 
-		gn->set_title(TTR("VecOp"));
+		gn->set_title("VecOp");
 		static const char* op_name[ShaderGraph::VEC_MAX_OP]={
 			("Add"),
 			("Sub"),
@@ -1615,7 +1615,7 @@ void ShaderGraphView::_create_node(int p_id) {
 	} break; // vec3 vs vec3 op (mul: { } break;ad: { } break;div: { } break;crossprod: { } break;etc)
 	case ShaderGraph::NODE_VEC_SCALAR_OP: {
 
-		gn->set_title(TTR("VecScalarOp"));
+		gn->set_title("VecScalarOp");
 		static const char* op_name[ShaderGraph::VEC_SCALAR_MAX_OP]={
 			("Mul"),
 			("Div"),
@@ -1657,7 +1657,7 @@ void ShaderGraphView::_create_node(int p_id) {
 	} break; // vec3 vs scalar op (mul: { } break; add: { } break; div: { } break; etc)
 	case ShaderGraph::NODE_RGB_OP: {
 
-		gn->set_title(TTR("RGB Op"));
+		gn->set_title("RGB Op");
 		static const char* op_name[ShaderGraph::RGB_MAX_OP]={
 			("Screen"),
 			("Difference"),
@@ -1702,7 +1702,7 @@ void ShaderGraphView::_create_node(int p_id) {
 	} break; // vec3 vs vec3 rgb op (with scalar amount): { } break; like brighten: { } break; darken: { } break; burn: { } break; dodge: { } break; multiply: { } break; etc.
 	case ShaderGraph::NODE_XFORM_MULT: {
 
-		gn->set_title(TTR("XFMult"));
+		gn->set_title("XFMult");
 		HBoxContainer *hbc = memnew( HBoxContainer );
 		if (graph->is_slot_connected(type, p_id, 0)) {
 			hbc->add_child(make_label("a",Variant::TRANSFORM));
@@ -1725,9 +1725,9 @@ void ShaderGraphView::_create_node(int p_id) {
 	} break; // mat4 x mat4
 	case ShaderGraph::NODE_XFORM_VEC_MULT: {
 
-		gn->set_title(TTR("XFVecMult"));
+		gn->set_title("XFVecMult");
 
-		CheckBox *button = memnew (CheckBox(TTR("RotOnly")));
+		CheckBox *button = memnew (CheckBox("RotOnly"));
 		button->set_pressed(graph->xform_vec_mult_node_get_no_translation(type,p_id));
 		button->connect("toggled",this,"_xform_inv_rev_changed",varray(p_id));
 
@@ -1758,10 +1758,10 @@ void ShaderGraphView::_create_node(int p_id) {
 	} break;
 	case ShaderGraph::NODE_XFORM_VEC_INV_MULT: {
 
-		gn->set_title(TTR("XFVecInvMult"));
+		gn->set_title("XFVecInvMult");
 
 
-		CheckBox *button = memnew( CheckBox(TTR("RotOnly")));
+		CheckBox *button = memnew( CheckBox("RotOnly"));
 		button->set_pressed(graph->xform_vec_mult_node_get_no_translation(type,p_id));
 		button->connect("toggled",this,"_xform_inv_rev_changed",varray(p_id));
 
@@ -1793,7 +1793,7 @@ void ShaderGraphView::_create_node(int p_id) {
 	} break; // mat4 x vec3 inverse mult (with no-translation option)
 	case ShaderGraph::NODE_SCALAR_FUNC: {
 
-		gn->set_title(TTR("ScalarFunc"));
+		gn->set_title("ScalarFunc");
 		static const char* func_name[ShaderGraph::SCALAR_MAX_FUNC]={
 			("Sin"),
 			("Cos"),
@@ -1846,7 +1846,7 @@ void ShaderGraphView::_create_node(int p_id) {
 
 
 
-		gn->set_title(TTR("VecFunc"));
+		gn->set_title("VecFunc");
 		static const char* func_name[ShaderGraph::VEC_MAX_FUNC]={
 			("Normalize"),
 			("Saturate"),
@@ -1882,7 +1882,7 @@ void ShaderGraphView::_create_node(int p_id) {
 
 	} break; // vector function (normalize: { } break; negate: { } break; reciprocal: { } break; rgb2hsv: { } break; hsv2rgb: { } break; etc: { } break; etc)
 	case ShaderGraph::NODE_VEC_LEN: {
-		gn->set_title(TTR("VecLength"));
+		gn->set_title("VecLength");
 		HBoxContainer *hbc = memnew( HBoxContainer );
 		if (graph->is_slot_connected(type, p_id, 0)) {
 			hbc->add_child(make_label("in", Variant::VECTOR3));
@@ -1899,7 +1899,7 @@ void ShaderGraphView::_create_node(int p_id) {
 	} break; // vec3 length
 	case ShaderGraph::NODE_DOT_PROD: {
 
-		gn->set_title(TTR("DotProduct"));
+		gn->set_title("DotProduct");
 		HBoxContainer *hbc = memnew( HBoxContainer );
 		hbc->add_constant_override("separation",0);
 		if (graph->is_slot_connected(type, p_id, 0)) {
@@ -1924,7 +1924,7 @@ void ShaderGraphView::_create_node(int p_id) {
 	} break; // vec3 . vec3 (dot product -> scalar output)
 	case ShaderGraph::NODE_VEC_TO_SCALAR: {
 
-		gn->set_title(TTR("Vec2Scalar"));
+		gn->set_title("Vec2Scalar");
 		HBoxContainer *hbc = memnew( HBoxContainer );
 		hbc->add_constant_override("separation",0);
 		if (graph->is_slot_connected(type, p_id, 0)) {
@@ -1955,7 +1955,7 @@ void ShaderGraphView::_create_node(int p_id) {
 	} break; // 1 vec3 input: { } break; 3 scalar outputs
 	case ShaderGraph::NODE_SCALAR_TO_VEC: {
 
-		gn->set_title(TTR("Scalar2Vec"));
+		gn->set_title("Scalar2Vec");
 		HBoxContainer *hbc = memnew( HBoxContainer );
 		if (graph->is_slot_connected(type, p_id, 0)) {
 			hbc->add_child(make_label("x", Variant::REAL));
@@ -1986,7 +1986,7 @@ void ShaderGraphView::_create_node(int p_id) {
 	} break; // 3 scalar input: { } break; 1 vec3 output
 	case ShaderGraph::NODE_VEC_TO_XFORM: {
 
-		gn->set_title(TTR("Vec2XForm"));
+		gn->set_title("Vec2XForm");
 		HBoxContainer *hbc = memnew( HBoxContainer );
 		hbc->add_constant_override("separation",0);
 		if (graph->is_slot_connected(type, p_id, 0)) {
@@ -2025,7 +2025,7 @@ void ShaderGraphView::_create_node(int p_id) {
 	} break; // 3 vec input: { } break; 1 xform output
 	case ShaderGraph::NODE_XFORM_TO_VEC: {
 
-		gn->set_title(TTR("XForm2Vec"));
+		gn->set_title("XForm2Vec");
 
 		HBoxContainer *hbc = memnew( HBoxContainer );
 		hbc->add_constant_override("separation",0);
@@ -2057,7 +2057,7 @@ void ShaderGraphView::_create_node(int p_id) {
 	} break; // 3 vec input: { } break; 1 xform output
 	case ShaderGraph::NODE_SCALAR_INTERP: {
 
-		gn->set_title(TTR("ScalarInterp"));
+		gn->set_title("ScalarInterp");
 		HBoxContainer *hbc = memnew( HBoxContainer );
 		hbc->add_constant_override("separation",0);
 		if (graph->is_slot_connected(type, p_id, 0)) {
@@ -2090,7 +2090,7 @@ void ShaderGraphView::_create_node(int p_id) {
 	} break; // scalar interpolation (with optional curve)
 	case ShaderGraph::NODE_VEC_INTERP: {
 
-		gn->set_title(TTR("VecInterp"));
+		gn->set_title("VecInterp");
 		HBoxContainer *hbc = memnew( HBoxContainer );
 		if (graph->is_slot_connected(type, p_id, 0)) {
 			hbc->add_child(make_label("a", Variant::VECTOR3));
@@ -2174,7 +2174,7 @@ void ShaderGraphView::_create_node(int p_id) {
 	} break; // scalar interpolation (with optional curve)
 	case ShaderGraph::NODE_CURVE_MAP: {
 
-		gn->set_title(TTR("CurveMap"));
+		gn->set_title("CurveMap");
 		GraphCurveMapEdit * map  = memnew( GraphCurveMapEdit );
 
 		DVector<Vector2> points = graph->curve_map_node_get_points(type,p_id);
@@ -2221,7 +2221,7 @@ void ShaderGraphView::_create_node(int p_id) {
 
 	case ShaderGraph::NODE_SCALAR_INPUT: {
 
-		gn->set_title(TTR("ScalarUniform"));
+		gn->set_title("ScalarUniform");
 		LineEdit *le = memnew( LineEdit );
 		gn->add_child(le);
 		le->set_text(graph->input_node_get_name(type,p_id));
@@ -2238,7 +2238,7 @@ void ShaderGraphView::_create_node(int p_id) {
 	} break; // scalar uniform (assignable in material)
 	case ShaderGraph::NODE_VEC_INPUT: {
 
-		gn->set_title(TTR("VectorUniform"));
+		gn->set_title("VectorUniform");
 		LineEdit *le = memnew( LineEdit );
 		gn->add_child(le);
 		le->set_text(graph->input_node_get_name(type,p_id));
@@ -2265,7 +2265,7 @@ void ShaderGraphView::_create_node(int p_id) {
 	} break; // vec3 uniform (assignable in material)
 	case ShaderGraph::NODE_RGB_INPUT: {
 
-		gn->set_title(TTR("ColorUniform"));
+		gn->set_title("ColorUniform");
 		LineEdit *le = memnew( LineEdit );
 		gn->add_child(le);
 		le->set_text(graph->input_node_get_name(type,p_id));
@@ -2275,11 +2275,11 @@ void ShaderGraphView::_create_node(int p_id) {
 		cpb->connect("color_changed",this,"_rgb_input_changed",varray(p_id));
 		gn->add_child(cpb);
 		Label *l = memnew( Label );
-		l->set_text(TTR("RGB"));
+		l->set_text("RGB");
 		l->set_align(Label::ALIGN_RIGHT);
 		gn->add_child(l);
 		l = memnew( Label );
-		l->set_text(TTR("Alpha"));
+		l->set_text("Alpha");
 		l->set_align(Label::ALIGN_RIGHT);
 		gn->add_child(l);
 
@@ -2289,7 +2289,7 @@ void ShaderGraphView::_create_node(int p_id) {
 
 	} break; // color uniform (assignable in material)
 	case ShaderGraph::NODE_XFORM_INPUT: {
-		gn->set_title(TTR("XFUniform"));
+		gn->set_title("XFUniform");
 		LineEdit *le = memnew( LineEdit );
 		gn->add_child(le);
 		le->set_text(graph->input_node_get_name(type,p_id));
@@ -2303,7 +2303,7 @@ void ShaderGraphView::_create_node(int p_id) {
 	} break; // mat4 uniform (assignable in material)
 	case ShaderGraph::NODE_TEXTURE_INPUT: {
 
-		gn->set_title(TTR("TexUniform"));
+		gn->set_title("TexUniform");
 		LineEdit *le = memnew( LineEdit );
 		gn->add_child(le);
 		le->set_text(graph->input_node_get_name(type,p_id));
@@ -2311,7 +2311,9 @@ void ShaderGraphView::_create_node(int p_id) {
 		TextureFrame *tex = memnew( TextureFrame );
 		tex->set_expand(true);
 		tex->set_custom_minimum_size(Size2(80,80));
+		tex->set_drag_forwarding(this);
 		gn->add_child(tex);
+		tex->set_ignore_mouse(false);
 		tex->set_texture(graph->texture_input_node_get_value(type,p_id));
 		ToolButton *edit = memnew( ToolButton );
 		edit->set_text("edit..");
@@ -2321,18 +2323,18 @@ void ShaderGraphView::_create_node(int p_id) {
 		HBoxContainer *hbc = memnew( HBoxContainer );
 		hbc->add_constant_override("separation",0);
 		if (graph->is_slot_connected(type, p_id, 0)) {
-			hbc->add_child(make_label(TTR("UV"), Variant::VECTOR3));
+			hbc->add_child(make_label("UV", Variant::VECTOR3));
 		} else {
 			Vector3 v = graph->default_get_value(type,p_id,0);
-			hbc->add_child(make_editor(String(TTR("UV: "))+v,gn,p_id,0,Variant::VECTOR3));
+			hbc->add_child(make_editor(String("UV: ")+v,gn,p_id,0,Variant::VECTOR3));
 		}
 		hbc->add_spacer();
-		Label *l=memnew(Label(TTR("RGB")));
+		Label *l=memnew(Label("RGB"));
 		l->set_align(Label::ALIGN_RIGHT);
 		hbc->add_child(l);
 		gn->add_child(hbc);
 		l = memnew( Label );
-		l->set_text(TTR("Alpha"));
+		l->set_text("Alpha");
 		l->set_align(Label::ALIGN_RIGHT);
 		gn->add_child(l);
 
@@ -2342,7 +2344,7 @@ void ShaderGraphView::_create_node(int p_id) {
 	} break; // texture input (assignable in material)
 	case ShaderGraph::NODE_CUBEMAP_INPUT: {
 
-		gn->set_title(TTR("TexUniform"));
+		gn->set_title("TexUniform");
 		LineEdit *le = memnew( LineEdit );
 		gn->add_child(le);
 		le->set_text(graph->input_node_get_name(type,p_id));
@@ -2357,18 +2359,18 @@ void ShaderGraphView::_create_node(int p_id) {
 		HBoxContainer *hbc = memnew( HBoxContainer );
 		hbc->add_constant_override("separation",0);
 		if (graph->is_slot_connected(type, p_id, 0)) {
-			hbc->add_child(make_label(TTR("UV"), Variant::VECTOR3));
+			hbc->add_child(make_label("UV", Variant::VECTOR3));
 		} else {
 			Vector3 v = graph->default_get_value(type,p_id,0);
-			hbc->add_child(make_editor(String(TTR("UV: "))+v,gn,p_id,0,Variant::VECTOR3));
+			hbc->add_child(make_editor(String("UV: ")+v,gn,p_id,0,Variant::VECTOR3));
 		}
 		hbc->add_spacer();
-		Label *l=memnew(Label(TTR("RGB")));
+		Label *l=memnew(Label("RGB"));
 		l->set_align(Label::ALIGN_RIGHT);
 		hbc->add_child(l);
 		gn->add_child(hbc);
 		l = memnew( Label );
-		l->set_text(TTR("Alpha"));
+		l->set_text("Alpha");
 		l->set_align(Label::ALIGN_RIGHT);
 		gn->add_child(l);
 
@@ -2378,22 +2380,22 @@ void ShaderGraphView::_create_node(int p_id) {
 	} break; // cubemap input (assignable in material)
 	case ShaderGraph::NODE_DEFAULT_TEXTURE: {
 
-		gn->set_title(TTR("CanvasItemTex"));
+		gn->set_title("CanvasItemTex");
 		HBoxContainer *hbc = memnew( HBoxContainer );
 		hbc->add_constant_override("separation",0);
 		if (graph->is_slot_connected(type, p_id, 0)) {
-			hbc->add_child(make_label(TTR("UV"), Variant::VECTOR3));
+			hbc->add_child(make_label("UV", Variant::VECTOR3));
 		} else {
 			Vector3 v = graph->default_get_value(type,p_id,0);
-			hbc->add_child(make_editor(String(TTR("UV: "))+v,gn,p_id,0,Variant::VECTOR3));
+			hbc->add_child(make_editor(String("UV: ")+v,gn,p_id,0,Variant::VECTOR3));
 		}
 		hbc->add_spacer();
-		Label *l=memnew(Label(TTR("RGB")));
+		Label *l=memnew(Label("RGB"));
 		l->set_align(Label::ALIGN_RIGHT);
 		hbc->add_child(l);
 		gn->add_child(hbc);
 		l = memnew( Label );
-		l->set_text(TTR("Alpha"));
+		l->set_text("Alpha");
 		l->set_align(Label::ALIGN_RIGHT);
 		gn->add_child(l);
 
@@ -2404,7 +2406,7 @@ void ShaderGraphView::_create_node(int p_id) {
 	} break; // screen texture sampler (takes UV) (only usable in fragment case Shader)
 
 	case ShaderGraph::NODE_OUTPUT: {
-		gn->set_title(TTR("Output"));
+		gn->set_title("Output");
 		gn->set_show_close_button(false);
 
 		List<ShaderGraph::SlotInfo> si;
@@ -2412,22 +2414,22 @@ void ShaderGraphView::_create_node(int p_id) {
 
 		Array colors;
 		colors.push_back("Color");
-		colors.push_back(TTR("LightColor"));
+		colors.push_back("LightColor");
 		colors.push_back("Light");
-		colors.push_back(TTR("Diffuse"));
-		colors.push_back(TTR("Specular"));
-		colors.push_back(TTR("Emmision"));
+		colors.push_back("Diffuse");
+		colors.push_back("Specular");
+		colors.push_back("Emmision");
 		Array reals;
-		reals.push_back(TTR("Alpha"));
-		reals.push_back(TTR("DiffuseAlpha"));
-		reals.push_back(TTR("NormalMapDepth"));
-		reals.push_back(TTR("SpecExp"));
-		reals.push_back(TTR("Glow"));
-		reals.push_back(TTR("ShadeParam"));
-		reals.push_back(TTR("SpecularExp"));
-		reals.push_back(TTR("LightAlpha"));
-		reals.push_back(TTR("PointSize"));
-		reals.push_back(TTR("Discard"));
+		reals.push_back("Alpha");
+		reals.push_back("DiffuseAlpha");
+		reals.push_back("NormalMapDepth");
+		reals.push_back("SpecExp");
+		reals.push_back("Glow");
+		reals.push_back("ShadeParam");
+		reals.push_back("SpecularExp");
+		reals.push_back("LightAlpha");
+		reals.push_back("PointSize");
+		reals.push_back("Discard");
 
 		int idx=0;
 		for (List<ShaderGraph::SlotInfo>::Element *E=si.front();E;E=E->next()) {
@@ -2448,7 +2450,7 @@ void ShaderGraphView::_create_node(int p_id) {
 
 	} break; // output (case Shader type dependent)
 	case ShaderGraph::NODE_COMMENT: {
-		gn->set_title(TTR("Comment"));
+		gn->set_title("Comment");
 		TextEdit *te = memnew(TextEdit);
 		te->set_custom_minimum_size(Size2(100,100));
 		gn->add_child(te);
@@ -2517,6 +2519,105 @@ void ShaderGraphView::_sg_updated() {
 	}
 }
 
+Variant ShaderGraphView::get_drag_data_fw(const Point2 &p_point, Control *p_from)
+{
+	TextureFrame* frame = p_from->cast_to<TextureFrame>();
+	if (!frame)
+		return Variant();
+
+	if (!frame->get_texture().is_valid())
+		return Variant();
+
+	RES res = frame->get_texture();
+	return EditorNode::get_singleton()->drag_resource(res,p_from);
+
+	return Variant();
+}
+
+bool ShaderGraphView::can_drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) const
+{
+	if (p_data.get_type() != Variant::DICTIONARY)
+		return false;
+
+	Dictionary d = p_data;
+
+	if (d.has("type")){
+		if (d["type"] == "resource" && d.has("resource")) {
+			Variant val = d["resource"];
+
+			if (val.get_type()==Variant::OBJECT) {
+				RES res = val;
+				if (res.is_valid() && res->cast_to<Texture>())
+					return true;
+			}
+		}
+		else if (d["type"] == "files" && d.has("files")) {
+			Vector<String> files = d["files"];
+			if (files.size() != 1)
+				return false;
+			return (ResourceLoader::get_resource_type(files[0]) == "ImageTexture");
+		}
+	}
+
+	return false;
+}
+
+void ShaderGraphView::drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from)
+{
+	if (!can_drop_data_fw(p_point, p_data, p_from))
+		return;
+
+	TextureFrame *frame = p_from->cast_to<TextureFrame>();
+	if (!frame)
+		return;
+
+	Dictionary d = p_data;
+	Ref<Texture> tex;
+
+	if (d.has("type")) {
+		if (d["type"] == "resource" && d.has("resource")){
+			Variant val = d["resource"];
+
+			if (val.get_type()==Variant::OBJECT) {
+				RES res = val;
+				if (res.is_valid())
+					tex = Ref<Texture>(res->cast_to<Texture>());
+			}
+		}
+		else if (d["type"] == "files" && d.has("files")) {
+			Vector<String> files = d["files"];
+			RES res = ResourceLoader::load(files[0]);
+			if (res.is_valid())
+				tex = Ref<Texture>(res->cast_to<Texture>());
+		}
+	}
+
+	if (!tex.is_valid()) return;
+
+	GraphNode *gn = frame->get_parent()->cast_to<GraphNode>();
+	if (!gn) return;
+
+	int id = -1;
+	for(Map<int,GraphNode*>::Element *E = node_map.front();E;E=E->next())
+		if (E->get() == gn) {
+			id = E->key();
+			break;
+		}
+	print_line(String::num(double(id)));
+	if (id < 0) return;
+
+	if (graph->node_get_type(type,id)==ShaderGraph::NODE_TEXTURE_INPUT) {
+
+		UndoRedo *ur=EditorNode::get_singleton()->get_undo_redo();
+		ur->create_action(TTR("Change Texture Uniform"));
+		ur->add_do_method(graph.ptr(),"texture_input_node_set_value",type,id,tex);
+		ur->add_undo_method(graph.ptr(),"texture_input_node_set_value",type,id,graph->texture_input_node_get_value(type,id));
+		ur->add_do_method(this,"_update_graph");
+		ur->add_undo_method(this,"_update_graph");
+		ur->commit_action();
+	}
+}
+
 void ShaderGraphView::set_graph(Ref<ShaderGraph> p_graph){
 
 
@@ -2623,6 +2724,10 @@ void ShaderGraphView::_bind_methods() {
 	ObjectTypeDB::bind_method("_color_ramp_changed",&ShaderGraphView::_color_ramp_changed);
 	ObjectTypeDB::bind_method("_curve_changed",&ShaderGraphView::_curve_changed);
 
+	ObjectTypeDB::bind_method(_MD("get_drag_data_fw"), &ShaderGraphView::get_drag_data_fw);
+	ObjectTypeDB::bind_method(_MD("can_drop_data_fw"), &ShaderGraphView::can_drop_data_fw);
+	ObjectTypeDB::bind_method(_MD("drop_data_fw"), &ShaderGraphView::drop_data_fw);
+
 	ObjectTypeDB::bind_method("_sg_updated",&ShaderGraphView::_sg_updated);
 }
 

+ 5 - 1
tools/editor/plugins/shader_graph_editor_plugin.h

@@ -116,7 +116,7 @@ public:
 	GraphCurveMapEdit();
 };
 
-class ShaderGraphView : public Node {
+class ShaderGraphView : public Control {
 
 	OBJ_TYPE(ShaderGraphView,Node);
 
@@ -181,6 +181,10 @@ class ShaderGraphView : public Node {
 	void _curve_changed(int p_id,Node* p_curve);
 	void _sg_updated();
 	Map<int,GraphNode*> node_map;
+
+	Variant get_drag_data_fw(const Point2& p_point,Control* p_from);
+	bool can_drop_data_fw(const Point2& p_point,const Variant& p_data,Control* p_from) const;
+	void drop_data_fw(const Point2& p_point,const Variant& p_data,Control* p_from);
 protected:
 	void _notification(int p_what);
 	static void _bind_methods();

+ 12 - 12
tools/editor/plugins/spatial_editor_plugin.cpp

@@ -561,7 +561,7 @@ void SpatialEditorViewport::_select_region() {
 
 void SpatialEditorViewport::_update_name() {
 
-	String ortho = orthogonal?TTR("Orthogonal"):"Perspective";
+	String ortho = orthogonal?TTR("Orthogonal"):TTR("Perspective");
 
 	if (name!="")
 		view_menu->set_text("[ "+name+" "+ortho+" ]");
@@ -1229,7 +1229,7 @@ void SpatialEditorViewport::_sinput(const InputEvent &p_event) {
 		case InputEvent::MOUSE_MOTION: {
 			const InputEventMouseMotion &m=p_event.mouse_motion;
 			_edit.mouse_pos=Point2(p_event.mouse_motion.x,p_event.mouse_motion.y);
-			
+
 			if (spatial_editor->get_selected()) {
 
 
@@ -1265,7 +1265,7 @@ void SpatialEditorViewport::_sinput(const InputEvent &p_event) {
 
 			NavigationScheme nav_scheme = _get_navigation_schema("3d_editor/navigation_scheme");
 			NavigationMode nav_mode = NAVIGATION_NONE;
-			
+
 			if (_edit.gizmo.is_valid()) {
 
 				Plane plane=Plane(_edit.gizmo_initial_pos,_get_camera_normal());
@@ -1353,7 +1353,7 @@ void SpatialEditorViewport::_sinput(const InputEvent &p_event) {
 								scale = Math::stepify(scale,spatial_editor->get_scale_snap());
 							}
 
-							set_message(TTR("Scaling to ")+String::num(scale,1)+"%.");
+							set_message(vformat(TTR("Scaling to %s%%."),String::num(scale,1)));
 							scale/=100.0;
 
 							Transform r;
@@ -1431,7 +1431,7 @@ void SpatialEditorViewport::_sinput(const InputEvent &p_event) {
 								motion.snap(snap);
 							}
 
-							//set_message(TTR("Translating: ")+motion);
+							//set_message("Translating: "+motion);
 
 							List<Node*> &selection = editor_selection->get_selected_node_list();
 
@@ -1493,13 +1493,13 @@ void SpatialEditorViewport::_sinput(const InputEvent &p_event) {
 								if (snap) {
 									angle=Math::rad2deg(angle)+snap*0.5; //else it wont reach +180
 									angle-=Math::fmod(angle,snap);
-									set_message(TTR("Rotating ")+rtos(angle)+" degrees.");
+									set_message(vformat(TTR("Rotating %s degrees."),rtos(angle)));
 									angle=Math::deg2rad(angle);
 								} else
-									set_message(TTR("Rotating ")+rtos(Math::rad2deg(angle))+" degrees.");
+									set_message(vformat(TTR("Rotating %s degrees."),rtos(Math::rad2deg(angle))));
 
 							} else {
-								set_message(TTR("Rotating ")+rtos(Math::rad2deg(angle))+" degrees.");
+								set_message(vformat(TTR("Rotating %s degrees."),rtos(Math::rad2deg(angle))));
 							}
 
 
@@ -1591,7 +1591,7 @@ void SpatialEditorViewport::_sinput(const InputEvent &p_event) {
 					mod=KEY_CONTROL;
 				if (m.mod.meta)
 					mod=KEY_META;
-				
+
 				if(mod){
 					if (mod == _get_key_modifier("3d_editor/pan_modifier"))
 						nav_mode = NAVIGATION_PAN;
@@ -1815,7 +1815,7 @@ void SpatialEditorViewport::_notification(int p_what) {
 
 		if (visible)
 			_update_camera();
-		
+
 		call_deferred("update_transform_gizmo_view");
 	}
 
@@ -1967,7 +1967,7 @@ void SpatialEditorViewport::_draw() {
 	if (surface->has_focus()) {
 		Size2 size = surface->get_size();
 		Rect2 r =Rect2(Point2(),size);
-		get_stylebox(TTR("EditorFocus"),"EditorStyles")->draw(surface->get_canvas_item(),r);
+		get_stylebox("EditorFocus","EditorStyles")->draw(surface->get_canvas_item(),r);
 	}
 
 
@@ -2482,7 +2482,7 @@ SpatialEditorViewport::SpatialEditorViewport(SpatialEditor *p_spatial_editor, Ed
 	view_menu->get_popup()->add_check_item(TTR("Orthogonal (Num5)"),VIEW_ORTHOGONAL);
 	view_menu->get_popup()->set_item_checked(view_menu->get_popup()->get_item_index(VIEW_PERSPECTIVE),true);
 	view_menu->get_popup()->add_separator();
-	view_menu->get_popup()->add_check_item("Environment",VIEW_ENVIRONMENT);
+	view_menu->get_popup()->add_check_item(TTR("Environment"),VIEW_ENVIRONMENT);
 	view_menu->get_popup()->set_item_checked( view_menu->get_popup()->get_item_index(VIEW_ENVIRONMENT),true);
 	view_menu->get_popup()->add_separator();
 	view_menu->get_popup()->add_check_item(TTR("Audio Listener"),VIEW_AUDIO_LISTENER);

+ 8 - 8
tools/editor/plugins/sprite_frames_editor_plugin.cpp

@@ -78,7 +78,7 @@ void SpriteFramesEditor::_file_load_request(const DVector<String>& p_path,int p_
 		if (resource.is_null()) {
 			dialog->set_text(TTR("ERROR: Couldn't load frame resource!"));
 			dialog->set_title(TTR("Error!"));
-			//dialog->get_cancel()->set_text(TTR("Close"));
+			//dialog->get_cancel()->set_text("Close");
 			dialog->get_ok()->set_text(TTR("Close"));
 			dialog->popup_centered_minsize();
 			return; ///beh should show an error i guess
@@ -152,7 +152,7 @@ void SpriteFramesEditor::_item_edited() {
 		}
 
 		RES samp = frames->get_resource(old_name);
-		undo_redo->create_action(TTR("Rename Resource"));
+		undo_redo->create_action("Rename Resource");
 		undo_redo->add_do_method(frames,"remove_resource",old_name);
 		undo_redo->add_do_method(frames,"add_resource",new_name,samp);
 		undo_redo->add_undo_method(frames,"remove_resource",new_name);
@@ -198,7 +198,7 @@ void SpriteFramesEditor::_paste_pressed() {
 	if (!r.is_valid()) {
 		dialog->set_text(TTR("Resource clipboard is empty or not a texture!"));
 		dialog->set_title(TTR("Error!"));
-		//dialog->get_cancel()->set_text(TTR("Close"));
+		//dialog->get_cancel()->set_text("Close");
 		dialog->get_ok()->set_text(TTR("Close"));
 		dialog->popup_centered_minsize();
 		return; ///beh should show an error i guess
@@ -333,11 +333,11 @@ void SpriteFramesEditor::_delete_pressed() {
 
 	_delete_confirm_pressed(); //it has undo.. why bother with a dialog..
 	/*
-	dialog->set_title(TTR("Confirm..."));
-	dialog->set_text(TTR("Remove Resource '")+tree->get_selected()->get_text(0)+"' ?");
-	//dialog->get_cancel()->set_text(TTR("Cancel"));
+	dialog->set_title("Confirm...");
+	dialog->set_text("Remove Resource '"+tree->get_selected()->get_text(0)+"' ?");
+	//dialog->get_cancel()->set_text("Cancel");
 	//dialog->get_ok()->show();
-	dialog->get_ok()->set_text(TTR("Remove"));
+	dialog->get_ok()->set_text("Remove");
 	dialog->popup_centered(Size2(300,60));*/
 
 }
@@ -530,7 +530,7 @@ void SpriteFramesEditor::_update_library(bool p_skip_selector) {
 
 		if (frames->get_frame(edited_anim,i).is_null()) {
 
-			name=itos(i)+TTR(": (empty)");
+			name=itos(i)+": "+TTR("(empty)");
 
 		} else {
 			name=itos(i)+": "+frames->get_frame(edited_anim,i)->get_name();

+ 1 - 1
tools/editor/plugins/sprite_region_editor_plugin.h

@@ -119,7 +119,7 @@ class SpriteRegionEditorPlugin : public EditorPlugin
 	EditorNode *editor;
 public:
 
-	virtual String get_name() const { return TTR("SpriteRegion"); }
+	virtual String get_name() const { return "SpriteRegion"; }
 	bool has_main_screen() const { return false; }
 	virtual void edit(Object *p_node);
 	virtual bool handles(Object *p_node) const;

+ 1 - 1
tools/editor/plugins/stream_editor_plugin.h

@@ -69,7 +69,7 @@ class StreamEditorPlugin : public EditorPlugin {
 
 public:
 
-	virtual String get_name() const { return TTR("Stream"); }
+	virtual String get_name() const { return "Stream"; }
 	bool has_main_screen() const { return false; }
 	virtual void edit(Object *p_node);
 	virtual bool handles(Object *p_node) const;

+ 8 - 8
tools/editor/plugins/theme_editor_plugin.cpp

@@ -199,7 +199,7 @@ void ThemeEditor::_save_template_cbk(String fname) {
 	if (!file) {
 
 
-		ERR_EXPLAIN(TTR("Can't save theme to file: ")+filename);
+		ERR_EXPLAIN(TTR("Can't save theme to file:")+" "+filename);
 		return;
 	}
 	file->store_line("; ******************* ");
@@ -398,7 +398,7 @@ void ThemeEditor::_dialog_cbk() {
 			}
 
 
-		} break; 
+		} break;
 		case POPUP_CLASS_REMOVE: {
 			StringName fromtype = type_edit->get_text();
 			List<StringName> names;
@@ -599,7 +599,7 @@ ThemeEditor::ThemeEditor() {
 	theme_menu->get_popup()->add_item(TTR("Add Item"),POPUP_ADD);
 	theme_menu->get_popup()->add_item(TTR("Add Class Items"),POPUP_CLASS_ADD);
 	theme_menu->get_popup()->add_item(TTR("Remove Item"),POPUP_REMOVE);
-	theme_menu->get_popup()->add_item("Remove Class Items",POPUP_CLASS_REMOVE);
+	theme_menu->get_popup()->add_item(TTR("Remove Class Items"),POPUP_CLASS_REMOVE);
 	theme_menu->get_popup()->add_separator();
 	theme_menu->get_popup()->add_item(TTR("Create Template"),POPUP_CREATE_TEMPLATE);
 	hb_menu->add_child(theme_menu);
@@ -757,7 +757,7 @@ ThemeEditor::ThemeEditor() {
 	line_edit = memnew( LineEdit );
 	line_edit->set_pos( Point2( 25, 275 ) );
 	line_edit->set_size( Point2( 150, 5 ) );
-	line_edit->set_text(TTR("Line Edit"));
+	line_edit->set_text("Line Edit");
 	panel->add_child(line_edit);
 
 	test_v_scroll = memnew( VScrollBar );
@@ -786,12 +786,12 @@ ThemeEditor::ThemeEditor() {
 	item = test_tree->create_item( test_tree->get_root() );
 	item->set_cell_mode(0, TreeItem::CELL_MODE_RANGE);
 	item->set_editable(0,true);
-	item->set_text(0,TTR("Have,Many,Several,Options!"));
+	item->set_text(0,"Have,Many,Several,Options!"));
 	item->set_range(0,2);
 
 	Button *fd_button= memnew( Button );
 	fd_button->set_pos(Point2(300,275));
-	fd_button->set_text(TTR("Open File Dialog"));
+	fd_button->set_text("Open File Dialog");
 	panel->add_child(fd_button);
 
 	test_file_dialog = memnew( EditorFileDialog );
@@ -852,8 +852,8 @@ ThemeEditor::ThemeEditor() {
 	type_select = memnew( OptionButton );
 	type_select->add_item(TTR("Icon"));
 	type_select->add_item(TTR("Style"));
-	type_select->add_item("Font");
-	type_select->add_item("Color");
+	type_select->add_item(TTR("Font"));
+	type_select->add_item(TTR("Color"));
 	type_select->add_item(TTR("Constant"));
 	type_select->set_pos( Point2( 400,25 ) );
 	type_select->set_size( Point2( 80,5 ) );

+ 4 - 4
tools/editor/plugins/tile_map_editor_plugin.cpp

@@ -1318,13 +1318,13 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) {
 
 	PopupMenu *p = options->get_popup();
 
-	p->add_item("Bucket", OPTION_BUCKET);
+	p->add_item(TTR("Bucket"), OPTION_BUCKET);
 	p->add_separator();
-	p->add_item("Pick Tile", OPTION_PICK_TILE, KEY_CONTROL);
+	p->add_item(TTR("Pick Tile"), OPTION_PICK_TILE, KEY_CONTROL);
 	p->add_separator();
-	p->add_item("Select", OPTION_SELECT, KEY_MASK_CMD+KEY_B);
+	p->add_item(TTR("Select"), OPTION_SELECT, KEY_MASK_CMD+KEY_B);
 	p->add_item(TTR("Duplicate Selection"), OPTION_DUPLICATE, KEY_MASK_CMD+KEY_D);
-	p->add_item("Erase Selection", OPTION_ERASE_SELECTION, KEY_DELETE);
+	p->add_item(TTR("Erase Selection"), OPTION_ERASE_SELECTION, KEY_DELETE);
 
 	p->connect("item_pressed", this, "_menu_option");
 

+ 1 - 1
tools/editor/plugins/tile_map_editor_plugin.h

@@ -130,7 +130,7 @@ class TileMapEditor : public VBoxContainer {
 
 	void _fill_points(const DVector<Vector2> p_points, const Dictionary& p_op);
 	void _erase_points(const DVector<Vector2> p_points);
-	
+
 	void _select(const Point2i& p_from, const Point2i& p_to);
 
 	void _draw_cell(int p_cell, const Point2i& p_point, bool p_flip_h, bool p_flip_v, bool p_transpose, const Matrix32& p_xform);

+ 1 - 1
tools/editor/plugins/tile_set_editor_plugin.cpp

@@ -175,7 +175,7 @@ void TileSetEditor::_name_dialog_confirm(const String& name) {
 			if (tileset->has_tile(id)) {
 				tileset->remove_tile(id);
 			} else {
-				err_dialog->set_text(TTR("Could not find tile: ") + name);
+				err_dialog->set_text(TTR("Could not find tile:")+" " + name);
 				err_dialog->popup_centered(Size2(300, 60));
 			}
 		} break;

+ 23 - 23
tools/editor/project_export.cpp

@@ -470,7 +470,7 @@ void ProjectExportDialog::_export_action(const String& p_file) {
 	/* Checked if the export location is outside the project directory,
 	 * now will check if a file name has been entered */
 	if (p_file.ends_with("/")) {
-		
+
 		error->set_text("Please enter a file name!");
 		error->popup_centered_minsize();
 		return;
@@ -505,7 +505,7 @@ void ProjectExportDialog::_export_action_pck(const String& p_file) {
 	if (p_file.ends_with(".pck")) {
 		FileAccess *f = FileAccess::open(p_file,FileAccess::WRITE);
 		if (!f) {
-			error->set_text(TTR("Error exporting project PCK! Can't write"));
+			error->set_text(TTR("Error writing the project PCK!"));
 			error->popup_centered_minsize();
 		}
 		ERR_FAIL_COND(!f);
@@ -586,7 +586,7 @@ void ProjectExportDialog::custom_action(const String&) {
 	Ref<EditorExportPlatform> exporter = EditorImportExport::get_singleton()->get_export_platform(platform);
 
 	if (exporter.is_null()) {
-		error->set_text(TTR("No exporter for platform '")+platform+"' yet.");
+		error->set_text(vformat(TTR("No exporter for platform '%s' yet."),platform));
 		error->popup_centered_minsize();
 		return;
 	}
@@ -858,17 +858,17 @@ void ProjectExportDialog::_group_add() {
 
 	if (name=="") {
 		group_new_name_error->show();
-		group_new_name_error->set_text(TTR("Group Name Can't be Empty!"));
+		group_new_name_error->set_text(TTR("Group name can't be empty!"));
 		return;
 	}
 	if (name.find("/")!=-1 || name.find(":")!=-1 || name.find(",")!=-1 || name.find("-")!=-1) {
-		group_new_name_error->set_text(TTR("Invalid Character in Group Name!"));
+		group_new_name_error->set_text(TTR("Invalid character in group name!"));
 		group_new_name_error->show();
 		return;
 	}
 
 	if (EditorImportExport::get_singleton()->image_export_has_group(name)) {
-		group_new_name_error->set_text(TTR("Group Name Already Exists!"));
+		group_new_name_error->set_text(TTR("Group name already exists!"));
 		group_new_name_error->show();
 		return;
 	}
@@ -1061,13 +1061,13 @@ void ProjectExportDialog::_group_atlas_preview() {
 	Error err = plugin->import2(dst_file,imd,EditorExportPlatform::IMAGE_COMPRESSION_NONE,true);
 	if (err) {
 
-		EditorNode::add_io_error(TTR("Error saving atlas! ")+dst_file.get_file());
+		EditorNode::add_io_error(TTR("Error saving atlas:")+" "+dst_file.get_file());
 		return;
 	}
 
 	Ref<Texture> tex = ResourceLoader::load(dst_file);
 	atlas_preview_frame->set_texture(tex); //clear previous
-	atlas_preview_dialog->set_title(TTR("Atlas Preview (")+itos(tex->get_width())+"x"+itos(tex->get_height())+")");
+	atlas_preview_dialog->set_title(TTR("Atlas Preview")+" ("+itos(tex->get_width())+"x"+itos(tex->get_height())+")");
 	atlas_preview_dialog->popup_centered_ratio(0.9);
 
 }
@@ -1211,14 +1211,14 @@ ProjectExportDialog::ProjectExportDialog(EditorNode *p_editor) {
 	tree->set_column_min_width(1,90);
 
 	filters = memnew( LineEdit );
-	vb->add_margin_child(TTR("Filters to export non-resource files (Comma Separated, eg: *.json, *.txt):"),filters);
+	vb->add_margin_child(TTR("Filters to export non-resource files (comma-separated, e.g.: *.json, *.txt):"),filters);
 	filters->connect("text_changed",this,"_filters_edited");
 	filters_exclude = memnew( LineEdit );
-	vb->add_margin_child(TTR("Filters to exclude from export (Comma Separated, eg: *.json, *.txt):"),filters_exclude);
+	vb->add_margin_child(TTR("Filters to exclude from export (comma-separated, e.g.: *.json, *.txt):"),filters_exclude);
 	filters_exclude->connect("text_changed",this,"_filters_exclude_edited");
 
 	convert_text_scenes = memnew( CheckButton );
-	convert_text_scenes->set_text(TTR("Convert text scenes to binary on export"));
+	convert_text_scenes->set_text(TTR("Convert text scenes to binary on export."));
 	vb->add_child(convert_text_scenes);
 	convert_text_scenes->connect("toggled",this,"_export_mode_changed");
 
@@ -1260,7 +1260,7 @@ ProjectExportDialog::ProjectExportDialog(EditorNode *p_editor) {
 		fmt->set_editable(0,true);
 		formats.push_back(fmt);
 	}
-	image_vb->add_margin_child(TTR("Compress Formats: "),image_formats,true);
+	image_vb->add_margin_child(TTR("Compress Formats:")+" ",image_formats,true);
 
 	/// groups
 	HBoxContainer *group_hb = memnew( HBoxContainer );
@@ -1421,7 +1421,7 @@ ProjectExportDialog::ProjectExportDialog(EditorNode *p_editor) {
 	sample_max_hz = memnew( SpinBox );
 	sample_max_hz->set_max(192000);
 	sample_max_hz->set_min(8000);
-	sample_vbox->add_margin_child(TTR("Sampling Rate Limit: (hz)"),sample_max_hz);
+	sample_vbox->add_margin_child(TTR("Sampling Rate Limit (Hz):"),sample_max_hz);
 	sample_trim = memnew( CheckButton );
 	sample_trim->set_text(TTR("Trim"));
 	sample_vbox->add_margin_child(TTR("Trailing Silence:"),sample_trim);
@@ -1529,7 +1529,7 @@ Error ProjectExport::export_project(const String& p_preset) {
 	String preset_path=Globals::get_singleton()->get("export_presets_path/"+selected);
 	if (preset_path=="") {
 
-		error->set_text(TTR("Export path empty, see export options"));
+		error->set_text("Export path empty, see export options");
 		error->popup_centered_minsize(Size2(300,100));
 		ERR_FAIL_V(ERR_INVALID_DATA);
 	}
@@ -1551,9 +1551,9 @@ Error ProjectExport::export_project(const String& p_preset) {
 	}
 	if (pc%3 != 0 ) {
 		memdelete(d);
-		error->set_text(TTR("Corrupted export data.."));
+		error->set_text("Corrupted export data..");
 		error->popup_centered_minsize(Size2(300,100));
-		ERR_EXPLAIN(TTR("Corrupted export data..."));
+		ERR_EXPLAIN("Corrupted export data...");
 		ERR_FAIL_V(ERR_INVALID_DATA);
 	}
 
@@ -1706,7 +1706,7 @@ Error ProjectExport::export_project(const String& p_preset) {
 				if (err!=OK) {
 					memdelete(da);
 					memdelete(d);
-					ERR_EXPLAIN(TTR("Cannot make dir: ")+cwd+"/"+p);
+					ERR_EXPLAIN("Cannot make dir: "+cwd+"/"+p);
 					ERR_FAIL_V(ERR_CANT_CREATE);
 				}
 
@@ -1714,7 +1714,7 @@ Error ProjectExport::export_project(const String& p_preset) {
 
 					memdelete(da);
 					memdelete(d);
-					ERR_EXPLAIN(TTR("Cannot change to dir: ")+cwd+"/"+p);
+					ERR_EXPLAIN("Cannot change to dir: "+cwd+"/"+p);
 					ERR_FAIL_V(ERR_CANT_CREATE);
 				}
 
@@ -1742,7 +1742,7 @@ Error ProjectExport::export_project(const String& p_preset) {
 
 			if (!Globals::get_singleton()->has("optimizer_presets/"+preset)) {
 				memdelete(d);
-				ERR_EXPLAIN(TTR("Unknown optimizer preset: ")+preset);
+				ERR_EXPLAIN("Unknown optimizer preset: "+preset);
 				ERR_FAIL_V(ERR_INVALID_DATA);
 			}
 
@@ -1763,7 +1763,7 @@ Error ProjectExport::export_project(const String& p_preset) {
 
 			if (saver.is_null()) {
 				memdelete(d);
-				ERR_EXPLAIN(TTR("Preset '")+preset+"' references nonexistent saver: "+type);
+				ERR_EXPLAIN("Preset '"+preset+"' references nonexistent saver: "+type);
 				ERR_FAIL_COND_V(saver.is_null(),ERR_INVALID_DATA);
 			}
 
@@ -1807,7 +1807,7 @@ Error ProjectExport::export_project(const String& p_preset) {
 				if (res.is_null()) {
 
 					memdelete(d);
-					ERR_EXPLAIN(TTR("Errr loading resource to optimize: ")+path);
+					ERR_EXPLAIN("Error loading resource to optimize: "+path);
 					ERR_FAIL_V(ERR_INVALID_DATA);
 				}
 
@@ -1830,7 +1830,7 @@ Error ProjectExport::export_project(const String& p_preset) {
 				Error err = ResourceSaver::save(write_file,res,flags,saver);
 				if (err) {
 					memdelete(d);
-					ERR_EXPLAIN(TTR("Errr saving optimized resource: ")+write_file);
+					ERR_EXPLAIN("Error saving optimized resource: "+write_file);
 					ERR_FAIL_COND_V(err,ERR_CANT_OPEN);
 				}
 				source_file=write_file;
@@ -1853,7 +1853,7 @@ Error ProjectExport::export_project(const String& p_preset) {
 		if (err) {
 
 
-			ERR_EXPLAIN(TTR("Error copying from: ")+source_file+" to "+dst_file+".");
+			ERR_EXPLAIN("Error copying from: "+source_file+" to "+dst_file+".");
 			ERR_FAIL_COND_V(err,err);
 		}
 

+ 11 - 11
tools/editor/project_manager.cpp

@@ -66,7 +66,7 @@ class NewProjectDialog : public ConfirmationDialog {
 		get_ok()->set_disabled(true);
 		DirAccess *d = DirAccess::create(DirAccess::ACCESS_FILESYSTEM);
 		if (project_path->get_text() != "" && d->change_dir(project_path->get_text())!=OK) {
-			error->set_text(TTR("Invalid Path for Project, Path Must Exist!"));
+			error->set_text(TTR("Invalid project path, the path must exist!"));
 			memdelete(d);
 			return false;
 		}
@@ -75,7 +75,7 @@ class NewProjectDialog : public ConfirmationDialog {
 
 			if (d->file_exists("engine.cfg")) {
 
-				error->set_text(TTR("Invalid Project Path (engine.cfg must not exist)."));
+				error->set_text(TTR("Invalid project path, engine.cfg must not exist."));
 				memdelete(d);
 				return false;
 			}
@@ -84,7 +84,7 @@ class NewProjectDialog : public ConfirmationDialog {
 
 			if (project_path->get_text() != "" && !d->file_exists("engine.cfg")) {
 
-				error->set_text(TTR("Invalid Project Path (engine.cfg must exist)."));
+				error->set_text(TTR("Invalid project path, engine.cfg must exist."));
 				memdelete(d);
 				return false;
 			}
@@ -170,7 +170,7 @@ class NewProjectDialog : public ConfirmationDialog {
 			DirAccess *d = DirAccess::create(DirAccess::ACCESS_FILESYSTEM);
 
 			if (d->change_dir(project_path->get_text())!=OK) {
-				error->set_text(TTR("Invalid Path for Project (changed anything?)"));
+				error->set_text(TTR("Invalid project path (changed anything?)."));
 				memdelete(d);
 				return;
 			}
@@ -180,7 +180,7 @@ class NewProjectDialog : public ConfirmationDialog {
 
 			FileAccess *f = FileAccess::open(dir.plus_file("/engine.cfg"),FileAccess::WRITE);
 			if (!f) {
-				error->set_text(TTR("Couldn't create engine.cfg in project path"));
+				error->set_text(TTR("Couldn't create engine.cfg in project path."));
 			} else {
 
 				f->store_line("; Engine configuration file.");
@@ -247,7 +247,7 @@ public:
 		if (import_mode) {
 			set_title(TTR("Import Existing Project"));
 			get_ok()->set_text(TTR("Import"));
-			pp->set_text(TTR("Project Path: (Must exist)"));
+			pp->set_text(TTR("Project Path (Must Exist):"));
 			pn->set_text(TTR("Project Name:"));
 			pn->hide();
 			project_name->hide();
@@ -788,7 +788,7 @@ void ProjectManager::_erase_project()  {
 		return;
 
 
-	erase_ask->set_text(TTR("Remove project from list?? (Folder contents will not be modified)"));
+	erase_ask->set_text(TTR("Remove project from the list? (Folder contents will not be modified)"));
 	erase_ask->popup_centered_minsize();
 
 }
@@ -822,8 +822,8 @@ void ProjectManager::_bind_methods() {
 
 ProjectManager::ProjectManager() {
 
-	int margin = get_constant("margin",TTR("Dialogs"));
-	int button_margin = get_constant("button_margin",TTR("Dialogs"));
+	int margin = get_constant("margin","Dialogs");
+	int button_margin = get_constant("button_margin","Dialogs");
 
 	// load settings
 	if (!EditorSettings::get_singleton())
@@ -999,8 +999,8 @@ ProjectManager::ProjectManager() {
 		_scan_begin( EditorSettings::get_singleton()->get("global/autoscan_project_path") );
 	}
 
-	//get_ok()->set_text(TTR("Open"));
-	//get_ok()->set_text(TTR("Exit"));
+	//get_ok()->set_text("Open");
+	//get_ok()->set_text("Exit");
 
 	last_clicked = "";
 }

+ 18 - 18
tools/editor/project_settings.cpp

@@ -139,7 +139,7 @@ void ProjectSettings::_action_edited() {
 		ti->set_text(0,old_name);
 		add_at="input/"+old_name;
 
-		message->set_text(TTR("Invalid Action (Anything goes but / or :)."));
+		message->set_text(TTR("Invalid action (anything goes but '/' or ':')."));
 		message->popup_centered(Size2(300,100));
 		return;
 	}
@@ -151,7 +151,7 @@ void ProjectSettings::_action_edited() {
 		ti->set_text(0,old_name);
 		add_at="input/"+old_name;
 
-		message->set_text(TTR("Action '")+new_name+"' already exists!.");
+		message->set_text(vformat(TTR("Action '%s' already exists!"),new_name));
 		message->popup_centered(Size2(300,100));
 		return;
 	}
@@ -357,7 +357,7 @@ void ProjectSettings::_add_item(int p_item){
 			for(int i=0;i<JOY_AXIS_MAX*2;i++) {
 
 				String desc = _axis_names[i];
-				device_index->add_item(TTR("Axis ")+itos(i/2)+" "+(i&1?"+":"-")+desc);
+				device_index->add_item(TTR("Axis")+" "+itos(i/2)+" "+(i&1?"+":"-")+desc);
 			}
 			device_input->popup_centered(Size2(350,95));
 
@@ -517,7 +517,7 @@ void ProjectSettings::_update_actions() {
 				} break;
 				case InputEvent::JOYSTICK_BUTTON: {
 
-					String str = TTR("Device ")+itos(ie.device)+", Button "+itos(ie.joy_button.button_index);
+					String str = TTR("Device")+" "+itos(ie.device)+", "+TTR("Button")+" "+itos(ie.joy_button.button_index);
 					if (ie.joy_button.button_index>=0 && ie.joy_button.button_index<JOY_BUTTON_MAX)
 						str+=String()+" ("+_button_names[ie.joy_button.button_index]+").";
 					else
@@ -528,14 +528,14 @@ void ProjectSettings::_update_actions() {
 				} break;
 				case InputEvent::MOUSE_BUTTON: {
 
-					String str = TTR("Device ")+itos(ie.device)+", ";
+					String str = TTR("Device")+" "+itos(ie.device)+", ";
 					switch (ie.mouse_button.button_index) {
 						case BUTTON_LEFT: str+=TTR("Left Button."); break;
 						case BUTTON_RIGHT: str+=TTR("Right Button."); break;
 						case BUTTON_MIDDLE: str+=TTR("Middle Button."); break;
 						case BUTTON_WHEEL_UP: str+=TTR("Wheel Up."); break;
 						case BUTTON_WHEEL_DOWN: str+=TTR("Wheel Down."); break;
-						default: str+=TTR("Button ")+itos(ie.mouse_button.button_index)+".";
+						default: str+=TTR("Button")+" "+itos(ie.mouse_button.button_index)+".";
 					}
 
 					action->set_text(0,str);
@@ -546,7 +546,7 @@ void ProjectSettings::_update_actions() {
 					int ax = ie.joy_motion.axis;
 					int n = 2*ax + (ie.joy_motion.axis_value<0 ? 0:1);
 					String desc = _axis_names[n];
-					String str = TTR("Device ")+itos(ie.device)+", Axis "+itos(ax)+" "+(ie.joy_motion.axis_value<0?"-":"+")+desc +".";
+					String str = TTR("Device")+" "+itos(ie.device)+", "+TTR("Axis")+" "+itos(ax)+" "+(ie.joy_motion.axis_value<0?"-":"+")+desc +".";
 					action->set_text(0,str);
 					action->set_icon(0,get_icon("JoyAxis","EditorIcons"));
 				} break;
@@ -650,13 +650,13 @@ void ProjectSettings::_action_add() {
 
 	String action = action_name->get_text();
 	if (action.find("/")!=-1 || action.find(":")!=-1 || action=="") {
-		message->set_text(TTR("Invalid Action (Anything goes but / or :)."));
+		message->set_text(TTR("Invalid action (anything goes but '/' or ':')."));
 		message->popup_centered(Size2(300,100));
 		return;
 	}
 
 	if (Globals::get_singleton()->has("input/"+action)) {
-		message->set_text(TTR("Action '")+action+"' already exists!.");
+		message->set_text(vformat(TTR("Action '%s' already exists!"),action));
 		message->popup_centered(Size2(300,100));
 		return;
 	}
@@ -710,7 +710,7 @@ void ProjectSettings::_item_checked(const String& p_item, bool p_check) {
 void ProjectSettings::_save() {
 
 	Error err = Globals::get_singleton()->save();
-	message->set_text(err!=OK?TTR("Error saving settings."):"Settings Saved OK.");
+	message->set_text(err!=OK?TTR("Error saving settings."):TTR("Settings saved OK."));
 	message->popup_centered(Size2(300,100));
 }
 
@@ -851,7 +851,7 @@ void ProjectSettings::_autoload_edited() {
 	if (checked)
 		path="*"+path;
 
-	undo_redo->create_action(TTR("Toggle Autoload GlobalVar"));
+	undo_redo->create_action(TTR("Toggle AutoLoad Globals"));
 	undo_redo->add_do_property(Globals::get_singleton(),base,path);
 	undo_redo->add_undo_property(Globals::get_singleton(),base,Globals::get_singleton()->get(base));
 	undo_redo->add_do_method(Globals::get_singleton(),"set_order",base,order); // keep order, as config order matters for these
@@ -869,7 +869,7 @@ void ProjectSettings::_autoload_add() {
 
 	String name = autoload_add_name->get_text();
 	if (!name.is_valid_identifier()) {
-		message->set_text("Invalid Name.\nValid characters: a-z,A-Z,0-9 or _");
+		message->set_text(TTR("Invalid name.")+"\n"+TTR("Valid characters:")+" a-z, A-Z, 0-9 or _");
 		message->popup_centered(Size2(300,100));
 		return;
 
@@ -877,7 +877,7 @@ void ProjectSettings::_autoload_add() {
 
 	if (ObjectTypeDB::type_exists(name)) {
 
-		message->set_text(TTR("Invalid Name.Must not collide with an existing engine class name."));
+		message->set_text(TTR("Invalid name. Must not collide with an existing engine class name."));
 		message->popup_centered(Size2(300,100));
 		return;
 
@@ -886,7 +886,7 @@ void ProjectSettings::_autoload_add() {
 	for(int i=0;i<Variant::VARIANT_MAX;i++) {
 		if (Variant::get_type_name(Variant::Type(i))==name) {
 
-			message->set_text(TTR("Invalid Name.Must not collide with an existing buit-in type name."));
+			message->set_text(TTR("Invalid name. Must not collide with an existing buit-in type name."));
 			message->popup_centered(Size2(300,100));
 			return;
 
@@ -897,7 +897,7 @@ void ProjectSettings::_autoload_add() {
 
 		if (GlobalConstants::get_global_constant_name(i)==name) {
 
-			message->set_text(TTR("Invalid Name.Must not collide with an existing global constant name."));
+			message->set_text(TTR("Invalid name. Must not collide with an existing global constant name."));
 			message->popup_centered(Size2(300,100));
 			return;
 		}
@@ -1556,7 +1556,7 @@ ProjectSettings::ProjectSettings(EditorData *p_data) {
 	save->set_anchor(MARGIN_BOTTOM,ANCHOR_END);
 	save->set_begin( Point2(80,28) );
 	save->set_end( Point2(10,20) );
-	save->set_text(TTR("Save"));
+	save->set_text("Save");
 	save->connect("pressed",this,"_save");
 */
 
@@ -1684,7 +1684,7 @@ ProjectSettings::ProjectSettings(EditorData *p_data) {
 	save->set_anchor(MARGIN_BOTTOM,ANCHOR_END);
 	save->set_begin( Point2(80,28) );
 	save->set_end( Point2(10,20) );
-	save->set_text(TTR("Save"));
+	save->set_text("Save");
 	save->connect("pressed",this,"_save");
 */
 	setting=false;
@@ -1861,7 +1861,7 @@ ProjectSettings::ProjectSettings(EditorData *p_data) {
 
 	/*
 	Control * es = memnew( Control );
-	es->set_name(TTR("Export"));
+	es->set_name("Export");
 	tab_container->add_child(es);
 	export_settings = memnew( ProjectExportSettings );
 	es->add_child(export_settings);

+ 13 - 13
tools/editor/property_editor.cpp

@@ -419,8 +419,8 @@ bool CustomPropertyEditor::edit(Object* p_owner,const String& p_name,Variant::Ty
 
 				//action_buttons[0];
 
-				int button_margin = get_constant("button_margin",TTR("Dialogs"));
-				int margin = get_constant("margin",TTR("Dialogs"));
+				int button_margin = get_constant("button_margin","Dialogs");
+				int margin = get_constant("margin","Dialogs");
 
 				action_buttons[0]->set_anchor( MARGIN_LEFT, ANCHOR_END );
 				action_buttons[0]->set_anchor( MARGIN_TOP, ANCHOR_END );
@@ -691,10 +691,10 @@ bool CustomPropertyEditor::edit(Object* p_owner,const String& p_name,Variant::Ty
 						int id = TYPE_BASE_ID+idx;
 						if (has_icon(t,"EditorIcons")) {
 
-							menu->add_icon_item(get_icon(t,"EditorIcons"),"New "+t,id);
+							menu->add_icon_item(get_icon(t,"EditorIcons"),TTR("New")+" "+t,id);
 						} else {
 
-							menu->add_item(TTR("New ")+t,id);
+							menu->add_item(TTR("New")+" "+t,id);
 						}
 
 						idx++;
@@ -936,7 +936,7 @@ void CustomPropertyEditor::_node_path_selected(NodePath p_path) {
 
 		if (owner->is_type("Node"))
 			node = owner->cast_to<Node>();
-		else if (owner->is_type(TTR("ArrayPropertyEdit")))
+		else if (owner->is_type("ArrayPropertyEdit"))
 			node = owner->cast_to<ArrayPropertyEdit>()->get_node();
 
 		if (!node) {
@@ -1732,7 +1732,7 @@ CustomPropertyEditor::CustomPropertyEditor() {
 		add_child(checks20[i]);
 		checks20[i]->hide();
 		checks20[i]->connect("pressed",this,"_action_pressed",make_binds(i));
-		checks20[i]->set_tooltip(TTR("Bit ")+itos(i)+", val "+itos(1<<i)+".");
+		checks20[i]->set_tooltip(vformat(TTR("Bit %d, val %d."), i, 1<<i));
 	}
 
 	text_edit = memnew( TextEdit );
@@ -2658,11 +2658,11 @@ void PropertyEditor::update_tree() {
 	TreeItem *title = tree->create_item(root);
 
 	title->set_custom_bg_color(0,get_color("prop_section","Editor"));
-	title->set_text(0,TTR("Property")); // todo, fetch name if ID exists in database
+	title->set_text(0,"Property"); // todo, fetch name if ID exists in database
 	title->set_editable(0,false);
 	title->set_selectable(0,false);
 	title->set_custom_bg_color(1,get_color("prop_section","Editor"));
-	title->set_text(1,TTR("Value")); // todo, fetch name if ID exists in database
+	title->set_text(1,"Value"); // todo, fetch name if ID exists in database
 	title->set_editable(1,false);
 	title->set_selectable(1,false);
 */
@@ -2671,7 +2671,7 @@ void PropertyEditor::update_tree() {
 	if (obj->cast_to<Node>() || obj->cast_to<Resource>()) {
 		TreeItem *type = tree->create_item(root);
 
-		type->set_text(0,TTR("Type")); // todo, fetch name if ID exists in database
+		type->set_text(0,"Type"); // todo, fetch name if ID exists in database
 		type->set_text(1,obj->get_type()); // todo, fetch name if ID exists in database
 		if (has_icon(obj->get_type(),"EditorIcons"))
 			type->set_icon(1,get_icon(obj->get_type(),"EditorIcons") );
@@ -2684,7 +2684,7 @@ void PropertyEditor::update_tree() {
 
 		TreeItem *name = tree->create_item(root);
 
-		name->set_text(0,TTR("Name")); // todo, fetch name if ID exists in database
+		name->set_text(0,"Name"); // todo, fetch name if ID exists in database
 		if (obj->is_type("Resource"))
 			name->set_text(1,obj->cast_to<Resource>()->get_name());
 		else if (obj->is_type("Node"))
@@ -2767,7 +2767,7 @@ void PropertyEditor::update_tree() {
 
 				}
 
-				sep->set_tooltip(0,TTR("Class: ")+p.name+":\n\n"+class_descr_cache[type]);
+				sep->set_tooltip(0,TTR("Class:")+" "+p.name+":\n\n"+class_descr_cache[type]);
 			}
 			//sep->set_custom_color(0,Color(1,1,1));
 
@@ -2864,7 +2864,7 @@ void PropertyEditor::update_tree() {
 					descr_cache[type][setter]=descr;
 				}
 
-				item->set_tooltip(0, TTR("Property: ")+p.name+"\n\n"+descr);
+				item->set_tooltip(0, TTR("Property:")+" "+p.name+"\n\n"+descr);
 			}
 		}
 		//EditorHelp::get_doc_data();
@@ -3433,7 +3433,7 @@ void PropertyEditor::_edit_set(const String& p_name, const Variant& p_value) {
 	} else {
 
 
-		undo_redo->create_action(TTR("Set ")+p_name,true);
+		undo_redo->create_action(TTR("Set")+" "+p_name,true);
 		undo_redo->add_do_property(obj,p_name,p_value);
 		undo_redo->add_undo_property(obj,p_name,obj->get(p_name));
 		undo_redo->add_do_method(this,"_changed_callback",obj,p_name);

+ 3 - 3
tools/editor/pvrtc_compress.cpp

@@ -82,7 +82,7 @@ static void _compress_image(Image::CompressMode p_mode,Image *p_image) {
 
 	}
 
-	if (EditorSettings::get_singleton()->get(TTR("PVRTC/fast_conversion")).operator bool()) {
+	if (EditorSettings::get_singleton()->get("PVRTC/fast_conversion").operator bool()) {
 		args.push_back("-pvrtcfast");
 	}
 	if (p_image->get_mipmaps()>0)
@@ -93,13 +93,13 @@ static void _compress_image(Image::CompressMode p_mode,Image *p_image) {
 	ResourceSaver::save(src_img,t);
 
 	Error err = OS::get_singleton()->execute(ttpath,args,true);
-	ERR_EXPLAIN(TTR("Could not execute PVRTC Tool: ")+ttpath);
+	ERR_EXPLAIN(TTR("Could not execute PVRTC tool:")+" "+ttpath);
 	ERR_FAIL_COND(err!=OK);
 
 
 	t=ResourceLoader::load(dst_img,"Texture");
 
-	ERR_EXPLAIN(TTR("Can't load back converted image using PVRTC Tool: ")+dst_img);
+	ERR_EXPLAIN(TTR("Can't load back converted image using PVRTC tool:")+" "+dst_img);
 	ERR_FAIL_COND(t.is_null());
 
 	*p_image=t->get_data();

+ 1 - 1
tools/editor/register_exporters.h

@@ -32,4 +32,4 @@
 
 void register_exporters();
 
-#endif
+#endif

+ 2 - 2
tools/editor/reparent_dialog.cpp

@@ -99,7 +99,7 @@ ReparentDialog::ReparentDialog() {
 
 	//Label *label = memnew( Label );
 	//label->set_pos( Point2( 15,8) );
-	//label->set_text(TTR("Reparent Location (Select new Parent):"));
+	//label->set_text("Reparent Location (Select new Parent):");
 
 	keep_transform = memnew( CheckBox );
 	keep_transform->set_text(TTR("Keep Global Transform"));
@@ -107,7 +107,7 @@ ReparentDialog::ReparentDialog() {
 	vbc->add_child(keep_transform);
 
 
-	//vbc->add_margin_child(TTR("Options:"),node_only);;
+	//vbc->add_margin_child("Options:",node_only);;
 
 	//cancel->connect("pressed", this,"_cancel");
 

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно