diff --git a/CLAUDE.md b/CLAUDE.md index f5ab07f..e13e1a6 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -15,7 +15,7 @@ The application follows a modular Go architecture: - **Controllers**: Route handlers for different content types (issues, agents, places, categories, search, quickfilters) - **View Models**: Data structures for template rendering with pre-processed business logic (`viewmodels/`) - **XML Models**: Data structures for parsing source XML files (`xmlmodels/`) -- **Providers**: External service integrations (Git, GND, XML parsing, search) +- **Providers**: External service integrations (Git, GND, Geonames, XML parsing, search) - **Templating**: Custom template engine with Go template integration and helper functions - **Views**: Frontend assets and templates in `views/` directory @@ -762,4 +762,192 @@ The application provides sophisticated person and organization browsing through - 404 handling for invalid agent IDs - Automatic fallback for missing letters - Smooth transitions between view modes -- Proper state management across HTMX swaps \ No newline at end of file +- Proper state management across HTMX swaps + +## Places System (/ort/) with Geonames Integration + +The application provides comprehensive place browsing with sophisticated geographic information integration through the Geonames API, offering modern place names, coordinates, and Wikipedia links. + +### Architecture & Data Flow + +**Geonames Provider** (`providers/geonames/`): +- Local JSON file caching system for offline operation +- API integration with geonames.org for geographic data enrichment +- Structured data models for places, coordinates, alternate names, and external links +- Automatic fallback between cached data and live API calls + +**Places Controller** (`controllers/ort_controller.go`): +- Handles both overview (`/ort/`) and individual place views (`/ort/{id}`) +- Integrates Geonames data with XML place data +- Template rendering with pre-processed geographic information + +**View Models** (`viewmodels/place_view.go`): +- `PlaceVM` struct for individual place display with Geonames integration +- `PlacesOverviewVM` for places listing with geographic context +- Pre-processed modern country names and local toponyms + +### Geonames Data Integration + +**Template Functions** (`app/kgpz.go`): +- `GetGeonames` - Retrieves cached or live Geonames data for places +- Geographic data accessible throughout all templates +- String manipulation functions for name comparisons and formatting + +**Data Structure**: +```go +type GeonamesPlace struct { + GeonameID int `json:"geonameId"` + Name string `json:"name"` + ToponymName string `json:"toponymName"` + CountryName string `json:"countryName"` + Lat string `json:"lat"` + Lng string `json:"lng"` + AlternateNames []AlternateName `json:"alternateNames"` + WikipediaURL string `json:"wikipediaURL"` +} +``` + +### Modern Place Name Display Logic + +**German Name Priority System**: +1. **Primary**: Search for German (`"de"`) alternate names in Geonames data +2. **Preferred Names**: Prioritize names with `IsPreferredName = true` +3. **Fallback**: Use `ToponymName` if no German names available +4. **Display Rule**: Only show modern names if they differ from historical German names + +**Implementation**: +```gohtml +{{- $modernName := "" -}} +{{- $hasGermanName := false -}} +{{- range $altName := $geonames.AlternateNames -}} +{{- if eq $altName.Lang "de" -}} +{{- $hasGermanName = true -}} +{{- if $altName.IsPreferredName -}} +{{- $modernName = $altName.Name -}} +{{- break -}} +{{- else if eq $modernName "" -}} +{{- $modernName = $altName.Name -}} +{{- end -}} +{{- end -}} +{{- end -}} +{{- if not $hasGermanName -}} +{{- $modernName = $geonames.ToponymName -}} +{{- end -}} +{{- if and (ne $modernName "") (ne (lower $modernName) (lower $mainPlaceName)) -}}, {{ $modernName }}{{- end }} +``` + +### Country Name Translations + +**Supported Countries with German Translations**: +- **France** → "heutiges Frankreich" +- **United Kingdom** → "heutiges Großbritannien" +- **Russia** → "heutiges Russland" +- **Czech Republic/Czechia** → "heutiges Tschechien" +- **Netherlands/The Netherlands** → "heutige Niederlande" +- **Poland** → "heutiges Polen" +- **Switzerland** → "heutige Schweiz" +- **Latvia** → "heutiges Lettland" +- **Sweden** → "heutiges Schweden" +- **Austria** → "heutiges Österreich" +- **Belgium** → "heutiges Belgien" +- **Slovakia** → "heutige Slowakei" +- **Finland** → "heutiges Finnland" +- **Denmark** → "heutiges Dänemark" + +**Display Format**: "heutiges [Country], [Local Name]" (only when local name differs) + +### Geographic Features + +**Coordinate Integration**: +- Clickable coordinates linking to OpenStreetMap +- Format: `https://www.openstreetmap.org/?mlat={lat}&mlon={lng}&zoom=12` +- Visual styling with map pin icons and hover effects + +**External Links**: +- **Wikipedia Integration**: Automatic Wikipedia link detection and display +- **Geonames Links**: Direct links to Geonames.org entries +- Consistent icon styling with external link security (`target="_blank"`, `rel="noopener noreferrer"`) + +### Template Structure + +**Individual Place View** (`views/routes/ort/body.gohtml`): +- **Header Section**: Place name with back navigation styled like agent pages +- **Geographic Info**: Modern country name with local toponyms when different +- **Coordinates**: Clickable OpenStreetMap links with proper formatting +- **External Links**: Wikipedia and Geonames integration with appropriate icons +- **Linked Articles**: "Verlinkte Beiträge" section showing associated newspaper pieces + +**Places Overview** (`views/routes/ort/`): +- **Streamlined Layout**: Removed non-functional alphabet navigation +- **Card Grid**: Responsive place cards with consistent heights (`h-24`) +- **Geographic Context**: Modern country names with local toponyms in overview cards +- **Clean Design**: Focus on essential information without cluttered indicators + +### Navigation & UI Improvements + +**Back Navigation**: +- **Style Consistency**: Matches agent page back button styling +- **Typography**: Large, bold text with arrow icon (`ri-arrow-left-line`) +- **Simplified Text**: "Orte" instead of "Zurück zur Übersicht" +- **Color Scheme**: Gray text with black hover, transition effects + +**External Link Styling**: +- **Consistent Icons**: Smaller Geonames symbols (`text-xl` instead of `text-2xl`) +- **No Underlines**: `no-underline` class for cleaner appearance +- **Hover Effects**: Opacity transitions for better user feedback + +### Data Processing & Caching + +**Geonames Provider Features**: +- **Local Caching**: JSON files stored locally to reduce API dependency +- **Automatic Fallback**: Graceful degradation when API unavailable +- **Data Enrichment**: Combines XML place data with geographic information +- **Performance**: Cached lookups for frequently accessed places + +**Template Integration**: +- **Helper Functions**: Accessible via `GetGeonames` template function +- **Error Handling**: Safe handling of missing or incomplete geographic data +- **Responsive Design**: Geographic information hidden for German places to reduce clutter + +### Usage Examples + +**Template Integration**: +```gohtml +{{ $geonames := GetGeonames .model.SelectedPlace.Place.ID }} +{{ if and (ne $geonames nil) (ne $geonames.CountryName "Germany") }} +

