Set language when not building localization. Disable external_objects_java
[scilab.git] / scilab / modules / localization / src / c / InitializeLocalization.c
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2008 - INRIA - Sylvestre LEDRU
4  *
5  * This file must be used under the terms of the CeCILL.
6  * This source file is licensed as described in the file COPYING, which
7  * you should have received as part of this distribution.  The terms
8  * are also available at
9  * http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
10  *
11  */
12 #include <stdio.h>
13 #include <string.h>
14 #include <stdlib.h>
15 #include "machine.h"
16 #ifndef _MSC_VER
17 #ifdef HAVE_LIBINTL_H
18 #include <libintl.h>
19 #ifdef HAVE_LOCALE_H
20 #include <locale.h>
21 #else
22 #error "Cannot find locale.h despite that libintl.h is available"
23 #endif
24 #endif
25 #else
26 #include <libintl.h>
27 #include <locale.h>
28 #endif
29
30 #include "MALLOC.h"
31 #include "InitializeLocalization.h"
32 #include "localization.h"
33 #include "setgetSCIpath.h"
34 #include "inisci-c.h"
35 #include "scilabDefaults.h"
36 #include "setgetlanguage.h"
37 #include "isdir.h"
38 #ifdef _MSC_VER
39 #include "strdup_windows.h"
40 #include "LanguagePreferences_Windows.h"
41 #endif
42
43 /*--------------------------------------------------------------------------*/
44
45 BOOL InitializeLocalization(void)
46 {
47 #ifdef HAVE_LIBINTL_H
48
49     char *SCIpath = getSCIpath();
50     char *pathLocales = NULL, *previousPathLocales = NULL;
51     char *ret = NULL;
52
53     /* set directory containing message catalogs */
54     pathLocales = (char *)MALLOC(sizeof(char) * (strlen(SCIpath) + strlen(PATHLOCALIZATIONFILE) + 1));
55
56     strcpy(pathLocales, SCIpath);
57     strcat(pathLocales, PATHLOCALIZATIONFILE);
58     if (bindtextdomain(NAMELOCALIZATIONDOMAIN, pathLocales) == NULL || !isdir(pathLocales))
59     {
60         /* source tree and classic build */
61         previousPathLocales = strdup(pathLocales);
62         if (pathLocales)
63         {
64             FREE(pathLocales);
65             pathLocales = NULL;
66         }
67
68         pathLocales = (char *)MALLOC(sizeof(char) * (strlen(SCIpath) + strlen("/..") + strlen(PATHLOCALIZATIONFILE) + 1));
69         strcpy(pathLocales, SCIpath);
70         strcat(pathLocales, "/..");
71         strcat(pathLocales, PATHLOCALIZATIONFILE);
72         if (bindtextdomain(NAMELOCALIZATIONDOMAIN, pathLocales) == NULL || !isdir(pathLocales))
73         {
74             /* when it is installed on the system for example /usr/share/locale/ */
75             fprintf(stderr, "Warning: Localization issue: Error while binding the domain from %s or %s: Switch to the default language (English).\n", pathLocales, previousPathLocales);
76
77             // Set default behaviour
78             textdomain(NAMELOCALIZATIONDOMAIN);
79             bind_textdomain_codeset (NAMELOCALIZATIONDOMAIN, "UTF-8");
80 #ifndef _MSC_VER
81             setlanguage("");
82 #else
83             /* We look if registry value LANGUAGE exists */
84             /* If not exists the "" means that we will try to use the language of the system.*/
85             {
86                 char *loadLanguage = getLanguagePreferences();
87                 setlanguage(loadLanguage);
88                 if (loadLanguage)
89                 {
90                     FREE(loadLanguage);
91                     loadLanguage = NULL;
92                 }
93             }
94 #endif
95
96             if (previousPathLocales)
97             {
98                 FREE(previousPathLocales);
99                 previousPathLocales = NULL;
100             }
101             if (pathLocales)
102             {
103                 FREE(pathLocales);
104                 pathLocales = NULL;
105             }
106             if (SCIpath)
107             {
108                 FREE(SCIpath);
109                 SCIpath = NULL;
110             }
111             return FALSE;
112         }
113         if (previousPathLocales)
114         {
115             FREE(previousPathLocales);
116             previousPathLocales = NULL;
117         }
118         if (pathLocales)
119         {
120             FREE(pathLocales);
121             pathLocales = NULL;
122         }
123         if (SCIpath)
124         {
125             FREE(SCIpath);
126             SCIpath = NULL;
127         }
128
129     }
130
131     /* set domain for future gettext() calls */
132     ret = textdomain(NAMELOCALIZATIONDOMAIN);
133     if (ret == NULL)
134     {
135         fprintf(stderr, "Localization: Error while declaring the text domain %s\n", NAMELOCALIZATIONDOMAIN);
136         FREE(pathLocales);
137         return FALSE;
138     }
139     bind_textdomain_codeset (NAMELOCALIZATIONDOMAIN, "UTF-8"); /*such that gettext and dgettext return UTF8 string*/
140 #ifndef _MSC_VER
141     /* Here, the "" means that we will try to use the language of the system
142      * first. If it doesn't work, we switch back to default (English) */
143     setlanguage("");
144 #else
145     /* We look if registry value LANGUAGE exists */
146     /* If not exists the "" means that we will try to use the language of the system.*/
147     {
148         char *loadLanguage = getLanguagePreferences();
149         setlanguage(loadLanguage);
150         if (loadLanguage)
151         {
152             FREE(loadLanguage);
153             loadLanguage = NULL;
154         }
155     }
156 #endif
157
158     if (previousPathLocales)
159     {
160         FREE(previousPathLocales);
161     }
162     if (pathLocales)
163     {
164         FREE(pathLocales);
165     }
166     if (SCIpath)
167     {
168         FREE(SCIpath);
169     }
170
171     return TRUE;
172 #else
173     fprintf(stderr, "Localization: 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");
174     return FALSE;
175 #endif
176 }
177 /*--------------------------------------------------------------------------*/
178