[
https://issues.apache.org/jira/browse/MATH-361?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12878938#action_12878938
]
Gilles commented on MATH-361:
-----------------------------
{quote}
There is no tool I know of that does the checks I would like to add.
{quote}
"cal10n" comes with JUnit tests (and a Maven plugin, which I couldn't make
work, probably because of my lack of knowledge...) that check the consistency
of the localization files.
{quote}
Throwing localization away (read with an external framework) when it consists
in one interface and one enumerated class is adding lots of complexity for a
basic feature (CM is a math library, localization is important I think but it
is not the core of the library and should not be over-engineered)
{quote}
Localization is not important for CM. [It might be for some users; it may also
be a nuisance for others (cf. one of the examples I gave before: some scientist
uses a non-English locale for a text processing application, but still expects
the CM error messages to be in English). Selecting a "framework" at runtime
allows the user to plug in a "no-op" library that won't do any localization.
Admittedly, the CM code will be slightly more complex but all in all, it is
just some 3 or 4 classes with less than a dozen lines!]
And, as you say in the next point: CM is a low-level component; but, IMO,
localization is a high-level feature.
In my view, implementing CM's own localization code _is_ over-engineering,
because the alternative of grabbing an off-the-shelf component like "cal10n" is
_zero_ work.
Also, localization is, obviously, the core of "cal10n" so that the designer may
already have thoroughly thought about the problem and come up with the most
appropriate solution...
Finally, it is not because something is easy to do, that you should do it:
laziness is one of the virtues of programming ;-) in that it leads to
modularization and code re-use.
{quote}
Dependencies are a good thing for high level application or libraries and are a
very bad thing for low level components [...]
{quote}
Why?
{quote}
I don't agree we need a pluggable localization framework, we need simple
localization
{quote}
I warned before that it could be dangerous to assume what users will need, or
not, in the future...
{quote}
[...] cal10n does implement its own logic for finding resources and its own
parser for properties file [...]
{quote}
You caught me here... Although maybe not: what if he did this with good reason
(efficiency)? The guy is the author of Log4J and its successors. Theses tools
came when something similar already existed but (from what I've read) the new
design solved a few annoying things in the previous solutions.
All that being said, I again stress that localization is not my main point
here; then let's go back to "error handling" which, indeed, I want to be
_separate_ from the "localization" issue:
{quote}
trying to set up some more meaningful exception [...] is a completely separate
problem.
{quote}
To restate my previous question (about replacing literal strings with an
{{enum}}), what will be the programming interface for CM developers? Something
like this
{code}
throw new
MathRuntime.createIllegalArgumentException(LocalizedMessages.OUT_OF_RANGE, x,
xMin, xMax);
{code}
or something like that
{code}
throw new OutOfRangeException(x, xMin, XMax);
{code}
Do we agree on the second form? I.e.
* a stateful exception class (with accessors to the instance variables)
* inheriting (in this case) from {{IllegalArgumentException}}
* where all references to localization are completely encapsulated
Is so, then the rest of the discussion (on the best way to provide the
localization feature) is not high priority (and can be postponed), and I
absolutely don't mind that you implement your proposal in the meantime.
To summarize, my request would become that we implement a set of exception
classes (in a new "exception" package) from which we can pick appropriately and
use as easily as in the second example above.
> Localization and Error Handling
> -------------------------------
>
> Key: MATH-361
> URL: https://issues.apache.org/jira/browse/MATH-361
> Project: Commons Math
> Issue Type: Improvement
> Affects Versions: 2.1
> Reporter: Gilles
> Priority: Minor
> Attachments: l10n.tar.gz, res.tar.gz
>
>
> This proposal aims at easing the handling of error during algorithms
> development, and also enhancing the flexibility of the error reporting
> (provide meaningful exception classes and run-time selection of the
> localization formatting).
> More details at
> [http://www.mail-archive.com/[email protected]/msg14570.html]
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.