From d4bde269cc74780c6d8b43814e89e2567a31d6df Mon Sep 17 00:00:00 2001 From: martin-s Date: Mon, 31 Mar 2008 16:40:21 +0000 Subject: [PATCH] Patch:core:Added patches from Bernhard Heibler for announcing street names git-svn-id: https://navit.svn.sourceforge.net/svnroot/navit/trunk@975 ffa7fe5e-494d-0410-b361-a75ebd5db220 --- navit/po/de.po | 58 ++++++++++++++++++++++++++++--------------- navit/src/navigation.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 105 insertions(+), 20 deletions(-) diff --git a/navit/po/de.po b/navit/po/de.po index de59954..860a487 100644 --- a/navit/po/de.po +++ b/navit/po/de.po @@ -46,99 +46,117 @@ msgstr "Benutze '%s'\n" msgid "No instance has been created, exiting\n" msgstr "Es wurde keine Instanz erzeugt, Ende\n" -#: ../src/navigation.c:162 +#: ../src/navigation.c:163 #, c-format msgid "%d m" msgstr "%d Meter" -#: ../src/navigation.c:164 +#: ../src/navigation.c:165 #, c-format msgid "in %d m" msgstr "In %d metern" -#: ../src/navigation.c:168 +#: ../src/navigation.c:169 #, c-format msgid "%d meters" msgstr "%d Meter" -#: ../src/navigation.c:170 +#: ../src/navigation.c:171 #, c-format msgid "in %d meters" msgstr "In %d metern" -#: ../src/navigation.c:176 +#: ../src/navigation.c:177 #, c-format msgid "%d.%d kilometer" msgstr "%d,%d Kilometer" -#: ../src/navigation.c:178 +#: ../src/navigation.c:179 #, c-format msgid "in %d.%d kilometers" msgstr "In %d,%d Kilometern" -#: ../src/navigation.c:182 +#: ../src/navigation.c:183 #, c-format msgid "one kilometer" msgid_plural "%d kilometers" msgstr[0] "einen Kilometer" msgstr[1] "%d Kilometer" -#: ../src/navigation.c:184 +#: ../src/navigation.c:185 #, c-format msgid "in one kilometer" msgid_plural "in %d kilometers" msgstr[0] "In einem Kilometer" msgstr[1] "In %d Kilometern" -#: ../src/navigation.c:404 +#: ../src/navigation.c:406 msgid "right" msgstr "rechts" -#: ../src/navigation.c:411 +#: ../src/navigation.c:413 msgid "left" msgstr "links" -#: ../src/navigation.c:415 +#: ../src/navigation.c:417 msgid "easily " msgstr "leicht " -#: ../src/navigation.c:419 +#: ../src/navigation.c:421 msgid "strongly " msgstr "scharf " -#: ../src/navigation.c:422 +#: ../src/navigation.c:424 msgid "unknown " msgstr "unbekannt " # -#: ../src/navigation.c:428 +#: ../src/navigation.c:430 msgid "When possible, please turn around" msgstr "Wenn möglich bitte wenden" -#: ../src/navigation.c:435 +#: ../src/navigation.c:437 #, c-format msgid "Follow the road for the next %s" msgstr "Dem Straßenverlauf %s folgen" -#: ../src/navigation.c:439 +#: ../src/navigation.c:441 msgid "soon" msgstr "Demnächst" -#: ../src/navigation.c:445 +#: ../src/navigation.c:447 msgid "now" msgstr "Jetzt" -#: ../src/navigation.c:448 +#: ../src/navigation.c:450 msgid "error" msgstr "fehler" +#: ../src/navigation.c:474 +msgid "exit" +msgstr "Ausfahrt" + +#: ../src/navigation.c:476 +msgid "ramp" +msgstr "Autobahneinfahrt" + +#: ../src/navigation.c:510 +#, c-format +msgid "Turn %1$s%2$s %3$s onto %4$s" +msgstr "%3$s %1$s%2$s abbiegen auf den %4$s" + +#: ../src/navigation.c:512 +#, c-format +msgid "Turn %1$s%2$s %3$s into %4$s" +msgstr "%3$s %1$s%2$s abbiegen auf die %4$s" + #. TRANSLATORS: The first argument is strength, the second direction and the third distance -#: ../src/navigation.c:452 +#: ../src/navigation.c:516 #, c-format msgid "Turn %1$s%2$s %3$s" msgstr "%3$s %1$s%2$s abbiegen" -#: ../src/navigation.c:455 +#: ../src/navigation.c:522 #, c-format msgid "You have reached your destination %s" msgstr "%s haben Sie ihr Ziel erreicht" diff --git a/navit/src/navigation.c b/navit/src/navigation.c index 55417e5..ec5c208 100644 --- a/navit/src/navigation.c +++ b/navit/src/navigation.c @@ -110,6 +110,7 @@ struct navigation_itm { int length; int dest_time; int dest_length; + int told; struct navigation_itm *next; struct navigation_itm *prev; }; @@ -242,6 +243,7 @@ navigation_itm_new(struct navigation *this_, struct item *ritem) struct coord c[5]; if (ritem) { + ret->told=0; if (! item_attr_get(ritem, attr_street_item, &street_item)) { dbg(0,"no street item\n"); return NULL; @@ -448,8 +450,73 @@ show_maneuver(struct navigation *nav, struct navigation_itm *itm, struct navigat d=g_strdup(_("error")); } if (cmd->itm->next) { + short tellStreetName = 0; + char * streetName = 0; + + if(cmd->itm->name1 || cmd->itm->name2 || cmd->itm->item.type == type_ramp) // If the next street has a name + { + if(cmd->itm->name1 && cmd->itm->name2 ) + streetName = g_strdup_printf("%s %s", cmd->itm->name1, cmd->itm->name2); + else if(cmd->itm->name1) + streetName = g_strdup(cmd->itm->name1); + else if(cmd->itm->name2) + streetName = g_strdup(cmd->itm->name2); + + // Now special handling for ramps and exists + + if(streetName == 0 && cmd->itm->item.type == type_ramp) + { + //printf(">> Next is ramp %lx current is %lx \n", cmd->itm->item.type, itm->item.type); + + if(itm->item.type == type_ramp) + streetName = 0; // looks like we stay on the ramp + if(itm->item.type == type_highway_city || itm->item.type == type_highway_land ) + streetName = g_strdup(_("exit")); + else + streetName = g_strdup(_("ramp")); + } + + if(type == attr_navigation_speech) // In voice mode + { + // In Voice Mode only tell the street name in level 1 or in level 0 if level 1 + // was skipped + + if (level == 1) // we are close to the intersection + { + cmd->itm->told = 1; // remeber to be checked when we turn + tellStreetName = 1; // Ok so we tell the name of the street + } + + if (level == 0) + { + if(cmd->itm->told == 0) // we are write at the intersection + tellStreetName = 1; + else + cmd->itm->told = 0; // reset just in case we come to the same street again + } + + } + else + tellStreetName = 1; + } + + if(streetName && tellStreetName ) + { + /* TRANSLATORS: The first argument is strength, the second direction and the third distance */ + + if( strcasestr(streetName,"weg") + || strcasestr(streetName,"platz") + || strcasestr(streetName,"ring")) + ret=g_strdup_printf(_("Turn %1$s%2$s %3$s onto %4$s"), strength, dir, d, streetName); + else + ret=g_strdup_printf(_("Turn %1$s%2$s %3$s into %4$s"), strength, dir, d, streetName); + } + else /* TRANSLATORS: The first argument is strength, the second direction and the third distance */ ret=g_strdup_printf(_("Turn %1$s%2$s %3$s"), strength, dir, d); + + if(streetName) + g_free(streetName); } else ret=g_strdup_printf(_("You have reached your destination %s"), d); -- 2.7.4