summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dive.c3
-rw-r--r--divelist.c60
-rw-r--r--equipment.c53
-rw-r--r--file.c7
-rw-r--r--gtk-gui.c143
-rw-r--r--info.c65
-rw-r--r--libdivecomputer.c1
-rw-r--r--main.c22
-rw-r--r--parse-xml.c5
-rw-r--r--po/deutsch.po971
-rw-r--r--print.c33
-rw-r--r--profile.c1
-rw-r--r--statistics.c79
-rw-r--r--time.c1
-rw-r--r--uemis-downloader.c24
-rw-r--r--uemis.c37
16 files changed, 1255 insertions, 250 deletions
diff --git a/dive.c b/dive.c
index 641e1eda8..85b2f3b04 100644
--- a/dive.c
+++ b/dive.c
@@ -2,6 +2,7 @@
/* maintains the internal dive list structure */
#include <string.h>
#include <stdio.h>
+#include <glib/gi18n.h>
#include "dive.h"
@@ -614,7 +615,7 @@ static char *merge_text(const char *a, const char *b)
res = malloc(strlen(a) + strlen(b) + 9);
if (!res)
return (char *)a;
- sprintf(res, "(%s) or (%s)", a, b);
+ sprintf(res, _("(%s) or (%s)"), a, b);
return res;
}
diff --git a/divelist.c b/divelist.c
index 3272cdfdc..baef39696 100644
--- a/divelist.c
+++ b/divelist.c
@@ -15,6 +15,7 @@
#include <string.h>
#include <time.h>
#include <math.h>
+#include <glib/gi18n.h>
#include "divelist.h"
#include "dive.h"
@@ -1254,18 +1255,18 @@ static struct divelist_column {
int *visible;
} dl_column[] = {
[DIVE_NR] = { "#", nr_data_func, NULL, ALIGN_RIGHT | UNSORTABLE },
- [DIVE_DATE] = { "Date", date_data_func, NULL, ALIGN_LEFT },
+ [DIVE_DATE] = { N_("Date"), date_data_func, NULL, ALIGN_LEFT },
[DIVE_RATING] = { UTF8_BLACKSTAR, star_data_func, NULL, ALIGN_LEFT },
- [DIVE_DEPTH] = { "ft", depth_data_func, NULL, ALIGN_RIGHT },
- [DIVE_DURATION] = { "min", duration_data_func, NULL, ALIGN_RIGHT },
+ [DIVE_DEPTH] = { N_("ft"), depth_data_func, NULL, ALIGN_RIGHT },
+ [DIVE_DURATION] = { N_("min"), duration_data_func, NULL, ALIGN_RIGHT },
[DIVE_TEMPERATURE] = { UTF8_DEGREE "F", temperature_data_func, NULL, ALIGN_RIGHT, &visible_cols.temperature },
- [DIVE_TOTALWEIGHT] = { "lbs", weight_data_func, NULL, ALIGN_RIGHT, &visible_cols.totalweight },
- [DIVE_SUIT] = { "Suit", NULL, NULL, ALIGN_LEFT, &visible_cols.suit },
- [DIVE_CYLINDER] = { "Cyl", NULL, NULL, 0, &visible_cols.cylinder },
+ [DIVE_TOTALWEIGHT] = { N_("lbs"), weight_data_func, NULL, ALIGN_RIGHT, &visible_cols.totalweight },
+ [DIVE_SUIT] = { N_("Suit"), NULL, NULL, ALIGN_LEFT, &visible_cols.suit },
+ [DIVE_CYLINDER] = { N_("Cyl"), NULL, NULL, 0, &visible_cols.cylinder },
[DIVE_NITROX] = { "O" UTF8_SUBSCRIPT_2 "%", nitrox_data_func, nitrox_sort_func, 0, &visible_cols.nitrox },
- [DIVE_SAC] = { "SAC", sac_data_func, NULL, 0, &visible_cols.sac },
- [DIVE_OTU] = { "OTU", otu_data_func, NULL, 0, &visible_cols.otu },
- [DIVE_LOCATION] = { "Location", NULL, NULL, ALIGN_LEFT },
+ [DIVE_SAC] = { N_("SAC"), sac_data_func, NULL, 0, &visible_cols.sac },
+ [DIVE_OTU] = { N_("OTU"), otu_data_func, NULL, 0, &visible_cols.otu },
+ [DIVE_LOCATION] = { N_("Location"), NULL, NULL, ALIGN_LEFT },
};
@@ -1998,8 +1999,12 @@ static void delete_dive_cb(GtkWidget *menuitem, GtkTreePath *path)
static void popup_divelist_menu(GtkTreeView *tree_view, GtkTreeModel *model, int button, GdkEventButton *event)
{
GtkWidget *menu, *menuitem, *image;
- char editlabel[] = "Edit dives";
- char deletelabel[] = "Delete dives";
+ char editplurallabel[] = N_("Edit dives");
+ char editsinglelabel[] = N_("Edit dive");
+ char *editlabel;
+ char deleteplurallabel[] = N_("Delete dives");
+ char deletesinglelabel[] = N_("Delete dive");
+ char *deletelabel;
GtkTreePath *path, *prevpath, *nextpath;
GtkTreeIter iter, previter, nextiter;
int idx, previdx, nextidx;
@@ -2011,7 +2016,7 @@ static void popup_divelist_menu(GtkTreeView *tree_view, GtkTreeModel *model, int
gtk_tree_model_get(MODEL(dive_list), &iter, DIVE_INDEX, &idx, -1);
menu = gtk_menu_new();
- menuitem = gtk_image_menu_item_new_with_label("Add dive");
+ menuitem = gtk_image_menu_item_new_with_label(_("Add dive"));
image = gtk_image_new_from_stock(GTK_STOCK_ADD, GTK_ICON_SIZE_MENU);
gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuitem), image);
g_signal_connect(menuitem, "activate", G_CALLBACK(add_dive_cb), NULL);
@@ -2019,7 +2024,7 @@ static void popup_divelist_menu(GtkTreeView *tree_view, GtkTreeModel *model, int
if (idx < 0) {
/* mouse pointer is on a trip summary entry */
- menuitem = gtk_menu_item_new_with_label("Edit Trip Summary");
+ menuitem = gtk_menu_item_new_with_label(_("Edit Trip Summary"));
g_signal_connect(menuitem, "activate", G_CALLBACK(edit_trip_cb), path);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
prevpath = gtk_tree_path_copy(path);
@@ -2027,7 +2032,7 @@ static void popup_divelist_menu(GtkTreeView *tree_view, GtkTreeModel *model, int
gtk_tree_model_get_iter(MODEL(dive_list), &previter, prevpath)) {
gtk_tree_model_get(MODEL(dive_list), &previter, DIVE_INDEX, &previdx, -1);
if (previdx < 0) {
- menuitem = gtk_menu_item_new_with_label("Merge trip with trip above");
+ menuitem = gtk_menu_item_new_with_label(_("Merge trip with trip above"));
g_signal_connect(menuitem, "activate", G_CALLBACK(merge_trips_cb), path);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
}
@@ -2037,12 +2042,12 @@ static void popup_divelist_menu(GtkTreeView *tree_view, GtkTreeModel *model, int
if (gtk_tree_model_get_iter(MODEL(dive_list), &nextiter, nextpath)) {
gtk_tree_model_get(MODEL(dive_list), &nextiter, DIVE_INDEX, &nextidx, -1);
if (nextidx < 0) {
- menuitem = gtk_menu_item_new_with_label("Merge trip with trip below");
+ menuitem = gtk_menu_item_new_with_label(_("Merge trip with trip below"));
g_signal_connect(menuitem, "activate", G_CALLBACK(merge_trips_cb), nextpath);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
}
}
- menuitem = gtk_menu_item_new_with_label("Remove Trip");
+ menuitem = gtk_menu_item_new_with_label(_("Remove Trip"));
g_signal_connect(menuitem, "activate", G_CALLBACK(remove_trip_cb), path);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
} else {
@@ -2050,8 +2055,11 @@ static void popup_divelist_menu(GtkTreeView *tree_view, GtkTreeModel *model, int
/* if we right click on selected dive(s), edit or delete those */
if (dive->selected) {
if (amount_selected == 1) {
- deletelabel[strlen(deletelabel) - 1] = '\0';
- editlabel[strlen(editlabel) - 1] = '\0';
+ deletelabel = _(deletesinglelabel);
+ editlabel = _(editsinglelabel);
+ } else {
+ deletelabel = _(deleteplurallabel);
+ editlabel = _(editplurallabel);
}
menuitem = gtk_menu_item_new_with_label(deletelabel);
g_signal_connect(menuitem, "activate", G_CALLBACK(delete_selected_dives_cb), path);
@@ -2061,12 +2069,12 @@ static void popup_divelist_menu(GtkTreeView *tree_view, GtkTreeModel *model, int
g_signal_connect(menuitem, "activate", G_CALLBACK(edit_selected_dives_cb), NULL);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
} else {
- deletelabel[strlen(deletelabel) - 1] = '\0';
+ deletelabel = _(deletesinglelabel);
menuitem = gtk_menu_item_new_with_label(deletelabel);
g_signal_connect(menuitem, "activate", G_CALLBACK(delete_dive_cb), path);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
- editlabel[strlen(editlabel) - 1] = '\0';
+ editlabel = _(editsinglelabel);
menuitem = gtk_menu_item_new_with_label(editlabel);
g_signal_connect(menuitem, "activate", G_CALLBACK(edit_dive_from_path_cb), path);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
@@ -2077,7 +2085,7 @@ static void popup_divelist_menu(GtkTreeView *tree_view, GtkTreeModel *model, int
int *indices = gtk_tree_path_get_indices(path);
/* top level dive or child dive that is not the first child */
if (depth == 1 || indices[1] > 0) {
- menuitem = gtk_menu_item_new_with_label("Create new trip above");
+ menuitem = gtk_menu_item_new_with_label(_("Create new trip above"));
g_signal_connect(menuitem, "activate", G_CALLBACK(insert_trip_before_cb), path);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
}
@@ -2087,24 +2095,24 @@ static void popup_divelist_menu(GtkTreeView *tree_view, GtkTreeModel *model, int
gtk_tree_path_prev(prevpath) &&
gtk_tree_model_get_iter(MODEL(dive_list), &previter, prevpath) &&
gtk_tree_model_iter_n_children(model, &previter)) {
- menuitem = gtk_menu_item_new_with_label("Add to trip above");
+ menuitem = gtk_menu_item_new_with_label(_("Add to trip above"));
g_signal_connect(menuitem, "activate", G_CALLBACK(merge_dive_into_trip_above_cb), path);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
}
if (DIVE_IN_TRIP(dive)) {
if (dive->selected && amount_selected > 1)
- menuitem = gtk_menu_item_new_with_label("Remove selected dives from trip");
+ menuitem = gtk_menu_item_new_with_label(_("Remove selected dives from trip"));
else
- menuitem = gtk_menu_item_new_with_label("Remove dive from trip");
+ menuitem = gtk_menu_item_new_with_label(_("Remove dive from trip"));
g_signal_connect(menuitem, "activate", G_CALLBACK(remove_from_trip_cb), path);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
}
}
}
- menuitem = gtk_menu_item_new_with_label("Expand all");
+ menuitem = gtk_menu_item_new_with_label(_("Expand all"));
g_signal_connect(menuitem, "activate", G_CALLBACK(expand_all_cb), tree_view);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
- menuitem = gtk_menu_item_new_with_label("Collapse all");
+ menuitem = gtk_menu_item_new_with_label(_("Collapse all"));
g_signal_connect(menuitem, "activate", G_CALLBACK(collapse_all_cb), tree_view);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
gtk_widget_show_all(menu);
diff --git a/equipment.c b/equipment.c
index e30f40d1e..1a6de41d7 100644
--- a/equipment.c
+++ b/equipment.c
@@ -12,6 +12,7 @@
#include <stdlib.h>
#include <stdarg.h>
#include <time.h>
+#include <glib/gi18n.h>
#include "dive.h"
#include "display.h"
@@ -540,7 +541,7 @@ static void set_one_weightsystem(void *_data, GtkListStore *model, GtkTreeIter *
weightsystem_t *ws = _data;
gtk_list_store_set(model, iter,
- WS_DESC, ws->description ? : "unspecified",
+ WS_DESC, ws->description ? : _("unspecified"),
WS_WEIGHT, ws->weight.grams,
-1);
}
@@ -818,11 +819,11 @@ static struct ws_info {
const char *name;
int grams;
} ws_info[100] = {
- { "integrated", 0 },
- { "belt", 0 },
- { "ankle", 0 },
- { "bar", 0 },
- { "clip-on", 0 },
+ { N_("integrated"), 0 },
+ { N_("belt"), 0 },
+ { N_("ankle"), 0 },
+ { N_("bar"), 0 },
+ { N_("clip-on"), 0 },
};
static void fill_ws_list(GtkListStore *store)
@@ -833,7 +834,7 @@ static void fill_ws_list(GtkListStore *store)
while (info->name) {
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter,
- 0, info->name,
+ 0, _(info->name),
1, info->grams,
-1);
info++;
@@ -922,7 +923,7 @@ static void cylinder_widget(GtkWidget *vbox, struct cylinder_widget *cylinder, G
* Cylinder type: description, size and
* working pressure
*/
- frame = gtk_frame_new("Cylinder");
+ frame = gtk_frame_new(_("Cylinder"));
hbox = gtk_hbox_new(FALSE, 3);
gtk_container_add(GTK_CONTAINER(frame), hbox);
@@ -956,12 +957,12 @@ static void cylinder_widget(GtkWidget *vbox, struct cylinder_widget *cylinder, G
/*
* Cylinder start/end pressures
*/
- hbox = frame_box("Pressure", vbox);
+ hbox = frame_box(_("Pressure"), vbox);
- widget = labeled_spinbutton(hbox, "Start", 0, 5000, 1);
+ widget = labeled_spinbutton(hbox, _("Start"), 0, 5000, 1);
cylinder->start = widget;
- widget = labeled_spinbutton(hbox, "End", 0, 5000, 1);
+ widget = labeled_spinbutton(hbox, _("End"), 0, 5000, 1);
cylinder->end = widget;
cylinder->pressure_button = gtk_check_button_new();
@@ -971,7 +972,7 @@ static void cylinder_widget(GtkWidget *vbox, struct cylinder_widget *cylinder, G
/*
* Cylinder gas mix: Air, Nitrox or Trimix
*/
- hbox = frame_box("Gasmix", vbox);
+ hbox = frame_box(_("Gasmix"), vbox);
widget = labeled_spinbutton(hbox, "O"UTF8_SUBSCRIPT_2 "%", 1, 100, 0.1);
cylinder->o2 = widget;
@@ -1008,7 +1009,7 @@ static void ws_widget(GtkWidget *vbox, struct ws_widget *ws_widget, GtkListStore
/*
* weight_system: description and weight
*/
- frame = gtk_frame_new("Weight");
+ frame = gtk_frame_new(_("Weight"));
hbox = gtk_hbox_new(FALSE, 3);
gtk_container_add(GTK_CONTAINER(frame), hbox);
@@ -1058,7 +1059,7 @@ static int edit_cylinder_dialog(GtkWidget *w, int index, cylinder_t *cyl, int w_
return 0;
*cyl = dive->cylinder[index];
- dialog = gtk_dialog_new_with_buttons("Cylinder",
+ dialog = gtk_dialog_new_with_buttons(_("Cylinder"),
GTK_WINDOW(main_window),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
@@ -1113,7 +1114,7 @@ static int edit_weightsystem_dialog(GtkWidget *w, int index, weightsystem_t *ws,
return 0;
*ws = dive->weightsystem[index];
- dialog = gtk_dialog_new_with_buttons("Weight System",
+ dialog = gtk_dialog_new_with_buttons(_("Weight System"),
GTK_WINDOW(main_window),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
@@ -1374,7 +1375,7 @@ static void size_data_func(GtkTreeViewColumn *col,
if (size)
snprintf(buffer, sizeof(buffer), "%.1f", size);
else
- strcpy(buffer, "unkn");
+ strcpy(buffer, _("unkn"));
g_object_set(renderer, "text", buffer, NULL);
}
@@ -1394,7 +1395,7 @@ static void weight_data_func(GtkTreeViewColumn *col,
if (grams)
snprintf(buffer, sizeof(buffer), "%.*f", decimals, value);
else
- strcpy(buffer, "unkn");
+ strcpy(buffer, _("unkn"));
g_object_set(renderer, "text", buffer, NULL);
}
@@ -1481,11 +1482,11 @@ GtkWidget *cylinder_list_widget(int w_idx)
"enable-grid-lines", GTK_TREE_VIEW_GRID_LINES_BOTH,
NULL);
- tree_view_column(tree_view, CYL_DESC, "Type", NULL, ALIGN_LEFT | UNSORTABLE);
- tree_view_column(tree_view, CYL_SIZE, "Size", size_data_func, ALIGN_RIGHT | UNSORTABLE);
- tree_view_column(tree_view, CYL_WORKP, "MaxPress", pressure_data_func, ALIGN_RIGHT | UNSORTABLE);
- tree_view_column(tree_view, CYL_STARTP, "Start", pressure_data_func, ALIGN_RIGHT | UNSORTABLE);
- tree_view_column(tree_view, CYL_ENDP, "End", pressure_data_func, ALIGN_RIGHT | UNSORTABLE);
+ tree_view_column(tree_view, CYL_DESC, _("Type"), NULL, ALIGN_LEFT | UNSORTABLE);
+ tree_view_column(tree_view, CYL_SIZE, _("Size"), size_data_func, ALIGN_RIGHT | UNSORTABLE);
+ tree_view_column(tree_view, CYL_WORKP, _("MaxPress"), pressure_data_func, ALIGN_RIGHT | UNSORTABLE);
+ tree_view_column(tree_view, CYL_STARTP, _("Start"), pressure_data_func, ALIGN_RIGHT | UNSORTABLE);
+ tree_view_column(tree_view, CYL_ENDP, _("End"), pressure_data_func, ALIGN_RIGHT | UNSORTABLE);
tree_view_column(tree_view, CYL_O2, "O" UTF8_SUBSCRIPT_2 "%", percentage_data_func, ALIGN_RIGHT | UNSORTABLE);
tree_view_column(tree_view, CYL_HE, "He%", percentage_data_func, ALIGN_RIGHT | UNSORTABLE);
return tree_view;
@@ -1509,8 +1510,8 @@ GtkWidget *weightsystem_list_widget(int w_idx)
"enable-grid-lines", GTK_TREE_VIEW_GRID_LINES_BOTH,
NULL);
- tree_view_column(tree_view, WS_DESC, "Type", NULL, ALIGN_LEFT | UNSORTABLE);
- tree_view_column(tree_view, WS_WEIGHT, "weight",
+ tree_view_column(tree_view, WS_DESC, _("Type"), NULL, ALIGN_LEFT | UNSORTABLE);
+ tree_view_column(tree_view, WS_WEIGHT, _("weight"),
weight_data_func, ALIGN_RIGHT | UNSORTABLE);
return tree_view;
@@ -1568,7 +1569,7 @@ GtkWidget *equipment_widget(int w_idx)
hbox = gtk_hbox_new(FALSE, 3);
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 3);
- frame = gtk_frame_new("Cylinders");
+ frame = gtk_frame_new(_("Cylinders"));
gtk_box_pack_start(GTK_BOX(hbox), frame, TRUE, FALSE, 3);
framebox = gtk_vbox_new(FALSE, 3);
@@ -1605,7 +1606,7 @@ GtkWidget *equipment_widget(int w_idx)
tree_view = weightsystem_list_create(w_idx);
weightsystem_list[w_idx].tree_view = GTK_TREE_VIEW(tree_view);
- frame = gtk_frame_new("Weight");
+ frame = gtk_frame_new(_("Weight"));
gtk_box_pack_start(GTK_BOX(hbox), frame, TRUE, FALSE, 3);
framebox = gtk_vbox_new(FALSE, 3);
diff --git a/file.c b/file.c
index 1e58a4afd..93abb8b9e 100644
--- a/file.c
+++ b/file.c
@@ -4,6 +4,7 @@
#include <stdlib.h>
#include <string.h>
#include <errno.h>
+#include <glib/gi18n.h>
#include "dive.h"
#include "file.h"
@@ -71,7 +72,7 @@ static void suunto_read(struct zip_file *file, GError **error)
size = read * 3 / 2;
mem = realloc(mem, size);
}
- parse_xml_buffer("SDE file", mem, read, error, FALSE);
+ parse_xml_buffer(_("SDE file"), mem, read, error, FALSE);
free(mem);
}
#endif
@@ -258,11 +259,11 @@ void parse_file(const char *filename, GError **error, gboolean possible_default_
if (default_filename && ! strcmp(filename, default_filename))
return;
- g_warning("Failed to read '%s'.\n", filename);
+ g_warning(_("Failed to read '%s'.\n"), filename);
if (error) {
*error = g_error_new(g_quark_from_string("subsurface"),
DIVE_ERROR_PARSE,
- "Failed to read '%s'",
+ _("Failed to read '%s'"),
filename);
}
return;
diff --git a/gtk-gui.c b/gtk-gui.c
index e5ac16f94..79e7d35b8 100644
--- a/gtk-gui.c
+++ b/gtk-gui.c
@@ -3,6 +3,8 @@
/* creates the window and overall layout
* divelist, dive info, equipment and printing are handled in their own source files
*/
+#include <libintl.h>
+#include <glib/gi18n.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
@@ -135,7 +137,7 @@ void report_error(GError* error)
{
error_count++;
char buffer[256];
- snprintf(buffer, sizeof(buffer), "Failed to open %i files.", error_count);
+ snprintf(buffer, sizeof(buffer), _("Failed to open %i files."), error_count);
gtk_label_set(GTK_LABEL(error_label), buffer);
}
}
@@ -148,7 +150,7 @@ static GtkFileFilter *setup_filter(void)
gtk_file_filter_add_pattern(filter, "*.sda");
gtk_file_filter_add_pattern(filter, "*.SDA");
gtk_file_filter_add_mime_type(filter, "text/xml");
- gtk_file_filter_set_name(filter, "XML file");
+ gtk_file_filter_set_name(filter, _("XML file"));
return filter;
}
@@ -160,7 +162,7 @@ static void file_save_as(GtkWidget *w, gpointer data)
char *current_file;
char *current_dir;
- dialog = gtk_file_chooser_dialog_new("Save File As",
+ dialog = gtk_file_chooser_dialog_new(_("Save File As"),
GTK_WINDOW(main_window),
GTK_FILE_CHOOSER_ACTION_SAVE,
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
@@ -223,7 +225,7 @@ static gboolean ask_save_changes()
{
GtkWidget *dialog, *label, *content;
gboolean quit = TRUE;
- dialog = gtk_dialog_new_with_buttons("Save Changes?",
+ dialog = gtk_dialog_new_with_buttons(_("Save Changes?"),
GTK_WINDOW(main_window), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
GTK_STOCK_NO, GTK_RESPONSE_NO,
@@ -233,11 +235,11 @@ static gboolean ask_save_changes()
if (!existing_filename){
label = gtk_label_new (
- "You have unsaved changes\nWould you like to save those before closing the datafile?");
+ _("You have unsaved changes\nWould you like to save those before closing the datafile?"));
} else {
char *label_text = (char*) malloc(sizeof(char) * (94 + strlen(existing_filename)));
sprintf(label_text,
- "You have unsaved changes to file: %s \nWould you like to save those before closing the datafile?",
+ _("You have unsaved changes to file: %s \nWould you like to save those before closing the datafile?"),
existing_filename);
label = gtk_label_new (label_text);
free(label_text);
@@ -308,7 +310,7 @@ static void file_open(GtkWidget *w, gpointer data)
GtkFileFilter *filter;
const char *current_default;
- dialog = gtk_file_chooser_dialog_new("Open File",
+ dialog = gtk_file_chooser_dialog_new(_("Open File"),
GTK_WINDOW(main_window),
GTK_FILE_CHOOSER_ACTION_OPEN,
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
@@ -515,7 +517,7 @@ static void pick_default_file(GtkWidget *w, GtkButton *button)
GtkFileFilter *filter;
struct stat sb;
- fs_dialog = gtk_file_chooser_dialog_new("Choose Default XML File",
+ fs_dialog = gtk_file_chooser_dialog_new(_("Choose Default XML File"),
GTK_WINDOW(main_window),
GTK_FILE_CHOOSER_ACTION_SAVE,
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
@@ -565,57 +567,57 @@ static void preferences_dialog(GtkWidget *w, gpointer data)
menu_units = output_units;
- dialog = gtk_dialog_new_with_buttons("Preferences",
+ dialog = gtk_dialog_new_with_buttons(_("Preferences"),
GTK_WINDOW(main_window),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
NULL);
- frame = gtk_frame_new("Units");
+ frame = gtk_frame_new(_("Units"));
vbox = gtk_dialog_get_content_area(GTK_DIALOG(dialog));
gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 5);
box = gtk_vbox_new(FALSE, 6);
gtk_container_add(GTK_CONTAINER(frame), box);
- create_radio(box, "Depth:",
- "Meter", set_meter, (output_units.length == METERS),
- "Feet", set_feet, (output_units.length == FEET),
+ create_radio(box, _("Depth:"),
+ _("Meter"), set_meter, (output_units.length == METERS),
+ _("Feet"), set_feet, (output_units.length == FEET),
NULL);
- create_radio(box, "Pressure:",
- "Bar", set_bar, (output_units.pressure == BAR),
- "PSI", set_psi, (output_units.pressure == PSI),
+ create_radio(box, _("Pressure:"),
+ _("Bar"), set_bar, (output_units.pressure == BAR),
+ _("PSI"), set_psi, (output_units.pressure == PSI),
NULL);
- create_radio(box, "Volume:",
- "Liter", set_liter, (output_units.volume == LITER),
- "CuFt", set_cuft, (output_units.volume == CUFT),
+ create_radio(box, _("Volume:"),
+ _("Liter"), set_liter, (output_units.volume == LITER),
+ _("CuFt"), set_cuft, (output_units.volume == CUFT),
NULL);
- create_radio(box, "Temperature:",
- "Celsius", set_celsius, (output_units.temperature == CELSIUS),
- "Fahrenheit", set_fahrenheit, (output_units.temperature == FAHRENHEIT),
+ create_radio(box, _("Temperature:"),
+ _("Celsius"), set_celsius, (output_units.temperature == CELSIUS),
+ _("Fahrenheit"), set_fahrenheit, (output_units.temperature == FAHRENHEIT),
NULL);
- create_radio(box, "Weight:",
- "kg", set_kg, (output_units.weight == KG),
- "lbs", set_lbs, (output_units.weight == LBS),
+ create_radio(box, _("Weight:"),
+ _("kg"), set_kg, (output_units.weight == KG),
+ _("lbs"), set_lbs, (output_units.weight == LBS),
NULL);
- frame = gtk_frame_new("Show Columns");
+ frame = gtk_frame_new(_("Show Columns"));
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), frame, FALSE, FALSE, 5);
box = gtk_hbox_new(FALSE, 6);
gtk_container_add(GTK_CONTAINER(frame), box);
- button = gtk_check_button_new_with_label("Temp");
+ button = gtk_check_button_new_with_label(_("Temp"));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), visible_cols.temperature);
gtk_box_pack_start(GTK_BOX(box), button, FALSE, FALSE, 6);
g_signal_connect(G_OBJECT(button), "toggled", G_CALLBACK(temperature_toggle), NULL);
- button = gtk_check_button_new_with_label("Cyl");
+ button = gtk_check_button_new_with_label(_("Cyl"));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), visible_cols.cylinder);
gtk_box_pack_start(GTK_BOX(box), button, FALSE, FALSE, 6);
g_signal_connect(G_OBJECT(button), "toggled", G_CALLBACK(cylinder_toggle), NULL);
@@ -625,44 +627,44 @@ static void preferences_dialog(GtkWidget *w, gpointer data)
gtk_box_pack_start(GTK_BOX(box), button, FALSE, FALSE, 6);
g_signal_connect(G_OBJECT(button), "toggled", G_CALLBACK(nitrox_toggle), NULL);
- button = gtk_check_button_new_with_label("SAC");
+ button = gtk_check_button_new_with_label(_("SAC"));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), visible_cols.sac);
gtk_box_pack_start(GTK_BOX(box), button, FALSE, FALSE, 6);
g_signal_connect(G_OBJECT(button), "toggled", G_CALLBACK(sac_toggle), NULL);
- button = gtk_check_button_new_with_label("OTU");
+ button = gtk_check_button_new_with_label(_("OTU"));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), visible_cols.otu);
gtk_box_pack_start(GTK_BOX(box), button, FALSE, FALSE, 6);
g_signal_connect(G_OBJECT(button), "toggled", G_CALLBACK(otu_toggle), NULL);
- button = gtk_check_button_new_with_label("Weight");
+ button = gtk_check_button_new_with_label(_("Weight"));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), visible_cols.totalweight);
gtk_box_pack_start(GTK_BOX(box), button, FALSE, FALSE, 6);
g_signal_connect(G_OBJECT(button), "toggled", G_CALLBACK(totalweight_toggle), NULL);
- button = gtk_check_button_new_with_label("Suit");
+ button = gtk_check_button_new_with_label(_("Suit"));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), visible_cols.suit);
gtk_box_pack_start(GTK_BOX(box), button, FALSE, FALSE, 6);
g_signal_connect(G_OBJECT(button), "toggled", G_CALLBACK(suit_toggle), NULL);
- frame = gtk_frame_new("Divelist Font");
+ frame = gtk_frame_new(_("Divelist Font"));
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), frame, FALSE, FALSE, 5);
font = gtk_font_button_new_with_font(divelist_font);
gtk_container_add(GTK_CONTAINER(frame),font);
- frame = gtk_frame_new("Misc. Options");
+ frame = gtk_frame_new(_("Misc. Options"));
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), frame, FALSE, FALSE, 5);
box = gtk_hbox_new(FALSE, 6);
gtk_container_add(GTK_CONTAINER(frame), box);
- button = gtk_check_button_new_with_label("Automatically group dives in trips");
+ button = gtk_check_button_new_with_label(_("Automatically group dives in trips"));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), autogroup);
gtk_box_pack_start(GTK_BOX(box), button, FALSE, FALSE, 6);
g_signal_connect(G_OBJECT(button), "toggled", G_CALLBACK(autogroup_toggle), NULL);
- frame = gtk_frame_new("Default XML Data File");
+ frame = gtk_frame_new(_("Default XML Data File"));
gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 5);
box = gtk_hbox_new(FALSE, 6);
gtk_container_add(GTK_CONTAINER(frame), box);
@@ -757,7 +759,7 @@ static void selectevents_dialog(GtkWidget *w, gpointer data)
int result;
GtkWidget *dialog, *frame, *vbox, *table;
- dialog = gtk_dialog_new_with_buttons("SelectEvents",
+ dialog = gtk_dialog_new_with_buttons(_("SelectEvents"),
GTK_WINDOW(main_window),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
@@ -766,7 +768,7 @@ static void selectevents_dialog(GtkWidget *w, gpointer data)
/* initialize the function that fills the table */
create_toggle(NULL, NULL, NULL);
- frame = gtk_frame_new("Enable / Disable Events");
+ frame = gtk_frame_new(_("Enable / Disable Events"));
vbox = gtk_dialog_get_content_area(GTK_DIALOG(dialog));
gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 5);
@@ -797,7 +799,7 @@ static void renumber_dialog(GtkWidget *w, gpointer data)
struct dive *dive;
GtkWidget *dialog, *frame, *button, *vbox;
- dialog = gtk_dialog_new_with_buttons("Renumber",
+ dialog = gtk_dialog_new_with_buttons(_("Renumber"),
GTK_WINDOW(main_window),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
@@ -806,7 +808,7 @@ static void renumber_dialog(GtkWidget *w, gpointer data)
vbox = gtk_dialog_get_content_area(GTK_DIALOG(dialog));
- frame = gtk_frame_new("New starting number");
+ frame = gtk_frame_new(_("New starting number"));
gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 5);
button = gtk_spin_button_new_with_range(1, 50000, 1);
@@ -846,10 +848,10 @@ static void about_dialog(GtkWidget *w, gpointer data)
gtk_show_about_dialog(NULL,
"program-name", "Subsurface",
- "comments", "Multi-platform divelog software in C",
+ "comments", _("Multi-platform divelog software in C"),
"license", "GPLv2",
"version", VERSION_STRING,
- "copyright", "Linus Torvalds, Dirk Hohndel, and others, 2011, 2012",
+ "copyright", _("Linus Torvalds, Dirk Hohndel, and others, 2011, 2012"),
"logo-icon-name", "subsurface",
/* Must be last: */
logo_property, logo,
@@ -894,36 +896,36 @@ static void toggle_zoom(GtkWidget *w, gpointer data)
}
static GtkActionEntry menu_items[] = {
- { "FileMenuAction", NULL, "File", NULL, NULL, NULL},
- { "LogMenuAction", NULL, "Log", NULL, NULL, NULL},
- { "ViewMenuAction", NULL, "View", NULL, NULL, NULL},
- { "FilterMenuAction", NULL, "Filter", NULL, NULL, NULL},
- { "HelpMenuAction", NULL, "Help", NULL, NULL, NULL},
+ { "FileMenuAction", NULL, N_("File"), NULL, NULL, NULL},
+ { "LogMenuAction", NULL, N_("Log"), NULL, NULL, NULL},
+ { "ViewMenuAction", NULL, N_("View"), NULL, NULL, NULL},
+ { "FilterMenuAction", NULL, N_("Filter"), NULL, NULL, NULL},
+ { "HelpMenuAction", NULL, N_("Help"), NULL, NULL, NULL},
{ "NewFile", GTK_STOCK_NEW, NULL, CTRLCHAR "N", NULL, G_CALLBACK(file_close) },
{ "OpenFile", GTK_STOCK_OPEN, NULL, CTRLCHAR "O", NULL, G_CALLBACK(file_open) },
{ "SaveFile", GTK_STOCK_SAVE, NULL, CTRLCHAR "S", NULL, G_CALLBACK(file_save) },
{ "SaveAsFile", GTK_STOCK_SAVE_AS, NULL, SHIFTCHAR CTRLCHAR "S", NULL, G_CALLBACK(file_save_as) },
{ "CloseFile", GTK_STOCK_CLOSE, NULL, NULL, NULL, G_CALLBACK(file_close) },
{ "Print", GTK_STOCK_PRINT, NULL, CTRLCHAR "P", NULL, G_CALLBACK(do_print) },
- { "ImportFile", GTK_STOCK_GO_BACK, "Import XML File(s)", CTRLCHAR "I", NULL, G_CALLBACK(import_files) },
- { "DownloadLog", GTK_STOCK_GO_DOWN, "Download From Dive Computer", CTRLCHAR "D", NULL, G_CALLBACK(download_dialog) },
- { "AddDive", GTK_STOCK_ADD, "Add Dive", NULL, NULL, G_CALLBACK(add_dive_cb) },
- { "Preferences", GTK_STOCK_PREFERENCES, "Preferences", PREFERENCE_ACCEL, NULL, G_CALLBACK(preferences_dialog) },
- { "Renumber", NULL, "Renumber", NULL, NULL, G_CALLBACK(renumber_dialog) },
- { "YearlyStats", NULL, "Yearly Statistics", NULL, NULL, G_CALLBACK(show_yearly_stats) },
- { "SelectEvents", NULL, "SelectEvents", NULL, NULL, G_CALLBACK(selectevents_dialog) },
+ { "ImportFile", GTK_STOCK_GO_BACK, N_("Import XML File(s)"), CTRLCHAR "I", NULL, G_CALLBACK(import_files) },
+ { "DownloadLog", GTK_STOCK_GO_DOWN, N_("Download From Dive Computer"), CTRLCHAR "D", NULL, G_CALLBACK(download_dialog) },
+ { "AddDive", GTK_STOCK_ADD, N_("Add Dive"), NULL, NULL, G_CALLBACK(add_dive_cb) },
+ { "Preferences", GTK_STOCK_PREFERENCES, N_("Preferences"), PREFERENCE_ACCEL, NULL, G_CALLBACK(preferences_dialog) },
+ { "Renumber", NULL, N_("Renumber"), NULL, NULL, G_CALLBACK(renumber_dialog) },
+ { "YearlyStats", NULL, N_("Yearly Statistics"), NULL, NULL, G_CALLBACK(show_yearly_stats) },
+ { "SelectEvents", NULL, N_("SelectEvents"), NULL, NULL, G_CALLBACK(selectevents_dialog) },
{ "Quit", GTK_STOCK_QUIT, NULL, CTRLCHAR "Q", NULL, G_CALLBACK(quit) },
{ "About", GTK_STOCK_ABOUT, NULL, NULL, NULL, G_CALLBACK(about_dialog) },
- { "ViewList", NULL, "List", CTRLCHAR "1", NULL, G_CALLBACK(view_list) },
- { "ViewProfile", NULL, "Profile", CTRLCHAR "2", NULL, G_CALLBACK(view_profile) },
- { "ViewInfo", NULL, "Info", CTRLCHAR "3", NULL, G_CALLBACK(view_info) },
- { "ViewThree", NULL, "Three", CTRLCHAR "4", NULL, G_CALLBACK(view_three) },
+ { "ViewList", NULL, N_("List"), CTRLCHAR "1", NULL, G_CALLBACK(view_list) },
+ { "ViewProfile", NULL, N_("Profile"), CTRLCHAR "2", NULL, G_CALLBACK(view_profile) },
+ { "ViewInfo", NULL, N_("Info"), CTRLCHAR "3", NULL, G_CALLBACK(view_info) },
+ { "ViewThree", NULL, N_("Three"), CTRLCHAR "4", NULL, G_CALLBACK(view_three) },
};
static gint nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
static GtkToggleActionEntry toggle_items[] = {
- { "Autogroup", NULL, "Autogroup", NULL, NULL, G_CALLBACK(autogroup_cb), FALSE },
- { "ToggleZoom", NULL, "Toggle Zoom", CTRLCHAR "0", NULL, G_CALLBACK(toggle_zoom), FALSE },
+ { "Autogroup", NULL, N_("Autogroup"), NULL, NULL, G_CALLBACK(autogroup_cb), FALSE },
+ { "ToggleZoom", NULL, N_("Toggle Zoom"), CTRLCHAR "0", NULL, G_CALLBACK(toggle_zoom), FALSE },
};
static gint ntoggle_items = sizeof (toggle_items) / sizeof (toggle_items[0]);
@@ -974,6 +976,7 @@ static const gchar* ui_string = " \
static GtkWidget *get_menubar_menu(GtkWidget *window, GtkUIManager *ui_manager)
{
GtkActionGroup *action_group = gtk_action_group_new("Menu");
+ gtk_action_group_set_translation_domain(action_group, "subsurface");
gtk_action_group_add_actions(action_group, menu_items, nmenu_items, 0);
toggle_items[0].is_active = autogroup;
gtk_action_group_add_toggle_actions(action_group, toggle_items, ntoggle_items, 0);
@@ -1106,19 +1109,19 @@ void init_ui(int *argcp, char ***argvp)
/* Frame for extended dive info */
nb_page = extended_dive_info_widget();
- gtk_notebook_append_page(GTK_NOTEBOOK(notebook), nb_page, gtk_label_new("Dive Notes"));
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook), nb_page, gtk_label_new(_("Dive Notes")));
/* Frame for dive equipment */
nb_page = equipment_widget(W_IDX_PRIMARY);
- gtk_notebook_append_page(GTK_NOTEBOOK(notebook), nb_page, gtk_label_new("Equipment"));
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook), nb_page, gtk_label_new(_("Equipment")));
/* Frame for single dive statistics */
nb_page = single_stats_widget();
- gtk_notebook_append_page(GTK_NOTEBOOK(notebook), nb_page, gtk_label_new("Dive Info"));
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook), nb_page, gtk_label_new(_("Dive Info")));
/* Frame for total dive statistics */
nb_page = total_stats_widget();
- gtk_notebook_append_page(GTK_NOTEBOOK(notebook), nb_page, gtk_label_new("Stats"));
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook), nb_page, gtk_label_new(_("Stats")));
gtk_widget_set_app_paintable(win, TRUE);
gtk_widget_show_all(win);
@@ -1327,7 +1330,7 @@ static GtkComboBox *dive_computer_selector(GtkWidget *vbox)
model = gtk_list_store_new(1, G_TYPE_POINTER);
default_index = fill_computer_list(model);
- frame = gtk_frame_new("Dive computer");
+ frame = gtk_frame_new(_("Dive computer"));
gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, TRUE, 3);
combo_box = gtk_combo_box_new_with_model(GTK_TREE_MODEL(model));
@@ -1358,7 +1361,7 @@ static GtkEntry *dive_computer_device(GtkWidget *vbox)
hbox = gtk_hbox_new(FALSE, 6);
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 3);
- frame = gtk_frame_new("Device name");
+ frame = gtk_frame_new(_("Device name"));
gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, TRUE, 3);
entry = gtk_entry_new();
@@ -1390,7 +1393,7 @@ void import_files(GtkWidget *w, gpointer data)
struct stat sb;
GSList *filenames = NULL;
- fs_dialog = gtk_file_chooser_dialog_new("Choose XML Files To Import Into Current Data File",
+ fs_dialog = gtk_file_chooser_dialog_new(_("Choose XML Files To Import Into Current Data File"),
GTK_WINDOW(main_window),
GTK_FILE_CHOOSER_ACTION_OPEN,
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
@@ -1465,7 +1468,7 @@ static GtkWidget *import_dive_computer(device_data_t *data, GtkDialog *dialog)
button = gtk_dialog_get_widget_for_response(dialog, GTK_RESPONSE_ACCEPT);
gtk_button_set_use_stock(GTK_BUTTON(button), 0);
- gtk_button_set_label(GTK_BUTTON(button), "Retry");
+ gtk_button_set_label(GTK_BUTTON(button), _("Retry"));
vbox = gtk_dialog_get_content_area(dialog);
@@ -1488,7 +1491,7 @@ void download_dialog(GtkWidget *w, gpointer data)
.devname = NULL,
};
- dialog = gtk_dialog_new_with_buttons("Download From Dive Computer",
+ dialog = gtk_dialog_new_with_buttons(_("Download From Dive Computer"),
GTK_WINDOW(main_window),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
@@ -1496,7 +1499,7 @@ void download_dialog(GtkWidget *w, gpointer data)
NULL);
vbox = gtk_dialog_get_content_area(GTK_DIALOG(dialog));
- label = gtk_label_new(" Please select dive computer and device. ");
+ label = gtk_label_new(_(" Please select dive computer and device. "));
gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 3);
computer = dive_computer_selector(vbox);
device = dive_computer_device(vbox);
diff --git a/info.c b/info.c
index 3dfaa3370..b1e19e6b0 100644
--- a/info.c
+++ b/info.c
@@ -13,6 +13,7 @@
#include <time.h>
#include <ctype.h>
#include <sys/time.h>
+#include <glib/gi18n.h>
#include "dive.h"
#include "display.h"
@@ -102,7 +103,7 @@ static int divename(char *buf, size_t size, struct dive *dive)
struct tm tm;
utc_mkdate(dive->when, &tm);
- return snprintf(buf, size, "Dive #%d - %s %02d/%02d/%04d at %d:%02d",
+ return snprintf(buf, size, _("Dive #%d - %s %02d/%02d/%04d at %d:%02d"),
dive->number,
weekday(tm.tm_wday),
tm.tm_mon+1, tm.tm_mday,
@@ -140,7 +141,7 @@ void show_dive_info(struct dive *dive)
if (!text)
text = "";
if (*text) {
- snprintf(buffer, sizeof(buffer), "Dive #%d - %s", dive->number, text);
+ snprintf(buffer, sizeof(buffer), _("Dive #%d - %s"), dive->number, text);
} else {
divename(buffer, sizeof(buffer), dive);
}
@@ -174,7 +175,7 @@ static int delete_dive_info(struct dive *dive)
if (!dive)
return 0;
- dialog = gtk_dialog_new_with_buttons("Delete Dive",
+ dialog = gtk_dialog_new_with_buttons(_("Delete Dive"),
GTK_WINDOW(main_window),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
@@ -223,8 +224,8 @@ static void add_menu_item(GtkMenu *menu, const char *label, const char *icon, vo
static void populate_popup_cb(GtkTextView *entry, GtkMenu *menu, gpointer user_data)
{
- add_menu_item(menu, "Delete", GTK_STOCK_DELETE, info_menu_delete_cb);
- add_menu_item(menu, "Edit", GTK_STOCK_EDIT, info_menu_edit_cb);
+ add_menu_item(menu, _("Delete"), GTK_STOCK_DELETE, info_menu_delete_cb);
+ add_menu_item(menu, _("Edit"), GTK_STOCK_EDIT, info_menu_edit_cb);
}
static GtkEntry *text_value(GtkWidget *box, const char *label)
@@ -449,17 +450,17 @@ static void save_dive_info_changes(struct dive *dive, struct dive *master, struc
static void dive_trip_widget(GtkWidget *box, dive_trip_t *trip, struct dive_info *info)
{
GtkWidget *hbox, *label;
- char buffer[80] = "Edit trip summary";
+ char buffer[80] = N_("Edit trip summary");
- label = gtk_label_new(buffer);
+ label = gtk_label_new(_(buffer));
gtk_box_pack_start(GTK_BOX(box), label, FALSE, TRUE, 0);
- info->location = text_entry(box, "Location", location_list, trip->location);
+ info->location = text_entry(box, _("Location"), location_list, trip->location);
hbox = gtk_hbox_new(FALSE, 3);
gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, TRUE, 0);
- info->notes = text_view(box, "Notes", READ_WRITE);
+ info->notes = text_view(box, _("Notes"), READ_WRITE);
if (trip->notes && *trip->notes)
gtk_text_buffer_set_text(gtk_text_view_get_buffer(info->notes), trip->notes, -1);
}
@@ -467,32 +468,32 @@ static void dive_trip_widget(GtkWidget *box, dive_trip_t *trip, struct dive_info
static void dive_info_widget(GtkWidget *box, struct dive *dive, struct dive_info *info, gboolean multi)
{
GtkWidget *hbox, *label, *frame, *equipment;
- char buffer[80] = "Edit multiple dives";
+ char buffer[80] = N_("Edit multiple dives");
if (!multi)
- divename(buffer, sizeof(buffer), dive);
- label = gtk_label_new(buffer);
+ divename(_(buffer), sizeof(_(buffer)), dive);
+ label = gtk_label_new(_(buffer));
gtk_box_pack_start(GTK_BOX(box), label, FALSE, TRUE, 0);
- info->location = text_entry(box, "Location", location_list, dive->location);
+ info->location = text_entry(box, _("Location"), location_list, dive->location);
hbox = gtk_hbox_new(FALSE, 3);
gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, TRUE, 0);
- info->divemaster = text_entry(hbox, "Dive master", people_list, dive->divemaster);
- info->buddy = text_entry(hbox, "Buddy", people_list, dive->buddy);
+ info->divemaster = text_entry(hbox, _("Dive master"), people_list, dive->divemaster);
+ info->buddy = text_entry(hbox, _("Buddy"), people_list, dive->buddy);
hbox = gtk_hbox_new(FALSE, 3);
gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, TRUE, 0);
- info->rating = text_entry(hbox, "Rating", star_list, star_strings[dive->rating]);
- info->suit = text_entry(hbox, "Suit", suit_list, dive->suit);
+ info->rating = text_entry(hbox, _("Rating"), star_list, star_strings[dive->rating]);
+ info->suit = text_entry(hbox, _("Suit"), suit_list, dive->suit);
/* only show notes if editing a single dive */
if (multi) {
info->notes = NULL;
} else {
- info->notes = text_view(box, "Notes", READ_WRITE);
+ info->notes = text_view(box, _("Notes"), READ_WRITE);
if (dive->notes && *dive->notes)
gtk_text_buffer_set_text(gtk_text_view_get_buffer(info->notes), dive->notes, -1);
}
@@ -500,7 +501,7 @@ static void dive_info_widget(GtkWidget *box, struct dive *dive, struct dive_info
gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, TRUE, 0);
/* create a secondary Equipment widget */
- frame = gtk_frame_new("Equipment");
+ frame = gtk_frame_new(_("Equipment"));
equipment = equipment_widget(W_IDX_SECONDARY);
gtk_container_add(GTK_CONTAINER(frame), equipment);
gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, TRUE, 0);
@@ -624,7 +625,7 @@ gboolean edit_trip(dive_trip_t *trip)
struct dive_info info;
memset(&info, 0, sizeof(struct dive_info));
- dialog = gtk_dialog_new_with_buttons("Edit Trip Info",
+ dialog = gtk_dialog_new_with_buttons(_("Edit Trip Info"),
GTK_WINDOW(main_window),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
@@ -665,7 +666,7 @@ int edit_multi_dive_info(struct dive *single_dive)
struct dive *master;
gboolean multi;
- dialog = gtk_dialog_new_with_buttons("Dive Info",
+ dialog = gtk_dialog_new_with_buttons(_("Dive Info"),
GTK_WINDOW(main_window),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
@@ -772,7 +773,7 @@ static timestamp_t dive_time_widget(struct dive *dive)
int success;
double depthinterval, val;
- dialog = gtk_dialog_new_with_buttons("Date and Time",
+ dialog = gtk_dialog_new_with_buttons(_("Date and Time"),
GTK_WINDOW(main_window),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
@@ -782,12 +783,12 @@ static timestamp_t dive_time_widget(struct dive *dive)
vbox = gtk_dialog_get_content_area(GTK_DIALOG(dialog));
/* Calendar hbox */
- hbox = frame_box(vbox, "Date:");
+ hbox = frame_box(vbox, _("Date:"));
cal = gtk_calendar_new();
gtk_box_pack_start(GTK_BOX(hbox), cal, FALSE, TRUE, 0);
/* Time hbox */
- hbox = frame_box(vbox, "Time");
+ hbox = frame_box(vbox, _("Time"));
h = gtk_spin_button_new_with_range (0.0, 23.0, 1.0);
m = gtk_spin_button_new_with_range (0.0, 59.0, 1.0);
@@ -827,12 +828,12 @@ static timestamp_t dive_time_widget(struct dive *dive)
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
/* Duration hbox */
- box = frame_box(hbox, "Duration (min)");
+ box = frame_box(hbox, _("Duration (min)"));
duration = gtk_spin_button_new_with_range (0.0, 1000.0, 1.0);
gtk_box_pack_end(GTK_BOX(box), duration, FALSE, FALSE, 0);
/* Depth box */
- box = frame_box(hbox, "Depth (%s):", output_units.length == FEET ? "ft" : "m");
+ box = frame_box(hbox, _("Depth (%s):"), output_units.length == FEET ? "ft" : "m");
if (output_units.length == FEET) {
depthinterval = 1.0;
} else {
@@ -901,20 +902,20 @@ GtkWidget *extended_dive_info_widget(void)
suit_list = gtk_list_store_new(1, G_TYPE_STRING);
gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
- location = text_value(vbox, "Location");
+ location = text_value(vbox, _("Location"));
hbox = gtk_hbox_new(FALSE, 3);
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0);
- divemaster = text_value(hbox, "Divemaster");
- buddy = text_value(hbox, "Buddy");
+ divemaster = text_value(hbox, _("Divemaster"));
+ buddy = text_value(hbox, _("Buddy"));
hbox = gtk_hbox_new(FALSE, 3);
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0);
- rating = text_value(hbox, "Rating");
- suit = text_value(hbox, "Suit");
+ rating = text_value(hbox, _("Rating"));
+ suit = text_value(hbox, _("Suit"));
- notes = text_view(vbox, "Notes", READ_ONLY);
+ notes = text_view(vbox, _("Notes"), READ_ONLY);
return vbox;
}
diff --git a/libdivecomputer.c b/libdivecomputer.c
index c9683fbb9..51d0a8c1d 100644
--- a/libdivecomputer.c
+++ b/libdivecomputer.c
@@ -2,6 +2,7 @@
#include <pthread.h>
#include <unistd.h>
#include <inttypes.h>
+#include <glib/gi18n.h>
#include "dive.h"
#include "divelist.h"
diff --git a/main.c b/main.c
index aa418e637..1ca484d0c 100644
--- a/main.c
+++ b/main.c
@@ -1,8 +1,11 @@
/* main.c */
+#include <locale.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
+#include <libintl.h>
+#include <glib/gi18n.h>
#include "dive.h"
#include "divelist.h"
@@ -29,17 +32,19 @@ static int sortfn(const void *_a, const void *_b)
const char *weekday(int wday)
{
- static const char wday_array[7][4] = {
- "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
+ static const char wday_array[7][7] = {
+ /*++GETTEXT: these are three letter days - we allow up to six code bytes */
+ N_("Sun"), N_("Mon"), N_("Tue"), N_("Wed"), N_("Thu"), N_("Fri"), N_("Sat")
};
return wday_array[wday];
}
const char *monthname(int mon)
{
- static const char month_array[12][4] = {
- "Jan", "Feb", "Mar", "Apr", "May", "Jun",
- "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
+ static const char month_array[12][7] = {
+ /*++GETTEXT: these are three letter months - we allow up to six code bytes*/
+ N_("Jan"), N_("Feb"), N_("Mar"), N_("Apr"), N_("May"), N_("Jun"),
+ N_("Jul"), N_("Aug"), N_("Sep"), N_("Oct"), N_("Nov"), N_("Dec"),
};
return month_array[mon];
}
@@ -221,6 +226,13 @@ int main(int argc, char **argv)
int i;
gboolean no_filenames = TRUE;
+ /* set up l18n - the search directory needs to change
+ * so that it uses the correct system directory when
+ * subsurface isn't run from the local directory */
+ setlocale( LC_ALL, "" );
+ bindtextdomain("subsurface", "./locale");
+ bind_textdomain_codeset("subsurface", "utf-8");
+ textdomain("subsurface");
output_units = SI_units;
subsurface_command_line_init(&argc, &argv);
diff --git a/parse-xml.c b/parse-xml.c
index 698fe2a2f..d6197b57d 100644
--- a/parse-xml.c
+++ b/parse-xml.c
@@ -11,6 +11,7 @@
#ifdef XSLT
#include <libxslt/transform.h>
#endif
+#include <glib/gi18n.h>
#include "dive.h"
#include "uemis.h"
@@ -1462,12 +1463,12 @@ void parse_xml_buffer(const char *url, const char *buffer, int size, GError **er
doc = xmlReadMemory(buffer, size, url, NULL, 0);
if (!doc) {
- fprintf(stderr, "Failed to parse '%s'.\n", url);
+ fprintf(stderr, _("Failed to parse '%s'.\n"), url);
if (error != NULL)
{
*error = g_error_new(g_quark_from_string("subsurface"),
DIVE_ERROR_PARSE,
- "Failed to parse '%s'",
+ _("Failed to parse '%s'"),
url);
}
return;
diff --git a/po/deutsch.po b/po/deutsch.po
new file mode 100644
index 000000000..464b26792
--- /dev/null
+++ b/po/deutsch.po
@@ -0,0 +1,971 @@
+# German translations for PACKAGE package
+# German messages for PACKAGE.
+# Copyright (C) 2012 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Dirk Hohndel <dirk@hohndel.org>, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: 2.0.1\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-10-11 07:42+0900\n"
+"PO-Revision-Date: 2012-10-10 16:27+0900\n"
+"Last-Translator: Dirk Hohndel <dirk@hohndel.org>\n"
+"Language-Team: German\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: statistics.c:160
+msgid ""
+"\n"
+"Average"
+msgstr ""
+"\n"
+"Durchschnitt"
+
+#: statistics.c:161
+msgid ""
+"\n"
+"Longest"
+msgstr ""
+"\n"
+"längster"
+
+#: statistics.c:162 statistics.c:163
+msgid ""
+"\n"
+"Maximum"
+msgstr ""
+"\n"
+"Grösste"
+
+#: statistics.c:161 statistics.c:162 statistics.c:163
+msgid ""
+"\n"
+"Minimum"
+msgstr ""
+"\n"
+"Kleinste"
+
+#: statistics.c:161
+msgid ""
+"\n"
+"Shortest"
+msgstr ""
+"\n"
+"Kürzeste"
+
+#: gtk-gui.c:1502
+msgid " Please select dive computer and device. "
+msgstr " Bitte Tauchcomputer und Gerät auswählen. "
+
+#: statistics.c:601 statistics.c:603 statistics.c:605
+#, c-format
+msgid "%.*f %s/min"
+msgstr "%.*f %s/min"
+
+#: print.c:252 statistics.c:512
+#, c-format
+msgid "%d min"
+msgstr "%d min"
+
+#: statistics.c:484
+#, c-format
+msgid "%dd %dh %dmin"
+msgstr "%dt %dst %dmin"
+
+#: statistics.c:486
+#, c-format
+msgid "%dh %dmin"
+msgstr "%dst %dmin"
+
+#: dive.c:618
+#, c-format
+msgid "(%s) or (%s)"
+msgstr "(%s) oder (%s)"
+
+#: gtk-gui.c:912
+msgid "Add Dive"
+msgstr "Tauchgang hinzufügen"
+
+#: divelist.c:2019
+msgid "Add dive"
+msgstr "Tauchgang hinzufügen"
+
+#: divelist.c:2098
+msgid "Add to trip above"
+msgstr "Zum obigen Trip hinzufügen"
+
+#: main.c:47
+msgid "Apr"
+msgstr "Apr"
+
+#: main.c:48
+msgid "Aug"
+msgstr "Aug"
+
+#: gtk-gui.c:927
+msgid "Autogroup"
+msgstr "Automatisch gruppieren"
+
+#: gtk-gui.c:662
+msgid "Automatically group dives in trips"
+msgstr "Automatisch die Tauchgänge in Trips gruppieren"
+
+#: statistics.c:668 statistics.c:705
+msgid "Avg Depth"
+msgstr "Durchschn. Tiefe"
+
+#: statistics.c:676
+msgid "Avg SAC"
+msgstr "Durchschn. Gasverbrauch"
+
+#: statistics.c:651
+msgid "Avg Temp"
+msgstr "Durchschn. Temp"
+
+#: statistics.c:658
+msgid "Avg Time"
+msgstr "Duchschn. Dauer"
+
+#: gtk-gui.c:590
+msgid "Bar"
+msgstr "bar"
+
+#: info.c:484 info.c:911 print.c:155
+msgid "Buddy"
+msgstr "Partner"
+
+#: gtk-gui.c:600
+msgid "Celsius"
+msgstr "Celsius"
+
+#: gtk-gui.c:520
+msgid "Choose Default XML File"
+msgstr "Default XML Datei auswählen"
+
+#: gtk-gui.c:1396
+msgid "Choose XML Files To Import Into Current Data File"
+msgstr ""
+"Bitte XML Dateien auswählen, die in die aktuelle Datei eingefügt werden "
+"sollen"
+
+#: divelist.c:2115
+msgid "Collapse all"
+msgstr "Alle einfalten"
+
+#: divelist.c:2088
+msgid "Create new trip above"
+msgstr "Neuen Trip darüber einfügen"
+
+#: gtk-gui.c:596
+msgid "CuFt"
+msgstr "cuft"
+
+#: divelist.c:1265 gtk-gui.c:620
+msgid "Cyl"
+msgstr "Tank"
+
+#: equipment.c:926 equipment.c:1062
+msgid "Cylinder"
+msgstr "Tank"
+
+#: equipment.c:1572
+msgid "Cylinders"
+msgstr "Tanks"
+
+#: divelist.c:1258 print.c:154 statistics.c:696
+msgid "Date"
+msgstr "Datum"
+
+#: info.c:776
+msgid "Date and Time"
+msgstr "Datum und Zeit"
+
+#: info.c:786
+msgid "Date:"
+msgstr "Datum:"
+
+#: main.c:48
+msgid "Dec"
+msgstr "Dez"
+
+#: gtk-gui.c:667
+msgid "Default XML Data File"
+msgstr "Default XML Datei"
+
+#: info.c:227
+msgid "Delete"
+msgstr "Löschen"
+
+#: info.c:178
+msgid "Delete Dive"
+msgstr "Tauchgang löschen"
+
+#: divelist.c:2006
+msgid "Delete dive"
+msgstr "Tauchgang löschen"
+
+#: divelist.c:2005
+msgid "Delete dives"
+msgstr "Tauchgänge löschen"
+
+#: print.c:154
+msgid "Depth"
+msgstr "Tiefe"
+
+#: statistics.c:161
+msgid ""
+"Depth\n"
+"Average"
+msgstr ""
+"Tiefe\n"
+"Durchschnitt"
+
+#: info.c:836
+#, c-format
+msgid "Depth (%s):"
+msgstr "Tiefe (%s):"
+
+#: uemis.c:156
+msgid "Depth Limit Exceeded"
+msgstr "Tiefenschwelle überschritten"
+
+#: gtk-gui.c:584
+msgid "Depth:"
+msgstr "Tiefe:"
+
+#: gtk-gui.c:1364
+msgid "Device name"
+msgstr "Geräte Name"
+
+#: print.c:67
+#, c-format
+msgid "Dive #%d - "
+msgstr "Tauchgang #%d - "
+
+#: info.c:144
+#, c-format
+msgid "Dive #%d - %s"
+msgstr "Tauchgang #%d - %s"
+
+#: info.c:106
+#, c-format
+msgid "Dive #%d - %s %02d/%02d/%04d at %d:%02d"
+msgstr "Tauchgang #%d - %s %02d/%02d/%04d um %d:%02d"
+
+#: gtk-gui.c:1120 info.c:669 statistics.c:687
+msgid "Dive Info"
+msgstr "Informationen"
+
+#: gtk-gui.c:1112
+msgid "Dive Notes"
+msgstr "Notizen"
+
+#: statistics.c:697
+msgid "Dive Time"
+msgstr "Startzeit"
+
+#: uemis.c:162
+msgid "Dive Time Alert"
+msgstr "Alarm: Tauchgangdauer"
+
+#: uemis.c:160
+msgid "Dive Time Info"
+msgstr "Info: Tauchgangdauer"
+
+#: gtk-gui.c:1333
+msgid "Dive computer"
+msgstr "Tauchcomputer"
+
+#: print.c:474
+msgid "Dive details"
+msgstr "Notizen zum Tauchgang"
+
+#: info.c:483
+msgid "Dive master"
+msgstr "Dive-Master"
+
+#: print.c:154
+msgid "Dive#"
+msgstr "Tauchgang Nr."
+
+#: gtk-gui.c:650
+msgid "Divelist Font"
+msgstr "Schriftart für Tauchliste"
+
+#: info.c:910
+msgid "Divemaster"
+msgstr "Divemaster"
+
+#: statistics.c:648
+msgid "Dives"
+msgstr "Tauchgänge"
+
+#: gtk-gui.c:911 gtk-gui.c:1494
+msgid "Download From Dive Computer"
+msgstr "Vom Tauchcomputer runterladen"
+
+#: statistics.c:160
+msgid ""
+"Duration\n"
+"Total"
+msgstr ""
+"Dauer\n"
+"Total"
+
+#: info.c:831
+msgid "Duration (min)"
+msgstr "Dauer (min)"
+
+#: info.c:228
+msgid "Edit"
+msgstr "Editieren"
+
+#: info.c:628
+msgid "Edit Trip Info"
+msgstr "Trip Informationen editieren"
+
+#: divelist.c:2027
+msgid "Edit Trip Summary"
+msgstr "Trip Übersicht editieren"
+
+#: divelist.c:2003
+msgid "Edit dive"
+msgstr "Tauchgang editieren"
+
+#: divelist.c:2002
+msgid "Edit dives"
+msgstr "Tauchgänge editieren"
+
+#: info.c:471
+msgid "Edit multiple dives"
+msgstr "Mehrere Tauchgänge editieren"
+
+#: info.c:453
+msgid "Edit trip summary"
+msgstr "Trip Übersicht editieren"
+
+#: gtk-gui.c:771
+msgid "Enable / Disable Events"
+msgstr "Ereignisse Ein-/Ausblenden"
+
+#: equipment.c:965 equipment.c:1489
+msgid "End"
+msgstr "Ende"
+
+#: gtk-gui.c:1116 info.c:504
+msgid "Equipment"
+msgstr "Ausrüstung"
+
+#: divelist.c:2112
+msgid "Expand all"
+msgstr "Alle ausfalten"
+
+#: gtk-gui.c:601
+msgid "Fahrenheit"
+msgstr "Fahrenheit"
+
+#: gtk-gui.c:140
+#, c-format
+msgid "Failed to open %i files."
+msgstr "Fehler beim Öffnen von %i Dateien"
+
+#: parse-xml.c:1471
+#, c-format
+msgid "Failed to parse '%s'"
+msgstr "Fehler beim Analysieren von '%s'"
+
+#: parse-xml.c:1466
+#, c-format
+msgid "Failed to parse '%s'.\n"
+msgstr "Fehler beim Analysieren von '%s'.\n"
+
+#: file.c:266
+#, c-format
+msgid "Failed to read '%s'"
+msgstr "Fehler beim Lesen von '%s'"
+
+#: file.c:262
+#, c-format
+msgid "Failed to read '%s'.\n"
+msgstr "Fehler beim Lesen von '%s'.\n"
+
+#: main.c:47
+msgid "Feb"
+msgstr "Feb"
+
+#: gtk-gui.c:586
+msgid "Feet"
+msgstr "Fuß"
+
+#: gtk-gui.c:899
+msgid "File"
+msgstr "Datei"
+
+#: gtk-gui.c:902
+msgid "Filter"
+msgstr "Filter"
+
+#: main.c:38
+msgid "Fri"
+msgstr "Fr"
+
+#: statistics.c:715
+msgid "Gas Used"
+msgstr "Gasverbrauch"
+
+#: equipment.c:975
+msgid "Gasmix"
+msgstr "Gasmischung"
+
+#: gtk-gui.c:903
+msgid "Help"
+msgstr "Hilfe"
+
+#: gtk-gui.c:910
+msgid "Import XML File(s)"
+msgstr "XML Datei(en) einlesen"
+
+#: gtk-gui.c:921
+msgid "Info"
+msgstr "Informatinen"
+
+#. ++GETTEXT: these are three character months
+#: main.c:47
+msgid "Jan"
+msgstr "Jan"
+
+#: main.c:48
+msgid "Jul"
+msgstr "Jul"
+
+#: main.c:47
+msgid "Jun"
+msgstr "Jun"
+
+#: gtk-gui.c:854
+msgid "Linus Torvalds, Dirk Hohndel, and others, 2011, 2012"
+msgstr "Linus Torvalds, Dirk Hohndel und andere, 2011, 2012"
+
+#: gtk-gui.c:919
+msgid "List"
+msgstr "Liste"
+
+#: gtk-gui.c:595
+msgid "Liter"
+msgstr "Liter"
+
+#: divelist.c:1269 info.c:458 info.c:478 info.c:905 print.c:155
+msgid "Location"
+msgstr "Ort"
+
+#: gtk-gui.c:900
+msgid "Log"
+msgstr "Log"
+
+#: statistics.c:659
+msgid "Longest Dive"
+msgstr "Längster Tauchgang"
+
+#: uemis.c:170
+msgid "Low Battery Alert"
+msgstr "Alarm: Batterie schwach"
+
+#: uemis.c:168
+msgid "Low Battery Warning"
+msgstr "Warnung: Batterie schwach"
+
+#: main.c:47
+msgid "Mar"
+msgstr "Mär"
+
+#: uemis.c:164
+msgid "Marker"
+msgstr "Markierung"
+
+#: print.c:154
+msgid "Master"
+msgstr "Master"
+
+#: uemis.c:158
+msgid "Max Deco Time Warning"
+msgstr "Warnung: Maximale Deco Zeit"
+
+#: statistics.c:666 statistics.c:704
+msgid "Max Depth"
+msgstr "Max. Tiefe"
+
+#: statistics.c:674
+msgid "Max SAC"
+msgstr "Max. Gasverbrauch"
+
+#: statistics.c:649
+msgid "Max Temp"
+msgstr "Max. Temp."
+
+#: print.c:94
+#, c-format
+msgid ""
+"Max depth: %.*f %s\n"
+"Duration: %d min\n"
+"%s"
+msgstr ""
+"Max. Tiefe: %.*f %s\n"
+"Dauer: %d min\n"
+"%s"
+
+#: equipment.c:1487
+msgid "MaxPress"
+msgstr "Max.Druck"
+
+#: main.c:47
+msgid "May"
+msgstr "Mai"
+
+#: divelist.c:2035
+msgid "Merge trip with trip above"
+msgstr "Trip mit dem darüber verbinden"
+
+#: divelist.c:2045
+msgid "Merge trip with trip below"
+msgstr "Trip mit dem darunter verbinden"
+
+#: gtk-gui.c:585
+msgid "Meter"
+msgstr "Meter"
+
+#: statistics.c:667
+msgid "Min Depth"
+msgstr "Min. Tiefe"
+
+#: statistics.c:675
+msgid "Min SAC"
+msgstr "Min. Gasverbrauch"
+
+#: statistics.c:650
+msgid "Min Temp"
+msgstr "Min. Temp."
+
+#: gtk-gui.c:656
+msgid "Misc. Options"
+msgstr "Verschiedene Optionen"
+
+#: main.c:38
+msgid "Mon"
+msgstr "Mo"
+
+#: gtk-gui.c:851
+msgid "Multi-platform divelog software in C"
+msgstr "Multi-Platform Tauchprogram in C"
+
+#: gtk-gui.c:811
+msgid "New starting number"
+msgstr "Neue erste Nummer"
+
+#: uemis.c:166
+msgid "No Tank Data"
+msgstr "Keine Tank Informationen"
+
+#: info.c:463 info.c:496 info.c:919
+msgid "Notes"
+msgstr "Notizen"
+
+#: main.c:48
+msgid "Nov"
+msgstr "Nov"
+
+#: divelist.c:1268 gtk-gui.c:635 statistics.c:713
+msgid "OTU"
+msgstr "OTU"
+
+#: main.c:48
+msgid "Oct"
+msgstr "Okt"
+
+#: gtk-gui.c:313
+msgid "Open File"
+msgstr "Datei öffnen"
+
+#: uemis.c:144
+msgid "PO2 Ascend Alarm"
+msgstr "Alarm: Aufstieg"
+
+#: uemis.c:142
+msgid "PO2 Ascend Warning"
+msgstr "Warnung: Aufstieg / PO2"
+
+#: uemis.c:139
+msgid "PO2 Green Warning"
+msgstr "Warnung: PO2 Grün"
+
+#: gtk-gui.c:591
+msgid "PSI"
+msgstr "psi"
+
+#: gtk-gui.c:570 gtk-gui.c:913
+msgid "Preferences"
+msgstr "Einstellungen"
+
+#: equipment.c:960
+msgid "Pressure"
+msgstr "Druck"
+
+#: gtk-gui.c:589
+msgid "Pressure:"
+msgstr "Druck:"
+
+#: print.c:484
+msgid "Pretty print"
+msgstr "Schön drucken"
+
+#: print.c:505
+msgid "Print only selected dives"
+msgstr "Nur ausgewählte Tauchgänge drucken"
+
+#: print.c:500
+msgid "Print selection"
+msgstr "Auswahl drucken"
+
+#: print.c:478
+msgid "Print type"
+msgstr "Art des Ausdrucks"
+
+#: gtk-gui.c:920
+msgid "Profile"
+msgstr "Profil"
+
+#: uemis.c:152
+msgid "RGT Alert"
+msgstr "Alarm: verbleibende Gas-Zeit"
+
+#: uemis.c:150
+msgid "RGT Warning"
+msgstr "Warnung: verbleibende Gas-Zeit"
+
+#: info.c:489 info.c:916
+msgid "Rating"
+msgstr "Bewertung"
+
+#: uemis-downloader.c:267
+#, c-format
+msgid "Reading dive %s"
+msgstr "Lese Tauchgang %s"
+
+#: divelist.c:2050
+msgid "Remove Trip"
+msgstr "Trip entfernen"
+
+#: divelist.c:2106
+msgid "Remove dive from trip"
+msgstr "Tauchgang vom Trip entfernen"
+
+#: divelist.c:2104
+msgid "Remove selected dives from trip"
+msgstr "Ausgewählte Tauchgänge vom Trip entfernen"
+
+#: gtk-gui.c:802 gtk-gui.c:914
+msgid "Renumber"
+msgstr "Neu nummerieren"
+
+#: gtk-gui.c:1471
+msgid "Retry"
+msgstr "Wiederholen"
+
+#: divelist.c:1267 gtk-gui.c:630 statistics.c:712
+msgid "SAC"
+msgstr "Gasverbrauchsrate"
+
+#: statistics.c:162
+msgid ""
+"SAC\n"
+"Average"
+msgstr ""
+"Gasverbrauchsrate\n"
+"Durchschnitt"
+
+#: file.c:75
+msgid "SDE file"
+msgstr "SDE Datei"
+
+#: uemis.c:132
+msgid "Safety Stop Violation"
+msgstr "Verletzung des Sicherheitsstops"
+
+#: main.c:38
+msgid "Sat"
+msgstr "Sa"
+
+#: gtk-gui.c:228
+msgid "Save Changes?"
+msgstr "Änderungen speichern?"
+
+#: gtk-gui.c:165
+msgid "Save File As"
+msgstr "Datei speichern unter"
+
+#: gtk-gui.c:762 gtk-gui.c:916
+msgid "SelectEvents"
+msgstr "Ereignisse auswählen"
+
+#: main.c:48
+msgid "Sep"
+msgstr "Sep"
+
+#: uemis-downloader.c:30
+msgid ""
+"Short write to req.txt file\n"
+"Is the Uemis Zurich plugged in correctly?"
+msgstr ""
+"Partieller Schreibvorgang der req.txt Datei\n"
+"Ist der Uemis Zurich korrekt verbunden?"
+
+#: statistics.c:660
+msgid "Shortest Dive"
+msgstr "Kürzester Tauchgang"
+
+#: gtk-gui.c:609
+msgid "Show Columns"
+msgstr "Spalten anzeigen"
+
+#: equipment.c:1486
+msgid "Size"
+msgstr "Größe"
+
+#: uemis.c:134
+msgid "Speed Alarm"
+msgstr "Alarm: Geschwindigkeit"
+
+#: uemis.c:137
+msgid "Speed Warning"
+msgstr "Warnung: Geschwindigkeit"
+
+#: equipment.c:962 equipment.c:1488
+msgid "Start"
+msgstr "Start"
+
+#: statistics.c:640
+msgid "Statistics"
+msgstr "Statistiken"
+
+#: gtk-gui.c:1124
+msgid "Stats"
+msgstr "Statistiken"
+
+#: divelist.c:1264 gtk-gui.c:645 info.c:490 info.c:917
+msgid "Suit"
+msgstr "Taucheranzug"
+
+#. ++GETTEXT: these are three character days
+#: main.c:38
+msgid "Sun"
+msgstr "So"
+
+#: statistics.c:698
+msgid "Surf Intv"
+msgstr "Oberflächenzeit"
+
+#: print.c:488
+msgid "Table print"
+msgstr "Tabellenausdruck"
+
+#: uemis.c:154
+msgid "Tank Change Suggested"
+msgstr "Tank-Wechsel Vorschlag"
+
+#: uemis.c:148
+msgid "Tank Pressure Info"
+msgstr "Info: Tankdruck"
+
+#: gtk-gui.c:615
+msgid "Temp"
+msgstr "Temperatur"
+
+#: statistics.c:162
+msgid ""
+"Temperature\n"
+"Average"
+msgstr ""
+"Temperatur\n"
+"Durchschnitt"
+
+#: gtk-gui.c:599
+msgid "Temperature:"
+msgstr "Temperatur:"
+
+#: gtk-gui.c:922
+msgid "Three"
+msgstr "Drei"
+
+#: main.c:38
+msgid "Thu"
+msgstr "Do"
+
+#: info.c:791 print.c:154
+msgid "Time"
+msgstr "Zeit"
+
+#: gtk-gui.c:928
+msgid "Toggle Zoom"
+msgstr "Zoom ein-/ausschalten"
+
+#: statistics.c:657
+msgid "Total Time"
+msgstr "Gesamtzeit"
+
+#: main.c:38
+msgid "Tue"
+msgstr "Di"
+
+#: equipment.c:1485 equipment.c:1513
+msgid "Type"
+msgstr "Typ"
+
+#: uemis-downloader.c:28
+msgid ""
+"Uemis Zurich: File System is almost full\n"
+"Disconnect/reconnect the dive computer\n"
+"and try again"
+msgstr ""
+"Uemis Zurich: Dateisystem beinahe voll\n"
+"Bitte den Tauchcomputer ausstecken und wieder einstecken\n"
+"und erneut versuchen"
+
+#: uemis-downloader.c:29
+msgid ""
+"Uemis Zurich: File System is full\n"
+"Disconnect/reconnect the dive computer\n"
+"and try again"
+msgstr ""
+"Uemis Zurich: Dateisystem voll\n"
+"Bitte den Tauchcomputer ausstecken und wieder einstecken\n"
+"und erneut versuchen"
+
+#: uemis-downloader.c:559
+msgid "Uemis init failed"
+msgstr "Uemis Initialisierung fehlgeschlagen"
+
+#: gtk-gui.c:577
+msgid "Units"
+msgstr "Einheiten"
+
+#: gtk-gui.c:901
+msgid "View"
+msgstr "Ansicht"
+
+#: gtk-gui.c:594
+msgid "Volume:"
+msgstr "Volumen:"
+
+#: statistics.c:706
+msgid "Water Temp"
+msgstr "Wassertemperatur"
+
+#: main.c:38
+msgid "Wed"
+msgstr "Mi"
+
+#: equipment.c:1012 equipment.c:1609 gtk-gui.c:640
+msgid "Weight"
+msgstr "Gewicht"
+
+#: equipment.c:1117
+msgid "Weight System"
+msgstr "Gewicht"
+
+#: gtk-gui.c:604
+msgid "Weight:"
+msgstr "Gewicht:"
+
+#: gtk-gui.c:153
+msgid "XML file"
+msgstr "XML Datei"
+
+#: statistics.c:160
+msgid ""
+"Year\n"
+" > Month"
+msgstr ""
+"Jahr\n"
+" > Monat"
+
+#: gtk-gui.c:915 statistics.c:345
+msgid "Yearly Statistics"
+msgstr "Jährliche Statistiken"
+
+#: gtk-gui.c:238
+msgid ""
+"You have unsaved changes\n"
+"Would you like to save those before closing the datafile?"
+msgstr ""
+"Nicht alle Änderungen wurden gespeichert.\n"
+"Sollen Änderungen vor dem Schließen der Datei gespeichert werden_"
+
+#: gtk-gui.c:242
+#, c-format
+msgid ""
+"You have unsaved changes to file: %s \n"
+"Would you like to save those before closing the datafile?"
+msgstr ""
+"Nicht alle Änderungen in der Dati %s wurden gespeichert.\n"
+"Sollen Änderungen vor dem Schließen der Datei gespeichert werden_"
+
+#: equipment.c:824
+msgid "ankle"
+msgstr "Fuß"
+
+#: equipment.c:825
+msgid "bar"
+msgstr "bar"
+
+#: equipment.c:823
+msgid "belt"
+msgstr "Gürtel"
+
+#: equipment.c:826
+msgid "clip-on"
+msgstr "clip-on"
+
+#: divelist.c:1260
+msgid "ft"
+msgstr "ft"
+
+#: equipment.c:822
+msgid "integrated"
+msgstr "integriert"
+
+#: gtk-gui.c:605
+msgid "kg"
+msgstr "kg"
+
+#: divelist.c:1263 gtk-gui.c:606
+msgid "lbs"
+msgstr "US Pfund"
+
+#: divelist.c:1261
+msgid "min"
+msgstr "min"
+
+#: statistics.c:478
+#, c-format
+msgid "more than %d days"
+msgstr "mehr als %d Tage"
+
+#: equipment.c:1378 equipment.c:1398
+msgid "unkn"
+msgstr "unbk"
+
+#: statistics.c:517
+msgid "unknown"
+msgstr "unbekannt"
+
+#: equipment.c:544
+msgid "unspecified"
+msgstr "nicht angegeben"
+
+#: equipment.c:1514
+msgid "weight"
+msgstr "Gewicht"
diff --git a/print.c b/print.c
index 5adba94cd..1d4f68f07 100644
--- a/print.c
+++ b/print.c
@@ -1,3 +1,4 @@
+#include <glib/gi18n.h>
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
@@ -63,7 +64,7 @@ static void show_dive_text(struct dive *dive, cairo_t *cr, double w,
*divenr = 0;
if (dive->number)
- snprintf(divenr, sizeof(divenr), "Dive #%d - ", dive->number);
+ snprintf(divenr, sizeof(divenr), _("Dive #%d - "), dive->number);
utc_mkdate(dive->when, &tm);
len = snprintf(buffer, sizeof(buffer),
@@ -90,9 +91,7 @@ static void show_dive_text(struct dive *dive, cairo_t *cr, double w,
depth = get_depth_units(dive->maxdepth.mm, &decimals, &unit);
snprintf(buffer, sizeof(buffer),
- "Max depth: %.*f %s\n"
- "Duration: %d min\n"
- "%s",
+ _("Max depth: %.*f %s\nDuration: %d min\n%s"),
decimals, depth, unit,
(dive->duration.seconds+59) / 60,
people);
@@ -152,8 +151,8 @@ static void show_table_header(cairo_t *cr, double w, double h,
int i;
double maxwidth, maxheight, colwidth, curwidth;
PangoLayout *layout;
- char headers[7][80]= { "Dive#", "Date", "Depth", "Time", "Master",
- "Buddy", "Location" };
+ char headers[7][80]= { N_("Dive#"), N_("Date"), N_("Depth"), N_("Time"), N_("Master"),
+ N_("Buddy"), N_("Location") };
maxwidth = w * PANGO_SCALE;
maxheight = h * PANGO_SCALE * 0.9;
@@ -177,7 +176,7 @@ static void show_table_header(cairo_t *cr, double w, double h,
pango_layout_set_width(layout, colwidth);
curwidth = curwidth + colwidth;
}
- pango_layout_set_text(layout, headers[i], -1);
+ pango_layout_set_text(layout, _(headers[i]), -1);
pango_layout_set_justify(layout, 1);
pango_cairo_show_layout(cr, layout);
}
@@ -250,7 +249,7 @@ static void show_dive_table(struct dive *dive, cairo_t *cr, double w,
// Col 4: Time
len = snprintf(buffer, sizeof(buffer),
- "%d min",(dive->duration.seconds+59) / 60);
+ _("%d min"),(dive->duration.seconds+59) / 60);
cairo_move_to(cr, curwidth / PANGO_SCALE, 0);
pango_layout_set_width(layout, colwidth/ (double) 2);
pango_layout_set_text(layout, buffer, len);
@@ -472,21 +471,21 @@ static GtkWidget *print_dialog(GtkPrintOperation *operation, gpointer user_data)
{
GtkWidget *vbox, *radio1, *radio2, *frame, *box;
int dives;
- gtk_print_operation_set_custom_tab_label(operation, "Dive details");
+ gtk_print_operation_set_custom_tab_label(operation, _("Dive details"));
vbox = gtk_vbox_new(TRUE, 5);
- frame = gtk_frame_new("Print type");
+ frame = gtk_frame_new(_("Print type"));
gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 1);
box = gtk_hbox_new(FALSE, 2);
gtk_container_add(GTK_CONTAINER(frame), box);
- radio1 = gtk_radio_button_new_with_label (NULL, "Pretty print");
+ radio1 = gtk_radio_button_new_with_label (NULL, _("Pretty print"));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio1),
print_options.type == PRETTY);
radio2 = gtk_radio_button_new_with_label_from_widget (
- GTK_RADIO_BUTTON (radio1), "Table print");
+ GTK_RADIO_BUTTON (radio1), _("Table print"));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio2),
print_options.type == TABLE);
gtk_box_pack_start (GTK_BOX (box), radio1, TRUE, TRUE, 0);
@@ -498,12 +497,12 @@ static GtkWidget *print_dialog(GtkPrintOperation *operation, gpointer user_data)
dives = nr_selected_dives();
print_options.print_selected = dives >= 1;
if (print_options.print_selected) {
- frame = gtk_frame_new("Print selection");
- gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 1);
- box = gtk_hbox_new(FALSE, 1);
- gtk_container_add(GTK_CONTAINER(frame), box);
+ frame = gtk_frame_new(_("Print selection"));
+ gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 1);
+ box = gtk_hbox_new(FALSE, 1);
+ gtk_container_add(GTK_CONTAINER(frame), box);
GtkWidget *button;
- button = gtk_check_button_new_with_label("Print only selected dives");
+ button = gtk_check_button_new_with_label(_("Print only selected dives"));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button),
print_options.print_selected);
gtk_box_pack_start(GTK_BOX(box), button, FALSE, FALSE, 2);
diff --git a/profile.c b/profile.c
index 3a3df043c..9e06e79e5 100644
--- a/profile.c
+++ b/profile.c
@@ -2,6 +2,7 @@
/* creates all the necessary data for drawing the dive profile
* uses cairo to draw it
*/
+#include <glib/gi18n.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
diff --git a/statistics.c b/statistics.c
index d7757b914..06aeb2c57 100644
--- a/statistics.c
+++ b/statistics.c
@@ -8,6 +8,7 @@
* called from gtk-ui:
* GtkWidget *stats_widget(void)
*/
+#include <glib/gi18n.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
@@ -156,15 +157,15 @@ static void init_tree()
renderer = gtk_cell_renderer_text_new ();
char *columns[] = {
- "Year\n > Month", "#", "Duration\nTotal", "\nAverage",
- "\nShortest", "\nLongest", "Depth\nAverage", "\nMinimum",
- "\nMaximum", "SAC\nAverage", "\nMinimum", "\nMaximum", "Temperature\nAverage",
- "\nMinimum", "\nMaximum" };
+ N_("Year\n > Month"), "#", N_("Duration\nTotal"), N_("\nAverage"),
+ N_("\nShortest"), N_("\nLongest"), N_("Depth\nAverage"), N_("\nMinimum"),
+ N_("\nMaximum"), N_("SAC\nAverage"), N_("\nMinimum"), N_("\nMaximum"), N_("Temperature\nAverage"),
+ N_("\nMinimum"), N_("\nMaximum") };
/* Add all the columns to the tree view */
for (i = 0; i < N_COLUMNS; ++i) {
column = gtk_tree_view_column_new();
- gtk_tree_view_column_set_title(column, columns[i]);
+ gtk_tree_view_column_set_title(column, _(columns[i]));
gtk_tree_view_append_column(GTK_TREE_VIEW(yearly_tree), column);
renderer = gtk_cell_renderer_text_new();
gtk_tree_view_column_pack_start(column, renderer, TRUE);
@@ -341,7 +342,7 @@ void show_yearly_stats()
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_window_set_default_size(GTK_WINDOW(window), 640, 480);
- gtk_window_set_title(GTK_WINDOW(window), "Yearly Statistics");
+ gtk_window_set_title(GTK_WINDOW(window), _("Yearly Statistics"));
gtk_container_set_border_width(GTK_CONTAINER(window), 5);
GTK_WINDOW(window)->allow_shrink = TRUE;
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
@@ -474,15 +475,15 @@ static char * get_time_string(int seconds, int maxdays)
{
static char buf[80];
if (maxdays && seconds > 3600 * 24 * maxdays)
- snprintf(buf, sizeof(buf), "more than %d days", maxdays);
+ snprintf(buf, sizeof(buf), _("more than %d days"), maxdays);
else {
int days = seconds / 3600 / 24;
int hours = (seconds - days * 3600 * 24) / 3600;
int minutes = (seconds - days * 3600 * 24 - hours * 3600) / 60;
if (days > 0)
- snprintf(buf, sizeof(buf), "%dd %dh %dmin", days, hours, minutes);
+ snprintf(buf, sizeof(buf), _("%dd %dh %dmin"), days, hours, minutes);
else
- snprintf(buf, sizeof(buf), "%dh %dmin", hours, minutes);
+ snprintf(buf, sizeof(buf), _("%dh %dmin"), hours, minutes);
}
return buf;
}
@@ -508,12 +509,12 @@ static void show_single_dive_stats(struct dive *dive)
tm.tm_hour, tm.tm_min);
set_label(single_w.date, buf);
- set_label(single_w.dive_time, "%d min", (dive->duration.seconds + 30) / 60);
+ set_label(single_w.dive_time, _("%d min"), (dive->duration.seconds + 30) / 60);
if (prev_dive)
set_label(single_w.surf_intv,
get_time_string(dive->when - (prev_dive->when + prev_dive->duration.seconds), 4));
else
- set_label(single_w.surf_intv, "unknown");
+ set_label(single_w.surf_intv, _("unknown"));
value = get_depth_units(dive->maxdepth.mm, &decimals, &unit);
set_label(single_w.max_depth, "%.*f %s", decimals, value, unit);
value = get_depth_units(dive->meandepth.mm, &decimals, &unit);
@@ -597,11 +598,11 @@ static void show_total_dive_stats(struct dive *dive)
value = get_depth_units(stats_ptr->avg_depth.mm, &decimals, &unit);
set_label(stats_w.avg_overall_depth, "%.*f %s", decimals, value, unit);
value = get_volume_units(stats_ptr->max_sac.mliter, &decimals, &unit);
- set_label(stats_w.max_sac, "%.*f %s/min", decimals, value, unit);
+ set_label(stats_w.max_sac, _("%.*f %s/min"), decimals, value, unit);
value = get_volume_units(stats_ptr->min_sac.mliter, &decimals, &unit);
- set_label(stats_w.min_sac, "%.*f %s/min", decimals, value, unit);
+ set_label(stats_w.min_sac, _("%.*f %s/min"), decimals, value, unit);
value = get_volume_units(stats_ptr->avg_sac.mliter, &decimals, &unit);
- set_label(stats_w.avg_sac, "%.*f %s/min", decimals, value, unit);
+ set_label(stats_w.avg_sac, _("%.*f %s/min"), decimals, value, unit);
}
void show_dive_stats(struct dive *dive)
@@ -636,7 +637,7 @@ GtkWidget *total_stats_widget(void)
vbox = gtk_vbox_new(FALSE, 3);
- statsframe = gtk_frame_new("Statistics");
+ statsframe = gtk_frame_new(_("Statistics"));
gtk_box_pack_start(GTK_BOX(vbox), statsframe, TRUE, FALSE, 3);
framebox = gtk_vbox_new(FALSE, 3);
gtk_container_add(GTK_CONTAINER(statsframe), framebox);
@@ -644,35 +645,35 @@ GtkWidget *total_stats_widget(void)
/* first row */
hbox = gtk_hbox_new(FALSE, 3);
gtk_box_pack_start(GTK_BOX(framebox), hbox, TRUE, FALSE, 3);
- stats_w.selection_size = new_info_label_in_frame(hbox, "Dives");
- stats_w.max_temp = new_info_label_in_frame(hbox, "Max Temp");
- stats_w.min_temp = new_info_label_in_frame(hbox, "Min Temp");
- stats_w.avg_temp = new_info_label_in_frame(hbox, "Avg Temp");
+ stats_w.selection_size = new_info_label_in_frame(hbox, _("Dives"));
+ stats_w.max_temp = new_info_label_in_frame(hbox, _("Max Temp"));
+ stats_w.min_temp = new_info_label_in_frame(hbox, _("Min Temp"));
+ stats_w.avg_temp = new_info_label_in_frame(hbox, _("Avg Temp"));
/* second row */
hbox = gtk_hbox_new(FALSE, 3);
gtk_box_pack_start(GTK_BOX(framebox), hbox, TRUE, FALSE, 3);
- stats_w.total_time = new_info_label_in_frame(hbox, "Total Time");
- stats_w.avg_time = new_info_label_in_frame(hbox, "Avg Time");
- stats_w.longest_time = new_info_label_in_frame(hbox, "Longest Dive");
- stats_w.shortest_time = new_info_label_in_frame(hbox, "Shortest Dive");
+ stats_w.total_time = new_info_label_in_frame(hbox, _("Total Time"));
+ stats_w.avg_time = new_info_label_in_frame(hbox, _("Avg Time"));
+ stats_w.longest_time = new_info_label_in_frame(hbox, _("Longest Dive"));
+ stats_w.shortest_time = new_info_label_in_frame(hbox, _("Shortest Dive"));
/* third row */
hbox = gtk_hbox_new(FALSE, 3);
gtk_box_pack_start(GTK_BOX(framebox), hbox, TRUE, FALSE, 3);
- stats_w.max_overall_depth = new_info_label_in_frame(hbox, "Max Depth");
- stats_w.min_overall_depth = new_info_label_in_frame(hbox, "Min Depth");
- stats_w.avg_overall_depth = new_info_label_in_frame(hbox, "Avg Depth");
+ stats_w.max_overall_depth = new_info_label_in_frame(hbox, _("Max Depth"));
+ stats_w.min_overall_depth = new_info_label_in_frame(hbox, _("Min Depth"));
+ stats_w.avg_overall_depth = new_info_label_in_frame(hbox, _("Avg Depth"));
/* fourth row */
hbox = gtk_hbox_new(FALSE, 3);
gtk_box_pack_start(GTK_BOX(framebox), hbox, TRUE, FALSE, 3);
- stats_w.max_sac = new_info_label_in_frame(hbox, "Max SAC");
- stats_w.min_sac = new_info_label_in_frame(hbox, "Min SAC");
- stats_w.avg_sac = new_info_label_in_frame(hbox, "Avg SAC");
+ stats_w.max_sac = new_info_label_in_frame(hbox, _("Max SAC"));
+ stats_w.min_sac = new_info_label_in_frame(hbox, _("Min SAC"));
+ stats_w.avg_sac = new_info_label_in_frame(hbox, _("Avg SAC"));
return vbox;
}
@@ -683,7 +684,7 @@ GtkWidget *single_stats_widget(void)
vbox = gtk_vbox_new(FALSE, 3);
- infoframe = gtk_frame_new("Dive Info");
+ infoframe = gtk_frame_new(_("Dive Info"));
gtk_box_pack_start(GTK_BOX(vbox), infoframe, TRUE, FALSE, 3);
framebox = gtk_vbox_new(FALSE, 3);
gtk_container_add(GTK_CONTAINER(infoframe), framebox);
@@ -692,26 +693,26 @@ GtkWidget *single_stats_widget(void)
hbox = gtk_hbox_new(FALSE, 3);
gtk_box_pack_start(GTK_BOX(framebox), hbox, TRUE, FALSE, 3);
- single_w.date = new_info_label_in_frame(hbox, "Date");
- single_w.dive_time = new_info_label_in_frame(hbox, "Dive Time");
- single_w.surf_intv = new_info_label_in_frame(hbox, "Surf Intv");
+ single_w.date = new_info_label_in_frame(hbox, _("Date"));
+ single_w.dive_time = new_info_label_in_frame(hbox, _("Dive Time"));
+ single_w.surf_intv = new_info_label_in_frame(hbox, _("Surf Intv"));
/* second row */
hbox = gtk_hbox_new(FALSE, 3);
gtk_box_pack_start(GTK_BOX(framebox), hbox, TRUE, FALSE, 3);
- single_w.max_depth = new_info_label_in_frame(hbox, "Max Depth");
- single_w.avg_depth = new_info_label_in_frame(hbox, "Avg Depth");
- single_w.water_temp = new_info_label_in_frame(hbox, "Water Temp");
+ single_w.max_depth = new_info_label_in_frame(hbox, _("Max Depth"));
+ single_w.avg_depth = new_info_label_in_frame(hbox, _("Avg Depth"));
+ single_w.water_temp = new_info_label_in_frame(hbox, _("Water Temp"));
/* third row */
hbox = gtk_hbox_new(FALSE, 3);
gtk_box_pack_start(GTK_BOX(framebox), hbox, TRUE, FALSE, 3);
- single_w.sac = new_info_label_in_frame(hbox, "SAC");
- single_w.otu = new_info_label_in_frame(hbox, "OTU");
+ single_w.sac = new_info_label_in_frame(hbox, _("SAC"));
+ single_w.otu = new_info_label_in_frame(hbox, _("OTU"));
single_w.o2he = new_info_label_in_frame(hbox, "O" UTF8_SUBSCRIPT_2 " / He");
- single_w.gas_used = new_info_label_in_frame(hbox, "Gas Used");
+ single_w.gas_used = new_info_label_in_frame(hbox, _("Gas Used"));
return vbox;
}
diff --git a/time.c b/time.c
index ed8222a0f..36a834400 100644
--- a/time.c
+++ b/time.c
@@ -1,3 +1,4 @@
+#include <glib/gi18n.h>
#include <string.h>
#include "dive.h"
diff --git a/uemis-downloader.c b/uemis-downloader.c
index 1fec353a8..5d7881291 100644
--- a/uemis-downloader.c
+++ b/uemis-downloader.c
@@ -17,15 +17,17 @@
#include <pthread.h>
#include <unistd.h>
#include <string.h>
+#include <glib/gi18n.h>
+
#include "uemis.h"
#include "dive.h"
#include "divelist.h"
#include "display.h"
#include "display-gtk.h"
-#define ERR_FS_ALMOST_FULL "Uemis Zurich: File System is almost full\nDisconnect/reconnect the dive computer\nand try again"
-#define ERR_FS_FULL "Uemis Zurich: File System is full\nDisconnect/reconnect the dive computer\nand try again"
-#define ERR_FS_SHORT_WRITE "Short write to req.txt file\nIs the Uemis Zurich plugged in correctly?"
+#define ERR_FS_ALMOST_FULL N_("Uemis Zurich: File System is almost full\nDisconnect/reconnect the dive computer\nand try again")
+#define ERR_FS_FULL N_("Uemis Zurich: File System is full\nDisconnect/reconnect the dive computer\nand try again")
+#define ERR_FS_SHORT_WRITE N_("Short write to req.txt file\nIs the Uemis Zurich plugged in correctly?")
#define BUFLEN 2048
#define NUM_PARAM_BUFS 6
#define UEMIS_TIMEOUT 100000
@@ -262,7 +264,7 @@ static void show_progress(char *buf)
while (*p != '{' && t < tmp + 9)
*t++ = *p++;
*t = '\0';
- uemis_info("Reading dive %s", tmp);
+ uemis_info(_("Reading dive %s"), tmp);
}
}
}
@@ -301,11 +303,11 @@ static gboolean uemis_get_answer(const char *path, char *request, int n_param_in
fprintf(debugfile,"::w req.txt \"%s\"\n", sb);
#endif
if (write(reqtxt_file, sb, strlen(sb)) != strlen(sb)) {
- *error_text = ERR_FS_SHORT_WRITE;
+ *error_text = _(ERR_FS_SHORT_WRITE);
return FALSE;
}
if (! next_file(number_of_files)) {
- *error_text = ERR_FS_FULL;
+ *error_text = _(ERR_FS_FULL);
more_files = FALSE;
}
trigger_response(reqtxt_file, "n", filenr, file_length);
@@ -334,7 +336,7 @@ static gboolean uemis_get_answer(const char *path, char *request, int n_param_in
assembling_mbuf = FALSE;
if (assembling_mbuf) {
if (! next_file(number_of_files)) {
- *error_text = ERR_FS_FULL;
+ *error_text = _(ERR_FS_FULL);
more_files = FALSE;
assembling_mbuf = FALSE;
}
@@ -343,7 +345,7 @@ static gboolean uemis_get_answer(const char *path, char *request, int n_param_in
}
} else {
if (! next_file(number_of_files - 1)) {
- *error_text = ERR_FS_FULL;
+ *error_text = _(ERR_FS_FULL);
more_files = FALSE;
assembling_mbuf = FALSE;
searching = FALSE;
@@ -554,7 +556,7 @@ static char *do_uemis_download(struct argument_block *args)
buffer_add(xml_buffer, &xml_buffer_size, "<dives type='uemis'><string></string>\n<list>\n");
uemis_info("Init Communication");
if (! uemis_init(mountpath))
- return "Uemis init failed";
+ return _("Uemis init failed");
if (! uemis_get_answer(mountpath, "getDeviceId", 0, 1, &result))
goto bail;
deviceid = strdup(param_buff[0]);
@@ -587,7 +589,7 @@ static char *do_uemis_download(struct argument_block *args)
break;
/* finally, if the memory is getting too full, maybe we better stop, too */
if (progress_bar_fraction > 0.85) {
- result = ERR_FS_ALMOST_FULL;
+ result = _(ERR_FS_ALMOST_FULL);
break;
}
/* clean up mbuf */
@@ -601,7 +603,7 @@ static char *do_uemis_download(struct argument_block *args)
goto bail;
if (! strcmp(param_buff[0], "error")) {
if (! strcmp(param_buff[2],"Out of Memory"))
- result = ERR_FS_FULL;
+ result = _(ERR_FS_FULL);
else
result = param_buff[2];
}
diff --git a/uemis.c b/uemis.c
index 557c419f3..1ac458458 100644
--- a/uemis.c
+++ b/uemis.c
@@ -12,6 +12,7 @@
#include <string.h>
#include <stdint.h>
#include <stdlib.h>
+#include <glib/gi18n.h>
#define __USE_XOPEN
#include <time.h>
@@ -128,45 +129,45 @@ void uemis_event(struct dive *dive, struct sample *sample, uemis_sample_t *u_sam
uint8_t *flags = u_sample->flags;
if (flags[1] & 0x01)
- add_event(dive, sample->time.seconds, 0, 0, 0, "Safety Stop Violation");
+ add_event(dive, sample->time.seconds, 0, 0, 0, _("Safety Stop Violation"));
if (flags[1] & 0x08)
- add_event(dive, sample->time.seconds, 0, 0, 0, "Speed Alarm");
+ add_event(dive, sample->time.seconds, 0, 0, 0, _("Speed Alarm"));
#if WANT_CRAZY_WARNINGS
if (flags[1] & 0x06) /* both bits 1 and 2 are a warning */
- add_event(dive, sample->time.seconds, 0, 0, 0, "Speed Warning");
+ add_event(dive, sample->time.seconds, 0, 0, 0, _("Speed Warning"));
if (flags[1] & 0x10)
- add_event(dive, sample->time.seconds, 0, 0, 0, "PO2 Green Warning");
+ add_event(dive, sample->time.seconds, 0, 0, 0, _("PO2 Green Warning"));
#endif
if (flags[1] & 0x20)
- add_event(dive, sample->time.seconds, 0, 0, 0, "PO2 Ascend Warning");
+ add_event(dive, sample->time.seconds, 0, 0, 0, _("PO2 Ascend Warning"));
if (flags[1] & 0x40)
- add_event(dive, sample->time.seconds, 0, 0, 0, "PO2 Ascend Alarm");
+ add_event(dive, sample->time.seconds, 0, 0, 0, _("PO2 Ascend Alarm"));
/* flags[2] reflects the deco / time bar
* flags[3] reflects more display details on deco and pO2 */
if (flags[4] & 0x01)
- add_event(dive, sample->time.seconds, 0, 0, 0, "Tank Pressure Info");
+ add_event(dive, sample->time.seconds, 0, 0, 0, _("Tank Pressure Info"));
if (flags[4] & 0x04)
- add_event(dive, sample->time.seconds, 0, 0, 0, "RGT Warning");
+ add_event(dive, sample->time.seconds, 0, 0, 0, _("RGT Warning"));
if (flags[4] & 0x08)
- add_event(dive, sample->time.seconds, 0, 0, 0, "RGT Alert");
+ add_event(dive, sample->time.seconds, 0, 0, 0, _("RGT Alert"));
if (flags[4] & 0x40)
- add_event(dive, sample->time.seconds, 0, 0, 0, "Tank Change Suggested");
+ add_event(dive, sample->time.seconds, 0, 0, 0, _("Tank Change Suggested"));
if (flags[4] & 0x80)
- add_event(dive, sample->time.seconds, 0, 0, 0, "Depth Limit Exceeded");
+ add_event(dive, sample->time.seconds, 0, 0, 0, _("Depth Limit Exceeded"));
if (flags[5] & 0x01)
- add_event(dive, sample->time.seconds, 0, 0, 0, "Max Deco Time Warning");
+ add_event(dive, sample->time.seconds, 0, 0, 0, _("Max Deco Time Warning"));
if (flags[5] & 0x04)
- add_event(dive, sample->time.seconds, 0, 0, 0, "Dive Time Info");
+ add_event(dive, sample->time.seconds, 0, 0, 0, _("Dive Time Info"));
if (flags[5] & 0x08)
- add_event(dive, sample->time.seconds, 0, 0, 0, "Dive Time Alert");
+ add_event(dive, sample->time.seconds, 0, 0, 0, _("Dive Time Alert"));
if (flags[5] & 0x10)
- add_event(dive, sample->time.seconds, 0, 0, 0, "Marker");
+ add_event(dive, sample->time.seconds, 0, 0, 0, _("Marker"));
if (flags[6] & 0x02)
- add_event(dive, sample->time.seconds, 0, 0, 0, "No Tank Data");
+ add_event(dive, sample->time.seconds, 0, 0, 0, _("No Tank Data"));
if (flags[6] & 0x04)
- add_event(dive, sample->time.seconds, 0, 0, 0, "Low Battery Warning");
+ add_event(dive, sample->time.seconds, 0, 0, 0, _("Low Battery Warning"));
if (flags[6] & 0x08)
- add_event(dive, sample->time.seconds, 0, 0, 0, "Low Battery Alert");
+ add_event(dive, sample->time.seconds, 0, 0, 0, _("Low Battery Alert"));
/* flags[7] reflects the little on screen icons that remind of previous
* warnings / alerts - not useful for events */
}