aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlvaro Herrera <alvherre@alvh.no-ip.org>2008-10-09 17:24:05 +0000
committerAlvaro Herrera <alvherre@alvh.no-ip.org>2008-10-09 17:24:05 +0000
commit2532c54d82b4925fd882a2bf119a7cc01b804d48 (patch)
treead5f209495866b53baf85d3c388462434fa471e1 /src
parentb15531033e8bcff1e0a436d6bd18b5a09e477a20 (diff)
downloadpostgresql-2532c54d82b4925fd882a2bf119a7cc01b804d48.tar.gz
postgresql-2532c54d82b4925fd882a2bf119a7cc01b804d48.zip
Improve translatability of error messages for external modules by tweaking
the ereport macro. Included in this commit are enough files for starting plpgsql, plpython, plperl and pltcl translations.
Diffstat (limited to 'src')
-rw-r--r--src/backend/utils/error/elog.c10
-rw-r--r--src/backend/utils/init/miscinit.c16
-rw-r--r--src/include/miscadmin.h3
-rw-r--r--src/include/utils/elog.h21
-rw-r--r--src/pl/plperl/nls.mk5
-rw-r--r--src/pl/plperl/plperl.c10
-rw-r--r--src/pl/plpgsql/src/nls.mk8
-rw-r--r--src/pl/plpgsql/src/pl_handler.c4
-rw-r--r--src/pl/plpgsql/src/plpgsql.h6
-rw-r--r--src/pl/plpython/nls.mk5
-rw-r--r--src/pl/plpython/plpython.c8
-rw-r--r--src/pl/tcl/nls.mk5
-rw-r--r--src/pl/tcl/pltcl.c8
13 files changed, 93 insertions, 16 deletions
diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c
index d2315fb1f6b..178c55ad596 100644
--- a/src/backend/utils/error/elog.c
+++ b/src/backend/utils/error/elog.c
@@ -42,7 +42,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/error/elog.c,v 1.206 2008/09/01 20:42:45 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/error/elog.c,v 1.207 2008/10/09 17:24:05 alvherre Exp $
*
*-------------------------------------------------------------------------
*/
@@ -160,7 +160,7 @@ static void write_csvlog(ErrorData *edata);
*/
bool
errstart(int elevel, const char *filename, int lineno,
- const char *funcname)
+ const char *funcname, const char *domain)
{
ErrorData *edata;
bool output_to_server;
@@ -290,6 +290,8 @@ errstart(int elevel, const char *filename, int lineno,
edata->filename = filename;
edata->lineno = lineno;
edata->funcname = funcname;
+ /* the default text domain is the backend's */
+ edata->domain = domain ? domain : "postgres";
/* Select default errcode based on elevel */
if (elevel >= ERROR)
edata->sqlerrcode = ERRCODE_INTERNAL_ERROR;
@@ -611,7 +613,7 @@ errcode_for_socket_access(void)
char *fmtbuf; \
StringInfoData buf; \
/* Internationalize the error format string */ \
- fmt = _(fmt); \
+ fmt = dgettext(edata->domain, fmt); \
/* Expand %m in format string */ \
fmtbuf = expand_fmt_string(fmt, edata); \
initStringInfo(&buf); \
@@ -982,7 +984,7 @@ elog_finish(int elevel, const char *fmt,...)
*/
errordata_stack_depth--;
errno = edata->saved_errno;
- if (!errstart(elevel, edata->filename, edata->lineno, edata->funcname))
+ if (!errstart(elevel, edata->filename, edata->lineno, edata->funcname, NULL))
return; /* nothing to do */
/*
diff --git a/src/backend/utils/init/miscinit.c b/src/backend/utils/init/miscinit.c
index 5369da439b6..c3b26698e2a 100644
--- a/src/backend/utils/init/miscinit.c
+++ b/src/backend/utils/init/miscinit.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/init/miscinit.c,v 1.167 2008/03/27 17:24:16 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/init/miscinit.c,v 1.168 2008/10/09 17:24:05 alvherre Exp $
*
*-------------------------------------------------------------------------
*/
@@ -1212,3 +1212,17 @@ process_local_preload_libraries(void)
"local_preload_libraries",
true);
}
+
+void
+set_text_domain(const char *domain)
+{
+#ifdef ENABLE_NLS
+ if (my_exec_path[0] != '\0')
+ {
+ char locale_path[MAXPGPATH];
+
+ get_locale_path(my_exec_path, locale_path);
+ bindtextdomain(domain, locale_path);
+ }
+#endif
+}
diff --git a/src/include/miscadmin.h b/src/include/miscadmin.h
index 3d1511e58a5..98e28e0d10b 100644
--- a/src/include/miscadmin.h
+++ b/src/include/miscadmin.h
@@ -13,7 +13,7 @@
* Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/include/miscadmin.h,v 1.202 2008/04/23 13:44:59 mha Exp $
+ * $PostgreSQL: pgsql/src/include/miscadmin.h,v 1.203 2008/10/09 17:24:05 alvherre Exp $
*
* NOTES
* some of the information in this file should be moved to other files.
@@ -329,6 +329,7 @@ extern void RecordSharedMemoryInLockFile(unsigned long id1,
extern void ValidatePgVersion(const char *path);
extern void process_shared_preload_libraries(void);
extern void process_local_preload_libraries(void);
+extern void set_text_domain(const char *domain);
/* in access/transam/xlog.c */
extern bool BackupInProgress(void);
diff --git a/src/include/utils/elog.h b/src/include/utils/elog.h
index 034fd420b51..982e3b2c655 100644
--- a/src/include/utils/elog.h
+++ b/src/include/utils/elog.h
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/include/utils/elog.h,v 1.94 2008/09/01 20:42:45 tgl Exp $
+ * $PostgreSQL: pgsql/src/include/utils/elog.h,v 1.95 2008/10/09 17:24:05 alvherre Exp $
*
*-------------------------------------------------------------------------
*/
@@ -92,14 +92,26 @@
* ERRCODE_INTERNAL_ERROR if elevel is ERROR or more, ERRCODE_WARNING
* if elevel is WARNING, or ERRCODE_SUCCESSFUL_COMPLETION if elevel is
* NOTICE or below.
+ *
+ * ereport_domain() allows a message domain to be specified, for modules that
+ * wish to use a different message catalog from the backend's. To avoid having
+ * one copy of the default text domain per .o file, we define it as NULL here
+ * and have errstart insert the default text domain. Modules can either use
+ * ereport_domain() directly, or preferrably they can override the TEXTDOMAIN
+ * macro.
*----------
*/
-#define ereport(elevel, rest) \
- (errstart(elevel, __FILE__, __LINE__, PG_FUNCNAME_MACRO) ? \
+#define ereport_domain(elevel, domain, rest) \
+ (errstart(elevel, __FILE__, __LINE__, PG_FUNCNAME_MACRO, domain) ? \
(errfinish rest) : (void) 0)
+#define ereport(level, rest) \
+ ereport_domain(level, TEXTDOMAIN, rest)
+
+#define TEXTDOMAIN NULL
+
extern bool errstart(int elevel, const char *filename, int lineno,
- const char *funcname);
+ const char *funcname, const char *domain);
extern void errfinish(int dummy,...);
extern int errcode(int sqlerrcode);
@@ -269,6 +281,7 @@ typedef struct ErrorData
const char *filename; /* __FILE__ of ereport() call */
int lineno; /* __LINE__ of ereport() call */
const char *funcname; /* __func__ of ereport() call */
+ const char *domain; /* message domain, NULL if default */
int sqlerrcode; /* encoded ERRSTATE */
char *message; /* primary error message */
char *detail; /* detail error message */
diff --git a/src/pl/plperl/nls.mk b/src/pl/plperl/nls.mk
new file mode 100644
index 00000000000..a17dc4ac9ee
--- /dev/null
+++ b/src/pl/plperl/nls.mk
@@ -0,0 +1,5 @@
+# $PostgreSQL: pgsql/src/pl/plperl/nls.mk,v 1.1 2008/10/09 17:24:05 alvherre Exp $
+CATALOG_NAME := plperl
+AVAIL_LANGUAGES :=
+GETTEXT_FILES := plperl.c SPI.xs
+GETTEXT_TRIGGERS:= _ errmsg errdetail errdetail_log errhint errcontext write_stderr croak Perl_croak
diff --git a/src/pl/plperl/plperl.c b/src/pl/plperl/plperl.c
index 1bf95d96059..073e41d4006 100644
--- a/src/pl/plperl/plperl.c
+++ b/src/pl/plperl/plperl.c
@@ -1,7 +1,7 @@
/**********************************************************************
* plperl.c - perl as a procedural language for PostgreSQL
*
- * $PostgreSQL: pgsql/src/pl/plperl/plperl.c,v 1.139 2008/03/28 00:21:56 tgl Exp $
+ * $PostgreSQL: pgsql/src/pl/plperl/plperl.c,v 1.140 2008/10/09 17:24:05 alvherre Exp $
*
**********************************************************************/
@@ -30,6 +30,10 @@
#include "utils/typcache.h"
#include "utils/hsearch.h"
+/* define our text domain for translations */
+#undef TEXTDOMAIN
+#define TEXTDOMAIN "plperl"
+
/* perl stuff */
#include "plperl.h"
@@ -186,8 +190,10 @@ _PG_init(void)
if (inited)
return;
+ set_text_domain(TEXTDOMAIN);
+
DefineCustomBoolVariable("plperl.use_strict",
- "If true, will compile trusted and untrusted perl code in strict mode",
+ gettext_noop("If true, will compile trusted and untrusted perl code in strict mode"),
NULL,
&plperl_use_strict,
PGC_USERSET,
diff --git a/src/pl/plpgsql/src/nls.mk b/src/pl/plpgsql/src/nls.mk
new file mode 100644
index 00000000000..ddc585fc8d6
--- /dev/null
+++ b/src/pl/plpgsql/src/nls.mk
@@ -0,0 +1,8 @@
+# $PostgreSQL: pgsql/src/pl/plpgsql/src/nls.mk,v 1.1 2008/10/09 17:24:05 alvherre Exp $
+CATALOG_NAME := plpgsql
+AVAIL_LANGUAGES :=
+GETTEXT_FILES := pl_comp.c pl_exec.c pl_gram.c pl_funcs.c pl_handler.c pl_scan.c
+GETTEXT_TRIGGERS:= _ errmsg errdetail errdetail_log errhint errcontext write_stderr yyerror
+
+.PHONY: gettext-files
+gettext-files: distprep
diff --git a/src/pl/plpgsql/src/pl_handler.c b/src/pl/plpgsql/src/pl_handler.c
index 818690501b0..223d06f7b6f 100644
--- a/src/pl/plpgsql/src/pl_handler.c
+++ b/src/pl/plpgsql/src/pl_handler.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/pl/plpgsql/src/pl_handler.c,v 1.40 2008/08/29 13:02:33 petere Exp $
+ * $PostgreSQL: pgsql/src/pl/plpgsql/src/pl_handler.c,v 1.41 2008/10/09 17:24:05 alvherre Exp $
*
*-------------------------------------------------------------------------
*/
@@ -42,6 +42,8 @@ _PG_init(void)
if (inited)
return;
+ set_text_domain(TEXTDOMAIN);
+
plpgsql_HashTableInit();
RegisterXactCallback(plpgsql_xact_cb, NULL);
RegisterSubXactCallback(plpgsql_subxact_cb, NULL);
diff --git a/src/pl/plpgsql/src/plpgsql.h b/src/pl/plpgsql/src/plpgsql.h
index 8cc050773fb..95e69465638 100644
--- a/src/pl/plpgsql/src/plpgsql.h
+++ b/src/pl/plpgsql/src/plpgsql.h
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/pl/plpgsql/src/plpgsql.h,v 1.101 2008/10/09 16:35:07 tgl Exp $
+ * $PostgreSQL: pgsql/src/pl/plpgsql/src/plpgsql.h,v 1.102 2008/10/09 17:24:05 alvherre Exp $
*
*-------------------------------------------------------------------------
*/
@@ -28,6 +28,10 @@
* Definitions
**********************************************************************/
+/* define our text domain for translations */
+#undef TEXTDOMAIN
+#define TEXTDOMAIN "plpgsql"
+
/* ----------
* Compiler's namestack item types
* ----------
diff --git a/src/pl/plpython/nls.mk b/src/pl/plpython/nls.mk
new file mode 100644
index 00000000000..72b9ca525d4
--- /dev/null
+++ b/src/pl/plpython/nls.mk
@@ -0,0 +1,5 @@
+# $PostgreSQL: pgsql/src/pl/plpython/nls.mk,v 1.1 2008/10/09 17:24:05 alvherre Exp $
+CATALOG_NAME := plpython
+AVAIL_LANGUAGES :=
+GETTEXT_FILES := plpython.c
+GETTEXT_TRIGGERS:= _ errmsg errdetail errdetail_log errhint errcontext write_stderr yyerror
diff --git a/src/pl/plpython/plpython.c b/src/pl/plpython/plpython.c
index c4d6803fcf4..ae17289cd26 100644
--- a/src/pl/plpython/plpython.c
+++ b/src/pl/plpython/plpython.c
@@ -1,7 +1,7 @@
/**********************************************************************
* plpython.c - python as a procedural language for PostgreSQL
*
- * $PostgreSQL: pgsql/src/pl/plpython/plpython.c,v 1.112 2008/07/18 03:32:53 tgl Exp $
+ * $PostgreSQL: pgsql/src/pl/plpython/plpython.c,v 1.113 2008/10/09 17:24:05 alvherre Exp $
*
*********************************************************************
*/
@@ -63,6 +63,10 @@ typedef int Py_ssize_t;
#include "utils/syscache.h"
#include "utils/typcache.h"
+/* define our text domain for translations */
+#undef TEXTDOMAIN
+#define TEXTDOMAIN "plpython"
+
#include <compile.h>
#include <eval.h>
@@ -2745,6 +2749,8 @@ _PG_init(void)
if (inited)
return;
+ set_text_domain(TEXTDOMAIN);
+
Py_Initialize();
PLy_init_interp();
PLy_init_plpy();
diff --git a/src/pl/tcl/nls.mk b/src/pl/tcl/nls.mk
new file mode 100644
index 00000000000..1630b6c1e44
--- /dev/null
+++ b/src/pl/tcl/nls.mk
@@ -0,0 +1,5 @@
+# $PostgreSQL: pgsql/src/pl/tcl/nls.mk,v 1.1 2008/10/09 17:24:05 alvherre Exp $
+CATALOG_NAME := pltcl
+AVAIL_LANGUAGES :=
+GETTEXT_FILES := pltcl.c
+GETTEXT_TRIGGERS:= _ errmsg errdetail errdetail_log errhint errcontext write_stderr yyerror
diff --git a/src/pl/tcl/pltcl.c b/src/pl/tcl/pltcl.c
index e9fdf9fc38f..1bbab485d1c 100644
--- a/src/pl/tcl/pltcl.c
+++ b/src/pl/tcl/pltcl.c
@@ -2,7 +2,7 @@
* pltcl.c - PostgreSQL support for Tcl as
* procedural language (PL)
*
- * $PostgreSQL: pgsql/src/pl/tcl/pltcl.c,v 1.121 2008/06/17 00:52:43 tgl Exp $
+ * $PostgreSQL: pgsql/src/pl/tcl/pltcl.c,v 1.122 2008/10/09 17:24:05 alvherre Exp $
*
**********************************************************************/
@@ -41,6 +41,10 @@
#define Tcl_GetStringResult(interp) ((interp)->result)
#endif
+/* define our text domain for translations */
+#undef TEXTDOMAIN
+#define TEXTDOMAIN "pltcl"
+
#if defined(UNICODE_CONVERSION) && HAVE_TCL_VERSION(8,1)
#include "mb/pg_wchar.h"
@@ -263,6 +267,8 @@ _PG_init(void)
if (pltcl_pm_init_done)
return;
+ set_text_domain(TEXTDOMAIN);
+
#ifdef WIN32
/* Required on win32 to prevent error loading init.tcl */
Tcl_FindExecutable("");