Leaflet.Routing.Control语言设置失效问题求助
解决Leaflet Routing Control西班牙语设置不生效的问题
看起来你在给Leaflet路由组件设置language: 'sp'时没生效,我来帮你排查下可能的原因和解决办法:
1. 确认是否引入了西班牙语语言包
Leaflet Routing Machine(LRM)默认只包含英文翻译,其他语言需要单独引入对应的i18n文件。你需要先引入西班牙语的语言脚本,加载顺序很重要:
<!-- 先引入Leaflet和LRM核心文件 --> <script src="leaflet.js"></script> <script src="leaflet-routing-machine.js"></script> <!-- 再引入西班牙语语言包 --> <script src="leaflet-routing-machine.es.js"></script>
语言包必须在LRM核心文件之后加载,不然无法覆盖默认的英文翻译。
2. 修正语言代码的拼写
LRM采用ISO 639-1标准语言代码,西班牙语的正确代码是es而非sp。你需要把配置里的language: 'sp'改成language: 'es'。
3. 同时配置Mapbox Router的语言
因为你用的是Mapbox路由服务,除了LRM界面的翻译,Mapbox返回的路线指引文本也需要单独设置语言。可以在初始化Mapbox Router时添加language参数:
const createRoutingControl = () => { L.Routing.control({ router: L.Routing.mapbox(config.features.routing.key, { language: 'es' // 给Mapbox路由API设置西班牙语 }), language: 'es', // 给LRM界面设置西班牙语 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; // 注意这里你之前的代码疑似漏写了返回语句 } }))([], { // 你的Plan配置项 }) }).addTo(map); }
4. 手动定义翻译(如果找不到官方语言包)
如果找不到官方的西班牙语语言包,也可以手动自定义翻译内容:
L.Routing.addLocale('es', { locale: 'es-ES', languageNames: { 'es': 'Español' }, routeSummaryTemplate: function (route, i, n) { return `${i + 1} de ${n}: ${route.summary.totalDistance}, ${route.summary.totalTime}`; }, errorMessages: { noRoute: 'No se pudo encontrar una ruta', serverError: 'Error al conectar con el servidor de rutas', // 补充其他需要翻译的提示文本 } });
按照以上步骤调整后,应该就能正常显示西班牙语的路由界面和路线指引了。
内容的提问来源于stack exchange,提问作者ABT
相关产品推荐
相关产品推荐

