From c4d4c636d0a249eca13af323d35e4242eb954718 Mon Sep 17 00:00:00 2001 From: Tilghman Lesher <tilghman@meg.abyt.es> Date: Fri, 25 Jul 2008 22:08:06 +0000 Subject: [PATCH] Hebrew syntax for voicemail prompts (closes issue #13155) Reported by: greenfieldtech Patches: app_voicemail.c.patch uploaded by greenfieldtech (license 369) hebrew.ods uploaded by greenfieldtech (license 369) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@133904 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- apps/app_voicemail.c | 132 +++++++++++++++++++++++++++++++++++++++++-- doc/lang/hebrew.ods | Bin 23290 -> 23306 bytes 2 files changed, 128 insertions(+), 4 deletions(-) diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c index 63974d20b4..e83eaf2705 100644 --- a/apps/app_voicemail.c +++ b/apps/app_voicemail.c @@ -5715,10 +5715,33 @@ static int play_message(struct ast_channel *chan, struct ast_vm_user *vmu, struc adsi_message(chan, vms); ast_debug(5,"************** About to check urgent flag, set to:%s\n", flag); - if (!vms->curmsg) - res = wait_file2(chan, vms, "vm-first"); /* "First" */ - else if (vms->curmsg == vms->lastmsg) - res = wait_file2(chan, vms, "vm-last"); /* "last" */ + if (!strcasecmp(chan->language, "he")) { /* HEBREW FORMAT */ + /* + * The syntax in hebrew for counting the number of message is up side down + * in comparison to english. + */ + if (!vms->curmsg) { + res = wait_file2(chan, vms, "vm-message"); + res = wait_file2(chan, vms, "vm-first"); /* "First" */ + } else if (vms->curmsg == vms->lastmsg) { + res = wait_file2(chan, vms, "vm-message"); + res = wait_file2(chan, vms, "vm-last"); /* "last" */ + } else { + res = wait_file2(chan, vms, "vm-message"); /* "message" */ + if (vms->curmsg && (vms->curmsg != vms->lastmsg)) { + ast_log(LOG_DEBUG, "curmsg: %s\n", vms->curmsg); + ast_log(LOG_DEBUG, "lagmsg: %s\n", vms->lastmsg); + if (!res) { + res = ast_say_number(chan, vms->curmsg + 1, AST_DIGIT_ANY, chan->language, "f"); + } + } + } + } else { + if (!vms->curmsg) + res = wait_file2(chan, vms, "vm-first"); /* "First" */ + else if (vms->curmsg == vms->lastmsg) + res = wait_file2(chan, vms, "vm-last"); /* "last" */ + } /* Play the word urgent if we are listening to urgent messages */ if (!ast_strlen_zero(flag) && !strcmp(flag, "Urgent")) { res = wait_file2(chan, vms, "vm-Urgent"); /* "urgent" */ @@ -5849,6 +5872,19 @@ static int play_message(struct ast_channel *chan, struct ast_vm_user *vmu, struc } if (!res) res = wait_file2(chan, vms, "vm-message"); + /* HEBREW syntax */ + } else if (!strcasecmp(chan->language, "he")) { + if (!vms->curmsg) { + res = wait_file2(chan, vms, "vm-message"); + res = wait_file2(chan, vms, "vm-first"); + } else if (vms->curmsg == vms->lastmsg) { + res = wait_file2(chan, vms, "vm-message"); + res = wait_file2(chan, vms, "vm-last"); + } else { + res = wait_file2(chan, vms, "vm-message"); + res = wait_file2(chan, vms, "vm-number"); + res = ast_say_number(chan, vms->curmsg + 1, AST_DIGIT_ANY, chan->language, "f"); + } } else { if (!strcasecmp(chan->language, "se")) /* SWEDISH syntax */ res = wait_file2(chan, vms, "vm-meddelandet"); /* "message" */ @@ -6442,6 +6478,73 @@ static int vm_intro_gr(struct ast_channel *chan, struct vm_state *vms) res = ast_play_and_wait(chan, "vm-denExeteMynhmata"); return res; } + +/* Hebrew syntax */ +static int vm_intro_he(struct ast_channel *chan, struct vm_state *vms) +{ + int res = 0; + + /* Introduce messages they have */ + if (!res) { + if ((vms->newmessages) || (vms->oldmessages)) { + res = ast_play_and_wait(chan, "vm-youhave"); + } + /* + * The word "shtei" refers to the number 2 in hebrew when performing a count + * of elements. In Hebrew, there are 6 forms of enumerating the number 2 for + * an element, this is one of them. + */ + if (vms->newmessages) { + if (!res) { + if (vms->newmessages == 1) { + res = ast_play_and_wait(chan, "vm-INBOX1"); + } else { + if (vms->newmessages == 2) { + res = ast_play_and_wait(chan, "vm-shtei"); + } else { + res = ast_say_number(chan, vms->newmessages, AST_DIGIT_ANY, chan->language, "f"); + } + res = ast_play_and_wait(chan, "vm-INBOX"); + } + } + if (vms->oldmessages && !res) { + res = ast_play_and_wait(chan, "vm-and"); + if (vms->oldmessages == 1) { + res = ast_play_and_wait(chan, "vm-Old1"); + } else { + if (vms->oldmessages == 2) { + res = ast_play_and_wait(chan, "vm-shtei"); + } else { + res = ast_say_number(chan, vms->oldmessages, AST_DIGIT_ANY, chan->language, "f"); + } + res = ast_play_and_wait(chan, "vm-Old"); + } + } + } + if (!res && vms->oldmessages && !vms->newmessages) { + if (!res) { + if (vms->oldmessages == 1) { + res = ast_play_and_wait(chan, "vm-Old1"); + } else { + if (vms->oldmessages == 2) { + res = ast_play_and_wait(chan, "vm-shtei"); + } else { + res = ast_say_number(chan, vms->oldmessages, AST_DIGIT_ANY, chan->language, "f"); + } + res = ast_play_and_wait(chan, "vm-Old"); + } + } + } + if (!res) { + if (!vms->oldmessages && !vms->newmessages) { + if (!res) { + res = ast_play_and_wait(chan, "vm-nomessages"); + } + } + } + } + return res; +} /* Default English syntax */ static int vm_intro_en(struct ast_channel *chan, struct vm_state *vms) @@ -7283,6 +7386,8 @@ static int vm_intro(struct ast_channel *chan, struct ast_vm_user *vmu, struct vm return vm_intro_tw(chan, vms); } else if (!strcasecmp(chan->language, "ua")) { /* UKRAINIAN syntax */ return vm_intro_ua(chan, vms); + } else if (!strcasecmp(chan->language, "he")) { /* HEBREW syntax */ + return vm_intro_he(chan, vms); } else { /* Default to ENGLISH */ return vm_intro_en(chan, vms); } @@ -7748,6 +7853,23 @@ static int vm_browse_messages_gr(struct ast_channel *chan, struct vm_state *vms, return cmd; } +/* Hebrew Syntax */ +static int vm_browse_messages_he(struct ast_channel *chan, struct vm_state *vms, struct ast_vm_user *vmu) +{ + int cmd = 0; + + if (vms->lastmsg > -1) { + cmd = play_message(chan, vmu, vms); + } else { + if (!strcasecmp(vms->fn, "INBOX")) { + cmd = ast_play_and_wait(chan, "vm-nonewmessages"); + } else { + cmd = ast_play_and_wait(chan, "vm-nomessages"); + } + } + return cmd; +} + /*! * \brief Default English syntax for 'You have N messages' greeting. * \param chan @@ -7905,6 +8027,8 @@ static int vm_browse_messages(struct ast_channel *chan, struct vm_state *vms, st return vm_browse_messages_gr(chan, vms, vmu); /* GREEK */ } else if (!strcasecmp(chan->language, "tw")){ return vm_browse_messages_tw(chan, vms, vmu); /* CHINESE (Taiwan) */ + } else if (!strcasecmp(chan->language, "he")) { + return vm_browse_messages_he(chan, vms, vmu); /* HEBREW */ } else { /* Default to English syntax */ return vm_browse_messages_en(chan, vms, vmu); } diff --git a/doc/lang/hebrew.ods b/doc/lang/hebrew.ods index f8b0f54df5a785250c843fd3461520f2d16d5cbc..9451d836d83e00da5872f031cac633d4dc8cddb6 100644 GIT binary patch delta 3132 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 SQPPZ!lg~tHu(5@M^Z)?2XwDk| delta 3129 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 DN?*vo -- GitLab