X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=lang.c;h=e50e752741e1a2a54e6812c6c96b2d09b16c2d05;hb=795115bf680185ae01043bd1222b78bfed8c1d87;hp=b145822974e13293c31f89aacb116bb85efb0224;hpb=1a7bd9d7b830a426104813e2cfed7d4b9bb9050e;p=NeonServV5.git diff --git a/lang.c b/lang.c index b145822..e50e752 100644 --- a/lang.c +++ b/lang.c @@ -86,7 +86,7 @@ struct language* get_language_by_tag(char *tag) { int cindex; for(cindex = 0; cindex < MAXLANGUAGES; cindex++) { if(langdict[cindex] == NULL) break; - if(!strcmp(langdict[cindex]->langtag, tag)) + if(!stricmp(langdict[cindex]->langtag, tag)) return langdict[cindex]; } return NULL; @@ -96,7 +96,7 @@ struct language* get_language_by_name(char *name) { int cindex; for(cindex = 0; cindex < MAXLANGUAGES; cindex++) { if(langdict[cindex] == NULL) break; - if(!strcmp(langdict[cindex]->langname, name)) + if(!stricmp(langdict[cindex]->langname, name)) return langdict[cindex]; } return NULL; @@ -111,19 +111,8 @@ struct language* get_default_language() { void register_default_language_table(const struct default_language_entry *msgtab) { if(lang_c == NULL) lang_c = add_language(DEFAULT_LANG_TAG, DEFAULT_LANG_NAME); - struct language_table *lang_entry; - int cindex; while(msgtab->ident) { - cindex = get_entry_index(msgtab->ident); - lang_entry = malloc(sizeof(*lang_entry)); - if (!lang_entry) { - perror("malloc() failed"); - return; - } - lang_entry->ident = strdup(msgtab->ident); - lang_entry->text = strdup(msgtab->text); - lang_entry->next = lang_c->entrys[cindex]; - lang_c->entrys[cindex] = lang_entry; + register_language_string(lang_c, msgtab->ident, msgtab->text); msgtab++; } } @@ -135,8 +124,36 @@ void register_language_string(struct language *lang, char *ident, char *text) { perror("malloc() failed"); return; } + lang_entry->ident = strdup(ident); - lang_entry->text = strdup(text); + //replace all: + //$b to \002 + //$k to \003 + char txt[MAXLEN]; + strcpy(txt, text); + char tmp[MAXLEN]; + int tmppos = 0; + char *a, *b = txt; + do { + a = strstr(b, "$"); + if(a) *a = '\0'; + tmppos += sprintf(tmp + tmppos, "%s", b); + if(a) { + switch(a[1]) { + case 'b': + tmp[tmppos++] = '\002'; + break; + case 'k': + tmp[tmppos++] = '\003'; + break; + default: + //unknown - just write it + tmppos += sprintf(tmp + tmppos, "$%c", a[1]); + } + b = a+2; + } + } while(a); + lang_entry->text = strdup(tmp); lang_entry->next = lang->entrys[cindex]; lang->entrys[cindex] = lang_entry; } @@ -154,6 +171,11 @@ char *get_language_string(struct UserNode *user, const char* msg_ident) { if(!strcmp(entry->ident, msg_ident)) return entry->text; } + if(lang == lang_c) return NULL; + for(entry = lang_c->entrys[cindex]; entry; entry = entry->next) { + if(!strcmp(entry->ident, msg_ident)) + return entry->text; + } return NULL; }