
A. Dictionary source :
Currently, if I my understanding is correct, the boost::locale library
will
always assume that dictionary files are on the (standard?) filesystem.
I would be easy to fix.
Great!
But as small note, you will have to install dictionaries manually and not via generator interface. But rather via this interface: <http://cppcms.sourceforge.net/boost_locale/html/gnu__gettext_8hpp-source.html> I mean you'll need to initialize the messages info structure and provide a callback (that would be member of messages_info) boost::function<bool(std::string file_name,std::vector<char> &file)> custom_fs_reader; And then install the catalogs using: std::locale new_locale = std::locale(generated,create_messages_facet<char>(my_message_info)); I don't want to add this into boost::locale::generator, as I don't think this is generally correct thing to do (as it would require to implement much more complex path).
Agreed, I'm already on this path. (After having read your(?) answer on StackOverflow some months ago I banished wide strings and made all UTF-8 based)
Actually it was my question, but I fully agree with the answer :-) In fact, I did not really want to implement wide strings support for Boost.Locale, but I'm afraid that without it, Boost.Locale would not pass the review. Also for windows development using UTF-16 might be quite justified to simplify the interaction with Win32 API.
No! Human languages unlike programming are context dependent and ambiguous, same string may be translated into two different strings depending on context.
Small but clear example:
http://cppcms.sourceforge.net/boost_locale/html/tutorial.html#1f0e3dad999083...
I was thinking about more cultural/language based example where there is not only context that make the translation hard. For example some expressions that exists in some languages don't exists in others and just have equivalents that could be used in the given context.
Yes the example is not best.
So if "domain" are module names, how to differenciate two sentences that are the same in a language with two different contextes, but are not the same in an other language with the same different contextes?
I don't really understand the question. But maybe this would make it clear: When you translate a message it is uniquely defined by 4 parameters: - locale (for example "ru_RU") - domain (for example "excel") - context(for example "File Menu") - id(for example "Open...") So: cout << translate("File Menu","Open...") << translate("Internet Connection","Open...") << translate("Open...") << translate("File Menu","Close") << translate("Internet Connection","Close") << translate("Close") Require 6 different entries in the dictionary Artyom