Fehlende Umlaute in Drucklayout-Hinweisen und -Beschriftungen behoben (#42)

Weitere Fundstellen aus der gezielten Umlaut-Pruefung: MessageBox-/Label-Texte
in print_logic.py, print_layout.py, print_layout_baufreigabe.py und
print_tab.py, die wortwoertlich als ASCII generiert wurden ('gueltig',
'verfuegbar', 'waehlen', 'Massstab' als Anzeigetext, 'Geprueft: '-Label).
Interne Bezeichner (aktion-Codes, Projektvariablen-Keys, Item-IDs) bewusst
unveraendert gelassen, um bestehende Log-/Vergleichslogik nicht zu brechen.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MneDjzrjmbpQt8udFYxN9e
This commit is contained in:
2026-09-14 12:09:30 +02:00
co-authored by Claude Sonnet 5
parent a754fcfe34
commit 72844cd257
4 changed files with 38 additions and 38 deletions
+1 -1
View File
@@ -340,7 +340,7 @@ class PrintLayout:
("[% @sn_landkreise_proj %]", 16.0, -48.0, 171.0, 4.0, "Format_1", "Landkreis"), ("[% @sn_landkreise_proj %]", 16.0, -48.0, 171.0, 4.0, "Format_1", "Landkreis"),
("[% @sn_kartenname %]", 16.0, -32.0, 137.0, 12.0, "Format_3", "Kartenname"), ("[% @sn_kartenname %]", 16.0, -32.0, 137.0, 12.0, "Format_3", "Kartenname"),
("Gefertigt: ", 16.0, -23.0, 81.0, 4.0, "Format_1", "Gefertigt"), ("Gefertigt: ", 16.0, -23.0, 81.0, 4.0, "Format_1", "Gefertigt"),
("Geprueft: ", 101.0, -23.0, 81.0, 4.0, "Format_1", "Geprüft"), ("Geprüft: ", 101.0, -23.0, 81.0, 4.0, "Format_1", "Geprüft"),
( (
"Maßstab: 1 : [%round(map_get(item_variables('Hauptkarte'),'map_scale'),0)%]", "Maßstab: 1 : [%round(map_get(item_variables('Hauptkarte'),'map_scale'),0)%]",
16.0, 16.0,
+6 -6
View File
@@ -105,19 +105,19 @@ class PrintLayoutBaufreigabe(PrintLayout):
name: Name des Layouts name: Name des Layouts
din_format: "DIN A3" oder "DIN A4" din_format: "DIN A3" oder "DIN A4"
map_width_mm: Breite der Hauptkarte map_width_mm: Breite der Hauptkarte
map_height_mm: Hoehe der Hauptkarte map_height_mm: Höhe der Hauptkarte
extent: QgsRectangle der Kartenausdehnung extent: QgsRectangle der Kartenausdehnung
plotmassstab: Plotmassstab (z.B. 5000 fuer 1:5000) plotmassstab: Plotmaßstab (z.B. 5000 für 1:5000)
thema: Name des Visibility-Presets (optional) thema: Name des Visibility-Presets (optional)
fit_extent_to_map: Extent bei Bedarf auf das Karten-Seitenverhaeltnis erweitern fit_extent_to_map: Extent bei Bedarf auf das Karten-Seitenverhältnis erweitern
Returns: Returns:
QgsPrintLayout objektInstance (wird im Layout-Dialog geoeffnet) QgsPrintLayout objektInstance (wird im Layout-Dialog geöffnet)
Raises: Raises:
ValueError: Falls Name bereits existiert oder Format ungueltig ist ValueError: Falls Name bereits existiert oder Format ungültig ist
""" """
# Seitenformat auswaehlen (nur A3/A4 im Querformat) # Seitenformat auswählen (nur A3/A4 im Querformat)
if din_format == "DIN A3": if din_format == "DIN A3":
page_width_mm, page_height_mm = self._DIN_A3_LANDSCAPE page_width_mm, page_height_mm = self._DIN_A3_LANDSCAPE
elif din_format == "DIN A4": elif din_format == "DIN A4":
+26 -26
View File
@@ -125,8 +125,8 @@ class PrintLogic:
def _show_target_size_too_small(self) -> dict: def _show_target_size_too_small(self) -> dict:
self.pruefmanager.zeige_hinweis( self.pruefmanager.zeige_hinweis(
"Zielgroesse zu klein", "Zielgröße zu klein",
"Die gewaehlte Zielgroesse reicht fuer den Einzelblatt-Druck nicht aus.", "Die gewählte Zielgröße reicht für den Einzelblatt-Druck nicht aus.",
) )
return self._failed_result() return self._failed_result()
@@ -348,7 +348,7 @@ class PrintLogic:
if int(cast(Any, selected_count())) == 0: if int(cast(Any, selected_count())) == 0:
self.pruefmanager.zeige_hinweis( self.pruefmanager.zeige_hinweis(
"Atlas Layer erstellen", "Atlas Layer erstellen",
"Auf dem Layer sind keine Features ausgewaehlt.", "Auf dem Layer sind keine Features ausgewählt.",
) )
return None, "" return None, ""
except Exception: except Exception:
@@ -367,7 +367,7 @@ class PrintLogic:
if qgs_vector_layer is None: if qgs_vector_layer is None:
self.pruefmanager.zeige_hinweis( self.pruefmanager.zeige_hinweis(
"Atlas Layer erstellen", "Atlas Layer erstellen",
"QgsVectorLayer ist nicht verfuegbar.", "QgsVectorLayer ist nicht verfügbar.",
) )
return None, "" return None, ""
@@ -392,7 +392,7 @@ class PrintLogic:
) )
return None, "" return None, ""
# Ausgewaehlte Features kopieren # Ausgewählte Features kopieren
try: try:
get_selected = getattr(source_layer, "selectedFeatures", None) get_selected = getattr(source_layer, "selectedFeatures", None)
if not callable(get_selected): if not callable(get_selected):
@@ -400,15 +400,15 @@ class PrintLogic:
selected_features = list(cast(Any, get_selected())) selected_features = list(cast(Any, get_selected()))
if not selected_features: if not selected_features:
raise Exception("Keine Features ausgewaehlt") raise Exception("Keine Features ausgewählt")
qgs_feature = self._import_qgis_symbol("qgis.core", "QgsFeature") qgs_feature = self._import_qgis_symbol("qgis.core", "QgsFeature")
if qgs_feature is None: if qgs_feature is None:
raise Exception("QgsFeature Symbol nicht verfuegbar") raise Exception("QgsFeature Symbol nicht verfügbar")
data_provider = getattr(atlas_layer, "dataProvider", lambda: None)() data_provider = getattr(atlas_layer, "dataProvider", lambda: None)()
if data_provider is None: if data_provider is None:
raise Exception("dataProvider nicht verfuegbar") raise Exception("dataProvider nicht verfügbar")
new_features = [] new_features = []
for source_feature in selected_features: for source_feature in selected_features:
@@ -483,7 +483,7 @@ class PrintLogic:
project = QgsProject.instance() project = QgsProject.instance()
layout_manager = getattr(project, "layoutManager", lambda: None)() layout_manager = getattr(project, "layoutManager", lambda: None)()
if layout_manager is None: if layout_manager is None:
self.pruefmanager.zeige_hinweis("Atlas konfigurieren", "Layout Manager nicht verfuegbar.") self.pruefmanager.zeige_hinweis("Atlas konfigurieren", "Layout Manager nicht verfügbar.")
return False return False
if not layout_name: if not layout_name:
@@ -672,7 +672,7 @@ class PrintLogic:
if map_canvas is None: if map_canvas is None:
self.pruefmanager.zeige_hinweis( self.pruefmanager.zeige_hinweis(
"Druckrechteck", "Druckrechteck",
"Das Kartenfenster ist nicht verfuegbar.", "Das Kartenfenster ist nicht verfügbar.",
) )
return False return False
@@ -684,7 +684,7 @@ class PrintLogic:
if None in (qgs_geometry, qgs_rectangle, qgs_wkb_types, qgs_map_tool_emit_point, qgs_rubber_band): if None in (qgs_geometry, qgs_rectangle, qgs_wkb_types, qgs_map_tool_emit_point, qgs_rubber_band):
self.pruefmanager.zeige_hinweis( self.pruefmanager.zeige_hinweis(
"Druckrechteck", "Druckrechteck",
"Die Rechteck-Erfassung ist in dieser QGIS-Umgebung nicht verfuegbar.", "Die Rechteck-Erfassung ist in dieser QGIS-Umgebung nicht verfügbar.",
) )
return False return False
@@ -736,13 +736,13 @@ class PrintLogic:
if width <= 0 or height <= 0: if width <= 0 or height <= 0:
logic.pruefmanager.zeige_hinweis( logic.pruefmanager.zeige_hinweis(
"Druckrechteck", "Druckrechteck",
"Das gezeichnete Rechteck ist ungueltig.", "Das gezeichnete Rechteck ist ungültig.",
) )
else: else:
if logic._store_druckrechteck(layer, rectangle): if logic._store_druckrechteck(layer, rectangle):
logic.pruefmanager.zeige_hinweis( logic.pruefmanager.zeige_hinweis(
"Druckrechteck", "Druckrechteck",
"Das Druckrechteck wurde uebernommen.", "Das Druckrechteck wurde übernommen.",
) )
try: try:
self.rubber_band.reset(polygon_geometry) self.rubber_band.reset(polygon_geometry)
@@ -920,7 +920,7 @@ class PrintLogic:
if extent is None: if extent is None:
self.pruefmanager.zeige_hinweis( self.pruefmanager.zeige_hinweis(
"Druckbereich", "Druckbereich",
"Das aktuelle Kartenfenster liefert keine gueltige Ausdehnung.", "Das aktuelle Kartenfenster liefert keine gültige Ausdehnung.",
) )
return None, None return None, None
return extent, None return extent, None
@@ -931,7 +931,7 @@ class PrintLogic:
if extent is None: if extent is None:
self.pruefmanager.zeige_hinweis( self.pruefmanager.zeige_hinweis(
"Druckbereich", "Druckbereich",
"Auf dem aktuellen Layer sind keine gueltigen Objekte ausgewaehlt.", "Auf dem aktuellen Layer sind keine gültigen Objekte ausgewählt.",
) )
return None, None return None, None
return self._buffer_extent(extent, plotmassstab), None return self._buffer_extent(extent, plotmassstab), None
@@ -948,7 +948,7 @@ class PrintLogic:
if not ergebnis.ok: if not ergebnis.ok:
self.pruefmanager.zeige_hinweis( self.pruefmanager.zeige_hinweis(
"Verfahrensgebiets-Layer angeben", "Verfahrensgebiets-Layer angeben",
"Kein gueltiger Verfahrensgebiets-Layer gefunden. Bitte Layerauswahl im jeweiligen Plugin setzen.", "Kein gültiger Verfahrensgebiets-Layer gefunden. Bitte Layerauswahl im jeweiligen Plugin setzen.",
) )
return None, None return None, None
@@ -1001,12 +1001,12 @@ class PrintLogic:
required_map_height_mm: float, required_map_height_mm: float,
max_format: str = "DIN A3", max_format: str = "DIN A3",
) -> tuple[str, float, float, float, float, bool]: ) -> tuple[str, float, float, float, float, bool]:
"""Waehlt fuer Baufreigabe ein Blatt im Querformat. """Wählt für Baufreigabe ein Blatt im Querformat.
Args: Args:
required_map_width_mm: benoetigte Breite der Hauptkarte in mm required_map_width_mm: benötigte Breite der Hauptkarte in mm
required_map_height_mm: benoetigte Hoehe der Hauptkarte in mm required_map_height_mm: benötigte Höhe der Hauptkarte in mm
max_format: maximale Blattgroesse, standardmaessig DIN A3 max_format: maximale Blattgröße, standardmäßig DIN A3
Returns: Returns:
(din_format, page_width_mm, page_height_mm, map_w_mm, map_h_mm, fallback_applied) (din_format, page_width_mm, page_height_mm, map_w_mm, map_h_mm, fallback_applied)
@@ -1029,8 +1029,8 @@ class PrintLogic:
if map_w >= required_map_width_mm and map_h >= required_map_height_mm: if map_w >= required_map_width_mm and map_h >= required_map_height_mm:
return din_format, page_w, page_h, map_w, map_h, False return din_format, page_w, page_h, map_w, map_h, False
# Wenn der gewuenschte Ausschnitt nicht passt, verwende das maximal erlaubte Blatt # Wenn der gewünschte Ausschnitt nicht passt, verwende das maximal erlaubte Blatt
# und erweitere die Hauptkarte auf die verfuegbare Kartenflaeche (zentriert per fit_extent_to_map). # und erweitere die Hauptkarte auf die verfügbare Kartenfläche (zentriert per fit_extent_to_map).
din_format, page_w, page_h = limited_candidates[-1] din_format, page_w, page_h = limited_candidates[-1]
map_w = max(page_w - BAUFREIGABE_LAYOUT_FIXBREITE_MM, 50.0) map_w = max(page_w - BAUFREIGABE_LAYOUT_FIXBREITE_MM, 50.0)
map_h = max(page_h - BAUFREIGABE_LAYOUT_FIXHOEHE_MM, 50.0) map_h = max(page_h - BAUFREIGABE_LAYOUT_FIXHOEHE_MM, 50.0)
@@ -1059,7 +1059,7 @@ class PrintLogic:
return map_width_mm + fixed_width_mm, map_height_mm + fixed_height_mm return map_width_mm + fixed_width_mm, map_height_mm + fixed_height_mm
def _get_required_map_dimensions_mm(self, extent: Any, plotmassstab: float) -> tuple[float, float]: def _get_required_map_dimensions_mm(self, extent: Any, plotmassstab: float) -> tuple[float, float]:
"""Berechnet die benoetigte Kartenfenstergroesse in mm fuer Extent und Massstab.""" """Berechnet die benötigte Kartenfenstergröße in mm für Extent und Maßstab."""
if extent is None or not isinstance(plotmassstab, (int, float)) or plotmassstab <= 0: if extent is None or not isinstance(plotmassstab, (int, float)) or plotmassstab <= 0:
return 0.0, 0.0 return 0.0, 0.0
@@ -1077,7 +1077,7 @@ class PrintLogic:
required_map_height_mm: float, required_map_height_mm: float,
max_format: str, max_format: str,
) -> tuple[float, float, float, float] | None: ) -> tuple[float, float, float, float] | None:
"""Waehlt das kleinste passende DIN-Blatt fuer das Standardlayout.""" """Wählt das kleinste passende DIN-Blatt für das Standardlayout."""
try: try:
max_index = DIN_AUTO_REIHENFOLGE.index(max_format) max_index = DIN_AUTO_REIHENFOLGE.index(max_format)
except ValueError: except ValueError:
@@ -1170,7 +1170,7 @@ class PrintLogic:
resolved_layer = layer or self._resolve_layer_from_project() resolved_layer = layer or self._resolve_layer_from_project()
if kartenname_auswahl not in (KARTENNAME_38, KARTENNAME_41, KARTENNAME_BAUFREIGABE): if kartenname_auswahl not in (KARTENNAME_38, KARTENNAME_41, KARTENNAME_BAUFREIGABE):
self.pruefmanager.zeige_hinweis("Kartennamen waehlen", "Kartennamen waehlen") self.pruefmanager.zeige_hinweis("Kartennamen wählen", "Kartennamen wählen")
return self._failed_result() return self._failed_result()
if massstab_auswahl == MASSSTAB_WIE_KARTENFENSTER: if massstab_auswahl == MASSSTAB_WIE_KARTENFENSTER:
@@ -1191,7 +1191,7 @@ class PrintLogic:
massstab_zahl = float(PLOTMASSSTAB_BY_AUSWAHL.get(massstab_auswahl, 0)) massstab_zahl = float(PLOTMASSSTAB_BY_AUSWAHL.get(massstab_auswahl, 0))
if massstab_zahl <= 0: if massstab_zahl <= 0:
self.pruefmanager.zeige_hinweis("Massstab fehlt", "Kein gueltiger Massstab angegeben.") self.pruefmanager.zeige_hinweis("Maßstab fehlt", "Kein gültiger Maßstab angegeben.")
return self._failed_result() return self._failed_result()
extent, layer_for_extent = self._resolve_extent(resolved_layer, druckbereich_auswahl, massstab_zahl) extent, layer_for_extent = self._resolve_extent(resolved_layer, druckbereich_auswahl, massstab_zahl)
+5 -5
View File
@@ -41,7 +41,7 @@ from sn_basis.modules.print_logic import (
KARTENNAME_VAR = "tab_b_kartenname" KARTENNAME_VAR = "tab_b_kartenname"
KARTENNAME_PLACEHOLDER = "Kartenname waehlen" KARTENNAME_PLACEHOLDER = "Kartenname wählen"
KARTENNAME_38 = "§38" KARTENNAME_38 = "§38"
KARTENNAME_41 = "§41" KARTENNAME_41 = "§41"
KARTENNAME_BAUFREIGABE = "Anlage zur Baufreigabe" KARTENNAME_BAUFREIGABE = "Anlage zur Baufreigabe"
@@ -130,7 +130,7 @@ class PrintTab(QWidget):
self._kartenname_combo = kartenname_combo self._kartenname_combo = kartenname_combo
main_layout.addWidget(kartenname_combo) main_layout.addWidget(kartenname_combo)
massstab_label = QLabel("Massstab") massstab_label = QLabel("Maßstab")
massstab_label.setStyleSheet("font-weight: bold; margin-top: 6px;") massstab_label.setStyleSheet("font-weight: bold; margin-top: 6px;")
main_layout.addWidget(massstab_label) main_layout.addWidget(massstab_label)
@@ -152,7 +152,7 @@ class PrintTab(QWidget):
self._thema_combo = thema_combo self._thema_combo = thema_combo
main_layout.addWidget(thema_combo) main_layout.addWidget(thema_combo)
zielgroesse_label = QLabel("max. Blattgroesse") zielgroesse_label = QLabel("max. Blattgröße")
zielgroesse_label.setStyleSheet("font-weight: bold; margin-top: 6px;") zielgroesse_label.setStyleSheet("font-weight: bold; margin-top: 6px;")
main_layout.addWidget(zielgroesse_label) main_layout.addWidget(zielgroesse_label)
@@ -610,7 +610,7 @@ class PrintTab(QWidget):
return None return None
def _on_atlas_layer_changed(self, layer_or_name: Any) -> None: def _on_atlas_layer_changed(self, layer_or_name: Any) -> None:
"""Speichert den ausgewaehlten Atlas-Layer als Layer-ID in Projektvariablen.""" """Speichert den ausgewählten Atlas-Layer als Layer-ID in Projektvariablen."""
if layer_or_name is None or layer_or_name == "": if layer_or_name is None or layer_or_name == "":
set_variable("sn_abdeckungslayer", "", scope="project") set_variable("sn_abdeckungslayer", "", scope="project")
return return
@@ -677,7 +677,7 @@ class PrintTab(QWidget):
self._populate_atlas_layer_combo() self._populate_atlas_layer_combo()
def _populate_atlas_layer_combo(self) -> None: def _populate_atlas_layer_combo(self) -> None:
"""Fallback-Befuellung, falls kein echtes QgsMapLayerComboBox Verhalten verfuegbar ist.""" """Fallback-Befüllung, falls kein echtes QgsMapLayerComboBox Verhalten verfügbar ist."""
if not self._atlas_layer_combo: if not self._atlas_layer_combo:
return return