mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-04 03:20:33 +00:00
fix language handling (bug #3023)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/v1-0@4481 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -178,6 +178,7 @@ static int advanced_options(struct ast_channel *chan, struct ast_vm_user *vmu, s
|
|||||||
static int dialout(struct ast_channel *chan, struct ast_vm_user *vmu, char *num, char *outgoing_context);
|
static int dialout(struct ast_channel *chan, struct ast_vm_user *vmu, char *num, char *outgoing_context);
|
||||||
static int play_record_review(struct ast_channel *chan, char *playfile, char *recordfile, int maxtime, char *fmt, int outsidecaller, struct ast_vm_user *vmu, int *duration);
|
static int play_record_review(struct ast_channel *chan, char *playfile, char *recordfile, int maxtime, char *fmt, int outsidecaller, struct ast_vm_user *vmu, int *duration);
|
||||||
static int vm_delete(char *file);
|
static int vm_delete(char *file);
|
||||||
|
static int vm_play_folder_name(struct ast_channel *chan, char *mbox);
|
||||||
|
|
||||||
static char ext_pass_cmd[128];
|
static char ext_pass_cmd[128];
|
||||||
|
|
||||||
@@ -2135,23 +2136,10 @@ static int get_folder(struct ast_channel *chan, int start)
|
|||||||
d = ast_play_and_wait(chan, "vm-for"); /* "for" */
|
d = ast_play_and_wait(chan, "vm-for"); /* "for" */
|
||||||
if (d)
|
if (d)
|
||||||
return d;
|
return d;
|
||||||
if (!strcasecmp(chan->language, "es") || !strcasecmp(chan->language, "fr") || !strcasecmp(chan->language, "pt")) { /* Spanish, French or Portuguese syntax */
|
snprintf(fn, sizeof(fn), "vm-%s", mbox(x)); /* Folder name */
|
||||||
d = ast_play_and_wait(chan, "vm-messages"); /* "messages */
|
d = vm_play_folder_name(chan, fn);
|
||||||
if (d)
|
if (d)
|
||||||
return d;
|
return d;
|
||||||
snprintf(fn, sizeof(fn), "vm-%s", mbox(x)); /* Folder name */
|
|
||||||
d = ast_play_and_wait(chan, fn);
|
|
||||||
if (d)
|
|
||||||
return d;
|
|
||||||
} else { /* Default English */
|
|
||||||
snprintf(fn, sizeof(fn), "vm-%s", mbox(x)); /* Folder name */
|
|
||||||
d = ast_play_and_wait(chan, fn);
|
|
||||||
if (d)
|
|
||||||
return d;
|
|
||||||
d = ast_play_and_wait(chan, "vm-messages"); /* "messages */
|
|
||||||
if (d)
|
|
||||||
return d;
|
|
||||||
}
|
|
||||||
d = ast_waitfordigit(chan, 500);
|
d = ast_waitfordigit(chan, 500);
|
||||||
if (d)
|
if (d)
|
||||||
return d;
|
return d;
|
||||||
@@ -2662,8 +2650,25 @@ static void close_mailbox(struct vm_state *vms, struct ast_vm_user *vmu)
|
|||||||
memset(vms->heard, 0, sizeof(vms->heard));
|
memset(vms->heard, 0, sizeof(vms->heard));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int vm_play_folder_name(struct ast_channel *chan, char *mbox)
|
||||||
|
{
|
||||||
|
int cmd;
|
||||||
|
|
||||||
|
if (!strcasecmp(chan->language, "es") || !strcasecmp(chan->language, "fr") || !strcasecmp(chan->language, "pt")) { /*Spanish, French or Portuguese syntax */
|
||||||
|
cmd = ast_play_and_wait(chan, "vm-messages"); /* "messages */
|
||||||
|
if (cmd)
|
||||||
|
return cmd;
|
||||||
|
return ast_play_and_wait(chan, mbox);
|
||||||
|
} else { /* Default English */
|
||||||
|
cmd = ast_play_and_wait(chan, mbox);
|
||||||
|
if (cmd)
|
||||||
|
return cmd;
|
||||||
|
return ast_play_and_wait(chan, "vm-messages"); /* "messages */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Default English syntax */
|
/* Default English syntax */
|
||||||
static int vm_intro(struct ast_channel *chan,struct vm_state *vms)
|
static int vm_intro_en(struct ast_channel *chan,struct vm_state *vms)
|
||||||
{
|
{
|
||||||
/* Introduce messages they have */
|
/* Introduce messages they have */
|
||||||
int res;
|
int res;
|
||||||
@@ -3025,6 +3030,26 @@ static int vm_intro_cz(struct ast_channel *chan,struct vm_state *vms)
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int vm_intro(struct ast_channel *chan,struct vm_state *vms)
|
||||||
|
{
|
||||||
|
/* Play voicemail intro - syntax is different for different languages */
|
||||||
|
if (!strcasecmp(chan->language, "de")) { /* GERMAN syntax */
|
||||||
|
return vm_intro_de(chan, vms);
|
||||||
|
} else if (!strcasecmp(chan->language, "es")) { /* SPANISH syntax */
|
||||||
|
return vm_intro_es(chan, vms);
|
||||||
|
} else if (!strcasecmp(chan->language, "fr")) { /* FRENCH syntax */
|
||||||
|
return vm_intro_fr(chan, vms);
|
||||||
|
} else if (!strcasecmp(chan->language, "nl")) { /* DUTCH syntax */
|
||||||
|
return vm_intro_nl(chan, vms);
|
||||||
|
} else if (!strcasecmp(chan->language, "pt")) { /* PORTUGUESE syntax */
|
||||||
|
return vm_intro_pt(chan, vms);
|
||||||
|
} else if (!strcasecmp(chan->language, "cz")) { /* CZECH syntax */
|
||||||
|
return vm_intro_cz(chan, vms);
|
||||||
|
} else { /* Default to ENGLISH */
|
||||||
|
return vm_intro_en(chan, vms);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static int vm_instructions(struct ast_channel *chan, struct vm_state *vms, int skipadvanced)
|
static int vm_instructions(struct ast_channel *chan, struct vm_state *vms, int skipadvanced)
|
||||||
{
|
{
|
||||||
int res = 0;
|
int res = 0;
|
||||||
@@ -3033,17 +3058,8 @@ static int vm_instructions(struct ast_channel *chan, struct vm_state *vms, int s
|
|||||||
if (vms->starting) {
|
if (vms->starting) {
|
||||||
if (vms->lastmsg > -1) {
|
if (vms->lastmsg > -1) {
|
||||||
res = ast_play_and_wait(chan, "vm-onefor");
|
res = ast_play_and_wait(chan, "vm-onefor");
|
||||||
if (!strcasecmp(chan->language, "es") || !strcasecmp(chan->language, "fr") || !strcasecmp(chan->language, "pt")) { /* Spanish, French & Portuguese Syntax */
|
if (!res)
|
||||||
if (!res)
|
res = vm_play_folder_name(chan, vms->vmbox);
|
||||||
res = ast_play_and_wait(chan, "vm-messages");
|
|
||||||
if (!res)
|
|
||||||
res = ast_play_and_wait(chan, vms->vmbox);
|
|
||||||
} else { /* Default English syntax */
|
|
||||||
if (!res)
|
|
||||||
res = ast_play_and_wait(chan, vms->vmbox);
|
|
||||||
if (!res)
|
|
||||||
res = ast_play_and_wait(chan, "vm-messages");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (!res)
|
if (!res)
|
||||||
res = ast_play_and_wait(chan, "vm-opts");
|
res = ast_play_and_wait(chan, "vm-opts");
|
||||||
@@ -3173,7 +3189,7 @@ static int vm_options(struct ast_channel *chan, struct ast_vm_user *vmu, struct
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Default English syntax */
|
/* Default English syntax */
|
||||||
static int vm_browse_messages(struct ast_channel *chan, struct vm_state *vms, struct ast_vm_user *vmu)
|
static int vm_browse_messages_en(struct ast_channel *chan, struct vm_state *vms, struct ast_vm_user *vmu)
|
||||||
{
|
{
|
||||||
int cmd=0;
|
int cmd=0;
|
||||||
|
|
||||||
@@ -3231,6 +3247,17 @@ static int vm_browse_messages_pt(struct ast_channel *chan, struct vm_state *vms,
|
|||||||
return cmd;
|
return cmd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int vm_browse_messages(struct ast_channel *chan, struct vm_state *vms, struct ast_vm_user *vmu)
|
||||||
|
{
|
||||||
|
if (!strcasecmp(chan->language, "es")) { /* SPANISH */
|
||||||
|
return vm_browse_messages_es(chan, vms, vmu);
|
||||||
|
} else if (!strcasecmp(chan->language, "pt")) { /* PORTUGUESE */
|
||||||
|
return vm_browse_messages_pt(chan, vms, vmu);
|
||||||
|
} else { /* Default to English syntax */
|
||||||
|
return vm_browse_messages_en(chan, vms, vmu);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static int vm_execmain(struct ast_channel *chan, void *data)
|
static int vm_execmain(struct ast_channel *chan, void *data)
|
||||||
{
|
{
|
||||||
/* XXX This is, admittedly, some pretty horrendus code. For some
|
/* XXX This is, admittedly, some pretty horrendus code. For some
|
||||||
@@ -3414,22 +3441,7 @@ static int vm_execmain(struct ast_channel *chan, void *data)
|
|||||||
if (useadsi)
|
if (useadsi)
|
||||||
adsi_status(chan, &vms);
|
adsi_status(chan, &vms);
|
||||||
res = 0;
|
res = 0;
|
||||||
/* Play voicemail intro - syntax is different for different languages */
|
cmd = vm_intro(chan, &vms);
|
||||||
if (!strcasecmp(chan->language, "de")) { /* GERMAN syntax */
|
|
||||||
cmd = vm_intro_de(chan, &vms);
|
|
||||||
} else if (!strcasecmp(chan->language, "es")) { /* SPANISH syntax */
|
|
||||||
cmd = vm_intro_es(chan, &vms);
|
|
||||||
} else if (!strcasecmp(chan->language, "fr")) { /* FRENCH syntax */
|
|
||||||
cmd = vm_intro_fr(chan, &vms);
|
|
||||||
} else if (!strcasecmp(chan->language, "nl")) { /* DUTCH syntax */
|
|
||||||
cmd = vm_intro_nl(chan, &vms);
|
|
||||||
} else if (!strcasecmp(chan->language, "pt")) { /* PORTUGUESE syntax */
|
|
||||||
cmd = vm_intro_pt(chan, &vms);
|
|
||||||
} else if (!strcasecmp(chan->language, "cz")) { /* CZECH syntax */
|
|
||||||
cmd = vm_intro_cz(chan, &vms);
|
|
||||||
} else { /* Default to ENGLISH */
|
|
||||||
cmd = vm_intro(chan, &vms);
|
|
||||||
}
|
|
||||||
vms.repeats = 0;
|
vms.repeats = 0;
|
||||||
vms.starting = 1;
|
vms.starting = 1;
|
||||||
while((cmd > -1) && (cmd != 't') && (cmd != '#')) {
|
while((cmd > -1) && (cmd != 't') && (cmd != '#')) {
|
||||||
@@ -3439,13 +3451,7 @@ static int vm_execmain(struct ast_channel *chan, void *data)
|
|||||||
vms.curmsg = 0;
|
vms.curmsg = 0;
|
||||||
/* Fall through */
|
/* Fall through */
|
||||||
case '5':
|
case '5':
|
||||||
if (!strcasecmp(chan->language, "es")) { /* SPANISH */
|
cmd = vm_browse_messages(chan, &vms, vmu);
|
||||||
cmd = vm_browse_messages_es(chan, &vms, vmu);
|
|
||||||
} else if (!strcasecmp(chan->language, "pt")) { /* PORTUGUESE */
|
|
||||||
cmd = vm_browse_messages_pt(chan, &vms, vmu);
|
|
||||||
} else { /* Default to English syntax */
|
|
||||||
cmd = vm_browse_messages(chan, &vms, vmu);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case '2': /* Change folders */
|
case '2': /* Change folders */
|
||||||
if (useadsi)
|
if (useadsi)
|
||||||
@@ -3461,17 +3467,8 @@ static int vm_execmain(struct ast_channel *chan, void *data)
|
|||||||
}
|
}
|
||||||
if (useadsi)
|
if (useadsi)
|
||||||
adsi_status2(chan, &vms);
|
adsi_status2(chan, &vms);
|
||||||
if (!strcasecmp(chan->language, "es") || !strcasecmp(chan->language, "pt")) { /* SPANISH or PORTUGUESE */
|
if (!cmd)
|
||||||
if (!cmd)
|
cmd = vm_play_folder_name(chan, vms.vmbox);
|
||||||
cmd = ast_play_and_wait(chan, "vm-messages");
|
|
||||||
if (!cmd)
|
|
||||||
cmd = ast_play_and_wait(chan, vms.vmbox);
|
|
||||||
} else { /* Default to English syntax */
|
|
||||||
if (!cmd)
|
|
||||||
cmd = ast_play_and_wait(chan, vms.vmbox);
|
|
||||||
if (!cmd)
|
|
||||||
cmd = ast_play_and_wait(chan, "vm-messages");
|
|
||||||
}
|
|
||||||
vms.starting = 1;
|
vms.starting = 1;
|
||||||
break;
|
break;
|
||||||
case '3': /* Advanced options */
|
case '3': /* Advanced options */
|
||||||
@@ -3630,21 +3627,9 @@ static int vm_execmain(struct ast_channel *chan, void *data)
|
|||||||
cmd = say_and_wait(chan, vms.curmsg + 1, chan->language);
|
cmd = say_and_wait(chan, vms.curmsg + 1, chan->language);
|
||||||
if (!cmd)
|
if (!cmd)
|
||||||
cmd = ast_play_and_wait(chan, "vm-savedto");
|
cmd = ast_play_and_wait(chan, "vm-savedto");
|
||||||
if (!strcasecmp(chan->language, "es") || !strcasecmp(chan->language, "pt")) { /* SPANISH or PORTUGUESE */
|
snprintf(vms.fn, sizeof(vms.fn), "vm-%s", mbox(box));
|
||||||
if (!cmd)
|
if (!cmd)
|
||||||
cmd = ast_play_and_wait(chan, "vm-messages");
|
cmd = vm_play_folder_name(chan, vms.fn);
|
||||||
if (!cmd) {
|
|
||||||
snprintf(vms.fn, sizeof(vms.fn), "vm-%s", mbox(box));
|
|
||||||
cmd = ast_play_and_wait(chan, vms.fn);
|
|
||||||
}
|
|
||||||
} else { /* Default to English */
|
|
||||||
if (!cmd) {
|
|
||||||
snprintf(vms.fn, sizeof(vms.fn), "vm-%s", mbox(box));
|
|
||||||
cmd = ast_play_and_wait(chan, vms.fn);
|
|
||||||
}
|
|
||||||
if (!cmd)
|
|
||||||
cmd = ast_play_and_wait(chan, "vm-messages");
|
|
||||||
}
|
|
||||||
if (skipaftercmd) {
|
if (skipaftercmd) {
|
||||||
if (vms.curmsg < vms.lastmsg) {
|
if (vms.curmsg < vms.lastmsg) {
|
||||||
vms.curmsg++;
|
vms.curmsg++;
|
||||||
@@ -3658,17 +3643,8 @@ static int vm_execmain(struct ast_channel *chan, void *data)
|
|||||||
case '*':
|
case '*':
|
||||||
if (!vms.starting) {
|
if (!vms.starting) {
|
||||||
cmd = ast_play_and_wait(chan, "vm-onefor");
|
cmd = ast_play_and_wait(chan, "vm-onefor");
|
||||||
if (!strcasecmp(chan->language, "es") || !strcasecmp(chan->language, "pt")) { /* Spanish or Portuguese syntax */
|
if (!cmd)
|
||||||
if (!cmd)
|
cmd = vm_play_folder_name(chan, vms.vmbox);
|
||||||
cmd = ast_play_and_wait(chan, "vm-messages");
|
|
||||||
if (!cmd)
|
|
||||||
cmd = ast_play_and_wait(chan, vms.vmbox);
|
|
||||||
} else {
|
|
||||||
if (!cmd)
|
|
||||||
cmd = ast_play_and_wait(chan, vms.vmbox);
|
|
||||||
if (!cmd)
|
|
||||||
cmd = ast_play_and_wait(chan, "vm-messages");
|
|
||||||
}
|
|
||||||
if (!cmd)
|
if (!cmd)
|
||||||
cmd = ast_play_and_wait(chan, "vm-opts");
|
cmd = ast_play_and_wait(chan, "vm-opts");
|
||||||
if (!cmd)
|
if (!cmd)
|
||||||
@@ -4780,6 +4756,7 @@ static int vm_delete(char *file)
|
|||||||
return ast_filedelete(file, NULL);
|
return ast_filedelete(file, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int usecount(void)
|
int usecount(void)
|
||||||
{
|
{
|
||||||
int res;
|
int res;
|
||||||
|
Reference in New Issue
Block a user