forked from AuroraMiddleware/gtk
Added gettext-10.35
Mon Dec 14 12:24:13 1998 Owen Taylor <otaylor@redhat.com> * HACKING: Added gettext-10.35 * autogen.sh: Run gettextize. Wed Dec 9 16:29:06 1998 Owen Taylor <otaylor@redhat.com> Applied gtk-egger-981010-[12] [ Daniel.Egger@t-online.de (Daniel Egger) ] * gtk/gtkintl.h: New file - defines for localization. * gtk/gtkfilesel.c gtk/gtkinputdialog.c: Mark strings for internationalization. * gtk/gtkmain.c: call bindtextdomain * po/ - directory for translations. Initially includes German translation.
This commit is contained in:
parent
edc1476865
commit
7facb75c85
@ -10,3 +10,5 @@ aclocal.m4
|
||||
configure
|
||||
gtk-config
|
||||
config.cache
|
||||
ABOUT-NLS
|
||||
intl
|
21
ChangeLog
21
ChangeLog
@ -1,3 +1,24 @@
|
||||
Mon Dec 14 12:24:13 1998 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* HACKING: Added gettext-10.35
|
||||
|
||||
* autogen.sh: Run gettextize.
|
||||
|
||||
Wed Dec 9 16:29:06 1998 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
Applied gtk-egger-981010-[12]
|
||||
[ Daniel.Egger@t-online.de (Daniel Egger) ]
|
||||
|
||||
* gtk/gtkintl.h: New file - defines for localization.
|
||||
|
||||
* gtk/gtkfilesel.c gtk/gtkinputdialog.c: Mark strings
|
||||
for internationalization.
|
||||
|
||||
* gtk/gtkmain.c: call bindtextdomain
|
||||
|
||||
* po/ - directory for translations. Initially includes
|
||||
German translation.
|
||||
|
||||
Mon Dec 14 02:42:11 1998 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gtk/gtkwidget.c: made GtkWidget::grab_focus a RUN_LAST and
|
||||
|
@ -1,3 +1,24 @@
|
||||
Mon Dec 14 12:24:13 1998 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* HACKING: Added gettext-10.35
|
||||
|
||||
* autogen.sh: Run gettextize.
|
||||
|
||||
Wed Dec 9 16:29:06 1998 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
Applied gtk-egger-981010-[12]
|
||||
[ Daniel.Egger@t-online.de (Daniel Egger) ]
|
||||
|
||||
* gtk/gtkintl.h: New file - defines for localization.
|
||||
|
||||
* gtk/gtkfilesel.c gtk/gtkinputdialog.c: Mark strings
|
||||
for internationalization.
|
||||
|
||||
* gtk/gtkmain.c: call bindtextdomain
|
||||
|
||||
* po/ - directory for translations. Initially includes
|
||||
German translation.
|
||||
|
||||
Mon Dec 14 02:42:11 1998 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gtk/gtkwidget.c: made GtkWidget::grab_focus a RUN_LAST and
|
||||
|
@ -1,3 +1,24 @@
|
||||
Mon Dec 14 12:24:13 1998 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* HACKING: Added gettext-10.35
|
||||
|
||||
* autogen.sh: Run gettextize.
|
||||
|
||||
Wed Dec 9 16:29:06 1998 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
Applied gtk-egger-981010-[12]
|
||||
[ Daniel.Egger@t-online.de (Daniel Egger) ]
|
||||
|
||||
* gtk/gtkintl.h: New file - defines for localization.
|
||||
|
||||
* gtk/gtkfilesel.c gtk/gtkinputdialog.c: Mark strings
|
||||
for internationalization.
|
||||
|
||||
* gtk/gtkmain.c: call bindtextdomain
|
||||
|
||||
* po/ - directory for translations. Initially includes
|
||||
German translation.
|
||||
|
||||
Mon Dec 14 02:42:11 1998 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gtk/gtkwidget.c: made GtkWidget::grab_focus a RUN_LAST and
|
||||
|
@ -1,3 +1,24 @@
|
||||
Mon Dec 14 12:24:13 1998 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* HACKING: Added gettext-10.35
|
||||
|
||||
* autogen.sh: Run gettextize.
|
||||
|
||||
Wed Dec 9 16:29:06 1998 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
Applied gtk-egger-981010-[12]
|
||||
[ Daniel.Egger@t-online.de (Daniel Egger) ]
|
||||
|
||||
* gtk/gtkintl.h: New file - defines for localization.
|
||||
|
||||
* gtk/gtkfilesel.c gtk/gtkinputdialog.c: Mark strings
|
||||
for internationalization.
|
||||
|
||||
* gtk/gtkmain.c: call bindtextdomain
|
||||
|
||||
* po/ - directory for translations. Initially includes
|
||||
German translation.
|
||||
|
||||
Mon Dec 14 02:42:11 1998 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gtk/gtkwidget.c: made GtkWidget::grab_focus a RUN_LAST and
|
||||
|
@ -1,3 +1,24 @@
|
||||
Mon Dec 14 12:24:13 1998 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* HACKING: Added gettext-10.35
|
||||
|
||||
* autogen.sh: Run gettextize.
|
||||
|
||||
Wed Dec 9 16:29:06 1998 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
Applied gtk-egger-981010-[12]
|
||||
[ Daniel.Egger@t-online.de (Daniel Egger) ]
|
||||
|
||||
* gtk/gtkintl.h: New file - defines for localization.
|
||||
|
||||
* gtk/gtkfilesel.c gtk/gtkinputdialog.c: Mark strings
|
||||
for internationalization.
|
||||
|
||||
* gtk/gtkmain.c: call bindtextdomain
|
||||
|
||||
* po/ - directory for translations. Initially includes
|
||||
German translation.
|
||||
|
||||
Mon Dec 14 02:42:11 1998 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gtk/gtkwidget.c: made GtkWidget::grab_focus a RUN_LAST and
|
||||
|
@ -1,3 +1,24 @@
|
||||
Mon Dec 14 12:24:13 1998 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* HACKING: Added gettext-10.35
|
||||
|
||||
* autogen.sh: Run gettextize.
|
||||
|
||||
Wed Dec 9 16:29:06 1998 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
Applied gtk-egger-981010-[12]
|
||||
[ Daniel.Egger@t-online.de (Daniel Egger) ]
|
||||
|
||||
* gtk/gtkintl.h: New file - defines for localization.
|
||||
|
||||
* gtk/gtkfilesel.c gtk/gtkinputdialog.c: Mark strings
|
||||
for internationalization.
|
||||
|
||||
* gtk/gtkmain.c: call bindtextdomain
|
||||
|
||||
* po/ - directory for translations. Initially includes
|
||||
German translation.
|
||||
|
||||
Mon Dec 14 02:42:11 1998 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gtk/gtkwidget.c: made GtkWidget::grab_focus a RUN_LAST and
|
||||
|
@ -1,3 +1,24 @@
|
||||
Mon Dec 14 12:24:13 1998 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* HACKING: Added gettext-10.35
|
||||
|
||||
* autogen.sh: Run gettextize.
|
||||
|
||||
Wed Dec 9 16:29:06 1998 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
Applied gtk-egger-981010-[12]
|
||||
[ Daniel.Egger@t-online.de (Daniel Egger) ]
|
||||
|
||||
* gtk/gtkintl.h: New file - defines for localization.
|
||||
|
||||
* gtk/gtkfilesel.c gtk/gtkinputdialog.c: Mark strings
|
||||
for internationalization.
|
||||
|
||||
* gtk/gtkmain.c: call bindtextdomain
|
||||
|
||||
* po/ - directory for translations. Initially includes
|
||||
German translation.
|
||||
|
||||
Mon Dec 14 02:42:11 1998 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gtk/gtkwidget.c: made GtkWidget::grab_focus a RUN_LAST and
|
||||
|
2
HACKING
2
HACKING
@ -6,6 +6,8 @@ to have the following packages installed:
|
||||
(Beta releases are at ftp://ftp.cygnus.com/pub/tromey)
|
||||
- GNU libtool 1.2b
|
||||
- indent (GNU indent 1.9.1 is known good)
|
||||
- GNU gettext 10.35
|
||||
Available in ftp://alpha.gnu.org/gnu
|
||||
|
||||
These should be available by ftp from ftp.gnu.org or any of the
|
||||
fine GNU mirrors. Beta software can be found at alpha.gnu.org.
|
||||
|
@ -1,7 +1,7 @@
|
||||
## Process this file with automake to produce Makefile.in
|
||||
|
||||
SRC_SUBDIRS = gdk gtk
|
||||
SUBDIRS = $(SRC_SUBDIRS) docs
|
||||
SUBDIRS = intl po $(SRC_SUBDIRS) docs
|
||||
|
||||
bin_SCRIPTS = gtk-config
|
||||
|
||||
|
@ -15,10 +15,15 @@
|
||||
|
||||
|
||||
/* Other stuff */
|
||||
#undef ENABLE_NLS
|
||||
#undef GTK_COMPILED_WITH_DEBUGGING
|
||||
|
||||
#undef HAVE_CATGETS
|
||||
#undef HAVE_GETTEXT
|
||||
#undef HAVE_IPC_H
|
||||
#undef HAVE_LC_MESSAGES
|
||||
#undef HAVE_SHM_H
|
||||
#undef HAVE_STPCPY
|
||||
#undef HAVE_XSHM_H
|
||||
#undef HAVE_SHAPE_EXT
|
||||
#undef HAVE_SYS_SELECT_H
|
||||
|
@ -56,6 +56,12 @@ esac
|
||||
|
||||
aclocal $ACLOCAL_FLAGS
|
||||
|
||||
echo "Running gettextize... Ignore non-fatal messages."
|
||||
# Hmm, we specify --force here, since otherwise things dont'
|
||||
# get added reliably, but we don't want to overwrite intl
|
||||
# while making dist.
|
||||
echo "no" | gettextize --copy --force
|
||||
|
||||
# optionally feature autoheader
|
||||
(autoheader --version) < /dev/null > /dev/null 2>&1 && autoheader
|
||||
|
||||
|
102
config.h.in
102
config.h.in
@ -1,14 +1,48 @@
|
||||
/* config.h.in. Generated automatically from configure.in by autoheader. */
|
||||
|
||||
/* Define if using alloca.c. */
|
||||
#undef C_ALLOCA
|
||||
|
||||
/* Define to empty if the keyword does not work. */
|
||||
#undef const
|
||||
|
||||
/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems.
|
||||
This function is required for alloca.c support on those systems. */
|
||||
#undef CRAY_STACKSEG_END
|
||||
|
||||
/* Define if you have alloca, as a function or macro. */
|
||||
#undef HAVE_ALLOCA
|
||||
|
||||
/* Define if you have <alloca.h> and it should be used (not on Ultrix). */
|
||||
#undef HAVE_ALLOCA_H
|
||||
|
||||
/* Define if you have a working `mmap' system call. */
|
||||
#undef HAVE_MMAP
|
||||
|
||||
/* Define as __inline if that's what the C compiler calls it. */
|
||||
#undef inline
|
||||
|
||||
/* Define to `long' if <sys/types.h> doesn't define. */
|
||||
#undef off_t
|
||||
|
||||
/* Define if you need to in order for stat and other things to work. */
|
||||
#undef _POSIX_SOURCE
|
||||
|
||||
/* Define as the return type of signal handlers (int or void). */
|
||||
#undef RETSIGTYPE
|
||||
|
||||
/* Define to `unsigned' if <sys/types.h> doesn't define. */
|
||||
#undef size_t
|
||||
|
||||
/* If using the C implementation of alloca, define if you know the
|
||||
direction of stack growth for your system; otherwise it will be
|
||||
automatically deduced at run-time.
|
||||
STACK_DIRECTION > 0 => grows toward higher addresses
|
||||
STACK_DIRECTION < 0 => grows toward lower addresses
|
||||
STACK_DIRECTION = 0 => direction of growth unknown
|
||||
*/
|
||||
#undef STACK_DIRECTION
|
||||
|
||||
/* Define if you have the ANSI C header files. */
|
||||
#undef STDC_HEADERS
|
||||
|
||||
@ -16,10 +50,15 @@
|
||||
#undef X_DISPLAY_MISSING
|
||||
|
||||
/* Other stuff */
|
||||
#undef ENABLE_NLS
|
||||
#undef GTK_COMPILED_WITH_DEBUGGING
|
||||
|
||||
#undef HAVE_CATGETS
|
||||
#undef HAVE_GETTEXT
|
||||
#undef HAVE_IPC_H
|
||||
#undef HAVE_LC_MESSAGES
|
||||
#undef HAVE_SHM_H
|
||||
#undef HAVE_STPCPY
|
||||
#undef HAVE_XSHM_H
|
||||
#undef HAVE_SHAPE_EXT
|
||||
#undef HAVE_SYS_SELECT_H
|
||||
@ -45,12 +84,72 @@
|
||||
/* Define as the return type of signal handlers (int or void). */
|
||||
#undef RETSIGTYPE
|
||||
|
||||
/* Define if you have the __argz_count function. */
|
||||
#undef HAVE___ARGZ_COUNT
|
||||
|
||||
/* Define if you have the __argz_next function. */
|
||||
#undef HAVE___ARGZ_NEXT
|
||||
|
||||
/* Define if you have the __argz_stringify function. */
|
||||
#undef HAVE___ARGZ_STRINGIFY
|
||||
|
||||
/* Define if you have the broken_wctype function. */
|
||||
#undef HAVE_BROKEN_WCTYPE
|
||||
|
||||
/* Define if you have the dcgettext function. */
|
||||
#undef HAVE_DCGETTEXT
|
||||
|
||||
/* Define if you have the getcwd function. */
|
||||
#undef HAVE_GETCWD
|
||||
|
||||
/* Define if you have the getpagesize function. */
|
||||
#undef HAVE_GETPAGESIZE
|
||||
|
||||
/* Define if you have the munmap function. */
|
||||
#undef HAVE_MUNMAP
|
||||
|
||||
/* Define if you have the putenv function. */
|
||||
#undef HAVE_PUTENV
|
||||
|
||||
/* Define if you have the setenv function. */
|
||||
#undef HAVE_SETENV
|
||||
|
||||
/* Define if you have the setlocale function. */
|
||||
#undef HAVE_SETLOCALE
|
||||
|
||||
/* Define if you have the stpcpy function. */
|
||||
#undef HAVE_STPCPY
|
||||
|
||||
/* Define if you have the strcasecmp function. */
|
||||
#undef HAVE_STRCASECMP
|
||||
|
||||
/* Define if you have the strchr function. */
|
||||
#undef HAVE_STRCHR
|
||||
|
||||
/* Define if you have the strdup function. */
|
||||
#undef HAVE_STRDUP
|
||||
|
||||
/* Define if you have the <argz.h> header file. */
|
||||
#undef HAVE_ARGZ_H
|
||||
|
||||
/* Define if you have the <limits.h> header file. */
|
||||
#undef HAVE_LIMITS_H
|
||||
|
||||
/* Define if you have the <locale.h> header file. */
|
||||
#undef HAVE_LOCALE_H
|
||||
|
||||
/* Define if you have the <malloc.h> header file. */
|
||||
#undef HAVE_MALLOC_H
|
||||
|
||||
/* Define if you have the <nl_types.h> header file. */
|
||||
#undef HAVE_NL_TYPES_H
|
||||
|
||||
/* Define if you have the <string.h> header file. */
|
||||
#undef HAVE_STRING_H
|
||||
|
||||
/* Define if you have the <sys/param.h> header file. */
|
||||
#undef HAVE_SYS_PARAM_H
|
||||
|
||||
/* Define if you have the <unistd.h> header file. */
|
||||
#undef HAVE_UNISTD_H
|
||||
|
||||
@ -59,3 +158,6 @@
|
||||
|
||||
/* Define if you have the <wctype.h> header file. */
|
||||
#undef HAVE_WCTYPE_H
|
||||
|
||||
/* Define if you have the i library (-li). */
|
||||
#undef HAVE_LIBI
|
||||
|
@ -129,6 +129,10 @@ if test -n "$PERL" && perl -v | grep 'version 5.' > /dev/null ; then
|
||||
fi
|
||||
AC_SUBST(REBUILD)
|
||||
|
||||
# i18n stuff
|
||||
ALL_LINGUAS="de"
|
||||
AM_GNU_GETTEXT
|
||||
|
||||
dnl The DU4 header files don't provide library prototypes unless
|
||||
dnl -std1 is given to the native cc.
|
||||
AC_MSG_CHECKING([for extra flags to get ANSI library prototypes])
|
||||
@ -508,6 +512,8 @@ AC_SUBST(GTK_THREAD_FLAGS)
|
||||
AC_OUTPUT([
|
||||
Makefile
|
||||
gtk-config
|
||||
intl/Makefile
|
||||
po/Makefile.in
|
||||
docs/Makefile
|
||||
gdk/Makefile
|
||||
gtk/Makefile
|
||||
|
@ -344,6 +344,7 @@ INCLUDES = \
|
||||
-DGTK_EXE_PREFIX=\"$(exec_prefix)\" \
|
||||
-DGTK_DATA_PREFIX=\"$(prefix)\" \
|
||||
-DGTK_SYSCONFDIR=\"$(sysconfdir)\" \
|
||||
-DGTK_LOCALEDIR=\"$(datadir)/locale\" \
|
||||
-I$(top_srcdir) \
|
||||
@GTK_DEBUG_FLAGS@ \
|
||||
@GTK_XIM_FLAGS@ \
|
||||
|
@ -46,6 +46,7 @@
|
||||
#include "gtkoptionmenu.h"
|
||||
#include "gtkclist.h"
|
||||
#include "gtkdialog.h"
|
||||
#include "gtkintl.h"
|
||||
|
||||
#define DIR_LIST_WIDTH 180
|
||||
#define DIR_LIST_HEIGHT 180
|
||||
@ -369,8 +370,8 @@ gtk_file_selection_init (GtkFileSelection *filesel)
|
||||
GtkWidget *pulldown_hbox;
|
||||
GtkWidget *scrolled_win;
|
||||
|
||||
static const char *dir_title [] = { "Directories", NULL };
|
||||
static const char *file_title [] = { "Files", NULL };
|
||||
char *dir_title [2];
|
||||
char *file_title [2];
|
||||
|
||||
filesel->cmpl_state = cmpl_init_state ();
|
||||
|
||||
@ -415,6 +416,8 @@ gtk_file_selection_init (GtkFileSelection *filesel)
|
||||
gtk_clist_column_titles_passive (GTK_CLIST (filesel->dir_list));
|
||||
|
||||
scrolled_win = gtk_scrolled_window_new (NULL, NULL);
|
||||
dir_title[0] = _("Directories");
|
||||
dir_title[1] = NULL;
|
||||
gtk_container_add (GTK_CONTAINER (scrolled_win), filesel->dir_list);
|
||||
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
|
||||
GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
|
||||
@ -424,6 +427,8 @@ gtk_file_selection_init (GtkFileSelection *filesel)
|
||||
gtk_widget_show (scrolled_win);
|
||||
|
||||
/* The files clist */
|
||||
file_title[0] = _("Files");
|
||||
file_title[1] = NULL;
|
||||
filesel->file_list = gtk_clist_new_with_titles (1, (gchar**) file_title);
|
||||
gtk_widget_set_usize (filesel->file_list, FILE_LIST_WIDTH, FILE_LIST_HEIGHT);
|
||||
gtk_signal_connect (GTK_OBJECT (filesel->file_list), "select_row",
|
||||
@ -454,14 +459,14 @@ gtk_file_selection_init (GtkFileSelection *filesel)
|
||||
gtk_widget_show (confirm_area);
|
||||
|
||||
/* The OK button */
|
||||
filesel->ok_button = gtk_button_new_with_label ("OK");
|
||||
filesel->ok_button = gtk_button_new_with_label (_("OK"));
|
||||
GTK_WIDGET_SET_FLAGS (filesel->ok_button, GTK_CAN_DEFAULT);
|
||||
gtk_box_pack_start (GTK_BOX (confirm_area), filesel->ok_button, TRUE, TRUE, 0);
|
||||
gtk_widget_grab_default (filesel->ok_button);
|
||||
gtk_widget_show (filesel->ok_button);
|
||||
|
||||
/* The Cancel button */
|
||||
filesel->cancel_button = gtk_button_new_with_label ("Cancel");
|
||||
filesel->cancel_button = gtk_button_new_with_label (_("Cancel"));
|
||||
GTK_WIDGET_SET_FLAGS (filesel->cancel_button, GTK_CAN_DEFAULT);
|
||||
gtk_box_pack_start (GTK_BOX (confirm_area), filesel->cancel_button, TRUE, TRUE, 0);
|
||||
gtk_widget_show (filesel->cancel_button);
|
||||
@ -492,7 +497,7 @@ gtk_file_selection_init (GtkFileSelection *filesel)
|
||||
{
|
||||
gchar err_buf[256];
|
||||
|
||||
sprintf (err_buf, "Directory unreadable: %s", cmpl_strerror (cmpl_errno));
|
||||
sprintf (err_buf, _("Directory unreadable: %s"), cmpl_strerror (cmpl_errno));
|
||||
|
||||
gtk_label_set (GTK_LABEL (filesel->selection_text), err_buf);
|
||||
}
|
||||
@ -524,7 +529,7 @@ gtk_file_selection_show_fileop_buttons (GtkFileSelection *filesel)
|
||||
/* delete, create directory, and rename */
|
||||
if (!filesel->fileop_c_dir)
|
||||
{
|
||||
filesel->fileop_c_dir = gtk_button_new_with_label ("Create Dir");
|
||||
filesel->fileop_c_dir = gtk_button_new_with_label (_("Create Dir"));
|
||||
gtk_signal_connect (GTK_OBJECT (filesel->fileop_c_dir), "clicked",
|
||||
(GtkSignalFunc) gtk_file_selection_create_dir,
|
||||
(gpointer) filesel);
|
||||
@ -535,7 +540,7 @@ gtk_file_selection_show_fileop_buttons (GtkFileSelection *filesel)
|
||||
|
||||
if (!filesel->fileop_del_file)
|
||||
{
|
||||
filesel->fileop_del_file = gtk_button_new_with_label ("Delete File");
|
||||
filesel->fileop_del_file = gtk_button_new_with_label (_("Delete File"));
|
||||
gtk_signal_connect (GTK_OBJECT (filesel->fileop_del_file), "clicked",
|
||||
(GtkSignalFunc) gtk_file_selection_delete_file,
|
||||
(gpointer) filesel);
|
||||
@ -546,7 +551,7 @@ gtk_file_selection_show_fileop_buttons (GtkFileSelection *filesel)
|
||||
|
||||
if (!filesel->fileop_ren_file)
|
||||
{
|
||||
filesel->fileop_ren_file = gtk_button_new_with_label ("Rename File");
|
||||
filesel->fileop_ren_file = gtk_button_new_with_label (_("Rename File"));
|
||||
gtk_signal_connect (GTK_OBJECT (filesel->fileop_ren_file), "clicked",
|
||||
(GtkSignalFunc) gtk_file_selection_rename_file,
|
||||
(gpointer) filesel);
|
||||
@ -707,7 +712,7 @@ gtk_file_selection_fileop_error (gchar *error_message)
|
||||
(GtkSignalFunc) gtk_file_selection_fileop_destroy,
|
||||
(gpointer) fs);
|
||||
*/
|
||||
gtk_window_set_title (GTK_WINDOW (dialog), "Error");
|
||||
gtk_window_set_title (GTK_WINDOW (dialog), _("Error"));
|
||||
gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_MOUSE);
|
||||
|
||||
vbox = gtk_vbox_new(FALSE, 0);
|
||||
@ -725,7 +730,7 @@ gtk_file_selection_fileop_error (gchar *error_message)
|
||||
g_free (error_message);
|
||||
|
||||
/* close button */
|
||||
button = gtk_button_new_with_label ("Close");
|
||||
button = gtk_button_new_with_label (_("Close"));
|
||||
gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
|
||||
(GtkSignalFunc) gtk_widget_destroy,
|
||||
(gpointer) dialog);
|
||||
@ -800,7 +805,7 @@ gtk_file_selection_create_dir (GtkWidget *widget, gpointer data)
|
||||
gtk_signal_connect (GTK_OBJECT (dialog), "destroy",
|
||||
(GtkSignalFunc) gtk_file_selection_fileop_destroy,
|
||||
(gpointer) fs);
|
||||
gtk_window_set_title (GTK_WINDOW (dialog), "Create Directory");
|
||||
gtk_window_set_title (GTK_WINDOW (dialog), _("Create Directory"));
|
||||
gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_MOUSE);
|
||||
|
||||
/* If file dialog is grabbed, grab option dialog */
|
||||
@ -814,7 +819,7 @@ gtk_file_selection_create_dir (GtkWidget *widget, gpointer data)
|
||||
FALSE, FALSE, 0);
|
||||
gtk_widget_show(vbox);
|
||||
|
||||
label = gtk_label_new("Directory name:");
|
||||
label = gtk_label_new(_("Directory name:"));
|
||||
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0);
|
||||
gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 5);
|
||||
gtk_widget_show(label);
|
||||
@ -827,7 +832,7 @@ gtk_file_selection_create_dir (GtkWidget *widget, gpointer data)
|
||||
gtk_widget_show (fs->fileop_entry);
|
||||
|
||||
/* buttons */
|
||||
button = gtk_button_new_with_label ("Create");
|
||||
button = gtk_button_new_with_label (_("Create"));
|
||||
gtk_signal_connect (GTK_OBJECT (button), "clicked",
|
||||
(GtkSignalFunc) gtk_file_selection_create_dir_confirmed,
|
||||
(gpointer) fs);
|
||||
@ -836,7 +841,7 @@ gtk_file_selection_create_dir (GtkWidget *widget, gpointer data)
|
||||
GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
|
||||
gtk_widget_show(button);
|
||||
|
||||
button = gtk_button_new_with_label ("Cancel");
|
||||
button = gtk_button_new_with_label (_("Cancel"));
|
||||
gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
|
||||
(GtkSignalFunc) gtk_widget_destroy,
|
||||
(gpointer) dialog);
|
||||
@ -905,7 +910,7 @@ gtk_file_selection_delete_file (GtkWidget *widget, gpointer data)
|
||||
gtk_signal_connect (GTK_OBJECT (dialog), "destroy",
|
||||
(GtkSignalFunc) gtk_file_selection_fileop_destroy,
|
||||
(gpointer) fs);
|
||||
gtk_window_set_title (GTK_WINDOW (dialog), "Delete File");
|
||||
gtk_window_set_title (GTK_WINDOW (dialog), _("Delete File"));
|
||||
gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_MOUSE);
|
||||
|
||||
/* If file dialog is grabbed, grab option dialog */
|
||||
@ -927,7 +932,7 @@ gtk_file_selection_delete_file (GtkWidget *widget, gpointer data)
|
||||
g_free(buf);
|
||||
|
||||
/* buttons */
|
||||
button = gtk_button_new_with_label ("Delete");
|
||||
button = gtk_button_new_with_label (_("Delete"));
|
||||
gtk_signal_connect (GTK_OBJECT (button), "clicked",
|
||||
(GtkSignalFunc) gtk_file_selection_delete_file_confirmed,
|
||||
(gpointer) fs);
|
||||
@ -936,7 +941,7 @@ gtk_file_selection_delete_file (GtkWidget *widget, gpointer data)
|
||||
GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
|
||||
gtk_widget_show(button);
|
||||
|
||||
button = gtk_button_new_with_label ("Cancel");
|
||||
button = gtk_button_new_with_label (_("Cancel"));
|
||||
gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
|
||||
(GtkSignalFunc) gtk_widget_destroy,
|
||||
(gpointer) dialog);
|
||||
@ -1009,7 +1014,7 @@ gtk_file_selection_rename_file (GtkWidget *widget, gpointer data)
|
||||
gtk_signal_connect (GTK_OBJECT (dialog), "destroy",
|
||||
(GtkSignalFunc) gtk_file_selection_fileop_destroy,
|
||||
(gpointer) fs);
|
||||
gtk_window_set_title (GTK_WINDOW (dialog), "Rename File");
|
||||
gtk_window_set_title (GTK_WINDOW (dialog), _("Rename File"));
|
||||
gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_MOUSE);
|
||||
|
||||
/* If file dialog is grabbed, grab option dialog */
|
||||
@ -1042,7 +1047,7 @@ gtk_file_selection_rename_file (GtkWidget *widget, gpointer data)
|
||||
0, strlen (fs->fileop_file));
|
||||
|
||||
/* buttons */
|
||||
button = gtk_button_new_with_label ("Rename");
|
||||
button = gtk_button_new_with_label (_("Rename"));
|
||||
gtk_signal_connect (GTK_OBJECT (button), "clicked",
|
||||
(GtkSignalFunc) gtk_file_selection_rename_file_confirmed,
|
||||
(gpointer) fs);
|
||||
@ -1051,7 +1056,7 @@ gtk_file_selection_rename_file (GtkWidget *widget, gpointer data)
|
||||
GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
|
||||
gtk_widget_show(button);
|
||||
|
||||
button = gtk_button_new_with_label ("Cancel");
|
||||
button = gtk_button_new_with_label (_("Cancel"));
|
||||
gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
|
||||
(GtkSignalFunc) gtk_widget_destroy,
|
||||
(gpointer) dialog);
|
||||
@ -1447,7 +1452,7 @@ gtk_file_selection_abort (GtkFileSelection *fs)
|
||||
{
|
||||
gchar err_buf[256];
|
||||
|
||||
sprintf (err_buf, "Directory unreadable: %s", cmpl_strerror (cmpl_errno));
|
||||
sprintf (err_buf, _("Directory unreadable: %s"), cmpl_strerror (cmpl_errno));
|
||||
|
||||
/* BEEP gdk_beep(); */
|
||||
|
||||
|
@ -45,6 +45,8 @@
|
||||
#include "gtktable.h"
|
||||
#include "gtkvbox.h"
|
||||
|
||||
#include "gtkintl.h"
|
||||
|
||||
typedef struct {
|
||||
gint index;
|
||||
GtkWidget *entry;
|
||||
@ -187,7 +189,7 @@ gtk_input_dialog_init (GtkInputDialog *inputd)
|
||||
|
||||
/* shell and main vbox */
|
||||
|
||||
gtk_window_set_title (GTK_WINDOW (inputd), "Input");
|
||||
gtk_window_set_title (GTK_WINDOW (inputd), _("Input"));
|
||||
|
||||
vbox = gtk_vbox_new (FALSE, 4);
|
||||
gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
|
||||
@ -195,7 +197,7 @@ gtk_input_dialog_init (GtkInputDialog *inputd)
|
||||
|
||||
if (g_list_length(device_info) <= 1) /* only core device */
|
||||
{
|
||||
label = gtk_label_new ("No input devices");
|
||||
label = gtk_label_new (_("No input devices"));
|
||||
gtk_container_add (GTK_CONTAINER (vbox), label);
|
||||
|
||||
gtk_widget_show (label);
|
||||
@ -224,7 +226,7 @@ gtk_input_dialog_init (GtkInputDialog *inputd)
|
||||
util_box = gtk_hbox_new (FALSE, 2);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), util_box, FALSE, FALSE, 0);
|
||||
|
||||
label = gtk_label_new("Device:");
|
||||
label = gtk_label_new(_("Device:"));
|
||||
gtk_box_pack_start (GTK_BOX (util_box), label, FALSE, FALSE, 2);
|
||||
|
||||
optionmenu = gtk_option_menu_new ();
|
||||
@ -240,7 +242,7 @@ gtk_input_dialog_init (GtkInputDialog *inputd)
|
||||
|
||||
mapping_menu = gtk_menu_new ();
|
||||
|
||||
menuitem = gtk_menu_item_new_with_label("Disabled");
|
||||
menuitem = gtk_menu_item_new_with_label(_("Disabled"));
|
||||
gtk_menu_append(GTK_MENU(mapping_menu),menuitem);
|
||||
gtk_object_set_user_data (GTK_OBJECT (menuitem), inputd);
|
||||
gtk_widget_show(menuitem);
|
||||
@ -248,7 +250,7 @@ gtk_input_dialog_init (GtkInputDialog *inputd)
|
||||
(GtkSignalFunc) gtk_input_dialog_set_mapping_mode,
|
||||
GINT_TO_POINTER (GDK_MODE_DISABLED));
|
||||
|
||||
menuitem = gtk_menu_item_new_with_label("Screen");
|
||||
menuitem = gtk_menu_item_new_with_label(_("Screen"));
|
||||
gtk_menu_append(GTK_MENU(mapping_menu),menuitem);
|
||||
gtk_object_set_user_data (GTK_OBJECT (menuitem), inputd);
|
||||
gtk_widget_show(menuitem);
|
||||
@ -256,7 +258,7 @@ gtk_input_dialog_init (GtkInputDialog *inputd)
|
||||
(GtkSignalFunc) gtk_input_dialog_set_mapping_mode,
|
||||
GINT_TO_POINTER (GDK_MODE_SCREEN));
|
||||
|
||||
menuitem = gtk_menu_item_new_with_label("Window");
|
||||
menuitem = gtk_menu_item_new_with_label(_("Window"));
|
||||
gtk_menu_append(GTK_MENU(mapping_menu),menuitem);
|
||||
gtk_object_set_user_data (GTK_OBJECT (menuitem), inputd);
|
||||
gtk_widget_show(menuitem);
|
||||
@ -264,7 +266,7 @@ gtk_input_dialog_init (GtkInputDialog *inputd)
|
||||
(GtkSignalFunc) gtk_input_dialog_set_mapping_mode,
|
||||
GINT_TO_POINTER (GDK_MODE_WINDOW));
|
||||
|
||||
label = gtk_label_new("Mode: ");
|
||||
label = gtk_label_new(_("Mode: "));
|
||||
gtk_box_pack_start (GTK_BOX (util_box), label, FALSE, FALSE, 2);
|
||||
|
||||
inputd->mode_optionmenu = gtk_option_menu_new ();
|
||||
@ -294,7 +296,7 @@ gtk_input_dialog_init (GtkInputDialog *inputd)
|
||||
|
||||
/* The axis listbox */
|
||||
|
||||
label = gtk_label_new ("Axes");
|
||||
label = gtk_label_new (_("Axes"));
|
||||
|
||||
inputd->axis_listbox = gtk_scrolled_window_new (NULL, NULL);
|
||||
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(inputd->axis_listbox),
|
||||
@ -310,7 +312,7 @@ gtk_input_dialog_init (GtkInputDialog *inputd)
|
||||
|
||||
/* Keys listbox */
|
||||
|
||||
label = gtk_label_new ("Keys");
|
||||
label = gtk_label_new (_("Keys"));
|
||||
|
||||
inputd->keys_listbox = gtk_scrolled_window_new (NULL, NULL);
|
||||
gtk_widget_set_usize (inputd->keys_listbox, KEYS_LIST_WIDTH, KEYS_LIST_HEIGHT);
|
||||
@ -332,7 +334,7 @@ gtk_input_dialog_init (GtkInputDialog *inputd)
|
||||
|
||||
/* We create the save button in any case, so that clients can
|
||||
connect to it, without paying attention to whether it exits */
|
||||
inputd->save_button = gtk_button_new_with_label ("Save");
|
||||
inputd->save_button = gtk_button_new_with_label (_("Save"));
|
||||
GTK_WIDGET_SET_FLAGS (inputd->save_button, GTK_CAN_DEFAULT);
|
||||
gtk_box_pack_start (GTK_BOX (GTK_DIALOG(inputd)->action_area),
|
||||
inputd->save_button, TRUE, TRUE, 0);
|
||||
@ -341,7 +343,7 @@ gtk_input_dialog_init (GtkInputDialog *inputd)
|
||||
if (g_list_length(device_info) <= 1) /* only core device */
|
||||
gtk_widget_set_sensitive(inputd->save_button, FALSE);
|
||||
|
||||
inputd->close_button = gtk_button_new_with_label ("Close");
|
||||
inputd->close_button = gtk_button_new_with_label (_("Close"));
|
||||
GTK_WIDGET_SET_FLAGS (inputd->close_button, GTK_CAN_DEFAULT);
|
||||
gtk_box_pack_start (GTK_BOX (GTK_DIALOG(inputd)->action_area),
|
||||
inputd->close_button, TRUE, TRUE, 0);
|
||||
@ -487,11 +489,11 @@ gtk_input_dialog_fill_axes(GtkInputDialog *inputd, GdkDeviceInfo *info)
|
||||
static const char *axis_use_strings[GDK_AXIS_LAST] =
|
||||
{
|
||||
"",
|
||||
"X",
|
||||
"Y",
|
||||
"Pressure",
|
||||
"X Tilt",
|
||||
"Y Tilt"
|
||||
N_("X"),
|
||||
N_("Y"),
|
||||
N_("Pressure"),
|
||||
N_("X Tilt"),
|
||||
N_("Y Tilt")
|
||||
};
|
||||
|
||||
int i,j;
|
||||
@ -518,7 +520,7 @@ gtk_input_dialog_fill_axes(GtkInputDialog *inputd, GdkDeviceInfo *info)
|
||||
{
|
||||
/* create the label */
|
||||
|
||||
label = gtk_label_new(axis_use_strings[i]);
|
||||
label = gtk_label_new (_(axis_use_strings[i]));
|
||||
gtk_table_attach (GTK_TABLE (inputd->axis_list), label, 0, 1, i, i+1,
|
||||
0, 0, 2, 2);
|
||||
|
||||
@ -531,7 +533,7 @@ gtk_input_dialog_fill_axes(GtkInputDialog *inputd, GdkDeviceInfo *info)
|
||||
GtkWidget *menu_item;
|
||||
|
||||
if (j == -1)
|
||||
menu_item = gtk_menu_item_new_with_label ("none");
|
||||
menu_item = gtk_menu_item_new_with_label (_("none"));
|
||||
else
|
||||
{
|
||||
sprintf (buffer,"%d",j+1);
|
||||
@ -565,7 +567,7 @@ gtk_input_dialog_fill_axes(GtkInputDialog *inputd, GdkDeviceInfo *info)
|
||||
static void
|
||||
gtk_input_dialog_clear_key (GtkWidget *widget, GtkInputKeyInfo *key)
|
||||
{
|
||||
gtk_entry_set_text (GTK_ENTRY(key->entry), "(disabled)");
|
||||
gtk_entry_set_text (GTK_ENTRY(key->entry), _("(disabled)"));
|
||||
gdk_input_set_key (key->inputd->current_device, key->index, 0, 0);
|
||||
}
|
||||
|
||||
@ -594,14 +596,14 @@ gtk_input_dialog_set_key (GtkInputKeyInfo *key,
|
||||
g_string_append (str, chars);
|
||||
}
|
||||
else
|
||||
g_string_append (str, "(unknown)");
|
||||
g_string_append (str, _("(unknown)"));
|
||||
gtk_entry_set_text (GTK_ENTRY(key->entry), str->str);
|
||||
|
||||
g_string_free (str, TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
gtk_entry_set_text (GTK_ENTRY(key->entry), "(disabled)");
|
||||
gtk_entry_set_text (GTK_ENTRY(key->entry), _("(disabled)"));
|
||||
}
|
||||
}
|
||||
|
||||
@ -679,7 +681,7 @@ gtk_input_dialog_fill_keys(GtkInputDialog *inputd, GdkDeviceInfo *info)
|
||||
|
||||
/* and clear button */
|
||||
|
||||
button = gtk_button_new_with_label ("clear");
|
||||
button = gtk_button_new_with_label (_("clear"));
|
||||
gtk_table_attach (GTK_TABLE (inputd->keys_list), button, 2, 3, i, i+1,
|
||||
0, 0, 2, 2);
|
||||
gtk_widget_show (button);
|
||||
|
24
gtk/gtkintl.h
Normal file
24
gtk/gtkintl.h
Normal file
@ -0,0 +1,24 @@
|
||||
#ifndef __GTKINTL_H__
|
||||
#define __GTKINTL_H__
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#ifdef ENABLE_NLS
|
||||
#include<libintl.h>
|
||||
#define _(String) dgettext("gtk+",String)
|
||||
#ifdef gettext_noop
|
||||
#define N_(String) gettext_noop(String)
|
||||
#else
|
||||
#define N_(String) (String)
|
||||
#endif
|
||||
#else /* NLS is disabled */
|
||||
#define _(String) (String)
|
||||
#define N_(String) (String)
|
||||
#define textdomain(String) (String)
|
||||
#define gettext(String) (String)
|
||||
#define dgettext(Domain,String) (String)
|
||||
#define dcgettext(Domain,String,Type) (String)
|
||||
#define bindtextdomain(Domain,Directory) (Domain)
|
||||
#endif
|
||||
|
||||
#endif
|
@ -41,6 +41,7 @@
|
||||
#include "gdk/gdki18n.h"
|
||||
#include "config.h"
|
||||
#include "gtkdebug.h"
|
||||
#include "gtkintl.h"
|
||||
|
||||
|
||||
/* Private type definitions
|
||||
@ -444,6 +445,10 @@ gtk_init (int *argc,
|
||||
g_free (module_name);
|
||||
}
|
||||
|
||||
#ifdef ENABLE_NLS
|
||||
bindtextdomain("gtk+",GTK_LOCALEDIR);
|
||||
#endif
|
||||
|
||||
/* Initialize the default visual and colormap to be
|
||||
* used in creating widgets. (We want to use the system
|
||||
* defaults so as to be nice to the colormap).
|
||||
|
9
po/.cvsignore
Normal file
9
po/.cvsignore
Normal file
@ -0,0 +1,9 @@
|
||||
*.gmo
|
||||
*.mo
|
||||
Makefile
|
||||
Makefile.in
|
||||
Makefile.in.in
|
||||
POTFILES
|
||||
cat-id-tbl.c
|
||||
gtk+.pot
|
||||
stamp-cat-id
|
5
po/POTFILES.in
Normal file
5
po/POTFILES.in
Normal file
@ -0,0 +1,5 @@
|
||||
# Files from the Gtk ditribution which have already been
|
||||
# marked to allow runtime translation of messages
|
||||
|
||||
gtk/gtkfilesel.c
|
||||
gtk/gtkcolorsel.c
|
104
po/de.po
Normal file
104
po/de.po
Normal file
@ -0,0 +1,104 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Date: 1998-10-10 18:46:34+0200\n"
|
||||
"From: Daniel Egger <Daniel.Egger@t-online.de>\n"
|
||||
"Content-Type: text/plain; charset=\n"
|
||||
"Xgettext-Options: --default-domain=gtk+ --directory=.. --add-comments --keyword=_ --keyword=N_ --files-from=./POTFILES.in\n"
|
||||
"Files: gtk/gtkfilesel.c\n"
|
||||
|
||||
#: gtk/gtkfilesel.c:371
|
||||
msgid "Directories"
|
||||
msgstr "Verzeichnisse"
|
||||
|
||||
#: gtk/gtkfilesel.c:372
|
||||
msgid "Files"
|
||||
msgstr "Dateien"
|
||||
|
||||
#: gtk/gtkfilesel.c:446
|
||||
msgid "OK"
|
||||
msgstr "OK"
|
||||
|
||||
#. The Cancel button
|
||||
#: gtk/gtkfilesel.c:453 gtk/gtkfilesel.c:815 gtk/gtkfilesel.c:915 gtk/gtkfilesel.c:1030
|
||||
msgid "Cancel"
|
||||
msgstr "Abbrechen"
|
||||
|
||||
#: gtk/gtkfilesel.c:484 gtk/gtkfilesel.c:1431
|
||||
msgid "Directory unreadable: %s"
|
||||
msgstr "Verzeichnis nicht lesbar: %s"
|
||||
|
||||
#: gtk/gtkfilesel.c:516
|
||||
msgid "Create Dir"
|
||||
msgstr "Erstelle Verzeichnis"
|
||||
|
||||
#: gtk/gtkfilesel.c:527 gtk/gtkfilesel.c:884
|
||||
msgid "Delete File"
|
||||
msgstr "Datei löschen"
|
||||
|
||||
#: gtk/gtkfilesel.c:538 gtk/gtkfilesel.c:988
|
||||
msgid "Rename File"
|
||||
msgstr "Datei umbenennen"
|
||||
|
||||
#.
|
||||
#. gtk_signal_connect (GTK_OBJECT (dialog), "destroy",
|
||||
#. (GtkSignalFunc) gtk_file_selection_fileop_destroy,
|
||||
#. (gpointer) fs);
|
||||
#.
|
||||
#: gtk/gtkfilesel.c:686
|
||||
msgid "Error"
|
||||
msgstr "Fehler"
|
||||
|
||||
#. close button
|
||||
#: gtk/gtkfilesel.c:704
|
||||
msgid "Close"
|
||||
msgstr "Schließen"
|
||||
|
||||
#: gtk/gtkfilesel.c:749
|
||||
msgid "Error creating directory \""
|
||||
msgstr ""
|
||||
|
||||
#: gtk/gtkfilesel.c:779
|
||||
msgid "Create Directory"
|
||||
msgstr "Erstelle Verzeichnis"
|
||||
|
||||
#: gtk/gtkfilesel.c:793
|
||||
msgid "Directory name:"
|
||||
msgstr "Verzeichnisname:"
|
||||
|
||||
#. buttons
|
||||
#: gtk/gtkfilesel.c:806
|
||||
msgid "Create"
|
||||
msgstr "Erstellen"
|
||||
|
||||
#: gtk/gtkfilesel.c:846
|
||||
msgid "Error deleting file \""
|
||||
msgstr ""
|
||||
|
||||
#: gtk/gtkfilesel.c:898
|
||||
msgid "Really delete file \""
|
||||
msgstr ""
|
||||
|
||||
#: gtk/gtkfilesel.c:906
|
||||
msgid "Delete"
|
||||
msgstr "Löschen"
|
||||
|
||||
#: gtk/gtkfilesel.c:952
|
||||
msgid "Error renaming file \""
|
||||
msgstr ""
|
||||
|
||||
#: gtk/gtkfilesel.c:1002
|
||||
msgid "Rename file \""
|
||||
msgstr ""
|
||||
|
||||
#. buttons
|
||||
#: gtk/gtkfilesel.c:1021
|
||||
msgid "Rename"
|
||||
msgstr "Umbenennen"
|
||||
|
||||
#: gtk/gtkfilesel.c:1410 gtk/gtkfilesel.c:1411
|
||||
msgid "Selection: "
|
||||
msgstr "Auswahl: "
|
||||
|
||||
#: gtk/gtkfilesel.c:2712
|
||||
msgid "Name too long"
|
||||
msgstr ""
|
Loading…
Reference in New Issue
Block a user