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 :
Puis dans un exe, j'ai le code suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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); } };
Les chaines text1 et text2 sont bien traduites mais pas les chaines textA et textB.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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); }
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.
Partager