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 : 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);
	}
};
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
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.