8
const char *rccGetLanguageName(rcc_context *ctx, rcc_language_id language_id) {
9
if ((!ctx)||(language_id<0)||(language_id>=ctx->n_languages)) return NULL;
10
return ctx->languages[language_id]->sn;
13
language_id rccGetLanguageByName(rcc_context *ctx, const char *name) {
15
if ((!ctx)||(!name)) return 0;
17
for (i=0;ctx->languages[i];i++)
18
if (!strcmp(ctx->languages[i]->sn, name)) return i;
23
static int rccGetLocaleLanguage(char *result, const char *lv, unsigned int n) {
29
l = setlocale(lv, NULL);
31
else if ((strcmp(l,"C")==0)||(strcmp(l,"POSIX")==0)) return -1;
33
for (i=0;((l[i])&&(l[i]!='.'));i++);
35
for (i=0;rcc_default_aliases[i].alias;i++)
36
if (strncmp(l,rcc_default_aliases[i].alias,i)==0) {
37
l = rcc_default_aliases[i].alias;
41
for (i=0;((l[i])&&(l[i]!='.')&&(l[i]!='_'));i++);
50
static rcc_language_id rccGetDefaultLanguage(rc_context *ctx) {
53
char stmp[RCC_MAX_LANGUAGE_CHARS+1];
57
err = rccGetLocaleLanguage(stmp, ctx->locale_variable, RCC_MAX_LANGUAGE_CHARS);
59
if (ctx->n_languages>1) return 1;
63
for (i=0;ctx->languages[i];i++)
64
if (!strcmp(ctx->languages[i]->sn, stmp)) return i;
70
rcc_language_id rccGetRealLanguage(rcc_context *ctx, rcc_language_id language_id) {
71
if ((!ctx)||(language_id<0)||(language_id>=ctx->n_languages)) return -1;
72
if (language_id) return language_id;
73
return rccGetDefaultLanguage(ctx);
76
const char *rccGetRealLanguageName(rcc_context *ctx, rcc_language_id language_id) {
77
language_id = rccGetRealLanguage(ctx, language_id);
78
if (language_id<0) return NULL;
80
return rccGetLanguageName(ctx, language_id);
83
rcc_language_id rccGetSelectedLanguage(rcc_context *ctx) {
84
if (!ctx) return NULL;
85
return ctx->current_language;
88
const char *rccGetSelectedLanguageName(rcc_context *ctx) {
89
rcc_language_id language_id;
91
language_id = rccGetSelectedLanguage(ctx);
92
if (language_id<0) return NULL;
94
return rccGetLanguageName(ctx, language_id);
97
rcc_language_id rccGetCurrentLanguage(rcc_context *ctx) {
99
return rccGetRealLanguage(ctx, ctx->current_language);
102
const char *rccGetCurrentLanguageName(rcc_context *ctx) {
103
rcc_language_id language_id;
105
language_id = rccGetCurrentLanguage(ctx);
106
if (language_id<0) return NULL;
108
return rccGetLanguageName(ctx, language_id);
112
int rccSetLanguage(rcc_context *ctx, rcc_language_id language_id) {
113
rcc_language_config config;
115
if ((!ctx)||(language_id < 0)||(language_id >= ctx->n_languages)) return -1;
116
if ((!ctx->languages[language_id]->engines[0])||(!ctx->languages[language_id]->charsets[0])) return -2;
118
if (ctx->current_language != language_id) {
119
config = rccGetConfig(ctx, language_id);
120
if (!config) return -1;
123
ctx->current_language = language_id;
124
ctx->current_config = config;
128
int rccSetLanguageByName(rcc_context *ctx, const char *name) {
129
rcc_language_id language_id;
131
language_id = rccGetLanguageByName(ctx, name);
132
if (language_id < 0) return -1;
134
return rccSetLanguage(ctx, language_id);