更新:
我正在尝试用语言翻译传单路由组件:' 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 ...(以及更多地方只测试它)并且它不起作用(地图不显示)
答案 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 © <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 © <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'}),