boost::locale::translate et std::locale::global
Bonjour,
je rencontre des problèmes dans l'internationalisation via boost::locale. Mon problème est plus exactement l'utilisation de std::locale::globale.
Dans une dll j'ai la classe suivante :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| class __DECORATION__ Core
{
public:
std::locale loc;
Core() : loc() {}
void test()
{
boost::locale::generator gen;
gen.add_messages_path("i18n");
gen.add_messages_domain("zh_CN");
loc = gen("zh_CN.UTF-8");
std::locale::global(loc);
std::string const text1 = boost::locale::translate("Tools").str(std::locale());
std::string const text2 = boost::locale::translate("Tools").str(loc);
}
}; |
Puis dans un exe, j'ai le code suivant :
Code:
1 2 3 4 5 6 7
| int main()
{
Core core;
core.test();
std::string const textA = boost::locale::translate("Tools").str(std::locale());
std::string const textB = boost::locale::translate("Tools").str(core.loc);
} |
Les chaines text1 et text2 sont bien traduites mais pas les chaines textA et textB.
La locale globale devrait être identique à core.loc, non ? Et core.loc embarque (il me semble) une facette spécifique à l'internationalisation (path et domain) définie par le boost::locale::generator, non ? Donc pourquoi textA n'est pas traduit comme l'est text1 ?
Ensuite comment se fait-il qu'en utilisant directement core.loc pour textB, la traduction ne se fait pas alors qu'elle se fait pour text2 ?
Merci.
Flo.