static void init_language(void) { struct locale* lang; int i; lang = get_or_create_locale("de"); locale_setstring(lang, "skill::unarmed", "Waffenloser Kampf"); locale_setstring(lang, "keyword::attack", "ATTACKIERE"); locale_setstring(lang, "keyword::study", "LERNE"); locale_setstring(lang, "keyword::tax", "TREIBE"); locale_setstring(lang, "keyword::loot", "PLUENDERE"); locale_setstring(lang, "keyword::piracy", "PIRATERIE"); locale_setstring(lang, "keyword::guard", "BEWACHE"); locale_setstring(lang, "keyword::move", "NACH"); locale_setstring(lang, "keyword::message", "BOTSCHAFT"); locale_setstring(lang, "REGION", "REGION"); locale_setstring(lang, "east", "O"); for (i = 0; i < MAXKEYWORDS; ++i) { if (!locale_getstring(lang, mkname("keyword", keywords[i]))) locale_setstring(lang, mkname("keyword", keywords[i]), keywords[i]); } for (i = 0; i < MAXSKILLS; ++i) { if (!locale_getstring(lang, mkname("skill", skillnames[i]))) locale_setstring(lang, mkname("skill", skillnames[i]), skillnames[i]); } init_keywords(lang); init_skills(lang); }
const char * locale_get(const char *lang, const char *key) { struct locale *loc = get_locale(lang); if (loc) { return locale_getstring(loc, key); } return 0; }
static const char *make_names(const char *monster, int *num_postfix, int pprefix, int *num_name, int *num_prefix, int ppostfix) { int uv, uu, un; static char name[NAMESIZE + 1]; // FIXME: static return value char zText[32]; const char *str; if (*num_prefix == 0) { for (*num_prefix = 0;; ++*num_prefix) { sprintf(zText, "%s_prefix_%d", monster, *num_prefix); str = locale_getstring(default_locale, zText); if (str == NULL) break; } for (*num_name = 0;; ++*num_name) { sprintf(zText, "%s_name_%d", monster, *num_name); str = locale_getstring(default_locale, zText); if (str == NULL) break; } for (*num_postfix = 0;; ++*num_postfix) { sprintf(zText, "%s_postfix_%d", monster, *num_postfix); str = locale_getstring(default_locale, zText); if (str == NULL) break; } } if (*num_name == 0) { return NULL; } /* nur 50% aller Namen haben "Vor-Teil" */ uv = rng_int() % (*num_prefix * pprefix); uu = rng_int() % *num_name; /* nur 50% aller Namen haben "Nach-Teil", wenn kein Vor-Teil */ if (uv >= *num_prefix) { un = rng_int() % *num_postfix; } else { un = rng_int() % (*num_postfix * ppostfix); } name[0] = 0; if (uv < *num_prefix) { sprintf(zText, "%s_prefix_%d", monster, uv); str = locale_getstring(default_locale, zText); if (str) { strcat(name, (const char *)str); strcat(name, " "); } } sprintf(zText, "%s_name_%d", monster, uu); str = locale_getstring(default_locale, zText); if (str) strcat(name, (const char *)str); if (un < *num_postfix) { sprintf(zText, "%s_postfix_%d", monster, un); str = locale_getstring(default_locale, zText); if (str) { strcat(name, " "); strcat(name, (const char *)str); } } return name; }
static const char *dragon_name(const unit * u) { static char name[NAMESIZE + 1]; // FIXME: static return value int rnd, ter = 0; int anzahl = 1; static int num_postfix; char zText[32]; const char *str; if (num_postfix == 0) { for (num_postfix = 0;; ++num_postfix) { sprintf(zText, "dragon_postfix_%d", num_postfix); str = locale_getstring(default_locale, zText); if (str == NULL) break; } if (num_postfix == 0) num_postfix = -1; } if (num_postfix <= 0) { return NULL; } if (u) { region *r = u->region; anzahl = u->number; switch (rterrain(r)) { case T_PLAIN: ter = 1; break; case T_MOUNTAIN: ter = 2; break; case T_DESERT: ter = 3; break; case T_SWAMP: ter = 4; break; case T_GLACIER: ter = 5; break; } } rnd = num_postfix / 6; rnd = (rng_int() % rnd) + ter * rnd; sprintf(zText, "dragon_postfix_%d", rnd); str = locale_getstring(default_locale, zText); assert(str != NULL); if (anzahl > 1) { const char *no_article = strchr((const char *)str, ' '); assert(no_article); // TODO: localization sprintf(name, "Die %sn von %s", no_article + 1, rname(u->region, default_locale)); } else { char n[32]; strcpy(n, silbe1[rng_int() % SIL1]); strcat(n, silbe2[rng_int() % SIL2]); strcat(n, silbe3[rng_int() % SIL3]); if (rng_int() % 5 > 2) { sprintf(name, "%s, %s", n, str); /* "Name, der Titel" */ } else { strcpy(name, (const char *)str); /* "Der Titel Name" */ name[0] = (char)toupper(name[0]); /* TODO: UNICODE - should use towupper() */ strcat(name, " "); strcat(name, n); } if (u && (rng_int() % 3 == 0)) { strcat(name, " von "); strcat(name, (const char *)rname(u->region, default_locale)); } } return name; }