made it easier to remove localization and on-demand loading of new

language packs,
added parameter to say whether to use on-demand reloading,
added parameter for the directory that contains the localization files,
corrected a small bug when the string for the HEAD_ON instruction was
not available,
This commit is contained in:
DennisSchiefer 2012-04-14 18:03:33 +02:00
parent 73aeab3a57
commit 899d216b9b
8 changed files with 50 additions and 43 deletions

View File

@ -64,10 +64,13 @@ init: function() {
document.getElementById('main-wrapper').addEventListener("oTransitionEnd", OSRM.GUI.onMainTransitionEnd, false);
document.getElementById('main-wrapper').addEventListener("MSTransitionEnd", OSRM.GUI.onMainTransitionEnd, false);
}
// set default language
OSRM.Localization.setLanguage( OSRM.DEFAULTS.LANGUAGE );
},
// set language dependent labels
setLanguage: function() {
setLabels: function() {
document.getElementById("open-josm").innerHTML = OSRM.loc("OPEN_JOSM");
document.getElementById("open-osmbugs").innerHTML = OSRM.loc("OPEN_OSMBUGS");
document.getElementById("gui-reset").innerHTML = OSRM.loc("GUI_RESET");

View File

@ -43,7 +43,7 @@ call: function(marker_id, query) {
}
//build request for geocoder
var call = OSRM.DEFAULTS.HOST_GEOCODER_URL + "?format=json" + OSRM.DEFAULTS.GEOCODER_BOUNDS + "&accept-language="+OSRM.DEFAULTS.LANGUAGE+"&q=" + query;
var call = OSRM.DEFAULTS.HOST_GEOCODER_URL + "?format=json" + OSRM.DEFAULTS.GEOCODER_BOUNDS + "&accept-language="+OSRM.Localization.current_language+"&q=" + query;
OSRM.JSONP.call( call, OSRM.Geocoder._showResults, OSRM.Geocoder._showResults_Timeout, OSRM.DEFAULTS.JSONP_TIMEOUT, "geocoder_"+marker_id, {marker_id:marker_id,query:query} );
},
@ -155,7 +155,7 @@ updateAddress: function(marker_id, do_fallback_to_lat_lng) {
} else
return;
var call = OSRM.DEFAULTS.HOST_REVERSE_GEOCODER_URL + "?format=json" + "&accept-language="+OSRM.DEFAULTS.LANGUAGE + "&lat=" + lat + "&lon=" + lng;
var call = OSRM.DEFAULTS.HOST_REVERSE_GEOCODER_URL + "?format=json" + "&accept-language="+OSRM.Localization.current_language + "&lat=" + lat + "&lon=" + lng;
OSRM.JSONP.call( call, OSRM.Geocoder._showReverseResults, OSRM.Geocoder._showReverseResults_Timeout, OSRM.DEFAULTS.JSONP_TIMEOUT, "reverse_geocoder_"+marker_id, {marker_id:marker_id, do_fallback: do_fallback_to_lat_lng} );
},

View File

