annotate mcabber/src/lang.c @ 28:0cd8025eebee

[/trunk] Changeset 44 by mikael * Some more fixes. * We can now build with GNU99 gcc extensions.
author mikael
date Mon, 28 Mar 2005 10:36:47 +0000
parents e88b15cbf2de
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1 #include <stdio.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
2 #include <stdlib.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
3 #include <unistd.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
4 #include <string.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
5 #include <ctype.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
6
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
7 #include "utils.h"
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
8
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
9 char Lang[100];
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
10
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
11 void lng_InitLanguage(void)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
12 {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
13 FILE *fp;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
14 memset(Lang, 0, 100);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
15 sprintf(Lang, "./lang/%s.txt", getenv("LANG"));
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
16 /* strcpy(Lang, "./lang/");
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
17 strcat(Lang, getenv("LANG"));
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
18 strcat(Lang, ".txt");
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
19 */
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
20 if ((fp = fopen(Lang, "r")) == NULL) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
21 /* reverting to default */
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
22 ut_WriteLog("Reverting language to default: POSIX\n");
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
23 strcpy(Lang, "./lang/POSIX.txt");
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
24 } else {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
25 fclose(fp);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
26 ut_WriteLog("Setting language to %s\n", getenv("LANG"));
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
27 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
28 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
29
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
30 char *i18n(char *text)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
31 {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
32 /* hack */
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
33 char *buf = (char *) malloc(1024);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
34 static char result[1024];
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
35 FILE *fp;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
36 char *line;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
37 char *value;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
38 int found = 0;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
39
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
40 memset(result, 0, 1024);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
41
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
42 if ((fp = fopen(Lang, "r")) != NULL) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
43 while ((fgets(buf, 1024, fp) != NULL) && (!found)) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
44 line = buf;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
45
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
46 while (isspace((int) *line))
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
47 line++;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
48
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
49 while ((strlen(line) > 0)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
50 && isspace((int) line[strlen(line) - 1]))
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
51 line[strlen(line) - 1] = '\0';
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
52
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
53 if ((*line == '\n') || (*line == '\0') || (*line == '#'))
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
54 continue;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
55
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
56 if ((strchr(line, '=') != NULL)) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
57 value = strchr(line, '=');
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
58 *value = '\0';
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
59 value++;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
60
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
61 while (isspace((int) *value))
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
62 value++;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
63
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
64 while ((strlen(line) > 0)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
65 && isspace((int) line[strlen(line) - 1]))
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
66 line[strlen(line) - 1] = '\0';
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
67
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
68 if (!strcasecmp(line, text)) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
69 strcpy(result, value);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
70 found = 1;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
71 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
72 continue;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
73 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
74 /* fprintf(stderr, "CFG: orphaned line \"%s\"\n", line); */
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
75 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
76 fclose(fp);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
77 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
78
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
79 if (!found) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
80 strcpy(result, text);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
81 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
82
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
83 free(buf);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
84 return result;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
85 }