[GRASS-dev] error reporting
Michael Barton
michael.barton at asu.edu
Sun Sep 9 00:09:31 EDT 2007
I redid this last night to follow this model. It's in the cvs now.
Michael
On 9/7/07 1:30 PM, "Glynn Clements" <glynn at gclements.plus.com> wrote:
>
> Michael Barton wrote:
>
>>> If it's done here, each arg should probably be translated
>>> individually; the caller can always join any arguments which should be
>>> translated as a whole. Even then, there's no option to have a portion
>>> which doesn't get translated.
>>
>> Like this???
>>
>> proc Gm::errmsg { error args } {
>> # send error report and optional message (args) to tk_messageBox
>> set message ""
>> for arg in $args {
>>
>> if { $arg != "" } {
>> append message "$arg "
>> }
>> }
>>
>> append message ": "
>>
>> tk_messageBox -type ok -icon error -title [G_msg "Error"] \
>> -message "$message[G_msg $error]"
>> uplevel 1 return
>>
>> };
>
> I meant to pass each individual arg to G_msg then join the result,
> i.e. replace:
>
> if { $args != ""} {
> set message [G_msg [join $args]]
> append message ": "
> }
>
> with:
>
> if { $args != ""} {
> set trans {}
> foreach msg $args {
> lappend trans [G_msg $msg]
> }
> set message [G_msg [join $trans]]
> append message ": "
> }
>
>
>> You are right. A downside of enforcing translation within the function,
>> rather than relying on it to be done in the original script, is that the
>> whole thing gets translated. I'm not sure if this is really a problem with
>> short, optional error messages in reality.
>
> The problem occurs if the error message includes variable components,
> e.g. "unable to open $filename" or "error executing $prog".
>
> Only the fixed portions should be translated (otherwise the message
> catalogue would need an entry for every possible string), then the
> variable portions should be inserted afterwards.
>
> If the variable portions occur in the middle of the string, you would
> want something like:
>
> set template [G_msg {unable to open $filename for reading}]
> set message [subst -nobackslashes -nocommands $template]
>
> Actually, this could be done in the error handling procedure, using
> "uplevel" to allow "subst" to use variables from the caller.
>
> Ultimately, I still think that it's better to have the caller perform
> the translation. In C code, the _() macro is always applied to the
> literal string; we don't make G_fatal_error() call _().
>
> Apart from anything else, it makes it easier to identify strings which
> require translation ("grep G_msg").
__________________________________________
Michael Barton, Professor of Anthropology
Director of Graduate Studies
School of Human Evolution & Social Change
Center for Social Dynamics & Complexity
Arizona State University
phone: 480-965-6213
fax: 480-965-7671
www: http://www.public.asu.edu/~cmbarton
More information about the grass-dev
mailing list