当在 MapBox 中找不到其他语言时,如何将标签默认为英语?

How can I default labels to English when not found in other language in MapBox?

我正在尝试支持我的地图的西班牙语用户,并且已经弄清楚如何将所有标注图层设置为某种语言:

const langCode = Math.random() < 0.5 ? "en" | "es";
const layers = this.mapbox.getStyle().layers.filter((it) => it.id.includes("label"))
layers.forEach((layer) => {
  this.mapbox.setLayoutProperty(layer.id, "text-field", [
    "get",
    `name_${langCode}`
  ])
});

问题是在西班牙语模式下一半的地图最终是空的。如果没有其他语言存在,我希望将英语作为默认备份。我该怎么做?

您可以使用 coalesce 将默认值设置为英语

https://docs.mapbox.com/mapbox-gl-js/style-spec/expressions/#coalesce https://docs.mapbox.com/mapbox-gl-js/example/fallback-image/

我想代码应该是这样的

layers.forEach((layer) => {
  this.mapbox.setLayoutProperty(layer.id, "text-field", [
    "coalesce",
    ["get", `name_${langCode}`],
    // default to english if not found
    ["get", `name_en`],
  ])
})