d0a7c26b0d5fb9e5b7c6e76f09506a867a5d98e3
[scilab.git] / scilab / modules / localization / src / c / InitializeLocalization.c
1 /** 
2 * INRIA 2007 
3 * Rewrite using gettext by Sylvestre Ledru <sylvestre.ledru@inria.fr>
4 */
5 #include <string.h>
6 #include <stdlib.h>
7 #include "MALLOC.h"
8 #include "InitializeLocalization.h"
9 #include "localization.h"
10 #include "setgetSCIpath.h"
11 #include "inisci-c.h"
12 #include "machine.h"
13 #include "scilabDefaults.h"
14 /*-----------------------------------------------------------------------------------*/ 
15
16 /**
17  * Export the variable LC_ALL to the system
18  *
19  * @param locale the locale (ex : fr_FR or en_US)
20  */
21 static void putEnvLC_ALL(char *locale){
22
23         char *localeDeclared=NULL;      
24
25         localeDeclared=(char*)MALLOC(sizeof(char)*strlen(EXPORTENVLOCALE)+ strlen("=")+ strlen(locale)+1);
26         strcat(localeDeclared,EXPORTENVLOCALE);
27         strcat(localeDeclared,"=");
28         strcat(localeDeclared,locale);
29         /* It will put in the env something like LC_ALL=fr_FR */
30
31         if (putenv (localeDeclared)){
32                 fprintf(stderr,"Failed to declare the system variable LC_ALL\n");
33         }
34         FREE(localeDeclared);
35 }
36
37
38 BOOL InitializeLocalization(void)
39 {
40 #ifdef HAVE_LIBINTL_H
41
42         char *pathLocales=getSCIpath();
43
44         char *ret=NULL;
45         ret=setlocale(LC_ALL,"");
46     if (ret==NULL){
47                 fprintf(stderr, "I18N: Doesn't support your locale.\n" );
48                 return FALSE;
49         }
50         putEnvLC_ALL(ret);
51
52         strcat(pathLocales, PATHLOCALIZATIONFILE);
53
54         if (bindtextdomain(NAMELOCALIZATIONDOMAIN,pathLocales)==NULL){
55                 fprintf(stderr, "Error while binding the domain\n");
56                 return FALSE;
57         }
58
59         if (textdomain(NAMELOCALIZATIONDOMAIN)==NULL){
60                 fprintf(stderr, "Error while declaring the text domain\n");
61                 return FALSE;
62         }
63
64         return TRUE;
65 #else
66         fprintf(stderr, "setlocale didn't exist on the computer used to compile Scilab ! This is abnormal ! No localization will be working for this distribution of Scilab.\n");
67         return FALSE;
68 #endif
69 }
70 /*-----------------------------------------------------------------------------------*/ 
71