From 72844cd25761a202e48cf1252e5cb064a6e72c56 Mon Sep 17 00:00:00 2001 From: daniel Date: Mon, 14 Sep 2026 12:09:30 +0200 Subject: [PATCH] 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 Claude-Session: https://claude.ai/code/session_01MneDjzrjmbpQt8udFYxN9e --- modules/print_layout.py | 2 +- modules/print_layout_baufreigabe.py | 12 +++---- modules/print_logic.py | 52 ++++++++++++++--------------- ui/tabs/print_tab.py | 10 +++--- 4 files changed, 38 insertions(+), 38 deletions(-) diff --git a/modules/print_layout.py b/modules/print_layout.py index 2fe01f7..70ebded 100644 --- a/modules/print_layout.py +++ b/modules/print_layout.py @@ -340,7 +340,7 @@ class PrintLayout: ("[% @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"), ("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)%]", 16.0, diff --git a/modules/print_layout_baufreigabe.py b/modules/print_layout_baufreigabe.py index 05c32f0..7f59e59 100644 --- a/modules/print_layout_baufreigabe.py +++ b/modules/print_layout_baufreigabe.py @@ -105,19 +105,19 @@ class PrintLayoutBaufreigabe(PrintLayout): name: Name des Layouts din_format: "DIN A3" oder "DIN A4" map_width_mm: Breite der Hauptkarte - map_height_mm: Hoehe der Hauptkarte + map_height_mm: Höhe der Hauptkarte 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) - 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: - QgsPrintLayout objektInstance (wird im Layout-Dialog geoeffnet) + QgsPrintLayout objektInstance (wird im Layout-Dialog geöffnet) 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": page_width_mm, page_height_mm = self._DIN_A3_LANDSCAPE elif din_format == "DIN A4": diff --git a/modules/print_logic.py b/modules/print_logic.py index 74a74b4..95f1278 100644 --- a/modules/print_logic.py +++ b/modules/print_logic.py @@ -125,8 +125,8 @@ class PrintLogic: def _show_target_size_too_small(self) -> dict: self.pruefmanager.zeige_hinweis( - "Zielgroesse zu klein", - "Die gewaehlte Zielgroesse reicht fuer den Einzelblatt-Druck nicht aus.", + "Zielgröße zu klein", + "Die gewählte Zielgröße reicht für den Einzelblatt-Druck nicht aus.", ) return self._failed_result() @@ -348,7 +348,7 @@ class PrintLogic: if int(cast(Any, selected_count())) == 0: self.pruefmanager.zeige_hinweis( "Atlas Layer erstellen", - "Auf dem Layer sind keine Features ausgewaehlt.", + "Auf dem Layer sind keine Features ausgewählt.", ) return None, "" except Exception: @@ -367,7 +367,7 @@ class PrintLogic: if qgs_vector_layer is None: self.pruefmanager.zeige_hinweis( "Atlas Layer erstellen", - "QgsVectorLayer ist nicht verfuegbar.", + "QgsVectorLayer ist nicht verfügbar.", ) return None, "" @@ -392,7 +392,7 @@ class PrintLogic: ) return None, "" - # Ausgewaehlte Features kopieren + # Ausgewählte Features kopieren try: get_selected = getattr(source_layer, "selectedFeatures", None) if not callable(get_selected): @@ -400,15 +400,15 @@ class PrintLogic: selected_features = list(cast(Any, get_selected())) if not selected_features: - raise Exception("Keine Features ausgewaehlt") + raise Exception("Keine Features ausgewählt") qgs_feature = self._import_qgis_symbol("qgis.core", "QgsFeature") 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)() if data_provider is None: - raise Exception("dataProvider nicht verfuegbar") + raise Exception("dataProvider nicht verfügbar") new_features = [] for source_feature in selected_features: @@ -483,7 +483,7 @@ class PrintLogic: project = QgsProject.instance() layout_manager = getattr(project, "layoutManager", lambda: 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 if not layout_name: @@ -672,7 +672,7 @@ class PrintLogic: if map_canvas is None: self.pruefmanager.zeige_hinweis( "Druckrechteck", - "Das Kartenfenster ist nicht verfuegbar.", + "Das Kartenfenster ist nicht verfügbar.", ) 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): self.pruefmanager.zeige_hinweis( "Druckrechteck", - "Die Rechteck-Erfassung ist in dieser QGIS-Umgebung nicht verfuegbar.", + "Die Rechteck-Erfassung ist in dieser QGIS-Umgebung nicht verfügbar.", ) return False @@ -736,13 +736,13 @@ class PrintLogic: if width <= 0 or height <= 0: logic.pruefmanager.zeige_hinweis( "Druckrechteck", - "Das gezeichnete Rechteck ist ungueltig.", + "Das gezeichnete Rechteck ist ungültig.", ) else: if logic._store_druckrechteck(layer, rectangle): logic.pruefmanager.zeige_hinweis( "Druckrechteck", - "Das Druckrechteck wurde uebernommen.", + "Das Druckrechteck wurde übernommen.", ) try: self.rubber_band.reset(polygon_geometry) @@ -920,7 +920,7 @@ class PrintLogic: if extent is None: self.pruefmanager.zeige_hinweis( "Druckbereich", - "Das aktuelle Kartenfenster liefert keine gueltige Ausdehnung.", + "Das aktuelle Kartenfenster liefert keine gültige Ausdehnung.", ) return None, None return extent, None @@ -931,7 +931,7 @@ class PrintLogic: if extent is None: self.pruefmanager.zeige_hinweis( "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 self._buffer_extent(extent, plotmassstab), None @@ -948,7 +948,7 @@ class PrintLogic: if not ergebnis.ok: self.pruefmanager.zeige_hinweis( "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 @@ -1001,12 +1001,12 @@ class PrintLogic: required_map_height_mm: float, max_format: str = "DIN A3", ) -> tuple[str, float, float, float, float, bool]: - """Waehlt fuer Baufreigabe ein Blatt im Querformat. + """Wählt für Baufreigabe ein Blatt im Querformat. Args: - required_map_width_mm: benoetigte Breite der Hauptkarte in mm - required_map_height_mm: benoetigte Hoehe der Hauptkarte in mm - max_format: maximale Blattgroesse, standardmaessig DIN A3 + required_map_width_mm: benötigte Breite der Hauptkarte in mm + required_map_height_mm: benötigte Höhe der Hauptkarte in mm + max_format: maximale Blattgröße, standardmäßig DIN A3 Returns: (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: return din_format, page_w, page_h, map_w, map_h, False - # Wenn der gewuenschte Ausschnitt nicht passt, verwende das maximal erlaubte Blatt - # und erweitere die Hauptkarte auf die verfuegbare Kartenflaeche (zentriert per fit_extent_to_map). + # Wenn der gewünschte Ausschnitt nicht passt, verwende das maximal erlaubte Blatt + # 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] map_w = max(page_w - BAUFREIGABE_LAYOUT_FIXBREITE_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 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: return 0.0, 0.0 @@ -1077,7 +1077,7 @@ class PrintLogic: required_map_height_mm: float, max_format: str, ) -> 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: max_index = DIN_AUTO_REIHENFOLGE.index(max_format) except ValueError: @@ -1170,7 +1170,7 @@ class PrintLogic: resolved_layer = layer or self._resolve_layer_from_project() 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() if massstab_auswahl == MASSSTAB_WIE_KARTENFENSTER: @@ -1191,7 +1191,7 @@ class PrintLogic: massstab_zahl = float(PLOTMASSSTAB_BY_AUSWAHL.get(massstab_auswahl, 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() extent, layer_for_extent = self._resolve_extent(resolved_layer, druckbereich_auswahl, massstab_zahl) diff --git a/ui/tabs/print_tab.py b/ui/tabs/print_tab.py index 953500e..300354e 100644 --- a/ui/tabs/print_tab.py +++ b/ui/tabs/print_tab.py @@ -41,7 +41,7 @@ from sn_basis.modules.print_logic import ( KARTENNAME_VAR = "tab_b_kartenname" -KARTENNAME_PLACEHOLDER = "Kartenname waehlen" +KARTENNAME_PLACEHOLDER = "Kartenname wählen" KARTENNAME_38 = "§38" KARTENNAME_41 = "§41" KARTENNAME_BAUFREIGABE = "Anlage zur Baufreigabe" @@ -130,7 +130,7 @@ class PrintTab(QWidget): self._kartenname_combo = 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;") main_layout.addWidget(massstab_label) @@ -152,7 +152,7 @@ class PrintTab(QWidget): self._thema_combo = 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;") main_layout.addWidget(zielgroesse_label) @@ -610,7 +610,7 @@ class PrintTab(QWidget): return 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 == "": set_variable("sn_abdeckungslayer", "", scope="project") return @@ -677,7 +677,7 @@ class PrintTab(QWidget): self._populate_atlas_layer_combo() 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: return