|
Boost : |
Subject: Re: [boost] [locale] Formal review of Boost.Locale library starts tomorrow
From: Artyom (artyomtnk_at_[hidden])
Date: 2011-04-16 15:53:57
> From: "Jeffrey Lee Hellrung, Jr." <jeffrey.hellrung_at_[hidden]>
> > > Could the error behavior be specified in the call to
> > boost::locale::format?
> > >
> >
> > I explain, the error of for example missing parameter is almost never
> > a error, consider following:
> >
> > format(translate("Passed {1} day", "Passed {1} days",n)) % n;
> >
> > Now in Hebrew it would have 3 plural forms: single, dual and plural
> >
> > ×¢×ר ××× {1}â /passed {1} day
> > ×¢××¨× ×××××× /passed two-days when "two-days" is a single world - no
> > parameter used
> > ×¢××¨× {1} ×××× / passed {1} days
> >
> > So missing parameter is ok in localization context, while boost::format
> > throws
> > unless you do something specific.
> >
>
> So that's the specific case of a missing parameter error, but is this the
> only kind of error one can make with boost::locale::format? If not, it's
> not really a convincing argument that all users all the time would like
> boost::locale::format to ignore all errors. And you do qualify that this
> particular error is "almost never a error", leading me to believe that
> sometimes it really is an error you care about.
>
I'll explain, Boost.Locale format may throw if for example
io-operations fail or streaming object to file causes an exception
or bad_alloc is thrown.
However it never throws in case of syntax error, missing
parameter or extra parameter.
This point was also told before and I'll document it more explicitly.
I explain the rationale:
Usually boost.format is going to be used as:
format(translate("something")) % a % b % c
Now, how translation process goes. Translator
takes a dictionary, defines the locale and loads
it.
Translator is not a programmer, but he looks on
output.
So I can expect that it would accidentally
screw the format by writing:
"{1,numb}" instead of {1,num} or {1,number}
If boost.format throws it may accidentally stop
the program and both translator and programmer
would give very hard times to understand what
is going.
So by no means the formatting string should cause
an exception, it may cause invalid output that
the translator would see and fix but not abort
the entire program.
Best,
Artyom
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk