Index: file.c =================================================================== RCS file: /usr/cvsroot/asterisk/file.c,v retrieving revision 1.62 diff -u -r1.62 file.c --- file.c 22 Apr 2005 13:11:34 -0000 1.62 +++ file.c 27 May 2005 19:10:01 -0000 @@ -729,23 +729,31 @@ *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); }