File size: 2,114 Bytes
008947a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
"""Map layer labels and conversion helpers."""

from __future__ import annotations

from dataclasses import dataclass


@dataclass(frozen=True)
class LayerDefinition:
    key: str
    en: str
    cn: str


LAYERS: tuple[LayerDefinition, ...] = (
    LayerDefinition("motorway", "Motorway", "高速公路"),
    LayerDefinition("primary", "Primary Roads", "主干道"),
    LayerDefinition("secondary", "Secondary Roads", "次干道"),
    LayerDefinition("water", "Water", "水域"),
    LayerDefinition("parks", "Parks", "公园"),
)

LAYER_KEYS = [layer.key for layer in LAYERS]
LAYERS_EN = [layer.en for layer in LAYERS]
LAYERS_CN = [layer.cn for layer in LAYERS]

_LABEL_TO_KEY = {label: layer.key for layer in LAYERS for label in (layer.en, layer.cn)}
_KEY_TO_LABEL = {
    "en": {layer.key: layer.en for layer in LAYERS},
    "cn": {layer.key: layer.cn for layer in LAYERS},
}


def labels_for_language(lang: str) -> list[str]:
    """Return layer labels for a UI language code."""
    return LAYERS_EN if lang == "en" else LAYERS_CN


def selected_labels_to_keys(selected_labels: list[str] | tuple[str, ...] | None) -> list[str]:
    """Convert localized UI layer labels to stable layer keys."""
    if not selected_labels:
        return []
    return [_LABEL_TO_KEY[label] for label in selected_labels if label in _LABEL_TO_KEY]


def keys_to_labels(keys: list[str] | tuple[str, ...], lang: str) -> list[str]:
    """Convert stable layer keys to localized UI labels."""
    labels = _KEY_TO_LABEL["en" if lang == "en" else "cn"]
    return [labels[key] for key in keys if key in labels]


def selected_layer_flags(selected_labels: list[str] | tuple[str, ...] | None) -> dict[str, bool]:
    """Return render keyword flags for selected localized layer labels."""
    selected_keys = set(selected_labels_to_keys(selected_labels))
    return {
        "show_motorway": "motorway" in selected_keys,
        "show_primary": "primary" in selected_keys,
        "show_secondary": "secondary" in selected_keys,
        "show_water": "water" in selected_keys,
        "show_parks": "parks" in selected_keys,
    }