00001
00002
00003
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
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
00045 macroCallLength = (int)strlen(UPDATESCILABHELPMACRO);
00046 C2F(syncexec)(UPDATESCILABHELPMACRO,¯oCallLength,&ierr,&seq, macroCallLength);
00047 }
00048
00049
00050 savelanguagepref();
00051
00052
00053 LoadHashTablesLocalization(lang);
00054
00055 if (updateMenus)
00056 {
00057
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)
00213 {
00214 correctlanguage=GetLanguageFromAlias("en");
00215 }
00216 return correctlanguage;
00217 }
00218