Le 30/09/2013 05:43, Alvaro Herrera a écrit : > Gilles Darold escribió: > >> + else if (strcmp(param, "numericlocale") == 0) >> + { >> + if (popt->topt.numericLocale) >> + puts(_("Locale-adjusted numeric output (numericlocale) >> is on.")); >> + else >> + puts(_("Locale-adjusted numeric output (numericlocale) >> is off.")); >> + } > Please don't make the variable name part of the translatable message. I > suggest using the following pattern: > >> + else if (strcmp(param, "numericlocale") == 0) >> + { >> + if (popt->topt.numericLocale) >> + printf(_("Locale-adjusted numeric output (%s) is on."), >> "numericlocale"); >> + else >> + printf(_("Locale-adjusted numeric output (%s) is >> off."), "numericlocale"); >> + } > Otherwise it will be too easy for the translator to make the mistake > that the variable name needs translation too. >
That's right, here is the patch modified with just a little change with your suggestion: if (popt->topt.numericLocale) printf(_("Locale-adjusted numeric output (%s) is on.\n"), param); else printf(_("Locale-adjusted numeric output (%s) is off.\n"), param); Thanks -- Gilles Darold Administrateur de bases de données http://dalibo.com - http://dalibo.org
diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml index 574db5c..ddf7bba 100644 --- a/doc/src/sgml/ref/psql-ref.sgml +++ b/doc/src/sgml/ref/psql-ref.sgml @@ -2272,13 +2272,10 @@ lo_import 152801 </para> </tip> - <note> <para> - It is an error to call <command>\pset</command> without any - arguments. In the future this case might show the current status - of all printing options. + <command>\pset</command> without any arguments displays current status + of all printing options. </para> - </note> </listitem> </varlistentry> diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c index 10e9f64..abaee9b 100644 --- a/src/bin/psql/command.c +++ b/src/bin/psql/command.c @@ -68,6 +68,7 @@ static int strip_lineno_from_funcdesc(char *func); static void minimal_error_message(PGresult *res); static void printSSLInfo(void); +static bool printPsetInfo(const char *param, struct printQueryOpt *popt); #ifdef WIN32 static void checkWin32Codepage(void); @@ -1045,8 +1046,20 @@ exec_command(const char *cmd, if (!opt0) { - psql_error("\\%s: missing required argument\n", cmd); - success = false; + size_t i; + /* list all variables */ + static const char *const my_list[] = { + "border", "columns", "expanded", "fieldsep", + "footer", "format", "linestyle", "null", + "numericlocale", "pager", "recordsep", + "tableattr", "title", "tuples_only", + NULL }; + for (i = 0; my_list[i] != NULL; i++) { + printPsetInfo(my_list[i], &pset.popt); + } + + success = true; + } else success = do_pset(opt0, opt1, &pset.popt, pset.quiet); @@ -2275,8 +2288,6 @@ do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet) return false; } - if (!quiet) - printf(_("Output format is %s.\n"), _align2string(popt->topt.format)); } /* set table line style */ @@ -2296,9 +2307,6 @@ do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet) return false; } - if (!quiet) - printf(_("Line style is %s.\n"), - get_line_style(&popt->topt)->name); } /* set border style/width */ @@ -2307,8 +2315,6 @@ do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet) if (value) popt->topt.border = atoi(value); - if (!quiet) - printf(_("Border style is %d.\n"), popt->topt.border); } /* set expanded/vertical mode */ @@ -2320,15 +2326,6 @@ do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet) popt->topt.expanded = ParseVariableBool(value); else popt->topt.expanded = !popt->topt.expanded; - if (!quiet) - { - if (popt->topt.expanded == 1) - printf(_("Expanded display is on.\n")); - else if (popt->topt.expanded == 2) - printf(_("Expanded display is used automatically.\n")); - else - printf(_("Expanded display is off.\n")); - } } /* locale-aware numeric output */ @@ -2338,13 +2335,6 @@ do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet) popt->topt.numericLocale = ParseVariableBool(value); else popt->topt.numericLocale = !popt->topt.numericLocale; - if (!quiet) - { - if (popt->topt.numericLocale) - puts(_("Showing locale-adjusted numeric output.")); - else - puts(_("Locale-adjusted numeric output is off.")); - } } /* null display */ @@ -2355,8 +2345,6 @@ do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet) free(popt->nullPrint); popt->nullPrint = pg_strdup(value); } - if (!quiet) - printf(_("Null display is \"%s\".\n"), popt->nullPrint ? popt->nullPrint : ""); } /* field separator for unaligned text */ @@ -2368,13 +2356,6 @@ do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet) popt->topt.fieldSep.separator = pg_strdup(value); popt->topt.fieldSep.separator_zero = false; } - if (!quiet) - { - if (popt->topt.fieldSep.separator_zero) - printf(_("Field separator is zero byte.\n")); - else - printf(_("Field separator is \"%s\".\n"), popt->topt.fieldSep.separator); - } } else if (strcmp(param, "fieldsep_zero") == 0) @@ -2382,8 +2363,6 @@ do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet) free(popt->topt.fieldSep.separator); popt->topt.fieldSep.separator = NULL; popt->topt.fieldSep.separator_zero = true; - if (!quiet) - printf(_("Field separator is zero byte.\n")); } /* record separator for unaligned text */ @@ -2395,15 +2374,6 @@ do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet) popt->topt.recordSep.separator = pg_strdup(value); popt->topt.recordSep.separator_zero = false; } - if (!quiet) - { - if (popt->topt.recordSep.separator_zero) - printf(_("Record separator is zero byte.\n")); - else if (strcmp(popt->topt.recordSep.separator, "\n") == 0) - printf(_("Record separator is <newline>.")); - else - printf(_("Record separator is \"%s\".\n"), popt->topt.recordSep.separator); - } } else if (strcmp(param, "recordsep_zero") == 0) @@ -2411,8 +2381,6 @@ do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet) free(popt->topt.recordSep.separator); popt->topt.recordSep.separator = NULL; popt->topt.recordSep.separator_zero = true; - if (!quiet) - printf(_("Record separator is zero byte.\n")); } /* toggle between full and tuples-only format */ @@ -2422,13 +2390,6 @@ do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet) popt->topt.tuples_only = ParseVariableBool(value); else popt->topt.tuples_only = !popt->topt.tuples_only; - if (!quiet) - { - if (popt->topt.tuples_only) - puts(_("Showing only tuples.")); - else - puts(_("Tuples only is off.")); - } } /* set title override */ @@ -2439,14 +2400,6 @@ do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet) popt->title = NULL; else popt->title = pg_strdup(value); - - if (!quiet) - { - if (popt->title) - printf(_("Title is \"%s\".\n"), popt->title); - else - printf(_("Title is unset.\n")); - } } /* set HTML table tag options */ @@ -2457,14 +2410,6 @@ do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet) popt->topt.tableAttr = NULL; else popt->topt.tableAttr = pg_strdup(value); - - if (!quiet) - { - if (popt->topt.tableAttr) - printf(_("Table attribute is \"%s\".\n"), popt->topt.tableAttr); - else - printf(_("Table attributes unset.\n")); - } } /* toggle use of pager */ @@ -2481,15 +2426,6 @@ do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet) popt->topt.pager = 0; else popt->topt.pager = 1; - if (!quiet) - { - if (popt->topt.pager == 1) - puts(_("Pager is used for long output.")); - else if (popt->topt.pager == 2) - puts(_("Pager is always used.")); - else - puts(_("Pager usage is off.")); - } } /* disable "(x rows)" footer */ @@ -2499,13 +2435,6 @@ do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet) popt->topt.default_footer = ParseVariableBool(value); else popt->topt.default_footer = !popt->topt.default_footer; - if (!quiet) - { - if (popt->topt.default_footer) - puts(_("Default footer is on.")); - else - puts(_("Default footer is off.")); - } } /* set border style/width */ @@ -2513,9 +2442,167 @@ do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet) { if (value) popt->topt.columns = atoi(value); + } + else + { + psql_error("\\pset: unknown option: %s\n", param); + return false; + } + + if (!quiet) + printPsetInfo(param, &pset.popt); + + return true; +} + + +static bool +printPsetInfo(const char *param, struct printQueryOpt *popt) +{ + Assert(param != NULL); - if (!quiet) - printf(_("Target width is %d.\n"), popt->topt.columns); + /* show border style/width */ + if (strcmp(param, "border") == 0) + { + if (!popt->topt.border) + printf(_("Border style (%s) unset.\n"), param); + else + printf(_("Border style (%s) is %d.\n"), param, + popt->topt.border); + } + + /* show the target width for the wrapped format */ + else if (strcmp(param, "columns") == 0) + { + if (!popt->topt.columns) + printf(_("Target width (%s) unset.\n"), param); + else + printf(_("Target width (%s) is %d.\n"), param, + popt->topt.columns); + } + + /* show expanded/vertical mode */ + else if (strcmp(param, "x") == 0 || strcmp(param, "expanded") == 0 || strcmp(param, "vertical") == 0) + { + if (popt->topt.expanded == 1) + printf(_("Expanded display (%s) is on.\n"), param); + else if (popt->topt.expanded == 2) + printf(_("Expanded display (%s) is used automatically.\n"), param); + else + printf(_("Expanded display (%s) is off.\n"), param); + } + + /* show field separator for unaligned text */ + else if (strcmp(param, "fieldsep") == 0) + { + if (popt->topt.fieldSep.separator_zero) + printf(_("Field separator (%s) is zero byte.\n"), param); + else + printf(_("Field separator (%s) is \"%s\".\n"), param, + popt->topt.fieldSep.separator); + } + + else if (strcmp(param, "fieldsep_zero") == 0) + { + printf(_("Field separator (%s) is zero byte.\n"), param); + } + + /* show disable "(x rows)" footer */ + else if (strcmp(param, "footer") == 0) + { + if (popt->topt.default_footer) + printf(_("Default footer (%s) is on.\n"), param); + else + printf(_("Default footer (%s) is off."), param); + } + + /* show format */ + else if (strcmp(param, "format") == 0) + { + if (!popt->topt.format) + printf(_("Output format (%s) is aligned.\n"), param); + else + printf(_("Output format (%s) s %s.\n"), param, + _align2string(popt->topt.format)); + } + + /* show table line style */ + else if (strcmp(param, "linestyle") == 0) + { + printf(_("Line style (%s) is %s.\n"), param, + get_line_style(&popt->topt)->name); + } + + /* show null display */ + else if (strcmp(param, "null") == 0) + { + printf(_("Null display (%s) is \"%s\".\n"), param, + popt->nullPrint ? popt->nullPrint : ""); + } + + /* show locale-aware numeric output */ + else if (strcmp(param, "numericlocale") == 0) + { + if (popt->topt.numericLocale) + printf(_("Locale-adjusted numeric output (%s) is on.\n"), param); + else + printf(_("Locale-adjusted numeric output (%s) is off.\n"), param); + } + + /* show toggle use of pager */ + else if (strcmp(param, "pager") == 0) + { + if (popt->topt.pager == 1) + printf(_("Pager (%s) is used for long output.\n"), param); + else if (popt->topt.pager == 2) + printf(_("Pager (%s) is always used.\n"), param); + else + printf(_("Pager (%s) usage is off.\n"), param); + } + + /* show record separator for unaligned text */ + else if (strcmp(param, "recordsep") == 0) + { + if (popt->topt.recordSep.separator_zero) + printf(_("Record separator (%s) is zero byte.\n"), param); + else if (strcmp(popt->topt.recordSep.separator, "\n") == 0) + printf(_("Record separator (%s) is <newline>.\n"), param); + else + printf(_("Record separator (%s) is \"%s\".\n"), param, + popt->topt.recordSep.separator); + } + + else if (strcmp(param, "recordsep_zero") == 0) + { + printf(_("Record separator (%s) is zero byte.\n"), param); + } + + /* show HTML table tag options */ + else if (strcmp(param, "T") == 0 || strcmp(param, "tableattr") == 0) + { + if (popt->topt.tableAttr) + printf(_("Table attribute (%s) is \"%s\".\n"), param, + popt->topt.tableAttr); + else + printf(_("Table attributes (%s) unset.\n"), param); + } + + /* show title override */ + else if (strcmp(param, "title") == 0) + { + if (popt->title) + printf(_("Title (%s) is \"%s\".\n"), param, popt->title); + else + printf(_("Title (%s) unset.\n"), param); + } + + /* show toggle between full and tuples-only format */ + else if (strcmp(param, "t") == 0 || strcmp(param, "tuples_only") == 0) + { + if (popt->topt.tuples_only) + printf(_("Tuples only (%s) is on.\n"), param); + else + printf(_("Tuples only (%s) is off.\n"), param); } else @@ -2528,7 +2615,6 @@ do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet) } - #ifndef WIN32 #define DEFAULT_SHELL "/bin/sh" #else
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers