diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/aboutprefs.C hvirtual-1.1.7/cinelerra/aboutprefs.C
--- base-1.1.7/cinelerra/aboutprefs.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/aboutprefs.C	2003-09-21 23:41:43.000000000 +0200
@@ -6,6 +6,11 @@
 #include "theme.h"
 #include "vframe.h"
 
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
+
 
 AboutPrefs::AboutPrefs(MWindow *mwindow, PreferencesWindow *pwindow)
  : PreferencesDialog(mwindow, pwindow)
@@ -50,17 +55,18 @@
 	x += mwindow->theme->about_bg->get_w() + 10;
 	y += get_text_height(LARGEFONT) * 2;
 
-	char *license1 = 
-"Cinelerra " VERSION;
+	char license1[BCTEXTLEN];
+	sprintf (license1, _("Cinelerra "), VERSION);
 
 	set_font(LARGEFONT);
 	set_color(BLACK);
 	draw_text(x, y, license1);
 
-
-	char *license2 = 
-"(c) 2003 Heroine Virtual Ltd.\n\n"
-"Build date: " BUILDDATE;
+	char license2[BCTEXTLEN];
+	sprintf(license2, "%s%s%s", 
+		_("(c) 2003 Heroine Virtual Ltd.\n\n"),
+		_("Build date: "), 
+		BUILDDATE);
 	y += get_text_height(LARGEFONT) * 2;
 	set_font(MEDIUMFONT);
 	draw_text(x, y, license2);
@@ -68,7 +74,8 @@
 
 
 
-	char *license3 = 
+	char license3[BCTEXTLEN];
+	sprintf(license3, _(
 "This program is free software; you can\n"
 "redistribute it and/or modify it under the terms\n"
 "of the GNU General Public License as published\n"
@@ -82,15 +89,15 @@
 "MERCHANTABILITY or FITNESS FOR A PARTICULAR\n"
 "PURPOSE.  See the GNU General Public License for\n"
 "more details.\n"
-"\n";
+"\n"));
 	y += 100;
 	draw_text(x, y, license3);
 
 
 	char versions[BCTEXTLEN];
 	sprintf(versions, 
-"Quicktime version %d.%d.%d\n"
-"Libmpeg3 version %d.%d.%d\n",
+_("Quicktime version %d.%d.%d\n"
+"Libmpeg3 version %d.%d.%d\n"),
 quicktime_major(),
 quicktime_minor(),
 quicktime_release(),
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/adeviceprefs.C hvirtual-1.1.7/cinelerra/adeviceprefs.C
--- base-1.1.7/cinelerra/adeviceprefs.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/adeviceprefs.C	2003-09-21 23:43:57.000000000 +0200
@@ -9,6 +9,11 @@
 #include "recordconfig.h"
 #include <string.h>
 
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
+
 #define DEVICE_H 25
 
 ADevicePrefs::ADevicePrefs(int x, 
@@ -225,7 +230,7 @@
 		}
 		if(i == 0) dialog->add_subwindow(path_title = new BC_Title(x1, 
 			y, 
-			"Device path:", 
+			_("Device path:"), 
 			MEDIUMFONT, 
 			BLACK));
 		dialog->add_subwindow(oss_path[i] = new ADeviceTextBox(x1, 
@@ -247,7 +252,7 @@
 					output_int = &out_config->oss_out_bits;
 					break;
 			}
-			if(i == 0) dialog->add_subwindow(bits_title = new BC_Title(x1, y, "Bits:", MEDIUMFONT, BLACK));
+			if(i == 0) dialog->add_subwindow(bits_title = new BC_Title(x1, y, _("Bits:"), MEDIUMFONT, BLACK));
 			oss_bits = new BitsPopup(dialog, 
 				x1, 
 				y1 + 20, 
@@ -273,7 +278,7 @@
 				output_int = &out_config->oss_out_channels[i];
 				break;
 		}
-		if(i == 0) dialog->add_subwindow(channels_title = new BC_Title(x1, y1, "Channels:", MEDIUMFONT, BLACK));
+		if(i == 0) dialog->add_subwindow(channels_title = new BC_Title(x1, y1, _("Channels:"), MEDIUMFONT, BLACK));
 		dialog->add_subwindow(oss_channels[i] = new ADeviceIntBox(x1, y1 + 20, output_int));
 		y1 += DEVICE_H;
 break;
@@ -312,7 +317,7 @@
 			output_char = out_config->alsa_out_device;
 			break;
 	}
-	dialog->add_subwindow(path_title = new BC_Title(x1, y, "Device:", MEDIUMFONT, BLACK));
+	dialog->add_subwindow(path_title = new BC_Title(x1, y, _("Device:"), MEDIUMFONT, BLACK));
 	alsa_device = new ALSADevice(dialog,
 		x1, 
 		y1 + 20, 
@@ -333,7 +338,7 @@
 			output_int = &out_config->alsa_out_bits;
 			break;
 	}
-	dialog->add_subwindow(bits_title = new BC_Title(x1, y, "Bits:", MEDIUMFONT, BLACK));
+	dialog->add_subwindow(bits_title = new BC_Title(x1, y, _("Bits:"), MEDIUMFONT, BLACK));
 	alsa_bits = new BitsPopup(dialog, 
 		x1, 
 		y1 + 20, 
@@ -358,7 +363,7 @@
 			output_int = &out_config->alsa_out_channels;
 			break;
 	}
-	dialog->add_subwindow(channels_title = new BC_Title(x1, y, "Channels:", MEDIUMFONT, BLACK));
+	dialog->add_subwindow(channels_title = new BC_Title(x1, y, _("Channels:"), MEDIUMFONT, BLACK));
 	dialog->add_subwindow(alsa_channels = new ADeviceIntBox(x1, y1 + 20, output_int));
 	y1 += DEVICE_H;
 #endif
@@ -384,7 +389,7 @@
 			output_char = out_config->esound_out_server;
 			break;
 	}
-	dialog->add_subwindow(server_title = new BC_Title(x1, y, "Server:", MEDIUMFONT, BLACK));
+	dialog->add_subwindow(server_title = new BC_Title(x1, y, _("Server:"), MEDIUMFONT, BLACK));
 	dialog->add_subwindow(esound_server = new ADeviceTextBox(x1, y + 20, output_char));
 
 	switch(mode)
@@ -400,7 +405,7 @@
 			break;
 	}
 	x1 += esound_server->get_w() + 5;
-	dialog->add_subwindow(port_title = new BC_Title(x1, y, "Port:", MEDIUMFONT, BLACK));
+	dialog->add_subwindow(port_title = new BC_Title(x1, y, _("Port:"), MEDIUMFONT, BLACK));
 	dialog->add_subwindow(esound_port = new ADeviceIntBox(x1, y + 20, output_int));
 	return 0;
 }
@@ -425,7 +430,7 @@
 
 	if(output_char)
 	{
-		dialog->add_subwindow(path_title = new BC_Title(x1, y, "Device Path:", MEDIUMFONT, BLACK));
+		dialog->add_subwindow(path_title = new BC_Title(x1, y, _("Device Path:"), MEDIUMFONT, BLACK));
 		dialog->add_subwindow(firewire_path = new ADeviceTextBox(x1, y + 20, output_char));
 		x1 += firewire_path->get_w() + 5;
 	}
@@ -443,7 +448,7 @@
 //			output_int = &out_config->afirewire_out_port;
 			break;
 	}
-	dialog->add_subwindow(port_title = new BC_Title(x1, y, "Port:", MEDIUMFONT, BLACK));
+	dialog->add_subwindow(port_title = new BC_Title(x1, y, _("Port:"), MEDIUMFONT, BLACK));
 	dialog->add_subwindow(firewire_port = new ADeviceIntBox(x1, y + 20, output_int));
 
 	x1 += firewire_port->get_w() + 5;
@@ -458,7 +463,7 @@
 			output_int = &in_config->firewire_channel;
 			break;
 	}
-	dialog->add_subwindow(channel_title = new BC_Title(x1, y, "Channel:", MEDIUMFONT, BLACK));
+	dialog->add_subwindow(channel_title = new BC_Title(x1, y, _("Channel:"), MEDIUMFONT, BLACK));
 	dialog->add_subwindow(firewire_channel = new ADeviceIntBox(x1, y + 20, output_int));
 	x1 += firewire_channel->get_w() + 5;
 
@@ -475,7 +480,7 @@
 
 	if(output_int)
 	{
-		dialog->add_subwindow(channels_title = new BC_Title(x1, y, "Channels:", MEDIUMFONT, BLACK));
+		dialog->add_subwindow(channels_title = new BC_Title(x1, y, _("Channels:"), MEDIUMFONT, BLACK));
 		dialog->add_subwindow(firewire_channels = new ADeviceIntBox(x1, y + 20, output_int));
 		x1 += firewire_channels->get_w() + 5;
 	}
