Обсуждение: Rough draft: easier translation of psql help
One of the main pains in translating PostgreSQL messages is translating
the SQL syntax synopses in psql. Things like:
msgid ""
"[ WITH [ RECURSIVE ] with_query [, ...] ]\n"
"SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ]\n"
" * | expression [ [ AS ] output_name ] [, ...]\n"
" INTO [ TEMPORARY | TEMP ] [ TABLE ] new_table\n"
" [ FROM from_item [, ...] ]\n"
" [ WHERE condition ]\n"
" [ GROUP BY expression [, ...] ]\n"
" [ HAVING condition [, ...] ]\n"
" [ WINDOW window_name AS ( window_definition ) [, ...] ]\n"
" [ { UNION | INTERSECT | EXCEPT } [ ALL ] select ]\n"
" [ ORDER BY expression [ ASC | DESC | USING operator ] [ NULLS
{ FIRST | "
"LAST } ] [, ...] ]\n"
" [ LIMIT { count | ALL } ]\n"
" [ OFFSET start [ ROW | ROWS ] ]\n"
" [ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ]\n"
" [ FOR { UPDATE | SHARE } [ OF table_name [, ...] ] [ NOWAIT ]
[...] ]"
Especially when small things are changed from release to release,
figuring this out on the part of the translator is cumbersome and
error-prone.
Instead of translating the whole string, that is (picking a shorter
example)
N_("ALTER TEXT SEARCH PARSER name RENAME TO newname")
we really only want to translate the placeholders, so it could look like
this:
appendPQExpBuffer(buf,
"ALTER TEXT SEARCH PARSER %s RENAME TO %s",
_("name"),
_("newname"));
This is what the attached patch produces.
Comments?
Вложения
Peter Eisentraut <peter_e@gmx.net> writes:
> Instead of translating the whole string, that is (picking a shorter
> example)
> N_("ALTER TEXT SEARCH PARSER name RENAME TO newname")
> we really only want to translate the placeholders, so it could look like
> this:
> appendPQExpBuffer(buf,
> "ALTER TEXT SEARCH PARSER %s RENAME TO %s",
> _("name"),
> _("newname"));
> This is what the attached patch produces.
Seems like a reasonable idea.
> Comments?
I'm not sure what the "const" here is good for, and I can think of
some compilers that are likely to get confused too:
> + void (* const syntaxfunc)(PQExpBuffer); /* function that prints the syntax associated with it */
Also, are you sure that code to identify the placeholders is robust?
Should you be defending against '%' in the syntax string?
Will the NLS infrastructure remember to build sql_help.c before
looking for strings?
regards, tom lane
Peter Eisentraut wrote:
> Instead of translating the whole string, that is (picking a shorter
> example)
>
> N_("ALTER TEXT SEARCH PARSER name RENAME TO newname")
>
> we really only want to translate the placeholders, so it could look like
> this:
>
> appendPQExpBuffer(buf,
> "ALTER TEXT SEARCH PARSER %s RENAME TO %s",
> _("name"),
> _("newname"));
+1000
Should create_help.pl be run on "make dist"?
--
Alvaro Herrera http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support
Peter, > This is what the attached patch produces. > > Comments? This is how other project handle transation of these kinds of strings. -- Josh Berkus PostgreSQL Experts Inc. www.pgexperts.com
On Sun, 2009-09-13 at 23:46 -0400, Alvaro Herrera wrote: > Should create_help.pl be run on "make dist"? It is.