@ -19,8 +19,7 @@ or see http://www.gnu.org/licenses/agpl.txt.
// [has to be loaded directly after OSRM.base]
OSRM.DEFAULTS = {
//HOST_ROUTING_URL: 'http://router.project-osrm.org/viaroute',
HOST_ROUTING_URL: 'http://141.3.24.68:5000/viaroute',
HOST_ROUTING_URL: 'http://router.project-osrm.org/viaroute',
HOST_SHORTENER_URL: 'http://map.project-osrm.org/shorten/',
HOST_GEOCODER_URL: 'http://nominatim.openstreetmap.org/search',
HOST_REVERSE_GEOCODER_URL: 'http://nominatim.openstreetmap.org/reverse',
@ -33,5 +32,6 @@ OSRM.DEFAULTS = {
ONLOAD_TARGET: "",
HIGHLIGHT_ZOOM_LEVEL: 16,
LANGUAGE: "en",
LANGUAGE_FILES_DIRECTORY: "localization/",
GEOCODER_BOUNDS: '&bounded=1&viewbox=-27.0,72.0,46.0,36.0'
};

View File

@ -84,4 +84,5 @@ OSRM.Localization["de"] = {
};
// set GUI language on load
OSRM.Localization.change("de");
if( OSRM.Localization.use_ondemand_reloading==true)
OSRM.Localization.setLanguage("de");

View File

@ -84,4 +84,5 @@ OSRM.Localization["en"] = {
};
//set GUI language on load
OSRM.Localization.change("en");
if( OSRM.Localization.use_ondemand_reloading==true)
OSRM.Localization.setLanguage("en");

View File

@ -21,9 +21,11 @@ or see http://www.gnu.org/licenses/agpl.txt.
OSRM.Localization = {
use_ondemand_reloading: true,
supported_languages: [ {display_name:"en", encoding:"en"},
{display_name:"de", encoding:"de"}
],
current_language: OSRM.DEFAULTS.LANGUAGE,
// initialize localization
init: function() {
@ -31,7 +33,7 @@ init: function() {
var select = document.createElement('select');
select.id = "gui-language-toggle";
select.className = "top-left-button";
select.onchange = function() { OSRM.Localization.change(this.value); };
select.onchange = function() { OSRM.Localization.setLanguage(this.value); };
// fill dropdown menu
for(var i=0, size=OSRM.Localization.supported_languages.length; i<size; i++) {
@ -40,6 +42,7 @@ init: function() {
option.value = OSRM.Localization.supported_languages[i].encoding;
select.appendChild(option);
}
select.value = OSRM.DEFAULTS.LANGUAGE;
// add element to DOM
var input_mask_header = document.getElementById('input-mask-header');
@ -54,26 +57,25 @@ init: function() {
select.parentNode.insertBefore(myspan, select);
myspan.style.width = (select.clientWidth-2)+"px";
myspan.style.height = (select.clientHeight)+"px";
// initialize default language
OSRM.Localization.change( OSRM.DEFAULTS.LANGUAGE );
},
// perform language change
change: function(language) {
OSRM.DEFAULTS.LANGUAGE = language;
// update selector
var select = document.getElementById('gui-language-toggle');
var option = select.getElementsByTagName("option");
select.value = language;
for(var i = 0; i < option.length; i++)
if(option[i].selected == true) {
document.getElementById("styled-select" + select.id).childNodes[0].nodeValue = option[i].childNodes[0].nodeValue;
break;
}
// change gui language
setLanguage: function(language) {
if( OSRM.Localization[language]) {
OSRM.GUI.setLanguage();
OSRM.Localization.current_language = language;
// update selector
if( select = document.getElementById('gui-language-toggle') ) { // yes, = not == !
var option = select.getElementsByTagName("option");
select.value = language;
for(var i = 0; i < option.length; i++)
if(option[i].selected == true) {
document.getElementById("styled-select" + select.id).childNodes[0].nodeValue = option[i].childNodes[0].nodeValue;
break;
}
}
// change gui language
OSRM.GUI.setLabels();
// requery data
if( OSRM.G.markers.route.length > 1)
OSRM.Routing.getRoute();
else if(OSRM.G.markers.route.length > 0 && document.getElementById('information-box').innerHTML != "" ) {
@ -85,20 +87,25 @@ change: function(language) {
document.getElementById('information-box').innerHTML = "";
document.getElementById('information-box-header').innerHTML = "";
}
} else {
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = "localization/OSRM.Locale."+language+".js";
document.head.appendChild(script);
} else if(OSRM.Localization.use_ondemand_reloading==true) {
for(var i=0, size=OSRM.Localization.supported_languages.length; i<size; i++) {
if( OSRM.Localization.supported_languages[i].encoding == language) {
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = OSRM.DEFAULTS.LANGUAGE_FILES_DIRECTORY + "OSRM.Locale."+language+".js";
document.head.appendChild(script);
break;
}
}
}
},
// if existing, return localized string -> English string -> input string
translate: function(text) {
if( OSRM.Localization[OSRM.DEFAULTS.LANGUAGE] && OSRM.Localization[OSRM.DEFAULTS.LANGUAGE][text] )
if( OSRM.Localization[OSRM.Localization.current_language] && OSRM.Localization[OSRM.Localization.current_language][text] )
return OSRM.Localization[OSRM.Localization.current_language][text];
else if( OSRM.Localization[OSRM.DEFAULTS.LANGUAGE] && OSRM.Localization[OSRM.DEFAULTS.LANGUAGE][text] )
return OSRM.Localization[OSRM.DEFAULTS.LANGUAGE][text];
else if( OSRM.Localization["en"] && OSRM.Localization["en"][text] )
return OSRM.Localization["en"][text];
else
return text;
}

View File

@ -126,12 +126,7 @@ OSRM.parseParameters = function(){
continue;
if(name_val[0] == 'hl') {
for(var i=0, size=OSRM.Localization.supported_languages.length; i<size; i++) {
if( OSRM.Localization.supported_languages[i].encoding == name_val[1]) {
OSRM.Localization.change(name_val[1]);
break;
}
}
OSRM.Localization.setLanguage(name_val[1]);
}
else if(name_val[0] == 'loc') {
var coordinates = unescape(name_val[1]).split(',');

View File

@ -74,7 +74,7 @@ show: function(response) {
// build route description
if( i == 0 )
route_desc += OSRM.loc(OSRM.RoutingDescription.getDrivingInstruction(response.route_instructions[i][0])).replace(/%s/, OSRM.loc(response.route_instructions[i][6]) );
route_desc += OSRM.loc(OSRM.RoutingDescription.getDrivingInstruction(response.route_instructions[i][0])).replace(/\[(.*)\]/,"$1").replace(/%s/, OSRM.loc(response.route_instructions[i][6]) );
else if( response.route_instructions[i][1] != "" )
route_desc += OSRM.loc(OSRM.RoutingDescription.getDrivingInstruction(response.route_instructions[i][0])).replace(/\[(.*)\]/,"$1").replace(/%s/, response.route_instructions[i][1]);
else