@@ -493,7 +498,7 @@
 
 	if(output_int)
 	{
-		dialog->add_subwindow(syt_title = new BC_Title(x1, y, "Syt Offset:", MEDIUMFONT, BLACK));
+		dialog->add_subwindow(syt_title = new BC_Title(x1, y, _("Syt Offset:"), MEDIUMFONT, BLACK));
 		dialog->add_subwindow(firewire_syt = new ADeviceIntBox(x1, y + 20, output_int));
 		x1 += firewire_syt->get_w() + 5;
 	}
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/amodule.C hvirtual-1.1.7/cinelerra/amodule.C
--- base-1.1.7/cinelerra/amodule.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/amodule.C	2003-09-21 23:47:42.000000000 +0200
@@ -25,6 +25,11 @@
 #include "transportque.h"
 #include <string.h>
 
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
+
 
 AModule::AModule(RenderEngine *renderengine, 
 	CommonRender *commonrender, 
@@ -186,7 +191,7 @@
 				{
 // couldn't open source file / skip the edit
 					result = 1;
-					printf("VirtualAConsole::load_track Couldn't open %s.\n", playable_edit->asset->path);
+					printf(_("VirtualAConsole::load_track Couldn't open %s.\n"), playable_edit->asset->path);
 				}
 				else
 				{
@@ -262,7 +267,7 @@
 						if(!(source = get_cache()->check_out(previous_edit->asset)))
 						{
 // couldn't open source file / skip the edit
-							printf("VirtualAConsole::load_track Couldn't open %s.\n", playable_edit->asset->path);
+							printf(_("VirtualAConsole::load_track Couldn't open %s.\n"), playable_edit->asset->path);
 							result = 1;
 						}
 						else
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/apanel.C hvirtual-1.1.7/cinelerra/apanel.C
--- base-1.1.7/cinelerra/apanel.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/apanel.C	2003-09-21 23:48:43.000000000 +0200
@@ -1,6 +1,11 @@
 #include "apanel.h"
 #include "cwindowgui.h"
 
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
+
 APanel::APanel(MWindow *mwindow, CWindowGUI *subwindow, int x, int y, int w, int h)
 {
 	this->mwindow = mwindow;
@@ -21,11 +26,11 @@
 	char string[BCTEXTLEN];
 	int x1 = x;
 
-	subwindow->add_subwindow(new BC_Title(x, y, "Automation"));
+	subwindow->add_subwindow(new BC_Title(x, y, _("Automation")));
 	y += 20;
 	for(int i = 0; i < PLUGINS; i++)
 	{
-		sprintf(string, "Plugin %d", i + 1);
+		sprintf(string, _("Plugin %d"), i + 1);
 		subwindow->add_subwindow(new BC_Title(x, y, string, SMALLFONT));
 		subwindow->add_subwindow(plugin_autos[i] = new APanelPluginAuto(mwindow, this, x, y + 20));
 		if(x == x1)
@@ -64,7 +69,7 @@
 }
 
 APanelMute::APanelMute(MWindow *mwindow, APanel *gui, int x, int y)
- : BC_CheckBox(x, y, 0, "Mute")
+ : BC_CheckBox(x, y, 0, _("Mute"))
 {
 	this->mwindow = mwindow;
 	this->gui = gui;
@@ -76,7 +81,7 @@
 
 
 APanelPlay::APanelPlay(MWindow *mwindow, APanel *gui, int x, int y)
- : BC_CheckBox(x, y, 1, "Play")
+ : BC_CheckBox(x, y, 1, _("Play"))
 {
 	this->mwindow = mwindow;
 	this->gui = gui;
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/apatchgui.C hvirtual-1.1.7/cinelerra/apatchgui.C
--- base-1.1.7/cinelerra/apatchgui.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/apatchgui.C	2003-09-21 23:49:52.000000000 +0200
@@ -18,6 +18,12 @@
 #include "trackcanvas.h"
 
 
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
+
+
 APatchGUI::APatchGUI(MWindow *mwindow, PatchBay *patchbay, ATrack *track, int x, int y)
  : PatchGUI(mwindow, patchbay, track, x, y)
 {
@@ -195,7 +201,7 @@
 
 //printf("AFadePatch::update_edl 1 %d\n", update_undo);
 	if(update_undo)
-		mwindow->undo->update_undo_before("fade", LOAD_AUTOMATION);
+		mwindow->undo->update_undo_before(_("fade"), LOAD_AUTOMATION);
 
 	current = (FloatAuto*)fade_autos->get_auto_for_editing(position);
 
@@ -271,7 +277,7 @@
 	int update_undo = !pan_autos->auto_exists_for_editing(position);
 
 	if(update_undo)
-		mwindow->undo->update_undo_before("pan", LOAD_AUTOMATION);
+		mwindow->undo->update_undo_before(_("pan"), LOAD_AUTOMATION);
 
 	current = (PanAuto*)pan_autos->get_auto_for_editing(position);
 
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/assetedit.C hvirtual-1.1.7/cinelerra/assetedit.C
--- base-1.1.7/cinelerra/assetedit.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/assetedit.C	2003-09-21 23:56:39.000000000 +0200
@@ -19,6 +19,12 @@
 
 #include <string.h>
 
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
+
+
 AssetEdit::AssetEdit(MWindow *mwindow)
  : Thread()
 {
@@ -169,17 +175,17 @@
 		path_text, 
 		y, 
 		asset->path, 
-		PROGRAM_NAME ": Asset path", "Select a file for this asset:"));
+		PROGRAM_NAME ": Asset path", _("Select a file for this asset:")));
 	y += 30;
 
-	add_subwindow(new BC_Title(x, y, "File format:"));
+	add_subwindow(new BC_Title(x, y, _("File format:")));
 	x = x2;
 	File file;
 	add_subwindow(new BC_Title(x, y, file.formattostr(mwindow->plugindb, asset->format), MEDIUMFONT, YELLOW));
 	x = x1;
 	y += 20;
 
-	add_subwindow(new BC_Title(x, y, "Bytes:"));
+	add_subwindow(new BC_Title(x, y, _("Bytes:")));
 	sprintf(string, "%lld", fs.get_size(asset->path));
 // Do commas
 	int len = strlen(string);
@@ -202,13 +208,13 @@
 
 	if(asset->audio_data)
 	{
-		add_subwindow(new BC_Title(x, y, "Audio:", LARGEFONT, RED));
+		add_subwindow(new BC_Title(x, y, _("Audio:"), LARGEFONT, RED));
 
 		y += 30;
 
 		if(asset->acodec[0])
 		{
-			add_subwindow(new BC_Title(x, y, "Compression:"));
+			add_subwindow(new BC_Title(x, y, _("Compression:")));
 			sprintf(string, "%c%c%c%c", 
 				asset->acodec[0], 
 				asset->acodec[1], 
@@ -220,7 +226,7 @@
 			x = x1;
 		}
 
-		add_subwindow(new BC_Title(x, y, "Channels:"));
+		add_subwindow(new BC_Title(x, y, _("Channels:")));
 		sprintf(string, "%d", asset->channels);
 
 		x = x2;
@@ -237,7 +243,7 @@
 		}
 
 		x = x1;
-		add_subwindow(new BC_Title(x, y, "Sample rate:"));
+		add_subwindow(new BC_Title(x, y, _("Sample rate:")));
 		sprintf(string, "%d", asset->sample_rate);
 
 		x = x2;
@@ -257,7 +263,7 @@
 		y += 30;
 		x = x1;
 
-		add_subwindow(new BC_Title(x, y, "Bits:"));
+		add_subwindow(new BC_Title(x, y, _("Bits:")));
 		x = x2;
 		if(allow_edits)
 		{
@@ -278,7 +284,7 @@
 
 		x = x1;
 		y += vmargin;
-		add_subwindow(new BC_Title(x, y, "Header length:"));
+		add_subwindow(new BC_Title(x, y, _("Header length:")));
 		sprintf(string, "%d", asset->header);
 
 		x = x2;
@@ -290,7 +296,7 @@
 		y += vmargin;
 		x = x1;
 
-		add_subwindow(new BC_Title(x, y, "Byte order:"));
+		add_subwindow(new BC_Title(x, y, _("Byte order:")));
 
 		if(allow_edits)
 		{
@@ -310,9 +316,9 @@
 		{
 			x = x2;
 			if(asset->byte_order)
-				add_subwindow(new BC_Title(x, y, "Lo-Hi", MEDIUMFONT, YELLOW));
+				add_subwindow(new BC_Title(x, y, _("Lo-Hi"), MEDIUMFONT, YELLOW));
 			else
-				add_subwindow(new BC_Title(x, y, "Hi-Lo", MEDIUMFONT, YELLOW));
+				add_subwindow(new BC_Title(x, y, _("Hi-Lo"), MEDIUMFONT, YELLOW));
 			y += vmargin;
 		}
 
@@ -320,15 +326,15 @@
 		x = x1;
 		if(allow_edits)
 		{
-//			add_subwindow(new BC_Title(x, y, "Values are signed:"));
+//			add_subwindow(new BC_Title(x, y, _("Values are signed:")));
 			add_subwindow(new AssetEditSigned(this, asset->signed_, x, y));
 		}
 		else
 		{
 			if(!asset->signed_ && asset->bits == 8)
-				add_subwindow(new BC_Title(x, y, "Values are unsigned"));
+				add_subwindow(new BC_Title(x, y, _("Values are unsigned")));
 			else
-				add_subwindow(new BC_Title(x, y, "Values are signed"));
+				add_subwindow(new BC_Title(x, y, _("Values are signed")));
 		}
 
 		y += 30;
@@ -337,13 +343,13 @@
 	x = x1;
 	if(asset->video_data)
 	{
-		add_subwindow(new BC_Title(x, y, "Video:", LARGEFONT, RED));
+		add_subwindow(new BC_Title(x, y, _("Video:"), LARGEFONT, RED));
 
 		y += 30;
 		x = x1;
 		if(asset->vcodec[0])
 		{
-			add_subwindow(new BC_Title(x, y, "Compression:"));
+			add_subwindow(new BC_Title(x, y, _("Compression:")));
 			sprintf(string, "%c%c%c%c", 
 				asset->vcodec[0], 
 				asset->vcodec[1], 
@@ -355,7 +361,7 @@
 			x = x1;
 		}
 
-		add_subwindow(new BC_Title(x, y, "Frame rate:"));
+		add_subwindow(new BC_Title(x, y, _("Frame rate:")));
 		x = x2;
 		sprintf(string, "%.2f", asset->frame_rate);
 		BC_TextBox *framerate;
@@ -365,14 +371,14 @@
 		
 		y += 30;
 		x = x1;
-		add_subwindow(new BC_Title(x, y, "Width:"));
+		add_subwindow(new BC_Title(x, y, _("Width:")));
 		x = x2;
 		sprintf(string, "%d", asset->width);
 		add_subwindow(new BC_Title(x, y, string, MEDIUMFONT, YELLOW));
 		
 		y += vmargin;
 		x = x1;
-		add_subwindow(new BC_Title(x, y, "Height:"));
+		add_subwindow(new BC_Title(x, y, _("Height:")));
 		x = x2;
 		sprintf(string, "%d", asset->height);
 		add_subwindow(new BC_Title(x, y, string, MEDIUMFONT, YELLOW));
@@ -447,7 +453,7 @@
 	int value, 
 	int x,
 	int y)
- : BC_Radial(x, y, value, "Lo-Hi")
+ : BC_Radial(x, y, value, _("Lo-Hi"))
 {
 	this->fwindow = fwindow;
 }
@@ -464,7 +470,7 @@
 	int value, 
 	int x, 
 	int y)
- : BC_Radial(x, y, value, "Hi-Lo")
+ : BC_Radial(x, y, value, _("Hi-Lo"))
 {
 	this->fwindow = fwindow;
 }
@@ -481,7 +487,7 @@
 	int value, 
 	int x, 
 	int y)
- : BC_CheckBox(x, y, value, "Values are signed")
+ : BC_CheckBox(x, y, value, _("Values are signed"))
 {
 	this->fwindow = fwindow;
 }
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/assetedit.h hvirtual-1.1.7/cinelerra/assetedit.h
--- base-1.1.7/cinelerra/assetedit.h	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/assetedit.h	2003-09-24 00:42:33.000000000 +0200
@@ -10,6 +10,11 @@
 #include "mwindow.h"
 #include "thread.h"
 
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
+
 class AssetEditByteOrderHILO;
 class AssetEditByteOrderLOHI;
 class AssetEditPath;
@@ -58,7 +63,7 @@
 class AssetEditPath : public BrowseButton
 {
 public:
-	AssetEditPath(MWindow *mwindow, AssetEditWindow *fwindow, BC_TextBox *textbox, int y, char *text, char *window_title = "2000: Path", char *window_caption = "Select a file");
+	AssetEditPath(MWindow *mwindow, AssetEditWindow *fwindow, BC_TextBox *textbox, int y, char *text, char *window_title = "2000: Path", char *window_caption = _("Select a file"));
 	~AssetEditPath();
 	
 	AssetEditWindow *fwindow;
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/assetpopup.C hvirtual-1.1.7/cinelerra/assetpopup.C
--- base-1.1.7/cinelerra/assetpopup.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/assetpopup.C	2003-09-21 23:58:22.000000000 +0200
@@ -17,6 +17,12 @@
 #include "vwindow.h"
 #include "vwindowgui.h"
 
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
+
+
 AssetPopup::AssetPopup(MWindow *mwindow, AWindowGUI *gui)
  : BC_PopupMenu(0, 
 		0, 
@@ -86,7 +92,7 @@
 
 
 AssetPopupInfo::AssetPopupInfo(MWindow *mwindow, AssetPopup *popup)
- : BC_MenuItem("Info...")
+ : BC_MenuItem(_("Info..."))
 {
 	this->mwindow = mwindow;
 	this->popup = popup;
@@ -128,7 +134,7 @@
 
 
 AssetPopupBuildIndex::AssetPopupBuildIndex(MWindow *mwindow, AssetPopup *popup)
- : BC_MenuItem("Rebuild index")
+ : BC_MenuItem(_("Rebuild index"))
 {
 	this->mwindow = mwindow;
 	this->popup = popup;
@@ -152,7 +158,7 @@
 
 
 AssetPopupSort::AssetPopupSort(MWindow *mwindow, AssetPopup *popup)
- : BC_MenuItem("Sort items")
+ : BC_MenuItem(_("Sort items"))
 {
 	this->mwindow = mwindow;
 	this->popup = popup;
@@ -175,7 +181,7 @@
 
 
 AssetPopupView::AssetPopupView(MWindow *mwindow, AssetPopup *popup)
- : BC_MenuItem("View")
+ : BC_MenuItem(_("View"))
 {
 	this->mwindow = mwindow;
 	this->popup = popup;
@@ -208,7 +214,7 @@
 
 
 AssetPopupPaste::AssetPopupPaste(MWindow *mwindow, AssetPopup *popup)
- : BC_MenuItem("Paste")
+ : BC_MenuItem(_("Paste"))
 {
 	this->mwindow = mwindow;
 	this->popup = popup;
@@ -232,7 +238,7 @@
 
 
 AssetMatchSize::AssetMatchSize(MWindow *mwindow, AssetPopup *popup)
- : BC_MenuItem("Match project size")
+ : BC_MenuItem(_("Match project size"))
 {
 	this->mwindow = mwindow;
 	this->popup = popup;
@@ -262,7 +268,7 @@
 
 
 AssetPopupProjectRemove::AssetPopupProjectRemove(MWindow *mwindow, AssetPopup *popup)
- : BC_MenuItem("Remove from project")
+ : BC_MenuItem(_("Remove from project"))
 {
 	this->mwindow = mwindow;
 	this->popup = popup;
@@ -284,7 +290,7 @@
 
 
 AssetPopupDiskRemove::AssetPopupDiskRemove(MWindow *mwindow, AssetPopup *popup)
- : BC_MenuItem("Remove from disk")
+ : BC_MenuItem(_("Remove from disk"))
 {
 	this->mwindow = mwindow;
 	this->popup = popup;
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/assetremove.C hvirtual-1.1.7/cinelerra/assetremove.C
--- base-1.1.7/cinelerra/assetremove.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/assetremove.C	2003-09-21 23:59:04.000000000 +0200
@@ -2,6 +2,12 @@
 #include "mwindow.h"
 #include "mwindowgui.h"
 
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
+
+
 AssetRemoveWindow::AssetRemoveWindow(MWindow *mwindow)
  : BC_Window(PROGRAM_NAME ": Remove assets", 
 				mwindow->gui->get_abs_cursor_x(),
@@ -19,7 +25,7 @@
 void AssetRemoveWindow::create_objects()
 {
 	int x = 10, y = 10;
-	add_subwindow(new BC_Title(x, y, "Permanently remove from disk?"));
+	add_subwindow(new BC_Title(x, y, _("Permanently remove from disk?")));
 	add_subwindow(new BC_OKButton(this));
 	add_subwindow(new BC_CancelButton(this));
 	show_window();
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/atrack.C hvirtual-1.1.7/cinelerra/atrack.C
--- base-1.1.7/cinelerra/atrack.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/atrack.C	2003-09-22 10:43:03.000000000 +0200
@@ -25,6 +25,12 @@
 
 #include <string.h>
 
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
+
+
 ATrack::ATrack(EDL *edl, Tracks *tracks)
  : Track(edl, tracks)
 {
@@ -115,7 +121,7 @@
 	{
 		if(current->data_type == TRACK_AUDIO) i++;
 	}
-	sprintf(title, "Audio %d", i);
+	sprintf(title, _("Audio %d"), i);
 }
 
 along ATrack::to_units(double position, int round)
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/audiooutprefs.C hvirtual-1.1.7/cinelerra/audiooutprefs.C
--- base-1.1.7/cinelerra/audiooutprefs.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/audiooutprefs.C	2003-09-22 10:57:55.000000000 +0200
@@ -10,6 +10,11 @@
 #include "preferences.h"
 
 #include <string.h>
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
+
 
 AudioOutPrefs::AudioOutPrefs(MWindow *mwindow, PreferencesWindow *pwindow)
  : PreferencesDialog(mwindow, pwindow)
@@ -36,13 +41,13 @@
 
 //printf("AudioOutPrefs::create_objects 1\n");
 	current_head = mwindow->defaults->get("PLAYBACK_HEAD", 0);
-	strategies.append(new BC_ListBoxItem("Local Host"));
-	strategies.append(new BC_ListBoxItem("Multihead"));
-	strategies.append(new BC_ListBoxItem("Blond Symphony"));
+	strategies.append(new BC_ListBoxItem(_("Local Host")));
+	strategies.append(new BC_ListBoxItem(_("Multihead")));
+	strategies.append(new BC_ListBoxItem(_("Blond Symphony")));
 
-//	add_subwindow(new BC_Title(x, y, "Playback", LARGEFONT, BLACK));
+//	add_subwindow(new BC_Title(x, y, _("Playback"), LARGEFONT, BLACK));
 //	x += 200;
-// 	add_subwindow(new BC_Title(x, y, "Strategy:"));
+// 	add_subwindow(new BC_Title(x, y, _("Strategy:")));
 // 	popup = new PlaybackStrategy(this, x + 70, y);
 // 	popup->create_objects();
 // 	x = 10;
@@ -51,13 +56,13 @@
 // Global playback options
 
 // All strategies use these
-	add_subwindow(new BC_Title(x, y, "Audio Out", LARGEFONT, BLACK));
+	add_subwindow(new BC_Title(x, y, _("Audio Out"), LARGEFONT, BLACK));
 	y += 30;
-	add_subwindow(new BC_Title(x, y, "Samples to read from disk at a time:", MEDIUMFONT, BLACK));
+	add_subwindow(new BC_Title(x, y, _("Samples to read from disk at a time:"), MEDIUMFONT, BLACK));
 	sprintf(string, "%d", pwindow->thread->edl->session->audio_read_length);
 	add_subwindow(new PlaybackReadLength(x + 275, y, pwindow, this, string));
 	y += 30;
-	add_subwindow(new BC_Title(x, y, "Samples to send to console at a time:", MEDIUMFONT, BLACK));
+	add_subwindow(new BC_Title(x, y, _("Samples to send to console at a time:"), MEDIUMFONT, BLACK));
 	sprintf(string, "%d", pwindow->thread->edl->session->audio_module_fragment);
 	add_subwindow(new PlaybackModuleFragment(x + 275, y, pwindow, this, string));
 	y += 30;
@@ -69,7 +74,7 @@
 	y += 30;
 	add_subwindow(new PlaybackRealTime(pwindow, pwindow->thread->edl->session->real_time_playback, y));
 	y += 40;
-	add_subwindow(new BC_Title(x, y, "Audio Driver:"));
+	add_subwindow(new BC_Title(x, y, _("Audio Driver:")));
 	audio_device = new ADevicePrefs(x + 100, 
 		y, 
 		pwindow, 
@@ -82,7 +87,7 @@
 // Strategic playback options created here
 	set_strategy(pwindow->thread->edl->session->playback_strategy);
 // 
-// 	add_subwindow(new BC_Title(x, y, "Playback driver:", MEDIUMFONT, BLACK));
+// 	add_subwindow(new BC_Title(x, y, _("Playback driver:"), MEDIUMFONT, BLACK));
 // 	add_subwindow(new AudioDriverMenu(x, y + 20, out_device, &(pwindow->thread->preferences->aconfig->audio_out_driver), 0, 1));
 // 	y += 70;
 // 
@@ -94,16 +99,16 @@
 	switch(strategy)
 	{
 		case PLAYBACK_LOCALHOST:
-			return "Local Host";
+			return _("Local Host");
 			break;
 		case PLAYBACK_MULTIHEAD:
-			return "Multihead";
+			return _("Multihead");
 			break;
 		case PLAYBACK_BLONDSYMPHONY:
-			return "Blond Symphony";
+			return _("Blond Symphony");
 			break;
 	}
-	return "Local Host";
+	return _("Local Host");
 }
 
 // Delete strategy dependant objects
@@ -146,16 +151,16 @@
 		case PLAYBACK_LOCALHOST:
 			break;
 		case PLAYBACK_MULTIHEAD:
-			add_subwindow(head_title = new BC_Title(x, y, "Head:"));
+			add_subwindow(head_title = new BC_Title(x, y, _("Head:")));
 			head_text = new PlaybackHead(this, x1, y);
 			head_text->create_objects();
 			y += 25;
-			add_subwindow(head_count_title = new BC_Title(x, y, "Total Heads:"));
+			add_subwindow(head_count_title = new BC_Title(x, y, _("Total Heads:")));
 			head_count_text = new PlaybackHeadCount(this, x1, y);
 			head_count_text->create_objects();
 			x = 10;
 			y = 390;
-			add_subwindow(vdevice_title = new BC_Title(x, y, "Video Driver:"));
+			add_subwindow(vdevice_title = new BC_Title(x, y, _("Video Driver:")));
 			video_device = new VDevicePrefs(x + 100, 
 				y, 
 				pwindow, 
@@ -166,19 +171,19 @@
 			video_device->initialize();
 			break;
 		case PLAYBACK_BLONDSYMPHONY:
-			add_subwindow(head_title = new BC_Title(x, y, "Head:"));
+			add_subwindow(head_title = new BC_Title(x, y, _("Head:")));
 			head_text = new PlaybackHead(this, x1, y);
 			head_text->create_objects();
 			y += 25;
-			add_subwindow(head_count_title = new BC_Title(x, y, "Total Heads:"));
+			add_subwindow(head_count_title = new BC_Title(x, y, _("Total Heads:")));
 			head_count_text = new PlaybackHeadCount(this, x1, y);
 			head_count_text->create_objects();
 			y += 25;
-			add_subwindow(host_title = new BC_Title(x, y, "Hostname:"));
+			add_subwindow(host_title = new BC_Title(x, y, _("Hostname:")));
 			add_subwindow(host_text = new PlaybackHost(this, x1, y));
 			x = 10;
 			y = 390;
-			add_subwindow(vdevice_title = new BC_Title(x, y, "Video Driver:"));
+			add_subwindow(vdevice_title = new BC_Title(x, y, _("Video Driver:")));
 			video_device = new VDevicePrefs(x + 100, 
 				y, 
 				pwindow, 
@@ -352,7 +357,7 @@
 }
 
 PlaybackDisableNoEdits::PlaybackDisableNoEdits(PreferencesWindow *pwindow, int value, int y)
- : BC_CheckBox(10, y, value, "Disable tracks when no edits.")
+ : BC_CheckBox(10, y, value, _("Disable tracks when no edits."))
 { 
 	this->pwindow = pwindow; 
 }
@@ -367,7 +372,7 @@
 
 
 PlaybackViewFollows::PlaybackViewFollows(PreferencesWindow *pwindow, int value, int y)
- : BC_CheckBox(10, y, value, "View follows playback")
+ : BC_CheckBox(10, y, value, _("View follows playback"))
 { 
 	this->pwindow = pwindow; 
 }
@@ -382,7 +387,7 @@
 
 
 PlaybackSoftwareTimer::PlaybackSoftwareTimer(PreferencesWindow *pwindow, int value, int y)
- : BC_CheckBox(10, y, value, "Use software for positioning information")
+ : BC_CheckBox(10, y, value, _("Use software for positioning information"))
 { 
 	this->pwindow = pwindow; 
 }
@@ -397,7 +402,7 @@
 
 
 PlaybackRealTime::PlaybackRealTime(PreferencesWindow *pwindow, int value, int y)
- : BC_CheckBox(10, y, value, "Audio playback in real time priority (root only)")
+ : BC_CheckBox(10, y, value, _("Audio playback in real time priority (root only)"))
 { 
 	this->pwindow = pwindow; 
 }
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/awindowgui.C hvirtual-1.1.7/cinelerra/awindowgui.C
--- base-1.1.7/cinelerra/awindowgui.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/awindowgui.C	2003-09-22 11:02:28.000000000 +0200
@@ -26,6 +26,13 @@
 #include "vwindowgui.h"
 #include "vwindow.h"
 
+
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
+
+
 AssetPicon::AssetPicon(MWindow *mwindow, 
 	AWindowGUI *gui, 
 	Asset *asset)
@@ -260,8 +267,8 @@
 	AssetPicon *picon;
 
 //printf("AWindowGUI::create_objects 1\n");
-	asset_titles[0] = "Title";
-	asset_titles[1] = "Comments";
+	asset_titles[0] = _("Title");
+	asset_titles[1] = _("Comments");
 
 	set_icon(mwindow->theme->awindow_icon);
 	file_icon = new BC_Pixmap(this, 
@@ -1263,7 +1270,7 @@
 {
 	this->mwindow = mwindow;
 	this->gui = gui;
-	set_tooltip("New bin");
+	set_tooltip(_("New bin"));
 }
 
 int AWindowNewFolder::handle_event()
@@ -1277,7 +1284,7 @@
 {
 	this->mwindow = mwindow;
 	this->gui = gui;
-	set_tooltip("Delete bin");
+	set_tooltip(_("Delete bin"));
 }
 
 int AWindowDeleteFolder::handle_event()
@@ -1295,7 +1302,7 @@
 {
 	this->mwindow = mwindow;
 	this->gui = gui;
-	set_tooltip("Rename bin");
+	set_tooltip(_("Rename bin"));
 }
 
 int AWindowRenameFolder::handle_event()
@@ -1308,7 +1315,7 @@
 {
 	this->mwindow = mwindow;
 	this->gui = gui;
-	set_tooltip("Delete asset from disk");
+	set_tooltip(_("Delete asset from disk"));
 }
 
 int AWindowDeleteDisk::handle_event()
@@ -1321,7 +1328,7 @@
 {
 	this->mwindow = mwindow;
 	this->gui = gui;
-	set_tooltip("Delete asset from project");
+	set_tooltip(_("Delete asset from project"));
 }
 
 int AWindowDeleteProject::handle_event()
@@ -1334,7 +1341,7 @@
 {
 	this->mwindow = mwindow;
 	this->gui = gui;
-	set_tooltip("Edit information on asset");
+	set_tooltip(_("Edit information on asset"));
 }
 
 int AWindowInfo::handle_event()
@@ -1348,7 +1355,7 @@
 {
 	this->mwindow = mwindow;
 	this->gui = gui;
-	set_tooltip("Redraw index");
+	set_tooltip(_("Redraw index"));
 }
 
 int AWindowRedrawIndex::handle_event()
@@ -1361,7 +1368,7 @@
 {
 	this->mwindow = mwindow;
 	this->gui = gui;
-	set_tooltip("Paste asset on recordable tracks");
+	set_tooltip(_("Paste asset on recordable tracks"));
 }
 
 int AWindowPaste::handle_event()
@@ -1374,7 +1381,7 @@
 {
 	this->mwindow = mwindow;
 	this->gui = gui;
-	set_tooltip("Append asset in new tracks");
+	set_tooltip(_("Append asset in new tracks"));
 }
 
 int AWindowAppend::handle_event()
@@ -1387,7 +1394,7 @@
 {
 	this->mwindow = mwindow;
 	this->gui = gui;
-	set_tooltip("View asset");
+	set_tooltip(_("View asset"));
 }
 
 int AWindowView::handle_event()
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/awindowmenu.C hvirtual-1.1.7/cinelerra/awindowmenu.C
--- base-1.1.7/cinelerra/awindowmenu.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/awindowmenu.C	2003-09-22 11:04:24.000000000 +0200
@@ -5,7 +5,10 @@
 #include "edlsession.h"
 #include "mwindow.h"
 
-
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
 
 
 
@@ -53,7 +56,7 @@
 void AssetListFormat::update()
 {
 	set_text(mwindow->edl->session->assetlist_format == ASSETS_TEXT ?
-		(char*)"Display icons" : (char*)"Display text");
+		(char*)_("Display icons") : (char*)_("Display text"));
 }
 
 int AssetListFormat::handle_event()
@@ -79,7 +82,7 @@
 
 
 AssetListSort::AssetListSort(MWindow *mwindow)
- : BC_MenuItem("Sort items")
+ : BC_MenuItem(_("Sort items"))
 {
 	this->mwindow = mwindow;
 }
@@ -119,7 +122,7 @@
 void FolderListMenu::update_titles()
 {
 	format->set_text(mwindow->edl->session->folderlist_format == FOLDERS_TEXT ?
-		(char*)"Display icons" : (char*)"Display text");
+		(char*)_("Display icons") : (char*)_("Display text"));
 }
 
 
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/brender.C hvirtual-1.1.7/cinelerra/brender.C
--- base-1.1.7/cinelerra/brender.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/brender.C	2003-09-22 11:37:13.000000000 +0200
@@ -22,6 +22,12 @@
 #include <sys/wait.h>
 #include <unistd.h>
 
+
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
+
 extern "C"
 {
 #include <uuid/uuid.h>
@@ -119,7 +125,7 @@
 		fclose(fd);
 	}
 	else
-		perror("BRender::fork_background: can't open /proc/self/cmdline.\n");
+		perror(_("BRender::fork_background: can't open /proc/self/cmdline.\n"));
 
 	arguments[0] = new char[strlen(string) + 1];
 	strcpy(arguments[0], string);
@@ -230,7 +236,7 @@
 
 	if(value == BRender::NOT_SCANNED)
 	{
-		printf("BRender::set_video_map called to set NOT_SCANNED\n");
+		printf(_("BRender::set_video_map called to set NOT_SCANNED\n"));
 	}
 
 // Preroll
@@ -247,7 +253,7 @@
 	else
 // Obsolete EDL
 	{
-		printf("BRender::set_video_map %d: attempt to set beyond end of map %d.\n",
+		printf(_("BRender::set_video_map %d: attempt to set beyond end of map %d.\n"),
 			position,
 			map_size);
 	}
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/browsebutton.C hvirtual-1.1.7/cinelerra/browsebutton.C
--- base-1.1.7/cinelerra/browsebutton.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/browsebutton.C	2003-09-22 11:37:41.000000000 +0200
@@ -2,6 +2,13 @@
 #include "mwindow.h"
 #include "theme.h"
 
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
+
+
+
 BrowseButton::BrowseButton(MWindow *mwindow, 
 	BC_WindowBase *parent_window, 
 	BC_TextBox *textbox, 
@@ -20,7 +27,7 @@
 	this->init_directory = init_directory;
 	this->textbox = textbox;
 	this->mwindow = mwindow;
-	set_tooltip("Look for file");
+	set_tooltip(_("Look for file"));
 }
 
 BrowseButton::~BrowseButton()
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/canvas.C hvirtual-1.1.7/cinelerra/canvas.C
--- base-1.1.7/cinelerra/canvas.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/canvas.C	2003-09-22 11:40:50.000000000 +0200
@@ -4,6 +4,11 @@
 #include "edlsession.h"
 #include "vframe.h"
 
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
+
 
 Canvas::Canvas(BC_WindowBase *subwindow, 
 	int x, 
@@ -735,10 +740,10 @@
 
 void CanvasPopup::create_objects()
 {
-	add_item(new CanvasPopupSize(canvas, "Zoom 25%", 0.25));
-	add_item(new CanvasPopupSize(canvas, "Zoom 50%", 0.5));
-	add_item(new CanvasPopupSize(canvas, "Zoom 100%", 1.0));
-	add_item(new CanvasPopupSize(canvas, "Zoom 200%", 2.0));
+	add_item(new CanvasPopupSize(canvas, _("Zoom 25%"), 0.25));
+	add_item(new CanvasPopupSize(canvas, _("Zoom 50%"), 0.5));
+	add_item(new CanvasPopupSize(canvas, _("Zoom 100%"), 1.0));
+	add_item(new CanvasPopupSize(canvas, _("Zoom 200%"), 2.0));
 	if(canvas->use_cwindow)
 	{
 		add_item(new CanvasPopupResetCamera(canvas));
@@ -774,7 +779,7 @@
 
 
 CanvasPopupResetCamera::CanvasPopupResetCamera(Canvas *canvas)
- : BC_MenuItem("Reset camera")
+ : BC_MenuItem(_("Reset camera"))
 {
 	this->canvas = canvas;
 }
@@ -787,7 +792,7 @@
 
 
 CanvasPopupResetProjector::CanvasPopupResetProjector(Canvas *canvas)
- : BC_MenuItem("Reset projector")
+ : BC_MenuItem(_("Reset projector"))
 {
 	this->canvas = canvas;
 }
@@ -800,7 +805,7 @@
 
 
 CanvasPopupResetTranslation::CanvasPopupResetTranslation(Canvas *canvas)
- : BC_MenuItem("Reset translation")
+ : BC_MenuItem(_("Reset translation"))
 {
 	this->canvas = canvas;
 }
@@ -814,7 +819,7 @@
 
 
 CanvasPopupRemoveSource::CanvasPopupRemoveSource(Canvas *canvas)
- : BC_MenuItem("Close source")
+ : BC_MenuItem(_("Close source"))
 {
 	this->canvas = canvas;
 }
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/channeledit.C hvirtual-1.1.7/cinelerra/channeledit.C
--- base-1.1.7/cinelerra/channeledit.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/channeledit.C	2003-09-22 11:44:26.000000000 +0200
@@ -10,6 +10,10 @@
 #include "theme.h"
 
 #include <string.h>
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
 
 ChannelEditThread::ChannelEditThread(MWindow *mwindow, 
 	ChannelPicker *channel_picker,
@@ -337,7 +341,7 @@
 }
 
 ChannelEditSelect::ChannelEditSelect(MWindow *mwindow, ChannelEditWindow *window, int x, int y)
- : BC_GenericButton(x, y, "Select")
+ : BC_GenericButton(x, y, _("Select"))
 {
 	this->window = window;
 }
@@ -351,7 +355,7 @@
 }
 
 ChannelEditAdd::ChannelEditAdd(MWindow *mwindow, ChannelEditWindow *window, int x, int y)
- : BC_GenericButton(x, y, "Add...")
+ : BC_GenericButton(x, y, _("Add..."))
 {
 	this->window = window;
 }
@@ -382,7 +386,7 @@
 }
 
 ChannelEditMoveUp::ChannelEditMoveUp(MWindow *mwindow, ChannelEditWindow *window, int x, int y)
- : BC_GenericButton(x, y, "Move up")
+ : BC_GenericButton(x, y, _("Move up"))
 {
 	this->window = window;
 }
@@ -397,7 +401,7 @@
 }
 
 ChannelEditMoveDown::ChannelEditMoveDown(MWindow *mwindow, ChannelEditWindow *window, int x, int y)
- : BC_GenericButton(x, y, "Move down")
+ : BC_GenericButton(x, y, _("Move down"))
 {
 	this->window = window;
 }
@@ -412,7 +416,7 @@
 }
 
 ChannelEditDel::ChannelEditDel(MWindow *mwindow, ChannelEditWindow *window, int x, int y)
- : BC_GenericButton(x, y, "Delete")
+ : BC_GenericButton(x, y, _("Delete"))
 {
 	this->window = window;
 }
@@ -425,7 +429,7 @@
 }
 
 ChannelEdit::ChannelEdit(MWindow *mwindow, ChannelEditWindow *window, int x, int y)
- : BC_GenericButton(x, y, "Edit...")
+ : BC_GenericButton(x, y, _("Edit..."))
 {
 	this->window = window;
 }
@@ -438,7 +442,7 @@
 }
 
 ChannelEditPicture::ChannelEditPicture(MWindow *mwindow, ChannelEditWindow *window, int x, int y)
- : BC_GenericButton(x, y, "Picture...")
+ : BC_GenericButton(x, y, _("Picture..."))
 {
 	this->window = window;
 }
@@ -501,37 +505,37 @@
 	switch(value)
 	{
 		case NTSC_BCAST:
-			return "NTSC_BCAST";
+			return _("NTSC_BCAST");
 			break;
 		case NTSC_CABLE:
-			return "NTSC_CABLE";
+			return _("NTSC_CABLE");
 			break;
 		case NTSC_HRC:
-			return "NTSC_HRC";
+			return _("NTSC_HRC");
 			break;
 		case NTSC_BCAST_JP:
-			return "NTSC_BCAST_JP";
+			return _("NTSC_BCAST_JP");
 			break;
 		case NTSC_CABLE_JP:
-			return "NTSC_CABLE_JP";
+			return _("NTSC_CABLE_JP");
 			break;
 		case PAL_AUSTRALIA:
-			return "PAL_AUSTRALIA";
+			return _("PAL_AUSTRALIA");
 			break;
 		case PAL_EUROPE:
-			return "PAL_EUROPE";
+			return _("PAL_EUROPE");
 			break;
 		case PAL_E_EUROPE:
-			return "PAL_E_EUROPE";
+			return _("PAL_E_EUROPE");
 			break;
 		case PAL_ITALY:
-			return "PAL_ITALY";
+			return _("PAL_ITALY");
 			break;
 		case PAL_IRELAND:
-			return "PAL_IRELAND";
+			return _("PAL_IRELAND");
 			break;
 		case PAL_NEWZEALAND:
-			return "PAL_NEWZEALAND";
+			return _("PAL_NEWZEALAND");
 			break;
 	}
 }
@@ -541,13 +545,13 @@
 	switch(value)
 	{
 		case NTSC:
-			return "NTSC";
+			return _("NTSC");
 			break;
 		case PAL:
-			return "PAL";
+			return _("PAL");
 			break;
 		case SECAM:
-			return "SECAM";
+			return _("SECAM");
 			break;
 	}
 }
@@ -557,7 +561,7 @@
 	if(channel_picker->get_video_inputs()->total > value)
 		return channel_picker->get_video_inputs()->values[value];
 	else
-		return "None";
+		return _("None");
 }
 
 void ChannelEditEditThread::set_device()
@@ -669,32 +673,32 @@
 	this->new_channel = channel;
 
 	int x = 10, y = 10;
-	add_subwindow(new BC_Title(x, y, "Title:"));
+	add_subwindow(new BC_Title(x, y, _("Title:")));
 	add_subwindow(new ChannelEditEditTitle(x, y + 20, thread));
 	x += 170;
-	add_subwindow(new BC_Title(x, y, "Source:"));
+	add_subwindow(new BC_Title(x, y, _("Source:")));
 	y += 20;
 	add_subwindow(thread->source_text = new ChannelEditEditSource(x, y, thread));
 	x += 160;
 	add_subwindow(new ChannelEditEditSourceTumbler(x, y, thread));
 	y += 40;
 	x = 10;
-	add_subwindow(new BC_Title(x, y, "Fine:"));
+	add_subwindow(new BC_Title(x, y, _("Fine:")));
 	add_subwindow(new ChannelEditEditFine(x + 130, y, thread));
 	y += 30;
-	add_subwindow(new BC_Title(x, y, "Norm:"));
+	add_subwindow(new BC_Title(x, y, _("Norm:")));
 	ChannelEditEditNorm *norm;
 	add_subwindow(norm = new ChannelEditEditNorm(x + 130, y, thread));
 	norm->add_items();
 
 	y += 30;
-	add_subwindow(new BC_Title(x, y, "Frequency table:"));
+	add_subwindow(new BC_Title(x, y, _("Frequency table:")));
 	ChannelEditEditFreqtable *table;
 	add_subwindow(table = new ChannelEditEditFreqtable(x + 130, y, thread));
 	table->add_items();
 
 	y += 30;
-	add_subwindow(new BC_Title(x, y, "Input:"));
+	add_subwindow(new BC_Title(x, y, _("Input:")));
 	ChannelEditEditInput *input;
 	add_subwindow(input = new ChannelEditEditInput(x + 130, y, thread, thread->record));
 	input->add_items();
@@ -952,19 +956,19 @@
 int ChannelEditPictureWindow::create_objects()
 {
 	int x = 10, y = 10;
-	add_subwindow(new BC_Title(x, y + 10, "Brightness:"));
+	add_subwindow(new BC_Title(x, y + 10, _("Brightness:")));
 	add_subwindow(new ChannelEditBright(x + 100, y, channel_picker, channel_picker->get_brightness()));
 	y += 30;
-	add_subwindow(new BC_Title(x, y + 10, "Contrast:"));
+	add_subwindow(new BC_Title(x, y + 10, _("Contrast:")));
 	add_subwindow(new ChannelEditContrast(x + 135, y, channel_picker, channel_picker->get_contrast()));
 	y += 30;
-	add_subwindow(new BC_Title(x, y + 10, "Color:"));
+	add_subwindow(new BC_Title(x, y + 10, _("Color:")));
 	add_subwindow(new ChannelEditColor(x + 100, y, channel_picker, channel_picker->get_color()));
 	y += 30;
-	add_subwindow(new BC_Title(x, y + 10, "Hue:"));
+	add_subwindow(new BC_Title(x, y + 10, _("Hue:")));
 	add_subwindow(new ChannelEditHue(x + 135, y, channel_picker, channel_picker->get_hue()));
 	y += 30;
-	add_subwindow(new BC_Title(x, y + 10, "Whiteness:"));
+	add_subwindow(new BC_Title(x, y + 10, _("Whiteness:")));
 	add_subwindow(new ChannelEditWhiteness(x + 100, y, channel_picker, channel_picker->get_whiteness()));
 	y += 50;
 	x += 70;
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/channelpicker.C hvirtual-1.1.7/cinelerra/channelpicker.C
--- base-1.1.7/cinelerra/channelpicker.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/channelpicker.C	2003-09-22 12:07:39.000000000 +0200
@@ -13,6 +13,11 @@
 #include "vdevicebuz.h"
 #include "vdeviceprefs.h"
 
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
+
 
 PrefsChannelPicker::PrefsChannelPicker(MWindow *mwindow, 
 		VDevicePrefs *prefs, 
@@ -331,7 +336,7 @@
 		return get_current_channel_struct()->title;
 	}
 	else
-		return "Channel";
+		return _("Channel");
 }
 
 int ChannelPicker::channel_down()
@@ -363,7 +368,7 @@
 		channel_picker, 
 		channel_picker->channeldb,
 		channel_picker->record);
-	set_tooltip("Edit channels");
+	set_tooltip(_("Edit channels"));
 }
 
 ChannelButton::~ChannelButton()
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/clipedit.C hvirtual-1.1.7/cinelerra/clipedit.C
--- base-1.1.7/cinelerra/clipedit.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/clipedit.C	2003-09-22 12:08:57.000000000 +0200
@@ -10,6 +10,10 @@
 #include "vwindow.h"
 #include "vwindowgui.h"
 
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
 
 
 
@@ -152,11 +156,11 @@
 	BC_TextBox *textbox;
 	BC_Title *title;
 
-	add_subwindow(title = new BC_Title(x1, y, "Title:"));
+	add_subwindow(title = new BC_Title(x1, y, _("Title:")));
 	y += title->get_h() + 5;
 	add_subwindow(textbox = new ClipEditTitle(this, x1, y, get_w() - x1 * 2));
 	y += textbox->get_h() + 10;
-	add_subwindow(title = new BC_Title(x1, y, "Comments:"));
+	add_subwindow(title = new BC_Title(x1, y, _("Comments:")));
 	y += title->get_h() + 5;
 	add_subwindow(textbox = new ClipEditComments(this, 
 		x1, 
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/compresspopup.C hvirtual-1.1.7/cinelerra/compresspopup.C
--- base-1.1.7/cinelerra/compresspopup.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/compresspopup.C	2003-09-22 12:10:03.000000000 +0200
@@ -3,6 +3,12 @@
 #include "quicktime.h"
 #include <string.h>
 
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
+
+
 CompressPopup::CompressPopup(int x, int y, int use_dv, char *text)
  : BC_PopupMenu(x, y, 80, File::compressiontostr(text))
 {
@@ -12,15 +18,15 @@
 
 int CompressPopup::add_items()
 {
-	if(!use_dv) add_item(format_items[0] = new CompressPopupItem("DV"));
-	add_item(format_items[1] = new CompressPopupItem("JPEG"));
-	add_item(format_items[2] = new CompressPopupItem("MJPA"));
-	add_item(format_items[3] = new CompressPopupItem("PNG"));
-	add_item(format_items[4] = new CompressPopupItem("PNG-Alpha"));
-	add_item(format_items[5] = new CompressPopupItem("RGB"));
-	add_item(format_items[6] = new CompressPopupItem("RGB-Alpha"));
-	add_item(format_items[7] = new CompressPopupItem("YUV420"));
-	add_item(format_items[8] = new CompressPopupItem("YUV422"));
+	if(!use_dv) add_item(format_items[0] = new CompressPopupItem(_("DV")));
+	add_item(format_items[1] = new CompressPopupItem(_("JPEG")));
+	add_item(format_items[2] = new CompressPopupItem(_("MJPA")));
+	add_item(format_items[3] = new CompressPopupItem(_("PNG")));
+	add_item(format_items[4] = new CompressPopupItem(_("PNG-Alpha")));
+	add_item(format_items[5] = new CompressPopupItem(_("RGB")));
+	add_item(format_items[6] = new CompressPopupItem(_("RGB-Alpha")));
+	add_item(format_items[7] = new CompressPopupItem(_("YUV420")));
+	add_item(format_items[8] = new CompressPopupItem(_("YUV422")));
 	return 0;
 }
 
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/confirmquit.C hvirtual-1.1.7/cinelerra/confirmquit.C
--- base-1.1.7/cinelerra/confirmquit.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/confirmquit.C	2003-09-22 12:10:43.000000000 +0200
@@ -4,6 +4,13 @@
 #include "mwindowgui.h"
 #include "theme.h"
 
+
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
+
+
 ConfirmQuitWindow::ConfirmQuitWindow(MWindow *mwindow)
  : BC_Window(PROGRAM_NAME ": Question", 
  	mwindow->gui->get_abs_cursor_x(), 
@@ -27,7 +34,7 @@
 	add_subwindow(title = new BC_Title(x, y, string));
 	y += title->get_h();
 //printf("ConfirmQuitWindow::create_objects 1\n");
-	add_subwindow(title = new BC_Title(x, y, "( Answering ""No"" will destroy changes )"));
+	add_subwindow(title = new BC_Title(x, y, _("( Answering ""No"" will destroy changes )")));
 	y = get_h() - 40;
 //printf("ConfirmQuitWindow::create_objects 1\n");
 	add_subwindow(new ConfirmQuitYesButton(mwindow, x, y));
@@ -42,7 +49,7 @@
 }
 
 ConfirmQuitYesButton::ConfirmQuitYesButton(MWindow *mwindow, int x, int y)
- : BC_GenericButton(x, y, "Yes")
+ : BC_GenericButton(x, y, _("Yes"))
 {
 	set_underline(0);
 }
@@ -60,7 +67,7 @@
 }
 
 ConfirmQuitNoButton::ConfirmQuitNoButton(MWindow *mwindow, int x, int y)
- : BC_GenericButton(x, y, "No")
+ : BC_GenericButton(x, y, _("No"))
 {
 	set_underline(0);
 }
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/confirmsave.C hvirtual-1.1.7/cinelerra/confirmsave.C
--- base-1.1.7/cinelerra/confirmsave.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/confirmsave.C	2003-09-22 12:11:13.000000000 +0200
@@ -2,6 +2,13 @@
 #include "mwindow.h"
 #include "mwindowgui.h"
 
+
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
+
+
 ConfirmSave::ConfirmSave(MWindow *mwindow)
 {
 	this->mwindow = mwindow;
@@ -48,7 +55,7 @@
 {
 	char string[1024];
 	int x = 10, y = 10;
-	sprintf(string, "Overwrite %s?", filename);
+	sprintf(string, _("Overwrite %s?"), filename);
 	add_subwindow(new BC_Title(5, 5, string));
 	y += 30;
 	add_subwindow(new BC_OKButton(this));
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/cpanel.C hvirtual-1.1.7/cinelerra/cpanel.C
--- base-1.1.7/cinelerra/cpanel.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/cpanel.C	2003-09-22 12:11:58.000000000 +0200
@@ -8,6 +8,12 @@
 #include "theme.h"
 
 
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
+
+
 CPanel::CPanel(MWindow *mwindow, 
 	CWindowGUI *subwindow, 
 	int x, 
@@ -101,7 +107,7 @@
 {
 	this->mwindow = mwindow;
 	this->gui = gui;
-	set_tooltip("Protect video from changes");
+	set_tooltip(_("Protect video from changes"));
 }
 CPanelProtect::~CPanelProtect()
 {
@@ -125,7 +131,7 @@
 {
 	this->mwindow = mwindow;
 	this->gui = gui;
-	set_tooltip("Edit mask");
+	set_tooltip(_("Edit mask"));
 }
 CPanelMask::~CPanelMask()
 {
@@ -145,7 +151,7 @@
 {
 	this->mwindow = mwindow;
 	this->gui = gui;
-	set_tooltip("Zoom view");
+	set_tooltip(_("Zoom view"));
 }
 CPanelMagnify::~CPanelMagnify()
 {
@@ -165,7 +171,7 @@
 {
 	this->mwindow = mwindow;
 	this->gui = gui;
-	set_tooltip("Adjust camera automation");
+	set_tooltip(_("Adjust camera automation"));
 }
 CPanelCamera::~CPanelCamera()
 {
@@ -185,7 +191,7 @@
 {
 	this->mwindow = mwindow;
 	this->gui = gui;
-	set_tooltip("Adjust projector automation");
+	set_tooltip(_("Adjust projector automation"));
 }
 CPanelProj::~CPanelProj()
 {
@@ -205,7 +211,7 @@
 {
 	this->mwindow = mwindow;
 	this->gui = gui;
-	set_tooltip("Crop a layer or output");
+	set_tooltip(_("Crop a layer or output"));
 }
 CPanelCrop::~CPanelCrop()
 {
@@ -227,7 +233,7 @@
 {
 	this->mwindow = mwindow;
 	this->gui = gui;
-	set_tooltip("Show tool info");
+	set_tooltip(_("Show tool info"));
 }
 CPanelToolWindow::~CPanelToolWindow()
 {
@@ -248,7 +254,7 @@
 {
 	this->mwindow = mwindow;
 	this->gui = gui;
-	set_tooltip("Show safe regions");
+	set_tooltip(_("Show safe regions"));
 }
 CPanelTitleSafe::~CPanelTitleSafe()
 {
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/cropvideo.C hvirtual-1.1.7/cinelerra/cropvideo.C
--- base-1.1.7/cinelerra/cropvideo.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/cropvideo.C	2003-09-22 12:12:43.000000000 +0200
@@ -6,8 +6,15 @@
 #include "videowindow.h"
 #include "videowindowgui.h"
 
+
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
+
+
 CropVideo::CropVideo(MWindow *mwindow)
- : BC_MenuItem("Crop Video..."), Thread()
+ : BC_MenuItem(_("Crop Video...")), Thread()
 {
 	this->mwindow = mwindow;
 }
@@ -41,7 +48,7 @@
 		offsets[0] = -(mwindow->video_window->gui->x1 + mwindow->video_window->gui->x2 - mwindow->session->output_w) / 2;
 		offsets[1] = -(mwindow->video_window->gui->y1 + mwindow->video_window->gui->y2 - mwindow->session->output_h) / 2;
 		offsets[2] = offsets[3] = 0;
-//		mwindow->undo->update_undo_edits("Crop", 0);
+//		mwindow->undo->update_undo_edits(_("Crop"), 0);
 		
 		mwindow->tracks->scale_video(dummy_dimension, offsets, 0);
 		mwindow->session->track_w = mwindow->video_window->gui->x2 - mwindow->video_window->gui->x1;
@@ -82,7 +89,7 @@
 int CropVideoWindow::create_objects()
 {
 	int x = 10, y = 10;
-	add_subwindow(new BC_Title(x, y, "Select a region to crop in the video output window"));
+	add_subwindow(new BC_Title(x, y, _("Select a region to crop in the video output window")));
 	y += 30;
 	add_subwindow(new BC_OKButton(x, y));
 	x = get_w() - 100;
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/cwindowgui.C hvirtual-1.1.7/cinelerra/cwindowgui.C
--- base-1.1.7/cinelerra/cwindowgui.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/cwindowgui.C	2003-09-22 12:15:21.000000000 +0200
@@ -35,6 +35,13 @@
 #include "transportque.h"
 #include "vtrack.h"
 
+
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
+
+
 CWindowGUI::CWindowGUI(MWindow *mwindow, CWindow *cwindow)
  : BC_Window(PROGRAM_NAME ": Compositor",
  	mwindow->session->cwindow_x, 
@@ -357,7 +364,7 @@
 		if(mwindow->session->drag_assets->total)
 		{
 			mwindow->gui->lock_window();
-			mwindow->undo->update_undo_before("insert assets", 
+			mwindow->undo->update_undo_before(_("insert assets"), 
 				LOAD_ALL);
 			mwindow->clear(0);
 			mwindow->load_assets(mwindow->session->drag_assets, 
@@ -372,7 +379,7 @@
 		if(mwindow->session->drag_clips->total)
 		{
 			mwindow->gui->lock_window();
-			mwindow->undo->update_undo_before("insert assets", 
+			mwindow->undo->update_undo_before(_("insert assets"), 
 				LOAD_ALL);
 			mwindow->clear(0);
 			mwindow->paste_edls(mwindow->session->drag_clips, 
@@ -1197,7 +1204,7 @@
 			point->control_x2 = 0;
 			point->control_y2 = 0;
 
-			mwindow->undo->update_undo_before("mask point", LOAD_AUTOMATION);
+			mwindow->undo->update_undo_before(_("mask point"), LOAD_AUTOMATION);
 
 			if(shortest_point2 < shortest_point1)
 			{
@@ -1398,7 +1405,7 @@
 				!EQUIV(last_control_x2, point->control_x2) ||
 				!EQUIV(last_control_y2, point->control_y2))
 			{
-				mwindow->undo->update_undo_before("tweek", LOAD_AUTOMATION);
+				mwindow->undo->update_undo_before(_("tweek"), LOAD_AUTOMATION);
 				rerender = 1;
 				redraw = 1;
 			}
@@ -2251,7 +2258,7 @@
 
 			if(!gui->affected_auto)
 			{
-				mwindow->undo->update_undo_before("keyframe", LOAD_AUTOMATION);
+				mwindow->undo->update_undo_before(_("keyframe"), LOAD_AUTOMATION);
 				if(mwindow->edl->session->cwindow_operation == CWINDOW_CAMERA)
 				{
 					if(gui->translating_zoom)
@@ -2310,7 +2317,7 @@
 				zoom_keyframe->value = gui->center_z + (cursor_y - gui->y_origin) / 128;
 				if(!EQUIV(last_center_z, zoom_keyframe->value))
 				{
-					mwindow->undo->update_undo_before("tweek", LOAD_AUTOMATION);
+					mwindow->undo->update_undo_before(_("tweek"), LOAD_AUTOMATION);
 					rerender = 1;
 					redraw = 1;
 					redraw_canvas = 1;
@@ -2323,7 +2330,7 @@
 				if(!EQUIV(last_center_x,  bezier_keyframe->center_x) ||
 				   	!EQUIV(last_center_y, bezier_keyframe->center_y))
 				{
-					mwindow->undo->update_undo_before("tweek", LOAD_AUTOMATION);
+					mwindow->undo->update_undo_before(_("tweek"), LOAD_AUTOMATION);
 					rerender = 1;
 					redraw = 1;
 				}
@@ -2342,7 +2349,7 @@
 			if(!EQUIV(last_control_in_x, bezier_keyframe->control_in_x) ||
 				!EQUIV(last_control_in_y, bezier_keyframe->control_in_y))
 			{
-				mwindow->undo->update_undo_before("tweek", LOAD_AUTOMATION);
+				mwindow->undo->update_undo_before(_("tweek"), LOAD_AUTOMATION);
 				rerender = 1;
 				redraw = 1;
 			}
@@ -2360,7 +2367,7 @@
 			if(!EQUIV(last_control_out_x, bezier_keyframe->control_out_x) ||
 				!EQUIV(last_control_out_y, bezier_keyframe->control_out_y))
 			{
-				mwindow->undo->update_undo_before("tweek", LOAD_AUTOMATION);
+				mwindow->undo->update_undo_before(_("tweek"), LOAD_AUTOMATION);
 				rerender = 1;
 				redraw = 1;
 			}
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/cwindowtool.C hvirtual-1.1.7/cinelerra/cwindowtool.C
--- base-1.1.7/cinelerra/cwindowtool.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/cwindowtool.C	2003-09-22 12:18:06.000000000 +0200
@@ -23,6 +23,11 @@
 #include "trackcanvas.h"
 #include "transportque.h"
 
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
+
 CWindowTool::CWindowTool(MWindow *mwindow, CWindowGUI *gui)
  : Thread()
 {
@@ -253,7 +258,7 @@
 
 
 CWindowCropOK::CWindowCropOK(MWindow *mwindow, CWindowToolGUI *gui, int x, int y)
- : BC_GenericButton(x, y, "Do it")
+ : BC_GenericButton(x, y, _("Do it"))
 {
 	this->mwindow = mwindow;
 	this->gui = gui;
@@ -301,26 +306,26 @@
 	BC_TumbleTextBox *textbox;
 	BC_Title *title;
 
-	add_subwindow(title = new BC_Title(x, y, "X1:"));
+	add_subwindow(title = new BC_Title(x, y, _("X1:")));
 	x += title->get_w();
 	x1 = new CWindowCoord(thread->tool_gui, x, y, mwindow->edl->session->crop_x1);
 	x1->create_objects();
 	x += x1->get_w() + 10;
 
-	add_subwindow(title = new BC_Title(x, y, "Y1:"));
+	add_subwindow(title = new BC_Title(x, y, _("Y1:")));
 	x += title->get_w();
 	y1 = new CWindowCoord(thread->tool_gui, x, y, mwindow->edl->session->crop_y1);
 	y1->create_objects();
 	y += y1->get_h() + 5;
 	x = 10;
 
-	add_subwindow(title = new BC_Title(x, y, "X2:"));
+	add_subwindow(title = new BC_Title(x, y, _("X2:")));
 	x += title->get_w();
 	x2 = new CWindowCoord(thread->tool_gui, x, y, mwindow->edl->session->crop_x2);
 	x2->create_objects();
 	x += x2->get_w() + 10;
 
-	add_subwindow(title = new BC_Title(x, y, "Y2:"));
+	add_subwindow(title = new BC_Title(x, y, _("Y2:")));
 	x += title->get_w();
 	y2 = new CWindowCoord(thread->tool_gui, x, y, mwindow->edl->session->crop_y2);
 	y2->create_objects();
@@ -393,7 +398,7 @@
 			0);
 	}
 
-	add_subwindow(title = new BC_Title(x, y, "X:"));
+	add_subwindow(title = new BC_Title(x, y, _("X:")));
 	x += title->get_w();
 	this->x = new CWindowCoord(this, 
 		x, 
@@ -402,7 +407,7 @@
 	this->x->create_objects();
 	y += 30;
 	x = 10;
-	add_subwindow(title = new BC_Title(x, y, "Y:"));
+	add_subwindow(title = new BC_Title(x, y, _("Y:")));
 	x += title->get_w();
 	this->y = new CWindowCoord(this, 
 		x, 
@@ -411,7 +416,7 @@
 	this->y->create_objects();
 	y += 30;
 	x = 10;
-	add_subwindow(title = new BC_Title(x, y, "Z:"));
+	add_subwindow(title = new BC_Title(x, y, _("Z:")));
 	x += title->get_w();
 	this->z = new CWindowCoord(this, 
 		x, 
@@ -541,7 +546,7 @@
 {
 	this->gui = gui;
 	this->mwindow = mwindow;
-	set_tooltip("Left justify");
+	set_tooltip(_("Left justify"));
 }
 int CWindowCameraLeft::handle_event()
 {
@@ -576,7 +581,7 @@
 {
 	this->gui = gui;
 	this->mwindow = mwindow;
-	set_tooltip("Center horizontal");
+	set_tooltip(_("Center horizontal"));
 }
 int CWindowCameraCenter::handle_event()
 {
@@ -601,7 +606,7 @@
 {
 	this->gui = gui;
 	this->mwindow = mwindow;
-	set_tooltip("Right justify");
+	set_tooltip(_("Right justify"));
 }
 int CWindowCameraRight::handle_event()
 {
@@ -635,7 +640,7 @@
 {
 	this->gui = gui;
 	this->mwindow = mwindow;
-	set_tooltip("Top justify");
+	set_tooltip(_("Top justify"));
 }
 int CWindowCameraTop::handle_event()
 {
@@ -669,7 +674,7 @@
 {
 	this->gui = gui;
 	this->mwindow = mwindow;
-	set_tooltip("Center vertical");
+	set_tooltip(_("Center vertical"));
 }
 int CWindowCameraMiddle::handle_event()
 {
@@ -694,7 +699,7 @@
 {
 	this->gui = gui;
 	this->mwindow = mwindow;
-	set_tooltip("Bottom justify");
+	set_tooltip(_("Bottom justify"));
 }
 int CWindowCameraBottom::handle_event()
 {
@@ -768,7 +773,7 @@
 			0);
 	}
 
-	add_subwindow(title = new BC_Title(x, y, "X:"));
+	add_subwindow(title = new BC_Title(x, y, _("X:")));
 	x += title->get_w();
 	this->x = new CWindowCoord(this, 
 		x, 
@@ -777,7 +782,7 @@
 	this->x->create_objects();
 	y += 30;
 	x = 10;
-	add_subwindow(title = new BC_Title(x, y, "Y:"));
+	add_subwindow(title = new BC_Title(x, y, _("Y:")));
 	x += title->get_w();
 	this->y = new CWindowCoord(this, 
 		x, 
@@ -786,7 +791,7 @@
 	this->y->create_objects();
 	y += 30;
 	x = 10;
-	add_subwindow(title = new BC_Title(x, y, "Z:"));
+	add_subwindow(title = new BC_Title(x, y, _("Z:")));
 	x += title->get_w();
 	this->z = new CWindowCoord(this, 
 		x, 
@@ -944,7 +949,7 @@
 {
 	this->gui = gui;
 	this->mwindow = mwindow;
-	set_tooltip("Left justify");
+	set_tooltip(_("Left justify"));
 }
 int CWindowProjectorLeft::handle_event()
 {
@@ -970,7 +975,7 @@
 {
 	this->gui = gui;
 	this->mwindow = mwindow;
-	set_tooltip("Center horizontal");
+	set_tooltip(_("Center horizontal"));
 }
 int CWindowProjectorCenter::handle_event()
 {
@@ -995,7 +1000,7 @@
 {
 	this->gui = gui;
 	this->mwindow = mwindow;
-	set_tooltip("Right justify");
+	set_tooltip(_("Right justify"));
 }
 int CWindowProjectorRight::handle_event()
 {
@@ -1021,7 +1026,7 @@
 {
 	this->gui = gui;
 	this->mwindow = mwindow;
-	set_tooltip("Top justify");
+	set_tooltip(_("Top justify"));
 }
 int CWindowProjectorTop::handle_event()
 {
@@ -1047,7 +1052,7 @@
 {
 	this->gui = gui;
 	this->mwindow = mwindow;
-	set_tooltip("Center vertical");
+	set_tooltip(_("Center vertical"));
 }
 int CWindowProjectorMiddle::handle_event()
 {
@@ -1072,7 +1077,7 @@
 {
 	this->gui = gui;
 	this->mwindow = mwindow;
-	set_tooltip("Bottom justify");
+	set_tooltip(_("Bottom justify"));
 }
 int CWindowProjectorBottom::handle_event()
 {
@@ -1125,23 +1130,23 @@
 	switch(mode)
 	{
 		case MASK_MULTIPLY_ALPHA:
-			return "Multiply alpha";
+			return _("Multiply alpha");
 			break;
 		
 		case MASK_SUBTRACT_ALPHA:
-			return "Subtract alpha";
+			return _("Subtract alpha");
 			break;
 	}
 
-	return "Subtract alpha";
+	return _("Subtract alpha");
 }
 
 int CWindowMaskMode::text_to_mode(char *text)
 {
-	if(!strcasecmp(text, "Multiply alpha"))
+	if(!strcasecmp(text, _("Multiply alpha")))
 		return MASK_MULTIPLY_ALPHA;
 	else
-	if(!strcasecmp(text, "Subtract alpha"))
+	if(!strcasecmp(text, _("Subtract alpha")))
 		return MASK_SUBTRACT_ALPHA;
 
 	return MASK_SUBTRACT_ALPHA;
@@ -1181,7 +1186,7 @@
 	CWindowToolGUI *gui, 
 	int x, 
 	int y)
- : BC_GenericButton(x, y, "Delete")
+ : BC_GenericButton(x, y, _("Delete"))
 {
 	this->mwindow = mwindow;
 	this->gui = gui;
@@ -1268,7 +1273,7 @@
 
 
 CWindowMaskCycleNext::CWindowMaskCycleNext(MWindow *mwindow, CWindowToolGUI *gui, int x, int y)
- : BC_GenericButton(x, y, "Cycle next")
+ : BC_GenericButton(x, y, _("Cycle next"))
 {
 	this->mwindow = mwindow;
 	this->gui = gui;
@@ -1310,7 +1315,7 @@
 }
 
 CWindowMaskCyclePrev::CWindowMaskCyclePrev(MWindow *mwindow, CWindowToolGUI *gui, int x, int y)
- : BC_GenericButton(x, y, "Cycle prev")
+ : BC_GenericButton(x, y, _("Cycle prev"))
 {
 	this->mwindow = mwindow;
 	this->gui = gui;
@@ -1486,7 +1491,7 @@
 //printf("CWindowMaskGUI::create_objects 1\n");
 
 	BC_Title *title;
-	add_subwindow(title = new BC_Title(x, y, "Mode:"));
+	add_subwindow(title = new BC_Title(x, y, _("Mode:")));
 	add_subwindow(mode = new CWindowMaskMode(mwindow, 
 		this, 
 		x + title->get_w(), 
@@ -1495,7 +1500,7 @@
 //printf("CWindowMaskGUI::create_objects 1\n");
 	mode->create_objects();
 	y += 40;
-	add_subwindow(new BC_Title(x, y, "Value:"));
+	add_subwindow(new BC_Title(x, y, _("Value:")));
 	add_subwindow(value = new CWindowMaskValue(mwindow, this, x + 50, y));
 	y += 30;
 	add_subwindow(delete_point = new CWindowMaskDelete(mwindow, this, x, y));
@@ -1504,7 +1509,7 @@
 //	y += 30;
 //	add_subwindow(prev_point = new CWindowMaskCyclePrev(mwindow, this, x, y));
 //	y += 40;
-	add_subwindow(new BC_Title(x, y, "Mask number:"));
+	add_subwindow(new BC_Title(x, y, _("Mask number:")));
 	number = new CWindowMaskNumber(mwindow, 
 		this, 
 		x + 110, 
@@ -1512,14 +1517,14 @@
 //printf("CWindowMaskGUI::create_objects 1\n");
 	number->create_objects();
 	y += 30;
-	add_subwindow(new BC_Title(x, y, "Feather:"));
+	add_subwindow(new BC_Title(x, y, _("Feather:")));
 	feather = new CWindowMaskFeather(mwindow,
 		this,
 		x + 110,
 		y);
 	feather->create_objects();
 	y += 30;
-	add_subwindow(title = new BC_Title(x, y, "X:"));
+	add_subwindow(title = new BC_Title(x, y, _("X:")));
 	x += title->get_w();
 	this->x = new CWindowCoord(this, 
 		x, 
@@ -1527,7 +1532,7 @@
 		(float)0.0);
 	this->x->create_objects();
 	x += 150;
-	add_subwindow(title = new BC_Title(x, y, "Y:"));
+	add_subwindow(title = new BC_Title(x, y, _("Y:")));
 	x += title->get_w();
 	this->y = new CWindowCoord(this, 
 		x, 
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/dcoffset.C hvirtual-1.1.7/cinelerra/dcoffset.C
--- base-1.1.7/cinelerra/dcoffset.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/dcoffset.C	2003-09-22 12:19:39.000000000 +0200
@@ -3,6 +3,11 @@
 #include "mutex.h"
 #include "recordgui.h"
 
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
+
 
 
 DC_Offset::DC_Offset()
@@ -32,7 +37,7 @@
 // thread out progress box
 	progress = new BC_ProgressBox((int)BC_INFINITY, 
 		(int)BC_INFINITY, 
-		"DC Offset", 
+		_("DC Offset"), 
 		256000);
 	progress->start();
 
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/deleteallindexes.C hvirtual-1.1.7/cinelerra/deleteallindexes.C
--- base-1.1.7/cinelerra/deleteallindexes.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/deleteallindexes.C	2003-09-22 12:20:08.000000000 +0200
@@ -8,9 +8,13 @@
 #include "theme.h"
 #include <string.h>
 
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
 
 DeleteAllIndexes::DeleteAllIndexes(MWindow *mwindow, PreferencesWindow *pwindow, int x, int y)
- : BC_GenericButton(x, y, "Delete existing indexes"), Thread()
+ : BC_GenericButton(x, y, _("Delete existing indexes")), Thread()
 {
 	this->mwindow = mwindow;
 	this->pwindow = pwindow;
@@ -33,7 +37,7 @@
 
 //	pwindow->disable_window();
 	char string[1024];
-	sprintf(string, "Delete all indexes in %s?", string1);
+	sprintf(string, _("Delete all indexes in %s?"), string1);
 //	QuestionWindow confirm(mwindow);
 //	confirm.create_objects(string, 0);
 
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/editpanel.C hvirtual-1.1.7/cinelerra/editpanel.C
--- base-1.1.7/cinelerra/editpanel.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/editpanel.C	2003-09-22 12:24:01.000000000 +0200
@@ -22,6 +22,11 @@
 #include "transportque.h"
 #include "zoombar.h"
 
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
+
 
 EditPanel::EditPanel(MWindow *mwindow, 
 	BC_WindowBase *subwindow,
@@ -455,7 +460,7 @@
 {
 	this->mwindow = mwindow;
 	this->panel = panel;
-	set_tooltip("In point ( [ )");
+	set_tooltip(_("In point ( [ )"));
 }
 EditInPoint::~EditInPoint()
 {
@@ -480,7 +485,7 @@
 {
 	this->mwindow = mwindow;
 	this->panel = panel;
-	set_tooltip("Out point ( ] )");
+	set_tooltip(_("Out point ( ] )"));
 }
 EditOutPoint::~EditOutPoint()
 {
@@ -505,7 +510,7 @@
 {
 	this->mwindow = mwindow;
 	this->panel = panel;
-	set_tooltip("Delete in point");
+	set_tooltip(_("Delete in point"));
 }
 EditDelInPoint::~EditDelInPoint()
 {
@@ -530,7 +535,7 @@
 {
 	this->mwindow = mwindow;
 	this->panel = panel;
-	set_tooltip("Delete out point");
+	set_tooltip(_("Delete out point"));
 }
 EditDelOutPoint::~EditDelOutPoint()
 {
@@ -560,7 +565,7 @@
 	this->mwindow = mwindow;
 	this->panel = panel;
 	this->is_mwindow = is_mwindow;
-	set_tooltip("Next label ( ctrl -> )");
+	set_tooltip(_("Next label ( ctrl -> )"));
 }
 EditNextLabel::~EditNextLabel()
 {
@@ -587,7 +592,7 @@
 	this->mwindow = mwindow;
 	this->panel = panel;
 	this->is_mwindow = is_mwindow;
-	set_tooltip("Previous label ( ctrl <- )");
+	set_tooltip(_("Previous label ( ctrl <- )"));
 }
 EditPrevLabel::~EditPrevLabel()
 {
@@ -609,7 +614,7 @@
 {
 	this->mwindow = mwindow;
 	this->panel = panel;
-	set_tooltip("Lift");
+	set_tooltip(_("Lift"));
 }
 EditLift::~EditLift()
 {
@@ -624,7 +629,7 @@
 {
 	this->mwindow = mwindow;
 	this->panel = panel;
-	set_tooltip("Overwrite ( b )");
+	set_tooltip(_("Overwrite ( b )"));
 }
 EditOverwrite::~EditOverwrite()
 {
@@ -649,7 +654,7 @@
 {
 	this->mwindow = mwindow;
 	this->panel = panel;
-	set_tooltip("Extract");
+	set_tooltip(_("Extract"));
 }
 EditExtract::~EditExtract()
 {
@@ -665,7 +670,7 @@
 {
 	this->mwindow = mwindow;
 	this->panel = panel;
-	set_tooltip("To clip");
+	set_tooltip(_("To clip"));
 }
 EditToClip::~EditToClip()
 {
@@ -681,7 +686,7 @@
 {
 	this->mwindow = mwindow;
 	this->panel = panel;
-	set_tooltip("Splice ( v )");
+	set_tooltip(_("Splice ( v )"));
 }
 EditSplice::~EditSplice()
 {
@@ -706,7 +711,7 @@
 {
 	this->mwindow = mwindow;
 	this->panel = panel;
-	set_tooltip("Cut ( x )");
+	set_tooltip(_("Cut ( x )"));
 }
 EditCut::~EditCut()
 {
@@ -731,7 +736,7 @@
 {
 	this->mwindow = mwindow;
 	this->panel = panel;
-	set_tooltip("Copy ( c )");
+	set_tooltip(_("Copy ( c )"));
 }
 EditCopy::~EditCopy()
 {
@@ -754,7 +759,7 @@
 {
 	this->mwindow = mwindow;
 	this->panel = panel;
-	set_tooltip("Append to end of track");
+	set_tooltip(_("Append to end of track"));
 }
 EditAppend::~EditAppend()
 {
@@ -772,7 +777,7 @@
 {
 	this->mwindow = mwindow;
 	this->panel = panel;
-	set_tooltip("Insert before beginning of track");
+	set_tooltip(_("Insert before beginning of track"));
 }
 EditInsert::~EditInsert()
 {
@@ -791,7 +796,7 @@
 {
 	this->mwindow = mwindow;
 	this->panel = panel;
-	set_tooltip("Paste ( v )");
+	set_tooltip(_("Paste ( v )"));
 }
 EditPaste::~EditPaste()
 {
@@ -818,7 +823,7 @@
 {
 	this->mwindow = mwindow;
 	this->panel = panel;
-	set_tooltip("Set transition");
+	set_tooltip(_("Set transition"));
 }
 EditTransition::~EditTransition()
 {
@@ -833,7 +838,7 @@
 {
 	this->mwindow = mwindow;
 	this->panel = panel;
-	set_tooltip("Set presentation up to current position");
+	set_tooltip(_("Set presentation up to current position"));
 }
 EditPresentation::~EditPresentation()
 {
@@ -848,7 +853,7 @@
 {
 	this->mwindow = mwindow;
 	this->panel = panel;
-	set_tooltip("Undo ( z )");
+	set_tooltip(_("Undo ( z )"));
 }
 EditUndo::~EditUndo()
 {
@@ -870,7 +875,7 @@
 {
 	this->mwindow = mwindow;
 	this->panel = panel;
-	set_tooltip("Redo ( shift Z )");
+	set_tooltip(_("Redo ( shift Z )"));
 }
 EditRedo::~EditRedo()
 {
@@ -896,7 +901,7 @@
 {
 	this->mwindow = mwindow;
 	this->panel = panel;
-	set_tooltip("Toggle label at current position ( l )");
+	set_tooltip(_("Toggle label at current position ( l )"));
 }
 
 EditLabelbutton::~EditLabelbutton()
@@ -925,7 +930,7 @@
 {
 	this->mwindow = mwindow;
 	this->panel = panel;
-	set_tooltip("Fit selection to display ( f )");
+	set_tooltip(_("Fit selection to display ( f )"));
 }
 EditFit::~EditFit()
 {
@@ -958,7 +963,7 @@
 {
 	this->mwindow = mwindow;
 	this->panel = panel;
-	set_tooltip("Drag and drop editing mode");
+	set_tooltip(_("Drag and drop editing mode"));
 }
 
 int ArrowButton::handle_event()
@@ -983,7 +988,7 @@
 {
 	this->mwindow = mwindow;
 	this->panel = panel;
-	set_tooltip("Cut and paste editing mode");
+	set_tooltip(_("Cut and paste editing mode"));
 }
 
 int IBeamButton::handle_event()
@@ -1006,7 +1011,7 @@
 	0)
 {
 	this->mwindow = mwindow;
-	set_tooltip("Generate keyframes while tweeking");
+	set_tooltip(_("Generate keyframes while tweeking"));
 }
 
 int KeyFrameButton::handle_event()
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/editpopup.C hvirtual-1.1.7/cinelerra/editpopup.C
--- base-1.1.7/cinelerra/editpopup.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/editpopup.C	2003-09-22 12:24:46.000000000 +0200
@@ -8,6 +8,11 @@
 #include "tracks.h"
 #include "trackcanvas.h"
 
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
+
 EditPopup::EditPopup(MWindow *mwindow, MWindowGUI *gui)
  : BC_PopupMenu(0, 
 		0, 
@@ -63,7 +68,7 @@
 
 
 EditAttachEffect::EditAttachEffect(MWindow *mwindow, EditPopup *popup)
- : BC_MenuItem("Attach effect...")
+ : BC_MenuItem(_("Attach effect..."))
 {
 	this->mwindow = mwindow;
 	this->popup = popup;
@@ -85,7 +90,7 @@
 
 
 EditMoveTrackUp::EditMoveTrackUp(MWindow *mwindow, EditPopup *popup)
- : BC_MenuItem("Move up")
+ : BC_MenuItem(_("Move up"))
 {
 	this->mwindow = mwindow;
 	this->popup = popup;
@@ -102,7 +107,7 @@
 
 
 EditMoveTrackDown::EditMoveTrackDown(MWindow *mwindow, EditPopup *popup)
- : BC_MenuItem("Move down")
+ : BC_MenuItem(_("Move down"))
 {
 	this->mwindow = mwindow;
 	this->popup = popup;
@@ -120,7 +125,7 @@
 
 
 EditPopupResize::EditPopupResize(MWindow *mwindow, EditPopup *popup)
- : BC_MenuItem("Resize track...")
+ : BC_MenuItem(_("Resize track..."))
 {
 	this->mwindow = mwindow;
 	this->popup = popup;
@@ -144,7 +149,7 @@
 
 
 EditPopupMatchSize::EditPopupMatchSize(MWindow *mwindow, EditPopup *popup)
- : BC_MenuItem("Match output size")
+ : BC_MenuItem(_("Match output size"))
 {
 	this->mwindow = mwindow;
 	this->popup = popup;
@@ -166,7 +171,7 @@
 
 
 EditPopupDeleteTrack::EditPopupDeleteTrack(MWindow *mwindow, EditPopup *popup)
- : BC_MenuItem("Delete track")
+ : BC_MenuItem(_("Delete track"))
 {
 	this->mwindow = mwindow;
 	this->popup = popup;
@@ -183,7 +188,7 @@
 
 
 EditPopupAddTrack::EditPopupAddTrack(MWindow *mwindow, EditPopup *popup)
- : BC_MenuItem("Add track")
+ : BC_MenuItem(_("Add track"))
 {
 	this->mwindow = mwindow;
 	this->popup = popup;
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/featheredits.C hvirtual-1.1.7/cinelerra/featheredits.C
--- base-1.1.7/cinelerra/featheredits.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/featheredits.C	2003-09-22 12:28:15.000000000 +0200
@@ -3,6 +3,10 @@
 #include "mwindow.h"
 #include "mwindowgui.h"
 
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
 
 
 
@@ -39,7 +43,7 @@
 	if(!result)
 	{
 		mwindow->gui->lock_window();
-//		mwindow->undo->update_undo_edits("Feather", 0);
+//		mwindow->undo->update_undo_edits(_("Feather"), 0);
 		
 		mwindow->feather_edits(feather_samples, audio, video);
 
@@ -72,9 +76,9 @@
 	this->video = video;
 
 	if(audio)
-		add_subwindow(new BC_Title(x, y, "Feather by how many samples:"));
+		add_subwindow(new BC_Title(x, y, _("Feather by how many samples:")));
 	else
-		add_subwindow(new BC_Title(x, y, "Feather by how many frames:"));
+		add_subwindow(new BC_Title(x, y, _("Feather by how many frames:")));
 
 	y += 20;
 	char string[1024];
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/fileavi.C hvirtual-1.1.7/cinelerra/fileavi.C
--- base-1.1.7/cinelerra/fileavi.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/fileavi.C	2003-09-22 12:28:55.000000000 +0200
@@ -19,6 +19,11 @@
 
 #include <string.h>
 
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
+
 
 
 
@@ -758,7 +763,7 @@
 
 			int x = 10, y = 10;
 			BC_Title *title;
-			add_subwindow(title = new BC_Title(x, y, "Codec: "));
+			add_subwindow(title = new BC_Title(x, y, _("Codec: ")));
 			list = new AVIACodecList(this, x, y);
 			list->create_objects();
 			y += list->get_h();
@@ -767,7 +772,7 @@
 #endif
 
 		case FILE_AVI_ARNE2:
-			add_subwindow(new BC_Title(10, 10, "Compressor: 16 bit PCM"));
+			add_subwindow(new BC_Title(10, 10, _("Compressor: 16 bit PCM")));
 			break;
 	}
 
@@ -902,23 +907,23 @@
 
 			int x = 10, y = 10, x1 = 90;
 			BC_Title *title;
-			add_subwindow(title = new BC_Title(x, y, "Codec: "));
+			add_subwindow(title = new BC_Title(x, y, _("Codec: ")));
 			list = new AVIVCodecList(this, x1, y);
 			list->create_objects();
 			y += list->get_h() + 5;
 
-			add_subwindow(title = new BC_Title(x, y, "Attributes:"));
+			add_subwindow(title = new BC_Title(x, y, _("Attributes:")));
 			add_subwindow(attributes = new AVIVAttributeList(this, x1, y));
 			y += attributes->get_h() + 5;
 
-			add_subwindow(new BC_Title(x, y, "Value:"));
+			add_subwindow(new BC_Title(x, y, _("Value:")));
 			add_subwindow(attribute = new AVIVAttribute(this, x1, y));
 			break;
 		}
 #endif
 
 		case FILE_AVI_ARNE2:
-			add_subwindow(new BC_Title(10, 10, "Compressor: Consumer DV"));
+			add_subwindow(new BC_Title(10, 10, _("Compressor: Consumer DV")));
 			break;
 	}
 
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/file.C hvirtual-1.1.7/cinelerra/file.C
--- base-1.1.7/cinelerra/file.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/file.C	2003-09-22 12:35:55.000000000 +0200
@@ -23,6 +23,11 @@
 #include "vframe.h"
 
 
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
+
 
 File::File()
 {
@@ -193,10 +198,10 @@
 		format_window = errorbox;
 		getting_options = 1;
 		if(audio_options)
-			errorbox->create_objects("This format doesn't support audio.");
+			errorbox->create_objects(_("This format doesn't support audio."));
 		else
 		if(video_options)
-			errorbox->create_objects("This format doesn't support video.");
+			errorbox->create_objects(_("This format doesn't support video."));
 		errorbox->run_window();
 		delete errorbox;
 	}
@@ -945,51 +950,51 @@
 
 int File::strtoformat(ArrayList<PluginServer*> *plugindb, char *format)
 {
-	if(!strcasecmp(format, WAV_NAME)) return FILE_WAV;
+	if(!strcasecmp(format, _(WAV_NAME))) return FILE_WAV;
 	else
-	if(!strcasecmp(format, PCM_NAME)) return FILE_PCM;
+	if(!strcasecmp(format, _(PCM_NAME))) return FILE_PCM;
 	else
-	if(!strcasecmp(format, AU_NAME)) return FILE_AU;
+	if(!strcasecmp(format, _(AU_NAME))) return FILE_AU;
 	else
-	if(!strcasecmp(format, AIFF_NAME)) return FILE_AIFF;
+	if(!strcasecmp(format, _(AIFF_NAME))) return FILE_AIFF;
 	else
-	if(!strcasecmp(format, SND_NAME)) return FILE_SND;
+	if(!strcasecmp(format, _(SND_NAME))) return FILE_SND;
 	else
-	if(!strcasecmp(format, PNG_NAME)) return FILE_PNG;
+	if(!strcasecmp(format, _(PNG_NAME))) return FILE_PNG;
 	else
-	if(!strcasecmp(format, PNG_LIST_NAME)) return FILE_PNG_LIST;
+	if(!strcasecmp(format, _(PNG_LIST_NAME))) return FILE_PNG_LIST;
 	else
-	if(!strcasecmp(format, TIFF_NAME)) return FILE_TIFF;
+	if(!strcasecmp(format, _(TIFF_NAME))) return FILE_TIFF;
 	else
-	if(!strcasecmp(format, TIFF_LIST_NAME)) return FILE_TIFF_LIST;
+	if(!strcasecmp(format, _(TIFF_LIST_NAME))) return FILE_TIFF_LIST;
 	else
-	if(!strcasecmp(format, JPEG_NAME)) return FILE_JPEG;
+	if(!strcasecmp(format, _(JPEG_NAME))) return FILE_JPEG;
 	else
-	if(!strcasecmp(format, JPEG_LIST_NAME)) return FILE_JPEG_LIST;
+	if(!strcasecmp(format, _(JPEG_LIST_NAME))) return FILE_JPEG_LIST;
 	else
-	if(!strcasecmp(format, MPEG_NAME)) return FILE_MPEG;
+	if(!strcasecmp(format, _(MPEG_NAME))) return FILE_MPEG;
 	else
-	if(!strcasecmp(format, AMPEG_NAME)) return FILE_AMPEG;
+	if(!strcasecmp(format, _(AMPEG_NAME))) return FILE_AMPEG;
 	else
-	if(!strcasecmp(format, VMPEG_NAME)) return FILE_VMPEG;
+	if(!strcasecmp(format, _(VMPEG_NAME))) return FILE_VMPEG;
 	else
-	if(!strcasecmp(format, TGA_NAME)) return FILE_TGA;
+	if(!strcasecmp(format, _(TGA_NAME))) return FILE_TGA;
 	else
-	if(!strcasecmp(format, TGA_LIST_NAME)) return FILE_TGA_LIST;
+	if(!strcasecmp(format, _(TGA_LIST_NAME))) return FILE_TGA_LIST;
 	else
-	if(!strcasecmp(format, MOV_NAME)) return FILE_MOV;
+	if(!strcasecmp(format, _(MOV_NAME))) return FILE_MOV;
 	else
-	if(!strcasecmp(format, AVI_NAME)) return FILE_AVI;
+	if(!strcasecmp(format, _(AVI_NAME))) return FILE_AVI;
 	else
-	if(!strcasecmp(format, AVI_LAVTOOLS_NAME)) return FILE_AVI_LAVTOOLS;
+	if(!strcasecmp(format, _(AVI_LAVTOOLS_NAME))) return FILE_AVI_LAVTOOLS;
 	else
-	if(!strcasecmp(format, AVI_ARNE2_NAME)) return FILE_AVI_ARNE2;
+	if(!strcasecmp(format, _(AVI_ARNE2_NAME))) return FILE_AVI_ARNE2;
 	else
-	if(!strcasecmp(format, AVI_ARNE1_NAME)) return FILE_AVI_ARNE1;
+	if(!strcasecmp(format, _(AVI_ARNE1_NAME))) return FILE_AVI_ARNE1;
 	else
-	if(!strcasecmp(format, AVI_AVIFILE_NAME)) return FILE_AVI_AVIFILE;
+	if(!strcasecmp(format, _(AVI_AVIFILE_NAME))) return FILE_AVI_AVIFILE;
 	else
-	if(!strcasecmp(format, VORBIS_NAME)) return FILE_VORBIS;
+	if(!strcasecmp(format, _(VORBIS_NAME))) return FILE_VORBIS;
 
 	return 0;
 }
@@ -999,77 +1004,77 @@
 	switch(format)
 	{
 		case FILE_WAV:
-			return WAV_NAME;
+			return _(WAV_NAME);
 			break;
 		case FILE_PCM:
-			return PCM_NAME;
+			return _(PCM_NAME);
 			break;
 		case FILE_AU:
-			return AU_NAME;
+			return _(AU_NAME);
 			break;
 		case FILE_AIFF:
-			return AIFF_NAME;
+			return _(AIFF_NAME);
 			break;
 		case FILE_SND:
-			return SND_NAME;
+			return _(SND_NAME);
 			break;
 		case FILE_PNG:
-			return PNG_NAME;
+			return _(PNG_NAME);
 			break;
 		case FILE_PNG_LIST:
-			return PNG_LIST_NAME;
+			return _(PNG_LIST_NAME);
 			break;
 		case FILE_JPEG:
-			return JPEG_NAME;
+			return _(JPEG_NAME);
 			break;
 		case FILE_JPEG_LIST:
-			return JPEG_LIST_NAME;
+			return _(JPEG_LIST_NAME);
 			break;
 		case FILE_MPEG:
-			return MPEG_NAME;
+			return _(MPEG_NAME);
 			break;
 		case FILE_AMPEG:
-			return AMPEG_NAME;
+			return _(AMPEG_NAME);
 			break;
 		case FILE_VMPEG:
-			return VMPEG_NAME;
+			return _(VMPEG_NAME);
 			break;
 		case FILE_TGA:
-			return TGA_NAME;
+			return _(TGA_NAME);
 			break;
 		case FILE_TGA_LIST:
-			return TGA_LIST_NAME;
+			return _(TGA_LIST_NAME);
 			break;
 		case FILE_TIFF:
-			return TIFF_NAME;
+			return _(TIFF_NAME);
 			break;
 		case FILE_TIFF_LIST:
-			return TIFF_LIST_NAME;
+			return _(TIFF_LIST_NAME);
 			break;
 		case FILE_MOV:
-			return MOV_NAME;
+			return _(MOV_NAME);
 			break;
 		case FILE_AVI_LAVTOOLS:
-			return AVI_LAVTOOLS_NAME;
+			return _(AVI_LAVTOOLS_NAME);
 			break;
 		case FILE_AVI:
-			return AVI_NAME;
+			return _(AVI_NAME);
 			break;
 		case FILE_AVI_ARNE2:
-			return AVI_ARNE2_NAME;
+			return _(AVI_ARNE2_NAME);
 			break;
 		case FILE_AVI_ARNE1:
-			return AVI_ARNE1_NAME;
+			return _(AVI_ARNE1_NAME);
 			break;
 		case FILE_AVI_AVIFILE:
-			return AVI_AVIFILE_NAME;
+			return _(AVI_AVIFILE_NAME);
 			break;
 		case FILE_VORBIS:
-			return VORBIS_NAME;
+			return _(VORBIS_NAME);
 			break;
 
 		default:
-			return "Unknown";
+			return _("Unknown");
 			break;
 	}
 	return "Unknown";
@@ -1077,14 +1082,14 @@
 
 int File::strtobits(char *bits)
 {
-	if(!strcasecmp(bits, NAME_8BIT)) return BITSLINEAR8;
-	if(!strcasecmp(bits, NAME_16BIT)) return BITSLINEAR16;
-	if(!strcasecmp(bits, NAME_24BIT)) return BITSLINEAR24;
-	if(!strcasecmp(bits, NAME_32BIT)) return BITSLINEAR32;
-	if(!strcasecmp(bits, NAME_ULAW)) return BITSULAW;
-	if(!strcasecmp(bits, NAME_ADPCM)) return BITS_ADPCM;
-	if(!strcasecmp(bits, NAME_FLOAT)) return BITSFLOAT;
-	if(!strcasecmp(bits, NAME_IMA4)) return BITSIMA4;
+	if(!strcasecmp(bits, _(NAME_8BIT))) return BITSLINEAR8;
+	if(!strcasecmp(bits, _(NAME_16BIT))) return BITSLINEAR16;
+	if(!strcasecmp(bits, _(NAME_24BIT))) return BITSLINEAR24;
+	if(!strcasecmp(bits, _(NAME_32BIT))) return BITSLINEAR32;
+	if(!strcasecmp(bits, _(NAME_ULAW))) return BITSULAW;
+	if(!strcasecmp(bits, _(NAME_ADPCM))) return BITS_ADPCM;
+	if(!strcasecmp(bits, _(NAME_FLOAT))) return BITSFLOAT;
+	if(!strcasecmp(bits, _(NAME_IMA4))) return BITSIMA4;
 	return BITSLINEAR16;
 }
 
@@ -1094,28 +1099,28 @@
 	switch(bits)
 	{
 		case BITSLINEAR8:
-			return NAME_8BIT;
+			return (NAME_8BIT);
 			break;
 		case BITSLINEAR16:
-			return NAME_16BIT;
+			return (NAME_16BIT);
 			break;
 		case BITSLINEAR24:
-			return NAME_24BIT;
+			return (NAME_24BIT);
 			break;
 		case BITSLINEAR32:
-			return NAME_32BIT;
+			return (NAME_32BIT);
 			break;
 		case BITSULAW:
-			return NAME_ULAW;
+			return (NAME_ULAW);
 			break;
 		case BITS_ADPCM:
-			return NAME_ADPCM;
+			return (NAME_ADPCM);
 			break;
 		case BITSFLOAT:
-			return NAME_FLOAT;
+			return (NAME_FLOAT);
 			break;
 		case BITSIMA4:
-			return NAME_IMA4;
+			return (NAME_IMA4);
 			break;
 	}
 	return "Unknown";
@@ -1125,14 +1130,14 @@
 
 int File::str_to_byteorder(char *string)
 {
-	if(!strcasecmp(string, "Lo Hi")) return 1;
+	if(!strcasecmp(string, _("Lo Hi"))) return 1;
 	return 0;
 }
 
 char* File::byteorder_to_str(int byte_order)
 {
-	if(byte_order) return "Lo Hi";
-	return "Hi Lo";
+	if(byte_order) return _("Lo Hi");
+	return _("Hi Lo");
 }
 
 int File::bytes_per_sample(int bits)
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/fileformat.C hvirtual-1.1.7/cinelerra/fileformat.C
--- base-1.1.7/cinelerra/fileformat.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/fileformat.C	2003-09-22 13:21:02.000000000 +0200
@@ -7,6 +7,12 @@
 #include "mwindowgui.h"
 #include "new.h"
 
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
+
+
 FileFormat::FileFormat(MWindow *mwindow)
  : BC_Window(PROGRAM_NAME ": File Format", 
 		mwindow->gui->get_abs_cursor_x(),
@@ -46,22 +52,22 @@
 	int x = x1, y = 10;
 	add_subwindow(new BC_Title(x, y, string2));
 	y += 20;
-	add_subwindow(new BC_Title(x, y, "Assuming raw PCM:"));
+	add_subwindow(new BC_Title(x, y, _("Assuming raw PCM:")));
 
 	y += 30;
-	add_subwindow(new BC_Title(x, y, "Channels:"));
+	add_subwindow(new BC_Title(x, y, _("Channels:")));
 	sprintf(string, "%d", asset->channels);
 	channels_button = new FileFormatChannels(x2, y, this, string);
 	channels_button->create_objects();
 
 	y += 30;
-	add_subwindow(new BC_Title(x, y, "Sample rate:"));
+	add_subwindow(new BC_Title(x, y, _("Sample rate:")));
 	sprintf(string, "%d", asset->sample_rate);
 	add_subwindow(rate_button = new FileFormatRate(x2, y, this, string));
 	add_subwindow(new SampleRatePulldown(mwindow, rate_button, x2 + 100, y));
 	
 	y += 30;
-	add_subwindow(new BC_Title(x, y, "Bits:"));
+	add_subwindow(new BC_Title(x, y, _("Bits:")));
 	bitspopup = new BitsPopup(this, 
 		x2, 
 		y, 
@@ -74,12 +80,12 @@
 	bitspopup->create_objects();
 	
 	y += 30;
-	add_subwindow(new BC_Title(x, y, "Header length:"));
+	add_subwindow(new BC_Title(x, y, _("Header length:")));
 	sprintf(string, "%d", asset->header);
 	add_subwindow(header_button = new FileFormatHeader(x2, y, this, string));
 	
 	y += 30;
-	add_subwindow(new BC_Title(x, y, "Byte order:"));
+	add_subwindow(new BC_Title(x, y, _("Byte order:")));
 	add_subwindow(lohi = new FileFormatByteOrderLOHI(x2, y, this, asset->byte_order));
 	add_subwindow(hilo = new FileFormatByteOrderHILO(x2 + 70, y, this, asset->byte_order ^ 1));
 	
@@ -134,7 +140,7 @@
 }
 
 FileFormatByteOrderLOHI::FileFormatByteOrderLOHI(int x, int y, FileFormat *fwindow, int value)
- : BC_Radial(x, y, value, "Lo Hi")
+ : BC_Radial(x, y, value, _("Lo Hi"))
 {
 	this->fwindow = fwindow;
 }
@@ -146,7 +152,7 @@
 }
 
 FileFormatByteOrderHILO::FileFormatByteOrderHILO(int x, int y, FileFormat *fwindow, int value)
- : BC_Radial(x, y, value, "Hi Lo")
+ : BC_Radial(x, y, value, _("Hi Lo"))
 {
 	this->fwindow = fwindow;
 }
@@ -158,7 +164,7 @@
 }
 
 FileFormatSigned::FileFormatSigned(int x, int y, FileFormat *fwindow, int value)
- : BC_CheckBox(x, y, value, "Values are signed")
+ : BC_CheckBox(x, y, value, _("Values are signed"))
 {
 	this->fwindow = fwindow;
 }
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/file.inc hvirtual-1.1.7/cinelerra/file.inc
--- base-1.1.7/cinelerra/file.inc	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/file.inc	2003-09-22 12:50:14.000000000 +0200
@@ -1,6 +1,12 @@
 #ifndef FILE_INC
 #define FILE_INC
 
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
+
+
 // Return values for open_file
 #define FILE_OK 0
 #define FILE_NOT_FOUND 1
@@ -37,6 +43,31 @@
 // For formats supported by plugins, the format number is the plugin number in the 
 // plugin list ORed with 0x8000.
 
+#if 0
+N_("Apple/SGI AIFF")
+N_("MPEG Audio")    // For encoding only
+N_("Sun/NeXT AU")
+N_("Microsoft AVI")
+N_("Microsoft WAV")
+N_("AVI Arne Type 1")
+N_("AVI DV Type 2")
+N_("AVI Avifile")
+N_("AVI Lavtools")
+N_("JPEG Sequence")
+N_("JPEG")
+N_("Quicktime for Linux")
+N_("MPEG")          // For decoding only
+N_("Raw PCM")
+N_("PNG Sequence")
+N_("PNG")
+N_("Unknown sound")
+N_("TGA Sequence")
+N_("TGA")
+N_("TIFF")
+N_("TIFF Sequence")
+N_("MPEG Video")    // For encoding only
+N_("OGG Vorbis")
+#endif
 
 #define AIFF_NAME "Apple/SGI AIFF"
 #define AMPEG_NAME "MPEG Audio"    // For encoding only
@@ -71,6 +102,21 @@
 #define BITSULAW       254
 #define BITSIMA4       255
 
+#if 0
+N_("8 Bit Linear")
+N_("16 Bit Linear")
+N_("24 Bit Linear")
+N_("32 Bit Linear")
+N_("u Law")
+N_("IMA 4")
+N_("ADPCM")
+N_("Float")
+
+// Video formats not part of Quicktime
+N_("RGB ALPHA")
+N_("PNG ALPHA")
+#endif
+
 #define NAME_8BIT "8 Bit Linear"
 #define NAME_16BIT "16 Bit Linear"
 #define NAME_24BIT "24 Bit Linear"
@@ -84,6 +130,7 @@
 #define MOV_RGBA "RGB ALPHA"
 #define MOV_PNGA "PNG ALPHA"
 
+
 class File;
 
 #endif
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/filejpeg.C hvirtual-1.1.7/cinelerra/filejpeg.C
--- base-1.1.7/cinelerra/filejpeg.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/filejpeg.C	2003-09-22 13:45:31.000000000 +0200
@@ -10,6 +10,11 @@
 #include "vframe.h"
 #include "videodevice.inc"
 
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
+
 
 FileJPEG::FileJPEG(Asset *asset, File *file)
  : FileList(asset, file, "JPEGLIST", ".jpg", FILE_JPEG, FILE_JPEG_LIST)
@@ -269,7 +274,7 @@
 {
 	int x = 10, y = 10;
 
-	add_subwindow(new BC_Title(x, y, "Quality:"));
+	add_subwindow(new BC_Title(x, y, _("Quality:")));
 	add_subwindow(new BC_ISlider(x + 80, 
 		y,
 		0,
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/filejpeglist.C hvirtual-1.1.7/cinelerra/filejpeglist.C
--- base-1.1.7/cinelerra/filejpeglist.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/filejpeglist.C	2003-09-22 13:21:32.000000000 +0200
@@ -26,7 +26,7 @@
 
 char* FileJPEGList::list_title()
 {
-	return "JPEGLIST";
+	return _("JPEGLIST");
 }
 
 char* FileJPEGList::extension()
@@ -147,7 +147,7 @@
 {
 	int x = 10, y = 10;
 
-	add_subwindow(new BC_Title(x, y, "Quality:"));
+	add_subwindow(new BC_Title(x, y, _("Quality:")));
 	add_subwindow(new BC_ISlider(x + 80, 
 		y,
 		0,
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/filemov.C hvirtual-1.1.7/cinelerra/filemov.C
--- base-1.1.7/cinelerra/filemov.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/filemov.C	2003-09-22 13:33:33.000000000 +0200
@@ -10,6 +10,39 @@
 #include "vframe.h"
 #include "videodevice.inc"
 
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
+
+
+#if 0
+N_("MPEG-4")
+N_("Heroine 60")
+N_("Microsoft MPEG-4")
+N_("DV")
+N_("PNG")
+N_("PNG with Alpha")
+N_("Uncompressed RGB")
+N_("Uncompressed RGBA")
+N_("YUV 4:2:0 Planar")
+N_("Component Video")
+N_("YUV 4:1:1 Packed")
+N_("Component Y'CbCr 8-bit 4:4:4")
+N_("Component Y'CbCrA 8-bit 4:4:4:4")
+N_("Component Y'CbCr 10-bit 4:4:4")
+N_("JPEG Photo")
+N_("Motion JPEG A")
+
+
+N_("Twos complement")
+N_("Unsigned")
+N_("IMA-4")
+N_("U-Law")
+N_("Vorbis")
+N_("MP3")
+#endif
+
 #define DIVX_NAME "MPEG-4"
 #define HV60_NAME "Heroine 60"
 #define DIV3_NAME "Microsoft MPEG-4"
@@ -135,7 +168,7 @@
 
 	if(!(fd = quicktime_open(asset->path, rd, wr)))
 	{
-		printf("FileMOV::open_file %s: No such file or directory\n", asset->path);
+		printf(_("FileMOV::open_file %s: No such file or directory\n"), asset->path);
 		return 1;
 	}
 
@@ -204,7 +237,7 @@
 	fix_codecs(asset);
 
 // Fix up the Quicktime file.
-	quicktime_set_copyright(fd, "Made with Cinelerra for Linux");
+	quicktime_set_copyright(fd, _("Made with Cinelerra for Linux"));
 	quicktime_set_info(fd, "Quicktime for Linux");
 
 	if(asset->audio_data)
@@ -935,29 +968,29 @@
 
 char* FileMOV::strtocompression(char *string)
 {
-	if(!strcasecmp(string, DIVX_NAME)) return QUICKTIME_DIVX;
-	if(!strcasecmp(string, HV60_NAME)) return QUICKTIME_HV60;
-	if(!strcasecmp(string, DIV3_NAME)) return QUICKTIME_DIV3;
-	if(!strcasecmp(string, DV_NAME)) return QUICKTIME_DV;
-	if(!strcasecmp(string, PNG_NAME)) return QUICKTIME_PNG;
-	if(!strcasecmp(string, PNGA_NAME)) return MOV_PNGA;
-	if(!strcasecmp(string, RGB_NAME)) return QUICKTIME_RAW;
-	if(!strcasecmp(string, RGBA_NAME)) return MOV_RGBA;
-	if(!strcasecmp(string, QTJPEG_NAME)) return QUICKTIME_JPEG;
-	if(!strcasecmp(string, MJPA_NAME)) return QUICKTIME_MJPA;
-	if(!strcasecmp(string, YUV420_NAME)) return QUICKTIME_YUV420;
-	if(!strcasecmp(string, YUV411_NAME)) return QUICKTIME_YUV411;
-	if(!strcasecmp(string, YUV422_NAME)) return QUICKTIME_YUV422;
-	if(!strcasecmp(string, YUV444_NAME)) return QUICKTIME_YUV444;
-	if(!strcasecmp(string, YUVA4444_NAME)) return QUICKTIME_YUVA4444;
-	if(!strcasecmp(string, YUV444_10BIT_NAME)) return QUICKTIME_YUV444_10bit;
-
-	if(!strcasecmp(string, TWOS_NAME)) return QUICKTIME_TWOS;
-	if(!strcasecmp(string, RAW_NAME)) return QUICKTIME_RAW;
-	if(!strcasecmp(string, IMA4_NAME)) return QUICKTIME_IMA4;
-	if(!strcasecmp(string, ULAW_NAME)) return QUICKTIME_ULAW;
-	if(!strcasecmp(string, MP3_NAME)) return QUICKTIME_MP3;
-	if(!strcasecmp(string, VORBIS_NAME)) return QUICKTIME_VORBIS;
+	if(!strcasecmp(string, _(DIVX_NAME))) return QUICKTIME_DIVX;
+	if(!strcasecmp(string, _(HV60_NAME))) return QUICKTIME_HV60;
+	if(!strcasecmp(string, _(DIV3_NAME))) return QUICKTIME_DIV3;
+	if(!strcasecmp(string, _(DV_NAME))) return QUICKTIME_DV;
+	if(!strcasecmp(string, _(PNG_NAME))) return QUICKTIME_PNG;
+	if(!strcasecmp(string, _(PNGA_NAME))) return MOV_PNGA;
+	if(!strcasecmp(string, _(RGB_NAME))) return QUICKTIME_RAW;
+	if(!strcasecmp(string, _(RGBA_NAME))) return MOV_RGBA;
+	if(!strcasecmp(string, _(QTJPEG_NAME))) return QUICKTIME_JPEG;
+	if(!strcasecmp(string, _(MJPA_NAME))) return QUICKTIME_MJPA;
+	if(!strcasecmp(string, _(YUV420_NAME))) return QUICKTIME_YUV420;
+	if(!strcasecmp(string, _(YUV411_NAME))) return QUICKTIME_YUV411;
+	if(!strcasecmp(string, _(YUV422_NAME))) return QUICKTIME_YUV422;
+	if(!strcasecmp(string, _(YUV444_NAME))) return QUICKTIME_YUV444;
+	if(!strcasecmp(string, _(YUVA4444_NAME))) return QUICKTIME_YUVA4444;
+	if(!strcasecmp(string, _(YUV444_10BIT_NAME))) return QUICKTIME_YUV444_10bit;
+
+	if(!strcasecmp(string, _(TWOS_NAME))) return QUICKTIME_TWOS;
+	if(!strcasecmp(string, _(RAW_NAME))) return QUICKTIME_RAW;
+	if(!strcasecmp(string, _(IMA4_NAME))) return QUICKTIME_IMA4;
+	if(!strcasecmp(string, _(ULAW_NAME))) return QUICKTIME_ULAW;
+	if(!strcasecmp(string, _(MP3_NAME))) return QUICKTIME_MP3;
+	if(!strcasecmp(string, _(VORBIS_NAME))) return QUICKTIME_VORBIS;
 
 
 
@@ -966,36 +999,36 @@
 
 char* FileMOV::compressiontostr(char *string)
 {
-	if(match4(string, QUICKTIME_DIVX)) return DIVX_NAME;
-	if(match4(string, QUICKTIME_HV60)) return HV60_NAME;
-	if(match4(string, QUICKTIME_DIV3)) return DIV3_NAME;
-	if(match4(string, QUICKTIME_DV)) return DV_NAME;
-	if(match4(string, MOV_PNGA)) return PNGA_NAME;
-	if(match4(string, QUICKTIME_RAW)) return RGB_NAME;
-	if(match4(string, MOV_RGBA)) return RGBA_NAME;
-	if(match4(string, QUICKTIME_JPEG)) return QTJPEG_NAME;
-	if(match4(string, QUICKTIME_MJPA)) return MJPA_NAME;
-	if(match4(string, QUICKTIME_YUV420)) return YUV420_NAME;
-	if(match4(string, QUICKTIME_YUV411)) return YUV411_NAME;
-	if(match4(string, QUICKTIME_YUV422)) return YUV422_NAME;
-	if(match4(string, QUICKTIME_YUV444)) return YUV444_NAME;
-	if(match4(string, QUICKTIME_YUVA4444)) return YUVA4444_NAME;
-	if(match4(string, QUICKTIME_YUV444_10bit)) return YUV444_10BIT_NAME;
+	if(match4(string, QUICKTIME_DIVX)) return _(DIVX_NAME);
+	if(match4(string, QUICKTIME_HV60)) return _(HV60_NAME);
+	if(match4(string, QUICKTIME_DIV3)) return _(DIV3_NAME);
+	if(match4(string, QUICKTIME_DV)) return _(DV_NAME);
+	if(match4(string, MOV_PNGA)) return _(PNGA_NAME);
+	if(match4(string, QUICKTIME_RAW)) return _(RGB_NAME);
+	if(match4(string, MOV_RGBA)) return _(RGBA_NAME);
+	if(match4(string, QUICKTIME_JPEG)) return _(QTJPEG_NAME);
+	if(match4(string, QUICKTIME_MJPA)) return _(MJPA_NAME);
+	if(match4(string, QUICKTIME_YUV420)) return _(YUV420_NAME);
+	if(match4(string, QUICKTIME_YUV411)) return _(YUV411_NAME);
+	if(match4(string, QUICKTIME_YUV422)) return _(YUV422_NAME);
+	if(match4(string, QUICKTIME_YUV444)) return _(YUV444_NAME);
+	if(match4(string, QUICKTIME_YUVA4444)) return _(YUVA4444_NAME);
+	if(match4(string, QUICKTIME_YUV444_10bit)) return _(YUV444_10BIT_NAME);
 
 
 
 
 
-	if(match4(string, QUICKTIME_TWOS)) return TWOS_NAME;
-	if(match4(string, QUICKTIME_RAW)) return RAW_NAME;
-	if(match4(string, QUICKTIME_IMA4)) return IMA4_NAME;
-	if(match4(string, QUICKTIME_ULAW)) return ULAW_NAME;
-	if(match4(string, QUICKTIME_MP3)) return MP3_NAME;
-	if(match4(string, QUICKTIME_VORBIS)) return VORBIS_NAME;
+	if(match4(string, QUICKTIME_TWOS)) return _(TWOS_NAME);
+	if(match4(string, QUICKTIME_RAW)) return _(RAW_NAME);
+	if(match4(string, QUICKTIME_IMA4)) return _(IMA4_NAME);
+	if(match4(string, QUICKTIME_ULAW)) return _(ULAW_NAME);
+	if(match4(string, QUICKTIME_MP3)) return _(MP3_NAME);
+	if(match4(string, QUICKTIME_VORBIS)) return _(VORBIS_NAME);
 
 
 
-	return "Unknown";
+	return _("Unknown");
 }
 
 
@@ -1182,21 +1215,21 @@
 
 	if(asset->format == FILE_MOV)
 	{
-		compression_items.append(new BC_ListBoxItem(TWOS_NAME));
-		compression_items.append(new BC_ListBoxItem(RAW_NAME));
-		compression_items.append(new BC_ListBoxItem(IMA4_NAME));
-		compression_items.append(new BC_ListBoxItem(MP3_NAME));
-		compression_items.append(new BC_ListBoxItem(ULAW_NAME));
-		compression_items.append(new BC_ListBoxItem(VORBIS_NAME));
+		compression_items.append(new BC_ListBoxItem(_(TWOS_NAME)));
+		compression_items.append(new BC_ListBoxItem(_(RAW_NAME)));
+		compression_items.append(new BC_ListBoxItem(_(IMA4_NAME)));
+		compression_items.append(new BC_ListBoxItem(_(MP3_NAME)));
+		compression_items.append(new BC_ListBoxItem(_(ULAW_NAME)));
+		compression_items.append(new BC_ListBoxItem(_(VORBIS_NAME)));
 	}
 	else
 	{
-		compression_items.append(new BC_ListBoxItem(TWOS_NAME));
-		compression_items.append(new BC_ListBoxItem(MP3_NAME));
-		compression_items.append(new BC_ListBoxItem(VORBIS_NAME));
+		compression_items.append(new BC_ListBoxItem(_(TWOS_NAME)));
+		compression_items.append(new BC_ListBoxItem(_(MP3_NAME)));
+		compression_items.append(new BC_ListBoxItem(_(VORBIS_NAME)));
 	}
 
-	add_tool(new BC_Title(x, y, "Compression:"));
+	add_tool(new BC_Title(x, y, _("Compression:")));
 	y += 25;
 	compression_popup = new MOVConfigAudioPopup(this, x, y);
 	compression_popup->create_objects();
@@ -1236,7 +1269,7 @@
 	if(!strcasecmp(asset->acodec, QUICKTIME_TWOS) ||
 		!strcasecmp(asset->acodec, QUICKTIME_RAW))
 	{
-		add_subwindow(bits_title = new BC_Title(x, y, "Bits per channel:"));
+		add_subwindow(bits_title = new BC_Title(x, y, _("Bits per channel:")));
 		bits_popup = new BitsPopup(this, 
 			x + 150, 
 			y, 
@@ -1248,7 +1281,7 @@
 			0);
 		bits_popup->create_objects();
 		y += 40;
-		add_subwindow(dither = new BC_CheckBox(x, y, &asset->dither, "Dither"));
+		add_subwindow(dither = new BC_CheckBox(x, y, &asset->dither, _("Dither")));
 	}
 	else
 	if(!strcasecmp(asset->acodec, QUICKTIME_IMA4))
@@ -1258,7 +1291,7 @@
 	if(!strcasecmp(asset->acodec, QUICKTIME_MP3))
 	{
 		mp3_bitrate = new MOVConfigAudioNum(this, 
-			"Bitrate:", 
+			_("Bitrate:"), 
 			x, 
 			y, 
 			&asset->mp3_bitrate);
@@ -1273,25 +1306,25 @@
 	if(!strcasecmp(asset->acodec, QUICKTIME_VORBIS))
 	{
 		add_subwindow(vorbis_vbr = new MOVConfigAudioToggle(this,
-			"Variable bitrate",
+			_("Variable bitrate"),
 			x,
 			y,
 			&asset->vorbis_vbr));
 		y += 35;
 		vorbis_min_bitrate = new MOVConfigAudioNum(this, 
-			"Min bitrate:", 
+			_("Min bitrate:"), 
 			x, 
 			y, 
 			&asset->vorbis_min_bitrate);
 		y += 30;
 		vorbis_bitrate = new MOVConfigAudioNum(this, 
-			"Avg bitrate:", 
+			_("Avg bitrate:"), 
 			x, 
 			y, 
 			&asset->vorbis_bitrate);
 		y += 30;
 		vorbis_max_bitrate = new MOVConfigAudioNum(this, 
-			"Max bitrate:", 
+			_("Max bitrate:"), 
 			x, 
 			y, 
 			&asset->vorbis_max_bitrate);
@@ -1438,34 +1471,34 @@
 
 	if(asset->format == FILE_MOV)
 	{
-		compression_items.append(new BC_ListBoxItem(DIVX_NAME));
-		compression_items.append(new BC_ListBoxItem(HV60_NAME));
-		compression_items.append(new BC_ListBoxItem(DIV3_NAME));
-		compression_items.append(new BC_ListBoxItem(DV_NAME));
-		compression_items.append(new BC_ListBoxItem(QTJPEG_NAME));
-		compression_items.append(new BC_ListBoxItem(MJPA_NAME));
-		compression_items.append(new BC_ListBoxItem(PNG_NAME));
-		compression_items.append(new BC_ListBoxItem(PNGA_NAME));
-		compression_items.append(new BC_ListBoxItem(RGB_NAME));
-		compression_items.append(new BC_ListBoxItem(RGBA_NAME));
-		compression_items.append(new BC_ListBoxItem(YUV420_NAME));
-		compression_items.append(new BC_ListBoxItem(YUV422_NAME));
-		compression_items.append(new BC_ListBoxItem(YUV444_NAME));
-		compression_items.append(new BC_ListBoxItem(YUVA4444_NAME));
-		compression_items.append(new BC_ListBoxItem(YUV444_10BIT_NAME));
+		compression_items.append(new BC_ListBoxItem(_(DIVX_NAME)));
+		compression_items.append(new BC_ListBoxItem(_(HV60_NAME)));
+		compression_items.append(new BC_ListBoxItem(_(DIV3_NAME)));
+		compression_items.append(new BC_ListBoxItem(_(DV_NAME)));
+		compression_items.append(new BC_ListBoxItem(_(QTJPEG_NAME)));
+		compression_items.append(new BC_ListBoxItem(_(MJPA_NAME)));
+		compression_items.append(new BC_ListBoxItem(_(PNG_NAME)));
+		compression_items.append(new BC_ListBoxItem(_(PNGA_NAME)));
+		compression_items.append(new BC_ListBoxItem(_(RGB_NAME)));
+		compression_items.append(new BC_ListBoxItem(_(RGBA_NAME)));
+		compression_items.append(new BC_ListBoxItem(_(YUV420_NAME)));
+		compression_items.append(new BC_ListBoxItem(_(YUV422_NAME)));
+		compression_items.append(new BC_ListBoxItem(_(YUV444_NAME)));
+		compression_items.append(new BC_ListBoxItem(_(YUVA4444_NAME)));
+		compression_items.append(new BC_ListBoxItem(_(YUV444_10BIT_NAME)));
 	}
 	else
 	{
-		compression_items.append(new BC_ListBoxItem(DIVX_NAME));
-		compression_items.append(new BC_ListBoxItem(HV60_NAME));
-		compression_items.append(new BC_ListBoxItem(DIV3_NAME));
-		compression_items.append(new BC_ListBoxItem(DV_NAME));
-		compression_items.append(new BC_ListBoxItem(QTJPEG_NAME));
-		compression_items.append(new BC_ListBoxItem(MJPA_NAME));
-		compression_items.append(new BC_ListBoxItem(PNG_NAME));
+		compression_items.append(new BC_ListBoxItem(_(DIVX_NAME)));
+		compression_items.append(new BC_ListBoxItem(_(HV60_NAME)));
+		compression_items.append(new BC_ListBoxItem(_(DIV3_NAME)));
+		compression_items.append(new BC_ListBoxItem(_(DV_NAME)));
+		compression_items.append(new BC_ListBoxItem(_(QTJPEG_NAME)));
+		compression_items.append(new BC_ListBoxItem(_(MJPA_NAME)));
+		compression_items.append(new BC_ListBoxItem(_(PNG_NAME)));
 	}
 
-	add_subwindow(new BC_Title(x, y, "Compression:"));
+	add_subwindow(new BC_Title(x, y, _("Compression:")));
 	y += 25;
 
 	if(!lock_compressor)
@@ -1560,7 +1593,7 @@
 	{
 		int x = param_x, y = param_y;
 		ms_bitrate = new MOVConfigVideoNum(this, 
-			"Bitrate:", 
+			_("Bitrate:"), 
 			x, 
 			y, 
 			&asset->ms_bitrate);
@@ -1573,14 +1606,14 @@
 		y += 30;
 
 		ms_bitrate_tolerance = new MOVConfigVideoNum(this, 
-			"Bitrate tolerance:", 
+			_("Bitrate tolerance:"), 
 			x, 
 			y, 
 			&asset->ms_bitrate_tolerance);
 		ms_bitrate_tolerance->create_objects();
 		y += 30;
 		ms_quantization = new MOVConfigVideoNum(this, 
-			"Quantization:", 
+			_("Quantization:"), 
 			x, 
 			y, 
 			&asset->ms_quantization);
@@ -1594,13 +1627,13 @@
 
 
 		y += 30;
-		add_subwindow(ms_interlaced = new MOVConfigVideoCheckBox("Interlaced", 
+		add_subwindow(ms_interlaced = new MOVConfigVideoCheckBox(_("Interlaced"), 
 			x, 
 			y, 
 			&asset->ms_interlaced));
 		y += 30;
 		ms_gop_size = new MOVConfigVideoNum(this, 
-			"Keyframe interval:", 
+			_("Keyframe interval:"), 
 			x, 
 			y, 
 			&asset->ms_gop_size);
@@ -1613,7 +1646,7 @@
 	{
 		int x = param_x, y = param_y;
 		divx_bitrate = new MOVConfigVideoNum(this, 
-			"Bitrate:", 
+			_("Bitrate:"), 
 			x, 
 			y, 
 			&asset->divx_bitrate);
@@ -1626,7 +1659,7 @@
 				1));
 		y += 30;
 		divx_quantizer = new MOVConfigVideoNum(this, 
-			"Quantizer:", 
+			_("Quantizer:"), 
 			x, 
 			y, 
 			&asset->divx_quantizer);
@@ -1640,49 +1673,49 @@
 		divx_fix_bitrate->opposite = divx_fix_quant;
 		y += 30;
 		divx_rc_period = new MOVConfigVideoNum(this, 
-			"RC Period:", 
+			_("RC Period:"), 
 			x, 
 			y, 
 			&asset->divx_rc_period);
 		divx_rc_period->create_objects();
 		y += 30;
 		divx_rc_reaction_ratio = new MOVConfigVideoNum(this, 
-			"Reaction Ratio:", 
+			_("Reaction Ratio:"), 
 			x, 
 			y, 
 			&asset->divx_rc_reaction_ratio);
 		divx_rc_reaction_ratio->create_objects();
 		y += 30;
 		divx_rc_reaction_period = new MOVConfigVideoNum(this, 
-			"Reaction Period:", 
+			_("Reaction Period:"), 
 			x, 
 			y, 
 			&asset->divx_rc_reaction_period);
 		divx_rc_reaction_period->create_objects();
 		y += 30;
 		divx_max_key_interval = new MOVConfigVideoNum(this, 
-			"Max Key Interval:", 
+			_("Max Key Interval:"), 
 			x, 
 			y, 
 			&asset->divx_max_key_interval);
 		divx_max_key_interval->create_objects();
 		y += 30;
 		divx_max_quantizer = new MOVConfigVideoNum(this, 
-			"Max Quantizer:", 
+			_("Max Quantizer:"), 
 			x, 
 			y, 
 			&asset->divx_max_quantizer);
 		divx_max_quantizer->create_objects();
 		y += 30;
 		divx_min_quantizer = new MOVConfigVideoNum(this, 
-			"Min Quantizer:", 
+			_("Min Quantizer:"), 
 			x, 
 			y, 
 			&asset->divx_min_quantizer);
 		divx_min_quantizer->create_objects();
 		y += 30;
 		divx_quality = new MOVConfigVideoNum(this, 
-			"Quality:", 
+			_("Quality:"), 
 			x, 
 			y, 
 			&asset->divx_quality);
@@ -1692,7 +1725,7 @@
 	if(!strcmp(asset->vcodec, QUICKTIME_JPEG) ||
 		!strcmp(asset->vcodec, QUICKTIME_MJPA))
 	{
-		add_subwindow(jpeg_quality_title = new BC_Title(param_x, param_y, "Quality:"));
+		add_subwindow(jpeg_quality_title = new BC_Title(param_x, param_y, _("Quality:")));
 		add_subwindow(jpeg_quality = new BC_ISlider(param_x + 80, 
 			param_y,
 			0,
@@ -1774,7 +1807,7 @@
  : BC_Radial(x, 
  	y, 
 	*output == value, 
-	"Fix bitrate")
+	_("Fix bitrate"))
 {
 	this->output = output;
 	this->value = value;
@@ -1799,7 +1832,7 @@
  : BC_Radial(x, 
  	y, 
 	*output == value, 
-	"Fix quantization")
+	_("Fix quantization"))
 {
 	this->output = output;
 	this->value = value;
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/filempeg.C hvirtual-1.1.7/cinelerra/filempeg.C
--- base-1.1.7/cinelerra/filempeg.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/filempeg.C	2003-09-22 13:39:29.000000000 +0200
@@ -14,6 +14,10 @@
 #include <stdio.h>
 #include <string.h>
 #include <unistd.h>
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
 
 
 FileMPEG::FileMPEG(Asset *asset, File *file)
@@ -211,7 +215,7 @@
 				asset->sample_rate);
 			if((result = lame_init_params(lame_global)) < 0)
 			{
-				printf("encode: lame_init_params returned %d\n", result);
+				printf(_("encode: lame_init_params returned %d\n"), result);
 				lame_close(lame_global);
 				lame_global = 0;
 			}
@@ -802,12 +806,12 @@
 	int x1 = 150;
 	MPEGLayer *layer;
 
-	add_tool(new BC_Title(x, y, "Layer:"));
+	add_tool(new BC_Title(x, y, _("Layer:")));
 	add_tool(layer = new MPEGLayer(x1, y, this));
 	layer->create_objects();
 
 	y += 30;
-	add_tool(new BC_Title(x, y, "Kbits per second:"));
+	add_tool(new BC_Title(x, y, _("Kbits per second:")));
 	add_tool(bitrate = new MPEGABitrate(x1, y, this));
 	bitrate->create_objects();
 	
@@ -864,15 +868,15 @@
 	switch(layer)
 	{
 		case 2:
-			return "II";
+			return _("II");
 			break;
 		
 		case 3:
-			return "III";
+			return _("III");
 			break;
 			
 		default:
-			return "II";
+			return _("II");
 			break;
 	}
 }
@@ -991,42 +995,42 @@
 	MPEGDerivative *derivative;
 	MPEGColorModel *cmodel;
 
-	add_subwindow(new BC_Title(x, y + 5, "Derivative:"));
+	add_subwindow(new BC_Title(x, y + 5, _("Derivative:")));
 	add_subwindow(derivative = new MPEGDerivative(x1, y, this));
 	derivative->create_objects();
 	y += 30;
 
-	add_subwindow(new BC_Title(x, y + 5, "Bitrate:"));
+	add_subwindow(new BC_Title(x, y + 5, _("Bitrate:")));
 	add_subwindow(new MPEGBitrate(x1, y, this));
 	add_subwindow(fixed_bitrate = new MPEGFixedBitrate(x2, y, this));
 	y += 30;
 
-	add_subwindow(new BC_Title(x, y, "Quantization:"));
+	add_subwindow(new BC_Title(x, y, _("Quantization:")));
 	MPEGQuant *quant = new MPEGQuant(x1, y, this);
 	quant->create_objects();
 	add_subwindow(fixed_quant = new MPEGFixedQuant(x2, y, this));
 	y += 30;
 
-	add_subwindow(new BC_Title(x, y, "I frame distance:"));
+	add_subwindow(new BC_Title(x, y, _("I frame distance:")));
 	MPEGIFrameDistance *iframe_distance = 
 		new MPEGIFrameDistance(x1, y, this);
 	iframe_distance->create_objects();
 	y += 30;
 
-	add_subwindow(new BC_Title(x, y, "Color model:"));
+	add_subwindow(new BC_Title(x, y, _("Color model:")));
 	add_subwindow(cmodel = new MPEGColorModel(x1, y, this));
 	cmodel->create_objects();
 	y += 30;
 	
-//	add_subwindow(new BC_Title(x, y, "P frame distance:"));
+//	add_subwindow(new BC_Title(x, y, _("P frame distance:")));
 //	y += 30;
 
 
-	add_subwindow(new BC_CheckBox(x, y, &asset->vmpeg_progressive, "Progressive frames"));
+	add_subwindow(new BC_CheckBox(x, y, &asset->vmpeg_progressive, _("Progressive frames")));
 	y += 30;
-	add_subwindow(new BC_CheckBox(x, y, &asset->vmpeg_denoise, "Denoise"));
+	add_subwindow(new BC_CheckBox(x, y, &asset->vmpeg_denoise, _("Denoise")));
 	y += 30;
-	add_subwindow(new BC_CheckBox(x, y, &asset->vmpeg_seq_codes, "Sequence start codes in every GOP"));
+	add_subwindow(new BC_CheckBox(x, y, &asset->vmpeg_seq_codes, _("Sequence start codes in every GOP")));
 
 	add_subwindow(new BC_OKButton(this));
 	show_window();
@@ -1075,15 +1079,15 @@
 	switch(derivative)
 	{
 		case 1:
-			return "MPEG-1";
+			return _("MPEG-1");
 			break;
 		
 		case 2:
-			return "MPEG-2";
+			return _("MPEG-2");
 			break;
 			
 		default:
-			return "MPEG-1";
+			return _("MPEG-1");
 			break;
 	}
 }
@@ -1127,7 +1131,7 @@
 };
 
 MPEGFixedBitrate::MPEGFixedBitrate(int x, int y, MPEGConfigVideo *gui)
- : BC_Radial(x, y, gui->asset->vmpeg_fix_bitrate, "Fixed bitrate")
+ : BC_Radial(x, y, gui->asset->vmpeg_fix_bitrate, _("Fixed bitrate"))
 {
 	this->gui = gui;
 }
@@ -1141,7 +1145,7 @@
 };
 
 MPEGFixedQuant::MPEGFixedQuant(int x, int y, MPEGConfigVideo *gui)
- : BC_Radial(x, y, !gui->asset->vmpeg_fix_bitrate, "Fixed quantization")
+ : BC_Radial(x, y, !gui->asset->vmpeg_fix_bitrate, _("Fixed quantization"))
 {
 	this->gui = gui;
 }
@@ -1206,15 +1210,15 @@
 	switch(cmodel)
 	{
 		case 0:
-			return "YUV 4:2:0";
+			return _("YUV 4:2:0");
 			break;
 		
 		case 1:
-			return "YUV 4:2:2";
+			return _("YUV 4:2:2");
 			break;
 			
 		default:
-			return "YUV 4:2:0";
+			return _("YUV 4:2:0");
 			break;
 	}
 }
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/filepng.C hvirtual-1.1.7/cinelerra/filepng.C
--- base-1.1.7/cinelerra/filepng.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/filepng.C	2003-09-22 13:45:08.000000000 +0200
@@ -9,6 +9,10 @@
 #include "videodevice.inc"
 
 #include <png.h>
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
 
 FilePNG::FilePNG(Asset *asset, File *file)
  : FileList(asset, file, "PNGLIST", ".png", FILE_PNG, FILE_PNG_LIST)
@@ -354,7 +358,7 @@
 
 
 PNGUseAlpha::PNGUseAlpha(PNGConfigVideo *gui, int x, int y)
- : BC_CheckBox(x, y, gui->asset->png_use_alpha, "Use alpha")
+ : BC_CheckBox(x, y, gui->asset->png_use_alpha, _("Use alpha"))
 {
 	this->gui = gui;
 }
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/filesndfile.C hvirtual-1.1.7/cinelerra/filesndfile.C
--- base-1.1.7/cinelerra/filesndfile.C	2003-09-24 01:11:33.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/filesndfile.C	2003-09-22 13:41:48.000000000 +0200
@@ -6,6 +6,11 @@
 #include "filesndfile.h"
 #include "mwindow.inc"
 
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
+
 FileSndFile::FileSndFile(Asset *asset, File *file)
  : FileBase(asset, file)
 {
@@ -353,7 +358,7 @@
 		case FILE_WAV:
 		case FILE_PCM:
 		case FILE_AIFF:
-			add_tool(new BC_Title(x, y, "Compression:"));
+			add_tool(new BC_Title(x, y, _("Compression:")));
 			y += 25;
 			if(asset->format == FILE_WAV)
 				bits_popup = new BitsPopup(this, x, y, &asset->bits, 0, 0, 1, 1, 0);
@@ -366,13 +371,13 @@
 
 	x = 10;
 	if(asset->format != FILE_AU)
-		add_subwindow(new BC_CheckBox(x, y, &asset->dither, "Dither"));
+		add_subwindow(new BC_CheckBox(x, y, &asset->dither, _("Dither")));
 	y += 30;
 	if(asset->format == FILE_PCM)
 	{
-		add_subwindow(new BC_CheckBox(x, y, &asset->signed_, "Signed"));
+		add_subwindow(new BC_CheckBox(x, y, &asset->signed_, _("Signed")));
 		y += 35;
-		add_subwindow(new BC_Title(x, y, "Byte order:"));
+		add_subwindow(new BC_Title(x, y, _("Byte order:")));
 		add_subwindow(hilo = new SndFileHILO(this, x + 100, y));
 		add_subwindow(lohi = new SndFileLOHI(this, x + 170, y));
 	}
@@ -389,7 +394,7 @@
 
 
 SndFileHILO::SndFileHILO(SndFileConfig *gui, int x, int y)
- : BC_Radial(x, y, gui->asset->byte_order == 0, "Hi Lo")
+ : BC_Radial(x, y, gui->asset->byte_order == 0, _("Hi Lo"))
 {
 	this->gui = gui;
 }
@@ -404,7 +409,7 @@
 
 
 SndFileLOHI::SndFileLOHI(SndFileConfig *gui, int x, int y)
- : BC_Radial(x, y, gui->asset->byte_order == 1, "Lo Hi")
+ : BC_Radial(x, y, gui->asset->byte_order == 1, _("Lo Hi"))
 {
 	this->gui = gui;
 }
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/filetga.C hvirtual-1.1.7/cinelerra/filetga.C
--- base-1.1.7/cinelerra/filetga.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/filetga.C	2003-09-22 13:50:05.000000000 +0200
@@ -8,6 +8,11 @@
 #include <string.h>
 #include <unistd.h>
 
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
+
 /* Known image types. */
 #define TGA_TYPE_MAPPED      1
 #define TGA_TYPE_COLOR       2
@@ -85,6 +90,12 @@
 	}
 }
 
+#if 0
+N_("RGB compressed")
+N_("RGBA compressed")
+N_("RGB uncompressed")
+N_("RGBA uncompressed")
+#endif
 
 #define TGA_RGB_RLE "rle "
 #define TGA_RGBA_RLE "rlea"
@@ -98,10 +109,10 @@
 
 char* FileTGA::compression_to_str(char *compression)
 {
-	if(!strcasecmp(compression, TGA_RGB_RLE)) return TGA_RGB_RLE_NAME;
-	if(!strcasecmp(compression, TGA_RGBA_RLE)) return TGA_RGBA_RLE_NAME;
-	if(!strcasecmp(compression, TGA_RGB)) return TGA_RGB_NAME;
-	if(!strcasecmp(compression, TGA_RGBA)) return TGA_RGBA_NAME;
+	if(!strcasecmp(compression, TGA_RGB_RLE)) return _(TGA_RGB_RLE_NAME);
+	if(!strcasecmp(compression, TGA_RGBA_RLE)) return _(TGA_RGBA_RLE_NAME);
+	if(!strcasecmp(compression, TGA_RGB)) return _(TGA_RGB_NAME);
+	if(!strcasecmp(compression, TGA_RGBA)) return _(TGA_RGBA_NAME);
 	return TGA_RGB_NAME;
 }
 
@@ -891,7 +902,7 @@
 {
 	int x = 10, y = 10;
 
-	add_subwindow(new BC_Title(x, y, "Compression:"));
+	add_subwindow(new BC_Title(x, y, _("Compression:")));
 	TGACompression *textbox = new TGACompression(this, 
 		x + 110, 
 		y, 
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/filetiff.C hvirtual-1.1.7/cinelerra/filetiff.C
--- base-1.1.7/cinelerra/filetiff.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/filetiff.C	2003-09-22 13:49:54.000000000 +0200
@@ -8,6 +8,10 @@
 #include <stdint.h>
 #include <string.h>
 #include <unistd.h>
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
 
 FileTIFF::FileTIFF(Asset *asset, File *file)
  : FileList(asset, file, "TIFFLIST", ".tif", FILE_TIFF, FILE_TIFF_LIST)
@@ -443,7 +447,7 @@
  : BC_CheckBox(x, 
  	y, 
 	TIFFConfigVideo::codec_to_alpha(gui->asset->vcodec), 
- 	"Use alpha")
+ 	_("Use alpha"))
 {
 	this->gui = gui;
 }
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/filevorbis.C hvirtual-1.1.7/cinelerra/filevorbis.C
--- base-1.1.7/cinelerra/filevorbis.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/filevorbis.C	2003-09-22 13:51:08.000000000 +0200
@@ -11,6 +11,10 @@
 #include <stdio.h>
 #include <string.h>
 #include <unistd.h>
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
 
 FileVorbis::FileVorbis(Asset *asset, File *file)
  : FileBase(asset, file)
@@ -88,7 +92,7 @@
 //printf("FileVorbis::open_file 2 %p %p\n", fd, vf);
 			if(ov_open(fd, &vf, NULL, 0) < 0)
 			{
-				printf("FileVorbis::open_file %s: invalid bitstream.\n", asset->path);
+				printf(_("FileVorbis::open_file %s: invalid bitstream.\n"), asset->path);
 				result = 1;
 			}
 			else
@@ -411,16 +415,16 @@
 
 	y += 30;
 	sprintf(string, "%d", asset->vorbis_min_bitrate);
-	add_tool(new BC_Title(x, y, "Min bitrate:"));
+	add_tool(new BC_Title(x, y, _("Min bitrate:")));
 	add_tool(new VorbisMinBitrate(x1, y, this, string));
 
 	y += 30;
-	add_tool(new BC_Title(x, y, "Avg bitrate:"));
+	add_tool(new BC_Title(x, y, _("Avg bitrate:")));
 	sprintf(string, "%d", asset->vorbis_bitrate);
 	add_tool(new VorbisAvgBitrate(x1, y, this, string));
 
 	y += 30;
-	add_tool(new BC_Title(x, y, "Max bitrate:"));
+	add_tool(new BC_Title(x, y, _("Max bitrate:")));
 	sprintf(string, "%d", asset->vorbis_max_bitrate);
 	add_tool(new VorbisMaxBitrate(x1, y, this, string));
 
@@ -442,7 +446,7 @@
 
 
 VorbisFixedBitrate::VorbisFixedBitrate(int x, int y, VorbisConfigAudio *gui)
- : BC_Radial(x, y, !gui->asset->vorbis_vbr, "Fixed bitrate")
+ : BC_Radial(x, y, !gui->asset->vorbis_vbr, _("Fixed bitrate"))
 {
 	this->gui = gui;
 }
@@ -454,7 +458,7 @@
 }
 
 VorbisVariableBitrate::VorbisVariableBitrate(int x, int y, VorbisConfigAudio *gui)
- : BC_Radial(x, y, gui->asset->vorbis_vbr, "Variable bitrate")
+ : BC_Radial(x, y, gui->asset->vorbis_vbr, _("Variable bitrate"))
 {
 	this->gui = gui;
 }
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/flipbook.C hvirtual-1.1.7/cinelerra/flipbook.C
--- base-1.1.7/cinelerra/flipbook.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/flipbook.C	2003-09-22 13:51:56.000000000 +0200
@@ -1,9 +1,14 @@
 #include "flipbook.h"
 #include "mwindow.h"
 
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
+
 
 FlipBook::FlipBook(MWindow *mwindow)
- : BC_MenuItem("Flipbook...")
+ : BC_MenuItem(_("Flipbook..."))
 {
 	this->mwindow = mwindow;
 	thread = new FlipBookThread(mwindow);
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/formatcheck.C hvirtual-1.1.7/cinelerra/formatcheck.C
--- base-1.1.7/cinelerra/formatcheck.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/formatcheck.C	2003-09-22 13:53:25.000000000 +0200
@@ -4,6 +4,11 @@
 #include "formatcheck.h"
 #include "mwindow.inc"
 
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
+
 FormatCheck::FormatCheck(Asset *asset)
 {
 	this->asset = asset;
@@ -23,7 +28,7 @@
 		if(!File::supports_video(asset->format))
 		{
 			ErrorBox errorbox(PROGRAM_NAME ": Error");
-			errorbox.create_objects("The format you selected doesn't support video.");
+			errorbox.create_objects(_("The format you selected doesn't support video."));
 			errorbox.run_window();
 			result = 1;
 		}
@@ -34,7 +39,7 @@
 		if(!File::supports_audio(asset->format))
 		{
 			ErrorBox errorbox(PROGRAM_NAME ": Error");
-			errorbox.create_objects("The format you selected doesn't support audio.");
+			errorbox.create_objects(_("The format you selected doesn't support audio."));
 			errorbox.run_window();
 			result = 1;
 		}
@@ -42,7 +47,7 @@
 		if(!result && asset->bits == BITSIMA4 && asset->format != FILE_MOV)
 		{
 			ErrorBox errorbox(PROGRAM_NAME ": Error");
-			errorbox.create_objects("IMA4 compression is only available in Quicktime movies.");
+			errorbox.create_objects(_("IMA4 compression is only available in Quicktime movies."));
 			errorbox.run_window();
 			result = 1;
 		}
@@ -52,8 +57,8 @@
 			asset->format != FILE_PCM)
 		{
 			ErrorBox errorbox(PROGRAM_NAME ": Error");
-			errorbox.create_objects("ULAW compression is only available in\n" 
-				"Quicktime Movies and PCM files.");
+			errorbox.create_objects(_("ULAW compression is only available in\n" 
+				"Quicktime Movies and PCM files."));
 			errorbox.run_window();
 			result = 1;
 		}
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/formatpopup.C hvirtual-1.1.7/cinelerra/formatpopup.C
--- base-1.1.7/cinelerra/formatpopup.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/formatpopup.C	2003-09-22 12:49:14.000000000 +0200
@@ -2,6 +2,11 @@
 #include "formatpopup.h"
 #include "pluginserver.h"
 
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
+
 
 FormatPopup::FormatPopup(ArrayList<PluginServer*> *plugindb, 
 	int x, 
@@ -21,53 +26,53 @@
 {
 	this->plugindb = plugindb;
 	this->use_brender = use_brender;
-	set_tooltip("Change file format");
+	set_tooltip(_("Change file format"));
 }
 
 int FormatPopup::create_objects()
 {
 	if(!use_brender)
 	{
-		format_items.append(new BC_ListBoxItem(AIFF_NAME));
-		format_items.append(new BC_ListBoxItem(AU_NAME));
-//		format_items.append(new BC_ListBoxItem(AVI_ARNE1_NAME));
-//		format_items.append(new BC_ListBoxItem(AVI_ARNE2_NAME));
+		format_items.append(new BC_ListBoxItem(_(AIFF_NAME)));
+		format_items.append(new BC_ListBoxItem(_(AU_NAME)));
+//		format_items.append(new BC_ListBoxItem(_(AVI_ARNE1_NAME)));
+//		format_items.append(new BC_ListBoxItem(_(AVI_ARNE2_NAME)));
 #ifdef USE_AVIFILE
-		format_items.append(new BC_ListBoxItem(AVI_AVIFILE_NAME));
+		format_items.append(new BC_ListBoxItem(_(AVI_AVIFILE_NAME)));
 #endif
-//		format_items.append(new BC_ListBoxItem(AVI_LAVTOOLS_NAME));
-		format_items.append(new BC_ListBoxItem(JPEG_NAME));
+//		format_items.append(new BC_ListBoxItem(_(AVI_LAVTOOLS_NAME)));
+		format_items.append(new BC_ListBoxItem(_(JPEG_NAME)));
 	}
 
-	format_items.append(new BC_ListBoxItem(JPEG_LIST_NAME));
+	format_items.append(new BC_ListBoxItem(_(JPEG_LIST_NAME)));
 
 	if(!use_brender)
 	{
-		format_items.append(new BC_ListBoxItem(AVI_NAME));
-		format_items.append(new BC_ListBoxItem(WAV_NAME));
-		format_items.append(new BC_ListBoxItem(MOV_NAME));
-		format_items.append(new BC_ListBoxItem(AMPEG_NAME));
-		format_items.append(new BC_ListBoxItem(VMPEG_NAME));
-		format_items.append(new BC_ListBoxItem(VORBIS_NAME));
-		format_items.append(new BC_ListBoxItem(PCM_NAME));
-		format_items.append(new BC_ListBoxItem(PNG_NAME));
+		format_items.append(new BC_ListBoxItem(_(AVI_NAME)));
+		format_items.append(new BC_ListBoxItem(_(WAV_NAME)));
+		format_items.append(new BC_ListBoxItem(_(MOV_NAME)));
+		format_items.append(new BC_ListBoxItem(_(AMPEG_NAME)));
+		format_items.append(new BC_ListBoxItem(_(VMPEG_NAME)));
+		format_items.append(new BC_ListBoxItem(_(VORBIS_NAME)));
+		format_items.append(new BC_ListBoxItem(_(PCM_NAME)));
+		format_items.append(new BC_ListBoxItem(_(PNG_NAME)));
 	}
 
-	format_items.append(new BC_ListBoxItem(PNG_LIST_NAME));
+	format_items.append(new BC_ListBoxItem(_(PNG_LIST_NAME)));
 
 	if(!use_brender)
 	{
-		format_items.append(new BC_ListBoxItem(TGA_NAME));
+		format_items.append(new BC_ListBoxItem(_(TGA_NAME)));
 	}
 
-	format_items.append(new BC_ListBoxItem(TGA_LIST_NAME));
+	format_items.append(new BC_ListBoxItem(_(TGA_LIST_NAME)));
 
 	if(!use_brender)
 	{
-		format_items.append(new BC_ListBoxItem(TIFF_NAME));
+		format_items.append(new BC_ListBoxItem(_(TIFF_NAME)));
 	}
 
-	format_items.append(new BC_ListBoxItem(TIFF_LIST_NAME));
+	format_items.append(new BC_ListBoxItem(_(TIFF_LIST_NAME)));
 // 	for(i = 0; i < plugindb->total; i++)
 // 	{
 // 		if(plugindb->values[i]->fileio)
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/formattools.C hvirtual-1.1.7/cinelerra/formattools.C
--- base-1.1.7/cinelerra/formattools.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/formattools.C	2003-09-22 13:55:31.000000000 +0200
@@ -8,6 +8,11 @@
 #include "theme.h"
 #include <string.h>
 
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
+
 FormatTools::FormatTools(MWindow *mwindow,
 				BC_WindowBase *window, 
 				Asset *asset)
@@ -97,8 +102,8 @@
 		x, 
 		y, 
 		asset->path,
-		"Output to file",
-		"Select a file to write to:",
+		_("Output to file"),
+		_("Select a file to write to:"),
 		0));
 
 //printf("FormatTools::create_objects 2\n");
@@ -106,7 +111,7 @@
 	y += 35;
 
 //printf("FormatTools::create_objects 3\n");
-	window->add_subwindow(format_title = new BC_Title(x, y, "File Format:"));
+	window->add_subwindow(format_title = new BC_Title(x, y, _("File Format:")));
 	x += 90;
 	window->add_subwindow(format_text = new BC_TextBox(x, 
 		y, 
@@ -125,7 +130,7 @@
 	y += format_button->get_h() + 10;
 	if(do_audio)
 	{
-		window->add_subwindow(audio_title = new BC_Title(x, y, "Audio:", LARGEFONT, RED));
+		window->add_subwindow(audio_title = new BC_Title(x, y, _("Audio:"), LARGEFONT, RED));
 		x += 80;
 		window->add_subwindow(aparams_button = new FormatAParams(mwindow, this, x, y));
 		x += aparams_button->get_w() + 10;
@@ -140,7 +145,7 @@
 // Audio channels only used for recording.
 		if(prompt_audio_channels)
 		{
-			window->add_subwindow(channels_title = new BC_Title(x, y, "Number of audio channels to record:"));
+			window->add_subwindow(channels_title = new BC_Title(x, y, _("Number of audio channels to record:")));
 			x += 260;
 			window->add_subwindow(channels_button = new FormatChannels(x, y, asset));
 			x += channels_button->get_w() + 5;
@@ -158,7 +163,7 @@
 	{
 
 //printf("FormatTools::create_objects 8\n");
-		window->add_subwindow(video_title = new BC_Title(x, y, "Video:", LARGEFONT, RED));
+		window->add_subwindow(video_title = new BC_Title(x, y, _("Video:"), LARGEFONT, RED));
 		x += 80;
 		if(prompt_video_compression)
 		{
@@ -309,7 +314,7 @@
  : BC_Button(x, y, mwindow->theme->wrench_data)
 {
 	this->format = format;
-	set_tooltip("Configure audio compression");
+	set_tooltip(_("Configure audio compression"));
 }
 FormatAParams::~FormatAParams() 
 {
@@ -323,7 +328,7 @@
  : BC_Button(x, y, mwindow->theme->wrench_data)
 { 
 	this->format = format; 
-	set_tooltip("Configure video compression");
+	set_tooltip(_("Configure video compression"));
 }
 FormatVParams::~FormatVParams() 
 {
@@ -399,7 +404,7 @@
  : BC_CheckBox(x, 
  	y, 
 	default_, 
-	(char*)(format->recording ? "Record audio tracks" : "Render audio tracks"))
+	(char*)(format->recording ? _("Record audio tracks") : _("Render audio tracks")))
 { 
 	this->format = format; 
 }
@@ -414,7 +419,7 @@
  : BC_CheckBox(x, 
  	y, 
 	default_, 
-	(char*)(format->recording ? "Record video tracks" : "Render video tracks"))
+	(char*)(format->recording ? _("Record video tracks") : _("Render video tracks")))
 {
 this->format = format; 
 }
@@ -468,7 +473,7 @@
 }
 
 FormatToTracks::FormatToTracks(int x, int y, int *output)
- : BC_CheckBox(x, y, *output, "Overwrite project with output")
+ : BC_CheckBox(x, y, *output, _("Overwrite project with output"))
 { 
 	this->output = output; 
 }
@@ -486,7 +491,7 @@
  : BC_CheckBox(x, 
  	y, 
 	(*output == FILE_PER_LABEL) || (*output == FILE_PER_LABEL_FARM), 
-	"Create new file at each label")
+	_("Create new file at each label"))
 { 
 	this->output = output;
 	this->mwindow = mwindow;
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/formatwindow.C hvirtual-1.1.7/cinelerra/formatwindow.C
--- base-1.1.7/cinelerra/formatwindow.C	2003-09-24 01:06:45.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/formatwindow.C	2003-09-22 13:56:57.000000000 +0200
@@ -22,9 +22,9 @@
 	File file;
 	x = init_x = 10;
 
-	add_subwindow(new BC_Title(x, y, "Set parameters for this audio format:"));
+	add_subwindow(new BC_Title(x, y, _("Set parameters for this audio format:")));
 	y += 30;
-	add_subwindow(new BC_Title(x, y, "Bits:"));
+	add_subwindow(new BC_Title(x, y, _("Bits:")));
 	x += 45;
 	add_subwindow(new FormatBits(x, y, asset));
 	x += 100;
@@ -40,12 +40,12 @@
 
 	if(asset->format == FILE_PCM)
 	{
-		add_subwindow(new BC_Title(x, y, "Byte order:"));
+		add_subwindow(new BC_Title(x, y, _("Byte order:")));
 		y += 25;
-		add_subwindow(new BC_Title(x, y, "HiLo:", SMALLFONT));
+		add_subwindow(new BC_Title(x, y, _("HiLo:"), SMALLFONT));
 		add_subwindow(hilo_button = new FormatHILO(x + 30, y, asset));
 		x += 50;
-		add_subwindow(new BC_Title(x, y, "LoHi:", SMALLFONT));
+		add_subwindow(new BC_Title(x, y, _("LoHi:"), SMALLFONT));
 		add_subwindow(lohi_button = new FormatLOHI(x + 30, y, hilo_button, asset));
 		hilo_button->lohi = lohi_button;
 		y += 30;
@@ -82,13 +82,13 @@
 
 	if(asset->format == FILE_MOV)
 	{
-		add_subwindow(new BC_Title(x, y, "Set parameters for this video format:"));
+		add_subwindow(new BC_Title(x, y, _("Set parameters for this video format:")));
 		y += 30;
-		add_subwindow(new BC_Title(x, y, "Compression:"));
+		add_subwindow(new BC_Title(x, y, _("Compression:")));
 		x += 110;
 		add_subwindow(new FormatCompress(x, y, recording, asset, asset->compression));
 		x += 90;
-		add_subwindow(new BC_Title(x, y, "Quality:"));
+		add_subwindow(new BC_Title(x, y, _("Quality:")));
 		x += 70;
 		add_subwindow(new FormatQuality(x, y, asset, asset->quality));
 		y += 40;
@@ -97,9 +97,9 @@
 	else
 	if(asset->format == FILE_JPEG_LIST)
 	{
-		add_subwindow(new BC_Title(x, y, "Set parameters for this video format:"));
+		add_subwindow(new BC_Title(x, y, _("Set parameters for this video format:")));
 		y += 30;
-		add_subwindow(new BC_Title(x, y, "Quality:"));
+		add_subwindow(new BC_Title(x, y, _("Quality:")));
 		x += 70;
 		add_subwindow(new FormatQuality(x, y, asset, asset->quality));
 		y += 40;
@@ -107,7 +107,7 @@
 	}
 	else
 	{
-		add_subwindow(new BC_Title(x, y, "Video is not supported in this format."));
+		add_subwindow(new BC_Title(x, y, _("Video is not supported in this format.")));
 		y += 40;
 	}
 
@@ -173,7 +173,7 @@
 
 
 FormatDither::FormatDither(int x, int y, int *dither)
- : BC_CheckBox(x, y, *dither, "Dither")
+ : BC_CheckBox(x, y, *dither, _("Dither"))
 { this->dither = dither; }
 FormatDither::~FormatDither() {}
 int FormatDither::handle_event()
@@ -185,7 +185,7 @@
 
 
 FormatSigned::FormatSigned(int x, int y, Asset *asset)
- : BC_CheckBox(x, y, asset->signed_, "Signed")
+ : BC_CheckBox(x, y, asset->signed_, _("Signed"))
 { this->asset = asset; }
 FormatSigned::~FormatSigned() {}
 int FormatSigned::handle_event()
diff -ru -x 'Makefile*' -x '*.o' base-1.1.7/cinelerra/indexfile.C hvirtual-1.1.7/cinelerra/indexfile.C
--- base-1.1.7/cinelerra/indexfile.C	2003-09-24 01:11:33.000000000 +0200
+++ hvirtual-1.1.7/cinelerra/indexfile.C	2003-09-23 20:41:13.000000000 +0200
@@ -23,6 +23,10 @@
 #include "vframe.h"
 
 #include <string.h>
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
 
 // Use native sampling rates for files so the same index can be used in
 // multiple projects.
@@ -294,7 +298,7 @@
 		mwindow->preferences->index_directory, 
 		index_filename, 
 		asset->path);
-	sprintf(string, "Creating %s.", index_filename);
+	sprintf(string, _("Creating %s."), index_filename);
 
 	progress->update_title(string);
 	progress->update_length(length_source);
@@ -422,7 