setgetlanguage.c

Go to the documentation of this file.
00001 /*-----------------------------------------------------------------------------------*/
00002 /* INRIA 2007 */
00003 /* Allan CORNET */
00004 /*-----------------------------------------------------------------------------------*/ 
00005 #include <string.h>
00006 #include <stdlib.h>
00007 #include "setgetlanguage.h"
00008 #include "MALLOC.h"
00009 #include "tableslanguages.h"
00010 #include "loadsavelanguage.h"
00011 #include "loadhashtableslocalization.h"
00012 /*-----------------------------------------------------------------------------------*/ 
00013 static char CURRENTLANGUAGESTRING[LengthAlphacode]=SCILABDEFAULTLANGUAGE;
00014 static int  CURRENTLANGUAGECODE=SCILABDEFAULTLANGUAGECODE;
00015 /*-----------------------------------------------------------------------------------*/ 
00016 static BOOL LanguageIsOK(char *lang);
00017 static int FindLanguageCode(char *lang);
00018 static BOOL setlanguagecode(char *lang);
00019 static char *FindAlias(char *lang);
00020 static char *GetLanguageFromAlias(char *langAlias);
00021 /*-----------------------------------------------------------------------------------*/ 
00022 extern int C2F(syncexec)(char *str, int *ns, int *ierr, int *seq, long int str_len);
00023 /*-----------------------------------------------------------------------------------*/ 
00024 BOOL setlanguage(char *lang,BOOL updateHelpIndex, BOOL updateMenus)
00025 {
00026         BOOL bOK=FALSE;
00027         if (lang)
00028         {
00029                 if ( LanguageIsOK(lang) )
00030                 {
00031                         if (needtochangelanguage(lang))
00032                         {
00033                                 /* change language */
00034                                 strcpy(CURRENTLANGUAGESTRING,lang);
00035                                 setlanguagecode(lang);
00036 
00037                                 if (updateHelpIndex)
00038                                 {
00039                                         #define UPDATESCILABHELPMACRO "try update_scilab_help();catch end;" 
00040                                         integer ierr ;
00041                                         integer seq = 1 ;
00042                                         int macroCallLength=0;
00043 
00044                                         /* update help index */
00045                                         macroCallLength = (int)strlen(UPDATESCILABHELPMACRO);
00046                                         C2F(syncexec)(UPDATESCILABHELPMACRO,&macroCallLength,&ierr,&seq, macroCallLength);
00047                                 }
00048 
00049                                 /* save language pref. */
00050                                 savelanguagepref();
00051 
00052                                 /* update hash tables messages , errors , menus */
00053                                 LoadHashTablesLocalization(lang);
00054 
00055                                 if (updateMenus)
00056                                 {
00057                                         /* changes menus : to do after */
00058                                 }
00059                                 bOK=TRUE;
00060                         }
00061                 }
00062         }
00063         return bOK;
00064 }
00065 /*-----------------------------------------------------------------------------------*/ 
00066 char *getlanguage(void)
00067 {
00068         char *RetLanguage=NULL;
00069 
00070         RetLanguage=(char*)MALLOC(sizeof(char)*(strlen(CURRENTLANGUAGESTRING)+1));
00071         strcpy(RetLanguage,CURRENTLANGUAGESTRING);
00072 
00073         return RetLanguage;
00074 }
00075 /*-----------------------------------------------------------------------------------*/ 
00076 int getcurrentlanguagecode(void)
00077 {
00078         return CURRENTLANGUAGECODE;
00079 }
00080 /*-----------------------------------------------------------------------------------*/ 
00081 char *getlanguagefromcode(int code)
00082 {
00083         char *RetLanguage=NULL;
00084         int i=0;
00085 
00086         for (i=0;i<NumberLanguages;i++)
00087         {
00088                 if (LANGUAGE_COUNTRY_TAB[i].code == code)
00089                 {
00090                         RetLanguage=(char*)MALLOC(sizeof(char)*(strlen(LANGUAGE_COUNTRY_TAB[i].alphacode)+1));
00091                         strcpy(RetLanguage,LANGUAGE_COUNTRY_TAB[i].alphacode);
00092                         return RetLanguage;
00093                 }
00094         }
00095         return RetLanguage;
00096 }
00097 /*-----------------------------------------------------------------------------------*/ 
00098 int getcodefromlanguage(char *language)
00099 {
00100         return FindLanguageCode(language);
00101 }
00102 /*-----------------------------------------------------------------------------------*/ 
00103 static BOOL LanguageIsOK(char *lang)
00104 {
00105         BOOL bOK=FALSE;
00106         int i=0;
00107 
00108         for (i=0;i<NumberLanguages;i++)
00109         {
00110                 if (strcmp(lang,LANGUAGE_COUNTRY_TAB[i].alphacode)==0)
00111                 {
00112                         bOK=TRUE;
00113                         return bOK;
00114                 }
00115         }
00116         return bOK;
00117 }
00118 /*-----------------------------------------------------------------------------------*/ 
00119 static int FindLanguageCode(char *lang)
00120 {
00121         int Code=-1;
00122         int i=0;
00123 
00124         for (i=0;i<NumberLanguages;i++)
00125         {
00126                 if (strcmp(lang,LANGUAGE_COUNTRY_TAB[i].alphacode)==0)
00127                 {
00128                         Code=LANGUAGE_COUNTRY_TAB[i].code;
00129                         return Code;
00130                 }
00131         }
00132         return Code;
00133 }
00134 /*-----------------------------------------------------------------------------------*/ 
00135 static BOOL setlanguagecode(char *lang)
00136 {
00137         BOOL bOK=FALSE;
00138         int tmpCode=FindLanguageCode(lang);
00139         
00140         if (tmpCode>0) 
00141         {
00142                 CURRENTLANGUAGECODE=tmpCode;
00143                 bOK=TRUE;
00144         }
00145         return bOK;
00146 }
00147 /*-----------------------------------------------------------------------------------*/ 
00148 static char *FindAlias(char *lang)
00149 {
00150         char *RetAlias=NULL;
00151         int i=0;
00152         for(i=0;i<NumberLanguagesAlias;i++)
00153         {
00154                 if (strcmp(LANGUAGE_LOCALE_ALIAS[i].alphacode,lang)==0)
00155                 {
00156                         RetAlias=(char*)MALLOC(sizeof(char)*(strlen(LANGUAGE_LOCALE_ALIAS[i].alias)+1));
00157                         strcpy(RetAlias,LANGUAGE_LOCALE_ALIAS[i].alias);
00158                         return RetAlias;
00159                 }
00160         }
00161         return RetAlias;
00162 }
00163 /*-----------------------------------------------------------------------------------*/ 
00164 static char *GetLanguageFromAlias(char *langAlias)
00165 {
00166         char *RetLanguage=NULL;
00167         int i=0;
00168         for(i=0;i<NumberLanguagesAlias;i++)
00169         {
00170                 if (strcmp(LANGUAGE_LOCALE_ALIAS[i].alias,langAlias)==0)
00171                 {
00172                         RetLanguage=(char*)MALLOC(sizeof(char)*(strlen(LANGUAGE_LOCALE_ALIAS[i].alphacode)+1));
00173                         strcpy(RetLanguage,LANGUAGE_LOCALE_ALIAS[i].alphacode);
00174                         return RetLanguage;
00175                 }
00176         }
00177         return RetLanguage;
00178 }
00179 /*-----------------------------------------------------------------------------------*/ 
00180 char *getlanguagealias(void)
00181 {
00182         return FindAlias(CURRENTLANGUAGESTRING);
00183 }
00184 /*-----------------------------------------------------------------------------------*/ 
00185 int comparelanguages(char *language1,char *language2)
00186 {
00187         return strcmp(language1,language2);
00188 }
00189 /*-----------------------------------------------------------------------------------*/ 
00190 BOOL needtochangelanguage(char *language)
00191 {
00192         BOOL bOK=FALSE;
00193         char *currentlanguage=NULL;
00194 
00195         currentlanguage=getlanguage();
00196 
00197         if (comparelanguages(language,currentlanguage)) bOK=TRUE;
00198 
00199         if (currentlanguage) {FREE(currentlanguage);currentlanguage=NULL;}
00200 
00201         return bOK;
00202 }
00203 /*-----------------------------------------------------------------------------------*/ 
00204 char *convertlanguagealias(char *strlanguage)
00205 {
00206         char *correctlanguage=NULL;
00207 
00208         if (strlen(strlanguage)==2)
00209         {
00210                 correctlanguage=GetLanguageFromAlias(strlanguage);
00211         }
00212         else if (strcmp(strlanguage,"eng")==0) /* compatibility previous scilab */
00213         {
00214                 correctlanguage=GetLanguageFromAlias("en");
00215         }
00216         return correctlanguage;
00217 }
00218 /*-----------------------------------------------------------------------------------*/ 

Generated on Sun Mar 4 15:03:58 2007 for Scilab [trunk] by  doxygen 1.5.1