00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00031 #include <global.h>
00032
00034 const char *language_codes[] = {
00035 "en",
00036 "fr",
00037 "nl",
00038 "it",
00039 "de"
00040 };
00041
00043 const char *language_names[] = {
00044 "English",
00045 "Français",
00046 "Nederlands",
00047 "Italiano",
00048 "Deutsch"
00049 };
00051 const char *i18n_strings[NUM_LANGUAGES][NUM_I18N_STRINGS];
00052
00059 int get_language(object *op) {
00060 if (!op->contr)
00061 return 0;
00062 if (op->contr->language < 0 || op->contr->language >= NUM_LANGUAGES)
00063 return 0;
00064 return op->contr->language;
00065 }
00066
00073 const char *i18n_translate(int language, int id) {
00074 if (language >= NUM_LANGUAGES)
00075 return NULL;
00076 else if (id >= NUM_I18N_STRINGS)
00077 return NULL;
00078
00079 if (i18n_strings[language][id] == NULL)
00080 return i18n_strings[0][id];
00081 else
00082 return i18n_strings[language][id];
00083 }
00084
00093 static void convert_newline(char *line) {
00094 char *next;
00095 char buf[MAX_BUF];
00096
00097 while ((next = strstr(line, "\\n")) != NULL) {
00098 *next = '\n';
00099 *(next+1) = '\0';
00100 snprintf(buf, MAX_BUF, "%s%s", line, next+2);
00101 strcpy(line, buf);
00102 }
00103 }
00104
00108 void i18n_init(void) {
00109 char filename[MAX_BUF], line[HUGE_BUF];
00110 int i, entry;
00111 FILE *fp;
00112 char *token;
00113 int counter;
00114 char *buffer;
00115
00116 for (i = 0; i < NUM_LANGUAGES; i++) {
00117 snprintf(filename, sizeof(filename), "%s/i18n/messages.%s", settings.datadir, language_codes[i]);
00118 if ((fp = fopen(filename, "r")) == NULL) {
00119 LOG(llevError, "Cannot open i18n file %s: %s\n", filename, strerror_local(errno, line, sizeof(line)));
00120 if (i == 0)
00121 exit(1);
00122 } else {
00123 counter = 0;
00124 while (fgets(line, MAX_BUF, fp)) {
00125 if (strstr(line, "#") != line) {
00126 line[strlen(line)-1] = '\0';
00127 token = strtok(line, "|");
00128 entry = atoi(token);
00129 token = strtok(NULL, "|");
00130 buffer = malloc(sizeof(char)*(strlen(token)+1));
00131 strcpy(buffer, token);
00132 convert_newline(buffer);
00133 i18n_strings[i][entry] = buffer;
00134 }
00135 counter++;
00136 }
00137 LOG(llevDebug, "Read %i strings for language: %s\n", counter, language_codes[i]);
00138 fclose(fp);
00139 }
00140 }
00141 }