[
https://issues.apache.org/jira/browse/MATH-361?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12878427#action_12878427
]
Luc Maisonobe commented on MATH-361:
------------------------------------
I finally found some time to look at this issue and the proposal.
I agree with the problems and not with the solution. I don't like adding a
dependency only for the sake of development ease and NOT for users. End users
will not see any improvement with this and they will have to manage yet another
dependency which is not widespread and on which we have no control. Adding
also a complex management to allow working without the dependency also misses
the point I tried to make in the previous discussions: it removes the
dependency but removes the localization entirely!
I tried another approach on last three days. My proposal is simply to address
the main problems with our current awkward implementation but without adding
any dependencies. It is simply a matter of adding one interface with one main
implementation (and another tiny dummy implementation for some compatibility
purposes and to add new exception constructors.
The interface is called Localizable and declares two methods getSourceString()
and getLocalizedString(Locale). A new enum called LocalizedMessages implements
the interface and all its constants (249 so far) provide one message format,
and mainly replaces the current MessageFormat class. The localization are
loaded from a properties file. In the commons-math code, we will use only the
enum constants, so there will not be any literal string spread throughout the
library. In the enum class, there will be the default english format, this is a
very important point as it allows to provide a formatted and understandable
default message even if a locale is not supported or if the properties file for
the locale is incomplete. I don't think cal10n does this. The properties file
for a locale does not contain the english message, it uses the name of the
constant as the key, so their is absolutely no duplication of any string
literal.
The exceptions can be built using an enum where they used to have a pattern
string. since the enum implements Localizable, the exception message can be
built both using getSourceString without localization or usgin
getLocalizedString(Locale) in any Locale (not only the default one). The
existing constructors are preserved (but deprecated). This is very important
for compatibility purposes because some of our exceptions are really intended
to be extended by users since this is the way they can generate errors in the
callback objects they implement themselves and provide to the library (ODE
problems, functions to solve, ...). Many users WILL have extended these
exception and used the only constructors we provided with String parameters. In
this case, a dummy implementation of the interface is also provided to still
get meaningful messages. As an added benefit, users will be able to also
localize their own messages if they want, they simply have to provide their own
implementation of the interface (hence we can separate several sets of
constants, as the commons-math enums will not clash with the users enums).
It is quite easy to switch progressively from the current implementation to the
one I propose. I also think we could have some very simple tools to check our
properties files are complete and we have no unused enum constants. Since we
use standard properties files and not a dedicated parser (which is what cal10n
uses, with some parsing bugs on single quotes I think), it will later be
possible to go to some more adequate tooling on the localization process (at
development time) by using for example the xliff oasis standard that allow
translators to use their own tools (including Machine Translation or Computer
Aided Translation) and create java properties files (their are some free tools
to transform xliff to standard java properties files).
As the changes in the commons-math code are really straightforward and can be
automatized, I can handle the transition of ALL existing messages.
> 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.