glanzlicht / MeinWeimar_APP

Official MeinWeimar App

Verified secure showcase
204 Files 2 MB Public size 14 Redacted Dart · PHP · XML · GITIGNORE · YAML · PLIST

Project overview

MeinWeimar_APP is a verified code showcase with 204 visible project entries across 2 top-level modules. The primary detected language is Dart; protected files remain visible in the structure while their contents stay private.

README

MeinWeimar — Flutter App & WordPress Plugin

> Working in Progress · Private portfolio repository · Active development

MeinWeimar is a location-based local platform for residents, students and visitors. This repository intentionally contains only two product parts:

  1. the Flutter consumer app;
  2. the meinweimar-core WordPress plugin that provides the editorial/admin
  3. layer and the REST contract consumed by the app.

The complete public website, WordPress core, databases, private infrastructure and unrelated platform modules are not part of this repository.

MeinWeimar consumer app preview

Why this project is interesting

MeinWeimar combines a mobile/web Flutter client with WordPress used as a structured content and administration backend. The goal is a maintainable product boundary: content, branding, navigation, categories, media and configuration are managed in WordPress and delivered through a versioned REST contract instead of being hardcoded in the Flutter UI.

The project demonstrates work across:

  • Flutter/Dart application architecture for iOS, Android and Web;
  • WordPress plugin architecture with custom post types, taxonomies, admin
  • settings and REST endpoints;

  • localized German/English UI and backend-controlled labels;
  • discovery/list/detail flows for places, services, events, classifieds, jobs
  • and real estate;

  • map, GPS, geocoding, marker and navigation contracts;
  • caching, ETag/config-version handling and offline-safe fallbacks;
  • role-aware account, claim, favorites, moderation and messaging boundaries;
  • automated Flutter tests, PHP/REST contract checks and release builds.

Repository structure

flutter-app/       Flutter consumer application
wordpress-plugin/  meinweimar-core WordPress plugin
screenshots/       Curated portfolio preview only

Current status

This is an active Working in Progress project. The core architecture and many end-to-end flows are implemented and continuously tested. Native device polish, production content, final legal/privacy review and further product modules are still being developed. The repository does not claim to be a finished production release.

Local development

Flutter app

cd flutter-app
flutter pub get
flutter analyze
flutter test
flutter run --dart-define=MW_API_BASE_URL=https://example.test/wp-json/meinweimar/v1

The API base URL and other environment-specific values are supplied at build or run time. No credentials are stored in the repository.

WordPress plugin

Copy wordpress-plugin into a WordPress installation's wp-content/plugins/meinweimar-core directory and activate it in the admin area. The plugin owns the MeinWeimar content types, editorial settings, permissions, REST responses, media/configuration contracts and frontend integration points.

Privacy and repository boundary

This repository is private and is prepared for controlled technical review. Secrets, production database exports, user data, WordPress uploads, private keys and infrastructure configuration must remain outside version control. The public-facing portfolio page uses a separate, redacted presentation layer and does not expose the private repository directly.

For technical reviewers

The most relevant entry points are:

  • flutter-app/lib/core — shared configuration, networking, localization,
  • theme and location contracts;

  • flutter-app/lib/features — consumer-facing product surfaces;
  • flutter-app/lib/repositories — API boundary and data access;
  • wordpress-plugin/includes — plugin services, REST, admin and contracts;
  • wordpress-plugin/assets — admin/frontend integration assets.

MeinWeimar is deliberately presented as an evolving product rather than a finished demo: the repository shows the architectural decisions, the working implementation and the remaining engineering work transparently.

flutter-app/lib/l10n/app_de.arbARB
{
"@@locale": "de",
"appTitle": "MeinWeimar",
"brandFallback": "MeinWeimar",
"navStart": "Start",
"navPlaces": "Orte",
"navMap": "Karte",
"navEvents": "Events",
"navCommunity": "Community",
"navSaved": "Gespeichert",
"navMore": "Mehr",
"onboardingTitle": "Entdecke Weimar auf deine Art",
"onboardingBody": "Wähle deine Sprache. Deinen Standort kannst du später freiwillig für lokale Entdeckungen freigeben.",
"onboardingOfflineBody": "Die Sprachauswahl funktioniert auch offline. Inhalte werden geladen, sobald eine Verbindung verfügbar ist.",
"languageLabel": "Sprache",
"languageGerman": "Deutsch",
"languageEnglish": "English",
"continueLabel": "Weiter",
"loadingLabel": "Wird geladen",
"loadMore": "Mehr laden",
"loadingMore": "Weitere Inhalte werden geladen …",
"searchHint": "Orte, Events und Empfehlungen suchen",
"searchSubmit": "Suchen",
"useLocation": "Meinen Standort verwenden",
"locationActive": "Standort aktiv",
"addressSearchTitle": "Rund um eine Adresse entdecken",
"addressSearchHint": "Adresse oder Ort eingeben",
"addressSearchSubmit": "Adresse suchen",
"addressSearchSelected": "Ausgewählter Standort: {label}",
"addressSearchNotConfigured": "Die Adresssuche wird zentral über WordPress konfiguriert.",
"addressSearchNoResults": "Kein passender Standort gefunden.",
"@addressSearchSelected": {"placeholders": {"label": {"type": "String"}}},
"locationDenied": "Standort nicht freigegeben",
"locationUnavailable": "Standort ist gerade nicht verfügbar",
"locationFallback": "Du kannst auch ohne GPS suchen.",
"mapView": "Karte",
"filterAll": "Alle",
"filterMinimum": "Von",
"filterMaximum": "Bis",
"categoryFilterLabel": "Kategorie",
"categoryFallback": "Weitere Kategorie",
"placeCategoryGastronomy": "Gastronomie",
"placeCategoryLeisure": "Freizeit",
"placeCategoryCulture": "Kultur",
"placeCategoryPlaygrounds": "Spielplätze",
"placeCategoryShopping": "Shopping",
"placeCategoryServices": "Dienstleistungen",
"placeCategoryHealth": "Gesundheit",
"placeCategoryOther": "Sonstiges",
"eventCategoryConcerts": "Konzerte",
"eventCategoryCulture": "Theater & Kultur",
"eventCategoryLeisure": "Freizeit",
"eventCategoryComedy": "Comedy",
"eventCategoryShows": "Shows",
"eventCategorySport": "Sport",
"eventCategoryMarkets": "Märkte & Feste",
"eventCategoryWorkshops": "Workshops",
"eventDateAll": "Alle Termine",
"eventDateToday": "Heute",
"eventDateWeekend": "Dieses Wochenende",
"eventDateNext7Days": "Nächste 7 Tage",
"eventFilterApply": "Events anzeigen",
"servicesFilterApply": "Services anzeigen",
"classifiedsFilterApply": "Kleinanzeigen anzeigen",
"realEstateFilterApply": "Immobilien anzeigen",
"categoryApartment": "Wohnung",
"categoryHouse": "Haus",
"categoryTemporaryLiving": "Wohnen auf Zeit",
"categoryWgRoom": "WG-Zimmer",
"categoryLand": "Grundstück",
"categoryGarageParking": "Garage / Stellplatz",
"categoryCommercial": "Gewerbe",
"categoryOfficePractice": "Büro / Praxis",
"categoryRetailHospitality": "Laden / Gastronomie",
"categoryWarehouse": "Lager / Halle",
"categoryElectronics": "Elektronik",
"categoryFurnitureHome": "Möbel / Wohnen",
"categoryClothing": "Kleidung",
"categoryBikesSports": "Fahrrad / Sport",
"categoryTickets": "Tickets",
"categoryBooksMedia": "Bücher / Medien",
"categoryServices": "Dienstleistungen",
"categoryItTech": "IT / Technik",
"categoryHealthcare": "Gesundheit / Pflege",
"categoryEducation": "Bildung / Erziehung",
"categoryOfficeAdmin": "Büro / Verwaltung",
"categoryRetailJobs": "Handel / Gastronomie",
"categoryCraftTrade": "Handwerk / Bau",
"categoryPublicSocial": "Öffentlicher Dienst / Soziales",
"categoryCultureCreative": "Kultur / Kreativ",
"categoryTransportLogistics": "Transport / Logistik",
"categoryApprenticeshipInternship": "Ausbildung / Praktikum",
"mapCurrentLocation": "Mein Standort",
"listView": "Liste",
"radiusLabel": "Radius: {radius}",
"radiusLabelUnit": "km",
"radiusMetersUnit": "m",
"radiusKilometersUnit": "km",
"placesTitle": "Orte entdecken",
"eventsTitle": "Events entdecken",
"discoveryTitle": "Entdecken",
"discoveryIntroBody": "Finde Orte, Events und Empfehlungen rund um Weimar.",
"resultsCount": "{count} Ergebnisse",
"resultsCountSingular": "{count} Ergebnis",
"@resultsCount": {"placeholders": {"count": {"type": "int"}}},
"@resultsCountSingular": {"placeholders": {"count": {"type": "int"}}},
"resultsSummary": "{count, plural, =0 {Keine Ergebnisse} =1 {{count} Ergebnis} other {{count} Ergebnisse}}",
"@resultsSummary": {"description": "Localized discovery result count with zero, one and many forms.", "placeholders": {"count": {"type": "int"}}},
"noResultsTitle": "Nichts gefunden",
"noResultsBody": "Versuche einen anderen Suchbegriff oder erweitere den Radius.",
"editorialNoResultsBody": "Versuche einen anderen Suchbegriff oder wähle eine Kategorie.",
"errorTitle": "Das hat nicht geklappt",
"errorBody": "Die Inhalte konnten nicht geladen werden.",
"errorNetworkUnavailable": "Keine Verbindung zur MeinWeimar-API.",
"errorTimeout": "Die Anfrage hat zu lange gedauert.",
"errorNotFound": "Dieser Eintrag ist nicht mehr verfügbar.",
"errorPermissionDenied": "Du hast keine Berechtigung für diesen Inhalt.",
"errorInvalidResponse": "Die API hat eine ungültige Antwort geliefert.",
"errorServiceUnavailable": "Dieser Dienst ist momentan nicht verfügbar.",
"errorConflict": "Diese Aktion steht im Konflikt mit einem aktuellen Stand.",
"errorRateLimited": "Zu viele Versuche. Bitte später erneut versuchen.",
"errorValidation": "Die Eingaben oder Datei konnten nicht akzeptiert werden.",
"retry": "Erneut versuchen",
"offlineTitle": "Du bist offline",
"offlineBody": "Bereits geladene Inhalte bleiben verfügbar. Versuche es später erneut.",
"emptySavedTitle": "Noch nichts gespeichert",
"emptySavedBody": "Speichere Orte und Events, um sie hier wiederzufinden.",
"savedIntroBody": "Deine gespeicherten Orte und Events bleiben hier griffbereit.",
"authRequiredTitle": "Anmeldung erforderlich",
"authRequiredBody": "Melde dich an, um deine gespeicherten Inhalte zu sehen.",
"communityTitle": "Community Live",
"communityBody": "Entdecke Menschen und Treffpunkte in deiner Umgebung freiwillig und mit klaren Privatsphäre-Einstellungen.",
"communitySafety": "Community Live bleibt jederzeit deaktivierbar. Keine Hintergrundortung.",
"communityPlanned": "In Vorbereitung",
"communityAvailabilityBody": "Live-Karte und Nachrichten werden erst nach der Freigabe des Sicherheits- und Datenschutzkonzepts aktiviert.",
"moreTitle": "Mehr",
"availableModulesTitle": "Weitere Bereiche",
"availableModulesBody": "Alle von MeinWeimar freigegebenen Bereiche entdecken.",
"moduleServices": "Services und Einrichtungen",
"moduleClassifieds": "Kleinanzeigen",
"moduleJobs": "Jobs",
"moduleRealEstate": "Immobilien",
"moduleNews": "News",
"moduleGuides": "Ratgeber",
"settingsTitle": "Einstellungen",
"settingsAvailabilityBody": "Weitere Einstellungen werden mit dem verbindlichen Account- und Datenschutzvertrag ergänzt.",
"privacyTitle": "Datenschutz",
"privacyAvailabilityBody": "Datenschutzoptionen werden zentral über den freigegebenen Account- und Standortvertrag angebunden.",
"profileTitle": "Mein Profil",
"profileSignedIn": "Angemeldet",
"profileStatusLabel": "Status",
"profileUnavailable": "Das Profil ist nicht verfügbar.",
"profileEdit": "Profil bearbeiten",
"profileNickname": "Anzeigename",
"profileAge": "Alter",
"profileGender": "Geschlecht",
"profileVisibility": "Profil-Sichtbarkeit",
"profileAvatarVisibility": "Profilbild-Sichtbarkeit",
"profilePublic": "Öffentlich",
"profilePrivate": "Privat",
"profileBio": "Über mich",
"profileSave": "Profil speichern",
"profileSaving": "Profil wird gespeichert …",
"profileSaved": "Profil gespeichert.",
"profileSaveError": "Das Profil konnte nicht gespeichert werden.",
"profileSystemDefault": "Systemstandard",
"claimTitle": "Business-Claims",
"claimDescription": "Prüfe deine Anfragen zur Inhaberschaft lokaler Orte.",
"claimEmptyTitle": "Noch keine Claims",
"claimEmptyBody": "Hier erscheinen deine eingereichten Claim-Anfragen.",
"claimPending": "In Prüfung",
"claimApproved": "Freigegeben",
"claimRejected": "Abgelehnt",
"claimDecisionNote": "Hinweis zur Entscheidung",
"claimObject": "Objekt",
"claimSummary": "{count, plural, =0 {Keine Anfragen} =1 {1 Anfrage} other {{count} Anfragen}}",
"@claimSummary": {"description": "Localized count of business claim requests.", "placeholders": {"count": {"type": "int"}}},
"claimSubmittedOn": "Eingereicht am",
"claimApplicantNote": "Deine Notiz",
"apiContractTitle": "Datenquelle",
"apiContractBody": "Inhalte, Marke und Navigation kommen aus der MeinWeimar-API. UI-Texte bleiben lokalisiert.",
"detailBack": "Zurück",
"detailAddress": "Adresse",
"detailContact": "Kontakt",
"detailOpeningHours": "Öffnungszeiten",
"detailClosed": "Geschlossen",
"detailSpecialOffers": "Sonderangebote und Hinweise",
"detailNeighbourhood": "Umgebung",
"detailRating": "Bewertung",
"detailOffer": "Angebot",
"detailOfferType": "Angebotsart",
"detailProvider": "Anbieter",
"detailPriceType": "Preisangabe",
"detailAvailability": "Verfügbar ab",
"detailTransactionType": "Vermarktungsart",
"detailArea": "Fläche",
"detailBathrooms": "Bäder",
"detailCondition": "Zustand",
"detailDelivery": "Übergabe / Versand",
"detailEmploymentType": "Beschäftigungsart",
"detailWorkMode": "Arbeitsmodell",
"detailSalary": "Vergütung",
"detailApplication": "Bewerbung",
"listingValueOffer": "Angebot",
"listingValueSearch": "Gesuch",
"listingValueEmployment": "Stelle / Beschäftigung",
"listingValueRent": "Miete",
"listingValueSale": "Kaufen",
"listingValuePrivate": "Privat",
"listingValueBusiness": "Unternehmen",
"listingValueOrganization": "Organisation",
"listingValueBroker": "Makler / Broker",
"listingValueEmployer": "Arbeitgeber",
"listingValueFixed": "Festpreis",
"listingValueNegotiable": "Verhandelbar",
"listingValueFree": "Zu verschenken",
"listingValueOnRequest": "Auf Anfrage",
"listingValueRange": "Preisspanne",
"listingValueOnce": "Einmalig",
"listingValueHour": "Pro Stunde",
"listingValueMonth": "Pro Monat",
"listingValueYear": "Pro Jahr",
"listingValueCommissionFree": "Provisionsfrei",
"listingValueCommissionPaid": "Provisionspflichtig",
"listingValuePercentage": "Prozentsatz",
"listingValueMonthlyRent": "Monatliche Kaltmieten",
"listingValueIncluded": "Enthalten",
"listingValueExcluded": "Nicht enthalten",
"listingValueBuyer": "Käufer",
"listingValueSeller": "Verkäufer",
"listingValueBothParties": "Beide Parteien",
"listingValueTenant": "Mieter",
"listingValueLandlord": "Vermieter",
"listingValueNew": "Neu",
"listingValueUsed": "Gebraucht",
"listingValueDefective": "Defekt",
"listingValueUnknown": "Nicht angegeben",
"listingValuePickup": "Abholung",
"listingValueShipping": "Versand",
"listingValueBoth": "Abholung oder Versand",
"listingValueDigital": "Digital",
"listingValueNone": "Keine Angabe",
"listingValueFullTime": "Vollzeit",
"listingValuePartTime": "Teilzeit",
"listingValueMinijob": "Minijob",
"listingValueWorkingStudent": "Werkstudent",
"listingValueTemporary": "Befristet",
"listingValueFreelance": "Freiberuflich",
"listingValueApprenticeship": "Ausbildung",
"listingValueInternship": "Praktikum",
"listingValueTrainee": "Trainee",
"listingValueSeasonal": "Saisonarbeit",
"listingValueVolunteer": "Ehrenamt",
"listingValueOnsite": "Vor Ort",
"listingValueHybrid": "Hybrid",
"listingValueRemote": "Fernarbeit",
"listingValueCash": "Barzahlung",
"listingValueBankTransfer": "Überweisung",
"listingValueSecurePayment": "Sichere Zahlung",
"listingValueOther": "Andere",
"listingValueFirstOccupancy": "Erstbezug",
"listingValueRenovated": "Renoviert",
"listingValueWellKept": "Gepflegt",
"listingValueNeedsRenovation": "Renovierungsbedürftig",
"listingValueDemand": "Bedarfsausweis",
"listingValueConsumption": "Verbrauchsausweis",
"listingValueYes": "Ja",
"listingValueNo": "Nein",
"listingValueMoreThanSix": "Mehr als 6",
"listingValueCustom": "Eigene Anzahl",
"detailListingStatus": "Status",
"detailPrice": "Preis / Vergütung",
"detailOrganisation": "Organisation",
"detailPropertyKind": "Immobilienart",
"detailRooms": "Zimmer",
"detailContactPreference": "Kontaktpräferenz",
"detailExpires": "Ablaufdatum",
"detailBrand": "Marke",
"detailModel": "Modell / Typ",
"detailColor": "Farbe",
"detailSize": "Größe / Maße",
"detailMaterial": "Material",
"detailItemAge": "Alter / Kaufjahr",
"detailOriginalPrice": "Ursprünglicher Preis",
"detailPaymentMode": "Zahlungsart",
"detailReferenceCode": "Referenznummer",
"detailDepartment": "Abteilung / Team",
"detailWorkHours": "Arbeitszeit",
"detailStartDate": "Arbeitsbeginn",
"detailApplicationDeadline": "Bewerbungsfrist",
"detailRequirements": "Anforderungen",
"detailResponsibilities": "Aufgaben",
"detailBenefits": "Vorteile",
"detailLanguages": "Sprachen",
"detailEducation": "Ausbildung / Abschluss",
"detailExperienceYears": "Erfahrung",
"detailNoExperienceRequired": "Keine Erfahrung erforderlich",
"detailApplicationEmail": "Bewerbungs-E-Mail",
"detailApplicationMethod": "Bewerbungsweg",
"jobsHeroTitle": "Jobs in Weimar",
"jobsHeroBody": "Lokale Stellenangebote aus Weimar und der Region.",
"jobsSearchHint": "Jobtitel, Unternehmen oder Stichwort",
"jobsTopJob": "Top Job",
"jobsNew": "Neu",
"jobsApplyNow": "Jetzt bewerben",
"jobsAbout": "Über uns",
"jobsTasks": "Deine Aufgaben",
"jobsRequirements": "Das bringst du mit",
"jobsDetailsTitle": "Stelleninformationen",
"jobsScreenTitle": "Job-Details",
"jobsSalaryHour": "Brutto/Stunde",
"jobsSalaryMonth": "Brutto/Monat",
"jobsSalaryYear": "Brutto/Jahr",
"jobsSalaryOnce": "Brutto",
"jobsFilterApply": "Jobs anzeigen",
"jobsFilterReset": "Zurücksetzen",
"jobsLocation": "Standort",
"jobsWorkModel": "Arbeitsmodell",
"jobsEmploymentType": "Beschäftigungsart",
"jobsSalaryGross": "Gehalt (brutto)",
"jobsSalaryInterval": "Darstellung",
"jobsSalaryMonthly": "Brutto monatlich",
"jobsSalaryYearly": "Brutto jährlich",
"jobsSalaryConversionHint": "Monatliche und jährliche Werte werden automatisch umgerechnet.",
"jobsIndustry": "Branche",
"jobsCompany": "Unternehmen",
"jobsMoreFilters": "Weitere Filter",
"jobsLocationSummary": "Weimar + {radius}",
"@jobsLocationSummary": {
"description": "Summary shown for the default Jobs location filter.",
"placeholders": {
"radius": {"type": "String"}
}
},
"jobsAllIndustries": "Alle Branchen",
"jobsAllCompanies": "Alle Unternehmen",
"jobsTopOnly": "Nur Top Jobs anzeigen",
"jobsRecentOnly": "Nur neue Jobs (letzte 7 Tage)",
"jobsNewestFirst": "Neueste zuerst",
"jobsFound": "{count, plural, =0{Keine Jobs gefunden} =1{1 Job gefunden} other{{count} Jobs gefunden}}",
"@jobsFound": {
"description": "Number of matching jobs in the listing.",
"placeholders": {
"count": {"type": "int"}
}
},
"detailBedrooms": "Schlafzimmer",
"detailFloor": "Etage",
"detailTotalFloors": "Etagen insgesamt",
"detailYearBuilt": "Baujahr",
"detailLastRenovated": "Modernisiert",
"detailColdRent": "Kaltmiete",
"detailWarmRent": "Warmmiete",
"detailAdditionalCosts": "Nebenkosten",
"detailHeatingCostsIncluded": "Heizkosten in Nebenkosten enthalten",
"detailDeposit": "Kaution",
"detailHouseFee": "Hausgeld",
"detailCommissionType": "Provisionsart",
"detailCommissionAmount": "Provision",
"detailCommissionApplicable": "Provision fällig?",
"detailCommissionCalculation": "Berechnungsart",
"detailCommissionTotal": "Gesamtprovision",
"detailCommissionMonths": "Anzahl Kaltmieten",
"detailCommissionBuyerShare": "Anteil Käufer",
"detailCommissionSellerShare": "Anteil Verkäufer",
"detailCommissionVat": "Umsatzsteuer",
"detailCommissionPayer": "Zahlungspflichtig",
"detailEnergyCertificate": "Energieausweis",
"detailEnergyValue": "Energiekennwert",
"detailEnergyClass": "Effizienzklasse",
"detailHeatingType": "Heizungsart",
"detailEnergySource": "Energieträger",
"detailParkingSpaces": "Stellplätze",
"detailParkingPrice": "Stellplatzpreis",
"detailKitchen": "Küche",
"detailBalcony": "Balkon",
"detailTerrace": "Terrasse",
"detailGarden": "Garten",
"detailBasement": "Keller",
"detailAttic": "Dachboden",
"detailElevator": "Aufzug",
"detailGuestToilet": "Gäste-WC",
"detailAirConditioning": "Klimaanlage",
"detailFloorHeating": "Fußbodenheizung",
"detailFireplace": "Kamin",
"detailFurnished": "Möbliert",
"detailBarrierFree": "Barrierefrei",
"detailPetsAllowed": "Haustiere erlaubt",
"detailGarage": "Garage",
"detailCarport": "Carport",
"detailECharging": "E-Ladepunkt",
"linkOpenFailed": "Der Link konnte nicht geöffnet werden.",
"detailFeatured": "Hervorgehoben",
"detailDescription": "Beschreibung",
"save": "Speichern",
"saved": "Gespeichert",
"routeAction": "Route öffnen",
"callAction": "Anrufen",
"websiteAction": "Website",
"shareAction": "Teilen",
"placesFilterApply": "Orte anzeigen",
"eventDate": "Termin",
"detailEvent": "Veranstaltung",
"eventTicketMode": "Tickets / Anmeldung",
"eventTicketUrl": "Tickets / Anmeldung öffnen",
"eventTicketPrice": "Ticketpreis",
"eventOrganizer": "Veranstalter",
"eventOrganizerUrl": "Veranstalter-Website öffnen",
"eventVenue": "Veranstaltungsort",
"eventOccurrences": "Weitere Termine",
"eventTimezone": "Zeitzone",
"eventCalendarSave": "Kalenderdatei speichern",
"eventTicketFree": "Kostenlos",
"eventTicketExternal": "Externe Buchung",
"eventTicketInternal": "Interne Buchung",
"eventTicketRegistration": "Anmeldung erforderlich",
"contentUnavailable": "Details sind gerade nicht verfügbar.",
"contentTypePlace": "Ort",
"contentTypeEvent": "Event",
"contentTypeService": "Service oder Einrichtung",
"contentTypeClassified": "Kleinanzeige",
"contentTypeJob": "Job",
"contentTypeRealEstate": "Immobilie",
"contentTypeOther": "Eintrag",
"distanceKm": "{distance} km entfernt",
"@distanceKm": {"placeholders": {"distance": {"type": "String"}}},
"unknownValue": "Nicht angegeben",
"locationPermissionTitle": "Lokale Entdeckungen",
"locationPermissionBody": "Für eine optimale Funktion der MeinWeimar-App können wir deinen Standort verwenden, um Inhalte in deiner Nähe anzuzeigen. Deine Live-GPS-Position wird nicht als Profil- oder Inhaltsdaten gespeichert und nur für eine von dir gestartete Umkreissuche vorübergehend als Suchparameter verwendet.",
"locationStartupTitle": "Standort für lokale Entdeckungen",
"locationStartupBody": "Damit MeinWeimar dir Orte, Events und Angebote in deiner Nähe zeigen kann, benötigen wir deine Koordinaten. Deine Live-GPS-Position wird nicht als Profil- oder Inhaltsdaten gespeichert und nur für eine von dir gestartete Umkreissuche vorübergehend als Suchparameter verwendet.",
"allowLocation": "Standort erlauben",
"later": "Später",
"permissionDenied": "Berechtigung abgelehnt",
"permissionDeniedBody": "Du kannst weiterhin über Adresse, Region und Kategorien entdecken.",
"systemErrorCode": "Fehlercode: {code}",
"@systemErrorCode": {"placeholders": {"code": {"type": "String"}}},
"refresh": "Aktualisieren",
"openDetails": "Details öffnen",
"back": "Zurück",
"close": "Schließen",
"selectLanguage": "Sprache auswählen",
"selectedLanguage": "Ausgewählte Sprache: {language}",
"@selectedLanguage": {"placeholders": {"language": {"type": "String"}}},
"mapProviderPending": "Kartenanbieter wird über einen austauschbaren Adapter angebunden.",
"mapProviderConfigured": "Kartenquelle ist zentral konfiguriert; der austauschbare Adapter kann sie verwenden.",
"mapSourceUnavailable": "Keine Kartenquelle konfiguriert. Die Karte bleibt ohne Kacheln nutzbar.",
"mapGoogleFallback": "Keine interne Kartenquelle aktiv. Du kannst Google Maps öffnen.",
"openGoogleMaps": "Google Maps öffnen",
"mapTileLoadFailed": "Die Kartenkacheln konnten nicht geladen werden.",
"mapSearchCenter": "Suchzentrum",
"mapZoomIn": "Vergrößern",
"mapZoomOut": "Verkleinern",
"mapStyleRoad": "Straßenkarte",
"mapStyleLight": "Helle Karte",
"mapStyleDark": "Dunkle Karte",
"mapStyleSatellite": "Satellit",
"markerLabel": "Marker für {title}",
"@markerLabel": {"placeholders": {"title": {"type": "String"}}},
"mapClusterLabel": "{count} Orte auf der Karte",
"@mapClusterLabel": {"placeholders": {"count": {"type": "int"}}},
"menuLabel": "Menü",
"searchSemantics": "Suche",
"filterLabel": "Filter",
"clearLabel": "Zurücksetzen",
"sortAuto": "Automatisch",
"sortDistance": "Entfernung",
"sortNewest": "Neueste",
"sortTitle": "Alphabetisch",
"eventEnd": "Ende",
"eventStatus": "Status",
"eventScheduled": "Geplant",
"eventCancelled": "Abgesagt",
"eventPostponed": "Verschoben",
"eventStatusUnknown": "Status nicht angegeben",
"mapNoPublicLocations": "Für diese Treffer sind keine öffentlichen Positionen verfügbar.",
"imageSuggestCta": "Bild vorschlagen",
"imageSuggestTitle": "Bild vorschlagen",
"imageSuggestBody": "Für „{title}“ ein Bild zur Prüfung einreichen.",
"@imageSuggestBody": {"placeholders": {"title": {"type": "String"}}},
"imageSuggestTarget": "Ziel: {resource}",
"@imageSuggestTarget": {"placeholders": {"resource": {"type": "String"}}},
"imageSuggestUploadTitle": "Bild auswählen",
"imageSuggestSelect": "Bild auswählen",
"imageSuggestSelectAnother": "Anderes Bild auswählen",
"imageSuggestNoFile": "Noch kein Bild ausgewählt",
"imageSuggestPreviewFailed": "Vorschau konnte nicht geladen werden.",
"imageSuggestFileUnavailable": "Die Bilddatei konnte nicht gelesen werden.",
"imageSuggestLoginTitle": "Anmeldung erforderlich",
"imageSuggestLoginBody": "Melde dich an, um ein Bild vorzuschlagen.",
"imageSuggestRightsTitle": "Rechte und Bestätigung",
"imageSuggestRightsHolder": "Ich bin Urheber des Bildes oder besitze ausreichende Nutzungsrechte.",
"imageSuggestLawfulSource": "Das Bild wurde nicht unrechtmäßig aus dem Internet übernommen.",
"imageSuggestPersons": "Abgebildete Personen haben zugestimmt oder sind nicht identifizierbar.",
"imageSuggestPlatformLicense": "Ich räume MeinWeimar die erforderlichen Nutzungsrechte für Anzeige, Speicherung und Verarbeitung ein.",
"imageSuggestMetadataTitle": "Optionale Angaben",
"imageSuggestOptional": "Quelle, Lizenz, Fotograf und Beschreibung sind optional.",
"imageSuggestSource": "Quelle",
"imageSuggestLicense": "Lizenz",
"imageSuggestPhotographer": "Fotograf oder Urheber",
"imageSuggestDescription": "Bildbeschreibung",
"imageSuggestSubmit": "Zur Prüfung einreichen",
"imageSuggestSubmitting": "Wird eingereicht …",
"imageSuggestStatusTitle": "Bildvorschlag eingereicht",
"imageSuggestStatusSubmitted": "Eingereicht",
"imageSuggestStatusInReview": "In Prüfung",
"imageSuggestStatusAccepted": "Akzeptiert",
"imageSuggestStatusRejected": "Abgelehnt",
"imageSuggestStatusNeedsInfo": "Rückfrage erforderlich",
"imageSuggestStatusPending": "Status wird geprüft",
"imageSuggestTargetOther": "Inhalt",
"imageSuggestUnavailableTitle": "Bildvorschlag nicht verfügbar",
"imageSuggestUnavailableBody": "Bilder können derzeit nur für Orte und Services vorgeschlagen werden.",
"imageSuggestReason": "Hinweis",
"imageSuggestReasonCopyright": "Urheber- oder Nutzungsrechte",
"imageSuggestReasonPrivacy": "Datenschutz oder abgebildete Personen",
"imageSuggestReasonQuality": "Bildqualität",
"imageSuggestReasonDuplicate": "Duplikat",
"imageSuggestReasonMalware": "Sicherheitsprüfung",
"imageSuggestReasonUnclearRights": "Unklare Rechteherkunft",
"imageSuggestReasonWrongTarget": "Falsches Zielobjekt",
"imageSuggestReasonOther": "Sonstiger Grund",
"imageSuggestReasonUnknown": "Weitere Angaben erforderlich",
"imageSuggestMyTitle": "Meine Bildvorschläge",
"imageSuggestMyBody": "Verfolge hier den Prüfstatus deiner eingereichten Bilder.",
"imageSuggestMyEmpty": "Du hast noch keine Bilder vorgeschlagen.",
"imageSuggestMyRetry": "Bildvorschläge erneut laden",
"imageSuggestMyItemStatus": "Status: {status}",
"@imageSuggestMyItemStatus": {"placeholders": {"status": {"type": "String"}}},
"imageSuggestSubmittedAt": "Eingereicht: {date}",
"@imageSuggestSubmittedAt": {"placeholders": {"date": {"type": "String"}}},
"imageSuggestViewAll": "Alle Bildvorschläge anzeigen",
"imageSuggestResponseTitle": "Rückfrage beantworten",
"imageSuggestResponseBody": "Bitte ergänze die angeforderten Angaben. Deine Antwort wird erneut geprüft.",
"imageSuggestResponseLabel": "Deine Antwort",
"imageSuggestResponseRequired": "Bitte gib eine Antwort ein.",
"imageSuggestResponseSubmit": "Antwort senden",
"imageSuggestResponseSubmitting": "Antwort wird gesendet …",
"imageSuggestResponseSent": "Antwort gesendet. Der Bildvorschlag wird erneut geprüft.",
"imageSuggestResponseOpen": "Rückfrage beantworten",
"notificationsTitle": "Benachrichtigungen",
"notificationsEmptyTitle": "Keine Benachrichtigungen",
"notificationsEmptyBody": "Hier erscheinen deine persönlichen Hinweise.",
"notificationsFilterAll": "Alle",
"notificationsFilterUnread": "Ungelesen",
"notificationsUnreadCount": "{count, plural, =0 {Keine ungelesenen Hinweise} =1 {1 ungelesener Hinweis} other {{count} ungelesene Hinweise}}",
"notificationGenericBody": "Es gibt einen neuen Hinweis für dich.",
"notificationImageSuggestionTitle": "Bildvorschlag aktualisiert",
"notificationImageSuggestionBody": "Der Bildvorschlag hat den Status: {status}.",
"@notificationImageSuggestionBody": {"placeholders": {"status": {"type": "String"}}},
"favoriteRemove": "Aus gespeicherten entfernen",
"favoriteSaving": "Speicherung wird aktualisiert …",
"favoriteSavedBody": "In deinen gespeicherten Inhalten abgelegt.",
"favoriteRemovedBody": "Aus deinen gespeicherten Inhalten entfernt.",
"favoriteError": "Die Speicherung konnte nicht aktualisiert werden.",
"homeQuickAccessTitle": "Schnellzugriff",
"homeEventsTitle": "Aktuelle Events",
"homeNewsTitle": "Neuigkeiten aus Weimar",
"homeNearbyTitle": "In deiner Nähe",
"homeNearbyAction": "Mehr Orte",
"homeNearbyBody": "Aktiviere deinen Standort oder suche eine Adresse, um Orte in deiner Nähe zu entdecken.",
"homeListingsTitle": "Neueste Angebote",
"homeEmptyBody": "Hier gibt es gerade noch keine Inhalte.",
"homeCommunityTitle": "Mit Weimar verbunden",
"homeCommunityBody": "Tausche dich aus, entdecke lokale Tipps und bring dich in die Stadtgemeinschaft ein.",
"homeCommunityAction": "Community öffnen"
}

Architecture

High-level modules detected from the verified public snapshot. Protected implementation details are intentionally omitted.

flutter-appmodule
wordpress-pluginmodule

Technology stack

DartPHPJavaScriptARBLOCKPBXPROJFlutter / Dart
Dart56.1%
PHP29.4%
JavaScript4.0%
ARB2.9%
LOCK1.7%
PBXPROJ1.7%
CSS1.5%
Markdown0.4%