Boost logo

Boost :

Subject: [boost] [locale] Review of the proposed Boost.Locale library
From: Matus Chochlik (chochlik_at_[hidden])
Date: 2011-04-18 09:57:07


Hi all,

this is my review of the proposed Boost.Locale library:

DISCLAIMER:
I'm pretty familiar with the issues of application localization
for the Central/East European region mainly
with Slavic languages, mostly those using Latin characters,
(Slovak, Czech, Polish), also a little bit with languages
using some variant of Cyrillic characters (Russian, Bulgarian)
and with West European languages like German,
i.e. languages having somewhat different capitalization
and collation rules than English has, some of which have
also multiple plural forms in certain inflection cases.
But I have no experience whatsoever with localization
in other environments: Middle-East, Asian, etc. so I might
have missed some important issues arising in such cases.

- Please explicitly state in your review whether the library should be
accepted.

Yes, it should be accepted.

The general review checklist:
- What is your evaluation of the design?

Straightforward and easy to use, similar to other
localization libraries I've worked with.

- What is your evaluation of the implementation?

Since most of the problems I've spotted (and many more)
were already addressed in Steven's very thorough review
of the code and in other reviews I'm not going to reiterate them.

AFAIK the Boost Coding Guidelines require max 80
characters per line in the source code. The sources
of Boost.Locale do not follow this guideline which
makes them slightly less readable, one needs
to scroll a lot horizontally. Otherwise I leave the quality
of the implementation to be judged by more competent
people on this list.

Concerning the external dependencies, ICU, tools from
GNU gettext (msgfmt, ...), etc.:
I don't think that it would be a good idea to re-implement
them. A lot of effort has been put into their development,
they are well supported, maintained and available
for every major platform so I don't see any advantage in
reinventing the wheel.

- What is your evaluation of the documentation?

The documentation is readable and clear to someone
familiar with l10n/i18n however things like collation,
capitalization, case folding, etc. should be better
explained for users who are not familiar with them.
The previous/next page links are missing which is
little inconvenient.

In the Message Formatting/Message Translation section
there is a typo:
------------------------------------------------------------------------------
   std::cout << boost::locale::tanslate("Hello World!") << std::endl;
------------------------------------------------------------------------------

In the examples and code snippets in the docs I think
that "using namespace std;" should be removed
and instead of
"using namespace boost::locale;"

there should be something like
"namespace bl = boost::locale;"

which would make much clearer which parts of the sample code
are referring to Boost.Locale's code and which to std library;

Also (but I might be mistaken here since I'm not a native
German speaker) the example in the "Conversions"
section names a variable 'gruben' (this variable stores
the word "grüßen") a German would probably
call this variable 'grussen' since 'ß' != 'b'.

- What is your evaluation of the potential usefulness of the library?

This library is very useful for people working on portable
applications that are to be localized for non-English
environments.

- Did you try to use the library? With what compiler? Did you have any
problems?

Yes (I built the library),
- on Debian Linux (64bit) with ICU 4.6
  - using cmake
    - with GCC 4.6.0 non-C++0x mode: no problems
    - with GCC 4.6.0 C++0x mode: auto_ptr - related warnings
  - using bjam (Boost 1.46.1)
    - with GCC 4.6.0 non-C++0x mode: no problems
- on Windows Vista Basic (32-bit) + cygwin + ICU 4.5
  - using bjam (Boost 1.46.1)
    - with GCC 4.3.4: no problems
 - on Windows Vista (32-bit) + ICU 4.6 (bin package for Win32)
  - using bjam (Boost 1.46.1)
    - with MSVC 9: the library built, but for some reason
      bjam didn't use ICU even with -sICU_PATH specified,
      and I didn't have the time to investigate why.

Also I've built and linked the examples and several
small apps of my own trying out some features
of the library (message translation, collation),
on Debian 64-bit + GCC.

- How much effort did you put into your evaluation? A glance? A quick
reading? In-depth study?

I've read the documentation, some parts of the discussion
and some of the other reviews on this list, built the library
and examples (see above) + written several toy
applications, I've had only a quick glance at the sources.
Put together probably somewhere around 12 hours.

- Are you knowledgeable about the problem domain?

I've worked on several projects with some kind of l10n/i18n
using several different utilities (GNU gettext, wxWidgets,
an in-house solution). But I certainly don't consider
myself an expert on localization for the reasons stated above.

Best regards,

Matus Chochlik


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk