diff options
author | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-05-30 13:16:29 +0000 |
---|---|---|
committer | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-05-30 13:16:29 +0000 |
commit | 70d6c63f0a90142635bb0e255471c5c1a4a7d704 (patch) | |
tree | ff694179b665a7c51fc749bf6f87f9e978472577 /file.c | |
parent | d9d6759f37dfee5e0eeff67416954ade8c6846ba (diff) |
Fix language handling (bug #4399)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@5783 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'file.c')
-rwxr-xr-x | file.c | 12 |
1 files changed, 10 insertions, 2 deletions
@@ -729,23 +729,31 @@ int ast_fileexists(const char *filename, const char *fmt, const char *preflang) *c = '\0'; postfix = c+1; prefix = tmp; + snprintf(filename2, sizeof(filename2), "%s/%s/%s", prefix, preflang, postfix); } else { postfix = tmp; prefix=""; + snprintf(filename2, sizeof(filename2), "%s/%s", preflang, postfix); } - snprintf(filename2, sizeof(filename2), "%s/%s/%s", prefix, preflang, postfix); res = ast_filehelper(filename2, NULL, fmt, ACTION_EXISTS); if (res < 1) { char *stringp=NULL; strncpy(lang2, preflang, sizeof(lang2)-1); stringp=lang2; strsep(&stringp, "_"); + /* If language is a specific locality of a language (like es_MX), strip the locality and try again */ if (strcmp(lang2, preflang)) { - snprintf(filename2, sizeof(filename2), "%s/%s/%s", prefix, lang2, postfix); + if (ast_strlen_zero(prefix)) { + snprintf(filename2, sizeof(filename2), "%s/%s", lang2, postfix); + } else { + snprintf(filename2, sizeof(filename2), "%s/%s/%s", prefix, lang2, postfix); + } res = ast_filehelper(filename2, NULL, fmt, ACTION_EXISTS); } } } + + /* Fallback to no language (usually winds up being American English) */ if (res < 1) { res = ast_filehelper(filename, NULL, fmt, ACTION_EXISTS); } |