在Leaflet.Routing.Control中设置语言选项

时间:2018-04-17 09:20:45

标签: javascript leaflet leaflet-routing-machine

更新:

我正在尝试用语言翻译传单路由组件:' sp'  但它对我不起作用。

const createRoutingControl = () => {
L.Routing.control({      
  router: L.Routing.mapbox(config.features.routing.key),      
  plan: new (L.Routing.Plan.extend({
    createGeocoders: function () {
      let container = L.Routing.Plan.prototype.createGeocoders.call(this)
      let reverseRoute = createButton('↑↓', container)
      let copyToClipboard = createButton('5', container, true)       

      return container
    }
  }))([], {
    geocoder: geocoder,
    language: 'sp'
  }),
  units: config.features.routing.units,
  showAlternatives: true,
  autoRoute: true,
  routeWhileDragging: true,      
}).addTo(map)

}

用"语言:' SP' " 表单是traslated但不是指令。 我知道我必须使用格式化程序,但我试着将它放在routing.control,routing.plan ...(以及更多地方只测试它)并且它不起作用(地图不显示)

3 个答案:

答案 0 :(得分:0)

这是RTFM的案例。

如果你仔细看一下API documentation for Leaflet Routing Machine,你会注意到L.Routing.Control language选项,并且language选项仅适用于L.Routing.Formatter的实例,并且L.Routing.Control可以采用formatter选项,该选项可以包含L.Routing.Formatter的实例。所以把所有东西放在一起......

L.Routing.control({
  router: L.Routing.mapbox(config.features.routing.key),     
  formatter: L.Routing.formatter({
    language: 'sp'
    units: config.features.routing.units,
  }),
  showAlternatives: true,
  autoRoute: true,
  // ... etc
},

(P.S。:" prop"是反应俚语,这个词在这里不适用)

答案 1 :(得分:0)

来自@IvanSanchez的回复几乎是正确的:Control确实没有language选项,但其他几个类都有(不确定这是否已正确记录,对不起)。

作为默认情况,Control类会在实例化其子组件时传递给您的任何选项,因此将language作为选项传递给Control也会将它传递给默认格式化程序,路由器等。例外情况是当您提供自己实例化的子组件时,例如示例中的Plan:对于这种情况,您需要明确提供选项(如您)已经做了。)

所以我认为这段代码应该解决问题:

const createRoutingControl = () => {
L.Routing.control({      
  router: L.Routing.mapbox(config.features.routing.key),      
  plan: new (L.Routing.Plan.extend({
    createGeocoders: function () {
      let container = L.Routing.Plan.prototype.createGeocoders.call(this)
      let reverseRoute = createButton('↑↓', container)
      let copyToClipboard = createButton('5', container, true)       

      return container
    }
  }))([], {
    geocoder: geocoder,
    language: 'sp'
  }),
  units: config.features.routing.units,
  showAlternatives: true,
  autoRoute: true,
  routeWhileDragging: true,
  language: 'sp'
}).addTo(map)

答案 2 :(得分:0)

很抱歉,我无法深入研究此主题,但是我无法将其翻译成法语...

我直接在L.Routing.control和格式化程序中设置语言选项“ fr”。

我尝试调试完成本地化的行,然后在leaflet-routing-machine.js的第16353行看到我的问题:

    formatInstruction: function(instr, i) {
        if (instr.text === undefined) {
            return this.capitalize(L.Util.template(this._getInstructionTemplate(instr, i),
                .....
                })));
        } else {
            return instr.text;
        }

已经初始化instr.text的地方...

如果我在调试时将instr.text重置为“ undefined”,则说明翻译正确...

您知道我的问题吗? 我的代码如下:

$script(['https://unpkg.com/leaflet/dist/leaflet-src.js'], () =>{
$script(['https://unpkg.com/leaflet-routing-machine/dist/leaflet-routing-machine.js'], () => {

this.map = L.map(element);

L.tileLayer('//{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png', {
attribution: 'Map data &copy; <a href="//osm.org/copyright">OpenStreetMap</a>  - rendu <a href="//openstreetmap.fr">OSM France</a> ',
maxZoom: 18
}).addTo(this.map);      


this.map = L.map(element);

L.tileLayer('//{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png', {
	attribution: 'Map data &copy; <a href="//osm.org/copyright">OpenStreetMap</a>  - rendu <a href="//openstreetmap.fr">OSM France</a> ',
	maxZoom: 18
}).addTo(this.map);      

let control1 = L.Routing.control(
	{
		router: L.routing.mapbox(this.key.MapboxKey),   
				
		language: 'fr',
		formatter:  new L.Routing.Formatter({
			language: 'fr' 
		}),

		waypoints: [
			L.latLng(47.928927, 7.538860),
			L.latLng(48.044444, 7.299279),
			L.latLng(47.857503, 6.821690),
			L.latLng(47.506390, 6.996181),
			L.latLng(47.586881, 7.25652)
		],
		routeWhileDragging: true
	})
	.on('routingerror', function(e) {
		try {
			this.map.getCenter();
		} catch (e) {
			this.map.fitBounds(L.latLngBounds(control1.getWaypoints().map(function(wp) { return wp.latLng; })));
		}

		handleError(e);
	})
	.addTo(this.map);
L.Routing.errorControl(control1).addTo(this.map);

================================================ ====================

在我找到解决方案的同时,我放弃了它,因为似乎没有记录在案:

创建“ router”时,我必须将language选项添加为mapbox函数的参数:

L.routing.mapbox(this.key.MapboxKey, {language: 'fr'}),