{{ $geonames.CountryName }}

+{{ end }} +``` + +**External Links**: +```gohtml +{{ if ne $geonames.WikipediaURL "" }} + + Wikipedia + +{{ end }} +``` + +**Coordinates**: +```gohtml +{{ if and (ne $geonames.Lat "") (ne $geonames.Lng "") }} + + {{ $geonames.Lat }}, {{ $geonames.Lng }} + +{{ end }} +``` + +### Error Handling & Fallbacks + +**Geographic Data Safety**: +- Graceful handling of missing Geonames data +- Safe template evaluation with null checks +- Fallback display for places without geographic information +- Error boundaries for external API failures + +**Template Robustness**: +- Case-insensitive name comparisons using `lower` template function +- Proper handling of empty alternate names arrays +- Safe string manipulation with whitespace control +- Consistent behavior across detail and overview templates \ No newline at end of file diff --git a/views/routes/ort/body.gohtml b/views/routes/ort/body.gohtml index 418d181..828d9e8 100644 --- a/views/routes/ort/body.gohtml +++ b/views/routes/ort/body.gohtml @@ -36,33 +36,257 @@ {{ $mainPlaceName = index .model.SelectedPlace.Place.Names 0 }} {{ end }} {{ if eq $geonames.CountryName "France" }} - heutiges Frankreich{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }} + heutiges Frankreich{{- $modernName := "" -}} +{{- $hasGermanName := false -}} +{{- range $altName := $geonames.AlternateNames -}} +{{- if eq $altName.Lang "de" -}} +{{- $hasGermanName = true -}} +{{- if $altName.IsPreferredName -}} +{{- $modernName = $altName.Name -}} +{{- break -}} +{{- else if eq $modernName "" -}} +{{- $modernName = $altName.Name -}} +{{- end -}} +{{- end -}} +{{- end -}} +{{- if not $hasGermanName -}} +{{- $modernName = $geonames.ToponymName -}} +{{- end -}} +{{- if and (ne $modernName "") (ne (lower $modernName) (lower $mainPlaceName)) -}}, {{ $modernName }}{{- end }} {{ else if eq $geonames.CountryName "United Kingdom" }} - heutiges Großbritannien{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }} + heutiges Großbritannien{{- $modernName := "" -}} +{{- $hasGermanName := false -}} +{{- range $altName := $geonames.AlternateNames -}} +{{- if eq $altName.Lang "de" -}} +{{- $hasGermanName = true -}} +{{- if $altName.IsPreferredName -}} +{{- $modernName = $altName.Name -}} +{{- break -}} +{{- else if eq $modernName "" -}} +{{- $modernName = $altName.Name -}} +{{- end -}} +{{- end -}} +{{- end -}} +{{- if not $hasGermanName -}} +{{- $modernName = $geonames.ToponymName -}} +{{- end -}} +{{- if and (ne $modernName "") (ne (lower $modernName) (lower $mainPlaceName)) -}}, {{ $modernName }}{{- end }} {{ else if eq $geonames.CountryName "Russia" }} - heutiges Russland{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }} + heutiges Russland{{- $modernName := "" -}} +{{- $hasGermanName := false -}} +{{- range $altName := $geonames.AlternateNames -}} +{{- if eq $altName.Lang "de" -}} +{{- $hasGermanName = true -}} +{{- if $altName.IsPreferredName -}} +{{- $modernName = $altName.Name -}} +{{- break -}} +{{- else if eq $modernName "" -}} +{{- $modernName = $altName.Name -}} +{{- end -}} +{{- end -}} +{{- end -}} +{{- if not $hasGermanName -}} +{{- $modernName = $geonames.ToponymName -}} +{{- end -}} +{{- if and (ne $modernName "") (ne (lower $modernName) (lower $mainPlaceName)) -}}, {{ $modernName }}{{- end }} {{ else if or (eq $geonames.CountryName "Czech Republic") (eq $geonames.CountryName "Czechia") }} - heutiges Tschechien{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }} + heutiges Tschechien{{- $modernName := "" -}} +{{- $hasGermanName := false -}} +{{- range $altName := $geonames.AlternateNames -}} +{{- if eq $altName.Lang "de" -}} +{{- $hasGermanName = true -}} +{{- if $altName.IsPreferredName -}} +{{- $modernName = $altName.Name -}} +{{- break -}} +{{- else if eq $modernName "" -}} +{{- $modernName = $altName.Name -}} +{{- end -}} +{{- end -}} +{{- end -}} +{{- if not $hasGermanName -}} +{{- $modernName = $geonames.ToponymName -}} +{{- end -}} +{{- if and (ne $modernName "") (ne (lower $modernName) (lower $mainPlaceName)) -}}, {{ $modernName }}{{- end }} {{ else if or (eq $geonames.CountryName "Netherlands") (eq $geonames.CountryName "The Netherlands") }} - heutige Niederlande{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }} + heutige Niederlande{{- $modernName := "" -}} +{{- $hasGermanName := false -}} +{{- range $altName := $geonames.AlternateNames -}} +{{- if eq $altName.Lang "de" -}} +{{- $hasGermanName = true -}} +{{- if $altName.IsPreferredName -}} +{{- $modernName = $altName.Name -}} +{{- break -}} +{{- else if eq $modernName "" -}} +{{- $modernName = $altName.Name -}} +{{- end -}} +{{- end -}} +{{- end -}} +{{- if not $hasGermanName -}} +{{- $modernName = $geonames.ToponymName -}} +{{- end -}} +{{- if and (ne $modernName "") (ne (lower $modernName) (lower $mainPlaceName)) -}}, {{ $modernName }}{{- end }} {{ else if eq $geonames.CountryName "Poland" }} - heutiges Polen{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }} + heutiges Polen{{- $modernName := "" -}} +{{- $hasGermanName := false -}} +{{- range $altName := $geonames.AlternateNames -}} +{{- if eq $altName.Lang "de" -}} +{{- $hasGermanName = true -}} +{{- if $altName.IsPreferredName -}} +{{- $modernName = $altName.Name -}} +{{- break -}} +{{- else if eq $modernName "" -}} +{{- $modernName = $altName.Name -}} +{{- end -}} +{{- end -}} +{{- end -}} +{{- if not $hasGermanName -}} +{{- $modernName = $geonames.ToponymName -}} +{{- end -}} +{{- if and (ne $modernName "") (ne (lower $modernName) (lower $mainPlaceName)) -}}, {{ $modernName }}{{- end }} {{ else if eq $geonames.CountryName "Switzerland" }} - heutige Schweiz{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }} + heutige Schweiz{{- $modernName := "" -}} +{{- $hasGermanName := false -}} +{{- range $altName := $geonames.AlternateNames -}} +{{- if eq $altName.Lang "de" -}} +{{- $hasGermanName = true -}} +{{- if $altName.IsPreferredName -}} +{{- $modernName = $altName.Name -}} +{{- break -}} +{{- else if eq $modernName "" -}} +{{- $modernName = $altName.Name -}} +{{- end -}} +{{- end -}} +{{- end -}} +{{- if not $hasGermanName -}} +{{- $modernName = $geonames.ToponymName -}} +{{- end -}} +{{- if and (ne $modernName "") (ne (lower $modernName) (lower $mainPlaceName)) -}}, {{ $modernName }}{{- end }} {{ else if eq $geonames.CountryName "Latvia" }} - heutiges Lettland{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }} + heutiges Lettland{{- $modernName := "" -}} +{{- $hasGermanName := false -}} +{{- range $altName := $geonames.AlternateNames -}} +{{- if eq $altName.Lang "de" -}} +{{- $hasGermanName = true -}} +{{- if $altName.IsPreferredName -}} +{{- $modernName = $altName.Name -}} +{{- break -}} +{{- else if eq $modernName "" -}} +{{- $modernName = $altName.Name -}} +{{- end -}} +{{- end -}} +{{- end -}} +{{- if not $hasGermanName -}} +{{- $modernName = $geonames.ToponymName -}} +{{- end -}} +{{- if and (ne $modernName "") (ne (lower $modernName) (lower $mainPlaceName)) -}}, {{ $modernName }}{{- end }} {{ else if eq $geonames.CountryName "Sweden" }} - heutiges Schweden{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }} + heutiges Schweden{{- $modernName := "" -}} +{{- $hasGermanName := false -}} +{{- range $altName := $geonames.AlternateNames -}} +{{- if eq $altName.Lang "de" -}} +{{- $hasGermanName = true -}} +{{- if $altName.IsPreferredName -}} +{{- $modernName = $altName.Name -}} +{{- break -}} +{{- else if eq $modernName "" -}} +{{- $modernName = $altName.Name -}} +{{- end -}} +{{- end -}} +{{- end -}} +{{- if not $hasGermanName -}} +{{- $modernName = $geonames.ToponymName -}} +{{- end -}} +{{- if and (ne $modernName "") (ne (lower $modernName) (lower $mainPlaceName)) -}}, {{ $modernName }}{{- end }} {{ else if eq $geonames.CountryName "Austria" }} - heutiges Österreich{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }} + heutiges Österreich{{- $modernName := "" -}} +{{- $hasGermanName := false -}} +{{- range $altName := $geonames.AlternateNames -}} +{{- if eq $altName.Lang "de" -}} +{{- $hasGermanName = true -}} +{{- if $altName.IsPreferredName -}} +{{- $modernName = $altName.Name -}} +{{- break -}} +{{- else if eq $modernName "" -}} +{{- $modernName = $altName.Name -}} +{{- end -}} +{{- end -}} +{{- end -}} +{{- if not $hasGermanName -}} +{{- $modernName = $geonames.ToponymName -}} +{{- end -}} +{{- if and (ne $modernName "") (ne (lower $modernName) (lower $mainPlaceName)) -}}, {{ $modernName }}{{- end }} {{ else if eq $geonames.CountryName "Belgium" }} - heutiges Belgien{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }} + heutiges Belgien{{- $modernName := "" -}} +{{- $hasGermanName := false -}} +{{- range $altName := $geonames.AlternateNames -}} +{{- if eq $altName.Lang "de" -}} +{{- $hasGermanName = true -}} +{{- if $altName.IsPreferredName -}} +{{- $modernName = $altName.Name -}} +{{- break -}} +{{- else if eq $modernName "" -}} +{{- $modernName = $altName.Name -}} +{{- end -}} +{{- end -}} +{{- end -}} +{{- if not $hasGermanName -}} +{{- $modernName = $geonames.ToponymName -}} +{{- end -}} +{{- if and (ne $modernName "") (ne (lower $modernName) (lower $mainPlaceName)) -}}, {{ $modernName }}{{- end }} {{ else if eq $geonames.CountryName "Slovakia" }} - heutige Slowakei{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }} + heutige Slowakei{{- $modernName := "" -}} +{{- $hasGermanName := false -}} +{{- range $altName := $geonames.AlternateNames -}} +{{- if eq $altName.Lang "de" -}} +{{- $hasGermanName = true -}} +{{- if $altName.IsPreferredName -}} +{{- $modernName = $altName.Name -}} +{{- break -}} +{{- else if eq $modernName "" -}} +{{- $modernName = $altName.Name -}} +{{- end -}} +{{- end -}} +{{- end -}} +{{- if not $hasGermanName -}} +{{- $modernName = $geonames.ToponymName -}} +{{- end -}} +{{- if and (ne $modernName "") (ne (lower $modernName) (lower $mainPlaceName)) -}}, {{ $modernName }}{{- end }} {{ else if eq $geonames.CountryName "Finland" }} - heutiges Finnland{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }} + heutiges Finnland{{- $modernName := "" -}} +{{- $hasGermanName := false -}} +{{- range $altName := $geonames.AlternateNames -}} +{{- if eq $altName.Lang "de" -}} +{{- $hasGermanName = true -}} +{{- if $altName.IsPreferredName -}} +{{- $modernName = $altName.Name -}} +{{- break -}} +{{- else if eq $modernName "" -}} +{{- $modernName = $altName.Name -}} +{{- end -}} +{{- end -}} +{{- end -}} +{{- if not $hasGermanName -}} +{{- $modernName = $geonames.ToponymName -}} +{{- end -}} +{{- if and (ne $modernName "") (ne (lower $modernName) (lower $mainPlaceName)) -}}, {{ $modernName }}{{- end }} {{ else if eq $geonames.CountryName "Denmark" }} - heutiges Dänemark{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }} + heutiges Dänemark{{- $modernName := "" -}} +{{- $hasGermanName := false -}} +{{- range $altName := $geonames.AlternateNames -}} +{{- if eq $altName.Lang "de" -}} +{{- $hasGermanName = true -}} +{{- if $altName.IsPreferredName -}} +{{- $modernName = $altName.Name -}} +{{- break -}} +{{- else if eq $modernName "" -}} +{{- $modernName = $altName.Name -}} +{{- end -}} +{{- end -}} +{{- end -}} +{{- if not $hasGermanName -}} +{{- $modernName = $geonames.ToponymName -}} +{{- end -}} +{{- if and (ne $modernName "") (ne (lower $modernName) (lower $mainPlaceName)) -}}, {{ $modernName }}{{- end }} {{ else }} {{ $geonames.CountryName }} {{ end }} @@ -188,18 +412,6 @@

Orte

- {{ if .model.AvailableLetters }} -
-

Nach Anfangsbuchstabe

-
- {{ range $letter := .model.AvailableLetters }} - - {{ $letter }} - - {{ end }} -
-
- {{ end }} {{ if .model.Places }} @@ -233,33 +445,257 @@ {{ $mainPlaceName = index $place.Names 0 }} {{ end }} {{ if eq $geonames.CountryName "France" }} - heutiges Frankreich{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }} + heutiges Frankreich{{- $modernName := "" -}} +{{- $hasGermanName := false -}} +{{- range $altName := $geonames.AlternateNames -}} +{{- if eq $altName.Lang "de" -}} +{{- $hasGermanName = true -}} +{{- if $altName.IsPreferredName -}} +{{- $modernName = $altName.Name -}} +{{- break -}} +{{- else if eq $modernName "" -}} +{{- $modernName = $altName.Name -}} +{{- end -}} +{{- end -}} +{{- end -}} +{{- if not $hasGermanName -}} +{{- $modernName = $geonames.ToponymName -}} +{{- end -}} +{{- if and (ne $modernName "") (ne (lower $modernName) (lower $mainPlaceName)) -}}, {{ $modernName }}{{- end }} {{ else if eq $geonames.CountryName "United Kingdom" }} - heutiges Großbritannien{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }} + heutiges Großbritannien{{- $modernName := "" -}} +{{- $hasGermanName := false -}} +{{- range $altName := $geonames.AlternateNames -}} +{{- if eq $altName.Lang "de" -}} +{{- $hasGermanName = true -}} +{{- if $altName.IsPreferredName -}} +{{- $modernName = $altName.Name -}} +{{- break -}} +{{- else if eq $modernName "" -}} +{{- $modernName = $altName.Name -}} +{{- end -}} +{{- end -}} +{{- end -}} +{{- if not $hasGermanName -}} +{{- $modernName = $geonames.ToponymName -}} +{{- end -}} +{{- if and (ne $modernName "") (ne (lower $modernName) (lower $mainPlaceName)) -}}, {{ $modernName }}{{- end }} {{ else if eq $geonames.CountryName "Russia" }} - heutiges Russland{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }} + heutiges Russland{{- $modernName := "" -}} +{{- $hasGermanName := false -}} +{{- range $altName := $geonames.AlternateNames -}} +{{- if eq $altName.Lang "de" -}} +{{- $hasGermanName = true -}} +{{- if $altName.IsPreferredName -}} +{{- $modernName = $altName.Name -}} +{{- break -}} +{{- else if eq $modernName "" -}} +{{- $modernName = $altName.Name -}} +{{- end -}} +{{- end -}} +{{- end -}} +{{- if not $hasGermanName -}} +{{- $modernName = $geonames.ToponymName -}} +{{- end -}} +{{- if and (ne $modernName "") (ne (lower $modernName) (lower $mainPlaceName)) -}}, {{ $modernName }}{{- end }} {{ else if or (eq $geonames.CountryName "Czech Republic") (eq $geonames.CountryName "Czechia") }} - heutiges Tschechien{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }} + heutiges Tschechien{{- $modernName := "" -}} +{{- $hasGermanName := false -}} +{{- range $altName := $geonames.AlternateNames -}} +{{- if eq $altName.Lang "de" -}} +{{- $hasGermanName = true -}} +{{- if $altName.IsPreferredName -}} +{{- $modernName = $altName.Name -}} +{{- break -}} +{{- else if eq $modernName "" -}} +{{- $modernName = $altName.Name -}} +{{- end -}} +{{- end -}} +{{- end -}} +{{- if not $hasGermanName -}} +{{- $modernName = $geonames.ToponymName -}} +{{- end -}} +{{- if and (ne $modernName "") (ne (lower $modernName) (lower $mainPlaceName)) -}}, {{ $modernName }}{{- end }} {{ else if or (eq $geonames.CountryName "Netherlands") (eq $geonames.CountryName "The Netherlands") }} - heutige Niederlande{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }} + heutige Niederlande{{- $modernName := "" -}} +{{- $hasGermanName := false -}} +{{- range $altName := $geonames.AlternateNames -}} +{{- if eq $altName.Lang "de" -}} +{{- $hasGermanName = true -}} +{{- if $altName.IsPreferredName -}} +{{- $modernName = $altName.Name -}} +{{- break -}} +{{- else if eq $modernName "" -}} +{{- $modernName = $altName.Name -}} +{{- end -}} +{{- end -}} +{{- end -}} +{{- if not $hasGermanName -}} +{{- $modernName = $geonames.ToponymName -}} +{{- end -}} +{{- if and (ne $modernName "") (ne (lower $modernName) (lower $mainPlaceName)) -}}, {{ $modernName }}{{- end }} {{ else if eq $geonames.CountryName "Poland" }} - heutiges Polen{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }} + heutiges Polen{{- $modernName := "" -}} +{{- $hasGermanName := false -}} +{{- range $altName := $geonames.AlternateNames -}} +{{- if eq $altName.Lang "de" -}} +{{- $hasGermanName = true -}} +{{- if $altName.IsPreferredName -}} +{{- $modernName = $altName.Name -}} +{{- break -}} +{{- else if eq $modernName "" -}} +{{- $modernName = $altName.Name -}} +{{- end -}} +{{- end -}} +{{- end -}} +{{- if not $hasGermanName -}} +{{- $modernName = $geonames.ToponymName -}} +{{- end -}} +{{- if and (ne $modernName "") (ne (lower $modernName) (lower $mainPlaceName)) -}}, {{ $modernName }}{{- end }} {{ else if eq $geonames.CountryName "Switzerland" }} - heutige Schweiz{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }} + heutige Schweiz{{- $modernName := "" -}} +{{- $hasGermanName := false -}} +{{- range $altName := $geonames.AlternateNames -}} +{{- if eq $altName.Lang "de" -}} +{{- $hasGermanName = true -}} +{{- if $altName.IsPreferredName -}} +{{- $modernName = $altName.Name -}} +{{- break -}} +{{- else if eq $modernName "" -}} +{{- $modernName = $altName.Name -}} +{{- end -}} +{{- end -}} +{{- end -}} +{{- if not $hasGermanName -}} +{{- $modernName = $geonames.ToponymName -}} +{{- end -}} +{{- if and (ne $modernName "") (ne (lower $modernName) (lower $mainPlaceName)) -}}, {{ $modernName }}{{- end }} {{ else if eq $geonames.CountryName "Latvia" }} - heutiges Lettland{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }} + heutiges Lettland{{- $modernName := "" -}} +{{- $hasGermanName := false -}} +{{- range $altName := $geonames.AlternateNames -}} +{{- if eq $altName.Lang "de" -}} +{{- $hasGermanName = true -}} +{{- if $altName.IsPreferredName -}} +{{- $modernName = $altName.Name -}} +{{- break -}} +{{- else if eq $modernName "" -}} +{{- $modernName = $altName.Name -}} +{{- end -}} +{{- end -}} +{{- end -}} +{{- if not $hasGermanName -}} +{{- $modernName = $geonames.ToponymName -}} +{{- end -}} +{{- if and (ne $modernName "") (ne (lower $modernName) (lower $mainPlaceName)) -}}, {{ $modernName }}{{- end }} {{ else if eq $geonames.CountryName "Sweden" }} - heutiges Schweden{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }} + heutiges Schweden{{- $modernName := "" -}} +{{- $hasGermanName := false -}} +{{- range $altName := $geonames.AlternateNames -}} +{{- if eq $altName.Lang "de" -}} +{{- $hasGermanName = true -}} +{{- if $altName.IsPreferredName -}} +{{- $modernName = $altName.Name -}} +{{- break -}} +{{- else if eq $modernName "" -}} +{{- $modernName = $altName.Name -}} +{{- end -}} +{{- end -}} +{{- end -}} +{{- if not $hasGermanName -}} +{{- $modernName = $geonames.ToponymName -}} +{{- end -}} +{{- if and (ne $modernName "") (ne (lower $modernName) (lower $mainPlaceName)) -}}, {{ $modernName }}{{- end }} {{ else if eq $geonames.CountryName "Austria" }} - heutiges Österreich{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }} + heutiges Österreich{{- $modernName := "" -}} +{{- $hasGermanName := false -}} +{{- range $altName := $geonames.AlternateNames -}} +{{- if eq $altName.Lang "de" -}} +{{- $hasGermanName = true -}} +{{- if $altName.IsPreferredName -}} +{{- $modernName = $altName.Name -}} +{{- break -}} +{{- else if eq $modernName "" -}} +{{- $modernName = $altName.Name -}} +{{- end -}} +{{- end -}} +{{- end -}} +{{- if not $hasGermanName -}} +{{- $modernName = $geonames.ToponymName -}} +{{- end -}} +{{- if and (ne $modernName "") (ne (lower $modernName) (lower $mainPlaceName)) -}}, {{ $modernName }}{{- end }} {{ else if eq $geonames.CountryName "Belgium" }} - heutiges Belgien{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }} + heutiges Belgien{{- $modernName := "" -}} +{{- $hasGermanName := false -}} +{{- range $altName := $geonames.AlternateNames -}} +{{- if eq $altName.Lang "de" -}} +{{- $hasGermanName = true -}} +{{- if $altName.IsPreferredName -}} +{{- $modernName = $altName.Name -}} +{{- break -}} +{{- else if eq $modernName "" -}} +{{- $modernName = $altName.Name -}} +{{- end -}} +{{- end -}} +{{- end -}} +{{- if not $hasGermanName -}} +{{- $modernName = $geonames.ToponymName -}} +{{- end -}} +{{- if and (ne $modernName "") (ne (lower $modernName) (lower $mainPlaceName)) -}}, {{ $modernName }}{{- end }} {{ else if eq $geonames.CountryName "Slovakia" }} - heutige Slowakei{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }} + heutige Slowakei{{- $modernName := "" -}} +{{- $hasGermanName := false -}} +{{- range $altName := $geonames.AlternateNames -}} +{{- if eq $altName.Lang "de" -}} +{{- $hasGermanName = true -}} +{{- if $altName.IsPreferredName -}} +{{- $modernName = $altName.Name -}} +{{- break -}} +{{- else if eq $modernName "" -}} +{{- $modernName = $altName.Name -}} +{{- end -}} +{{- end -}} +{{- end -}} +{{- if not $hasGermanName -}} +{{- $modernName = $geonames.ToponymName -}} +{{- end -}} +{{- if and (ne $modernName "") (ne (lower $modernName) (lower $mainPlaceName)) -}}, {{ $modernName }}{{- end }} {{ else if eq $geonames.CountryName "Finland" }} - heutiges Finnland{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }} + heutiges Finnland{{- $modernName := "" -}} +{{- $hasGermanName := false -}} +{{- range $altName := $geonames.AlternateNames -}} +{{- if eq $altName.Lang "de" -}} +{{- $hasGermanName = true -}} +{{- if $altName.IsPreferredName -}} +{{- $modernName = $altName.Name -}} +{{- break -}} +{{- else if eq $modernName "" -}} +{{- $modernName = $altName.Name -}} +{{- end -}} +{{- end -}} +{{- end -}} +{{- if not $hasGermanName -}} +{{- $modernName = $geonames.ToponymName -}} +{{- end -}} +{{- if and (ne $modernName "") (ne (lower $modernName) (lower $mainPlaceName)) -}}, {{ $modernName }}{{- end }} {{ else if eq $geonames.CountryName "Denmark" }} - heutiges Dänemark{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }} + heutiges Dänemark{{- $modernName := "" -}} +{{- $hasGermanName := false -}} +{{- range $altName := $geonames.AlternateNames -}} +{{- if eq $altName.Lang "de" -}} +{{- $hasGermanName = true -}} +{{- if $altName.IsPreferredName -}} +{{- $modernName = $altName.Name -}} +{{- break -}} +{{- else if eq $modernName "" -}} +{{- $modernName = $altName.Name -}} +{{- end -}} +{{- end -}} +{{- end -}} +{{- if not $hasGermanName -}} +{{- $modernName = $geonames.ToponymName -}} +{{- end -}} +{{- if and (ne $modernName "") (ne (lower $modernName) (lower $mainPlaceName)) -}}, {{ $modernName }}{{- end }} {{ else }} {{ $geonames.CountryName }} {{ end }}