Compare commits

..

1 commit

Author SHA1 Message Date
leaanthony
58ce8f519f docs: sync translations 2026-03-13 00:08:05 +00:00
278 changed files with 21790 additions and 10672 deletions

View file

@ -44,7 +44,7 @@
"description": "The label of footer link with label=Blog linking to /blog" "description": "The label of footer link with label=Blog linking to /blog"
}, },
"copyright": { "copyright": {
"message": "Copyright © 2025 Lea Anthony", "message": "Copyright © 2022 Lea Anthony",
"description": "The footer copyright" "description": "The footer copyright"
}, },
"link.item.label.Awesome": { "link.item.label.Awesome": {

View file

@ -1,295 +1,295 @@
{ {
"homepage.Features.Title1": { "homepage.Features.Title1": {
"message": "Feature Rich" "message": "Umfangreiche Features"
}, },
"homepage.Features.Description1": { "homepage.Features.Description1": {
"message": "Build comprehensive cross-platform applications using native UI elements such as menus and dialogs." "message": "Erstelle umfassende, plattformübergreifende Anwendungen mit nativen UI-Elementen wie Menüs und Dialogen."
}, },
"homepage.Features.Title2": { "homepage.Features.Title2": {
"message": "Familiar" "message": "Vertraut"
}, },
"homepage.Features.Description2": { "homepage.Features.Description2": {
"message": "Use the technologies you already know to build amazing applications." "message": "Benutze die Technologien, die du bereits kennst, um erstaunliche Anwendungen zu entwickeln."
}, },
"homepage.Features.Title3": { "homepage.Features.Title3": {
"message": "Fast" "message": "Schnell"
}, },
"homepage.Features.Description3": { "homepage.Features.Description3": {
"message": "Quickly generate, build and package your projects using the Wails CLI." "message": "Generiere, erstelle und verpacke deine Projekte schnell mit dem Wails CLI."
}, },
"homepage.Tagline": { "homepage.Tagline": {
"message": "Build beautiful cross-platform applications using Go" "message": "Erstelle schöne plattformübergreifende Anwendungen mit Go"
}, },
"homepage.ButtonText": { "homepage.ButtonText": {
"message": "Get Started" "message": "Jetzt loslegen"
}, },
"homepage.LearnMoreButtonText": { "homepage.LearnMoreButtonText": {
"message": "Learn More" "message": "Mehr erfahren"
}, },
"theme.ErrorPageContent.title": { "theme.ErrorPageContent.title": {
"message": "This page crashed.", "message": "Diese Seite ist abgestürzt.",
"description": "The title of the fallback page when the page crashed" "description": "The title of the fallback page when the page crashed"
}, },
"theme.ErrorPageContent.tryAgain": { "theme.ErrorPageContent.tryAgain": {
"message": "Try again", "message": "Erneut versuchen",
"description": "The label of the button to try again rendering when the React error boundary captures an error" "description": "The label of the button to try again rendering when the React error boundary captures an error"
}, },
"theme.NotFound.title": { "theme.NotFound.title": {
"message": "Page Not Found", "message": "Seite nicht gefunden",
"description": "The title of the 404 page" "description": "The title of the 404 page"
}, },
"theme.NotFound.p1": { "theme.NotFound.p1": {
"message": "We could not find what you were looking for.", "message": "Wir konnten die gesuchte Seite nicht finden.",
"description": "The first paragraph of the 404 page" "description": "The first paragraph of the 404 page"
}, },
"theme.NotFound.p2": { "theme.NotFound.p2": {
"message": "Please contact the owner of the site that linked you to the original URL and let them know their link is broken.", "message": "Bitte wende dich an den Inhaber der Website, der dich mit der ursprünglichen URL verlinkt hat, und teilen ihm mit, dass der Link nicht mehr funktioniert.",
"description": "The 2nd paragraph of the 404 page" "description": "The 2nd paragraph of the 404 page"
}, },
"theme.AnnouncementBar.closeButtonAriaLabel": { "theme.AnnouncementBar.closeButtonAriaLabel": {
"message": "Close", "message": "Schließen",
"description": "The ARIA label for close button of announcement bar" "description": "The ARIA label for close button of announcement bar"
}, },
"theme.blog.archive.title": { "theme.blog.archive.title": {
"message": "Archive", "message": "Archiv",
"description": "The page & hero title of the blog archive page" "description": "The page & hero title of the blog archive page"
}, },
"theme.blog.archive.description": { "theme.blog.archive.description": {
"message": "Archive", "message": "Archiv",
"description": "The page & hero description of the blog archive page" "description": "The page & hero description of the blog archive page"
}, },
"theme.BackToTopButton.buttonAriaLabel": { "theme.BackToTopButton.buttonAriaLabel": {
"message": "Scroll back to top", "message": "Nach oben springen",
"description": "The ARIA label for the back to top button" "description": "The ARIA label for the back to top button"
}, },
"theme.blog.paginator.navAriaLabel": { "theme.blog.paginator.navAriaLabel": {
"message": "Blog list page navigation", "message": "Bloglisten-Seitennavigation",
"description": "The ARIA label for the blog pagination" "description": "The ARIA label for the blog pagination"
}, },
"theme.blog.paginator.newerEntries": { "theme.blog.paginator.newerEntries": {
"message": "Newer Entries", "message": "Neuere Einträge",
"description": "The label used to navigate to the newer blog posts page (previous page)" "description": "The label used to navigate to the newer blog posts page (previous page)"
}, },
"theme.blog.paginator.olderEntries": { "theme.blog.paginator.olderEntries": {
"message": "Older Entries", "message": "Ältere Einträge",
"description": "The label used to navigate to the older blog posts page (next page)" "description": "The label used to navigate to the older blog posts page (next page)"
}, },
"theme.blog.post.readingTime.plurals": { "theme.blog.post.readingTime.plurals": {
"message": "One min read|{readingTime} min read", "message": "Eine Minute Lesezeit|{readingTime} Minuten Lesezeit",
"description": "Pluralized label for \"{readingTime} min read\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" "description": "Pluralized label for \"{readingTime} min read\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)"
}, },
"theme.blog.post.readMoreLabel": { "theme.blog.post.readMoreLabel": {
"message": "Read more about {title}", "message": "Mehr über {title} lesen",
"description": "The ARIA label for the link to full blog posts from excerpts" "description": "The ARIA label for the link to full blog posts from excerpts"
}, },
"theme.blog.post.readMore": { "theme.blog.post.readMore": {
"message": "Read More", "message": "Weiterlesen",
"description": "The label used in blog post item excerpts to link to full blog posts" "description": "The label used in blog post item excerpts to link to full blog posts"
}, },
"theme.blog.post.paginator.navAriaLabel": { "theme.blog.post.paginator.navAriaLabel": {
"message": "Blog post page navigation", "message": "Blog Post Seiten Navigation",
"description": "The ARIA label for the blog posts pagination" "description": "The ARIA label for the blog posts pagination"
}, },
"theme.blog.post.paginator.newerPost": { "theme.blog.post.paginator.newerPost": {
"message": "Newer Post", "message": "Neuere Beiträge",
"description": "The blog post button label to navigate to the newer/previous post" "description": "The blog post button label to navigate to the newer/previous post"
}, },
"theme.blog.post.paginator.olderPost": { "theme.blog.post.paginator.olderPost": {
"message": "Older Post", "message": "Ältere Beitrage",
"description": "The blog post button label to navigate to the older/next post" "description": "The blog post button label to navigate to the older/next post"
}, },
"theme.blog.sidebar.navAriaLabel": { "theme.blog.sidebar.navAriaLabel": {
"message": "Blog recent posts navigation", "message": "Aktuelle Blog-Beitragsansicht",
"description": "The ARIA label for recent posts in the blog sidebar" "description": "The ARIA label for recent posts in the blog sidebar"
}, },
"theme.blog.post.plurals": { "theme.blog.post.plurals": {
"message": "One post|{count} posts", "message": "Ein Beitrag|{count} Beiträge",
"description": "Pluralized label for \"{count} posts\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" "description": "Pluralized label for \"{count} posts\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)"
}, },
"theme.blog.tagTitle": { "theme.blog.tagTitle": {
"message": "{nPosts} tagged with \"{tagName}\"", "message": "{nPosts} markiert mit \"{tagName}\"",
"description": "The title of the page for a blog tag" "description": "The title of the page for a blog tag"
}, },
"theme.tags.tagsPageLink": { "theme.tags.tagsPageLink": {
"message": "View All Tags", "message": "Alle Schlagwörter anzeigen",
"description": "The label of the link targeting the tag list page" "description": "The label of the link targeting the tag list page"
}, },
"theme.CodeBlock.copyButtonAriaLabel": { "theme.CodeBlock.copyButtonAriaLabel": {
"message": "Copy code to clipboard", "message": "Code in Zwischenablage kopieren",
"description": "The ARIA label for copy code blocks button" "description": "The ARIA label for copy code blocks button"
}, },
"theme.CodeBlock.copied": { "theme.CodeBlock.copied": {
"message": "Copied", "message": "Kopiert",
"description": "The copied button label on code blocks" "description": "The copied button label on code blocks"
}, },
"theme.CodeBlock.copy": { "theme.CodeBlock.copy": {
"message": "Copy", "message": "Kopieren",
"description": "The copy button label on code blocks" "description": "The copy button label on code blocks"
}, },
"theme.colorToggle.ariaLabel": { "theme.colorToggle.ariaLabel": {
"message": "Switch between dark and light mode (currently {mode})", "message": "Umschalten zwischen dunkler und heller Ansicht (momentan {mode})",
"description": "The ARIA label for the navbar color mode toggle" "description": "The ARIA label for the navbar color mode toggle"
}, },
"theme.colorToggle.ariaLabel.mode.dark": { "theme.colorToggle.ariaLabel.mode.dark": {
"message": "dark mode", "message": "dunkler Modus",
"description": "The name for the dark color mode" "description": "The name for the dark color mode"
}, },
"theme.colorToggle.ariaLabel.mode.light": { "theme.colorToggle.ariaLabel.mode.light": {
"message": "light mode", "message": "heller Modus",
"description": "The name for the light color mode" "description": "The name for the light color mode"
}, },
"theme.docs.DocCard.categoryDescription": { "theme.docs.DocCard.categoryDescription": {
"message": "{count} items", "message": "{count} Elemente",
"description": "The default description for a category card in the generated index about how many items this category includes" "description": "The default description for a category card in the generated index about how many items this category includes"
}, },
"theme.docs.sidebar.expandButtonTitle": { "theme.docs.sidebar.expandButtonTitle": {
"message": "Expand sidebar", "message": "Menü ausklappen",
"description": "The ARIA label and title attribute for expand button of doc sidebar" "description": "The ARIA label and title attribute for expand button of doc sidebar"
}, },
"theme.docs.sidebar.expandButtonAriaLabel": { "theme.docs.sidebar.expandButtonAriaLabel": {
"message": "Expand sidebar", "message": "Menü ausklappen",
"description": "The ARIA label and title attribute for expand button of doc sidebar" "description": "The ARIA label and title attribute for expand button of doc sidebar"
}, },
"theme.docs.paginator.navAriaLabel": { "theme.docs.paginator.navAriaLabel": {
"message": "Docs pages navigation", "message": "Dokumentationsseiten Navigation",
"description": "The ARIA label for the docs pagination" "description": "The ARIA label for the docs pagination"
}, },
"theme.docs.paginator.previous": { "theme.docs.paginator.previous": {
"message": "Previous", "message": "Zurück",
"description": "The label used to navigate to the previous doc" "description": "The label used to navigate to the previous doc"
}, },
"theme.docs.paginator.next": { "theme.docs.paginator.next": {
"message": "Next", "message": "Weiter",
"description": "The label used to navigate to the next doc" "description": "The label used to navigate to the next doc"
}, },
"theme.docs.sidebar.collapseButtonTitle": { "theme.docs.sidebar.collapseButtonTitle": {
"message": "Collapse sidebar", "message": "Menü einklappen",
"description": "The title attribute for collapse button of doc sidebar" "description": "The title attribute for collapse button of doc sidebar"
}, },
"theme.docs.sidebar.collapseButtonAriaLabel": { "theme.docs.sidebar.collapseButtonAriaLabel": {
"message": "Collapse sidebar", "message": "Menü einklappen",
"description": "The title attribute for collapse button of doc sidebar" "description": "The title attribute for collapse button of doc sidebar"
}, },
"theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel": { "theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel": {
"message": "Toggle the collapsible sidebar category '{label}'", "message": "Die Seitenleistenkategorie „{label}“ ein-/ausklappen",
"description": "The ARIA label to toggle the collapsible sidebar category" "description": "The ARIA label to toggle the collapsible sidebar category"
}, },
"theme.docs.tagDocListPageTitle.nDocsTagged": { "theme.docs.tagDocListPageTitle.nDocsTagged": {
"message": "One doc tagged|{count} docs tagged", "message": "Ein Dokument markiert|{count} Dokumente markiert",
"description": "Pluralized label for \"{count} docs tagged\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" "description": "Pluralized label for \"{count} docs tagged\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)"
}, },
"theme.docs.tagDocListPageTitle": { "theme.docs.tagDocListPageTitle": {
"message": "{nDocsTagged} with \"{tagName}\"", "message": "{nDocsTagged} markiert mit \"{tagName}\"",
"description": "The title of the page for a docs tag" "description": "The title of the page for a docs tag"
}, },
"theme.docs.versionBadge.label": { "theme.docs.versionBadge.label": {
"message": "Version: {versionLabel}" "message": "Version: {versionLabel}"
}, },
"theme.docs.versions.unreleasedVersionLabel": { "theme.docs.versions.unreleasedVersionLabel": {
"message": "This is unreleased documentation for {siteTitle} {versionLabel} version.", "message": "Das ist die unveröffentlichte Dokumentation für {siteTitle} {versionLabel}.",
"description": "The label used to tell the user that he's browsing an unreleased doc version" "description": "The label used to tell the user that he's browsing an unreleased doc version"
}, },
"theme.docs.versions.unmaintainedVersionLabel": { "theme.docs.versions.unmaintainedVersionLabel": {
"message": "This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.", "message": "Das ist die Dokumentation für {siteTitle} {versionLabel} welche nicht weiter gewartet wird.",
"description": "The label used to tell the user that he's browsing an unmaintained doc version" "description": "The label used to tell the user that he's browsing an unmaintained doc version"
}, },
"theme.docs.versions.latestVersionSuggestionLabel": { "theme.docs.versions.latestVersionSuggestionLabel": {
"message": "For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).", "message": "Für die aktuellste Dokumentation gehe auf {latestVersionLink} ({versionLabel}).",
"description": "The label used to tell the user to check the latest version" "description": "The label used to tell the user to check the latest version"
}, },
"theme.docs.versions.latestVersionLinkLabel": { "theme.docs.versions.latestVersionLinkLabel": {
"message": "latest version", "message": "neueste Version",
"description": "The label used for the latest version suggestion link label" "description": "The label used for the latest version suggestion link label"
}, },
"theme.common.editThisPage": { "theme.common.editThisPage": {
"message": "Edit this page", "message": "Diese Seite bearbeiten",
"description": "The link label to edit the current page" "description": "The link label to edit the current page"
}, },
"theme.common.headingLinkTitle": { "theme.common.headingLinkTitle": {
"message": "Direct link to heading", "message": "Direkter Link zur Überschrift",
"description": "Title for link to heading" "description": "Title for link to heading"
}, },
"theme.lastUpdated.atDate": { "theme.lastUpdated.atDate": {
"message": " on {date}", "message": " am {date}",
"description": "The words used to describe on which date a page has been last updated" "description": "The words used to describe on which date a page has been last updated"
}, },
"theme.lastUpdated.byUser": { "theme.lastUpdated.byUser": {
"message": " by {user}", "message": " von {user}",
"description": "The words used to describe by who the page has been last updated" "description": "The words used to describe by who the page has been last updated"
}, },
"theme.lastUpdated.lastUpdatedAtBy": { "theme.lastUpdated.lastUpdatedAtBy": {
"message": "Last updated{atDate}{byUser}", "message": "Zuletzt aktualisiert{atDate}{byUser}",
"description": "The sentence used to display when a page has been last updated, and by who" "description": "The sentence used to display when a page has been last updated, and by who"
}, },
"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel": { "theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel": {
"message": "← Back to main menu", "message": "← Zurück zum Hauptmenü",
"description": "The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)" "description": "The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"
}, },
"theme.navbar.mobileVersionsDropdown.label": { "theme.navbar.mobileVersionsDropdown.label": {
"message": "Versions", "message": "Versionen",
"description": "The label for the navbar versions dropdown on mobile view" "description": "The label for the navbar versions dropdown on mobile view"
}, },
"theme.common.skipToMainContent": { "theme.common.skipToMainContent": {
"message": "Skip to main content", "message": "Zum Hauptinhalt springen",
"description": "The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation" "description": "The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation"
}, },
"theme.tags.tagsListLabel": { "theme.tags.tagsListLabel": {
"message": "Tags:", "message": "Schlagwörter:",
"description": "The label alongside a tag list" "description": "The label alongside a tag list"
}, },
"theme.TOCCollapsible.toggleButtonLabel": { "theme.TOCCollapsible.toggleButtonLabel": {
"message": "On this page", "message": "Auf dieser Seite",
"description": "The label used by the button on the collapsible TOC component" "description": "The label used by the button on the collapsible TOC component"
}, },
"theme.navbar.mobileLanguageDropdown.label": { "theme.navbar.mobileLanguageDropdown.label": {
"message": "Languages", "message": "Sprachen",
"description": "The label for the mobile language switcher dropdown" "description": "The label for the mobile language switcher dropdown"
}, },
"theme.SearchBar.seeAll": { "theme.SearchBar.seeAll": {
"message": "See all {count} results" "message": "Alle {count} Ergebnisse anzeigen"
}, },
"theme.SearchBar.label": { "theme.SearchBar.label": {
"message": "Search", "message": "Suchen",
"description": "The ARIA label and placeholder for search button" "description": "The ARIA label and placeholder for search button"
}, },
"theme.SearchPage.documentsFound.plurals": { "theme.SearchPage.documentsFound.plurals": {
"message": "One document found|{count} documents found", "message": "Ein Dokument gefunden|{count} Dokumente gefunden",
"description": "Pluralized label for \"{count} documents found\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" "description": "Pluralized label for \"{count} documents found\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)"
}, },
"theme.SearchPage.existingResultsTitle": { "theme.SearchPage.existingResultsTitle": {
"message": "Search results for \"{query}\"", "message": "Suchergebnisse für \"{query}\"",
"description": "The search page title for non-empty query" "description": "The search page title for non-empty query"
}, },
"theme.SearchPage.emptyResultsTitle": { "theme.SearchPage.emptyResultsTitle": {
"message": "Search the documentation", "message": "Dokumentation durchsuchen",
"description": "The search page title for empty query" "description": "The search page title for empty query"
}, },
"theme.SearchPage.inputPlaceholder": { "theme.SearchPage.inputPlaceholder": {
"message": "Type your search here", "message": "Suche hier eingeben",
"description": "The placeholder for search page input" "description": "The placeholder for search page input"
}, },
"theme.SearchPage.inputLabel": { "theme.SearchPage.inputLabel": {
"message": "Search", "message": "Suchen",
"description": "The ARIA label for search page input" "description": "The ARIA label for search page input"
}, },
"theme.SearchPage.algoliaLabel": { "theme.SearchPage.algoliaLabel": {
"message": "Search by Algolia", "message": "Suche von Algolia bereitgestellt",
"description": "The ARIA label for Algolia mention" "description": "The ARIA label for Algolia mention"
}, },
"theme.SearchPage.noResultsText": { "theme.SearchPage.noResultsText": {
"message": "No results were found", "message": "Es wurden keine Ergebnisse gefunden",
"description": "The paragraph for empty search result" "description": "The paragraph for empty search result"
}, },
"theme.SearchPage.fetchingNewResults": { "theme.SearchPage.fetchingNewResults": {
"message": "Fetching new results...", "message": "Lade neue Ergebnisse...",
"description": "The paragraph for fetching new search results" "description": "The paragraph for fetching new search results"
}, },
"theme.tags.tagsPageTitle": { "theme.tags.tagsPageTitle": {
"message": "Tags", "message": "Schlagwörter",
"description": "The title of the tag list page" "description": "The title of the tag list page"
}, },
"theme.docs.breadcrumbs.home": { "theme.docs.breadcrumbs.home": {
"message": "Home page", "message": "Startseite",
"description": "The ARIA label for the home page in the breadcrumbs" "description": "The ARIA label for the home page in the breadcrumbs"
}, },
"theme.docs.breadcrumbs.navAriaLabel": { "theme.docs.breadcrumbs.navAriaLabel": {
@ -297,7 +297,7 @@
"description": "The ARIA label for the breadcrumbs" "description": "The ARIA label for the breadcrumbs"
}, },
"theme.CodeBlock.wordWrapToggle": { "theme.CodeBlock.wordWrapToggle": {
"message": "Toggle word wrap", "message": "Zeilenumbruch ein-/ausschalten",
"description": "The title attribute for toggle word wrapping button of code block lines" "description": "The title attribute for toggle word wrapping button of code block lines"
}, },
"theme.admonition.note": { "theme.admonition.note": {
@ -313,7 +313,7 @@
"description": "The default label used for the Danger admonition (:::danger)" "description": "The default label used for the Danger admonition (:::danger)"
}, },
"theme.admonition.info": { "theme.admonition.info": {
"message": "info", "message": "Info",
"description": "The default label used for the Info admonition (:::info)" "description": "The default label used for the Info admonition (:::info)"
}, },
"theme.admonition.caution": { "theme.admonition.caution": {
@ -321,111 +321,111 @@
"description": "The default label used for the Caution admonition (:::caution)" "description": "The default label used for the Caution admonition (:::caution)"
}, },
"theme.SearchModal.searchBox.resetButtonTitle": { "theme.SearchModal.searchBox.resetButtonTitle": {
"message": "Clear the query", "message": "Suche löschen",
"description": "The label and ARIA label for search box reset button" "description": "The label and ARIA label for search box reset button"
}, },
"theme.SearchModal.searchBox.cancelButtonText": { "theme.SearchModal.searchBox.cancelButtonText": {
"message": "Cancel", "message": "Abbrechen",
"description": "The label and ARIA label for search box cancel button" "description": "The label and ARIA label for search box cancel button"
}, },
"theme.SearchModal.startScreen.recentSearchesTitle": { "theme.SearchModal.startScreen.recentSearchesTitle": {
"message": "Recent", "message": "Kürzlich",
"description": "The title for recent searches" "description": "The title for recent searches"
}, },
"theme.SearchModal.startScreen.noRecentSearchesText": { "theme.SearchModal.startScreen.noRecentSearchesText": {
"message": "No recent searches", "message": "Keine kürzlichen Suchvorgänge",
"description": "The text when no recent searches" "description": "The text when no recent searches"
}, },
"theme.SearchModal.startScreen.saveRecentSearchButtonTitle": { "theme.SearchModal.startScreen.saveRecentSearchButtonTitle": {
"message": "Save this search", "message": "Diese Suchanfrage speichern",
"description": "The label for save recent search button" "description": "The label for save recent search button"
}, },
"theme.SearchModal.startScreen.removeRecentSearchButtonTitle": { "theme.SearchModal.startScreen.removeRecentSearchButtonTitle": {
"message": "Remove this search from history", "message": "Diese Suche aus dem Verlauf entfernen",
"description": "The label for remove recent search button" "description": "The label for remove recent search button"
}, },
"theme.SearchModal.startScreen.favoriteSearchesTitle": { "theme.SearchModal.startScreen.favoriteSearchesTitle": {
"message": "Favorite", "message": "Favorit",
"description": "The title for favorite searches" "description": "The title for favorite searches"
}, },
"theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle": { "theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle": {
"message": "Remove this search from favorites", "message": "Diese Suchanfrage aus Favoriten entfernen",
"description": "The label for remove favorite search button" "description": "The label for remove favorite search button"
}, },
"theme.SearchModal.errorScreen.titleText": { "theme.SearchModal.errorScreen.titleText": {
"message": "Unable to fetch results", "message": "Die Ergebnisse können nicht abgerufen werden",
"description": "The title for error screen of search modal" "description": "The title for error screen of search modal"
}, },
"theme.SearchModal.errorScreen.helpText": { "theme.SearchModal.errorScreen.helpText": {
"message": "You might want to check your network connection.", "message": "Überprüfe deine Netzwerkverbindung.",
"description": "The help text for error screen of search modal" "description": "The help text for error screen of search modal"
}, },
"theme.SearchModal.footer.selectText": { "theme.SearchModal.footer.selectText": {
"message": "to select", "message": "auswählen",
"description": "The explanatory text of the action for the enter key" "description": "The explanatory text of the action for the enter key"
}, },
"theme.SearchModal.footer.selectKeyAriaLabel": { "theme.SearchModal.footer.selectKeyAriaLabel": {
"message": "Enter key", "message": "Taste eingeben",
"description": "The ARIA label for the Enter key button that makes the selection" "description": "The ARIA label for the Enter key button that makes the selection"
}, },
"theme.SearchModal.footer.navigateText": { "theme.SearchModal.footer.navigateText": {
"message": "to navigate", "message": "navigieren",
"description": "The explanatory text of the action for the Arrow up and Arrow down key" "description": "The explanatory text of the action for the Arrow up and Arrow down key"
}, },
"theme.SearchModal.footer.navigateUpKeyAriaLabel": { "theme.SearchModal.footer.navigateUpKeyAriaLabel": {
"message": "Arrow up", "message": "Pfeil hoch",
"description": "The ARIA label for the Arrow up key button that makes the navigation" "description": "The ARIA label for the Arrow up key button that makes the navigation"
}, },
"theme.SearchModal.footer.navigateDownKeyAriaLabel": { "theme.SearchModal.footer.navigateDownKeyAriaLabel": {
"message": "Arrow down", "message": "Pfeil runter",
"description": "The ARIA label for the Arrow down key button that makes the navigation" "description": "The ARIA label for the Arrow down key button that makes the navigation"
}, },
"theme.SearchModal.footer.closeText": { "theme.SearchModal.footer.closeText": {
"message": "to close", "message": "schließen",
"description": "The explanatory text of the action for Escape key" "description": "The explanatory text of the action for Escape key"
}, },
"theme.SearchModal.footer.closeKeyAriaLabel": { "theme.SearchModal.footer.closeKeyAriaLabel": {
"message": "Escape key", "message": "Escape Taste",
"description": "The ARIA label for the Escape key button that close the modal" "description": "The ARIA label for the Escape key button that close the modal"
}, },
"theme.SearchModal.footer.searchByText": { "theme.SearchModal.footer.searchByText": {
"message": "Search by", "message": "Suche nach",
"description": "The text explain that the search is making by Algolia" "description": "The text explain that the search is making by Algolia"
}, },
"theme.SearchModal.noResultsScreen.noResultsText": { "theme.SearchModal.noResultsScreen.noResultsText": {
"message": "No results for", "message": "Keine Ergebnisse für",
"description": "The text explains that there are no results for the following search" "description": "The text explains that there are no results for the following search"
}, },
"theme.SearchModal.noResultsScreen.suggestedQueryText": { "theme.SearchModal.noResultsScreen.suggestedQueryText": {
"message": "Try searching for", "message": "Versuche die Suche nach %s",
"description": "The text for the suggested query when no results are found for the following search" "description": "The text for the suggested query when no results are found for the following search"
}, },
"theme.SearchModal.noResultsScreen.reportMissingResultsText": { "theme.SearchModal.noResultsScreen.reportMissingResultsText": {
"message": "Believe this query should return results?", "message": "Sollte diese Suchanfrage Ergebnisse liefern?",
"description": "The text for the question where the user thinks there are missing results" "description": "The text for the question where the user thinks there are missing results"
}, },
"theme.SearchModal.noResultsScreen.reportMissingResultsLinkText": { "theme.SearchModal.noResultsScreen.reportMissingResultsLinkText": {
"message": "Let us know.", "message": "Lasse es uns wissen.",
"description": "The text for the link to report missing results" "description": "The text for the link to report missing results"
}, },
"theme.SearchModal.placeholder": { "theme.SearchModal.placeholder": {
"message": "Search docs", "message": "Dokumentation durchsuchen",
"description": "The placeholder of the input of the DocSearch pop-up modal" "description": "The placeholder of the input of the DocSearch pop-up modal"
}, },
"theme.docs.sidebar.closeSidebarButtonAriaLabel": { "theme.docs.sidebar.closeSidebarButtonAriaLabel": {
"message": "Close navigation bar", "message": "Navigationsleiste schließen",
"description": "The ARIA label for close button of mobile sidebar" "description": "The ARIA label for close button of mobile sidebar"
}, },
"theme.docs.sidebar.toggleSidebarButtonAriaLabel": { "theme.docs.sidebar.toggleSidebarButtonAriaLabel": {
"message": "Toggle navigation bar", "message": "Navigationsleiste ein-/ausblenden",
"description": "The ARIA label for hamburger menu button of mobile navigation" "description": "The ARIA label for hamburger menu button of mobile navigation"
}, },
"theme.NavBar.navAriaLabel": { "theme.NavBar.navAriaLabel": {
"message": "Main", "message": "Haupt",
"description": "The ARIA label for the main navigation" "description": "The ARIA label for the main navigation"
}, },
"theme.docs.sidebar.navAriaLabel": { "theme.docs.sidebar.navAriaLabel": {
"message": "Docs sidebar", "message": "Dokumentationsseitenleiste",
"description": "The ARIA label for the sidebar navigation" "description": "The ARIA label for the sidebar navigation"
} }
} }

View file

@ -1,6 +1,6 @@
--- ---
slug: wails-v2-beta-for-windows slug: wails-v2-beta-for-windows
title: Wails v2 Beta for Windows title: Wails v2 Beta für Windows
authors: authors:
- leaanthony - leaanthony
tags: tags:
@ -19,17 +19,17 @@ tags:
<br /> <br />
``` ```
When I first announced Wails on Reddit, just over 2 years ago from a train in Sydney, I did not expect it to get much attention. A few days later, a prolific tech vlogger released a tutorial video, gave it a positive review and from that point on, interest in the project has skyrocketed. Als ich vor etwas mehr als 2 Jahren Wails auf Reddit von einem Zug aus in Sydney ankündigte, habe ich nicht erwartet, dass Wails viel Aufmerksamkeit bekommt. Ein paar Tage später veröffentlichte ein Techvideo Blogger ein Tutorial Video, worauf hin ich ihm eine positive Bewertung gab und von diesem Punkt an ist das Interesse an dem Projekt in die Höhe geschossen.
It was clear that people were excited about adding web frontends to their Go projects, and almost immediately pushed the project beyond the proof of concept that I had created. At the time, Wails used the [webview](https://github.com/webview/webview) project to handle the frontend, and the only option for Windows was the IE11 renderer. Many bug reports were rooted in this limitation: poor JavaScript/CSS support and no dev tools to debug it. This was a frustrating development experience but there wasn't much that could have been done to rectify it. Es war klar, dass die Leute begeistert davon waren, Web-Frontends zu ihren Go-Projekten hinzuzufügen, und das Projekt fast sofort über den von mir erstellten Proof of Concept hinaus vorantrieben. Damals verwendete Wails das [Webview](https://github.com/webview/webview) Projekt, um das Frontend zu verwalten, und die einzige Option für Windows war der IE11 Renderer. Viele Fehlerberichte waren auf diese Einschränkung zurückzuführen: schlechte JavaScript/CSS-Unterstützung und keine Entwicklungswerkzeuge zur Fehlerbehebung. Das war eine frustrierende Erfahrung bei der Entwicklung, aber es gab nicht viel, was man hätte tun können, um das zu korrigieren.
For a long time, I'd firmly believed that Microsoft would eventually have to sort out their browser situation. The world was moving on, frontend development was booming and IE wasn't cutting it. When Microsoft announced the move to using Chromium as the basis for their new browser direction, I knew it was only a matter of time until Wails could use it, and move the Windows developer experience to the next level. Lange Zeit war ich fest davon überzeugt, dass Microsoft irgendwann seine Browser-Situation klären müsste. Die Welt entwickelte sich weiter, die Frontend-Entwicklung boomte und der IE war nicht mehr zeitgemäß. Als Microsoft angekündigt hat, Chromium als Grundlage für ihre neue Browserrichtung zu verwenden wusste ich, dass es nur eine Frage der Zeit war, bis Wails diese nutzen konnte, und die Windows-Entwicklererfahrung auf das nächste Level heben konnte.
Today, I am pleased to announce: **Wails v2 Beta for Windows**! There's a huge amount to unpack in this release, so grab a drink, take a seat and we'll begin... Heute freue ich mich die **Wails v2 Beta für Windows** ankündigen zu können! In dieser Veröffentlichung gibt es eine ganze Menge auszupacken, also schnapp dir einen Drink, setz dich gemütlich hin und wir beginnen 
### No CGO Dependency! ### Keine CGO Abhängigkeit!
No, I'm not joking: _No_ _CGO_ _dependency_ 🤯! The thing about Windows is that, unlike MacOS and Linux, it doesn't come with a default compiler. In addition, CGO requires a mingw compiler and there's a ton of different installation options. Removing the CGO requirement has massively simplified setup, as well as making debugging an awful lot easier. Whilst I have put a fair bit of effort in getting this working, the majority of the credit should go to [John Chadwick](https://github.com/jchv) for not only starting a couple of projects to make this possible, but also being open to someone taking those projects and building on them. Credit also to [Tad Vizbaras](https://github.com/tadvi) whose [winc](https://github.com/tadvi/winc) project started me down this path. Nein, das ist kein Witz: _Keine_ _CGO_ _Abhängigkeit_🤯! Die Sache an Windows ist, dass es im Gegensatz zu MacOS und Linux nicht mit einem Standard-Compiler kommt. Zusätzlich benötigt CGO einen mingw-Compiler und es gibt eine Menge verschiedener Optionen. Das Entfernen der CGO-Anforderung hat die Einrichtung massiv vereinfacht und auch die Fehlersuche erheblich erleichtert. Obwohl ich mich ziemlich angestrengt habe, um dies zum Laufen zu bringen, gebührt die meiste Anerkennung [John Chadwick](https://github.com/jchv) dafür, dass er nicht nur eine Reihe von Projekten ins Leben gerufen hat, um dies zu ermöglichen, sondern auch offen dafür ist, dass jemand diese Projekte übernimmt und darauf aufbaut. Der Dank geht auch an [Tad Vizbaras](https://github.com/tadvi), dessen <0>winc</0> Projekt mich auf diesen Weg gebracht hat.
### WebView2 Chromium Renderer ### WebView2 Chromium Renderer
@ -44,15 +44,15 @@ No, I'm not joking: _No_ _CGO_ _dependency_ 🤯! The thing about Windows is tha
<br /> <br />
``` ```
Finally, Windows developers get a first class rendering engine for their applications! Gone are the days of contorting your frontend code to work on Windows. On top of that, you get a first-class developer tools experience! Endlich erhalten Windows-Entwickler eine erstklassige Rendering-Engine für ihre Anwendungen! Vorbei sind die Tage der Verfälschung von deinem Frontend-Code, um unter Windows zu arbeiten. Darüber hinaus erhältst du eine erstklassige Entwickler-Tool-Erfahrung!
The WebView2 component does, however, have a requirement to have the `WebView2Loader.dll` sitting alongside the binary. This makes distribution just that little bit more painful than we gophers are used to. All solutions and libraries (that I know of) that use WebView2 have this dependency. Die WebView2 Komponente benötigt jedoch die `WebView2Loader.dll` im selben Ordner wie die Binärdatei. Das macht die Distribution ein wenig anstrengender, als wir Gopher gewohnt sind. Alle Lösungen und Bibliotheken (die ich kenne), die WebView2 verwenden, haben diese Abhängigkeit.
However, I'm really excited to announce that Wails applications _have no such requirement_! Thanks to the wizardry of [John Chadwick](https://github.com/jchv), we are able to bundle this dll inside the binary and get Windows to load it as if it were present on disk. Allerdings bin ich wirklich gespannt anzukündigen, dass Wails Anwendungen _keine solche Anforderung_ haben! Dank des Zauberspruchs von [John Chadwick](https://github.com/jchv), sind wir in der Lage, dieses dll in der Binärdatei zu bündeln und Windows dazu zu bringen, diese zu laden, als wäre sie auf der Festplatte vorhanden.
Gophers rejoice! The single binary dream lives on! Die Gopher freuen sich! Der einzelne Binärdatei-Traum lebt weiter!
### New Features ### Neue Funktionen
```mdx-code-block ```mdx-code-block
<div class="text--center"> <div class="text--center">
@ -65,11 +65,11 @@ Gophers rejoice! The single binary dream lives on!
<br /> <br />
``` ```
There were a lot of requests for native menu support. Wails has finally got you covered. Application menus are now available and include support for most native menu features. This includes standard menu items, checkboxes, radio groups, submenus and separators. Es gab viele Anfragen für native Menüunterstützung. Wails hat endlich eine Lösung für dich. Anwendungsmenüs sind jetzt verfügbar und enthalten Unterstützung für die meisten nativen Menüfunktionen. Dazu gehören Standardmenüs, Kontrollkästchen, "Radio" gruppen, Untermenüs und Trenner.
There were a huge number of requests in v1 for the ability to have greater control of the window itself. I'm happy to announce that there's new runtime APIs specifically for this. It's feature-rich and supports multi-monitor configurations. There is also an improved dialogs API: Now, you can have modern, native dialogs with rich configuration to cater for all your dialog needs. In v1 gab es eine große Anzahl von Bitten, das Fenster selbst besser kontrollieren zu können. Ich freue mich, mitteilen zu können, dass es speziell dafür neue Laufzeit-APIs gibt. Es verfügt über zahlreiche Funktionen und unterstützt Konfigurationen mit mehreren Monitoren. Es gibt auch eine verbesserte API: Du kannst jetzt moderne, native Dialoge mit reicher Konfiguration haben, um all deine Dialoganforderungen zu erfüllen.
There is now the option to generate IDE configuration along with your project. This means that if you open your project in a supported IDE, it will already be configured for building and debugging your application. Currently VSCode is supported but we hope to support other IDEs such as Goland soon. Es gibt jetzt die Möglichkeit, IDE-Konfiguration zusammen mit deinem Projekt zu generieren. Das bedeutet, wenn du dein Projekt in einer unterstützten IDE öffnest, wird es bereits für das Erstellen und Debuggen deiner Anwendung konfiguriert. Momentan wird VSCode unterstützt, aber wir hoffen, bald andere IDEs wie Goland zu unterstützen.
```mdx-code-block ```mdx-code-block
<div class="text--center"> <div class="text--center">
@ -82,19 +82,19 @@ There is now the option to generate IDE configuration along with your project. T
<br /> <br />
``` ```
### No requirement to bundle assets ### Keine Anforderung zum Bündeln von Assets
A huge pain-point of v1 was the need to condense your entire application down to single JS & CSS files. I'm happy to announce that for v2, there is no requirement to bundle assets, in any way, shape or form. Want to load a local image? Use an `<img>` tag with a local src path. Want to use a cool font? Copy it in and add the path to it in your CSS. Ein großer Schmerzpunkt von v1 war die Notwendigkeit, die gesamte Anwendung in einzelne JS- & CSS-Dateien zu kondensieren. Ich freue mich, ankündigen zu können, dass es für v2 keine Anforderung mehr gibt, Assets in irgendeiner weise oder Form zu bündeln. Möchtest du ein lokales Bild laden? Verwende ein `<img>` Tag mit einem lokalen src Pfad. Möchtest du eine coole Schriftart verwenden? Kopiere sie in dein CSS und füge den Pfad hinzu.
> Wow, that sounds like a webserver... > Wow, das klingt wie ein Webserver...
Yes, it works just like a webserver, except it isn't. Ja, es funktioniert auch genau wie ein Webserver, nur dass es keiner ist.
> So how do I include my assets? > Wie füge ich also meine Assets ein?
You just pass a single `embed.FS` that contains all your assets into your application configuration. They don't even need to be in the top directory - Wails will just work it out for you. Du übergibst ein einziges `embed.FS` mit all deinen Assets in deiner Anwendungskonfiguration. Es muss sich nicht einmal im obersten Verzeichnis befinden - Wails findet das für dich heraus.
### New Development Experience ### Neue Entwicklungserfahrung
```mdx-code-block ```mdx-code-block
<div class="text--center"> <div class="text--center">
@ -107,20 +107,20 @@ You just pass a single `embed.FS` that contains all your assets into your applic
<br /> <br />
``` ```
Now that assets don't need to be bundled, it's enabled a whole new development experience. The new `wails dev` command will build and run your application, but instead of using the assets in the `embed.FS`, it loads them directly from disk. Nun, da Assets nicht mehr gebündelt werden müssen, ist es eine ganz neue Entwicklungserfahrung. Der neue `wails dev` Befehl wird deine Anwendung erstellen und ausführen, aber statt die Assets in die `embed.FS` einzubetten werden diese direkt von der Festplatte geladen.
It also provides the additional features: Es bietet auch zusätzlichen Funktionen:
- Hot reload - Any changes to frontend assets will trigger and auto reload of the application frontend - Hot reload - Änderungen an Frontend-Assets lösen ein neu laden des Anwendungsfrontends aus
- Auto rebuild - Any changes to your Go code will rebuild and relaunch your application - Automatisches Neuerstellen - Alle Änderungen an deinem Go-Code werden deine Anwendung neu erstellen und neu starten
In addition to this, a webserver will start on port 34115. This will serve your application to any browser that connects to it. All connected web browsers will respond to system events like hot reload on asset change. Zusätzlich startet ein Webserver auf Port 34115. Dadurch wird deine Anwendung jedem Browser zur Verfügung gestellt, der sich mit diesem verbindet. Alle angeschlossenen Web-Browser reagieren auf Systemereignisse, wie zum Beispiel den hot Reload bei der Änderung von Dateien.
In Go, we are used to dealing with structs in our applications. It's often useful to send structs to our frontend and use them as state in our application. In v1, this was a very manual process and a bit of a burden on the developer. I'm happy to announce that in v2, any application run in dev mode will automatically generate TypeScript models for all structs that are input or output parameters to bound methods. This enables seamless interchange of data models between the two worlds. In Go sind wir an Structs, die wir in unseren Anwendungen haben, gewöhnt. Es ist oft hilfreich, Anweisungen an das Frontend zu senden und diese als Status in unserer Anwendung zu verwenden. In v1 war das ein sehr manueller Prozess und eine kleine Belastung für den Entwickler. Ich freue mich, ankündigen zu können, dass in v2, jede Anwendung, die im Dev-Modus ausgeführt wird, automatisch Modelle in TypeScript für alle Structs generiert, die Eingabe- oder Ausgabeparameter für verknüpfte Methoden sind. Dies ermöglicht den nahtlosen Austausch von Modellen zwischen den beiden Welten.
In addition to this, another JS module is dynamically generated wrapping all your bound methods. This provides JSDoc for your methods, providing code completion and hinting in your IDE. It's really cool when you get data models auto-imported when hitting tab in an auto-generated module wrapping your Go code! Zusätzlich wird ein weiteres JS-Modul dynamisch generiert, welches alle verknüpften Methoden beinhaltet. Das stellt JSDoc für deine Methoden bereit und bietet Code-Vervollständigung und Hinweise in deiner IDE an. Es ist wirklich cool, wenn Datenmodelle automatisch importiert werden, nachdem man Tab drückt und das alles dank automatisch generierten Modulen, die deinen Go code verpacken!
### Remote Templates ### Remote Vorlagen
```mdx-code-block ```mdx-code-block
<div class="text--center"> <div class="text--center">
@ -133,29 +133,29 @@ In addition to this, another JS module is dynamically generated wrapping all you
<br /> <br />
``` ```
Getting an application up and running quickly was always a key goal for the Wails project. When we launched, we tried to cover a lot of the modern frameworks at the time: react, vue and angular. The world of frontend development is very opinionated, fast moving and hard to keep on top of! As a result, we found our base templates getting out of date pretty quickly and this caused a maintenance headache. It also meant that we didn't have cool modern templates for the latest and greatest tech stacks. Eine Anwendung schnell zum Laufen zu bringen, war immer ein zentrales Ziel für das Wails Projekt. Als wir starteten, haben wir versucht, viele der modernen Frameworks der Zeit abzudecken: react, vue und angular. Die Welt der Frontend-Entwicklung ist sehr eigenwillig, schnelllebig und schwer zu überblicken! Das führte dazu, dass unsere Basisvorlagen ziemlich schnell veraltet waren, was zu Wartungsproblemen führte. Es bedeutete auch, dass wir keine coolen modernen Vorlagen für die neuesten und die besten Technologie-Stacks hatten.
With v2, I wanted to empower the community by giving you the ability to create and host templates yourselves, rather than rely on the Wails project. So now you can create projects using community supported templates! I hope this will inspire developers to create a vibrant ecosystem of project templates. I'm really quite excited about what our developer community can create! Mit v2 wollte ich die Community stärken, indem ich ihr die Möglichkeit gab, Vorlagen selbst zu erstellen und zu verwalten, statt sich auf das Wails Projekt verlassen zu müssen. So können jetzt Projekte mit Community-unterstützten Vorlagen erstellt werden! Ich hoffe, dass Entwickler dazu inspirieren werden, ein lebendiges Ökosystem von Projektvorlagen zu erstellen. Ich bin wirklich sehr gespannt darüber, was unsere Entwicklergemeinschaft erstellen kann!
### In Conclusion ### Fazit
Wails v2 represents a new foundation for the project. The aim of this release is to get feedback on the new approach, and to iron out any bugs before a full release. Your input would be most welcome. Please direct any feedback to the [v2 Beta](https://github.com/wailsapp/wails/discussions/828) discussion board. Wails v2 stellt eine neue Grundlage für das Projekt dar. Das Ziel dieser Veröffentlichung ist es, Rückmeldungen über den neuen Ansatz zu erhalten und Fehler vor einer vollständigen Veröffentlichung zu beseitigen. Dein Input ist willkommen. Bitte sende jegliches Feedback an das [v2 Beta](https://github.com/wailsapp/wails/discussions/828) Diskussionsforum.
There were many twists and turns, pivots and u-turns to get to this point. This was due partly to early technical decisions that needed changing, and partly because some core problems we had spent time building workarounds for were fixed upstream: Gos embed feature is a good example. Fortunately, everything came together at the right time, and today we have the very best solution that we can have. I believe the wait has been worth it - this would not have been possible even 2 months ago. Es gab viele Drehungen und Wendungen, Schwenker und U-Turns, um zu diesem Punkt zu gelangen. Das lag zum Teil an frühen technischen Entscheidungen, die geändert werden mussten, und auch daran, dass einige Kernprobleme, für die wir viel Zeit mit der Entwicklung von Umgehungslösungen verbracht hatten, im Vorfeld behoben wurden: Die Einbettungsfunktion von Go ist ein gutes Beispiel dafür. Glücklicherweise ist alles zur richtigen Zeit zusammengekommen, und heute haben wir die beste Lösung, die wir haben können. Ich glaube, das Warten hat sich gelohnt - noch vor 2 Monaten wäre dies nicht möglich gewesen.
I also need to give a huge thank you :pray: to the following people because without them, this release just wouldn't exist: Ich muss auch einen großen Dank :pray: an die folgenden Leute richten, denn ohne sie würde diese Version einfach nicht existieren:
- [Misite Bao](https://github.com/misitebao) - An absolute workhorse on the Chinese translations and an incredible bug finder. - [Misite Bao](https://github.com/misitebao) - Ein absolutes Arbeitstier bei den chinesischen Übersetzungen und ein unglaublicher Fehlerfinder.
- [John Chadwick](https://github.com/jchv) - His amazing work on [go-webview2](https://github.com/jchv/go-webview2) and [go-winloader](https://github.com/jchv/go-winloader) have made the Windows version we have today possible. - [John Chadwick](https://github.com/jchv) - Seine erstaunliche Arbeit an [go-webview2](https://github.com/jchv/go-webview2) und [go-winloader](https://github.com/jchv/go-winloader) haben die Windows-Version ermöglicht, die wir heute haben.
- [Tad Vizbaras](https://github.com/tadvi) - Experimenting with his [winc](https://github.com/tadvi/winc) project was the first step down the path to a pure Go Wails. - [Tad Vizbaras](https://github.com/tadvi) - Experimentierte mit seinem [winc](https://github.com/tadvi/winc) Projekt war der erste Schritt auf dem Weg zu einem reinen Go-Wails.
- [Mat Ryer](https://github.com/matryer) - His support, encouragement and feedback has really helped drive the project forward. - [Mat Ryer](https://github.com/matryer) - Seine Unterstützung, Ermutigung und sein Feedback haben das Projekt wirklich vorangetrieben.
And finally, I'd like to give a special thank you to all the [project sponsors](/credits#sponsors), including [JetBrains](https://www.jetbrains.com?from=Wails), whose support drive the project in many ways behind the scenes. Abschließend möchte ich mich bei allen [Projektsponsoren](/credits#sponsors)ganz besonders bedanken, einschließlich [JetBrains](https://www.jetbrains.com?from=Wails), dessen Unterstützung das Projekt in vielerlei Hinsicht hinter den Kulissen antreibt.
I look forward to seeing what people build with Wails in this next exciting phase of the project! Ich freue mich darauf, zu sehen, was die Leute mit Wails in dieser nächsten aufregenden Phase des Projekts bauen!
Lea. Lea.
PS: MacOS and Linux users need not feel left out - porting to this new foundation is actively under way and most of the hard work has already been done. Hang in there! PS: MacOS- und Linux-Benutzer müssen sich nicht ausgeschlossen fühlen - die Portierung auf diese neue Grundlage ist in vollem Gange und die meiste harte Arbeit wurde bereits geleistet. Haltet weiter durch!
PPS: If you or your company find Wails useful, please consider [sponsoring the project](https://github.com/sponsors/leaanthony). Thanks! PPS: Wenn du oder dein Unternehmen Wails nützlich finden, erwäge bitte [das Projekt](https://github.com/sponsors/leaanthony) zu sponsern. Vielen Dank!

View file

@ -1,6 +1,6 @@
--- ---
slug: wails-v2-beta-for-mac slug: wails-v2-beta-for-mac
title: Wails v2 Beta for MacOS title: Wails v2 Beta für MacOS
authors: authors:
- leaanthony - leaanthony
tags: tags:
@ -19,13 +19,13 @@ tags:
<br /> <br />
``` ```
Today marks the first beta release of Wails v2 for Mac! It's taken quite a while to get to this point and I'm hoping that today's release will give you something that's reasonably useful. There have been a number of twists and turns to get to this point and I'm hoping, with your help, to iron out the crinkles and get the Mac port polished for the final v2 release. Heute erscheint die erste Beta-Version von Wails v2 für Mac! Es hat eine Weile gedauert, um an diesen Punkt zu gelangen, und ich hoffe , dass die heutige Veröffentlichung dir etwas geben wird, das ziemlich nützlich ist. Es gab eine Reihe von Drehungen und Wendungen, um zu diesem Punkt zu gelangen, und ich hoffe, dass ich mit deiner Hilfe die Falten ausbügeln und den Mac-Port für die endgültige Version 2 fertigstellen kann.
You mean this isn't ready for production? For your use case, it may well be ready, but there are still a number of known issues so keep your eye on [this project board](https://github.com/wailsapp/wails/projects/7) and if you would like to contribute, you'd be very welcome! Du meinst, dass diese Version nicht Produktions bereit ist? Für deinen Anwendungsfall könnte es durchaus bereit sein, aber es gibt immer noch eine Reihe von bekannten Problemen, also behalte deinen Blick auf [dieses Projektboard](https://github.com/wailsapp/wails/projects/7) und wenn du gerne mitmachen möchtest, wärst du herzlich willkommen!
So what's new for Wails v2 for Mac vs v1? Hint: It's pretty similar to the Windows Beta :wink: Was ist neu für Wails v2 für Mac vs v1? Hinweis: Es ist ziemlich ähnlich zu der Windows Beta :wink:
### New Features ### Neue Funktionen
```mdx-code-block ```mdx-code-block
<div class="text--center"> <div class="text--center">
@ -38,47 +38,47 @@ So what's new for Wails v2 for Mac vs v1? Hint: It's pretty similar to the Windo
<br /> <br />
``` ```
There were a lot of requests for native menu support. Wails has finally got you covered. Application menus are now available and include support for most native menu features. This includes standard menu items, checkboxes, radio groups, submenus and separators. Es gab viele Anfragen für native Menüunterstützung. Wails hat endlich eine Lösung für dich. Anwendungsmenüs sind jetzt verfügbar und enthalten Unterstützung für die meisten nativen Menüfunktionen. Dazu gehören Standardmenüs, Kontrollkästchen, "Radio" gruppen, Untermenüs und Trennzeichen.
There were a huge number of requests in v1 for the ability to have greater control of the window itself. I'm happy to announce that there's new runtime APIs specifically for this. It's feature-rich and supports multi-monitor configurations. There is also an improved dialogs API: Now, you can have modern, native dialogs with rich configuration to cater for all your dialog needs. In v1 gab es eine große Anzahl von Bitten, das Fenster selbst besser kontrollieren zu können. Ich freue mich, mitteilen zu können, dass es speziell dafür neue Laufzeit-APIs gibt. Es verfügt über zahlreiche Funktionen und unterstützt Konfigurationen mit mehreren Monitoren. Es gibt auch eine verbesserte API: Du kannst jetzt moderne, native Dialoge mit reicher Konfiguration haben, um all deine Dialoganforderungen zu erfüllen.
### Mac Specific Options ### Mac-spezifische Optionen
In addition to the normal application options, Wails v2 for Mac also brings some Mac extras: Zusätzlich zu den normalen Anwendungsoptionen bringt Wails v2 für Mac auch einige Mac-Extras:
- Make your window all funky and translucent, like all the pretty swift apps! - Mach dein Fenster ganz cool und durchsichtig, wie all die hübschen Swift-Apps!
- Highly customisable titlebar - Hochwertig anpassbare Titelleiste
- We support the NSAppearance options for the application - Wir unterstützen die NSAppearance Optionen für die Anwendung
- Simple config to auto-create an "About" menu - Einfache Konfiguration zum automatischen Erstellen eines "Info"-Menüs
### No requirement to bundle assets ### Keine Anforderung zum Bündeln von Assets
A huge pain-point of v1 was the need to condense your entire application down to single JS & CSS files. I'm happy to announce that for v2, there is no requirement to bundle assets, in any way, shape or form. Want to load a local image? Use an `<img>` tag with a local src path. Want to use a cool font? Copy it in and add the path to it in your CSS. Ein großer Schmerzpunkt von v1 war die Notwendigkeit, die gesamte Anwendung in einzelne JS- & CSS-Dateien zu kondensieren. Ich freue mich, ankündigen zu können, dass es für v2 keine Anforderung mehr gibt, Assets in irgendeiner weise oder Form zu bündeln. Möchtest du ein lokales Bild laden? Verwende ein `<img>` Tag mit einem lokalen src Pfad. Möchtest du eine coole Schriftart verwenden? Kopiere sie in dein CSS und füge den Pfad hinzu.
> Wow, that sounds like a webserver... > Wow, das klingt wie ein Webserver...
Yes, it works just like a webserver, except it isn't. Ja, er funktioniert genau wie ein Webserver, nur dass er es nicht ist.
> So how do I include my assets? > Wie füge ich also meine Assets ein?
You just pass a single `embed.FS` that contains all your assets into your application configuration. They don't even need to be in the top directory - Wails will just work it out for you. Du übergibst ein einziges `embed.FS` mit all deinen Assets in deiner Anwendungskonfiguration. Es muss sich nicht einmal im obersten Verzeichnis befinden - Wails findet das für dich heraus.
### New Development Experience ### Neue Entwicklungserfahrung
Now that assets don't need to be bundled, it's enabled a whole new development experience. The new `wails dev` command will build and run your application, but instead of using the assets in the `embed.FS`, it loads them directly from disk. Nun, da Assets nicht mehr gebündelt werden müssen, gibt es eine ganz neue Entwicklungserfahrung. Der neue `wails dev` Befehl wird deine Anwendung erstellen und ausführen, aber statt die Assets in die `embed.FS` einzubetten werden diese direkt von der Festplatte geladen.
It also provides the additional features: Diese bietet auch zusätzlichen Funktionen:
- Hot reload - Any changes to frontend assets will trigger and auto reload of the application frontend - Hot reload - Änderungen an Frontend-Assets lösen ein neu laden des Anwendungsfrontends aus
- Auto rebuild - Any changes to your Go code will rebuild and relaunch your application - Automatisches Neuerstellen - Alle Änderungen an deinem Go-Code werden deine Anwendung neu erstellen und neu starten
In addition to this, a webserver will start on port 34115. This will serve your application to any browser that connects to it. All connected web browsers will respond to system events like hot reload on asset change. Zusätzlich startet ein Webserver auf Port 34115. Dadurch wird deine Anwendung jedem Browser zur Verfügung gestellt, der sich mit diesem verbindet. Alle angeschlossenen Web-Browser reagieren auf Systemereignisse, wie zum Beispiel den hot Reload bei der Änderung von Dateien.
In Go, we are used to dealing with structs in our applications. It's often useful to send structs to our frontend and use them as state in our application. In v1, this was a very manual process and a bit of a burden on the developer. I'm happy to announce that in v2, any application run in dev mode will automatically generate TypeScript models for all structs that are input or output parameters to bound methods. This enables seamless interchange of data models between the two worlds. In Go sind wir an Structs, die wir in unseren Anwendungen haben, gewöhnt. Es ist oft nützlich, Anweisungen an unser Frontend zu senden und sie als Status in unserer Anwendung zu verwenden. In v1 war das ein sehr manueller Prozess und eine kleine Belastung für den Entwickler. Ich freue mich, ankündigen zu können, dass in v2, jede Anwendung, die im Dev-Modus ausgeführt wird, automatisch Modelle in TypeScript für alle Structs generiert, die Eingabe- oder Ausgabeparameter für verknüpfte Methoden sind. Dies ermöglicht den nahtlosen Austausch von Modellen zwischen den beiden Welten.
In addition to this, another JS module is dynamically generated wrapping all your bound methods. This provides JSDoc for your methods, providing code completion and hinting in your IDE. It's really cool when you get data models auto-imported when hitting tab in an auto-generated module wrapping your Go code! Zusätzlich wird ein weiteres JS-Modul dynamisch generiert, welches alle verknüpften Methoden beinhaltet. Das stellt JSDoc für deine Methoden bereit und bietet Code-Vervollständigung und Hinweise in deiner IDE. Es ist wirklich cool, wenn Datenmodelle automatisch importiert werden, nachdem man Tab drückt und das alles dank automatisch generierten Modulen, die deinen Go code verpacken!
### Remote Templates ### Remote Vorlagen
```mdx-code-block ```mdx-code-block
<div class="text--center"> <div class="text--center">
@ -91,13 +91,13 @@ In addition to this, another JS module is dynamically generated wrapping all you
<br /> <br />
``` ```
Getting an application up and running quickly was always a key goal for the Wails project. When we launched, we tried to cover a lot of the modern frameworks at the time: react, vue and angular. The world of frontend development is very opinionated, fast moving and hard to keep on top of! As a result, we found our base templates getting out of date pretty quickly and this caused a maintenance headache. It also meant that we didn't have cool modern templates for the latest and greatest tech stacks. Eine Anwendung schnell zum Laufen zu bringen, war immer ein zentrales Ziel für das Wails Projekt. Als wir starteten, haben wir versucht, viele der modernen Frameworks der Zeit abzudecken: react, vue und angular. Die Welt der Frontend-Entwicklung ist sehr eigenwillig, schnelllebig und schwer zu überblicken! Das führte dazu, dass unsere Basisvorlagen ziemlich schnell veraltet waren, was zu Wartungsproblemen führte. Es bedeutete auch, dass wir keine coolen modernen Vorlagen für die neuesten und die besten Technologie-Stacks hatten.
With v2, I wanted to empower the community by giving you the ability to create and host templates yourselves, rather than rely on the Wails project. So now you can create projects using community supported templates! I hope this will inspire developers to create a vibrant ecosystem of project templates. I'm really quite excited about what our developer community can create! Mit v2 wollte ich die Community stärken, indem ich ihr die Möglichkeit gab, Vorlagen selbst zu erstellen und zu verwalten, statt sich auf das Wails Projekt verlassen zu müssen. So können jetzt Projekte mit Community-unterstützten Vorlagen erstellt werden! Ich hoffe, dass Entwickler dazu inspiriert werden, ein lebendiges Ökosystem von Projektvorlagen zu erstellen. Ich bin wirklich sehr gespannt darauf, was unsere Entwicklergemeinschaft erstellen kann!
### Native M1 Support ### Native M1 Unterstützung
Thanks to the amazing support of [Mat Ryer](https://github.com/matryer/), the Wails project now supports M1 native builds: Dank der erstaunlichen Unterstützung von [Mat Ryer](https://github.com/matryer/) unterstützt das Wails Projekt nun M1 native Builds:
```mdx-code-block ```mdx-code-block
<div class="text--center"> <div class="text--center">
@ -110,7 +110,7 @@ Thanks to the amazing support of [Mat Ryer](https://github.com/matryer/), the Wa
<br /> <br />
``` ```
You can also specify `darwin/amd64` as a target too: Du kannst auch `darwin/amd64` als Ziel festlegen:
```mdx-code-block ```mdx-code-block
<div class="text--center"> <div class="text--center">
@ -123,7 +123,7 @@ You can also specify `darwin/amd64` as a target too:
<br /> <br />
``` ```
Oh, I almost forgot.... you can also do `darwin/universal`.... :wink: Oh, beinahe hätte ich es vergessen.... Du kannst auch `Darwin/Universal` als Ziel festlegen.... :wink:
```mdx-code-block ```mdx-code-block
<div class="text--center"> <div class="text--center">
@ -136,9 +136,9 @@ Oh, I almost forgot.... you can also do `darwin/universal`.... :wink:
<br /> <br />
``` ```
### Cross Compilation to Windows ### Cross-Kompilierung für Windows
Because Wails v2 for Windows is pure Go, you can target Windows builds without docker. Da Wails v2 für Windows aus reinem Go besteht, kannst du Windows Builds ohne Docker erzeugen.
```mdx-code-block ```mdx-code-block
<div class="text--center"> <div class="text--center">
@ -153,18 +153,18 @@ Because Wails v2 for Windows is pure Go, you can target Windows builds without d
### WKWebView Renderer ### WKWebView Renderer
V1 relied on a (now deprecated) WebView component. V2 uses the most recent WKWebKit component so expect the latest and greatest from Apple. V1 verlässt sich auf eine (inzwischen veraltete) WebView-Komponente. V2 verwendet die neueste WKWebKit-Komponente, daher erwarte das neueste und größte von Apple.
### In Conclusion ### Fazit
As I'd said in the Windows release notes, Wails v2 represents a new foundation for the project. The aim of this release is to get feedback on the new approach, and to iron out any bugs before a full release. Your input would be most welcome! Please direct any feedback to the [v2 Beta](https://github.com/wailsapp/wails/discussions/828) discussion board. Wie ich in den Windows Release Notes gesagt hatte, ist Wails v2 eine neue Grundlage für das Projekt. Das Ziel dieser Veröffentlichung ist es, Rückmeldungen über den neuen Ansatz zu erhalten und Fehler vor einer vollständigen Veröffentlichung zu beseitigen. Dein Input ist willkommen! Bitte richte alle Rückmeldungen an das [v2 Beta](https://github.com/wailsapp/wails/discussions/828) Diskussionsforum.
And finally, I'd like to give a special thank you to all the [project sponsors](/credits#sponsors), including [JetBrains](https://www.jetbrains.com?from=Wails), whose support drive the project in many ways behind the scenes. Abschließend möchte ich mich bei allen [Projektsponsoren](/credits#sponsors) ganz besonders bedanken, einschließlich [JetBrains](https://www.jetbrains.com?from=Wails), dessen Unterstützung das Projekt in vielerlei Hinsicht hinter den Kulissen antreibt.
I look forward to seeing what people build with Wails in this next exciting phase of the project! Ich freue mich darauf, zu sehen, was die Leute mit Wails in dieser nächsten aufregenden Phase des Projekts bauen!
Lea. Lea.
PS: Linux users, you're next! PS: Linux Benutzer, ihr seid als Nächstes dran!
PPS: If you or your company find Wails useful, please consider [sponsoring the project](https://github.com/sponsors/leaanthony). Thanks! PPS: Wenn du oder dein Unternehmen Wails nützlich finden, erwäge bitte [das Projekt](https://github.com/sponsors/leaanthony) zu sponsern. Vielen Dank!

View file

@ -1,6 +1,6 @@
--- ---
slug: wails-v2-beta-for-linux slug: wails-v2-beta-for-linux
title: Wails v2 Beta for Linux title: Wails v2 Beta für Linux
authors: authors:
- leaanthony - leaanthony
tags: tags:
@ -19,9 +19,9 @@ tags:
<br /> <br />
``` ```
I'm pleased to finally announce that Wails v2 is now in beta for Linux! It is somewhat ironic that the very first experiments with v2 was on Linux and yet it has ended up as the last release. That being said, the v2 we have today is very different from those first experiments. So without further ado, let's go over the new features: Ich freue mich, endlich ankündigen zu können, dass Wails v2 jetzt in der Beta für Linux ist! Es ist etwas ironisch, dass die ersten Experimente mit v2 unter Linux liefen und trotzdem als letzte veröffentlicht wurden. Die heutige v2 unterscheidet sich jedoch stark von diesen ersten Versuchen. Also, ohne weiteres drum rum Gerede, schauen wir uns die neuen Funktionen an:
### New Features ### Neue Funktionen
```mdx-code-block ```mdx-code-block
<div class="text--center"> <div class="text--center">
@ -34,38 +34,38 @@ I'm pleased to finally announce that Wails v2 is now in beta for Linux! It is so
<br /> <br />
``` ```
There were a lot of requests for native menu support. Wails has finally got you covered. Application menus are now available and include support for most native menu features. This includes standard menu items, checkboxes, radio groups, submenus and separators. Es gab viele Anfragen für native Menüunterstützung. Wails hat endlich eine Lösung für dich. Anwendungsmenüs sind jetzt verfügbar und enthalten Unterstützung für die meisten nativen Menüfunktionen. Dazu gehören Standardmenüs, Kontrollkästchen, "Radio" gruppen, Untermenüs und Trenner.
There were a huge number of requests in v1 for the ability to have greater control of the window itself. I'm happy to announce that there's new runtime APIs specifically for this. It's feature-rich and supports multi-monitor configurations. There is also an improved dialogs API: Now, you can have modern, native dialogs with rich configuration to cater for all your dialog needs. In v1 gab es eine große Anzahl von Bitten, das Fenster selbst besser kontrollieren zu können. Ich freue mich, mitteilen zu können, dass es speziell dafür neue Laufzeit-APIs gibt. Es verfügt über zahlreiche Funktionen und unterstützt Konfigurationen mit mehreren Monitoren. Es gibt auch eine verbesserte API: Du kannst jetzt moderne, native Dialoge mit reicher Konfiguration haben, um all deine Dialoganforderungen zu erfüllen.
### No requirement to bundle assets ### Keine Anforderung zum Bündeln von Assets
A huge pain-point of v1 was the need to condense your entire application down to single JS & CSS files. I'm happy to announce that for v2, there is no requirement to bundle assets, in any way, shape or form. Want to load a local image? Use an `<img>` tag with a local src path. Want to use a cool font? Copy it in and add the path to it in your CSS. Ein großer Schmerzpunkt von Version 1 war die Notwendigkeit, die gesamte Anwendung in einzelne JS- & CSS-Dateien zu kondensieren. Ich freue mich, ankündigen zu können, dass es für Version 2 keine Anforderung mehr gibt, Assets in irgendeiner weise oder Form zu bündeln. Möchtest du ein lokales Bild laden? Verwende ein `<img>` Tag mit einem lokalen src Pfad. Möchtest du eine coole Schriftart verwenden? Kopiere sie in dein CSS und füge den Pfad hinzu.
> Wow, that sounds like a webserver... > Wow, das klingt wie ein Webserver...
Yes, it works just like a webserver, except it isn't. Ja, er funktioniert genau wie ein Webserver, nur dass er es nicht ist.
> So how do I include my assets? > Wie füge ich also meine Assets ein?
You just pass a single `embed.FS` that contains all your assets into your application configuration. They don't even need to be in the top directory - Wails will just work it out for you. Du übergibst ein einziges `embed.FS` mit all deinen Assets in deiner Anwendungskonfiguration. Es muss sich nicht einmal im obersten Verzeichnis befinden - Wails findet das für dich heraus.
### New Development Experience ### Neue Entwicklungserfahrung
Now that assets don't need to be bundled, it's enabled a whole new development experience. The new `wails dev` command will build and run your application, but instead of using the assets in the `embed.FS`, it loads them directly from disk. Nun, da Assets nicht mehr gebündelt werden müssen, gibt es eine ganz neue Entwicklungserfahrung. Der neue `wails dev` Befehl wird deine Anwendung erstellen und ausführen, aber statt die Assets in die `embed.FS` einzubetten werden diese direkt von der Festplatte geladen.
It also provides the additional features: Es bietet auch zusätzlichen Funktionen:
- Hot reload - Any changes to frontend assets will trigger and auto reload of the application frontend - Hot Reload Jede Änderung an Frontend-Assets löst ein automatisches Neuladen des Anwendungs-Frontends aus
- Auto rebuild - Any changes to your Go code will rebuild and relaunch your application - Automatisches Neuerstellen - Alle Änderungen an deinem Go-Code werden deine Anwendung neu erstellen und neu starten
In addition to this, a webserver will start on port 34115. This will serve your application to any browser that connects to it. All connected web browsers will respond to system events like hot reload on asset change. Zusätzlich startet ein Webserver auf Port 34115. Dadurch wird deine Anwendung jedem Browser zur Verfügung gestellt, der sich mit diesem verbindet. Alle angeschlossenen Web-Browser reagieren auf Systemereignisse, wie zum Beispiel den hot Reload bei der Änderung von Dateien.
In Go, we are used to dealing with structs in our applications. It's often useful to send structs to our frontend and use them as state in our application. In v1, this was a very manual process and a bit of a burden on the developer. I'm happy to announce that in v2, any application run in dev mode will automatically generate TypeScript models for all structs that are input or output parameters to bound methods. This enables seamless interchange of data models between the two worlds. In Go sind wir an Structs, die wir in unseren Anwendungen haben, gewöhnt. Es ist oft nützlich, Anweisungen an unser Frontend zu senden und sie als Status in unserer Anwendung zu verwenden. In v1 war das ein sehr manueller Prozess und eine kleine Belastung für den Entwickler. Ich freue mich, ankündigen zu können, dass in v2, jede Anwendung, die im Dev-Modus ausgeführt wird, automatisch Modelle in TypeScript für alle Structs generiert, die Eingabe- oder Ausgabeparameter für verknüpfte Methoden sind. Dies ermöglicht den nahtlosen Austausch von Modellen zwischen den beiden Welten.
In addition to this, another JS module is dynamically generated wrapping all your bound methods. This provides JSDoc for your methods, providing code completion and hinting in your IDE. It's really cool when you get data models auto-imported when hitting tab in an auto-generated module wrapping your Go code! Zusätzlich wird ein weiteres JS-Modul dynamisch generiert, welches alle verknüpften Methoden beinhaltet. Das stellt JSDoc für deine Methoden bereit und bietet Code-Vervollständigung und Hinweise in deiner IDE. Es ist wirklich cool, wenn Datenmodelle automatisch importiert werden, nachdem man Tab drückt und das alles dank automatisch generierten Module, die deinen Go code verpacken!
### Remote Templates ### Remote Vorlagen
```mdx-code-block ```mdx-code-block
<div class="text--center"> <div class="text--center">
@ -78,13 +78,13 @@ In addition to this, another JS module is dynamically generated wrapping all you
<br /> <br />
``` ```
Getting an application up and running quickly was always a key goal for the Wails project. When we launched, we tried to cover a lot of the modern frameworks at the time: react, vue and angular. The world of frontend development is very opinionated, fast moving and hard to keep on top of! As a result, we found our base templates getting out of date pretty quickly and this caused a maintenance headache. It also meant that we didn't have cool modern templates for the latest and greatest tech stacks. Eine Anwendung schnell zum Laufen zu bringen, war immer ein zentrales Ziel für das Wails Projekt. Als wir starteten, haben wir versucht, viele der modernen Frameworks der Zeit abzudecken: react, vue und angular. Die Welt der Frontend-Entwicklung ist sehr eigenwillig, schnelllebig und schwer zu überblicken! Das führte dazu, dass unsere Basisvorlagen ziemlich schnell veraltet waren, was zu Wartungsproblemen führte. Es bedeutete auch, dass wir keine coolen modernen Vorlagen für die neuesten und die besten Technologie-Stacks hatten.
With v2, I wanted to empower the community by giving you the ability to create and host templates yourselves, rather than rely on the Wails project. So now you can create projects using community supported templates! I hope this will inspire developers to create a vibrant ecosystem of project templates. I'm really quite excited about what our developer community can create! Mit v2 wollte ich die Community stärken, indem ich ihr die Möglichkeit gab, Vorlagen selbst zu erstellen und zu verwalten, statt sich auf das Wails Projekt verlassen zu müssen. So können jetzt Projekte mit Community-unterstützten Vorlagen erstellt werden! Ich hoffe, dass Entwickler dazu inspiriert werden, ein lebendiges Ökosystem von Projektvorlagen zu erstellen. Ich bin wirklich sehr gespannt darüber, was unsere Entwicklergemeinschaft erstellen kann!
### Cross Compilation to Windows ### Cross-Kompilierung für Windows
Because Wails v2 for Windows is pure Go, you can target Windows builds without docker. Da Wails Version 2 für Windows aus reinem Go besteht, kannst du Windows Builds ohne Docker erzeugen.
```mdx-code-block ```mdx-code-block
<div class="text--center"> <div class="text--center">
@ -97,18 +97,18 @@ Because Wails v2 for Windows is pure Go, you can target Windows builds without d
<br /> <br />
``` ```
### In Conclusion ### Fazit
As I'd said in the Windows release notes, Wails v2 represents a new foundation for the project. The aim of this release is to get feedback on the new approach, and to iron out any bugs before a full release. Your input would be most welcome! Please direct any feedback to the [v2 Beta](https://github.com/wailsapp/wails/discussions/828) discussion board. Wie ich in den Windows Release Notes gesagt hatte, ist Wails Version 2 eine neue Grundlage für das Projekt. Das Ziel dieser Veröffentlichung ist es, Rückmeldungen über den neuen Ansatz zu erhalten und Fehler vor einer vollständigen Veröffentlichung zu beseitigen. Dein Input ist willkommen! Bitte richte alle Rückmeldungen an das [v2 Beta](https://github.com/wailsapp/wails/discussions/828) Diskussionsforum.
Linux is **hard** to support. We expect there to be a number of quirks with the beta. Please help us to help you by filing detailed bug reports! Linux ist **schwierig** zu unterstützen. Wir erwarten, dass es eine Reihe von Macken in der Beta gibt. Bitte hilf uns, dir zu helfen, indem du detaillierte Fehlerberichte einreichst!
Finally, I'd like to give a special thank you to all the [project sponsors](/credits#sponsors) whose support drive the project in many ways behind the scenes. Abschließend möchte ich mich bei allen [Projektsponsoren](/credits#sponsors) bedanken, die das Projekt in vielerlei Hinsicht hinter den Kulissen unterstützen.
I look forward to seeing what people build with Wails in this next exciting phase of the project! Ich freue mich darauf, zu sehen, was die Leute mit Wails in dieser nächsten aufregenden Phase des Projekts bauen!
Lea. Lea.
PS: The v2 release isn't far off now! PS: Der Version 2 Release ist jetzt nicht mehr weit entfernt!
PPS: If you or your company find Wails useful, please consider [sponsoring the project](https://github.com/sponsors/leaanthony). Thanks! PPS: Wenn du oder dein Unternehmen Wails nützlich finden, erwäge bitte [das Projekt](https://github.com/sponsors/leaanthony) zu sponsern. Vielen Dank!

View file

@ -1,6 +1,6 @@
--- ---
slug: wails-v2-released slug: wails-v2-released
title: Wails v2 Released title: Wails v2 wurde veröffentlicht
authors: authors:
- leaanthony - leaanthony
tags: tags:
@ -18,81 +18,81 @@ tags:
<br /> <br />
``` ```
# It's here! # Es ist hier!
Today marks the release of [Wails](https://wails.io) v2. It's been about 18 months since the first v2 alpha and about a year from the first beta release. I'm truly grateful to everyone involved in the evolution of the project. Der heutige Tag ist der Tag der veröffentlichung von [Wails](https://wails.io) v2. Es sind etwa 18 Monate her seit der ersten v2 Alpha und etwa ein Jahr vor dem ersten Beta-Release. Ich bin wirklich dankbar für alle, die an der Entwicklung des Projekts beteiligt waren.
Part of the reason it took that long was due to wanting to get to some definition of completeness before officially calling it v2. The truth is, there's never a perfect time to tag a release - there's always outstanding issues or "just one more" feature to squeeze in. What tagging an imperfect major release does do, however, is to provide a bit of stability for users of the project, as well as a bit of a reset for the developers. Ein Teil des Grundes, warum es so lange gedauert hat, war der Wunsch, zu einem gewissen Punkt der Vollständigkeit zu gelangen, bevor wir es offiziell v2 nennen. Die Wahrheit ist, es gibt nie eine perfekte Zeit, um eine Veröffentlichung zu machen - es gibt immer noch offene Probleme oder "nur eine weitere" Funktion, die man einbauen möchte. Die Kennzeichnung einer unvollkommenen Hauptversion sorgt jedoch für eine Stabilität für die Benutzer des Projekts und für einen kleinen Neustart für die Entwickler.
This release is more than I'd ever expected it to be. I hope it gives you as much pleasure as it has given us to develop it. Diese Veröffentlichung ist mehr als ich je erwartet hätte. Ich hoffe, es bereitet dir so viel Freude, wie die Weiterentwicklung des Projektes uns gegeben hat.
# What _is_ Wails? # Was _ist_ Wails?
If you are unfamiliar with Wails, it is a project that enables Go programmers to provide rich frontends for their Go programs using familiar web technologies. It's a lightweight, Go alternative to Electron. Much more information can be found on the [official site](https://wails.io/docs/introduction). Wenn du mit Wails nicht vertraut bist: Es ist ein Projekt, das Go-Programmierern die Möglichkeit gibt, ihren Go-Programmen mit bekannten Web-Technologien reiche Frontends zu bieten. Es ist eine leichtgewichtige, Go Alternative zu Electron. Weitere Informationen findest du auf der [offiziellen Seite](https://wails.io/docs/introduction).
# What's new? # Was ist neu?
The v2 release is a huge leap forward for the project, addressing many of the pain points of v1. If you have not read any of the blog posts on the Beta releases for [macOS](/blog/wails-v2-beta-for-mac), [Windows](/blog/wails-v2-beta-for-windows) or [Linux](/blog/wails-v2-beta-for-linux), then I encourage you to do so as it covers all the major changes in more detail. In summary: Der v2-Release ist ein riesiger Fortschritt für das Projekt, der sich mit vielen Schmerzpunkten von v1 befasst. Wenn du noch keinen Blog-Beitrag zu den Beta-Veröffentlichungen für [macOS](/blog/wails-v2-beta-for-mac), [Windows](/blog/wails-v2-beta-for-windows) oder [Linux](/blog/wails-v2-beta-for-linux) gelesen hast, dann empfehle ich dir, das zu tun, da es alle wichtigen Änderungen detaillierter behandelt. Zusammenfassend lässt sich sagen:
- Webview2 component for Windows that supports modern web standards and debugging capabilities. - Webview2 Komponente für Windows, die moderne Web-Standards und Debugging-Fähigkeiten unterstützt.
- [Dark / Light theme](/docs/reference/options#theme) + [custom theming](/docs/reference/options#customtheme) on Windows. - [Dunkles / Helles Theme](/docs/reference/options#theme) + [benutzerdefiniertes Design](/docs/reference/options#customtheme) unter Windows.
- Windows now has no CGO requirements. - Windows hat jetzt keine CGO-Anforderungen.
- Out-of-the-box support for Svelte, Vue, React, Preact, Lit & Vanilla project templates. - Out-of-the-box Unterstützung für Svelte, Vue, React, Preact, Lit & Vanilla Projektvorlagen.
- [Vite](https://vitejs.dev/) integration providing a hot-reload development environment for your application. - Die [Vite](https://vitejs.dev/) Integration stellt eine Entwicklungsumgebung für deine Anwendung zur Verfügung.
- Native application [menus](/docs/guides/application-development#application-menu) and [dialogs](/docs/reference/runtime/dialog). - Native Anwendungs [Menüs](/docs/guides/application-development#application-menu) und [Dialoge](/docs/reference/runtime/dialog).
- Native window translucency effects for [Windows](/docs/reference/options#windowistranslucent) and [macOS](/docs/reference/options#windowistranslucent-1). Support for Mica & Acrylic backdrops. - Native Fenstertransluzenz-Effekte für [Windows](/docs/reference/options#windowistranslucent) und [macOS](/docs/reference/options#windowistranslucent-1). Unterstützung für Mica & Acryl-Hintergründe.
- Easily generate an [NSIS installer](/docs/guides/windows-installer) for Windows deployments. - Generiere einfach einen [NSIS Installer](/docs/guides/windows-installer) für Windows-Installationen.
- A rich [runtime library](/docs/reference/runtime/intro) providing utility methods for window manipulation, eventing, dialogs, menus and logging. - Eine reiche [Laufzeitbibliothek](/docs/reference/runtime/intro) bietet Hilfsmethoden für Fenstermanipulation, Events, Dialoge, Menüs und logging.
- Support for [obfuscating](/docs/guides/obfuscated) your application using [garble](https://github.com/burrowers/garble). - Unterstützung für [Verschleierung](/docs/guides/obfuscated) deiner Anwendung mit [garble](https://github.com/burrowers/garble).
- Support for compressing your application using [UPX](https://upx.github.io/). - Unterstützung für das Komprimieren deiner Anwendung mit [UPX](https://upx.github.io/).
- Automatic TypeScript generation of Go structs. More info [here](/docs/howdoesitwork#calling-bound-go-methods). - Automatische TypeScript Erzeugung von Go Structs. Mehr Infos [hier](/docs/howdoesitwork#calling-bound-go-methods).
- No extra libraries or DLLs are required to be shipped with your application. For any platform. - Es werden keine zusätzlichen Bibliotheken oder DLLs benötigt, die mit deiner Anwendung ausgeliefert werden müssen. Für jede Plattform.
- No requirement to bundle frontend assets. Just develop your application like any other web application. - Keine Anforderung, um Frontend-Assets zu bündeln. Entwickele einfach deine Anwendung wie jede andere Web-Anwendung.
# Credit & Thanks # Credits & Danksagung
Getting to v2 has been a huge effort. There have been ~2.2K commits by 89 contributors between the initial alpha and the release today, and many, many more that have provided translations, testing, feedback and help on the discussion forums as well as the issue tracker. I'm so unbelievably grateful to each one of you. I'd also like to give an extra special thank you to all the project sponsors who have provided guidance, advice and feedback. Everything you do is hugely appreciated. Zu v2 zu kommen, war eine große Herausforderung. Zwischen der ersten Alpha-Version und der heutigen Veröffentlichung gab es ~2,2K Commits von 89 Mitwirkenden, und viele, viele mehr haben Übersetzungen, Tests, Feedback und Hilfe in den Diskussionsforen und im Issue Tracker bereitgestellt. Ich bin so unglaublich dankbar für jeden von euch. Mein besonderer Dank gilt auch allen Projektsponsoren, die uns mit Rat und Tat zur Seite standen und uns Feedback gegeben haben. Alles, was du beiträgst, wird sehr geschätzt.
There are a few people I'd like to give special mention to: Es gibt ein paar Leute, die ich besonders erwähnen möchte:
Firstly, a **huge** thank you to [@stffabi](https://github.com/stffabi) who has provided so many contributions which we all benefit from, as well as providing a lot of support on many issues. He has provided some key features such as the external dev server support which transformed our dev mode offering by allowing us to hook into [Vite](https://vitejs.dev/)'s superpowers. It's fair to say that Wails v2 would be a far less exciting release without his [incredible contributions](https://github.com/wailsapp/wails/commits?author=stffabi&since=2020-01-04). Thank you so much @stffabi! Zunächst einmal ein **großes** Dankeschön an <0>@stffabi</a>, der so viele Beiträge geliefert hat, von denen wir alle profitieren, und der uns in vielen Fragen unterstützt hat. Er hat einige Schlüsselfunktionen bereitgestellt, wie z. B. die Unterstützung für externe Entwicklungsserver, die unser Angebot im Entwicklungsmodus verändert haben, indem sie uns die Möglichkeit gaben, die Superkräfte von [Vite](https://vitejs.dev/) zu nutzen. Man kann mit Fug und Recht behaupten, dass Wails v2 ohne seine [unglaublichen Beiträge](https://github.com/wailsapp/wails/commits?author=stffabi&since=2020-01-04) eine weit weniger aufregende Veröffentlichung wäre. Vielen Dank @stffabi!
I'd also like to give a huge shout-out to [@misitebao](https://github.com/misitebao) who has tirelessly been maintaining the website, as well as providing Chinese translations, managing Crowdin and helping new translators get up to speed. This is a hugely important task, and I'm extremely grateful for all the time and effort put into this! You rock! Ich möchte auch ein großes Lob an [@misitebao](https://github.com/misitebao) aussprechen, der unermüdlich die Website pflegt, chinesische Übersetzungen liefert, Crowdin verwaltet und neuen Übersetzern hilft, sich einzuarbeiten. Dies ist eine äußerst wichtige Aufgabe, und ich bin sehr dankbar für die ganze Zeit und Mühe in dieser Aufgabe! Du rockst!
Last, but not least, a huge thank you to Mat Ryer who has provided advice and support during the development of v2. Writing xBar together using an early Alpha of v2 was helpful in shaping the direction of v2, as well as give me an understanding of some design flaws in the early releases. I'm happy to announce that as of today, we will start to port xBar to Wails v2, and it will become the flagship application for the project. Cheers Mat! Zu guter Letzt ein großes Dankeschön an Mat Ryer, der uns bei der Entwicklung von v2 mit Rat und Tat zur Seite stand. Das gemeinsame Schreiben von xBar mit einer frühen Alpha-Version von v2 war hilfreich, um die Richtung von v2 zu bestimmen und mir ein Verständnis für einige Designfehler in den frühen Versionen zu vermitteln. Ich freue mich, ankündigen zu können, dass wir ab heute damit beginnen werden, xBar auf Wails v2 zu portieren, und dass es die Hauptanwendung für das Projekt werden wird. Danke Mat!
# Lessons Learnt # Gewonnene Erkenntnisse
There are a number of lessons learnt in getting to v2 that will shape development moving forward. Es gibt eine Reihe von Lektionen, die man beim Erreichen von v2 gelernt hat, um die Entwicklung voranzutreiben.
## Smaller, Quicker, Focused Releases ## Kleine, schnellere, fokussierte Versionen
In the course of developing v2, there were many features and bug fixes that were developed on an ad-hoc basis. This led to longer release cycles and were harder to debug. Moving forward, we are going to create releases more often that will include a reduced number of features. A release will involve updates to documentation as well as thorough testing. Hopefully, these smaller, quicker, focussed releases will lead to fewer regressions and better quality documentation. Im Zuge der Entwicklung von v2 gab es viele Funktionen und Bugfixes, die auf Ad-hoc-Basis entwickelt wurden. Das führte zu längeren Release-Zyklen und war schwieriger zu debuggen. In Zukunft werden wir häufiger neue Versionen veröffentlichen, die eine geringere Anzahl von Funktionen enthalten. Eine Veröffentlichung wird Aktualisierungen der Dokumentation sowie gründliche Tests beinhalten. Hoffentlich werden diese kleineren, schnelleren, fokussierten Veröffentlichungen zu weniger Regressionen und besseren Dokumentationen führen.
## Encourage Engagement ## Engagement ermutigen
When starting this project, I wanted to immediately help everyone who had a problem. Issues were "personal" and I wanted them resolved as quickly as possible. This is unsustainable and ultimately works against the longevity of the project. Moving forward, I will be giving more space for people to get involved in answering questions and triaging issues. It would be good to get some tooling to help with this so if you have any suggestions, please join in the discussion [here](https://github.com/wailsapp/wails/discussions/1855). Als ich dieses Projekt startete, wollte ich sofort allen helfen, die ein Problem hatten. Die Probleme waren "persönlich" und ich wollte, dass sie so schnell wie möglich gelöst werden. Das ist auf lange Zeit nicht tragbar und wirkt sich letztlich gegen die Langlebigkeit des Projekts aus. Ich werde den Menschen mehr Raum geben, sich in die Beantwortung von Fragen und trickreichen Fragen einzumischen. Es wäre gut, einige Werkzeuge zu bekommen, die dabei helfen. Wenn du also Vorschläge haben solltest, beteilige dich bitte an der Diskussion [hier](https://github.com/wailsapp/wails/discussions/1855).
## Learning to say No ## Lernen nein zu sagen
The more people that engage with an Open Source project, the more requests there will be for additional features that may or may not be useful to the majority of people. These features will take an initial amount of time to develop and debug, and incur an ongoing maintenance cost from that point on. I myself am the most guilty of this, often wanting to "boil the sea" rather than provide the minimum viable feature. Moving forward, we will need to say "No" a bit more to adding core features and focus our energies on a way to empower developers to provide that functionality themselves. We are looking seriously into plugins for this scenario. This will allow anyone to extend the project as they see fit, as well as providing an easy way to contribute towards the project. Je mehr Leute mit einem Open-Source-Projekt arbeiten, je mehr Anfragen gibt es nach zusätzlichen Funktionen, die für die Mehrheit der Leute nützlich sein können oder nicht. Die Entwicklung und Fehlersuche für diese Funktionen nimmt zunächst viel Zeit in Anspruch, und ab diesem Zeitpunkt fallen laufende Wartungskosten an. Ich selbst habe mich dessen am meisten schuldig gemacht, weil ich oft "den Stein ins Rollen bringen" wollte, anstatt das Minimum an praktikablen Funktionen anzubieten. In Zukunft werden wir bei der Hinzufügung von Kernfunktionen etwas mehr "Nein" sagen und unsere Energie auf eine Möglichkeit konzentrieren müssen, die es Entwicklern ermöglicht, diese Funktionen selbst bereitzustellen. Wir ziehen Plugins für dieses Szenario aktuell in betracht. Dies wird jedem ermöglichen, das Projekt so zu erweitern, wie er es für richtig hält, und eine einfache Möglichkeit bieten, zum Projekt beizutragen.
# Looking to the Future # Mit Blick auf die Zukunft
There are so many core features we are looking at to add to Wails in the next major development cycle already. The [roadmap](https://github.com/wailsapp/wails/discussions/1484) is full of interesting ideas, and I'm keen to start work on them. One of the big asks has been for multiple window support. It's a tricky one and to do it right, and we may need to look at providing an alternative API, as the current one was not designed with this in mind. Based on some preliminary ideas and feedback, I think you'll like where we're looking to go with it. Es gibt so viele Kernfunktionen, die wir im nächsten großen Entwicklungszyklus zu Wails hinzufügen wollen. Die [Roadmap](https://github.com/wailsapp/wails/discussions/1484) ist voller interessanter Ideen, und ich möchte gerne mit der Arbeit daran beginnen. Eine der großen Fragen war die Unterstützung von mehreren Fenstern gleichzeitig. Es ist eine knifflige Angelegenheit, und um es richtig zu machen, müssen wir möglicherweise eine alternative API bereitstellen, da die derzeitige nicht mit diesem Ziel entwickelt wurde. Ausgehend von einigen ersten Ideen und Rückmeldungen denke ich, dass dir die Richtung, die wir damit einschlagen wollen, gefallen wird.
I'm personally very excited at the prospect of getting Wails apps running on mobile. We already have a demo project showing that it is possible to run a Wails app on Android, so I'm really keen to explore where we can go with this! Ich persönlich freue mich sehr über die Aussicht, Wails Apps auf dem Handy laufen zu lassen. Wir haben bereits ein Demoprojekt, das zeigt, dass es möglich ist, eine Wails-Anwendung auf Android laufen zu lassen, daher bin ich sehr gespannt darauf, was wir damit erreichen können!
A final point I'd like to raise is that of feature parity. It has long been a core principle that we wouldn't add anything to the project without there being full cross-platform support for it. Whilst this has proven to be (mainly) achievable so far, it has really held the project back in releasing new features. Moving forward, we will be adopting a slightly different approach: any new feature that cannot be immediately released for all platforms will be released under an experimental configuration or API. This allows early adopters on certain platforms to try the feature and provide feedback that will feed into the final design of the feature. This, of course, means that there are no guarantees of API stability until it is fully supported by all the platforms it can be supported on, but at least it will unblock development. Ein letzter Punkt, den ich ansprechen möchte, ist der, der Funktionsparität. Es war schon lange ein Kernprinzip, dass wir dem Projekt nichts hinzufügen würden, ohne dass es dafür eine volle plattformübergreifende Unterstützung gäbe. Dies hat sich zwar bisher als (größtenteils) realisierbar erwiesen, aber es hat das Projekt bei der Veröffentlichung neuer Funktionen stark behindert. In Zukunft werden wir einen etwas anderen Ansatz verfolgen: Jede neue Funktion, die nicht sofort für alle Plattformen freigegeben werden kann, wird in einer experimentellen Konfiguration oder API veröffentlicht. Auf diese Weise können frühe Anwender auf bestimmten Plattformen die Funktion ausprobieren und Rückmeldungen geben, die in die endgültige Gestaltung der Funktion einfließen werden. Das bedeutet natürlich, dass es keine Garantien für die Stabilität der API gibt, bis sie von allen Plattformen, auf denen sie unterstützt werden kann, vollständig unterstützt wird, aber zumindest wird dadurch die Entwicklung freigegeben.
# Final Words # Abschließende Worte
I'm really proud of what we've been able to achieve with the V2 release. It's amazing to see what people have already been able to build using the beta releases so far. Quality applications like [Varly](https://varly.app/), [Surge](https://getsurge.io/) and [October](https://october.utf9k.net/). I encourage you to check them out. Ich bin wirklich stolz darauf, was wir mit dem V2 Release erreichen konnten. Es ist erstaunlich zu sehen, was die Leute bereits mit den Beta-Versionen bauen konnten. Hochwertige Anwendungen wie [Varly](https://varly.app/), [Surge](https://getsurge.io/) und [October](https://october.utf9k.net/). Ich empfehle dir, bei diesen Anwendungen vorbeizuschauen.
This release was achieved through the hard work of many contributors. Whilst it is free to download and use, it has not come about through zero cost. Make no mistakes, this project has come at considerable cost. It has not only been my time and the time of each and every contributor, but also the cost of absence from friends and families of each of those people too. That's why I'm extremely grateful for every second that has been dedicated to making this project happen. The more contributors we have, the more this effort can be spread out and the more we can achieve together. I'd like to encourage you all to pick one thing that you can contribute, whether it is confirming someone's bug, suggesting a fix, making a documentation change or helping out someone who needs it. All of these small things have such a huge impact! It would be so awesome if you too were part of the story in getting to v3. Diese Veröffentlichung wurde durch die harte Arbeit vieler Mitwirkender erreicht. Obwohl es kostenlos zum Download steht und die Nutzung das ebenfalls ist, ist es nicht ohne Kosten zustande gekommen. Machen wir uns nichts vor, dieses Projekt hat erhebliche Kosten verursacht. Es war nicht nur meine Zeit und die Zeit jedes einzelnen Beitragenden aber auch die Kosten der Abwesenheit von Freunden und Familien jedes dieser Menschen. Deshalb bin ich sehr dankbar für jede Sekunde, die dieses Projekt umgesetzt hat. Je mehr Beitragszahler wir haben, desto mehr können diese Bemühungen verteilt werden und desto mehr können wir gemeinsam erreichen. Ich möchte alle ermutigen, eine Sache auszuwählen, die Sie beitragen können, ob es jemandes Fehler bestätigt, eine Korrektur vorschlagen, eine Dokumentation ändern oder jemandem helfen, der sie braucht. All diese kleinen Dinge haben so enorme Auswirkungen! Es wäre großartig, wenn auch du Teil der Geschichte wärst, um zu v3 zu gelangen.
Enjoy! Viel Spaß!
&dash; Lea &dash; Lea
PS: If you or your company find Wails useful, please consider [sponsoring the project](https://github.com/sponsors/leaanthony). Thanks! PS: Wenn du oder dein Unternehmen Wails nützlich finden, erwäge bitte [das Projekt](https://github.com/sponsors/leaanthony) zu sponsern. Vielen Dank!

View file

@ -1,6 +1,6 @@
--- ---
slug: the-road-to-wails-v3 slug: the-road-to-wails-v3
title: The Road to Wails v3 title: Der Weg zu Wails v3
authors: authors:
- leaanthony - leaanthony
tags: tags:
@ -18,61 +18,61 @@ tags:
<br /> <br />
``` ```
# Introduction # Einführung
Wails is a project that simplifies the ability to write cross-platform desktop applications using Go. It uses native webview components for the frontend (not embedded browsers), bringing the power of the world's most popular UI system to Go, whilst remaining lightweight. Wails ist ein Projekt, das die Möglichkeit vereinfacht, plattformübergreifende Desktop-Anwendungen mit Go zu schreiben. Es verwendet native Webview-Komponenten für das Frontend (keine eingebetteten Browser) und bringt die Leistung des weltweit beliebtesten UI-Systems nach Go, während es gleichzeitig leichtgewichtig bleibt.
Version 2 was released on the 22nd of September 2022 and brought with it a lot of enhancements including: Version 2 wurde am 22. September 2022 veröffentlicht und brachte eine Menge Verbesserungen mit, einschließlich:
- Live development, leveraging the popular Vite project - Live-Entwicklung, durch die Nutzung des beliebten Vite Projekts
- Rich functionality for managing windows and creating menus - Reichhaltige Funktionalität zum Verwalten von Fenstern und Erstellen von Menüs
- Microsoft's WebView2 component - Microsoft's WebView2 component
- Generation of Typescript models that mirror your Go structs - Erstellung von Typescript-Modellen, die deine Go-Strukturen widerspiegeln
- Creating of NSIS Installer - Erstellen von NSIS Installer
- Obfuscated builds - Verschleierte Builds
Right now, Wails v2 provides powerful tooling for creating rich, cross-platform desktop applications. Zurzeit bietet Wails v2 leistungsstarke Werkzeuge für die Erstellung von vielseitigen Desktop-Anwendungen.
This blog post aims to look at where the project is at right now and what we can improve on moving forward. Dieser Blog-Beitrag zielt darauf ab, zu sehen, wo das Projekt gerade im Moment ist und was wir verbessern können beim Vorwärtsbewegen.
# Where are we now? # Wo stehen wir heute?
It's been incredible to see the popularity of Wails rising since the v2 release. I'm constantly amazed by the creativity of the community and the wonderful things that are being built with it. With more popularity, comes more eyes on the project. And with that, more feature requests and bug reports. Es ist unglaublich zu sehen, wie die Popularität von Wails seit der Veröffentlichung von v2 gestiegen ist. Ich bin ständig erstaunt über die Kreativität der Community und die wunderbaren Dinge, die damit gebaut werden. Mit zunehmender Popularität steigt auch die Aufmerksamkeit für das Projekt. Und damit mehr Features-Requests und Fehlerberichte.
Over time, I've been able to identify some of the most pressing issues facing the project. I've also been able to identify some of the things that are holding the project back. Im Laufe der Zeit war ich in der Lage, einige der dringendsten Probleme des Projekts zu identifizieren. Ich habe auch einige der Dinge, die das Projekt zurückhalten, identifizieren können.
## Current issues ## Aktuelle Issues
I've identified the following areas that I feel are holding the project back: Ich habe die folgenden Bereiche identifiziert, die meines Erachtens das Projekt zurückhalten:
- The API - Die API
- Bindings generation - Verknüpfungs Generierung
- The Build System - Das Build-System
### The API ### Die API
The API to build a Wails application currently consists of 2 parts: Die API zum Erstellen einer Wails Anwendung besteht derzeit aus 2 Teilen:
- The Application API - Die Anwendungs-API
- The Runtime API - Die Laufzeit-API
The Application API famously has only 1 function: `Run()` which takes a heap of options which govern how the application will work. Whilst this is very simple to use, it is also very limiting. It is a "declarative" approach which hides a lot of the underlying complexity. For instance, there is no handle to the main window, so you can't interact with it directly. For that, you need to use the Runtime API. This is a problem when you start to want to do more complex things like create multiple windows. Die Anwendungs-API hat bekanntermaßen nur eine Funktion: `Run()` , die eine Reihe von Optionen enthält, die bestimmen, wie die Anwendung funktioniert. Dies ist zwar sehr einfach zu handhaben, aber auch sehr einschränkend. Es handelt sich um einen "deklarativen" Ansatz, der viele der zugrunde liegenden Komplexität versteckt. Zum Beispiel gibt es keinen Handle zum Hauptfenster, sodass du nicht direkt mit ihm interagieren kannst. Dazu musst du die Runtime API verwenden. Das ist ein Problem, wenn du komplexere Aufgaben wie das Erstellen mehrerer Fenster umsetzen möchtest.
The Runtime API provides a lot of utility functions for the developer. This includes: Die Runtime API bietet viele Funktionen für den Entwickler. Dazu gehören:
- Window management - Fensterverwaltung
- Dialogs - Dialoge
- Menus - Menus
- Events - Events
- Logs - Logs
There are a number of things I am not happy with the Runtime API. The first is that it requires a "context" to be passed around. This is both frustrating and confusing for new developers who pass in a context and then get a runtime error. Es gibt eine Reihe von Dingen, mit der ich in der Runtime-API nicht zufrieden bin. Das erste ist, dass es einen "Kontext" benötigt. Dies ist sowohl frustrierend als auch verwirrend für neue Entwickler, die einen Kontext übergeben und dann einen Laufzeitfehler erhalten.
The biggest issue with the Runtime API is that it was designed for applications that only use a single window. Over time, the demand for multiple windows has grown and the API is not well suited to this. Das größte Problem mit der Runtime API ist, dass sie für Anwendungen entwickelt wurde, die nur ein einziges Fenster verwenden. Im Laufe der Zeit ist die Nachfrage nach mehreren Fenstern gestiegen und die API ist dafür nicht gut geeignet.
### Thoughts on the v3 API ### Gedanken über die v3-API
Wouldn't it be great if we could do something like this? Wäre es nicht großartig, wenn wir so etwas machen könnten?
```go ```go
func main() { func main() {
@ -86,7 +86,7 @@ func main() {
} }
``` ```
This programmatic approach is far more intuitive and allows the developer to interact with the application elements directly. All current runtime methods for windows would simply be methods on the window object. For the other runtime methods, we could move them to the application object like so: Dieser programmatische Ansatz ist viel intuitiver und erlaubt es dem Entwickler direkt mit den Anwendungselementen zu interagieren. Alle derzeitigen Laufzeitmethoden für Fenster wären einfach Methoden für das Fensterobjekt. Für die anderen Laufzeitmethoden könnten wir diese wie folgt in das Anwendungsobjekt verschieben:
```go ```go
app := wails.NewApplication(options.App{}) app := wails.NewApplication(options.App{})
@ -94,7 +94,7 @@ app.NewInfoDialog(options.InfoDialog{})
app.Log.Info("Hello World") app.Log.Info("Hello World")
``` ```
This is a much more powerful API which will allow for more complex applications to be built. It also allows for the creation of multiple windows, [the most up-voted feature on GitHub](https://github.com/wailsapp/wails/issues/1480): Das ist eine wesentlich leistungsfähigere API, die die Erstellung komplexerer Anwendungen ermöglicht. Es ermöglicht auch das Erstellen mehrerer Fenster, [die am meisten geforderte Funktion auf GitHub](https://github.com/wailsapp/wails/issues/1480):
```go ```go
func main() { func main() {
@ -113,72 +113,72 @@ func main() {
} }
``` ```
### Bindings generation ### Verknüpfungs Generierung
One of the key features of Wails is generating bindings for your Go methods so they may be called from Javascript. The current method for doing this is a bit of a hack. It involves building the application with a special flag and then running the resultant binary which uses reflection to determine what has been bound. This leads to a bit of a chicken and egg situation: You can't build the application without the bindings and you can't generate the bindings without building the application. There are many ways around this but the best one would be not to use this approach at all. Eine der wichtigsten Funktionen von Wails ist die Erzeugung von Verknüpfungen für deine Go-Methoden, sodass diese von Javascript aus aufgerufen werden können. Die aktuelle Methode, um das zu tun, ist ein bisschen geschummelt. Dabei wird die Anwendung mit einem speziellen Flag erstellt und dann die resultierende Binärdatei ausgeführt, die mit Hilfe von Reflection ermittelt, was verknüpft wurde. Das führt zu einer Art Henne-Ei-Situation: Du kannst die Anwendung nicht ohne die Verknüpfung erstellen und du kannst die Verknüpfungen nicht generieren, ohne die Anwendung zu erstellen. Es gibt viele Möglichkeiten, das zu umgehen, aber die beste wäre, diesen Ansatz überhaupt nicht zu verwenden.
There was a number of attempts at writing a static analyser for Wails projects but they didn't get very far. In more recent times, it has become slightly easier to do this with more material available on the subject. Es gab eine Reihe von Versuchen, einen statischen Analysator für Wails-Projekte zu schreiben, aber wir sind nicht sehr weit gekommen. In der letzten Zeit ist das etwas einfacher geworden, da mehr Material zu diesem Thema verfügbar ist.
Compared to reflection, the AST approach is much faster however it is significantly more complicated. To start with, we may need to impose certain constraints on how to specify bindings in the code. The goal is to support the most common use cases and then expand it later on. Im Vergleich zur Reflexion ist der AST-Ansatz wesentlich schneller, aber auch wesentlich komplizierter. Zunächst müssen wir möglicherweise bestimmte Einschränkungen festlegen, wie man die Verknüpfungen im Code angibt. Das Ziel ist es, die häufigsten Anwendungsfälle zu unterstützen und später zu erweitern.
### The Build System ### Das Build-System
Like the declarative approach to the API, the build system was created to hide the complexities of building a desktop application. When you run `wails build`, it does a lot of things behind the scenes: Wie der deklarative Ansatz für die API wurde auch das Build-System entwickelt, um die Komplexität der Erstellung einer Desktop-Anwendung zu verbergen. Wenn du `wails build` ausführst, werden viele Dinge im Hintergrund erledigt:
- Builds the backend binary for bindings and generates the bindings - Erstellt die Backend-Binärdatei für Verknüpfungen und generiert die Verknüpfungen
- Installs the frontend dependencies - Installiert die Frontend-Abhängigkeiten
- Builds the frontend assets - Erstellt die Frontend Assets
- Determines if the application icon is present and if so, embeds it - Legt fest, ob das Anwendungssymbol vorhanden ist und wenn ja, wird es eingebettet
- Builds the final binary - Erstellt die endgültige Binärdatei
- If the build is for `darwin/universal` it builds 2 binaries, one for `darwin/amd64` and one for `darwin/arm64` and then creates a fat binary using `lipo` - Wenn der Build für `darwin/universal` ist, werden 2 Binärdateien erstellt, eine für `darwin/amd64` und eine für `darwin/arm64` und dann wird eine "fat binary" mit `lipo` erstellt
- If compression is required, it compresses the binary with UPX - Wenn eine Komprimierung erforderlich ist, wird die Binärdatei mit UPX komprimiert
- Determines if this binary is to be packaged and if so: - Legt fest, ob dieses Binärprogramm paketiert werden soll und wenn ja:
- Ensures the icon and application manifest are compiled into the binary (Windows) - Stellt sicher, dass das Symbol und das Anwendungsmanifest in die Binärdatei (Windows) kompiliert werden
- Builds out the application bundle, generates the icon bundle and copies it, the binary and Info.plist to the application bundle (Mac) - Erstellt das Anwendungspaket, generiert das Icon-Bundle und kopiert es, die Binärdatei und Info.plist in das Anwendungspaket (Mac)
- If an NSIS installer is required, it builds it - Wenn ein NSIS-Installationsprogramm erforderlich ist, wird es erstellt
This entire process, whilst very powerful, is also very opaque. It is very difficult to customise it and it is very difficult to debug. Dieser gesamte Prozess ist zwar sehr mächtig, aber auch sehr undurchsichtig. Es ist sehr schwierig, diese anzupassen und zu debuggen.
To address this in v3, I would like to move to a build system that exists outside of Wails. After using [Task](https://taskfile.dev/) for a while, I am a big fan of it. It is a great tool for configuring build systems and should be reasonably familiar to anyone who has used Makefiles. Um das in v3 zu beheben, möchte ich zu einem Build-System umziehen, das außerhalb von Wails existiert. Nachdem ich [Task](https://taskfile.dev/) für eine Weile benutzt habe, bin ich ein großer Fan davon. Es ist ein großartiges Werkzeug, um Build-Systeme zu konfigurieren und sollte jedem bekannt sein, der Makefiles verwendet hat.
The build system would be configured using a `Taskfile.yml` file which would be generated by default with any of the supported templates. This would have all of the steps required to do all the current tasks, such as building or packaging the application, allowing for easy customisation. Das Build-System wird mit einer `Taskfile.yml` Datei konfiguriert, die standardmäßig mit einer der unterstützten Vorlagen erstellt wird. Das würde alle Schritte beinhalten, die benötigt werden, um alle aktuellen Aufgaben auszuführen, wie zum Beispiel das Erstellen oder Verpacken der Anwendung, was eine einfache Anpassung ermöglicht.
There will be no external requirement for this tooling as it would form part of the Wails CLI. This means that you can still use `wails build` and it will do all the things it does today. However, if you want to customise the build process, you can do so by editing the `Taskfile.yml` file. It also means you can easily understand the build steps and use your own build system if you wish. Es wird keine externe Anforderung für diese Bearbeitung geben, da sie Teil des CLI sein wird. Das bedeutet, dass du immer noch `Wails Build` verwenden kannst und es wird alle Dinge tun, die es heute auch tut. Wenn du jedoch den Build-Prozess anpassen möchtest, kannst du das über das Bearbeiten der `Taskfile.yml` Datei tun. Das bedeutet auch, dass du die Build-Schritte leicht verstehen und dein eigenes Build-System verwenden könnest, wenn du dir das wünschst.
The missing piece in the build puzzle is the atomic operations in the build process, such as icon generation, compression and packaging. To require a bunch of external tooling would not be a great experience for the developer. To address this, the Wails CLI will provide all these capabilities as part of the CLI. This means that the builds still work as expected, with no extra external tooling, however you can replace any step of the build with any tool you like. Das fehlende Teil im Build-Puzzle sind die atomaren Operationen im Build-Prozess, wie zum Beispiel die Icon-Generierung, Komprimierung und Verpackung. Eine Vielzahl externer Tools zu benötigen, wäre für den Entwickler keine besonders gute Erfahrung. Um dieses Problem zu lösen, wird die Wails CLI all diese Fähigkeiten als Teil der CLI bereitstellen. Das bedeutet, dass die Builds immer noch wie erwartet funktionieren, jedoch ohne zusätzliche externe Werkzeuge, und dazu kommt, dass du hast die Fähigkeit jeden Schritt des Builds durch jedes beliebige Werkzeug zu ersetzen.
This will be a much more transparent build system which will allow for easier customisation and address a lot of the issues that have been raised around it. Das wird ein wesentlich transparenteres Build-System sein, das eine einfachere Anpassung ermöglicht und viele der damit verbundenen Probleme behebt.
## The Payoff ## Die Auszahlung
These positive changes will be a huge benefit to the project: Diese positiven Änderungen werden dem Projekt einen enormen Nutzen bringen:
- The new API will be much more intuitive and will allow for more complex applications to be built. - Die neue API wird viel intuitiver sein und die Erstellung komplexerer Anwendungen ermöglichen.
- Using static analysis for bindings generation will be much faster and reduce a lot of the complexity around the current process. - Die statische Analyse für die Erzeugung von Verknüpfungen wird viel schneller sein und eine Menge der Komplexität um den aktuellen Prozess reduzieren.
- Using an established, external build system will make the build process completely transparent, allowing for powerful customisation. - Durch die Verwendung eines etablierten externen Buildsystems wird der Buildvorgang vollständig transparent, was eine leistungsstarke Anpassung ermöglicht.
Benefits to the project maintainers are: Die Vorteile für die Projektbetreuer sind:
- The new API will be much easier to maintain and adapt to new features and platforms. - Die neue API wird wesentlich einfacher zu verwalten und an neue Funktionen und Plattformen anzupassen.
- The new build system will be much easier to maintain and extend. I hope this will lead to a new ecosystem of community driven build pipelines. - Das neue Build-System wird viel einfacher zu warten und zu erweitern. Ich hoffe, dass das zu einem neuen Ökosystem gemeinschaftlich getriebener Pipelines führen wird.
- Better separation of concerns within the project. This will make it easier to add new features and platforms. - Bessere Trennung der Anliegen innerhalb des Projekts. Das erleichtert das Hinzufügen neuer Funktionen und Plattformen.
## The Plan ## Der Plan
A lot of the experimentation for this has already been done and it's looking good. There is no current timeline for this work but I'm hoping by the end of Q1 2023, there will be an alpha release for Mac to allow the community to test, experiment with and provide feedback. Viele Experimente dafür wurden bereits durchgeführt und es sieht gut aus. Es gibt keinen aktuellen Zeitplan für diese Arbeit, aber ich hoffe, dass es bis zum Ende des ersten Quartals 2023 eine Alphaversion für Mac geben wird, damit die Community testen, experimentieren und Feedback geben kann.
## Summary ## Zusammenfassung
- The v2 API is declarative, hides a lot from the developer and not suitable for features such as multiple windows. A new API will be created which will be simpler, intuitive and more powerful. - Die v2 API ist deklarativ, versteckt viel vor dem Entwickler und eignet sich nicht für Funktionen wie mehrere Fenster. Es wird eine neue API erstellt, die einfacher, intuitiver und leistungsfähiger sein wird.
- The build system is opaque and difficult to customise so we will move to an external build system which will open it all up. - Das Build-System ist undurchsichtig und schwer anpassbar, daher werden wir auf ein externes Build-System umsteigen, das alles offener macht.
- The bindings generation is slow and complex so we will move to static analysis which will remove a lot of the complexity the current method has. - Die Erzeugung von Verknüpfungen ist langsam und komplex, daher werden wir zur statischen Analyse übergehen, die eine Menge der Komplexität der aktuellen Methode beseitigen wird.
There has been a lot of work put into the guts of v2 and it's solid. It's now time to address the layer on top of it and make it a much better experience for the developer. Es wurde viel Arbeit in das Innenleben von v2 gesteckt und es ist stabil. Jetzt ist es an der Zeit, sich mit der darüber liegenden Schicht zu befassen und sie für den Entwickler zu einem besseren Erlebnis zu machen.
I hope you are as excited about this as I am. I'm looking forward to hearing your thoughts and feedback. Ich hoffe, du bist genauso begeistert davon wie ich. Ich freue mich auf deine Meinung und Feedback.
Regards, Viele Grüße,
&dash; Lea &dash; Lea
PS: If you or your company find Wails useful, please consider [sponsoring the project](https://github.com/sponsors/leaanthony). Thanks! PS: Wenn du oder dein Unternehmen Wails nützlich finden, erwäge bitte [das Projekt](https://github.com/sponsors/leaanthony) zu sponsern. Vielen Dank!
PPS: Yes, that's a genuine screenshot of a multi-window application built with Wails. It's not a mockup. It's real. It's awesome. It's coming soon. PPS: Ja, das ist ein echter Screenshot einer mit Wails erstellten Anwendung mit mehreren Fenstern. Es ist keine Attrappe. Es ist echt. Es ist großartig. Es kommt bald.

View file

@ -1,10 +1,10 @@
leaanthony: leaanthony:
name: Lea Anthony name: Lea Anthony
title: Maintainer of Wails title: Entwickler von Wails
url: https://github.com/leaanthony url: https://github.com/leaanthony
image_url: https://github.com/leaanthony.png image_url: https://github.com/leaanthony.png
misitebao: misitebao:
name: Misite Bao name: Misite Bao
title: Architect title: Architekt
url: https://github.com/misitebao url: https://github.com/misitebao
image_url: https://github.com/misitebao.png image_url: https://github.com/misitebao.png

View file

@ -8,7 +8,7 @@
"description": "The description for the blog used in SEO" "description": "The description for the blog used in SEO"
}, },
"sidebar.title": { "sidebar.title": {
"message": "Recent posts", "message": "Neueste Beiträge",
"description": "The label for the left sidebar" "description": "The label for the left sidebar"
} }
} }

View file

@ -1,18 +1,18 @@
{ {
"version.label": { "version.label": {
"message": "Next Version 🚧", "message": "Nächste Version 🚧",
"description": "The label for version current" "description": "The label for version current"
}, },
"sidebar.docs.category.Getting Started": { "sidebar.docs.category.Getting Started": {
"message": "Getting Started", "message": "Erste Schritte",
"description": "The label for category Getting Started in sidebar docs" "description": "The label for category Getting Started in sidebar docs"
}, },
"sidebar.docs.category.Reference": { "sidebar.docs.category.Reference": {
"message": "Reference", "message": "Referenz",
"description": "The label for category Reference in sidebar docs" "description": "The label for category Reference in sidebar docs"
}, },
"sidebar.docs.category.Runtime": { "sidebar.docs.category.Runtime": {
"message": "Runtime", "message": "Laufzeit",
"description": "The label for category Runtime in sidebar docs" "description": "The label for category Runtime in sidebar docs"
}, },
"sidebar.docs.category.Community": { "sidebar.docs.category.Community": {
@ -24,7 +24,7 @@
"description": "The label for category Showcase in sidebar docs" "description": "The label for category Showcase in sidebar docs"
}, },
"sidebar.docs.category.Guides": { "sidebar.docs.category.Guides": {
"message": "Guides", "message": "Anleitungen",
"description": "The label for category Guides in sidebar docs" "description": "The label for category Guides in sidebar docs"
}, },
"sidebar.docs.category.Tutorials": { "sidebar.docs.category.Tutorials": {
@ -32,7 +32,7 @@
"description": "The label for category Tutorials in sidebar docs" "description": "The label for category Tutorials in sidebar docs"
}, },
"sidebar.docs.link.Contributing": { "sidebar.docs.link.Contributing": {
"message": "Contributing", "message": "Mitwirken",
"description": "The label for link Contributing in sidebar docs, linking to /community-guide#ways-of-contributing" "description": "The label for link Contributing in sidebar docs, linking to /community-guide#ways-of-contributing"
} }
} }

View file

@ -4,23 +4,23 @@ sidebar_position: 2
# Links # Links
This page serves as a list for community related links. Please submit a PR (click `Edit this page` at the bottom) to submit links. Diese Seite dient als Liste für Community-Links. Bitte sende einen PR (klicke unten auf `Edit this page`) um Links einzureichen.
## Awesome Wails ## Awesome Wails
The [definitive list](https://github.com/wailsapp/awesome-wails) of links related to Wails. Die [endgültige Liste](https://github.com/wailsapp/awesome-wails) der Links im Zusammenhang mit Wails.
## Support Channels ## Support-Kanäle
- [Wails Discord Server](https://discord.gg/JDdSxwjhGf) - [Wails Discord Server](https://discord.gg/JDdSxwjhGf)
- [Github Issues](https://github.com/wailsapp/wails/issues) - [Github Issues](https://github.com/wailsapp/wails/issues)
- [v2 Beta Discussion Board](https://github.com/wailsapp/wails/discussions/828) - [v2 Beta-Diskussionsforum](https://github.com/wailsapp/wails/discussions/828)
## Social Media ## Soziale Medien
- [Twitter](https://twitter.com/wailsapp) - [Twitter](https://twitter.com/wailsapp)
- [Wails Chinese Community QQ Group](https://qm.qq.com/cgi-bin/qm/qr?k=PmIURne5hFGNd7QWzW5qd6FV-INEjNJv&jump_from=webapi) - Group number: 1067173054 - [Wails China Community QQ Group](https://qm.qq.com/cgi-bin/qm/qr?k=PmIURne5hFGNd7QWzW5qd6FV-INEjNJv&jump_from=webapi) - Gruppennummer: 1067173054
## Other Tutorials and Articles ## Andere Anleitungen und Beiträge
- [Building of Bulletin Board](https://blog.customct.com/building-bulletin-board) - [Bau des Bulletin-Boards](https://blog.customct.com/building-bulletin-board)

View file

@ -7,4 +7,4 @@
</p> </p>
``` ```
The [BulletinBoard](https://github.com/raguay/BulletinBoard) application is a versital message board for static messages or dialogs to get information from the user for a script. It has a TUI for creating new dialogs that can latter be used to get information from the user. It's design is to stay running on your system and show the information as needed and then hide away. I have a process for watching a file on my system and sending the contents to BulletinBoard when changed. It works great with my workflows. There is also an [Alfred workflow](https://github.com/raguay/MyAlfred/blob/master/Alfred%205/EmailIt.alfredworkflow) for sending information to the program. The workflow is also for working with [EmailIt](https://github.com/raguay/EmailIt). Die [BulletinBoard](https://github.com/raguay/BulletinBoard)-Anwendung ist ein vielseitiges Nachrichtenbrett für statische Nachrichten oder Dialoge, um Informationen vom Benutzer für ein Skript zu erhalten. Es verfügt über eine TUI zum Erstellen neuer Dialoge, die später verwendet werden können, um Informationen vom Benutzer einzuholen. Das Design sieht vor, dass es auf dem System läuft, die Informationen nach Bedarf anzeigt und sich dann wieder ausblendet. Ich habe einen Prozess, um eine Datei auf meinem System zu überwachen und den Inhalt bei Änderungen an BulletinBoard zu senden. Es funktioniert großartig mit meinen Workflows. Es gibt auch einen [Alfred Workflow](https://github.com/raguay/MyAlfred/blob/master/Alfred%205/EmailIt.alfredworkflow) zum Senden von Informationen an das Programm. Der Workflow ist auch für die Arbeit mit [EmailIt](https://github.com/raguay/EmailIt).

View file

@ -7,33 +7,28 @@
</p> </p>
``` ```
[CFN Tracker](https://github.com/williamsjokvist/cfn-tracker) - Track any Street [CFN Tracker](https://github.com/williamsjokvist/cfn-tracker) - Verfolge die Matches von Street
Fighter 6 or V CFN profile's live matches. Check Fighter 6 oder V CFN Profilen live. Sieh dir [die Website](https://cfn.williamsjokvist.se/) an, um loszulegen.
[the website](https://cfn.williamsjokvist.se/) to get started.
## Features ## Funktionen
- Real-time match tracking - Echtzeit-Match-Tracking
- Storing match logs and statistics - Speichere Spielprotokolle und Statistiken
- Support for displaying live stats to OBS via Browser Source - Unterstützung für die Anzeige von Live-Statistiken zu OBS über Browser Source
- Support for both SF6 and SFV - Unterstützung für SF6 und SFV
- Ability for users to create their own OBS Browser themes with CSS - Fähigkeit für Benutzer, eigene OBS Browser-Themes mit CSS zu erstellen
### Major tech used alongside Wails ### Haupttechnologien, die neben Wails verwendet werden
- [Task](https://github.com/go-task/task) - wrapping the Wails CLI to make - [Task](https://github.com/go-task/task) - Wrapper für Wails, damit häufig verwendete Befehle einfach zu benutzen sind
common commands easy to use - [React](https://github.com/facebook/react) - ausgewählt für sein reiches Ökosystem
- [React](https://github.com/facebook/react) - chosen for its rich ecosystem (Radix, Framer-Motion)
(radix, framer-motion) - [Bun](https://github.com/oven-sh/bun) - verwendet für seine schnelle Abhängigkeits-Auflösung und build time
- [Bun](https://github.com/oven-sh/bun) - used for its fast dependency - [Rod](https://github.com/go-rod/rod) - headless Browser-Automatisierung für Authentifizierung und das Abfragen von Änderungen
resolution and build-time - [SQLite](https://github.com/mattn/go-sqlite3) - zum Speichern von Matches,
- [Rod](https://github.com/go-rod/rod) - headless browser automation for Sitzungen und Profilen
authentication and polling changes - [Server-sent Events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events) -
- [SQLite](https://github.com/mattn/go-sqlite3) - used for storing matches, ein http-Stream, um Tracking-Updates an OBS Browser Quellen zu senden
sessions and profiles - [i18next](https://github.com/i18next/) - mit Backend-Connector zur Bereitstellung von Lokalisierungsobjekten aus der Go-Ebene
- [Server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events) - - [xstate](https://github.com/statelyai/xstate) - State-Maschines für auth
a http stream to send tracking updates to OBS browser sources Prozesse und Tracking
- [i18next](https://github.com/i18next/) - with backend connector to serve
localization objects from the Go layer
- [xstate](https://github.com/statelyai/xstate) - state machines for auth
process and tracking

View file

@ -7,4 +7,4 @@
</p> </p>
``` ```
[EmailIt](https://github.com/raguay/EmailIt/) is a Wails 2 program that is a markdown based email sender only with nine notepads, scripts to manipulate the text, and templates. It also has a scripts terminal to run scripts in EmailIt on files in your system. The scripts and templates can be used from the commandline itself or with the Alfred, Keyboard Maestro, Dropzone, or PopClip extensions. It also supports scripts and themes downloaded form GitHub. Documentation is not complete, but the programs works. Its built using Wails2 and Svelte, and the download is a universal macOS application. [EmailIt](https://github.com/raguay/EmailIt/) ist ein Wails 2-Programm, das ein rein Markdown-basierter E-Mail-Versender ist, ausgestattet mit neun Notizblöcken, Skripten zur Textmanipulation und Vorlagen. Es bietet auch ein Skript-Terminal zum Ausführen von Skripten in EmailIt auf Dateien auf Ihrem System. Die Skripte und Vorlagen können von der Kommandozeile selbst oder mit den Erweiterungen Alfred, Keyboard Maestro, Dropzone oder PopClip verwendet werden. Es unterstützt auch Skripte und Themes, die von GitHub heruntergeladen werden. Die Dokumentation ist nicht vollständig, aber die Programme funktionieren. Es wurde mit Wails2 und Svelte gebaut, und der Download ist eine universelle MacOS-Anwendung.

View file

@ -7,6 +7,6 @@
</p> </p>
``` ```
**[EncryptEasy](https://www.encrypteasy.app) is a simple and easy to use PGP encryption tool, managing all your and your contacts keys. Encryption should be simple. Developed with Wails.** **[EncryptEasy](https://www.encrypteasy.app) ist ein einfach zu bedienendes PGP-Verschlüsselungswerkzeug, das alle deine und die deiner Kontakte verwalten kann. Die Verschlüsselung sollte einfach sein. Entwickelt mit Wails.**
Encrypting messages using PGP is the industry standard. Everyone has a private and a public key. Your private key, well, needs to be kept private so only you can read messages. Your public key is distributed to anyone who wants to send you secret, encrypted messages. Managing keys, encrypting messages and decrypting messages should be a smooth experience. EncryptEasy is all about making it easy. Das Verschlüsseln von Nachrichten mit PGP ist der Industriestandard. Jeder hat einen privaten und einen öffentlichen Schlüssel. Dein privater Schlüssel muss geheim gehalten werden, damit nur du deine Nachrichten lesen kannst. Dein öffentlicher Schlüssel wird an jeden verteilt, der dir geheime, verschlüsselte Nachrichten senden möchte. Das Verwalten von Schlüsseln, die Verschlüsselung von Nachrichten und das Entschlüsseln von Nachrichten sollte ein reibungsloses Erlebnis sein. EncryptEasy wurde alleine dafür entwickelt, es einfach zu machen.

View file

@ -1,4 +1,4 @@
# ESP Studio # ESP-Studio
```mdx-code-block ```mdx-code-block
<p style={{ "text-align": "center" }}> <p style={{ "text-align": "center" }}>
@ -9,5 +9,5 @@
</p> </p>
``` ```
[ESP Studio](https://github.com/torabian/esp-studio) - Cross platform, Desktop, Cloud, and Embedded software [ESP Studio](https://github.com/torabian/esp-studio) - Plattformübergreifend, Desktop, Cloud und Embedded Software
for controlling ESP/Arduino devices, and building complex IOT workflows and control systems zur Steuerung von ESP/Arduino Geräten und zur Erstellung komplexer IOT Workflows und Steuerungssysteme

View file

@ -7,10 +7,10 @@
</p> </p>
``` ```
[FileHound Export Utility](https://www.filehound.co.uk/) FileHound is a cloud document management platform made for secure file retention, business process automation and SmartCapture capabilities. [FileHound Export Utility](https://www.filehound.co.uk/) FileHound ist eine Cloud-Dokumentenverwaltungsplattform für sichere Dateispeicherung, Business Process Automation und SmartCapture Funktionen.
The FileHound Export Utility allows FileHound Administrators the ability to run a secure document and data extraction tasks for alternative back-up and recovery purposes. This application will download all documents and/or meta data saved in FileHound based on the filters you choose. The metadata will be exported in both JSON and XML formats. Das FileHound Export Utility ermöglicht es FileHound Administratoren, sichere Dokumenten- und Datenextrahierungsaufgaben für alternative Backup- und Wiederherstellungszwecke auszuführen. Diese Anwendung lädt alle in FileHound gespeicherten Dokumente und/oder Metadaten herunter, basierend auf den gewählten Filtern. Die Metadaten werden sowohl in JSON- als auch in XML-Formaten exportiert.
Backend built with: Go 1.15 Wails 1.11.0 go-sqlite3 1.14.6 go-linq 3.2 Das Backend wurde mit folgendem gebaut: Go 1.15 Wails 1.11.0 go-sqlite3 1.14.6 go-linq 3.2
Frontend with: Vue 2.6.11 Vuex 3.4.0 TypeScript Tailwind 1.9.6 Das Frontend mit: Vue 2.6.11 Vuex 3.4.0 TypeScript Tailwind 1.9.6

View file

@ -7,4 +7,4 @@
</p> </p>
``` ```
[grpcmd-gui](https://grpc.md/gui) is a modern cross-platform desktop app and API client for gRPC development and testing. [grpcmd-gui](https://grpc.md/gui) ist eine moderner plattformübergreifende Desktop-App und API-Client für die gRPC-Entwicklung und Testung.

View file

@ -7,4 +7,4 @@
</p> </p>
``` ```
[hiposter](https://github.com/obity/hiposter) is a simple and efficient http API testing client tool. Based on Wails, Go and sveltejs. [hiposter](https://github.com/obity/hiposter) ist ein einfacher und effizienter http API Test Client. Basierend auf Wails, Go und sveltejs.

View file

@ -7,17 +7,17 @@
</p> </p>
``` ```
[Kafka-King](https://github.com/Bronya0/Kafka-King) is a kafka GUI client that supports various systems and is compact and easy to use. [Kafka-King](https://github.com/Bronya0/Kafka-King) ist ein Kafka-GUI-Client, der verschiedene Systeme unterstützt und kompakt und einfach zu bedienen ist.
This is made of Wails+vue3 Dieser wurde in Kombination mit Wails und vue3 entwickelt.
# Kafka-King function list # Kafka-King-Funktionsliste
- [x] View the cluster node list, support dynamic configuration of broker and topic configuration items - [x] Anzeigen von Cluster node listen, Unterstützung für dynamische Konfiguration von Broker- und Themen-Konfigurationselementen
- [x] Supports consumer clients, consumes the specified topic, size, and timeout according to the specified group, and displays the message information in various dimensions in a table - [x] Unterstützt consumer clients, verbraucht das angegebene topic, die Größe und den Timeout entsprechend der angegebenen Gruppe und zeigt die Nachrichteninformationen in verschiedenen Dimensionen in einer Tabelle an
- [x] Supports PLAIN, SSL, SASL, kerberos, sasl_plaintext, etc. etc. - [x] Unterstützt PLAIN, SSL, SASL, kerberos, sasl_plaintext, etc.
- [x] Create topics (support batches), delete topics, specify replicas, partitions - [x] Topics erstellen (unterstützt batches), Topics löschen, Repliken spezifizieren und Partitionen
- [x] Support statistics of the total number of messages, total number of submissions, and backlog for each topic based on consumer groups - [x] Unterstützt Statistiken über die Gesamtzahl der Nachrichten, die Gesamtzahl der Beiträge und den backlog für jedes Thema basierend auf consumer Gruppen
- [x] Support viewing topics Detailed information (offset) of the partition, and support adding additional partitions - [x] Unterstützen das Betrachten von Topic Detailinformationen (Offset) der Partition und unterstützen das Hinzufügen von zusätzlichen Partitionen
- [x] Support simulated producers, batch sending messages, specify headers, partitions - [x] Unterstützt simulierte Producer, das Senden von Nachrichten Batches, spezifizieren von Headern sowie Partitionen
- [x] Health check - [x] Health-Check
- [x] Support viewing consumer groups , Consumer- …… - [x] Unterstützung für die Anzeige von consumer Gruppen, Consumer- ……

View file

@ -7,4 +7,4 @@
</p> </p>
``` ```
[Official page](https://marcio199226.github.io/mchat-site/public/) Fully anonymous end2end encrypted chat. [Offizielle Seite](https://marcio199226.github.io/mchat-site/public/) Vollständig anonymer end2end verschlüsselter Chat.

View file

@ -1,4 +1,4 @@
# Minecraft Updater # Minecraft-Updater
```mdx-code-block ```mdx-code-block
<p style={{ "text-align": "center" }}> <p style={{ "text-align": "center" }}>
@ -11,4 +11,4 @@
</p> </p>
``` ```
[Minecraft Updater](https://github.com/Gurkengewuerz/MinecraftModUpdater) is a utility tool to update and synchronize Minecraft mods for your userbase. Its built using Wails2 and React with [antd](https://ant.design/) as frontend framework. [Minecraft Updater](https://github.com/Gurkengewuerz/MinecraftModUpdater) ist ein Utility Tool zum Aktualisieren und Synchronisieren von Minecraft Mods für deine Userbase. Es wurde mit Wails2 sowie React in Kombination mit [antd](https://ant.design/) als Frontend Framework entwickelt.

View file

@ -7,4 +7,4 @@
</p> </p>
``` ```
[Minesweeper-XP](https://git.new/Minesweeper-XP) allows you to experience the classic Minesweeper XP (+ 98 and 3.1) on macOS, Windows, and Linux! [Minesweeper-XP](https://git.new/Minesweeper-XP) ermöglicht es dir das klassische Minesweeper XP (+ 98 und 3.1) auf macOS, Windows und Linux zu erleben!

View file

@ -9,6 +9,6 @@
</p> </p>
``` ```
[Modal File Manager](https://github.com/raguay/ModalFileManager) is a dual pane file manager using web technologies. My original design was based on NW.js and can be found [here](https://github.com/raguay/ModalFileManager-NWjs). This version uses the same Svelte based frontend code (but it has be greatly modified since the departure from NW.js), but the backend is a [Wails 2](https://wails.io/) implementation. By using this implementation, I no longer use command line `rm`, `cp`, etc. commands, but a git install has to be on the system to download themes and extensions. It is fully coded using Go and runs much faster than the previous versions. [Modal File Manager](https://github.com/raguay/ModalFileManager) ist ein Dateimanager mit zwei Fenstern, der Webtechnologien verwendet. Mein ursprüngliches Design basierte auf NW.js und kann [hier ](https://github.com/raguay/ModalFileManager-NWjs) gefunden werden. Diese Version verwendet denselben auf Svelte basierenden Frontend-Code (der jedoch seit der Abkehr von NW.js stark verändert wurde), aber das Backend ist eine [Wails 2](https://wails.io/)-Implementierung. Durch diese Implementierung verwende ich nicht mehr die Kommandozeilenbefehle `rm`, `cp` usw., aber eine Git-Installation muss auf dem System vorhanden sein, um Themes und Erweiterungen herunterzuladen. Es ist vollständig in Go programmiert und läuft viel schneller als die vorherigen Versionen.
This file manager is designed around the same principle as Vim: a state controlled keyboard actions. The number of states isn't fixed, but very programmable. Therefore, an infinite number of keyboard configurations can be created and used. This is the main difference from other file managers. There are themes and extensions available to download from GitHub. Dieser Dateimanager basiert auf dem gleichen Prinzip wie Vim: zustandskontrollierte Tastaturbefehle. Die Anzahl der Zustände ist nicht fixiert, aber sehr programmierbar. So kann eine unendliche Anzahl von Tastaturkonfigurationen erstellt und verwendet werden. Das ist der Hauptunterschied zu anderen Dateimanagern. Es stehen Themen und Erweiterungen zum Download von GitHub zur Verfügung.

View file

@ -7,4 +7,4 @@
</p> </p>
``` ```
[Molly Wallet](https://github.com/grvlle/constellation_wallet/) the official $DAG wallet of the Constellation Network. It'll let users interact with the Hypergraph Network in various ways, not limited to producing $DAG transactions. [Molly Wallet](https://github.com/grvlle/constellation_wallet/) der offizielle $DAG Wallet des Constellation Network. Es lässt Benutzer auf verschiedene Art und Weise mit dem Hypergraph Network interagieren, nicht beschränkt auf die Produktion von $DAG Transaktionen.

View file

@ -7,8 +7,8 @@
</p> </p>
``` ```
[October](https://october.utf9k.net) is a small Wails application that makes it really easy to extract highlights from [Kobo eReaders](https://en.wikipedia.org/wiki/Kobo_eReader) and then forward them to [Readwise](https://readwise.io). [October](https://october.utf9k.net) ist eine kleine Wails Anwendung, die es sehr einfach macht, Highlights aus [Kobo eReaders](https://en.wikipedia.org/wiki/Kobo_eReader) zu extrahieren und diese dann an [Readwise](https://readwise.io) weiterzuleiten.
It has a relatively small scope with all platform versions weighing in under 10MB, and that's without enabling [UPX compression](https://upx.github.io/)! Es hat einen relativ kleinen Umfang; alle Plattformversionen sind kleiner als 10 MB, und das ohne Verwendung von [UPX Kompression](https://upx.github.io/)!
In contrast, the author's previous attempts with Electron quickly bloated to several hundred megabytes. Im Gegensatz dazu waren die bisherigen Versuche des Autors mit Electron schnell auf mehrere hundert Megabyte aufgebläht.

View file

@ -7,4 +7,4 @@
</p> </p>
``` ```
[Optimus](https://github.com/splode/optimus) is a desktop image optimization application. It supports conversion and compression between WebP, JPEG, and PNG image formats. [Optimus](https://github.com/splode/optimus) ist eine Desktop-Bildoptimierungsanwendung. Es unterstützt die Konvertierung und Komprimierung zwischen WebP-, JPEG- und PNG-Bildformaten.

View file

@ -7,4 +7,4 @@
</p> </p>
``` ```
[Portfall](https://github.com/rekon-oss/portfall) - A desktop k8s port-forwarding portal for easy access to all your cluster UIs [Portfall](https://github.com/rekon-oss/portfall) - Ein Desktop-Portal für die Portweiterleitung von k8s für den einfachen Zugriff auf alle deine Cluster-Benutzeroberflächen

View file

@ -7,4 +7,4 @@
</p> </p>
``` ```
[Resizem](https://github.com/barats/resizem) - is an app designed for bulk image process. It is particularly useful for users who need to resize, convert, and manage large numbers of image files at once. [Resizem](https://github.com/barats/resizem) - ist eine App für Massenbild-Verarbeitung. Es ist besonders nützlich für Benutzer, die eine große Anzahl von Bilddateien auf einmal skalieren, konvertieren und oder verwalten müssen.

View file

@ -9,4 +9,4 @@
</p> </p>
``` ```
[Restic-Browser](https://github.com/emuell/restic-browser) - A simple, cross-platform [restic](https://github.com/restic/restic) backup GUI for browsing and restoring restic repositories. [Restik-Browser](https://github.com/emuell/restic-browser) - Eine einfache, plattformübergreifende [Restic](https://github.com/restic/restic) Backup-GUI zum Browsen und Wiederherstellen von Restic Repositorys.

View file

@ -7,15 +7,15 @@
</p> </p>
``` ```
Easy, Secure, and Free file sharing for everyone. Learn more at [Riftshare.app](https://riftshare.app) Einfacher, sicherer und kostenloser Dateiaustausch für jeden. Erfahre mehr auf [Riftshare.app](https://riftshare.app)
## Features ## Funktionen
- Easy secure file sharing between computers both in the local network and through the internet - Einfacher sicherer Dateiaustausch zwischen Computern sowohl im lokalen Netzwerk als auch über das Internet
- Supports sending files or directories securely through the [magic wormhole protocol](https://magic-wormhole.readthedocs.io/en/latest/) - Unterstützt das sichere Senden von Dateien oder Verzeichnissen durch das [magic wormhole protocol](https://magic-wormhole.readthedocs.io/en/latest/)
- Compatible with all other apps using magic wormhole (magic-wormhole or wormhole-william CLI, wormhole-gui, etc.) - Kompatibel mit allen anderen Apps die magic wormhole verwenden (magic-wormhole oder wormhole-william CLI, wormhole-gui, etc.)
- Automatic zipping of multiple selected files to send at once - Automatisches Zippen mehrerer zu sendender Dateien
- Full animations, progress bar, and cancellation support for sending and receiving - Vollständige Animationen, Fortschrittsbalken und Abbruch Unterstützung beim Senden und Empfangen
- Native OS File Selection - Native OS Dateiauswahl
- Open files in one click once received - Dateien mit einem Klick öffnen
- Auto Update - don't worry about having the latest release! - Auto Update - Sorgen dich nicht um die neueste Version!

View file

@ -7,4 +7,4 @@
</p> </p>
``` ```
[ScriptBar](https://GitHub.com/raguay/ScriptBarApp) is a program to show the output of scripts or [Node-Red](https://nodered.org) server. It runs scripts defined in EmailIt program and shows the output. Scripts from xBar or TextBar can be used, but currently on the TextBar scripts work well. It also displays the output of scripts on your system. ScriptBar doesn't put them in the menubar, but has them all in a convient window for easy viewing. You can have multiple tabs to have many different things show. You can also keep the links to your most visited web sites. [ScriptBar](https://GitHub.com/raguay/ScriptBarApp) ist ein Programm zum Anzeigen von Skript Ausgaben oder [Node-Red](https://nodered.org) Servern. Es führt Skripte aus, die in EmailIt definiert sind und zeigt die Ausgabe an. Skripte von xBar oder TextBar können verwendet werden, TextBar-Skripte funktionieren gut. Es zeigt auch die Ausgabe von Skripten auf deinem System an. ScriptBar platziert sie nicht in der Menüleiste, sondern bietet sie alle in einem praktischen Fenster zur einfachen Ansicht an. Du kannst mehrere Tabs haben, um viele verschiedene Dinge anzeigen zu lassen. Du kannst auch die Links auf deine am meisten besuchten Webseiten aufbewahren.

View file

@ -18,10 +18,10 @@
</p> </p>
``` ```
[Snippet Expander](https://snippetexpander.org) is "Your little expandable text snippets helper", for Linux. [Snippet Expander](https://snippetexpander.org) ist "Dein kleiner erweiterbarer Text-Snippets Helfer", für Linux.
Snippet Expander comprises of a GUI application built with Wails for managing snippets and settings, with a Search & Paste window mode for quickly selecting and pasting a snippet. Snippet Expander besteht aus einer GUI-Anwendung, die mit Wails erstellt wurde, um Snippets und Einstellungen zu verwalten, mit einem Such- & Einfügen-Fenstermodus, um ein Snippet schnell auszuwählen und einzufügen.
The Wails based GUI, go-lang CLI and vala-lang auto expander daemon all communicate with a go-lang daemon via D-Bus. The daemon does the majority of the work, managing the database of snippets and common settings, and providing services for expanding and pasting snippets etc. Der Wails basierende GUI, Go-lang CLI und vala-lang auto expander Daemon kommunizieren mit einem Go-lang Daemon über D-Bus. Der Daemon erledigt den Großteil der Arbeit, die Verwaltung der Datenbank von Snippets und gemeinsamen Einstellungen, die Bereitstellung von Diensten zum Aus- und Einfügen von Snippets usw.
Check out the [source code](https://git.sr.ht/~ianmjones/snippetexpander/tree/trunk/item/cmd/snippetexpandergui/app.go#L38) to see how the Wails app sends messages from the UI to the backend that are then sent to the daemon, and subscribes to a D-Bus event to monitor changes to snippets via another instance of the app or CLI and show them instantly in the UI via a Wails event. Schauen dir den [source code](https://git.sr.ht/~ianmjones/snippetexpander/tree/trunk/item/cmd/snippetexpandergui/app.go#L38) an, um zu sehen, wie die Wails-App Nachrichten von der Benutzeroberfläche an das Backend sendet, die dann an den Daemon gesendet werden, und wie sie ein D-Bus-Ereignis abonniert, um Änderungen an Snippets über eine andere Instanz der App oder CLI zu überwachen und diese sofort über ein Wails-Ereignis in der Benutzeroberfläche anzuzeigen.

View file

@ -7,4 +7,4 @@
</p> </p>
``` ```
[Surge](https://getsurge.io/) is a p2p filesharing app designed to utilize blockchain technologies to enable 100% anonymous file transfers. Surge is end-to-end encrypted, decentralized and open source. [Surge](https://getsurge.io/) ist eine p2p Filesharing-App, die entwickelt wurde, um Blockchain-Technologien zu nutzen, um 100 % anonyme Dateiübertragungen zu ermöglichen. Surge ist Ende-zu-Ende-verschlüsselt, dezentral und Open Source.

View file

@ -8,4 +8,4 @@
</p> </p>
``` ```
The [Tiny RDM](https://redis.tinycraft.cc/) application is an open-source, modern lightweight Redis GUI. It has a beautful UI, intuitive Redis database management, and compatible with Windows, Mac, and Linux. It provides visual key-value data operations, supports various data decoding and viewing options, built-in console for executing commands, slow log queries and more. Die [Tiny RDM](https://redis.tinycraft.cc/) Anwendung ist eine speicherplatz sparende und moderne Open-Source Redis GUI. Es hat eine schöne Benutzeroberfläche, intuitive Redis-Datenbankverwaltung und ist kompatibel mit Windows, Mac und Linux. Es bietet visuelle Key-Value-Datenoperationen, unterstützt verschiedene Decodierungs- und Anzeigeoptionen, eine integrierte Konsole zum Ausführen von Befehlen, sowie langsame Log-Abfragen und vieles mehr.

View file

@ -7,4 +7,4 @@
</p> </p>
``` ```
[WailsTerm](https://github.com/rlshukhov/wailsterm) is a simple translucent terminal app powered by Wails and Xterm.js. [WailsTerm](https://github.com/rlshukhov/wailsterm) ist eine einfache transluzente Terminal-App, die von Wails und Xterm.js betrieben wird.

View file

@ -7,4 +7,4 @@
</p> </p>
``` ```
[Wally](https://ergodox-ez.com/pages/wally) is the official firmware flasher for [Ergodox](https://ergodox-ez.com/) keyboards. It looks great and is a fantastic example of what you can achieve with Wails: the ability to combine the power of Go and the rich graphical tools of the web development world. [Wally](https://ergodox-ez.com/pages/wally) ist der offizielle Firmware-Flasher für [Ergodox](https://ergodox-ez.com/) Tastaturen. Es sieht großartig aus und ist ein fantastisches Beispiel dafür, was man mit Wails erreichen kann: die Fähigkeit, die Kraft von Go und die reichen grafischen Werkzeuge der Web-Entwicklungswelt zu kombinieren.

View file

@ -1,4 +1,4 @@
# Minecraft launcher for WarMine # Minecraft-Launcher für WarMine
```mdx-code-block ```mdx-code-block
<p style={{ "text-align": "center" }}> <p style={{ "text-align": "center" }}>
@ -12,8 +12,8 @@
</p> </p>
``` ```
[Minecraft launcher for WarMine](https://warmine.ru/) is a Wails application, that allows you to easily join modded game servers and manage your game accounts. [Minecraft Launcher für WarMine](https://warmine.ru/) ist eine Wails-Anwendung, die es dir erlaubt, modded Gameserver ganz einfach zu betreten und deine Spielkonten zu verwalten.
The Launcher downloads the game files, checks their integrity and launches the game with a wide range of customization options for the launch arguments from the backend. Der Launcher lädt die Spieldateien herunter prüft deren Integrität und startet das Spiel mit einer Vielzahl von Anpassungsoptionen für die Startargumente aus dem Backend.
Frontend is written in Svelte, whole launcher fits in 9MB and supports Windows 7-11. Das Frontend ist in Svelte geschrieben, der ganze Launcher ist 9MB groß und unterstützt Windows 7-11.

View file

@ -7,4 +7,4 @@
</p> </p>
``` ```
[Wombat](https://github.com/rogchap/wombat) is a cross platform gRPC client. [Wombat](https://github.com/rogchap/wombat) ist ein plattformübergreifender gRPC-Client.

View file

@ -7,4 +7,4 @@
</p> </p>
``` ```
[Ytd](https://github.com/marcio199226/ytd/tree/v2-wails) is an app for downloading tracks from youtube, creating offline playlists and share them with your friends, your friends will be able to playback your playlists or download them for offline listening, has an built-in player. [Ytd](https://github.com/marcio199226/ytd/tree/v2-wails) ist eine App zum Herunterladen von Tracks aus Youtube, sowie das Erstellen von Offline-Playlisten und zum Teilen mit deinen Freunden. Deine Freunde können Ihre Wiedergabelisten hören oder sie zum Offline-Hören herunterladen.

View file

@ -2,75 +2,75 @@
sidebar_position: 1 sidebar_position: 1
--- ---
# Templates # Vorlagen
This page serves as a list for community supported templates. Please submit a PR (click `Edit this page` at the bottom) to include your templates. To build your own template, please see the [Templates](../guides/templates.mdx) guide. Diese Seite dient als Liste für Community-Links. Bitte sende einen PR (klicke unten auf `Edit this page`) um Links einzureichen. Um eine eigene Vorlage zu erstellen, lese bitte den [Vorlagen](../guides/templates.mdx) Guide.
To use these templates, run `wails init -n "Your Project Name" -t [the link below[@version]]` Um diese Vorlagen zu verwenden, führe `wails init -n "Projektname" -t [der Link unten[@version]]` aus.
If there is no version suffix, the main branch code template is used by default. If there is a version suffix, the code template corresponding to the tag of this version is used. Wenn kein Versions Suffix vorhanden ist, wird standardmäßig die Haupt-Branch-Code-Vorlage verwendet. Wenn es einen Versions Suffix gibt, wird die Codevorlage verwendet, die dem Tag dieser Version entspricht.
Example: `wails init -n "Your Project Name" -t https://github.com/misitebao/wails-template-vue` Beispiel: `wails init -n "Projektname" -t https://github.com/misitebao/wails-template-vue`
:::warning Attention :::Warnung
**The Wails project does not maintain, is not responsible nor liable for 3rd party templates!** **Das Wails Projekt pflegt keine Drittanbieter Vorlagen und ist auch nicht für diese verantwortlich!**
If you are unsure about a template, inspect `package.json` and `wails.json` for what scripts are run and what packages are installed. Wenn du dir wegen einer Vorlage unsicher bist, prüfe die `package.json` sowie die `wails.json` nach Scripts und installierten Paketen.
::: :::
## Vue ## Vue
- [wails-template-vue](https://github.com/misitebao/wails-template-vue) - Wails template based on Vue ecology (Integrated TypeScript, Dark theme, Internationalization, Single page routing, TailwindCSS) - [wails-template-vue](https://github.com/misitebao/wails-template-vue) - Wails Vorlage basierend auf Vue (+ TypeScript, Dark Theme, Internationalisierung, Single page routing, TailwindCSS)
- [wails-template-quasar-js](https://github.com/sgosiaco/wails-template-quasar-js) - A template using JavaScript + Quasar V2 (Vue 3, Vite, Sass, Pinia, ESLint, Prettier) - [wails-template-quasar-js](https://github.com/sgosiaco/wails-template-quasar-js) - Eine Vorlage mit JavaScript + Quasar V2 (Vue 3, Vite, Sass, Pinia, ESLint, Prettier)
- [wails-template-quasar-ts](https://github.com/sgosiaco/wails-template-quasar-ts) - A template using TypeScript + Quasar V2 (Vue 3, Vite, Sass, Pinia, ESLint, Prettier, Composition API with &lt;script setup&gt;) - [wails-template-quasar-ts](https://github.com/sgosiaco/wails-template-quasar-ts) - Eine Vorlage mit TypeScript + Quasar V2 (Vue 3, Vite, Sass, Pinia, ESLint, Prettier, Composition API mit &lt;script setup&gt;)
- [wails-template-naive](https://github.com/tk103331/wails-template-naive) - Wails template based on Naive UI (A Vue 3 Component Library) - [wails-template-naive](https://github.com/tk103331/wails-template-naive) - Wails Vorlage basierend auf Naive UI (Eine Vue 3 Komponenten Bibliothek)
- [wails-template-tdesign-js](https://github.com/tongque0/wails-template-tdesign-js) - Wails template based on TDesign UI (a Vue 3 UI library by Tencent), using Vite, Pinia, Vue Router, ESLint, and Prettier. - [wails-template-tdesign-js](https://github.com/tongque0/wails-template-tdesign-js) - Wails Template basierend auf TDesign UI (eine Vue 3 UI Bibliothek von Tencent), mit Vite, Pinia, Vue Router, ESLint, und Prettier.
## Angular ## Angular
- [wails-template-angular](https://github.com/mateothegreat/wails-template-angular) - Angular 15+ action packed & ready to roll to production. - [wails-template-angular](https://github.com/mateothegreat/wails-template-angular) - Angular 15+ Aktions verpackt & bereit für die Produktion.
- [wails-angular-template](https://github.com/TAINCER/wails-angular-template) - Angular with TypeScript, Sass, Hot-Reload, Code-Splitting and i18n - [wails-angular-template](https://github.com/TAINCER/wails-angular-template) - Angular mit TypeScript, Sass, Hot-Reload, Code-Splitting und i18n
## React ## React
- [wails-react-template](https://github.com/AlienRecall/wails-react-template) - A template using reactjs - [wails-react-template](https://github.com/AlienRecall/wails-react-template) - Eine Vorlage mit reactjs
- [wails-react-template](https://github.com/flin7/wails-react-template) - A minimal template for React that supports live development - [wails-react-template](https://github.com/flin7/wails-react-template) - Eine minimale Vorlage für React, die Live-Entwicklung unterstützt
- [wails-template-nextjs](https://github.com/LGiki/wails-template-nextjs) - A template using Next.js and TypeScript - [wails-template-nextjs](https://github.com/LGiki/wails-template-nextjs) - Eine Vorlage mit Next.js und TypeScript
- [wails-template-nextjs-app-router](https://github.com/thisisvk-in/wails-template-nextjs-app-router) - A template using Next.js and TypeScript with App router - [wails-template-nextjs-app-router](https://github.com/thisisvk-in/wails-template-nextjs-app-router) - Eine Vorlage mit Next.js und TypeScript mit App-Router
- [wails-vite-react-ts-tailwind-template](https://github.com/hotafrika/wails-vite-react-ts-tailwind-template) - A template for React + TypeScript + Vite + TailwindCSS - [wails-vite-react-ts-tailwind-template](https://github.com/hotafrika/wails-vite-react-ts-tailwind-template) - Eine Vorlage für React + TypeScript + Vite + TailwindCSS
- [wails-vite-react-ts-tailwind-shadcnui-template](https://github.com/Mahcks/wails-vite-react-tailwind-shadcnui-ts) - A template with Vite, React, TypeScript, TailwindCSS, and shadcn/ui - [wails-vite-react-ts-tailwind-shadcnui-template](https://github.com/Mahcks/wails-vite-react-tailwind-shadcnui-ts) - Eine Vorlage mit Vite, React, TypeScript, TailwindCSS, und shadcn/ui
- [wails-nextjs-tailwind-template](https://github.com/kairo913/wails-nextjs-tailwind-template) - A template using Next.js and Typescript with TailwindCSS - [wails-nextjs-tailwind-template](https://github.com/kairo913/wails-nextjs-tailwind-template) - Eine Vorlage mit Next.js und Typescript mit TailwindCSS
## Svelte ## Svelte
- [wails-svelte-template](https://github.com/raitonoberu/wails-svelte-template) - A template using Svelte - [wails-svelte-template](https://github.com/raitonoberu/wails-svelte-template) - Eine Vorlage mit Svelte
- [wails-vite-svelte-template](https://github.com/BillBuilt/wails-vite-svelte-template) - A template using Svelte and Vite - [wails-vite-svelte-template](https://github.com/BillBuilt/wails-vite-svelte-template) - Eine Vorlage mit Svelte und Vite
- [wails-vite-svelte-ts-tailwind-template](https://github.com/xvertile/wails-vite-svelte-tailwind-template) - A template using Wails, Svelte, Vite, TypeScript, and TailwindCSS v3 - [wails-vite-svelte-ts-tailwind-template](https://github.com/xvertile/wails-vite-svelte-tailwind-template) - Eine Vorlage mit Wails, Svelte, Vite, TypeScript und TailwindCSS v3
- [wails-vite-svelte-tailwind-template](https://github.com/BillBuilt/wails-vite-svelte-tailwind-template) - A template using Svelte and Vite with TailwindCSS v3 - [wails-vite-svelte-tailwind-template](https://github.com/BillBuilt/wails-vite-svelte-tailwind-template) - Eine Vorlage mit Svelte und Vite mit TailwindCSS v3
- [wails-svelte-tailwind-vite-template](https://github.com/PylotLight/wails-vite-svelte-tailwind-template/tree/master) - An updated template using Svelte v4.2.0 and Vite with TailwindCSS v3.3.3 - [wails-svelte-tailwind-vite-template](https://github.com/PylotLight/wails-vite-svelte-tailwind-template/tree/master) - Eine aktualisierte Vorlage mit Svelte v4.2.0 und Vite mit TailwindCSS v3.3.3
- [wails-sveltekit-template](https://github.com/h8gi/wails-sveltekit-template) - A template using SvelteKit - [wails-sveltekit-template](https://github.com/h8gi/wails-sveltekit-template) - Eine Vorlage mit SvelteKit
## Solid ## Solid
- [wails-template-vite-solid-ts](https://github.com/xijaja/wails-template-solid-ts) - A template using Solid + Ts + Vite - [wails-template-vite-solid-ts](https://github.com/xijaja/wails-template-solid-ts) - Eine Vorlage mit Solid + Ts + Vite
- [wails-template-vite-solid-js](https://github.com/xijaja/wails-template-solid-js) - A template using Solid + Js + Vite - [wails-template-vite-solid-js](https://github.com/xijaja/wails-template-solid-js) - Eine Vorlage mit Solid + Js + Vite
## Elm ## Elm
- [wails-elm-template](https://github.com/benjamin-thomas/wails-elm-template) - Develop your GUI app with functional programming and a **snappy** hot-reload setup :tada: :rocket: - [wails-elm-template](https://github.com/benjamin-thomas/wails-elm-template) - Entwickeln deine GUI-App mit funktionaler Programmierung und einem **snappy** Hot-reload Setup :tada: :rocket:
- [wails-template-elm-tailwind](https://github.com/rnice01/wails-template-elm-tailwind) - Combine the powers :muscle: of Elm + Tailwind CSS + Wails! Hot reloading supported. - [wails-template-elm-tailwind](https://github.com/rnice01/wails-template-elm-tailwind) - Kombiniere die Kräfte :muscle: von Elm + Tailwind CSS + Wails! Mit Hot-reload Unterstützung.
## HTMX ## HTMX
- [wails-htmx-templ-chi-tailwind](https://github.com/PylotLight/wails-hmtx-templ-template) - Use a unique combination of pure htmx for interactivity plus templ for creating components and forms - [wails-htmx-templ-chi-tailwind](https://github.com/PylotLight/wails-hmtx-templ-template) - Verwende eine einzigartige Kombination aus reinem htmx für Interaktivität plus templ für die Erstellung von Komponenten und Formularen
## Pure JavaScript (Vanilla) ## Pures JavaScript (Vanilla)
- [wails-pure-js-template](https://github.com/KiddoV/wails-pure-js-template) - A template with nothing but just basic JavaScript, HTML, and CSS - [wails-pure-js-template](https://github.com/KiddoV/wails-pure-js-template) - Eine Vorlage mit nichts anderem als standardmäßigem JavaScript, HTML und CSS
## Lit (web components) ## Lit (web Komponenten)
- [wails-lit-shoelace-esbuild-template](https://github.com/Braincompiler/wails-lit-shoelace-esbuild-template) - Wails template providing frontend with lit, Shoelace component library + pre-configured prettier and typescript. - [wails-lit-shoelace-esbuild-template](https://github.com/Braincompiler/wails-lit-shoelace-esbuild-template) - Wails Vorlage die ein Frontend bestehend aus lit der Shoelace Komponenten Bibliothek sowie vorkonfigurierten prettier und TypeScript anbietet.

View file

@ -2,15 +2,15 @@
sidebar_position: 6 sidebar_position: 6
--- ---
# Compiling your Project # Kompilieren deines Projektes
From the project directory, run `wails build`. This will compile your project and save the production-ready binary in the `build/bin` directory. Führe in deinem Projektverzeichnis `wails build` aus. Dadurch wird dein Projekt kompiliert und die produktionsfertige Binärdatei im `build/bin` Verzeichnis gespeichert.
:::info Linux :::info Linux
If you are using a Linux distribution that does not have webkit2gtk-4.0 (such as Ubuntu 24.04), you will need to add `-tags webkit2_41`. Wenn eine Linux-Distribution ohne webkit2gtk-4.0 verwendet wird (wie Ubuntu 24.04), muss `-Tags webkit2_41` hinzugefügt werden.
::: :::
If you run the binary, you should see the default application: Wenn die Binärdatei ausgeführt wird, sollte folgende Standardanwendung zu sehen sein:
```mdx-code-block ```mdx-code-block
<div class="text--center"> <div class="text--center">
@ -23,4 +23,4 @@ If you run the binary, you should see the default application:
<br /> <br />
``` ```
For more details on compilation options, please refer to the [CLI Reference](../reference/cli.mdx#build). Weitere Details zu den Kompilierungsoptionen findet man in der [CLI Referenz](../reference/cli.mdx#build).

View file

@ -2,15 +2,15 @@
sidebar_position: 5 sidebar_position: 5
--- ---
# Developing your Application # Entwicklung deiner Anwendung
You can run your application in development mode by running `wails dev` from your project directory. This will do the following things: Deine Anwendung kann im Entwicklungsmodus ausgeführt werden, indem `wails dev` in deinem Projektverzeichnis ausgeführt wird. Das wird folgende Dinge tun:
- Build your application and run it - Erstellen und ausführen deiner Anwendung
- Bind your Go code to the frontend so it can be called from JavaScript - Verknüpfen deines Go Codes mit dem Frontend, sodass dieser mit JavaScript aufgerufen werden kann
- Using the power of [Vite](https://vitejs.dev/), will watch for modifications in your Go files and rebuild/re-run on change - Mit hilfe von [Vite](https://vitejs.dev/) werden deine Go-Dateien auf Änderungen überwacht und bei Änderungen neu erstellt/ausgeführt
- Sets up a [webserver](http://localhost:34115) that will serve your application over a browser. This allows you to use your favourite browser extensions. You can even call your Go code from the console - Richtet einen [Webserver](http://localhost:34115) ein, der die Anwendung über einen Browser erreichbar macht. Das erlaubt dir, deine bevorzugten Browser-Erweiterungen zu verwenden. Es erlaubt ebenfalls, dass der Go-Code über die Konsole aufgerufen werden kann
To get started, run `wails dev` in the project directory. More information on this can be found [here](../reference/cli.mdx#dev). Um zu beginnen, führe `wails dev` im Projektverzeichnis aus. Weitere Informationen dazu [hier](../reference/cli.mdx#dev)
Coming soon: Tutorial Demnächst: Anleitung

View file

@ -2,13 +2,13 @@
sidebar_position: 2 sidebar_position: 2
--- ---
# Creating a Project # Ein Projekt erstellen
## Project Generation ## Projekterzeugung
Now that the CLI is installed, you can generate a new project by using the `wails init` command. Nachdem das CLI installiert ist, kann ein neues Projekt generiert werden, indem der Befehl `wails init` ausgeführt wird.
Pick your favourite framework: Wähle dein Lieblings-Framework:
```mdx-code-block ```mdx-code-block
import Tabs from "@theme/Tabs"; import Tabs from "@theme/Tabs";
@ -26,61 +26,61 @@ import TabItem from "@theme/TabItem";
]} ]}
> >
<TabItem value="Svelte"> <TabItem value="Svelte">
Generate a <a href={"https://svelte.dev/"}>Svelte</a> project using JavaScript with:<br/><br/> Generiere ein <a href={"https://svelte.dev/"}>Svelte</a> Projekt mit JavaScript:<br/><br/>
wails init -n myproject -t svelte wails init -n myproject -t svelte
If you would rather use TypeScript:<br/> Oder TypeScript:<br/>
wails init -n myproject -t svelte-ts wails init -n myproject -t svelte-ts
</TabItem> </TabItem>
<TabItem value="React"> <TabItem value="React">
Generate a <a href={"https://reactjs.org/"}>React</a> project using JavaScript with:<br/><br/> Generiere ein <a href={"https://reactjs.org/"}>React</a> Projekt mit JavaScript:<br/><br/>
wails init -n myproject -t react wails init -n myproject -t react
If you would rather use TypeScript:<br/> Oder TypeScript:<br/>
wails init -n myproject -t react-ts wails init -n myproject -t react-ts
</TabItem> </TabItem>
<TabItem value="Vue"> <TabItem value="Vue">
Generate a <a href={"https://vuejs.org/"}>Vue</a> project using JavaScript with:<br/><br/> Generiere ein <a href={"https://vuejs.org/"}>Vue</a> Projekt mit JavaScript:<br/><br/>
wails init -n myproject -t vue wails init -n myproject -t vue
If you would rather use TypeScript:<br/> Oder TypeScript:<br/>
wails init -n myproject -t vue-ts wails init -n myproject -t vue-ts
</TabItem> </TabItem>
<TabItem value="Preact"> <TabItem value="Preact">
Generate a <a href={"https://preactjs.com/"}>Preact</a> project using JavaScript with:<br/><br/> Generiere ein <a href={"https://preactjs.com/"}>Preact</a> Projekt mit JavaScript:<br/><br/>
wails init -n myproject -t preact wails init -n myproject -t preact
If you would rather use TypeScript:<br/> Oder TypeScript:<br/>
wails init -n myproject -t preact-ts wails init -n myproject -t preact-ts
</TabItem> </TabItem>
<TabItem value="Lit"> <TabItem value="Lit">
Generate a <a href={"https://lit.dev/"}>Lit</a> project using JavaScript with:<br/><br/> Generiere ein <a href={"https://lit.dev/"}>Lit</a> Projekt mit JavaScript:<br/><br/>
wails init -n myproject -t lit wails init -n myproject -t lit
If you would rather use TypeScript:<br/> Oder TypeScript:<br/>
wails init -n myproject -t lit-ts wails init -n myproject -t lit-ts
</TabItem> </TabItem>
<TabItem value="Vanilla"> <TabItem value="Vanilla">
Generate a Vanilla project using JavaScript with:<br/><br/> Generiere ein Vanilla Projekt mit JavaScript:<br/><br/>
wails init -n myproject -t vanilla wails init -n myproject -t vanilla
If you would rather use TypeScript:<br/> Oder TypeScript:<br/>
wails init -n myproject -t vanilla-ts wails init -n myproject -t vanilla-ts
@ -90,13 +90,13 @@ If you would rather use TypeScript:<br/>
<hr /> <hr />
There are also [community templates](../community/templates.mdx) available that offer different capabilities and frameworks. Es sind auch [Community-Vorlagen](../community/templates.mdx) verfügbar, die unterschiedliche Fähigkeiten sowie Frameworks bieten.
To see the other options available, you can run `wails init -help`. More details can be found in the [CLI Reference](../reference/cli.mdx#init). Um die anderen verfügbaren Optionen zu sehen, `wails init -help` ausführen. Weitere Informationen sind in der [CLI Referenz](../reference/cli.mdx#init) zu finden.
## Project Layout ## Projektstruktur
Wails projects have the following layout: Wails Projekte haben die folgende Struktur:
``` ```
. .
@ -111,18 +111,18 @@ Wails projects have the following layout:
└── wails.json └── wails.json
``` ```
### Project structure rundown ### Projektstruktur Erkläung
- `/main.go` - The main application - `/main.go` - Die Hauptanwendung
- `/frontend/` - Frontend project files - `/frontend/` - Frontend Projektdateien
- `/build/` - Project build directory - `/build/` - Projekterstellungsverzeichnis
- `/build/appicon.png` - The application icon - `/build/appicon.png` - Das Anwendungssymbol
- `/build/darwin/` - Mac specific project files - `/build/darwin/` - Mac-spezifische Projektdateien
- `/build/windows/` - Windows specific project files - `/build/windows/` - Windows-spezifische Projektdateien
- `/wails.json` - The project configuration - `/wails.json` - Die Projekt-Konfiguration
- `/go.mod` - Go module file - `/go.mod` - Go module Datei
- `/go.sum` - Go module checksum file - `/go.sum` - Go module checksum Datei
The `frontend` directory has nothing specific to Wails and can be any frontend project of your choosing. Das `Frontend` Verzeichnis ist nicht an Wails gebunden und kann ein beliebiges Frontend-Projekt sein.
The `build` directory is used during the build process. These files may be updated to customise your builds. If files are removed from the build directory, default versions will be regenerated. Das `build` Verzeichnis wird während des Build-Prozesses verwendet. Diese Dateien können aktualisiert werden, um deine Builds anzupassen. Wenn Dateien aus dem Build-Verzeichnis entfernt werden, werden die Standardversionen neu generiert.

View file

@ -4,38 +4,38 @@ sidebar_position: 1
# Installation # Installation
## Supported Platforms ## Unterstützte Plattformen
- Windows 10/11 AMD64/ARM64 - Windows 10/11 AMD64/ARM64
- MacOS 10.15+ AMD64 for development, MacOS 10.13+ for release - MacOS 10.15+ AMD64 für die Entwicklung, MacOS 10.13+ für die Veröffentlichung
- MacOS 11.0+ ARM64 - MacOS 11.0+ ARM64
- Linux AMD64/ARM64 - Linux AMD64/ARM64
## Dependencies ## Abhängigkeiten
Wails has a number of common dependencies that are required before installation: Wails hat eine Reihe von Abhängigkeiten, die vor der Installation benötigt werden:
- Go 1.21+ (macOS 15+ requires Go 1.23.3+) - Go 1.21+ (macOS 15+ benötigt Go 1.23.3+)
- NPM (Node 15+) - NPM (Node 15+)
### Go ### Go
Download Go from the [Go Downloads Page](https://go.dev/dl/). Lade Go von der [Download Seite](https://go.dev/dl/) runter.
Ensure that you follow the official [Go installation instructions](https://go.dev/doc/install). You will also need to ensure that your `PATH` environment variable also includes the path to your `~/go/bin` directory. Restart your terminal and do the following checks: Befolge bitte die offiziellen [Installationsanweisungen](https://go.dev/doc/install). Außerdem muss sichergestellt werden, dass die `PATH` Umgebungsvariable auch den Pfad zu Ihrem `~/go/bin` Verzeichnis enthält. Starte dein Terminal neu und führe folgende Überprüfungen durch:
- Check Go is installed correctly: `go version` - Prüfe ob Go korrekt installiert ist: `go version`
- Check "~/go/bin" is in your PATH variable: `echo $PATH | grep go/bin` - Überprüfe ob "~/go/bin" in der PATH-Variable vorhanden ist: `echo $PATH | grep go/bin`
### NPM ### NPM
Download NPM from the [Node Downloads Page](https://nodejs.org/en/download/). It is best to use the latest release as that is what we generally test against. NPM von der [Node Downloads Seite](https://nodejs.org/en/download/) herunterladen. Es ist am besten, die neueste Version zu verwenden, da wir damit im Allgemeinen testen.
Run `npm --version` to verify. Führe `npm --version` aus, um zu überprüfen, ob NPM richtig installiert wurde.
## Platform Specific Dependencies ## Plattformspezifische Abhängigkeiten
You will also need to install platform specific dependencies: Außerdem müssen plattformspezifische Abhängigkeiten installiert werden:
```mdx-code-block ```mdx-code-block
import Tabs from "@theme/Tabs"; import Tabs from "@theme/Tabs";
@ -50,43 +50,43 @@ import TabItem from "@theme/TabItem";
]} ]}
> >
<TabItem value="MacOS"> <TabItem value="MacOS">
Wails requires that the xcode command line tools are installed. This can be Wails erfordert die Installation der Xcode-Kommandozeilenprogramme. Dies kann
done by running <code>xcode-select --install</code>. über <code>xcode-select --install</code> erfolgen.
</TabItem> </TabItem>
<TabItem value="Windows"> <TabItem value="Windows">
Wails requires that the <a href="https://developer.microsoft.com/en-us/microsoft-edge/webview2/">WebView2</a> runtime is installed. Some Windows installations will already have this installed. You can check using the <code>wails doctor</code> command. Wails erfordert die Installation der <a href="https://developer.microsoft.com/en-us/microsoft-edge/webview2/">WebView2</a>-Laufzeit. Einige Windows-Installationen werden dies bereits installiert haben. Du kannst den Befehl <code>wails doctor</code> ausführen zum überprüfen.
</TabItem> </TabItem>
<TabItem value={"Linux"}> <TabItem value={"Linux"}>
Linux requires the standard <code>gcc</code> build tools plus <code>libgtk3</code> and <code>libwebkit</code>. Rather than list a ton of commands for different distros, Wails can try to determine what the installation commands are for your specific distribution. Run <code>wails doctor</code> after installation to be shown how to install the dependencies. If your distro/package manager is not supported, please consult the <a href={"/docs/guides/linux-distro-support"}>Add Linux Distro</a> guide. Linux benötigt die Standard <code>gcc</code> Build-Tools sowie <code>libgtk3</code> und <code>libwebkit</code>. Anstatt eine Vielzahl von Befehlen für verschiedene Distributionen aufzulisten, kann Wails versuchen herauszufinden, was die Installationsbefehle für deine spezifische Distribution sind. Führe <code>wails doctor</code> nach der Installation aus, um zu sehen, wie die Abhängigkeiten installiert werden sollen. Wenn deine Distribution oder dein Paketmanager nicht unterstützt wird, schaue dir die <a href={"/docs/guides/linux-distro-support"}>Füge ein Linux Distro hinzu</a> Anleitung an.
<br/><strong>Note:</strong><br/> <br/><strong>Hinweis:</strong><br/>
If you are using latest Linux version (example: Ubuntu 24.04) and it is not supporting <code>libwebkit2gtk-4.0-dev</code>, then you might encounter an issue in <code>wails doctor</code>: <code>libwebkit</code> not found. To resolve this issue you can install <code>libwebkit2gtk-4.1-dev</code> and during your build use the tag <code>-tags webkit2_41</code>. Wenn die neueste Linux-Version verwendet wird (Beispiel: Ubuntu 24. 4) und es <code>libwebkit2gtk-4.0-dev</code> nicht unterstützt, dann könnte folgendes Problem in <code>wails doctor</code> auftreten: <code>libwebkit</code> nicht gefunden. Um dieses Problem zu beheben, kann <code>libwebkit2gtk-4.1-dev</code> installiert werden und während des Builds der Tag <code>-tags webkit2_41</code> verwendet werden.
</TabItem> </TabItem>
</Tabs> </Tabs>
``` ```
## Optional Dependencies ## Optionale Abhängigkeiten
- [UPX](https://upx.github.io/) for compressing your applications. - [UPX](https://upx.github.io/) zum Komprimieren der Anwendungen.
- [NSIS](https://wails.io/docs/guides/windows-installer/) for generating Windows installers. - [NSIS](https://wails.io/docs/guides/windows-installer/) zur Erzeugung von Windows-Installern.
## Installing Wails ## Wails installieren
Run `go install github.com/wailsapp/wails/v2/cmd/wails@latest` to install the Wails CLI. Führe `go install github.com/wailsapp/wails/v2/cmd/wails@latest` aus, um das Wails CLI zu installieren.
Note: If you get an error similar to this: Hinweis: Wenn ein ähnlicher Fehler auftritt:
```shell ```shell
....\Go\pkg\mod\github.com\wailsapp\wails\v2@v2.1.0\pkg\templates\templates.go:28:12: pattern all:ides/*: no matching files found ....\Go\pkg\mod\github.com\wailsapp\wails\v2@v2.1.0\pkg\templates\templates.go:28:12: pattern all:ides/*: no matching files found
``` ```
please check you have Go 1.18+ installed: überprüfe, ob Go 1.18+ installiert wurde:
```shell ```shell
go version go version
``` ```
## System Check ## Systemprüfung
Running `wails doctor` will check if you have the correct dependencies installed. If not, it will advise on what is missing and help on how to rectify any problems. Führe `wails doctor` aus um zu prüfen ob die richtigen Abhängigkeiten installiert wurden. Sollte das nicht der Fall sein, wird es Hinweise darauf geben, was fehlt, sowie eine Hilfestellung, wie eventuelle Probleme behoben werden können.
## The `wails` command appears to be missing? ## Der `wails` Befehl fehlt?
If your system is reporting that the `wails` command is missing, make sure you have followed the Go installation guide correctly. Normally, it means that the `go/bin` directory in your User's home directory is not in the `PATH` environment variable. You will also normally need to close and reopen any open command prompts so that changes to the environment made by the installer are reflected at the command prompt. Wenn das System meldet, dass der `wails` Befehl fehlt, stelle sicher, dass die Go-Installationsanleitung korrekt befolgt wurde. Normalerweise bedeutet dies, dass sich das `go/bin` Verzeichnis im Home-Verzeichnis Ihres Benutzers nicht in der `PATH` Umgebungsvariable befindet. Normalerweise müssen alle Eingabeaufforderungen geschlossen und neu geöffnet werden, so dass Änderungen an der Umgebung des Installers in der Eingabeaufforderung übernommen werden.

View file

@ -1,10 +1,10 @@
# Angular # Angular
Whilst Wails does not have an Angular template, it is possible to use Angular with Wails. Obwohl Wails kein Angular Template hat, ist es möglich, Angular in Kombination mit Wails zu verwenden.
## Dev Mode ## Dev-Modus
To get dev mode working with Angular, you need to add the following to your `wails.json`: Damit der Dev-Modus mit Angular funktioniert, musst du Folgendes zu deiner `wails.json` hinzufügen:
```json ```json
"frontend:build": "npx ng build", "frontend:build": "npx ng build",

View file

@ -1,12 +1,12 @@
# Application Development # Entwicklung von Anwendungen
There are no hard and fast rules for developing applications with Wails, but there are some basic guidelines. Es gibt keine festen Regeln für die Entwicklung von Anwendungen mit Wails, aber einige grundlegende Richtlinien.
## Application Setup ## Anwendungseinrichtung
The pattern used by the default templates are that `main.go` is used for configuring and running the application, whilst `app.go` is used for defining the application logic. Das von den Standardvorlagen verwendete Muster ist, dass `main.go` zum Konfigurieren und Ausführen der Anwendung verwendet wird, während `app.go` zur Definition der Anwendungslogik verwendet wird.
The `app.go` file will define a struct that has 2 methods which act as hooks into the main application: Die `app.go` Datei definiert einen Struct mit 2 Methoden, die als Hooks in der Hauptanwendung fungieren:
```go title="app.go" ```go title="app.go"
type App struct { type App struct {
@ -25,11 +25,11 @@ func (a *App) shutdown(ctx context.Context) {
} }
``` ```
- The startup method is called as soon as Wails allocates the resources it needs and is a good place for creating resources, setting up event listeners and anything else the application needs at startup. It is given a `context.Context` which is usually saved in a struct field. This context is needed for calling the [runtime](../reference/runtime/intro.mdx). If this method returns an error, the application will terminate. In dev mode, the error will be output to the console. - Die startup Methode wird aufgerufen, sobald Wails die benötigten Ressourcen angefordert hat und ist ein guter Ort für die Erstellung von eigenen Ressourcen sowie die Konfigurierung von Events und alles andere, was die Anwendung beim Start braucht. Es wird ein `context.Context` übergeben, der normalerweise in einem Struct-Feld gespeichert wird. Dieser Kontext wird benötigt, um die [Laufzeit](../reference/runtime/intro.mdx) aufzurufen. Gibt diese Methode einen Fehler zurück, wird die Anwendung beendet. Im Dev-Modus wird der Fehler in die Konsole ausgegeben.
- The shutdown method will be called by Wails right at the end of the shutdown process. This is a good place to deallocate memory and perform any shutdown tasks. - Die shutdown Methode wird von Wails direkt am Ende des Shutdown-Prozesses aufgerufen. Dies ist ein guter Ort, um Ressourcen wieder freizugeben und um alle anderen Aufgaben zu beenden.
The `main.go` file generally consists of a single call to `wails.Run()`, which accepts the application configuration. The pattern used by the templates is that before the call to `wails.Run()`, an instance of the struct we defined in `app.go` is created and saved in a variable called `app`. This configuration is where we add our callbacks: Die `main.go` Datei besteht im Allgemeinen aus einem einzigen Aufruf von `wails.Run()`, der die Anwendungskonfiguration akzeptiert. Das Muster, das in den Vorlagen verwendet wird, besteht darin, dass vor dem Aufruf von `wails.Run()` eine Instanz des Structs, die wir in `app.go` definiert haben, erstellt und in einer Variable namens `app` gespeichert wird. Diese Konfiguration ist der Ort, an dem wir unsere Callbacks hinzufügen:
```go {3,9,10} title="main.go" ```go {3,9,10} title="main.go"
func main() { func main() {
@ -50,11 +50,11 @@ func main() {
``` ```
More information on application lifecycle hooks can be found [here](../howdoesitwork.mdx#application-lifecycle-callbacks). Weitere Informationen zu Anwendungslaufzeit hooks sind [hier](../howdoesitwork.mdx#application-lifecycle-callbacks) zu finden.
## Binding Methods ## Methoden Verknüpfen
It is likely that you will want to call Go methods from the frontend. This is normally done by adding public methods to the already defined struct in `app.go`: Es ist wahrscheinlich, dass Go-Methoden vom Frontend aufgerufen werden sollen. Normalerweise wird das durch das Hinzufügen öffentlicher Methoden zu den bereits definierten structs in `app.go` gemacht:
```go {16-18} title="app.go" ```go {16-18} title="app.go"
type App struct { type App struct {
@ -77,7 +77,7 @@ func (a *App) Greet(name string) string {
} }
``` ```
In the main application configuration, the `Bind` key is where we can tell Wails what we want to bind: In der Hauptanwendungskonfiguration ist der `Bind` Key, der, bei dem wir Wails sagen können, was wir verknüpfen wollen:
```go {11-13} title="main.go" ```go {11-13} title="main.go"
func main() { func main() {
@ -101,11 +101,11 @@ func main() {
``` ```
This will bind all public methods in our `App` struct (it will never bind the startup and shutdown methods). Das wird alle öffentlichen Methoden in unserem `App` struct verknüpfen (ausgenommen davon sind die Start- und Herunterfahrmethoden).
### Dealing with context when binding multiple structs ### Umgang mit dem Kontext, wenn mehrere structs verknüpft werden
If you want to bind methods for multiple structs but want each struct to keep a reference to the context so that you can use the runtime functions, a good pattern is to pass the context from the `OnStartup` method to your struct instances : Solltest du mehrmals den Anwendungskontext in verschiedenen Structs referenzieren wollen, ist es sinnvoll, das in der `OnStartup` Methode zu machen:
```go ```go
func main() { func main() {
@ -133,7 +133,7 @@ func main() {
} }
``` ```
Also you might want to use Enums in your structs and have models for them on frontend. In that case you should create array that will contain all possible enum values, instrument enum type and bind it to the app: Auch Enums können in Structs verwendet werden, diese erhalten im Frontend entsprechende Modelle. In diesem Fall sollte ein Array erstellt werden, das alle möglichen Enum-Werte enthält:
```go {16-18} title="app.go" ```go {16-18} title="app.go"
type Weekday string type Weekday string
@ -162,7 +162,7 @@ var AllWeekdays = []struct {
} }
``` ```
In the main application configuration, the `EnumBind` key is where we can tell Wails what we want to bind enums as well: In der Hauptanwendungskonfiguration ist der `EnumBind` Key, der, bei dem wir Wails sagen können, welche Emums wir verknüpfen wollen:
```go {11-13} title="main.go" ```go {11-13} title="main.go"
func main() { func main() {
@ -189,13 +189,13 @@ func main() {
``` ```
This will add missing enums to your `model.ts` file. Dadurch werden fehlende Enums zu der `model.ts` Datei hinzugefügt.
More information on Binding can be found [here](../howdoesitwork.mdx#method-binding). Weitere Informationen dazu [hier](../howdoesitwork.mdx#method-binding).
## Application Menu ## Anwendungsmenü
Wails supports adding a menu to your application. This is done by passing a [Menu](../reference/menus.mdx#menu) struct to application config. It's common to use a method that returns a Menu, and even more common for that to be a method on the `App` struct used for the lifecycle hooks. Wails unterstützt das Hinzufügen eines Menüs zur Anwendung. Das geschieht durch die Übergabe eines [Menu](../reference/menus.mdx#menu)-Structs an die Anwendungskonfiguration. Es ist üblich, eine Methode zu verwenden, die ein Menü zurückgibt, vorzugsweise eine Methode im `App` struct, die für die Laufzeit Hooks verwendet wird.
```go {11} title="main.go" ```go {11} title="main.go"
func main() { func main() {
@ -222,41 +222,41 @@ func main() {
## Assets ## Assets
The great thing about the way Wails v2 handles assets is that it doesn't! The only thing you need to give Wails is an `embed.FS`. How you get to that is entirely up to you. You can use vanilla html/css/js files like the vanilla template. You could have some complicated build system, it doesn't matter. Das Großartige an der Art und Weise, wie Wails v2 mit Assets umgeht, ist, dass es das nicht tut! Das Einzige, was Wails benötigt, ist `embed.FS`. Wie ein embed.FS erzeugt wird, ist dir überlassen. Du kannst Vanilla html/css/js Dateien wie das Vanilla Template verwenden. Oder auch ein kompliziertes Build-System, es spielt keine Rolle.
When `wails build` is run, it will check the `wails.json` project file at the project root. There are 2 keys in the project file that are read: Wenn `wails build` ausführt wird, wird die `wails.json` Projektdatei im Projektverzeichnis überprüft. Es gibt 2 Schlüssel in der Projektdatei, die gelesen werden:
- "frontend:install" - "frontend:install"
- "frontend:build" - "frontend:build"
The first, if given, will be executed in the `frontend` directory to install the node modules. The second, if given, will be executed in the `frontend` directory to build the frontend project. Der erste, falls angegeben, wird im `Frontend` Verzeichnis ausgeführt, um die node Modules zu installieren. Der zweite, falls angegeben, wird im `frontend`-Verzeichnis ausgeführt, um das Frontend-Projekt zu erstellen.
If these 2 keys aren't given, then Wails does absolutely nothing with the frontend. It is only expecting that `embed.FS`. Wenn diese 2 Keys nicht gegeben werden, dann tut Wails absolut nichts mit dem Frontend. Es wird nur erwartet, dass `embed.FS` vorhanden ist.
### AssetsHandler ### AssetsHandler
A Wails v2 app can optionally define a `http.Handler` in the `options.App`, which allows hooking into the AssetServer to create files on the fly or process POST/PUT requests. GET requests are always first handled by the `assets` FS. If the FS doesn't find the requested file the request will be forwarded to the `http.Handler` for serving. Any requests other than GET will be directly processed by the `AssetsHandler` if specified. It's also possible to only use the `AssetsHandler` by specifying `nil` as the `Assets` option. Eine Wails v2 App kann optional einen `http.Handler` in den `options.App` definieren, der das Hooking in den AssetServer erlaubt, um Dateien zu erstellen oder POST/PUT-Anfragen zu verarbeiten. GET-Anfragen werden immer zuerst vom `assets` FS bearbeitet. Wenn der FS die angeforderte Datei nicht findet, wird die Anfrage an den `http.Handler` weitergeleitet, um diese zu verarbeiten. Alle anderen Anfragen als GET werden direkt vom `AssetsHandler` bearbeitet, sofern angegeben. Es ist auch möglich, nur den `AssetsHandler` zu verwenden, indem `nil` als `Assets` Option angegeben wird.
## Built in Dev Server ## Eingebauter Dev Server
Running `wails dev` will start the built in dev server which will start a file watcher in your project directory. By default, if any file changes, wails checks if it was an application file (default: `.go`, configurable with `-e` flag). If it was, then it will rebuild your application and relaunch it. If the changed file was in the assets, it will issue a reload after a short amount of time. Das Ausführen von `wails dev` startet den eingebauten Entwicklungsserver, der einen Dateibeobachter im Projektverzeichnis startet. Standardmäßig prüft wails bei Änderungen an Dateien, ob es sich um eine Anwendungsdatei handelt (Standard: `.go`, konfigurierbar mit der `-e`-Flagge). Wenn das der Fall ist, wird wails automatisch die Anwendung neu builden und neu starten. Wenn sich die geänderte Datei in den Assets befindet, wird nach kurzer Zeit neu geladen.
The dev server uses a technique called "debouncing" which means it doesn't reload straight away, as there may be multiple files changed in a short amount of time. When a trigger occurs, it waits for a set amount of time before issuing a reload. If another trigger happens, it resets to the wait time again. By default this value is `100ms`. If this value doesn't work for your project, it can be configured using the `-debounce` flag. If used, this value will be saved to your project config and become the default. Der Dev-Server verwendet eine Technik namens "debouncing", was bedeutet, dass er nicht sofort neu geladen wird, da mehrere Dateien in kurzer Zeit geändert werden können. Wenn ein Trigger ausgelöst wird, wartet er eine festgelegte Zeit, bevor er ein Nachladen ausführt. Falls ein anderer Trigger auftritt, wird die Wartezeit erneut gesetzt. Standardmäßig ist dieser Wert `100ms`. Wenn dieser Wert für dein Projekt nicht funktioniert, kann er mit der `-debounce` Flag konfiguriert werden. Wenn verwendet, wird dieser Wert in deiner Projekt-Konfiguration gespeichert und zur Standardeinstellung.
## External Dev Server ## Externer Dev Server
Some frameworks come with their own live-reloading server, however they will not be able to take advantage of the Wails Go bindings. In this scenario, it is best to run a watcher script that rebuilds the project into the build directory, which Wails will be watching. For an example, see the default svelte template that uses [rollup](https://rollupjs.org/guide/en/). Einige Frameworks haben ihren eigenen Live-Reloading-Server, aber diese werden nicht in der Lage sein, die Wails Go-Verknüpfungen zu nutzen. In diesem Szenario ist es am besten, ein Watcher-Skript auszuführen, das das Projekt in das Build-Verzeichnis umbaut, welches Wails beobachten wird. Siehe die svelte Standardvorlage, die [rollup](https://rollupjs.org/guide/en/) verwendet.
### Create React App ### Create React App
The process for a Create-React-App project is slightly more complicated. In order to support live frontend reloading the following configuration needs to be added to your `wails.json`: Der Prozess für ein Create-React-App-Projekt ist etwas komplizierter. Um das Live-Frontend neu laden zu können, muss die folgende Konfiguration zur `wails.json` hinzugefügt werden:
```json ```json
"frontend:dev:watcher": "yarn start", "frontend:dev:watcher": "yarn start",
"frontend:dev:serverUrl": "http://localhost:3000", "frontend:dev:serverUrl": "http://localhost:3000",
``` ```
The `frontend:dev:watcher` command will start the Create-React-App development server (hosted on port `3000` typically). The `frontend:dev:serverUrl` command then instructs Wails to serve assets from the development server when loading the frontend rather than from the build folder. In addition to the above, the `index.html` needs to be updated with the following: Der `frontend:dev:watcher` Befehl startet den Create-React-App Entwicklungsserver (typischerweise auf Port `3000` gehostet). Der Befehl `frontend:dev:serverUrl` weist Wails dann an, beim Laden des Frontends Assets vom Entwicklungsserver zu verwenden, anstatt aus dem Build-Ordner. Zusätzlich zu den oben genannten Schritten muss die `index.html` mit folgendem aktualisiert werden:
```html ```html
<head> <head>
@ -266,8 +266,8 @@ The `frontend:dev:watcher` command will start the Create-React-App development s
</head> </head>
``` ```
This is required as the watcher command that rebuilds the frontend prevents Wails from injecting the required scripts. This circumvents that issue by ensuring the scripts are always injected. With this configuration, `wails dev` can be run which will appropriately build the frontend and backend with hot-reloading enabled. Additionally, when accessing the application from a browser the React developer tools can now be used on a non-minified version of the application for straightforward debugging. Finally, for faster builds, `wails dev -s` can be run to skip the default building of the frontend by Wails as this is an unnecessary step. Dies wird benötigt, da der Watcher-Befehl, der das Frontend neu aufbaut, Wails daran hindert, die benötigten Skripte zu injizieren. Dies umgeht diese Fehlermeldung, indem sichergestellt wird, dass die Skripte immer injiziert werden. Mit dieser Konfiguration kann `wails dev` ausgeführt werden, wodurch Frontend und Backend mit aktiviertem Hot-Reloading entsprechend erstellt werden. Zusätzlich beim Zugriff auf die Anwendung von einem Browser aus können die React Entwicklerwerkzeuge jetzt auf einer nicht minifizierten Version der Anwendung für einfaches Debuggen verwendet werden. Schließlich kann zur Beschleunigung der Builds `wails dev -s` ausgeführt werden, um den standardmäßigen Build des Frontends durch Wails zu überspringen, da dies ein unnötiger Schritt ist.
## Go Module ## Go Module
The default Wails templates generate a `go.mod` file that contains the module name "changeme". You should change this to something more appropriate after project generation. Die Standard-Wails Vorlagen erzeugen eine `go.mod` Datei, die den Modulnamen "changeme" enthält. Du solltest dies nach der Projekterstellung in etwas passenderes ändern.

View file

@ -1,14 +1,14 @@
# Crossplatform build with Github Actions # Crossplatform build mit Github Actions
To build a Wails project for all the available platforms, you need to create an application build for each operating system. One effective method to achieve this is by utilizing GitHub Actions. Um ein Wails Projekt für alle verfügbaren Plattformen zu erstellen, muss für jedes Betriebssystem eine Applikation erstellt werden. Eine effektive Methode, um dies zu erreichen, ist die Verwendung von GitHub Actions.
An action that facilitates building a Wails app is available at: Eine Aktion, die das Erstellen einer Wails App erleichtert, ist verfügbar unter:
https://github.com/dAppServer/wails-build-action https://github.com/dAppServer/wails-build-action
In case the existing action doesn't fulfill your requirements, you can select only the necessary steps from the source: Falls die bestehende Aktion die Anforderungen nicht erfüllt, können nur die notwendigen Schritte aus der Quelle ausgewählt werden:
https://github.com/dAppServer/wails-build-action/blob/main/action.yml https://github.com/dAppServer/wails-build-action/blob/main/action.yml
Below is a comprehensive example that demonstrates building an app upon the creation of a new Git tag and subsequently uploading it to the Actions artifacts: Nachfolgend findest du ein umfassendes Beispiel, das die Erstellung einer App nach der Erstellung eines neuen Git-Tags und das anschließende Hochladen in die Actions-Artefakte zeigt:
```yaml ```yaml
name: Wails build name: Wails build
@ -57,10 +57,10 @@ jobs:
go-version: '1.20' go-version: '1.20'
``` ```
This example offers opportunities for various enhancements, including: Dieses Beispiel bietet Möglichkeiten für verschiedene Verbesserungen, unter anderem:
- Caching dependencies - Cache-Abhängigkeiten
- Code signing - Code-Signierung
- Uploading to platforms like S3, Supabase, etc. - Hochladen auf Plattformen wie S3, Supabase, etc.
- Injecting secrets as environment variables - Secrets als Umgebungsvariablen einfügen
- Utilizing environment variables as build variables (such as version variable extracted from the current Git tag) - Verwendung von Umgebungsvariablen als Build-Variablen (wie zum Beispiel aus dem aktuellen Git-Tag extrahierte Versionsvariablen)

View file

@ -1,15 +1,14 @@
# Custom Protocol Scheme association # Benutzerdefinierte Protokollschema-Zuordnung
Custom Protocols feature allows you to associate specific custom protocol with your app so that when users open links with this protocol, Die benutzerdefinierte Protokoll-Funktion erlaubt es dir, spezifische benutzerdefinierte Protokolle mit deiner App zu verknüpfen, sodass, wenn Benutzer Links mit diesem Protokoll öffnen, die App gestartet wird. Dies kann besonders nützlich sein, um die Desktop-App mit der Web-App zu verbinden.
your app is launched to handle them. This can be particularly useful to connect your desktop app with your web app. In dieser Anleitung werden wir die Schritte durchgehen, um benutzerdefinierte Protokolle in Wails App zu implementieren.
In this guide, we'll walk through the steps to implement custom protocols in Wails app.
## Set Up Custom Protocol Schemes Association: ## Benutzerdefinierte Protokollschema-Zuordnung einrichten:
To set up custom protocol, you need to modify your application's wails.json file. Um ein benutzerdefiniertes Protokoll einzurichten, muss die wails.json Datei der Anwendung angepasst werden.
In "info" section add a "protocols" section specifying the protocols your app should be associated with. Füge im Abschnitt "info" einen Abschnitt mit dem Namen "protocols" hinzu, in diesem werden die Protokolle angegeben, die mit der App verknüpft werden sollen.
For example: Zum Beispiel:
```json ```json
{ {
@ -25,17 +24,17 @@ For example:
} }
``` ```
| Property | Description | | Eigenschaft | Beschreibung |
| :---------- | :------------------------------------------------------------------------------------ | | :------------- | :-------------------------------------------------------------------------------------------------- |
| scheme | Custom Protocol scheme. e.g. myapp | | scheme | Benutzerdefiniertes Protokollschema. z. B. myapp |
| description | Windows-only. The description. | | description | Nur für Windows. Beschreibung. |
| role | macOS-only. The apps role with respect to the type. Corresponds to CFBundleTypeRole. | | role | Nur für macOS. Die Rolle der App in Bezug auf den Typ. Entspricht CFBundleTypeRoll. |
## Platform Specifics: ## Plattformspezifisches:
### macOS ### macOS
When you open custom protocol with your app, the system will launch your app and call the `OnUrlOpen` function in your Wails app. Example: Wenn du ein benutzerdefiniertes Protokoll mit deiner App öffnest, wird das System deine App starten und die "OnUrlOpen"-Funktion in deiner Wails App aufrufen. Beispiel:
```go title="main.go" ```go title="main.go"
func main() { func main() {
@ -64,9 +63,8 @@ func main() {
### Windows ### Windows
On Windows Custom Protocol Schemes is supported only with NSIS installer. During installation, the installer will create a Auf Windows werden benutzerdefinierte Protokollschma nur mit NSIS Installer unterstützt. Während der Installation wird der Installer einen
registry entry for your schemes. When you open url with your app, new instance of app is launched and url is passed Registrierungseintrag für dein Schema erstellen. Wenn eine Url mit der App geöffnet wird, wird eine neue Instanz der App gestartet und die Url als Argument an deine App zu übergeben. Um dies zu verarbeiten, solltest du Kommandozeilenargumente in der App parsen. Beispiel:
as argument to your app. To handle this you should parse command line arguments in your app. Example:
```go title="main.go" ```go title="main.go"
func main() { func main() {
@ -78,8 +76,8 @@ func main() {
} }
``` ```
You also can enable single instance lock for your app. In this case, when you open url with your app, new instance of app is not launched Du kannst auch einzelne Instanzsperren für deine App aktivieren. In diesem Fall, wenn die Url mit deiner App geöffnet wird, wird eine neue Instanz der App nicht gestartet
and arguments are passed to already running instance. Check single instance lock guide for details. Example: und Argumente werden an bereits laufende Instanz übergeben. Überprüfe die Einzelinstanz-Sperren Anleitung für Details. Beispiel:
```go title="main.go" ```go title="main.go"
func main() { func main() {
@ -105,11 +103,11 @@ func main() {
### Linux ### Linux
Currently, Wails doesn't support bundling for Linux. So, you need to create file associations manually. Derzeit unterstützt Wails kein Bundling für Linux. Dateiassoziationen müssen dem nach manuell erstellt werden.
For example if you distribute your app as a .deb package, you can create file associations by adding required files in you bundle. Zum Beispiel, wenn du deine App als .deb-Paket verteilst, können Datei-Assoziationen erstellt werden, indem du benötigte Dateien in deinem Bundle hinzufügst.
You can use [nfpm](https://nfpm.goreleaser.com/) to create .deb package for your app. Du kannst [nfpm](https://nfpm.goreleaser.com/) verwenden, um .deb-Paket für deine App zu erstellen.
1. Create a .desktop file for your app and specify file associations there (note that `%u` is important in Exec). Example: 1. Erstelle eine .desktop Datei für deine App und gib dort Dateizuordnungen an (beachte, dass `%u` wichtig ist in Exec). Beispiel:
```ini ```ini
[Desktop Entry] [Desktop Entry]
@ -122,14 +120,14 @@ Type=Application
MimeType=x-scheme-handler/myapp; MimeType=x-scheme-handler/myapp;
``` ```
2. Prepare postInstall/postRemove scripts for your package. Example: 2. Bereite PostInstall/PostRemove Skripte für dein Paket vor. Beispiel:
```sh ```sh
# reload desktop database to load app in list of available # reload desktop database to load app in list of available
update-desktop-database /usr/share/applications update-desktop-database /usr/s
``` ```
3. Configure nfpm to use your scripts and files. Example: 3. Konfiguriere nfpm, um deine Skripte und Dateien zu verwenden. Beispiel:
```yaml ```yaml
name: "wails-open-file" name: "wails-open-file"
@ -158,15 +156,14 @@ scripts:
postremove: ./postRemove.sh postremove: ./postRemove.sh
``` ```
6. Build your .deb package using nfpm: 6. Erstellen dein .deb-Paket mit nfpm:
```sh ```sh
nfpm pkg --packager deb --target . nfpm pkg --packager deb --target .
``` ```
7. Now when your package is installed, your app will be associated with custom protocol scheme. When you open url with your app, 7. Wenn dein Paket nun installiert ist, wird deine App mit dem benutzerdefiniertem Protokollschema verknüpft. Wenn eine Url mit der App geöffnet wird, wird eine neue Instanz der App gestartet und der Dateipfad wird als Argument an deine App übergeben.
new instance of app is launched and file path is passed as argument to your app. Um dies zu verarbeiten, solltest du Kommandozeilenargumente in der App parsen. Beispiel:
To handle this you should parse command line arguments in your app. Example:
```go title="main.go" ```go title="main.go"
func main() { func main() {
@ -178,8 +175,8 @@ func main() {
} }
``` ```
You also can enable single instance lock for your app. In this case, when you open url with your app, new instance of app is not launched Du kannst auch einzelne Instanzsperren für deine App aktivieren. In diesem Fall, wenn die Url mit deiner App geöffnet wird, wird eine neue Instanz der App nicht gestartet
and arguments are passed to already running instance. Check single instance lock guide for details. Example: und Argumente werden an bereits laufende Instanz übergeben. Überprüfe die Einzelinstanz-Sperren Anleitung für Details. Beispiel:
```go title="main.go" ```go title="main.go"
func main() { func main() {

View file

@ -1,18 +1,18 @@
# Dynamic Assets # Dynamische Assets
:::info :::info
This does not work with vite v5.0.0+ and wails v2 due to changes in vite. Changes are planned in v3 to support similar functionality under vite v5.0.0+. If you need this feature, stay with vite v4.0.0+. See [issue 3240](https://github.com/wailsapp/wails/issues/3240) for details Diese Funktion funktioniert nicht mit vite v5.0.0+ und wails v2 aufgrund von Veränderungen in vite. Änderungen sind in v3 geplant, um ähnliche Funktionen unter v5.0.0+ zu unterstützen. Wenn du diese Funktion benötigst, bleibe bei vite v4.0.0+. Siehe [Issue 3240](https://github.com/wailsapp/wails/issues/3240) für Details
::: :::
If you want to load or generate assets for your frontend dynamically, you can achieve that using the [AssetsHandler](../reference/options#assetshandler) option. The AssetsHandler is a generic `http.Handler` which will be called for any non GET request on the assets server and for GET requests which can not be served from the bundled assets because the file is not found. Wenn Dateien für dein Frontend dynamisch geladen oder erzeugt werden sollen, kann das mit der [AssetsHandler](../reference/options#assetshandler) Option erreicht werden. Der AssetsHandler ist ein generischer `http.Handler`, der für alle Nicht-GET-Anfragen an den Asset-Server und für GET-Anfragen aufgerufen wird, die nicht aus den gebündelten Assets bedient werden können, weil die Datei nicht gefunden wird.
By installing a custom AssetsHandler, you can serve your own assets using a custom asset server. Durch die Installation eines benutzerdefinierten AssetsHandlers können eigene Assets über einen eigenen Asset-Server geserved werden.
## Example ## Beispiel
In our example project, we will create a simple assets handler which will load files off disk: In unserem Beispielprojekt werden wir einen einfachen Asset-Handler erstellen, der Dateien von der Festplatte lädt:
```go title=main.go {17-36,49} ```go title=main.go {17-36,49}
package main package main
@ -78,7 +78,7 @@ func main() {
} }
``` ```
When we run the application in dev mode using `wails dev`, we will see the following output: Wenn wir die Anwendung im Dev-Modus mit `wails dev`ausführen, sehen wir die folgende Ausgabe:
``` ```
DEB | [ExternalAssetHandler] Loading 'http://localhost:3001/favicon.ico' DEB | [ExternalAssetHandler] Loading 'http://localhost:3001/favicon.ico'
@ -86,15 +86,15 @@ DEB | [ExternalAssetHandler] Loading 'http://localhost:3001/favicon.ico' failed,
Requesting file: favicon.ico Requesting file: favicon.ico
``` ```
As you can see, the assets handler is called when the default assets server is unable to serve the `favicon.ico` file. Wie man sehen kann, wird der Asset-Handler aufgerufen, wenn der Standard-Asset-Server nicht in der Lage ist, die `favicon.ico` Datei zu serven.
If you right click the main application and select "inspect" to bring up the devtools, you can test this feature out by typing the following into the console: Um diese Funktion zu testen kannst du in der Hauptanwendung mit der rechten Maustaste "inspect" auswählen, um die devtools hervorzubringen. In die Konsole muss nun folgendes eingegeben werden:
``` ```
let response = await fetch('does-not-exist.txt'); let response = await fetch('does-not-exist.txt');
``` ```
This will generate an error in the devtools. We can see that the error is what we expect, returned by our custom assets handler: Das wird einen Fehler in den devtools erzeugen. Wir können sehen, dass der Fehler ist, was wir erwarten, von unserem benutzerdefinierten Asset-Handler:
```mdx-code-block ```mdx-code-block
<p className="text--center"> <p className="text--center">
@ -104,7 +104,7 @@ This will generate an error in the devtools. We can see that the error is what w
</p> </p>
``` ```
However, if we request `go.mod`, we will see the following output: Wenn wir jedoch `go.mod`anfordern, sehen wir die folgende Ausgabe:
```mdx-code-block ```mdx-code-block
<p className="text--center"> <p className="text--center">
@ -112,19 +112,19 @@ However, if we request `go.mod`, we will see the following output:
</p> </p>
``` ```
This technique can be used to load images directly into the page. If we updated our default vanilla template and replaced the logo image: Diese Technik kann benutzt werden, um Bilder direkt in die Seite zu laden. Wenn wir unsere Standardvorlage für Vanilla aktualisiert haben und das Logobild:
```html ```html
<img id="logo" class="logo" /> <img id="logo" class="logo" />
``` ```
with: mit folgendem ersetzen:
```html ```html
<img src="build/appicon.png" style="width: 300px" /> <img src="build/appicon.png" style="width: 300px" />
``` ```
Then we would see the following: Dann sollten wir folgendes sehen:
```mdx-code-block ```mdx-code-block
<p className="text--center"> <p className="text--center">
@ -137,6 +137,6 @@ Then we would see the following:
:::warning :::warning
Exposing your filesystem in this way is a security risk. It is recommended that you properly manage access to your filesystem. Das Exposen des Dateisystems auf diese Art ist ein Sicherheitsrisiko. Es wird empfohlen, dass der Zugriff auf das Dateisystem korrekt verwaltet wird.
::: :::

View file

@ -1,15 +1,13 @@
# File Association # Dateizuordnung
File association feature allows you to associate specific file types with your app so that when users open those files, Die Funktion zur Dateizuordnung ermöglicht es dir, bestimmte Dateitypen mit deiner App zu verknüpfen, sodass die App gestartet wird, wenn Benutzer diese Dateien öffnen. Dies kann besonders nützlich für Texteditoren, Bild Viewer oder beliebige Anwendungen sein, die mit spezifischen Dateiformaten arbeiten. In dieser Anleitung werden wir die Schritte zur Implementierung von Datei-Assoziationen in Wails App durchlaufen.
your app is launched to handle them. This can be particularly useful for text editors, image viewers, or any application
that works with specific file formats. In this guide, we'll walk through the steps to implement file association in Wails app.
## Set Up File Association: ## Dateizuordnung einrichten:
To set up file association, you need to modify your application's wails.json file. Um eine Datei-Assoziation einzurichten, muss die wails.json Datei der Anwendung angepasst werden.
In "info" section add a "fileAssociations" section specifying the file types your app should be associated with. Füge im Abschnitt "info" einen Abschnitt mit dem Namen "fileAssociations" hinzu, in diesem werden die Dateien angegeben, die mit der App verknüpft werden sollen.
For example: Zum Beispiel:
```json ```json
{ {
@ -34,19 +32,19 @@ For example:
} }
``` ```
| Property | Description | | Eigenschaft | Beschreibung |
| :---------- | :------------------------------------------------------------------------------------------------------------------------------------------------- | | :------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ext | The extension (minus the leading period). e.g. png | | ext | Die Dateiendung (ohne den Punkt). e.g. png |
| name | The name. e.g. PNG File | | name | Der Name. z.B. PNG Datei |
| iconName | The icon name without extension. Icons should be located in build folder. Proper icons will be generated from .png file for both macOS and Windows | | iconName | Der Symbolname ohne Erweiterung. Icons sollten sich im Build-Ordner befinden. Richtige Icons werden aus der .png-Datei sowohl für macOS als auch für Windows generiert |
| description | Windows-only. The description. It is displayed on the `Type` column on Windows Explorer. | | description | Nur für Windows. Die Beschreibung. Es wird in der Spalte `Type` im Windows Explorer angezeigt. |
| role | macOS-only. The apps role with respect to the type. Corresponds to CFBundleTypeRole. | | role | Nur für macOS. Die Rolle der App in Bezug auf den Typ. Entspricht CFBundleTypeRoll. |
## Platform Specifics: ## Plattformspezifisches:
### macOS ### macOS
When you open file (or files) with your app, the system will launch your app and call the `OnFileOpen` function in your Wails app. Example: Wenn du die Datei (oder Dateien) mit deiner App öffnest, startet das System deine App und ruft die "OnFileOpen"-Funktion in deiner Wails App auf. Beispiel:
```go title="main.go" ```go title="main.go"
func main() { func main() {
@ -75,9 +73,7 @@ func main() {
### Windows ### Windows
On Windows file association is supported only with NSIS installer. During installation, the installer will create a Unter Windows wird die Verknüpfung nur mit dem NSIS Installer unterstützt. Während der Installation wird der Installer einen Registrierungseintrag für deine Datei-Assoziation erstellen. Wenn eine Datei mit deiner App geöffnet wird, wird eine neue Instanz der App gestartet und der Dateipfad wird als Argument an deine App übergeben. Um dies zu verarbeiten, solltest du Kommandozeilenargumente in der App parsen. Beispiel:
registry entry for your file associations. When you open file with your app, new instance of app is launched and file path is passed
as argument to your app. To handle this you should parse command line arguments in your app. Example:
```go title="main.go" ```go title="main.go"
func main() { func main() {
@ -89,8 +85,7 @@ func main() {
} }
``` ```
You also can enable single instance lock for your app. In this case, when you open file with your app, new instance of app is not launched Du kannst auch Einzel-Instanzsperren für deine App aktivieren. In diesem Fall, wird, wenn die Datei mit deiner App geöffnet wird, keine neue Instanz der App gestartet und Argumente werden an die bereits laufende Instanz übergeben. Überprüfe die Einzel-Instanz sperren Anleitung für Details. Beispiel:
and arguments are passed to already running instance. Check single instance lock guide for details. Example:
```go title="main.go" ```go title="main.go"
func main() { func main() {
@ -116,11 +111,11 @@ func main() {
### Linux ### Linux
Currently, Wails doesn't support bundling for Linux. So, you need to create file associations manually. Derzeit unterstützt Wails kein Bundling für Linux. Dateiassoziationen müssen dem nach manuell erstellt werden.
For example if you distribute your app as a .deb package, you can create file associations by adding required files in you bundle. Zum Beispiel, wenn du deine App als .deb-Paket verteilst, können Datei-Assoziationen erstellt werden, indem du benötigte Dateien in deinem Bundle hinzufügst.
You can use [nfpm](https://nfpm.goreleaser.com/) to create .deb package for your app. Du kannst [nfpm](https://nfpm.goreleaser.com/) verwenden, um .deb-Paket für deine App zu erstellen.
1. Create a .desktop file for your app and specify file associations there. Example: 1. Erstelle eine .desktop Datei für deine App und gib dort die Datei-Assoziationen an. Beispiel:
```ini ```ini
[Desktop Entry] [Desktop Entry]
@ -133,7 +128,7 @@ Type=Application
MimeType=application/x-wails;application/x-test MimeType=application/x-wails;application/x-test
``` ```
2. Create mime types file. Example: 2. Erstelle eine Datei für Mime-Typen. Beispiel:
```xml ```xml
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
@ -145,19 +140,19 @@ MimeType=application/x-wails;application/x-test
</mime-info> </mime-info>
``` ```
3. Create icons for your file types. SVG icons are recommended. 3. Erstelle Icons für deine Dateitypen. SVG-Icons werden empfohlen.
4. Prepare postInstall/postRemove scripts for your package. Example: 4. Bereite PostInstall/PostRemove Skripte für dein Paket vor. Beispiel:
```sh ```sh
# reload mime types to register file associations # Mime-Typen neu laden, um Dateizuordnungen zu registrieren
update-mime-database /usr/share/mime update-mime-database /usr/share/mime
# reload desktop database to load app in list of available # Desktop-Datenbank neu laden, um die App in der Liste der verfügbaren Apps anzuzeigen.
update-desktop-database /usr/share/applications update-desktop-database /usr/share/applications
# update icons # Icons aktualisieren
update-icon-caches /usr/share/icons/* update-icon-caches /usr/share/icons/*
``` ```
5. Configure nfpm to use your scripts and files. Example: 5. Konfiguriere nfpm, um deine Skripte und Dateien zu verwenden. Beispiel:
```yaml ```yaml
name: "wails-open-file" name: "wails-open-file"
@ -186,7 +181,7 @@ contents:
dst: /usr/share/icons/hicolor/scalable/mimetypes/application-x-wails.svg dst: /usr/share/icons/hicolor/scalable/mimetypes/application-x-wails.svg
- src: ../testFileIcon.svg - src: ../testFileIcon.svg
dst: /usr/share/icons/hicolor/scalable/mimetypes/application-x-test.svg dst: /usr/share/icons/hicolor/scalable/mimetypes/application-x-test.svg
# copy icons to Yaru theme as well. For some reason Ubuntu didn't pick up fileicons from hicolor theme # Kopiere Symbole auch in das Yaru-Theme. Aus irgendeinem Grund hat Ubuntu die Datei-Icons aus dem hicolor-Theme nicht übernommen.
- src: ../appicon.svg - src: ../appicon.svg
dst: /usr/share/icons/Yaru/scalable/apps/wails-open-file.svg dst: /usr/share/icons/Yaru/scalable/apps/wails-open-file.svg
- src: ../wailsFileIcon.svg - src: ../wailsFileIcon.svg
@ -198,15 +193,14 @@ scripts:
postremove: ./postRemove.sh postremove: ./postRemove.sh
``` ```
6. Build your .deb package using nfpm: 6. Erstelle dein .deb-Paket mit nfpm:
```sh ```sh
nfpm pkg --packager deb --target . nfpm pkg --packager deb --target .
``` ```
7. Now when your package is installed, your app will be associated with specified file types. When you open file with your app, 7. Nachdem dein Paket installiert ist, wird deine App den angegebenen Dateitypen zugeordnet. Wenn eine Datei mit deiner App geöffnet wird, wird eine neue Instanz der App gestartet und der Dateipfad wird als Argument an deine App übergeben.
new instance of app is launched and file path is passed as argument to your app. Um dies zu verarbeiten, solltest du Kommandozeilenargumente in der App parsen. Beispiel:
To handle this you should parse command line arguments in your app. Example:
```go title="main.go" ```go title="main.go"
func main() { func main() {
@ -218,8 +212,7 @@ func main() {
} }
``` ```
You also can enable single instance lock for your app. In this case, when you open file with your app, new instance of app is not launched Du kannst auch Einzel-Instanzsperren für deine App aktivieren. In diesem Fall, wird, wenn die Datei mit deiner App geöffnet wird, keine neue Instanz der App gestartet und Argumente werden an die bereits laufende Instanz übergeben. Überprüfe die Einzel-Instanz sperren Anleitung für Details. Beispiel:
and arguments are passed to already running instance. Check single instance lock guide for details. Example:
```go title="main.go" ```go title="main.go"
func main() { func main() {

View file

@ -1,8 +1,8 @@
# Frameless Applications # Rahmenlose Anwendungen
Wails supports application that have no frames. This can be achieved by using the [frameless](../reference/options.mdx#frameless) field in [Application Options](../reference/options.mdx#application-options). Wails unterstützt Anwendungen, die keine Rahmen haben. Dies kann über das Feld [frameless](../reference/options.mdx#frameless) in den [Anwendungsoptionen](../reference/options.mdx#application-options) erreicht werden.
Wails offers a simple solution for dragging the window: Any HTML element that has the CSS style `--wails-draggable:drag` will act as a "drag handle". This property applies to all child elements. If you need to indicate that a nested element should not drag, then use the attribute '--wails-draggable:no-drag' on that element. Wails bietet eine einfache Lösung zum Ziehen des Fensters: Jedes HTML-Element, das den CSS-Stil `--wails-draggable:drag` besitzt, fungiert als "Ziehpunkt". Diese Eigenschaft gilt für alle untergeordneten Elemente. Wenn du angeben musst, dass ein verschachteltes Element nicht ziehbar sein soll, dann verwende das Attribut '--wails-draggable:no-drag' auf diesem Element.
```html ```html
<html> <html>
@ -23,7 +23,7 @@ Wails offers a simple solution for dragging the window: Any HTML element that ha
</html> </html>
``` ```
For some projects, using a CSS variable may not be possible due to dynamic styling. In this case, you can use the `CSSDragProperty` and `CSSDragValue` application options to define a property and value that will be used to indicate draggable regions: Bei einigen Projekten ist die Verwendung einer CSS-Variable aufgrund des dynamischen Stylings möglicherweise nicht möglich. In diesem Fall kann die Anwendungsoptionen `CSSDragProperty` und `CSSDragValue` verwendet werden, um eine Eigenschaft und einen Wert zu definieren, der zur Angabe von ziehbaren Regionen verwendet wird:
```go title=main.go ```go title=main.go
package main package main
@ -80,8 +80,8 @@ func main() {
</html> </html>
``` ```
:::info Fullscreen :info Vollbildmodus
If you allow your application to go fullscreen, this drag functionality will be disabled. Wenn zugelassen wird, dass die Anwendung im Vollbildmodus geöffnet wird, wird diese Funktion deaktiviert.
::: :::

View file

@ -1,10 +1,10 @@
# Frontend # Frontend
## Script Injection ## Skript-Injektion
When Wails serves your `index.html`, by default, it will inject 2 script entries into the `<body>` tag to load `/wails/ipc.js` and `/wails/runtime.js`. These files install the bindings and runtime respectively. Wenn Wails die `index.html` served, werden standardmäßig zwei Skript-Einträge in die `<body>` tags eingefügt, um `/wails/ipc.js` und `/wails/runtime.js` zu laden. Diese Dateien installieren die Verknüpfungen bzw. die Laufzeit.
The code below shows where these are injected by default: Der folgende Code zeigt an, wo diese standardmäßig injiziert werden:
```html ```html
<html> <html>
@ -28,25 +28,25 @@ The code below shows where these are injected by default:
</html> </html>
``` ```
### Overriding Default Script Injection ### Standardskript-Injektion überschreiben
To provide more flexibility to developers, there is a meta tag that may be used to customise this behaviour: Um den Entwicklern mehr Flexibilität zu bieten, gibt es einen Meta-Tag, der verwendet werden kann, um dieses Verhalten anzupassen:
```html ```html
<meta name="wails-options" content="[options]" /> <meta name="wails-options" content="[options]" />
``` ```
The options are as follows: Die Optionen sind folgende:
| Value | Description | | Wert | Beschreibung |
| ------------------- | ------------------------------------------------ | | ------------------- | ------------------------------------------------------------------ |
| noautoinjectruntime | Disable the autoinjection of `/wails/runtime.js` | | noautoinjectruntime | Deaktiviert die automatische Injektion von der `/wails/runtime.js` |
| noautoinjectipc | Disable the autoinjection of `/wails/ipc.js` | | noautoinjectipc | Deaktiviert die automatische Injektion von der `/wails/ipc.js` |
| noautoinject | Disable all autoinjection of scripts | | noautoinject | Deaktiviert die automatische Injektion von allen Skripts |
Multiple options may be used provided they are comma separated. Mehrere Optionen können verwendet werden, sofern sie durch Kommata getrennt werden.
This code is perfectly valid and operates the same as the autoinjection version: Dieser Code ist vollkommen gültig und funktioniert genauso wie die autoinjection Version:
```html ```html
<html> <html>

View file

@ -1,8 +1,8 @@
# IDEs # IDEs
Wails aims to provide a great development experience. To that aim, we now support generating IDE specific configuration to provide smoother project setup. Wails versucht eine gute Entwicklungserfahrung zu bieten. Zu diesem Zweck unterstützen wir die Erstellung einer IDE-spezifischen Konfiguration, um eine reibungslose Projekteinstellung zu ermöglichen.
Currently, we support [Visual Studio Code](https://code.visualstudio.com/) and [Goland](https://www.jetbrains.com/go/). Derzeit unterstützen wir [Visual Studio Code](https://code.visualstudio.com/) und [Goland](https://www.jetbrains.com/go/).
## Visual Studio Code ## Visual Studio Code
@ -15,9 +15,9 @@ Currently, we support [Visual Studio Code](https://code.visualstudio.com/) and [
</p> </p>
``` ```
When generating a project using the `-ide vscode` flags, IDE files will be created alongside the other project files. These files are placed into the `.vscode` directory and provide the correct configuration for debugging your application. Beim Generieren eines Projekts mit der `-Ide vscode` Flag werden IDE Dateien zusammen mit den anderen Projektdateien erstellt. Diese Dateien werden im Verzeichnis `.vscode` gespeichert und geben die richtige Konfiguration für das Debuggen der Anwendung an.
The 2 files generated are `tasks.json` and `launch.json`. Below are the files generated for the default vanilla project: Die 2 erzeugten Dateien sind `tasks.json` und `launch.json`. Unten sind die Dateien, die für das Standardprojekt generiert wurden:
```json title="tasks.json" ```json title="tasks.json"
{ {
@ -62,9 +62,9 @@ The 2 files generated are `tasks.json` and `launch.json`. Below are the files ge
} }
``` ```
### Configuring the install and build steps ### Installations- und Buildschritte konfigurieren
The `tasks.json` file is simple for the default project as there is no `npm install` or `npm run build` step needed. For projects that have a frontend build step, such as the svelte template, we would need to edit `tasks.json` to add the install and build steps: Die `tasks.json` Datei ist für das Standardprojekt, da kein `npm install` oder `npm build` Schritt benötigt wird. Für Projekte, die einen Frontend-Build-Schritt benötigen, wie zum Beispiel, das Svelte-Template, müssen wir `tasks.json` editieren und folgende Installations- und Build-Schritte hinzufügen:
```json title="tasks.json" ```json title="tasks.json"
{ {
@ -120,8 +120,8 @@ The `tasks.json` file is simple for the default project as there is no `npm inst
} }
``` ```
:::info Future Enhancement :::info Zukünftige Verbesserung
In the future, we hope to generate a `tasks.json` that includes the install and build steps automatically. In Zukunft hoffen wir, eine `tasks.json` zu generieren, die die Installations- und Bauschritte automatisch beinhaltet.
::: :::

View file

@ -1,8 +1,8 @@
# Linux Distro Support # Linux Distro Unterstützung
## Overview ## Übersicht
Wails offers Linux support but providing installation instructions for all available distributions is an impossible task. Instead, Wails tries to determine if the packages you need to develop applications are available via your system's package manager. Currently, we support the following package managers: Wails bietet Linux-Unterstützung an, aber die Installationsanleitung für alle verfügbaren Distributionen ist eine unmögliche Aufgabe. Stattdessen versucht Wails herauszufinden, ob die Pakete, die zur Entwicklung von Anwendungen benötigt werden, über den System Paketmanager verfügbar sind. Zur Zeit unterstützen wir die folgenden Paketmanager:
- apt - apt
- dnf - dnf
@ -12,11 +12,11 @@ Wails offers Linux support but providing installation instructions for all avail
- pacman - pacman
- zypper - zypper
## Adding package names ## Paketnamen hinzufügen
There may be circumstances where your distro uses one of the supported package managers but the package name is different. For example, you may use an Ubuntu derivative, but the package name for gtk may be different. Wails attempts to find the correct package by iterating through a list of package names. The list of packages are stored in the packagemanager specific file in the `v2/internal/system/packagemanager` directory. In our example, this would be `v2/internal/system/packagemanager/apt.go`. Es kann Situationen geben, in denen die Distribution einen der unterstützten Paketmanager verwendet, jedoch der Paketname ein anderer ist. Zum Beispiel kannst du eine Ubuntu-Ableitung verwenden, aber der Paketname für gtk kann anders sein. Wails versucht das richtige Paket zu finden, indem es durch eine Liste von Paketnamen iteriert. Die Liste der Pakete wird im Verzeichnis `v2/internal/system/packagemanager` gespeichert. In unserem Beispiel wäre dies `v2/internal/system/packagemanager/apt.go`.
In this file, the list of packages are defined by the `Packages()` method: In dieser Datei wird die Liste der Pakete durch die `Packages()` Methode definiert:
```go ```go
func (a *Apt) Packages() packagemap { func (a *Apt) Packages() packagemap {
@ -43,7 +43,7 @@ func (a *Apt) Packages() packagemap {
} }
``` ```
Let's assume that in our linux distro, `libgtk-3` is packaged under the name `lib-gtk3-dev`. We could add support for this by adding the following line: Nehmen wir an, dass `libgtk-3` in unserer Linux-Distribution unter dem Namen `lib-gtk3-dev` paketiert ist. Wir könnten die Unterstützung dafür hinzufügen, indem wir die folgende Zeile hinzufügen:
```go {5} ```go {5}
func (a *Apt) Packages() packagemap { func (a *Apt) Packages() packagemap {
@ -71,12 +71,12 @@ func (a *Apt) Packages() packagemap {
} }
``` ```
## Adding new package managers ## Neue Paketmanager hinzufügen
To add a new package manager, perform the following steps: Um einen neuen Paketmanager hinzuzufügen, führe folgende Schritte durch:
- Create a new file in `v2/internal/system/packagemanager` called `<pm>.go`, where `<pm>` is the name of the package manager. - Erstelle eine neue Datei in `v2/internal/system/packagemanager` mit dem Namen `<pm>.go`, wobei `<pm>` der Name des Paketmanagers ist.
- Define a struct that conforms to the package manager interface defined in `pm.go`: - Definiere ein Struct, das mit der Paketmanager-Schnittstelle übereinstimmt, die in `pm.go` definiert ist:
```go ```go
type PackageManager interface { type PackageManager interface {
@ -88,16 +88,16 @@ type PackageManager interface {
} }
``` ```
- `Name()` should return the name of the package manager - `Name()` sollte den Namen des Paket-Managers zurückgeben
- `Packages()` should return a `packagemap`, that provides candidate filenames for dependencies - `Packages()` sollte eine `packagemap`zurückgeben, die Kandidaten-Dateinamen für Abhängigkeiten zur Verfügung stellt
- `PackageInstalled()` should return `true` if the given package is installed - `PackageInstalled()` sollte `true` zurückgeben, wenn das angegebene Paket installiert ist
- `PackageAvailable()` should return `true` if the given package is not installed but available for installation - `PackageAvailable()` sollte `true` zurückgeben, wenn das angegebene Paket nicht installiert ist, aber für die Installation verfügbar ist
- `InstallCommand()` should return the exact command to install the given package name - `InstallCommand()` sollte den exakten Befehl zurückgeben, um den angegebenen Paketnamen zu installieren
Take a look at the other package managers code to get an idea how this works. Werfe einen Blick auf den Code der anderen Paketmanager, um eine Vorstellung davon zu bekommen, wie es funktioniert.
:::info Remember :::info Merke dir
If you add support for a new package manager, don't forget to also update this page! Wenn du die Unterstützung für einen neuen Paketmanager hinzufügst, vergiss nicht, auch diese Seite zu aktualisieren!
::: :::

View file

@ -1,10 +1,10 @@
# Linux # Linux
This page has miscellaneous guides related to developing Wails applications for Linux. Diese Seite enthält verschiedene Anleitungen zur Entwicklung von Wails Anwendungen für Linux.
## Video tag doesn't fire "ended" event ## Der Video-Tag löst nicht das "ended" Event aus
When using a video tag, the "ended" event is not fired when the video is finished playing. This is a bug in WebkitGTK, however you can use the following workaround to fix it: Wenn ein Video-Tag verwendet wird, wird das "ended" Event nicht ausgelöst, wenn das Video beendet ist. Dies ist ein Fehler in WebkitGTK, aber du kannst den folgenden Workaround verwenden, um diesen zu beheben:
```js ```js
videoTag.addEventListener("timeupdate", (event) => { videoTag.addEventListener("timeupdate", (event) => {
@ -15,19 +15,19 @@ videoTag.addEventListener("timeupdate", (event) => {
}); });
``` ```
Source: [Lyimmi](https://github.com/Lyimmi) on the [discussions board](https://github.com/wailsapp/wails/issues/1729#issuecomment-1212291275) Quelle: [Lyimmi](https://github.com/Lyimmi) auf dem [Diskussion Board](https://github.com/wailsapp/wails/issues/1729#issuecomment-1212291275)
## GStreamer error when using Audio or Video elements ## GStreamer-Fehler bei Verwendung von Audio- oder Videoelementen
If you are seeing the following error when including `<Audio>` or `<Video>` elements on Linux, you may need to install `gst-plugins-good`. Wenn der folgende Fehler beim Einfügen von `<Audio>` oder `<Video>` Elementen unter Linux erscheint, muss unter Umständen `gst-plugins-good` installiert werden.
``` ```
GStreamer element autoaudiosink not found. Please install it GStreamer element autoaudiosink not found. Please install it
``` ```
### Installing ### Installieren
Run the following distro relevant install command: Führe den folgenden distro relevanten Installationsbefehl aus:
```mdx-code-block ```mdx-code-block
import Tabs from "@theme/Tabs"; import Tabs from "@theme/Tabs";
@ -59,12 +59,12 @@ import TabItem from "@theme/TabItem";
</Tabs> </Tabs>
``` ```
If the added package does not resolve the issue, additional GStreamer dependencies may be required. [See the GStreamer installation page for more details.](https://gstreamer.freedesktop.org/documentation/installing/on-linux.html) Wenn das hinzugefügte Paket das Problem nicht behebt, werden möglicherweise zusätzliche GStreamer-Abhängigkeiten benötigt. [Weitere Details sind auf der GStreamer Installationsseite zu finden.](https://gstreamer.freedesktop.org/documentation/installing/on-linux.html)
### Additional Notes ### Weitere Informationen
- This issue is caused by [an upstream issue with WebkitGTK](https://bugs.webkit.org/show_bug.cgi?id=146351). - Dieses Problem wird durch ein [Upstream-Problem mit WebkitGTK](https://bugs.webkit.org/show_bug.cgi?id=146351) verursacht.
- [Arch based systems](https://wiki.archlinux.org/title/Arch-based_distributions) seem to have this issue more often than other distributions. - [Arch basierte Systeme](https://wiki.archlinux.org/title/Arch-based_distributions) scheinen dieses Problem häufiger zu haben als andere Distributionen.
- This issue impacts [Tauri apps](https://tauri.app/). - Dieses Problem wirkt sich auf [Tauri Apps](https://tauri.app/) aus.
Source: [developomp](https://github.com/developomp) on the [Tauri discussion board](https://github.com/tauri-apps/tauri/issues/4642#issuecomment-1643229562). Quelle: [developomp](https://github.com/developomp) aus dem [Tauri Diskussionsforum](https://github.com/tauri-apps/tauri/issues/4642#issuecomment-1643229562).

View file

@ -1,36 +1,36 @@
# Local Development # Lokale Entwicklung
## Overview ## Übersicht
Wails is in constant development and new releases are regularly "tagged". This usually happens when all the newer code on `master` has been tested and confirmed working. If you need a bugfix or feature that has not yet made it to a release, it's possible to use the latest "bleeding edge" version using the following steps: Wails ist in ständiger Entwicklung und neue Versionen werden regelmäßig "getagged". Dies geschieht in der Regel, wenn der neuere Code auf `Master` getestet und bestätigt wurde. Wenn du einen Bugfix oder ein Feature brauchst, das es noch nicht zu einer Veröffentlichung gemacht hat, ist es möglich, die neueste Version mit den folgenden Schritten zu verwenden:
- `git clone https://github.com/wailsapp/wails` - `git clone https://github.com/wailsapp/wails`
- `cd wails/v2/cmd/wails` - `cd wails/v2/cmd/wails`
- `go install` - `go install`
NOTE: The directory that you cloned the project into will now be called "clonedir". HINWEIS: Das Verzeichnis, in das, das Projekt geklont wird, wird nun "clonedir" genannt.
The Wails CLI will now be at the very latest version. Das Wails CLI sollte jetzt auf dem neusten Stand sein.
### Updating your project ### Aktualisierung des Projektes
To update projects to use the latest version of the Wails library, update the project's `go.mod` and ensure the following line is at the bottom of the file: Um Projekte zu aktualisieren, damit die neueste Version der Wails Bibliothek verwendet wird, aktualisiere die `go.mod` Datei deines Projektes und stelle sicher, dass die folgende Zeile am unteren Ende der Datei steht:
`replace github.com/wailsapp/wails/v2 => <clonedir>` `replace github.com/wailsapp/wails/v2 => <clonedir>`
Example: Beispiel:
On Windows: `replace github.com/wailsapp/wails/v2 => C:\Users\leaan\Documents\wails-v2-beta\wails\v2` Unter Windows: `replace github.com/wailsapp/wails/v2 => C:\Users\leaan\Documents\wails-v2-beta\wails\v2`
On 'nix: `replace github.com/wailsapp/wails/v2 => /home/me/projects/wails/v2` Auf 'nix: `replace github.com/wailsapp/wails/v2 => /home/me/projects/wails/v2`
To revert to a stable version, run: Um zu einer stabilen Version zurückzukehren, führe Folgendes aus:
`go install github.com/wailsapp/wails/v2/cmd/wails@latest` `go install github.com/wailsapp/wails/v2/cmd/wails@latest`
## Testing a Branch ## Einen Branch testen
If you want to test a branch, follow the instructions above, but ensure you switch the branch you want to test before installing: Wenn du eine Branch testen möchtest, folge den obigen Anweisungen, aber stelle sicher, dass die Branch gewechselt wird, den du vor der Installation testen willst:
- `git clone https://github.com/wailsapp/wails` - `git clone https://github.com/wailsapp/wails`
- `cd wails` - `cd wails`
@ -38,11 +38,11 @@ If you want to test a branch, follow the instructions above, but ensure you swit
- `cd v2/cmd/wails` - `cd v2/cmd/wails`
- `go install` - `go install`
Make sure you [update your project](#updating-your-project) as described above. Stelle sicher, dass du [dein Projekt](#updating-your-project) aktualisierst, wie oben beschrieben.
## Testing a PR ## Testen eines PR
If you want to test a PR, follow the instructions above, but ensure you fetch the PR and switch the branch before installing. Please replace `[IDofThePR]` with the ID of the PR shown on github.com: Wenn du einen PR testen möchtest, folge den obigen Anweisungen und stelle sicher, dass du den PR ziehst, bevor du diesen installierst. Bitte ersetze `[IDofThePR]` mit der ID des PR auf github.com:
- `git clone https://github.com/wailsapp/wails` - `git clone https://github.com/wailsapp/wails`
- `cd wails` - `cd wails`
@ -52,4 +52,4 @@ If you want to test a PR, follow the instructions above, but ensure you fetch th
- `cd v2/cmd/wails` - `cd v2/cmd/wails`
- `go install` - `go install`
Make sure you [update your project](#updating-your-project) as described above. Stelle sicher, dass du [dein Projekt](#updating-your-project) aktualisierst, wie oben beschrieben.

View file

@ -1,42 +1,42 @@
# Mac App Store Guide # Mac App Store Anleitung
This page gives a brief overview of how to submit your Wails App to the Mac App Store. Diese Seite gibt einen kurzen Überblick darüber, wie du deine Wails App im Mac App Store einreichen kannst.
## Prerequisites ## Voraussetzungen
- You will need to have an Apple Developer account. Please find more information on the [Apple Developer Program](https://developer.apple.com/support/compare-memberships/) site - Ein Apple-Entwickler-Konto. Weitere Informationen findest du auf der [Apple Developer Program](https://developer.apple.com/support/compare-memberships/) Seite
- You will need to have your Certificates, Identifiers, and App created on the developer portal. More on this below - Du musst deine Zertifikate, Identifikatoren und App auf dem Entwicklerportal erstellen. Mehr dazu unten
- Xcode command line tools will need to be installed on your local machine - Xcode Kommandozeilenwerkzeuge müssen auf deinem lokalen Rechner installiert sein
#### Create Certificates and Identifiers #### Zertifikate und Identifikatoren erstellen
1. Go to your [Apple Developer Account](https://developer.apple.com/account/) 1. Gehe zu deinem [Apple Entwicklerkonto](https://developer.apple.com/account/)
2. Under `Certificates, Identifiers & Profiles`, click `Identifiers` and Register a New App ID. Use the format (com.example.app) 2. Klicken Sie unter `Zertifikate, Identifikatoren & Profile` auf ` Identifikatoren` und registriere eine neue App-ID. Benutze das Format com.example.app
3. Under the same page click `Certificates` and generate new Certificates for Mac App Store Distribution. Download them and import the certificates into Keychain on your local machine. 3. Klicke auf der gleichen Seite auf ` Zertifikate` und erzeuge neue Zertifikate für die Mac App Store Distribution. Lade das Zertifikat herunter und importiere die Zertifikate in die Keychain auf deinem lokalen Rechner.
#### Create App Submission #### Eine App Einreichung erstellen
1. Go to the [App Store Connect Site](https://appstoreconnect.apple.com/apps) 1. Gehe zur [App Store Connect Site](https://appstoreconnect.apple.com/apps)
2. Register a new application and link the bundle ID that you created in the previous step 2. Registriere eine neue Anwendung und verknüpfe die Bundle-ID, die du im vorherigen Schritt erstellt hast
3. Populate your app with the correct screen shots, descriptions, etc. as required by Apple 3. Statte deine App mit den richtigen Bildschirmaufnahmen, Beschreibungen etc. aus, so wie es Apple voraussetzt
4. Create a new version of your app 4. Erstelle eine neue Version deiner App
#### Create Provisioning Profile #### Bereitstellungsprofil erstellen
1. Go to the [Apple Developer Profiles](https://developer.apple.com/account/resources/profiles/list) page 1. Gehe zur [Apple Developer Profile](https://developer.apple.com/account/resources/profiles/list) Seite
2. Add a new provisioning profile for Mac App Store Distribution 2. Füge ein neues Bereitstellungsprofil für Mac App Store Distribution hinzu
3. Set the Profile Type as Mac and select the App ID for the application created above 3. Wähle den Profiltyp als Mac und wähle die App-ID für die oben erstellte Anwendung
4. Select the Mac App Distribution certificate 4. Wähle das Mac App Distribution Zertifikat
5. Name the Provisioning Profile embedded and download the created profile. 5. Benenne das Bereitstellungsprofil eingebettet und lade das erstellte Profil herunter.
## Mac App Store Process ## Mac App Store Prozess
#### Enable Apple's App Sandbox #### Apple's App Sandbox aktivieren
Apps submitted to the Mac App Store must run under Apple's [App Sandbox](https://developer.apple.com/app-sandboxing/). You must create an `entitlements.plist` file for this to work. The recommendation is to create this file under this path `{PROJECT_DIR}/build/darwin/entitlements.plist`. Für den Mac App Store eingereichte Apps müssen unter Apples [App Sandbox](https://developer.apple.com/app-sandboxing/) ausgeführt werden. Du musst eine `entitlements.plist` Datei erstellen, damit dies funktioniert. Es wird empfohlen, diese Datei unter dem Pfad `{PROJECT_DIR}/build/darwin/entitlements.plist` zu erstellen.
**Example Entitlements File** **Beispiel Berechtigungsdatei**
This is an example entitlements file from the [RiftShare](https://github.com/achhabra2/riftshare) app. For reference please put in the entitlements your app requires. Refer to [this site](https://developer.apple.com/documentation/bundleresources/entitlements) for more information. You will need to replace the Team ID and Application Name with the ones you registered above. Das ist eine Beispiel Berechtigungsdatei von der [RiftShare](https://github.com/achhabra2/riftshare)-App. Bitte gebe die Berechtigungen an, die deine App letzendlich benötigt. Weitere Informationen findest du auf [dieser Seite](https://developer.apple.com/documentation/bundleresources/entitlements). Du musst die Team-ID und den Bewerbungsnamen durch die oben eingetragenen ersetzen.
```xml title="entitlements.plist" ```xml title="entitlements.plist"
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
@ -61,13 +61,13 @@ This is an example entitlements file from the [RiftShare](https://github.com/ach
</plist> </plist>
``` ```
**Add the Embedded Provisioning Profile** The Provisioning Profile created above needs to be added to the root of the application. It needs to be named embedded.provisionprofile. Das oben erstellte Bereitstellungsprofil muss dem Stammverzeichnis der Anwendung hinzugefügt werden. Außerdem muss diese embedded.provisionprofile heißen.
#### Build and Sign the App Package #### Builde und signiere das App-Paket
The following is an example script for building and signing your app for Mac App Store submission. It assumes you are running the script from your root project directory. Das folgende ist ein Beispielskript zum Erstellen und Signieren deiner App für Mac App Store Einreichung. Das Skript geht davon aus, dass es aus dem Root-Projektverzeichnis ausgeführt wird.
Note the certificates for signing the app and signing the installer are different. Please make sure both are imported into Keychain. Find the strings in Keychain and insert them below. Populate your certificate names, and app name below. Running the following script will generate a signed `app.pkg` file in the root directory of your app. Beachte, dass die Zertifikate, die die App signieren und den Installer signieren, unterschiedlich sind. Bitte stelle sicher, dass beide in die Keychain importiert werden. Finde die Zeichenketten in Keychain und füge sie unten ein. Fülle deinen Zertifikatsnamen und den App-Namen unten ein. Das Ausführen des folgenden Skripts generiert eine signierte `app.pkg` Datei im Stammverzeichnis deiner App.
```bash title="macappstore-build.sh" ```bash title="macappstore-build.sh"
#!/bin/bash #!/bin/bash
@ -85,13 +85,13 @@ codesign --timestamp --options=runtime -s "$APP_CERTIFICATE" -v --entitlements .
productbuild --sign "$PKG_CERTIFICATE" --component "./build/bin/$APP_NAME.app" /Applications "./$APP_NAME.pkg" productbuild --sign "$PKG_CERTIFICATE" --component "./build/bin/$APP_NAME.app" /Applications "./$APP_NAME.pkg"
``` ```
#### Upload App Bundle #### App-Paket hochladen
You will need to upload the generated package file and associate it to your Application before you will be able to submit it for review. Die generierte Paketdatei muss nun hochgeladen werden, um diese deiner Anwendung zuzuordnen, bevor du sie zur Überprüfung einreichen kannst.
1. Download the [Transporter App](https://apps.apple.com/us/app/transporter/id1450874784) from the Mac App Store 1. Lade die [Transporter App](https://apps.apple.com/us/app/transporter/id1450874784) aus dem Mac App Store herunter
2. Open it and sign in with your Apple ID 2. Öffne diese und melde dich mit deiner Apple-ID an
3. Click the + sign and select the `APP_NAME.pkg` file that you generated in the previous step. Upload it 3. Klicke auf das + Zeichen und wähle die `APP_NAME.pkg` Datei, die du im vorherigen Schritt erstellt hast. Dann lade diese hoch
4. Go back to the [App Store Connect](https://appstoreconnect.apple.com/apps) site and navigate back into your app submission. Select the version that you are ready to make available on the App Store. Under `Build` select the package that you uploaded via Transporter. 4. Gehe zurück zur [App Store Connect](https://appstoreconnect.apple.com/apps) Seite und navigiere zurück zu deiner App-Einreichung. Wähle die Version, die im App Store zur Verfügung gestellt werden soll. Unter `Build` wähle das Paket, das über die Transporter App hochgeladen wurde.
That's it! You can now use the site to submit your App for review. After a few business days if all goes well you should see your App live on the Mac App Store. Das wars! Du kannst nun die Website nutzen, um deine App zur Überprüfung einzureichen. Nach ein paar Werktagen, wenn alles gut geht, sollte deine App live im Mac App Store zu sehen sein.

View file

@ -1,95 +1,95 @@
# Manual Builds # Manuelle Builds
The Wails CLI does a lot of heavy lifting for the project, but sometimes it's desirable to manually build your project. This document will discuss the different operations the CLI does and how this may be achieved in different ways. Die Wails-CLI erledigt eine Menge schwerer Arbeit für das Projekt, aber manchmal ist es wünschenswert, das Projekt manuell zu erstellen. Dieses Dokument beschreibt die verschiedenen Operationen der CLI und wie diese auf unterschiedliche Weise erreicht werden können.
## Build Process ## Build-Prozess
When either `wails build` or `wails dev` are used, the Wails CLI performs a common build process: Wenn entweder `wails build` oder `wails dev` verwendet werden, führt die Wails-CLI einen gemeinsamen Build-Prozess aus:
- Install frontend dependencies - Frontend Abhängigkeiten werden installiert
- Build frontend project - Frontend Projekt wird gebuildet
- Generate build assets - Build-Assets werden generiert
- Compile application - Die Anwendung wird kompiliert
- [optional] Compress application - [optional] Die Anwendung wird komprimiert
### Install frontend dependencies ### Frontend Abhängigkeiten werden installiert
#### CLI Steps #### CLI Schritte
- If the `-s` flag is given, this step is skipped - Wenn das `-s` Flag angegeben ist, wird dieser Schritt übersprungen
- Checks `wails.json` to see if there is an install command in the key `frontend:install` - Überprüft `wails.json` um zu sehen, ob ein Installationsbefehl im Schlüssel `frontend:install` vorhanden ist
- If there isn't, it skips this step - Falls nicht, überspringt es diesen Schritt
- If there is, it checks if `package.json` exists in the frontend directory. If it doesn't exist, it skips this step - Falls vorhanden, wird geprüft, ob `package.json` im Frontend-Verzeichnis existiert. Wenn es nicht existiert, überspringt es diesen Schritt
- An MD5 sum is generated from the `package.json` file contents - Eine MD5-Summe wird aus dem `package.json` Dateiinhalt generiert
- It checks for the existence of `package.json.md5` and if it exists, will compare the contents of it (an MD5 sum) with the one generated to see if the contents have changed. If they are the same, this step is skipped - Es prüft, ob `package.json.md5` existiert, und vergleicht, falls vorhanden, den Inhalt (eine MD5-Summe) mit der neu generierten, um festzustellen, ob sich der Inhalt geändert hat. Wenn diese gleich sind, wird dieser Schritt übersprungen
- If `package.json.md5` does not exist, it creates it using the generated MD5 sum - Wenn `package.json.md5` nicht existiert, wird es mit der erzeugten MD5-Summe erstellt
- If a build is now required, or `node_modules` does not exist, or the `-f` flag is given, the install command is executed in the frontend directory - Wird ein Build benötigt, existiert `node_modules` nicht oder ist die Flag `-f` gesetzt, wird der Installationsbefehl im Frontend-Verzeichnis ausgeführt.
#### Manual Steps #### Manuelle Schritte
This step could be done from the command line or a script with `npm install`. Dieser Schritt kann über die Kommandozeile oder ein Skript mit `npm install` durchgeführt werden.
### Build frontend project ### Frontend Projekt wird gebuildet
#### Wails CLI #### Wails CLI
- If the `-s` flag is given, this step is skipped - Wenn das `-s` Flag angegeben ist, wird dieser Schritt übersprungen
- Checks `wails.json` to see if there is a build command in the key `frontend:build` - Überprüft `wails.json` um zu sehen, ob ein Installationsbefehl im Schlüssel `frontend:install` vorhanden ist
- If there isn't, it skips this step - Falls nicht, überspringt es diesen Schritt
- If there is, it is executed in the frontend directory - Falls vorhanden, wird sie im Frontend-Verzeichnis ausgeführt
#### Manual Steps #### Manuelle Schritte
This step could be done from the command line or a script with `npm run build` or whatever the frontend build script is. Dieser Schritt könnte von der Kommandozeile oder einem Skript mit `npm build` oder was auch immer das Frontend Build-Skript ist, ausgeführt werden.
### Generate assets ### Assets generieren
#### Wails CLI #### Wails CLI
- If `-nopackage` flag is set, this stage is skipped - Wenn die `-nopackage` Flag gesetzt ist, wird diese Stufe übersprungen
- If the `build/appicon.png` file does not exist, a default one is created - Wenn die `build/appicon.png` Datei nicht existiert, wird eine Standarddatei erstellt
- For Windows, see [Bundling for Windows](#windows) - Für Windows siehe [Bundling für Windows](#windows)
- If `build/windows/icon.ico` does not exist, it will create it from the `build/appicon.png` image. - Wenn `build/windows/icon.ico` nicht existiert, wird es aus dem `build/appicon.png` Bild erzeugt.
##### Windows ##### Windows
- If `build/windows/icon.ico` does not exist, it will create it from `build/appicon.png` using icon sizes of 256, 128, 64, 48, 32 and 16. This is done using [winicon](https://github.com/leaanthony/winicon). - Wenn `build/windows/icon.ico` nicht existiert, wird es aus `build/appicon.png` mit den Icon-Größen 256, 128, 64, 48, 32 und 16 erstellt. Dies geschieht mit [winicon](https://github.com/leaanthony/winicon).
- If the `build/windows/<projectname>.manifest` file does not exist, it creates it from a default version. - Wenn die Datei `build/windows/<projectname>.manifest` nicht existiert, wird sie von einer Standardversion erzeugt.
- Compiles the application as a production build (above) - Kompiliert die Anwendung als Produktionsbuild (siehe oben)
- Uses [winres](https://github.com/tc-hib/winres) to bundle the icon and manifest into a `.syso` file ready for linking. - Verwendet [Winres](https://github.com/tc-hib/winres) um das Icon zu bündeln und in eine `.syso` Datei zu manifestieren, die zum Verlinken bereit ist.
#### Manual Steps #### Manuelle Schritte
- Create `icon.ico` using the [winicon](https://github.com/leaanthony/winicon) CLI tool (or any other tool). - Erstelle `icon.ico` mit dem [Winicon](https://github.com/leaanthony/winicon) CLI Tool (oder einem anderen Tool).
- Create / Update a `.manifest` file for your application - Erstelle / Aktualisiere eine `.manifest` Datei für deine Anwendung
- Use the [winres CLI](https://github.com/tc-hib/go-winres) to generate a `.syso` file. - Verwende das [Winres CLI](https://github.com/tc-hib/go-winres) um eine `.syso` Datei zu generieren.
### Compile application ### Die Anwendung wird kompiliert
#### Wails CLI #### Wails CLI
- If the `-clean` flag is provided, the `build` directory is deleted and recreated - Wenn die `-clean` Flag angegeben wird, wird das `Build` Verzeichnis gelöscht und neu erstellt
- For `wails dev`, the following default Go flags are used: `-tags dev -gcflags "all=-N -l"` - Für `wails dev` werden folgende Go-Standardflags verwendet: `-tags dev -gcflags "all=-N -l"`
- For `wails build`, the following default Go flags are used: `-tags desktop,production -ldflags "-w -s"` - Für `wails build` werden folgende Go-Standardflags verwendet: `-tags desktop,production -ldflags "-w -s"`
- On Windows, `-ldflags "-w -h -H windowsgui"` - Unter Windows, `-ldflags "-w -h -H windowsgui"`
- Additional tags passed to the CLI using `-tags` are added to the defaults - Zusätzlich an das CLI übergebene Tags mit `-tags` werden zu den Standardwerten hinzugefügt
- Additional ldflags passed to the CLI using `-ldflags` are added to the defaults - Zusätzliche ldflags, die über `-ldflags` an die Befehlszeilenschnittstelle übergeben werden, werden zu den Standardeinstellungen hinzugefügt
- The `-o` flag is passed through - Die `-o` Flag wird übergeben
- The Go compiler specified by `-compiler` will be used for compilation - Der von `-compiler` angegebene Go-Compiler wird zur Kompilierung verwendet
#### Manual steps #### Manuelle Schritte
- For dev build, the minimum command would be: `go build -tags dev -gcflags "all=-N -l"` - Für dev build wäre das Minimum der Befehl: `go build -tags dev -gcflags "all=-N -l"`
- For production build, the minimum command would be: `go build -tags desktop,production -ldflags "-w -s -H windowsgui"` - Für einen Produktionsbuild wäre der minimale Befehl: `go build -tags desktop,production -ldflags "-w -s -H windowsgui"`
- Ensure that you compile in the same directory as the `.syso` file - Stelle sicher, dass du im selben Verzeichnis wie die `.syso` Datei kompilierst
### Compress application ### Anwendung komprimieren
#### Wails CLI #### Wails CLI
- If the `-upx` flag has been given, the `upx` program will be run to compress the application with the default settings - Wenn die `-upx` Flag angegeben wurde, wird das `upx` Programm ausgeführt, um die Anwendung mit den Standardeinstellungen zu komprimieren
- If `-upxflags` is also passed, these flags are used instead of the default ones - Wenn `-upxflags` ebenfalls übergeben wird, werden diese Flags anstelle der Standardflags verwendet
#### Manual steps #### Manuelle Schritte
- Run `upx [flags]` manually to compress the application. - Führe `upx [flags]` manuell aus, um die Anwendung zu komprimieren.

View file

@ -1,14 +1,14 @@
# Migrating from v1 # Migration von v1
## Overview ## Übersicht
Wails v2 is a significant change from v1. This document aims to highlight the changes and the steps in migrating an existing project. Wails v2 beinhaltet wesentliche Änderung gegenüber v1. Dieses Dokument zielt darauf ab, die Änderungen und Schritte bei der Migration eines bestehenden Projekts hervorzuheben.
### Creating the Application ### Erstellen der Anwendung
In v1, the main application is created using `wails.CreateApp`, bindings are added with `app.Bind`, then the application is run using `app.Run()`. In v1 wird die Hauptanwendung mit `wails.CreateApp` erstellt. Verknüpfungen werden mit `app.Bind` hinzugefügt, die Anwendung wird dann mit `app.Run()` ausgeführt.
Example: Beispiel:
```go title="v1" ```go title="v1"
app := wails.CreateApp(&wails.AppConfig{ app := wails.CreateApp(&wails.AppConfig{
@ -23,7 +23,7 @@ Example:
app.Run() app.Run()
``` ```
In v2, there is just a single method, `wails.Run()`, that accepts [application options](../reference/options.mdx#application-options). In v2 gibt es nur eine einzige Methode, `wails.Run()`, die [Anwendungsoptionen](../reference/options.mdx#application-options) akzeptiert.
```go title="v2" ```go title="v2"
err := wails.Run(&options.App{ err := wails.Run(&options.App{
@ -39,9 +39,9 @@ In v2, there is just a single method, `wails.Run()`, that accepts [application o
}) })
``` ```
### Binding ### Verknüpfungen
In v1, it was possible to bind both arbitrary functions and structs. In v2, this has been simplified to only binding structs. The struct instances that were previously passed to the `Bind()` method in v1, are now specified in the `Bind` field of the [application options](../reference/options.mdx#application-options): In v1 war es möglich, sowohl beliebige Funktionen als auch Structs zu verknüpfen. In v2 wurde dies vereinfacht, sodass nur noch Structs angenommen werden. Die Struct Instanzen, die zuvor an die `Bind()` Methode in v1 übergeben wurden sind nun im `Bind` Feld der [Anwendungsoptionen](../reference/options.mdx#application-options) spezifiziert:
```go title="v1" ```go title="v1"
app := wails.CreateApp(/* options */) app := wails.CreateApp(/* options */)
@ -57,19 +57,19 @@ In v1, it was possible to bind both arbitrary functions and structs. In v2, this
}) })
``` ```
In v1, bound methods were available to the frontend at `window.backend`. This has changed to `window.go`.`` In v1 standen gebundene Methoden im Frontend unter `window.backend` zur Verfügung. Dies hat sich zu `window.go` geändert
### Application Lifecycle ### Anwendungslebenszyklus
In v1, there were 2 special methods in a bound struct: `WailsInit()` and `WailsShutdown()`. These have been replaced with 3 lifecycle hooks as part of the [application options](../reference/options.mdx#application-options): In v1 gab es 2 spezielle Methoden in einem gebundenen Struct: `WailsInit()` und `WailsShutdown()`. Diese wurden durch 3 Lebenszyklushaken als Teil der [Anwendungsoptionen](../reference/options.mdx#application-options) ersetzt:
- [OnStartup](../reference/options.mdx#onstartup) - [OnStartup](../reference/options.mdx#onstartup)
- [OnShutdown](../reference/options.mdx#onshutdown) - [OnShutdown](../reference/options.mdx#onshutdown)
- [OnDomReady](../reference/options.mdx#ondomready) - [OnDomReady](../reference/options.mdx#ondomready)
Note: [OnDomReady](../reference/options.mdx#ondomready) replaces the `wails:ready` system event in v1. Hinweis: [OnDomReady](../reference/options.mdx#ondomready) ersetzt das `Wails:ready` Systemereignis von v1.
These methods can be standard functions, but a common practice is to have them part of a struct: Diese Methoden können Standardfunktionen sein, aber es ist eine gängige Praxis, diese als Teil eines Structs zu definieren:
```go title="v2" ```go title="v2"
basic := NewBasicApp() basic := NewBasicApp()
@ -89,11 +89,11 @@ func (b *Basic) startup(ctx context.Context) {
... ...
``` ```
### Runtime ### Laufzeit
The runtime in v2 is much richer than v1 with support for menus, window manipulation and better dialogs. The signature of the methods has changed slightly - please refer to the [Runtime Reference](../reference/runtime/intro.mdx). Die Laufzeit in v2 ist viel reicher an Funktionen als v1, mit Unterstützung für Menüs, Fenstermanipulation und besseren Dialogen. Die Benennung der Methoden hat sich leicht geändert bitte lese dir dafür die [Laufzeitreferenz](../reference/runtime/intro.mdx) durch.
In v1, the [runtime](../reference/runtime/intro.mdx) was available via a struct passed to `WailsInit()`. In v2, the runtime has been moved out to its own package. Each method in the runtime takes the `context.Context` that is passed to the [OnStartup](../reference/options.mdx#onstartup) method. In v1 war die [Laufzeit](../reference/runtime/intro.mdx) über einen an `WailsInit()` übergebenen Struct verfügbar. In v2 wurde die Laufzeit in ein eigenes Paket verschoben. Jede Methode in der Laufzeit Methode verwendet die `context.Context` die an die [OnStartup](../reference/options.mdx#onstartup) Methode übergeben wird.
```go title="Runtime Example" ```go title="Runtime Example"
package main package main
@ -114,22 +114,22 @@ func (a *App) startup(ctx context.Context) {
### Assets ### Assets
The _biggest_ change in v2 is how assets are handled. Die _größte_ Änderung in v2 ist, wie mit assets umgegangen wird.
In v1, assets were passed via 2 application options: In v1 wurden Assets über 2 Anwendungsoptionen übergeben:
- `JS` - The application's JavaScript - `JS` - JavaScript der Anwendung
- `CSS` - The application's CSS - `CSS` - CSS der Anwendung
This meant that the responsibility of generating a single JS and CSS file was on the developer. This essentially required the use of complicated packers such as webpack. Dies bedeutete, dass die Verantwortung für die Erstellung einer einzigen JS- und CSS-Datei beim Entwickler lag. Dies erforderte im Wesentlichen den Einsatz von komplizierten Packern wie Webpack.
In v2, Wails makes no assumptions about your frontend assets, just like a webserver. All of your application assets are passed to the application options as an `embed.FS`. In v2 macht Wails keine Annahmen über deine Frontend-Assets wie ein Webserver. Alle deine App-Assets werden als `embed.FS` an die Anwendungsoptionen übergeben.
**This means there is no requirement to bundle your assets, encode images as Base64 or attempt the dark art of bundler configuration to use custom fonts**. **Das bedeutet, dass du deine Assets nicht bündeln, Bilder nicht als Base64 kodieren oder mit der komplizierten Konfiguration von Bundlern für die Verwendung benutzerdefinierter Schriftarten herumschlagen musst**.
At startup, Wails will scan the given `embed.FS` for `index.html` and use its location as the root path for all the other application assets - just like a webserver would. Beim Start durchsucht Wails die angegebene `embed.FS` nach `Index.html` und verwenden seine Position als root Pfad für alle anderen App-Assets - genau wie ein Webserver.
Example: An application has the following project layout. All final assets are placed in the `frontend/dist` directory: Beispiel: Eine Anwendung hat das folgende Projekt-Layout. Alle endgültigen Assets sind im `frontend/dist` Verzeichnis platziert:
```shell ```shell
. .
@ -144,7 +144,7 @@ Example: An application has the following project layout. All final assets are p
└── wails.json └── wails.json
``` ```
Those assets may be used by the application by simply creating an `embed.FS`: Diese Assets können von der Anwendung verwendet werden, indem einfach eine `embed.FS` erstellt wird:
```go title="Assets Example" ```go title="Assets Example"
//go:embed all:frontend/dist //go:embed all:frontend/dist
@ -160,13 +160,13 @@ func main() {
} }
``` ```
Of course, bundlers can be used if you wish to. The only requirement is to pass the final application assets directory to Wails using an `embed.FS` in the `Assets` key of the [application options](../reference/options.mdx#application-options). Natürlich können Bundler auch eingesetzt werden, wenn du das möchtest. Die einzige Voraussetzung ist, das endgültige Verzeichnis der Anwendungsressourcen mithilfe eines `embed.FS` im `Assets` Feld der [application options](../reference/options.mdx#application-options) an Wails zu übergeben.
### Project Configuration ### Projekt-Konfiguration
In v1, the project configuration was stored in the `project.json` file in the project root. In v2, the project configuration is stored in the `wails.json` file in the project root. In v1 wurde die Projekt-Konfiguration in der Datei `project.json` im Projektverzeichnis gespeichert. In v2 wird die Projekt-Konfiguration in der `wails.json` Datei im Projektverzeichnis gespeichert.
The format of the file is slightly different. Here is a comparison: Das Format der Datei ist leicht unterschiedlich. Hier ist ein Vergleich:
<p align="center"> <p align="center">
@ -184,8 +184,8 @@ The format of the file is slightly different. Here is a comparison:
| frontend / bridge | | Removed | | frontend / bridge | | Removed |
| frontend / serve | | Removed | | frontend / serve | | Removed |
| tags | | Removed | | tags | | Removed |
| | wailsjsdir | The directory to generate wailsjs modules | | | wailsjsdir | Das Verzeichnis zum Generieren von wailsjs-Modulen |
| | assetdir | The directory of the compiled frontend assets for `dev` mode. This is normally inferred and could be left empty. | | | assetdir | Das Verzeichnis der kompilierten Frontend-Assets für den `dev`-Modus. Dies wird normalerweise abgeleitet und kann leer bleiben. |
| | reloaddirs | Comma separated list of additional directories to watch for changes and to trigger reloads in `dev` mode. This is only needed for some more advanced asset configurations. | | | reloaddirs | Durch Komma getrennte Liste zusätzlicher Verzeichnisse, die auf Änderungen achten und im `dev` Modus neu laden können. Dies wird nur für fortgeschrittenere Asset-Konfigurationen benötigt. |
</p> </p>

View file

@ -1,6 +1,6 @@
# Mouse Buttons # Maustasten
The Wails runtime intercepts mouse clicks to determine whether a frameless window needs resizing or a window needs to be moved. It has been asked how to detect when a mouse click has occurred, because `window.onclick` doesn't report the mouse buttons correctly. The following code shows how to detect mouse clicks: Die Wails Laufzeit fängt Mausklicks ab, um festzustellen, ob ein rahmenloses Fenster eine Größenänderung braucht, oder ein Fenster verschoben werden muss. Es wurde gefragt, wie man feststellen kann, wann ein Mausklick stattgefunden hat, da `window.onclick` die Maustasten nicht korrekt meldet. Der folgende Code zeigt, wie man Mausklicks erkennt:
```javascript ```javascript
window.addEventListener("mousedown", handleMouseButtonDown); window.addEventListener("mousedown", handleMouseButtonDown);
@ -22,4 +22,4 @@ function handleMouseButtonDown(event) {
} }
``` ```
Reference: https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/button Referenz: https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/button

View file

@ -1,6 +1,6 @@
# NixOS FontSize Bug # NixOS FontSize Bug
NixOS/Wayland can cause a bug where the `font-size` css property doesn't affect the rendered page. To fix this add the following to your devShell. NixOS/Wayland kann einen Fehler verursachen, bei dem die CSS-Eigenschaft `font-size` die gerenderte Seite nicht beeinflusst. Um das zu beheben, füge folgendes zu der devShell hinzu.
```shell ```shell
shellHook = with pkgs; '' shellHook = with pkgs; ''

View file

@ -1,32 +1,32 @@
# Obfuscated Builds # Verschleierte Builds
Wails includes support for obfuscating your application using [garble](https://github.com/burrowers/garble). Wails unterstützt das Verschleiern von Anwendungen mit [garble](https://github.com/burrowers/garble).
To produce an obfuscated build, you can use the `-obfuscate` flag with the `wails build` command: Um eine verschleierte Version zu erzeugen, kann die `-obfuscate` Flag mit dem `wails build` Befehl verwendet werden:
```bash ```bash
wails build -obfuscated wails build -obfuscated
``` ```
To customise the obfuscation settings, you can use the `-garbleargs` flag: Um die Verschleierungseinstellungen anzupassen, kann die `garbleargs` Flag verwendet werden:
```bash ```bash
wails build -obfuscated -garbleargs "-literals -tiny -seed=myrandomseed" wails build -obfuscated -garbleargs "-literals -tiny -seed=myrandomseed"
``` ```
These settings may be persisted in your [project config](../reference/project-config.mdx). Diese Einstellung kann auch in der [Projekt-Konfiguration](../reference/project-config.mdx) angegeben werden.
## How it works ## So funktioniert es
In a standard build, all bound methods are available in the frontend under the `window.go` variable. When these methods are called, the corresponding backend method is called using the fully qualified function name. When using an obfuscated build, methods are bound using an ID instead of a name. The bindings generated in the `wailsjs` directory use these IDs to call the backend functions. In einer Standardversion sind alle verknüpften Methoden im Frontend unter der Variable `window.go` verfügbar. Wenn diese Methoden aufgerufen werden, wird die zugehörige Backend-Methode mit dem voll qualifizierten Funktionsnamen aufgerufen. Wenn ein verschleierter Build verwendet wird, werden Methoden mit einer Id anstelle eines Namens verknüpft. Die im Verzeichnis `wailsjs` erzeugten Verknüpfungen verwenden diese Ids um die Backend-Funktionen aufzurufen.
:::note :::note
To ensure that your application will work in obfuscated mode, you must use the generated bindings under the `wailsjs` directory in your application. Um sicherzustellen, dass die Anwendung im verschleierten Modus funktioniert, müssen die generierten Verknüpfungen in dem `wailsjs` Verzeichnis der Anwendung verwendet werden.
::: :::
## Example ## Beispiel
Importing the "Greet" method from the bindings like this: Importing the "Greet" method from the bindings like this:
@ -37,4 +37,4 @@ import { Greet } from "../../wailsjs/go/main/App";
Greet("World"); Greet("World");
``` ```
will ensure that the method will work correctly in obfuscated mode, as the bindings will be regenerated with IDs and the call mechanism updated. stelle sicher, dass die Methode im verschleierten Modus korrekt funktioniert, da die Bindungen mit Ids neu generiert und der Call Mechanismus aktualisiert wird.

View file

@ -1,6 +1,6 @@
# Overscroll # Overscroll
[Overscroll](https://developer.mozilla.org/en-US/docs/Web/CSS/overscroll-behavior) is the "bounce effect" you sometimes get when you scroll beyond a page's content boundaries. This is common in mobile apps. This can be disabled using CSS: [Overscroll](https://developer.mozilla.org/en-US/docs/Web/CSS/overscroll-behavior) ist der "Bounce Effekt", den man manchmal erhält, wenn über die Inhaltsgrenzen einer Seite gescrollt wird. Das ist in mobilen Apps üblich. Mithilfe von CSS kann das deaktiviert werden:
```css ```css
html { html {

View file

@ -1,10 +1,10 @@
# Routing # Routing
Routing is a popular way to switch views in an application. This page offers some guidance around how to do that. Routing ist ein beliebter Weg, um Ansichten in einer Anwendung zu wechseln. Diese Seite bietet einige Hinweise dazu, wie das umgesetzt werden kann.
## Vue ## Vue
The recommended approach for routing in Vue is [Hash Mode](https://next.router.vuejs.org/guide/essentials/history-mode.html#hash-mode): Der empfohlene Ansatz für das Routen in Vue ist der [Hash-Modus](https://next.router.vuejs.org/guide/essentials/history-mode.html#hash-mode):
```js ```js
import { createRouter, createWebHashHistory } from "vue-router"; import { createRouter, createWebHashHistory } from "vue-router";
@ -19,7 +19,7 @@ const router = createRouter({
## Angular ## Angular
The recommended approach for routing in Angular is [HashLocationStrategy](https://codecraft.tv/courses/angular/routing/routing-strategies#_hashlocationstrategy): Der empfohlene Ansatz für das Routen in Angular ist die [HashLocationStrategy](https://codecraft.tv/courses/angular/routing/routing-strategies#_hashlocationstrategy):
```ts ```ts
RouterModule.forRoot(routes, { useHash: true }); RouterModule.forRoot(routes, { useHash: true });
@ -27,7 +27,7 @@ RouterModule.forRoot(routes, { useHash: true });
## React ## React
The recommended approach for routing in React is [HashRouter](https://reactrouter.com/en/main/router-components/hash-router): Die empfohlene Vorgehensweise für das Routen in React ist der [HashRouter](https://reactrouter.com/en/main/router-components/hash-router):
```jsx ```jsx
import { HashRouter, Routes, Route } from "react-router-dom"; import { HashRouter, Routes, Route } from "react-router-dom";
@ -48,7 +48,7 @@ ReactDOM.render(
## Svelte ## Svelte
The recommended approach for routing in Svelte is [svelte-spa-router](https://github.com/ItalyPaleAle/svelte-spa-router): Die empfohlene Vorgehensweise für das Routen in Svelte ist der [svelte-spa-router](https://github.com/ItalyPaleAle/svelte-spa-router):
```svelte ```svelte
<script> <script>

View file

@ -1,14 +1,14 @@
# Code Signing # Codesignatur
This is a guide on how you can sign your binaries generated with Wails on MacOS and Windows. The guide will target CI environments, more specifically GitHub Actions. Dies ist eine Anleitung, wie du deine mit Wails auf MacOS und Windows generierten Binärdateien signieren kannst. Die Anleitung wird CI-Umgebungen ins Visier nehmen, genauer gesagt GitHub Actions.
## Windows ## Windows
First off you need a code signing certificate. If you do not already have one, Microsoft's info page lists some providers [here](https://docs.microsoft.com/en-us/windows-hardware/drivers/dashboard/get-a-code-signing-certificate). Please note that an EV certificate is not required unless you need to write kernel-level software such as device drivers. For signing your Wails app, a standard code signing certificate will do just fine. Als erstes benötigst du ein Zertifikat zur Codesignierung. Wenn du noch kein Zertifikat hast, listet Microsofts Infoseite einige Anbieter [hier](https://docs.microsoft.com/en-us/windows-hardware/drivers/dashboard/get-a-code-signing-certificate) auf. Bitte beachte, dass ein EV-Zertifikat nicht erforderlich ist, es sei denn, du musst kernel-level Software wie Gerätetreiber schreiben. Zum Signieren deiner Wails App reicht ein normales Code-Signaturzertifikat aus.
It may be a good idea to check with your certificate provider how to sign your binaries on your local machine before targeting automated build systems, just so you know if there are any special requirements. For instance, [here](https://www.ssl.com/how-to/using-your-code-signing-certificate/) is SSL.com's code signing guide for Windows. If you know how to sign locally, it will be easier to troubleshoot any potential issues in a CI environment. For instance, SSL.com code signing certificates require the `/tr` flag for [SignTool.exe](https://docs.microsoft.com/en-us/windows/win32/seccrypto/signtool) while other providers may only need the `/t` flag for providing the timestamping server. Popular GitHub Actions for signing Windows binaries like [this one](https://github.com/Dana-Prajea/code-sign-action) does not support the `/tr` flag on SignTool.exe. Therefore this guide will focus on signing our app manually with PowerShell commands, but you can use actions like the [code-sign-action](https://github.com/Dana-Prajea/code-sign-action) Action if you prefer. Es empfiehlt sich, vor der Verwendung automatisierter Build-Systeme mit deinem Zertifikatsanbieter zu prüfen, wie du deine Binärdateien auf deinem lokalen Rechner signierst, um eventuelle Besonderheiten zu kennen. Zum Beispiel ist [hier](https://www.ssl.com/how-to/using-your-code-signing-certificate/) die Anleitung von SSL.com zum Signieren von Code für Windows. Wenn du lokal signieren kannst, wird es einfacher sein, mögliche Probleme in einer CI-Umgebung zu beheben. Zum Beispiel benötigen SSL.com Code-Signing-Zertifikate die `/tr`-Flagge für [SignTool.exe](https://docs.microsoft.com/en-us/windows/win32/seccrypto/signtool), während andere Anbieter möglicherweise nur die `/t`-Flagge für den timestamping-Server benötigen. Beliebte GitHub Actions zum Signieren von Windows-Binärdateien wie [diese hier](https://github.com/Dana-Prajea/code-sign-action) unterstützen die `/tr`-Flagge in SignTool.exe nicht. Daher konzentriert sich diese Anleitung darauf, unsere App manuell mit PowerShell-Befehlen zu signieren, aber du kannst auch Aktionen wie die [code-sign-action](https://github.com/Dana-Prajea/code-sign-action) Aktion verwenden, wenn du diese vorziehst.
First off, let's make sure we are able to build our Wails app in our GitHub CI. Here is a small workflow template: Zuerst stellen wir sicher, dass wir unsere Wails App in unserem GitHub CI builden können. Hier ist eine kleine Workflow-Vorlage:
```yaml ```yaml
name: "example" name: "example"
@ -33,7 +33,7 @@ jobs:
uses: actions/setup-node@v2 uses: actions/setup-node@v2
with: with:
node-version: 14 node-version: 14
# You may need to manually build you frontend manually here, unless you have configured frontend build and install commands in wails.json. # Möglicherweise muss hier dein Frontend manuell erstellt werden, es sei denn, du hast Build- und Installationsbefehle für das Frontend in wails.json konfiguriert.
- name: Get Wails - name: Get Wails
run: go install github.com/wailsapp/wails/v2/cmd/wails@latest run: go install github.com/wailsapp/wails/v2/cmd/wails@latest
- name: Build Wails app - name: Build Wails app
@ -53,24 +53,24 @@ jobs:
path: build/bin/* path: build/bin/*
``` ```
Next we need to give the GitHub workflow access to our signing certificate. This is done by encoding your .pfx or .p12 certificate into a base64 string. To do this in PowerShell, you can use the following command assuming your certificate is called 'my-cert.p12': Als nächstes müssen wir dem GitHub Workflow Zugriff auf unser Signaturzertifikat geben. Dies geschieht, indem du dein .pfx- oder .p12-Zertifikat in einen base64-String kodierest. Um dies in PowerShell zu tun, kannst du den folgenden Befehl verwenden, vorausgesetzt dein Zertifikat heißt 'my-cert.p12':
```PowerShell ```PowerShell
certutil -encode .\my-cert.p12 my-cert-base64.txt certutil -encode .\my-cert.p12 my-cert-base64.txt
``` ```
You should now have your .txt file with the base64 encoded certificate. It should start with _-----BEGIN CERTIFICATE-----_ and end with _-----END CERTIFICATE-----_. Now you need to make two action secrets on GitHub. Navigate to _Settings -> Secrets -> Actions_ and create the two following secrets: Du solltest nun deine .txt-Datei mit dem base64-kodierten Zertifikat haben. Es sollte mit _----BEGIN ZERTIFICATE-----_ beginnen und mit _-----END ZERTIFICATE-----_ enden. Nun musst du auf GitHub zwei action secrets erstellen. Navigiere zu den _Settings-> Secrets-> Actions_ und erstelle die zwei folgende Geheimnisse:
- **WIN_SIGNING_CERT** with the contents of your base64 encoded certificate text. - **WIN_SIGNING_CERT** mit dem Inhalt deines base64 kodierten Zertifikatstextes.
- **WIN_SIGNING_CERT_PASSWORD** with the contents of your certificate password. - **WIN_SIGNING_CERT_PASSWORD** mit dem Inhalt deines Zertifikatspassworts.
Now we're ready to implement the signing in our workflow using one of the two methods: Jetzt sind wir bereit, die Anmeldung in unserem Workflow mit einer der beiden Methoden zu implementieren:
### Method 1: signing with commands ### Methode 1: mit Befehlen signieren
This method uses PowerShell commands to sign our app, and leaves you control over the entire signing process. Diese Methode benutzt PowerShell Befehle, um unsere App zu signieren und überlässt dir die Kontrolle über den gesamten Signaturprozess.
After the `"Build Wails app"` step, we can add the following step to our workflow: Nach dem `"Build Wails App"` Schritt können wir folgenden Schritt zu unserem Workflow hinzufügen:
```yaml ```yaml
- name: Sign Windows binaries - name: Sign Windows binaries
@ -85,13 +85,13 @@ After the `"Build Wails app"` step, we can add the following step to our workflo
``` ```
This script creates a new directory for your certificate file, creates the certificate file from our base64 secret, converts it to a .pfx file, and finally signs the binary. The following variables needs to be replaced in the last line: Dieses Skript erstellt ein neues Verzeichnis für deine Zertifikatsdatei, erstellt die Zertifikatsdatei aus unserem base64 secret, konvertiert sie in eine .fx-Datei, und signiert schließlich die Binärdatei. Die folgenden Variablen müssen in der letzten Zeile ersetzt werden:
- **signing algorithm**: usually sha256. - **signing algorithm**: Normalerweise sha256.
- **timestamping server**: URL to the timestamping server to use with your certificate. - **timestamping server**: URL zum Timestamping-Server für dein Zertifikat.
- **path to binary**: path to the binary you want to sign. - **path to binary**: Pfad zur Binärdatei die du signieren möchtest.
Given that our Wails config has `outputfilename` set to "app.exe" and that we have a certificate from SSL.com, this would be our workflow: Da unsere Wails Konfiguration `outputfilename` auf "app.exe" gesetzt hat und wir ein Zertifikat von SSL.com haben, wäre dies unser Workflow:
```yaml ```yaml
name: "example" name: "example"
@ -146,27 +146,27 @@ jobs:
path: build/bin/* path: build/bin/*
``` ```
### Method 2: automatically signing with Action ### Methode 2: Automatisch mit Action signieren
It is possible to use a Windows code signing Action like [this](https://github.com/marketplace/actions/code-sign-a-file-with-pfx-certificate) one, but note it requires a SHA1 hash for the certificate and a certificate name. View an example of how to configure it on the Action's [marketplace](https://github.com/marketplace/actions/code-sign-a-file-with-pfx-certificate). Es ist möglich, eine Windows-Code Signierungsaktion wie [diese](https://github.com/marketplace/actions/code-sign-a-file-with-pfx-certificate) zu verwenden aber beachte, dass es einen SHA1-Hash für das Zertifikat und einen Zertifikatsnamen benötigt. Schau dir ein Beispiel auf dem [Marketplace](https://github.com/marketplace/actions/code-sign-a-file-with-pfx-certificate) an, wie du es konfigurieren kannst.
--- ---
## MacOS ## MacOS
First off you need your code signing certificate from Apple. If you do not have one, a simple Google search will help you acquire one. Once you have your certificate, you need to export it and encode it to base64. [This tutorial](https://localazy.com/blog/how-to-automatically-sign-macos-apps-using-github-actions) shows you how to do that in an easy manner. Once you have exported your .p12 certificate file, you can encode it to base64 as seen in the tutorial with the following command: Als erstes benötigst du dein Zertifikat zur Codesignierung von Apple. Wenn du noch keins haben solltest, kannst du dir mit einer einfachen Google-Suche eine zulegen. Sobald du dein Zertifikat hast, musst du es exportieren und in base64 kodieren. [Dieses Tutorial](https://localazy.com/blog/how-to-automatically-sign-macos-apps-using-github-actions) zeigt dir, wie du das auf eine einfache Weise tun kannst. Sobald du deine .p12-Zertifikatsdatei exportiert hast, kannst du diese in base64 kodieren, wie im Tutorial zu sehen ist, mit folgendem Befehl:
```bash ```bash
base64 Certificates.p12 | pbcopy base64 Certificates.p12 | pbcopy
``` ```
Now you're ready to create some GitHub project secrets, just as with Windows: Jetzt kannst du einige GitHub Projekt-Secrets erstellen, genau wie bei Windows:
- **APPLE_DEVELOPER_CERTIFICATE_P12_BASE64** with the contents of your newly copied base64 certificate. - **APPLE_DEVELOPER_CERTIFICATE_P12_BASE64** mit dem Inhalt deines neu kopierten base64-Zertifikats.
- **APPLE_DEVELOPER_CERTIFICATE_PASSWORD** with the contents of your certificate password. - **APPLE_DEVELOPER_CERTIFICATE_PASSWORD** mit dem Inhalt deines Zertifikatspassworts.
- **APPLE_PASSWORD** with the contents of an App-Specific password to your Apple-ID account which you can generate [here](https://appleid.apple.com/account/manage). - **APPLE_PASSWORD** mit dem Inhalt eines app-spezifischen Passworts für dein Apple-ID-Konto, das du [hier](https://appleid.apple.com/account/manage) generieren kannst.
Let's make sure we are able to build our Wails app in our GitHub Action workflow. Here is a small template: Stellen wir sicher, dass wir in der Lage sind, unsere Wails App in unserem GitHub Action Workflow zu bauen. Hier ist eine kleine Vorlage:
```yaml ```yaml
name: "example" name: "example"
@ -211,9 +211,9 @@ jobs:
path: build/bin/* path: build/bin/*
``` ```
For code signing on macOS, [gon](https://github.com/Bearer/gon) is a very handy tool for code signing and communicating with Apple servers, also written in Go, and will be used in this guide. Für die Code-Signierung auf macOS ist [gon](https://github.com/Bearer/gon) ein sehr praktisches Werkzeug zur Codesignierung und Kommunikation mit Apple-Servern, ebenfalls in Go geschrieben, und wird in dieser Anleitung verwendet.
After the `Build Wails app` step, add the following to the workflow: Nach dem `Build Wails App` Schritt können wir folgendes zum Workflow hinzufügen:
```yaml ```yaml
- name: MacOS download gon for code signing and app notarization - name: MacOS download gon for code signing and app notarization
@ -222,7 +222,7 @@ After the `Build Wails app` step, add the following to the workflow:
brew install Bearer/tap/gon brew install Bearer/tap/gon
``` ```
Now we need to configure some gon config files in our `build/darwin` directory: Nun müssen wir einige gon Konfigurationsdateien in unserem `build/darwin` Verzeichnis konfigurieren:
1. gon-sign.json: 1. gon-sign.json:
@ -241,19 +241,19 @@ Now we need to configure some gon config files in our `build/darwin` directory:
} }
``` ```
Here is a brief break down of the above fields: Hier ist eine kurze Erklärung der obigen Felder:
- `source`: The location of your wails binary to be signed - `source`: Der Ort der zu signierenden Wails Binärdatei
- `apple_id`: - `apple_id`:
- `username`: Your Apple ID email address - `username`: Deine Apple-ID E-Mail-Adresse
- `password`: Your app-specific password - `password`: Dein app-spezifisches Passwort
- `provider`: Your team ID for your App Store Connect account - `provider`: Deine Team-ID für dein App Store Connect Konto
- `sign`: - `sign`:
- `application_identity`: Your Apple developer identity - `application_identity`: Deine Apple Entwickler Identität
The (https://developer.apple.com/documentation/technotes/tn3147-migrating-to-the-latest-notarization-tool)[deprecated Apple's altool]'s syntax supporting `@env:` is no longer available since Apple has migrated to the new notarytool. Die Syntax von (https://developer.apple.com/documentation/technotes/tn3147-migrating-to-the-latest-notarization-tool)[veraltetes Apple-Tool], die `@env:` unterstützt, ist nicht mehr verfügbar, da Apple auf das neue Notary-Tool umgestellt hat.
Your developer identity and team ID can both by found on macOS by running the following command: Deine Entwickleridentität und Team-ID können beide auf macOS gefunden werden, indem du den folgenden Befehl ausführst:
```bash ```bash
$ security find-identity -v -p codesigning $ security find-identity -v -p codesigning
@ -281,9 +281,9 @@ $ security find-identity -v -p codesigning
</plist> </plist>
``` ```
In this file you configure the entitlements you need for you app, e.g. camera permissions if your app uses the camera. Read more about entitlements [here](https://developer.apple.com/documentation/bundleresources/entitlements). In dieser Datei konfigurierst du die Berechtigungen, die du für deine App benötigst, z.B. Kamera-Berechtigungen, wenn deine App die Kamera verwendet. Lese mehr über die Berechtigungen [hier](https://developer.apple.com/documentation/bundleresources/entitlements).
Make sure you have updated your `Info.plist` file with the same bundle ID as you entered in `gon-sign.json`. Here's an example `Info.plist` file: Stelle sicher, dass du deine `Info.plist` Datei mit der gleichen Bundle-ID wie die in der `gon-sign.json` eingegeben haben. Hier ist eine Beispiel `Info.plist` Datei:
```plist ```plist
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
@ -303,7 +303,7 @@ Make sure you have updated your `Info.plist` file with the same bundle ID as you
</dict></plist> </dict></plist>
``` ```
Now we're ready to add the signing step in our workflow after building the Wails app: Jetzt sind wir bereit, nach dem Erstellen der Wails App den Signaturschritt in unserem Workflow hinzuzufügen:
```yaml ```yaml
- name: Import Code-Signing Certificates for macOS - name: Import Code-Signing Certificates for macOS
@ -321,11 +321,11 @@ Now we're ready to add the signing step in our workflow after building the Wails
gon -log-level=info ./build/darwin/gon-sign.json gon -log-level=info ./build/darwin/gon-sign.json
``` ```
Please note that signing binaries with Apple could take anywhere from minutes to hours. Bitte beachte, dass die Signierung von Binärdateien mit Apple von Minuten zu Stunden dauern kann.
## Combined workflow file: ## Kombinierte Workflowdatei:
Here is our GitHub workflow file with Windows + macOS combined: Hier ist unsere GitHub Workflow-Datei mit Windows + macOS kombiniert:
```yaml ```yaml
name: "example combined" name: "example combined"
@ -396,6 +396,6 @@ jobs:
path: build/bin/* path: build/bin/*
``` ```
# End notes # Schluss Worte
This guide inspired by the RiftShare project and its workflow, which is highly recommended to check out [here](https://github.com/achhabra2/riftshare/blob/main/.github/workflows/build.yaml). Diese Anleitung ist vom RiftShare-Projekt und seinem Workflow inspiriert, der dringend empfohlen wird, [hier](https://github.com/achhabra2/riftshare/blob/main/.github/workflows/build.yaml) zu besuchen.

View file

@ -1,31 +1,30 @@
# Single Instance Lock # Einzelinstanz-Sperre
Single instance lock is a mechanism that allows you to prevent multiple instances of your app from running at the same time. Die Einzelinstanz-Sperre ist ein Mechanismus, mit dem verhindert werden kann, dass mehrere Instanzen der App zur gleichen Zeit laufen.
It is useful for apps that are designed to open files from the command line or from the OS file explorer. Es ist nützlich für Apps, die darauf ausgelegt sind, Dateien von der Kommandozeile oder vom OS-Datei-Explorer aus zu öffnen.
## Important ## Wichtig
Single Instance Lock does not implement a secure communications protocol between instances. When using single instance lock, Die Einzelinstanz-Sperre implementiert kein sicheres Kommunikationsprotokoll zwischen Instanzen. Wenn Einzelinstanz-Sperren verwendet werden, sollte die App alle Daten, die von einer zweiten Instanz über einen Callback geliefert werden, als nicht vertrauenswürdig behandeln.
your app should treat any data passed to it from second instance callback as untrusted. Es sollte sichergestellt, dass die empfangenen Args gültig sind und keine bösartigen Daten enthalten.
You should verify that args that you receive are valid and don't contain any malicious data.
## How it works ## So funktioniert es
Windows: Single instance lock is implemented using a named mutex. The mutex name is generated from the unique id that you provide. Data is passed to the first instance via a shared window using [SendMessage](https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-sendmessage) Windows: Einzelinstanz-Sperre wird mit einem benannten Mutex implementiert. Der Mutex-Name wird aus einer angegebenen eindeutigen Id generiert. Daten werden in einem geteilten Fenster über [SendMessage](https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-sendmessage) an die erste Instanz gesendet.
macOS: Single instance lock is implemented using a named mutex. The mutex name is generated from the unique id that you provide. Data is passed to the first instance via [NSDistributedNotificationCenter](https://developer.apple.com/documentation/foundation/nsdistributednotificationcenter) macOS: Die Einzelinstanz-Sperre wird mit einem benannten Mutex implementiert. Der Mutex-Name wird aus einer angegebenen eindeutigen Id generiert. Daten werden an die erste Instanz über [NSDistributedNotificationCenter](https://developer.apple.com/documentation/foundation/nsdistributednotificationcenter) übergeben.
Linux: Single instance lock is implemented using [dbus](https://www.freedesktop.org/wiki/Software/dbus/). The dbus name is generated from the unique id that you provide. Data is passed to the first instance via [dbus](https://www.freedesktop.org/wiki/Software/dbus/) Linux: Eine Einzelinstanz-Sperre wird mittels [dbus](https://www.freedesktop.org/wiki/Software/dbus/) implementiert. Der Mutex-Name wird aus einer angegebenen eindeutigen Id generiert. Daten werden an die erste Instanz über [dbus](https://www.freedesktop.org/wiki/Software/dbus/) weitergegeben
## Usage ## Benutzung
When creating your app, you can enable single instance lock by passing a `SingleInstanceLock` struct to the `App` struct. Beim Erstellen deiner App kannst du einzelne Instanzsperren aktivieren, indem du einen `SingleInstanceLock` struct an die `App` struct übergibst.
Use the `UniqueId` field to specify a unique id for your app. Benutze das Feld `UniqueId` um eine eindeutige Id für deine App anzugeben.
This id is used to generate the mutex name on Windows and macOS and the dbus name on Linux. Use a UUID to ensure that the id is unique. Diese Id wird verwendet, um den Mutex-Namen unter Windows und macOS und den dbus-Namen unter Linux zu erzeugen. Verwende eine UUID, um sicherzustellen, dass die Id einzigartig ist.
The `OnSecondInstanceLaunch` field is used to specify a callback that is called when a second instance of your app is launched. Das Feld „OnSecondInstanceLaunch“ wird verwendet, um einen Callback anzugeben, der aufgerufen wird, wenn eine zweite Instanz deiner App gestartet wird.
The callback receives a `SecondInstanceData` struct that contains the command line arguments passed to the second instance and the working directory of the second instance. Der Callback erhält einen `SecondInstanceData` Struct der die an die zweite Instanz übergebenen Kommandozeilenargumente und das Arbeitsverzeichnis der zweiten Instanz enthält.
Note that OnSecondInstanceLaunch don't trigger windows focus. Beachte, dass OnSecondInstanceLaunch keinen Fensterfokus auslöst.
You need to call `runtime.WindowUnminimise` and `runtime.Show` to bring your app to the front. Du musst `runtime.WindowUnminimise` und `runtime.Show` aufrufen, um deine App nach vorne zu bringen.
Note that on linux systems window managers may prevent your app from being brought to the front to avoid stealing focus. Beachte, dass Fenstermanager auf Linux-Systemen verhindern können, dass die App nach vorne gebracht wird, um den Fokus nicht zu stehlen.
```go title="main.go" ```go title="main.go"
var wailsContext *context.Context var wailsContext *context.Context

View file

@ -1,70 +1,70 @@
# SvelteKit # SvelteKit
This guide will go into: Diese Anleitung zeigt folgende Dinge:
1. Minimal Installation Steps - The steps needed to get a minimum Wails setup working for SvelteKit. 1. Minimale Installationsschritte Die erforderlichen Schritte, um eine minimale Wails-Konfiguration für SvelteKit zum Laufen zu bringen.
2. Install Script - Bash script for accomplishing the Minimal Installation Steps with optional Wails branding. 2. Installationsskript Bash-Skript zur Durchführung der minimalen Installationsschritte mit optionalem Wails-Branding.
3. Important Notes - Issues that can be encountered when using SvelteKit + Wails and fixes. 3. Wichtige Hinweise Probleme, die bei der Verwendung von SvelteKit + Wails auftreten können, und deren Behebung.
## 1. Minimal Installation Steps ## 1. Minimale Installationsschritte
##### Install Wails for Svelte. ##### Wails für Svelte installieren.
- `wails init -n myapp -t svelte` - `wails init -n myapp -t svelte`
##### Delete the svelte frontend. ##### Lösche das svelte frontend.
- Navigate into your newly created myapp folder. - Navigiere in deinen neu erstellten myapp Ordner.
- Delete the folder named "frontend" - Lösche den Ordner mit dem Namen "frontend"
##### While in the Wails project root. Use the Svelte CLI to create a SvelteKit project as the new frontend. Follow the prompts, nothing Wails specific is needed here. ##### Gehe in das Wails Stamm Projekt Verzeichnis. Benutze das Svelte CLI, um ein SvelteKit-Projekt als neues Frontend zu erstellen. Folge den Anweisungen, hier ist nichts Wails spezifisch erforderlich.
- `npx sv create frontend` - `npx sv create frontend`
##### Modify wails.json. ##### Ändere wails.json.
- Add `"wailsjsdir": "./frontend/src/lib",` Do note that this is where your Go and runtime functions will appear. - Füge `„wailsjsdir“: „./frontend/src/lib“,` hinzu. Beachte, dass hier deine Go- und Laufzeitfunktionen erscheinen werden.
- Change your package manager frontend here if not using npm. - Ändere hier deinen Frontendpaket-Manager, solltest du npm nicht verwenden.
##### Modify main.go. ##### Ändere main.go.
- The first comment `//go:embed all:frontend/dist` needs to be changed to `//go:embed all:frontend/build` - Der erste Kommentar `//go:embed all:frontend/dist` muss in `//go:embed all:frontend/build` geändert werden
##### Modify .gitignore ##### Ändere .gitignore
- The line `frontend/dist` needs to be replaced with `frontend/build` - Die Zeile `frontend/dist` muss durch `frontend/build` ersetzt werden
##### Install/remove dependencies using your favorite package manager. ##### Abhängigkeiten mit deinem bevorzugten Paketmanager installieren/entfernen.
- Navigate into your "frontend" folder. - Navigiere in deinen "Frontend" Ordner.
- `npm i` - `npm i`
- `npm uninstall @sveltejs/adapter-auto` - `npm uninstall @sveltejs/adapter-auto`
- `npm i -D @sveltejs/adapter-static` - `npm i -D @sveltejs/adapter-static`
##### Change adapter in svelte.config.js ##### Adapter in svelte.config.js ändern
- First line of file change `import adapter from '@sveltejs/adapter-auto';` to `import adapter from '@sveltejs/adapter-static';` - Änder in der ersten Zeile der Datei `import adapter from '@sveltejs/adapter-auto';` zu `import adapter from '@sveltejs/adapter-static';`
##### Put SvelteKit into SPA mode with prerendering. ##### SvelteKit in den SPA-Modus mit prerendering setzen.
- Create a file under myapp/frontend/src/routes/ named +layout.ts/+layout.js. - Erstelle eine Datei unter myapp/frontend/src/routes/ mit dem Namen +layout.ts/+layout.js.
- Add two lines into the newly created file `export const prerender = true` and `export const ssr = false` - Füge zwei Zeilen in die neu erstellte Datei `export const prerender = true` und `export const ssr = false` hinzu
##### Test installation. ##### Testinstallation.
- Navigate back into the Wails project root (one directory up). - Navigiere zurück zum Wails Stammprojektverzeichnis (ein Verzeichnis oben).
- run `wails dev` - führe `wails dev` aus
- If the application doesn't run please check through the previous steps. - Falls die Anwendung nicht läuft, überprüfe bitte die vorherigen Schritte.
## 2. Install Script ## 2. Installations Skript
##### This Bash Script does the steps listed above. Make sure to read over the script and understand what the script is doing on your computer. ##### Dieses Bash-Skript führt die oben aufgeführten Schritte aus. Stelle sicher, dass du über das Skript liest und verstehst, was das Skript auf deinem Computer macht.
- Create a file sveltekit-wails.sh - Erstelle die Datei sveltekit-wails.sh
- Copy the below code into the new file then save it. - Kopiere den folgenden Code in die neue Datei und speicher diese.
- Make it executable with `chmod +x sveltekit-wails.sh` - Mache das Skipt ausführbar mit `chmod +x sveltekit-wails.sh`
- Brand is an optional param below that adds back in the wails branding. Leave third param blank to not insert the Wails branding. - Brand ist ein optionaler Parameter, der das Branding von Wails wieder einfügt. Lasse den dritten Parameter leer, um das Branding von Wails nicht einzufügen.
- Example usage: `./sveltekit-wails.sh pnpm newapp brand` - Beispiel Verwendung: `./sveltekit-wails.sh pnpm newapp brand`
##### sveltekit-wails.sh: ##### sveltekit-wails.sh:
@ -100,17 +100,17 @@ cd ..
wails dev wails dev
``` ```
## 3. Important Notes ## 3. Wichtige Notizen
##### Server files will cause build failures. ##### Serverdateien führen zu Build-Fehlern.
- \+layout.server.ts, +page.server.ts, +server.ts or any file with "server" in the name will fail to build as all routes are prerendered. - \+layout.server.ts, +page.server.ts, +server.ts oder jede Datei mit "Server" im Namen wird nicht builden, da alle Routen prerendered werden.
##### The Wails runtime unloads with full page navigations! ##### Die Wails-Laufzeitumgebung entlädt sich bei vollständiger Seitennavigation!
- Anything that causes full page navigations: `window.location.href = '/<some>/<page>'` or Context menu reload when using wails dev. What this means is that you can end up losing the ability to call any runtime breaking the app. There are two ways to work around this. - Alles, was eine vollständige Seitennavigation verursacht: `window.location.href = '/<some>/<page>'` oder Nachladen des Kontextmenüs bei Verwendung von wails dev. Das bedeutet, dass du am Ende die Möglichkeit verlieren könnest, jede beliebige Laufzeit Funktion aufzurufen, da diese die App crasht. Es gibt zwei Wege, dies zu umgehen.
- Use `import { goto } from '$app/navigation'` then call `goto('/<some>/<page>')` in your +page.svelte. This will prevent a full page navigation. - Benutze `import { goto } von '$app/navigation'` und rufe dann `goto('/<some>/<page>')` in deiner +page.svelte auf. Dadurch wird eine vollständige Seitennavigation verhindert.
- If full page navigation can't be prevented the Wails runtime can be added to all pages by adding the below into the `<head>` of myapp/frontend/src/app.html - Wenn die Ganzseitennavigation nicht verhindert werden kann, kann die Wails-Laufzeit zu allen Seiten hinzugefügt werden, indem die folgende Zeile `<head>` in myapp/frontend/src/app.html eingefügt wird
``` ```
<head> <head>
@ -122,17 +122,17 @@ wails dev
</head> </head>
``` ```
See https://wails.io/docs/guides/frontend for more information. Siehe https://wails.io/docs/guides/frontend für weitere Informationen.
##### Initial data can be loaded and refreshed from +page.ts/+page.js to +page.svelte. ##### Anfangsdaten können von +page.ts/+page.js bis +page.svelte geladen und aktualisiert werden.
- \+page.ts/+page.js works well with load() https://kit.svelte.dev/docs/load#page-data - \+page.ts/+page.js funktioniert gut mit load() https://kit.svelte.dev/docs/load#page-data
- invalidateAll() in +page.svelte will call load() from +page.ts/+page.js https://kit.svelte.dev/docs/load#rerunning-load-functions-manual-invalidation. - invalidateAll() in +page.svelte ruft load() von +page.ts/+page.js https://kit.svelte.dev/docs/load#rerunning-load-functions-manual-invalidation auf.
##### Error Handling ##### Fehlerbehandlung
- Expected errors using Throw error works in +page.ts/+page.js with a +error.svelte page. https://kit.svelte.dev/docs/errors#expected-errors - Erwartete Fehler bei Verwendung von „Throw error“ funktionieren in +page.ts/+page.js mit einer +error.svelte-Seite. https://kit.svelte.dev/docs/errors#erwartete Fehler
- Unexpected errors will cause the application to become unusable. Only recovery option (known so far) from unexpected errors is to reload the app. To do this create a file myapp/frontend/src/hooks.client.ts then add the below code to the file. - Unerwartete Fehler werden die Anwendung unbrauchbar machen. Die einzige bisher bekannte Wiederherstellungsoption ist es, die App neu zu laden. Erstelle dazu eine Datei in myapp/frontend/src/hooks.client.ts und füge den folgenden Code in die Datei ein.
``` ```
import { WindowReloadApp } from '$lib/wailsjs/runtime/runtime' import { WindowReloadApp } from '$lib/wailsjs/runtime/runtime'
@ -141,10 +141,10 @@ export async function handleError() {
} }
``` ```
##### Using Forms and handling functions ##### Formulare und Bearbeitungsfunktionen verwenden
- The simplest way is to call a function from the form is the standard, bind:value your variables and prevent submission `<form method="POST" on:submit|preventDefault={handle}>` - Der einfachste Weg ist, eine Funktion vom Formular aus aufzurufen, welche der Standard ist. Binde deine Variablen mit `bind:value` und verhindere das Absenden mit `<form method="POST" on:submit|preventDefault={handle}>`
- The more advanced way is to use:enhance (progressive enhancement) which will allow for convenient access to formData, formElement, submitter. The important note is to always cancel() the form which prevents server side behavior. https://kit.svelte.dev/docs/form-actions#progressive-enhancement Example: - Der fortgeschrittenere Weg ist use:enhance (progressive Erweiterung), was einen bequemen Zugriff auf Formatierdaten, formElement, Absender ermöglicht. Wichtig ist es, das Formular, das das Verhalten auf Serverseite verhindert, immer zu annullieren. https://kit.svelte.dev/docs/form-actions#progressive-enhancement Beispiel:
``` ```
<form method="POST" use:enhance={({cancel, formData, formElement, submitter}) => { <form method="POST" use:enhance={({cancel, formData, formElement, submitter}) => {

View file

@ -1,17 +1,17 @@
# Templates # Vorlagen
Wails generates projects from pre-created templates. In v1, this was a difficult to maintain set of projects that were subject to going out of date. In v2, to empower the community, a couple of new features have been added for templates: Wails generiert Projekte aus vorgefertigten Vorlagen. Bei v1 handelte es sich um eine schwer zu pflegende Reihe von Projekten, die veraltet sein konnten. In v2, um die Community zu stärken, wurden einige neue Funktionen für Vorlagen hinzugefügt:
- Ability to generate projects from [Remote Templates](../reference/cli.mdx#remote-templates) - Fähigkeit Projekte aus [Remote-Vorlagen](../reference/cli.mdx#remote-templates) zu generieren
- Tooling to help create your own templates - Werkzeuge, um deine eigenen Vorlagen zu erstellen
## Creating Templates ## Vorlage erstellen
To create a template, you can use the `wails generate template` command. To generate a default template, run: Um eine Vorlage zu erstellen, benutzt man den `wails generate template` Befehl. Um eine Standardvorlage zu erstellen, führe folgendes aus:
`wails generate template -name mytemplate` `wails generate template -name mytemplate`
This creates the directory "mytemplate" with default files: Erstellt das Verzeichnis "mytemplate" mit den Standarddateien:
```shell title=mytemplate/ ```shell title=mytemplate/
. .
@ -35,31 +35,31 @@ This creates the directory "mytemplate" with default files:
`-- wails.tmpl.json `-- wails.tmpl.json
``` ```
### Template Overview ### Vorlagenübersicht
The default template consists of the following files and directories: Die Standardvorlage besteht aus folgenden Dateien und Verzeichnissen:
| Filename / Dir | Description | | Dateiname / Verzeichnis | Beschreibung |
| --------------- | -------------------------------------------- | | ----------------------- | -------------------------------------------------- |
| NEXTSTEPS.md | Instructions on how to complete the template | | NEXTSTEPS.md | Anleitung zur Fertigstellung der Vorlage |
| README.md | The README published with the template | | README.md | Die README die mit der Vorlage veröffentlicht wird |
| app.tmpl.go | `app.go` template file | | app.tmpl.go | `app.go` Template-Datei |
| frontend/ | The directory containing frontend assets | | frontend/ | Verzeichnis mit Frontend-Assets |
| go.mod.tmpl | `go.mod` template file | | go.mod.tmpl | `go.mod` Template-Datei |
| main.tmpl.go | `main.go` template file | | main.tmpl.go | `main.go` Template-Datei |
| template.json | The template metadata | | template.json | Die Vorlagen Metadaten |
| wails.tmpl.json | `wails.json` template file | | wails.tmpl.json | `wails.json` Template-Datei |
At this point it is advisable to follow the steps in `NEXTSTEPS.md`. An dieser Stelle ist es ratsam, die Schritte in `NEXTSTEPS.md` zu folgen.
## Creating a Template from an Existing Project ## Erstellen einer Vorlage aus einem existierenden Projekt
It's possible to create a template from an existing frontend project by passing the path to the project when generating the template. We will now walk through how to create a Vue 3 template: Es ist möglich, eine Vorlage aus einem bestehenden Frontend-Projekt zu erstellen, indem der Pfad an das Projekt übergeben wird, wenn die Vorlage generiert wird. Wir werden nun durch die Erstellung einer Vue 3 Vorlage gehen:
- Install the vue cli: `npm install -g @vue/cli` - Installiere das vue cli: `npm install -g @vue/cli`
- Create the default project: `vue create vue3-base` - Erstelle das Standardprojekt: `vue create vue3-base`
- Select `Default (Vue 3) ([Vue 3] babel, eslint)` - Wähle `Standard (Vue 3) ([Vue 3] babel, eslint)`
- After the project has been generated, run: - Nachdem das Projekt generiert wurde, führe es aus:
```shell ```shell
> wails generate template -name wails-vue3-template -frontend .\vue3-base\ > wails generate template -name wails-vue3-template -frontend .\vue3-base\
@ -71,11 +71,11 @@ Updating package-lock.json data...
Renaming package-lock.json -> package-lock.tmpl.json... Renaming package-lock.json -> package-lock.tmpl.json...
``` ```
- The template may now be customised as specified in the `NEXTSTEPS.md` file - Die Vorlage kann jetzt angepasst werden, wie in der Datei `NEXTSTEPS.md` angegeben
- Once the files are ready, it can be tested by running: `wails init -n my-vue3-project -t .\wails-vue3-template\` - Sobald die Dateien fertig sind, kann die Vorlage getestet werden: `wails init -n my-vue3-project -t .\wails-vue3-template\`
- To test the new project, run: `cd my-vue3-project` then `wails build` - Um das neue Projekt zu testen, führe folgende Befehle aus: `cd my-vue3-project` dann `wails build`
- Once the project has compiled, run it: `.\build\bin\my-vue3-project.exe` - Sobald das Projekt kompiliert wurde, führe es aus: `.\build\bin\my-vue3-project.exe`
- You should have a fully functioning Vue3 application: - Du solltest nun eine voll funktionsfähige Vue3-Anwendung haben:
```mdx-code-block ```mdx-code-block
<div className="text--center"> <div className="text--center">
@ -86,12 +86,12 @@ Renaming package-lock.json -> package-lock.tmpl.json...
</div> </div>
``` ```
## Publishing Templates ## Vorlagen veröffentlichen
Publishing a template is simply pushing the files to GitHub. The following best practice is encouraged: Das Veröffentlichen einer Vorlage führt einfach dazu, dass die Dateien auf GitHub hochgeladen werden. Folgende bewährte Verfahren werden bevorzugt:
- Remove any unwanted files and directories (such as `.git`) from your frontend directory - Entferne unerwünschte Dateien und Verzeichnisse (wie `.git`) aus deinem Frontend-Verzeichnis
- Ensure that `template.json` is complete, especially `helpurl` - Stelle sicher, dass `template.json` vollständig ist, insbesondere `helpurl`
- Push the files to GitHub - Das pushen der Dateien zu GitHub
- Create a PR on the [Community Templates](../community/templates.mdx) page - PR auf der [Community-Vorlagen](../community/templates.mdx) Seite erstellen
- Announce the template on the [Template Announcement](https://github.com/wailsapp/wails/discussions/825) discussion board - Die Vorlage im [Template Announcement](https://github.com/wailsapp/wails/discussions/825) Diskussionsforum ankündigen

View file

@ -1,25 +1,25 @@
# Troubleshooting # Problembehandlung
An assortment of troubleshooting tips. Eine Auswahl an Tipps zur Fehlerbehebung.
## The `wails` command appears to be missing? ## Der `wails` Befehl fehlt?
If your system is reporting that the `wails` command is missing, make sure you have followed the Go installation guide correctly. Normally, it means that the `go/bin` directory in your User's home directory is not in the `PATH` environment variable. You will also normally need to close and reopen any open command prompts so that changes to the environment made by the installer are reflected at the command prompt. Wenn das System meldet, dass der `wails` Befehl fehlt, stelle sicher, dass die Go-Installationsanleitung korrekt befolgt wurde. Normalerweise bedeutet dies, dass sich das `go/bin` Verzeichnis im Home-Verzeichnis deines Benutzers nicht in der `PATH` Umgebungsvariable befindet. Normalerweise müssen alle Eingabeaufforderungen geschlossen und neu geöffnet werden, so dass Änderungen an der Umgebung des Installers in der Eingabeaufforderung übernommen werden.
## My application is displaying a white/blank screen ## Meine Anwendung zeigt einen weißen/leeren Bildschirm an
Check that your application includes the assets from the correct directory. In your `main.go` file, you will have something similar to the following code: Überprüfe, ob deine Anwendung die Assets aus dem richtigen Verzeichnis enthält. In deiner `main.go` Datei hast du etwas Ähnliches wie den folgenden Code:
```go ```go
//go:embed all:frontend/dist //go:embed all:frontend/dist
var assets embed.FS var assets embed.FS
``` ```
Check that `frontend/dist` contains your application assets. Stelle sicher, dass `frontend/dist` deine Applikations-Assets enthält.
### Mac ### Mac
If this happens on Mac, try adding the following to your `Info.plist`: Wenn dies auf dem Mac geschieht, versuche folgendes zu deiner `Info.plist` hinzuzufügen:
```xml ```xml
<key>NSAppTransportSecurity</key> <key>NSAppTransportSecurity</key>
@ -29,11 +29,11 @@ If this happens on Mac, try adding the following to your `Info.plist`:
</dict> </dict>
``` ```
Reference: https://github.com/wailsapp/wails/issues/1504#issuecomment-1174317433 Referenz: https://github.com/wailsapp/wails/issues/1504#issuecomment-1174317433
## Mac application not valid ## Mac-Anwendung ungültig
If your built application looks like this in finder: Wenn deine erstellte Anwendung im Finder so aussieht:
```mdx-code-block ```mdx-code-block
<p className="text--center"> <p className="text--center">
@ -45,17 +45,17 @@ If your built application looks like this in finder:
</p> </p>
``` ```
it's likely that your application's `info.plist` is invalid. Update the file in `build/<yourapp>.app/Contents/info.plist` and check if the data is valid, EG check the binary name is correct. To persist the changes, copy the file back to the `build/darwin` directory. ist es wahrscheinlich, dass die Anwendungs `info.plist` ungültig ist. Aktualisiere die Datei in `build/<yourapp>.app/Contents/info.plist` und prüfe, ob die Daten gültig sind, z.B. prüfe, ob der Binärname korrekt ist. Um die Änderungen fortzusetzen, kopiere die Datei zurück in das Verzeichnis `build/darwin`.
## My application is not displaying the correct icon in Windows Explorer ## Meine Anwendung zeigt nicht das richtige Symbol im Windows Explorer an
If your application is not displaying the correct icon, try deleting the hidden `IconCache.db` file located in the `C:\Users\&#060;your username&#062;\AppData\Local` directory. This will force Windows to rebuild the icon cache. Wenn deine Anwendung nicht das richtige Symbol anzeigt, lösche die versteckte `IconCache.db` Datei im `C:\Users\&#060;dein Benutzername&#062;\AppData\Local` Verzeichnis. Dies zwingt Windows, den Symbol-Cache neu zu erstellen.
Source: https://github.com/wailsapp/wails/issues/2360#issuecomment-1556070036 Quelle: https://github.com/wailsapp/wails/issues/2360#issuecomment-1556070036
## Cannot call backend method from frontend with variadic arguments ## Backend-Methode kann nicht im Frontend mit variadischen Argumenten aufgerufen werden
If you have a backend method defined with variadic parameters, eg: Wenn du eine Backend-Methode mit variadischen Parametern definiert hast, z. B:
```go ```go
func (a *App) TestFunc(msg string, args ...interface{}) error { func (a *App) TestFunc(msg string, args ...interface{}) error {
@ -63,7 +63,7 @@ func (a *App) TestFunc(msg string, args ...interface{}) error {
} }
``` ```
calling this method from the frontend like this will fail: wenn diese Methode aus dem Frontned aus so aufgerufen wird, wird dies fehlschlagen:
```js ```js
var msg = "Hello: "; var msg = "Hello: ";
@ -77,7 +77,7 @@ window.go.main.App.TestFunc(msg, ...args)
}); });
``` ```
Workaround: Übergangslösung:
```js ```js
var msg = "Hello "; var msg = "Hello ";
@ -94,30 +94,30 @@ window.go.main.App.TestFunc(msg, args)
Credit: https://github.com/wailsapp/wails/issues/1186 Credit: https://github.com/wailsapp/wails/issues/1186
## I'm having getting proxy errors when trying to install Wails ## Ich habe Proxy-Fehler beim Installieren von Wails
If you are getting errors like this: Wenn du solche Fehler bekommst:
``` ```
"https://proxy.golang.org/github.com/wailsapp/wails/cmd/wails/@v/list": dial tcp 172.217.163.49:443: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. "https://proxy.golang.org/github.com/wailsapp/wails/cmd/wails/@v/list": dial tcp 172.217.163.49:443: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
``` ```
it's probably because the official Go Proxy is being blocked (Users in China have reported this). The solution is to set up the proxy manually, eg: ist es wahrscheinlich daran, dass der offizielle Go-Proxy blockiert wird (Benutzer in China haben dies gemeldet). Die Lösung besteht darin, den Proxy manuell einzurichten, z. B:
``` ```
go env -w GO111MODULE=on go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct go env -w GOPROXY=https://goproxy.cn,direct
``` ```
Source: https://github.com/wailsapp/wails/issues/1233 Quelle: https://github.com/wailsapp/wails/issues/1233
## The generated TypeScript doesn't have the correct types ## Der generierte TypeScript-Code hat nicht die richtigen Typen
Sometimes the generated TypeScript doesn't have the correct types. To mitigate this, it is possible to specify what types should be generated using the `ts_type` struct tag. For more details, please read [this](https://github.com/tkrajina/typescriptify-golang-structs#custom-types). Manchmal hat der generierte TypeScript-Code nicht die richtigen Typen. Um dies zu migrieren, ist es möglich, mit dem `ts_type` struct-Tag anzugeben, welche Typen erzeugt werden sollen. Für weitere Details ließ bitte [diese](https://github.com/tkrajina/typescriptify-golang-structs#custom-types) Seite.
## When I navigate away from `index.html`, I am unable to call methods on the frontend ## Wenn ich von `index.html` weg navigiere, kann ich keine Methoden mehr im Frontend aufrufen
If you navigate away from `index.html` to a new html file, the context will be lost. This can be fixed by adding the following imports to the `<head>` section of any new page you navigate to: Wenn du von `index.html` zu einer neuen Html-Datei wechselst, geht der Kontext verloren. Dies kann durch das Hinzufügen von folgenden Importen in die `<head>` Sektion einer neuen Seite korrigiert werden:
```html ```html
<head> <head>
@ -126,17 +126,17 @@ If you navigate away from `index.html` to a new html file, the context will be l
</head> </head>
``` ```
Source: https://github.com/wailsapp/wails/discussions/1512 Quelle: https://github.com/wailsapp/wails/discussions/1512
## I get `too many open files` errors on my Mac when I run `wails dev` ## Ich bekomme den `too many open files` Fehler auf meinem Mac, wenn ich `wails dev` ausführe
By default, macOS will only allow you to open a maximum of 256 files. This can affect the `wails dev` command. This limit can be increased by running: `ulimit -n 1024` in the terminal. Standardmäßig erlaubt macOS nur das Öffnen von maximal 256 Dateien. Dies kann den Befehl `wails dev` beeinflussen. Dieses Limit kann durch den Befehl `ulimit -n 1024` im Terminal erhöht werden.
FSNotify is [looking to move to Apple's fsevents](https://github.com/fsnotify/fsnotify/issues/11) for Mac. If this isn't completed soon, we will create our own implementation, tracked [here](https://github.com/wailsapp/wails/issues/1733). FSNotify will [auf Apples fsevents](https://github.com/fsnotify/fsnotify/issues/11) für Mac umsteigen. Wenn dies nicht bald abgeschlossen ist, erstellen wir unsere eigene Implementierung, siehe [hier](https://github.com/wailsapp/wails/issues/1733).
## My Mac app gives me weird compilation errors ## Meine Mac-App gibt mir seltsame Kompilierungsfehler
A few users have reported seeing compilation errors such as the following: Einige Benutzer haben gemeldet, dass sie Fehler bei der Kompilierung sehen, wie zum Beispiel:
```shell ```shell
# github.com/wailsapp/wails/v2/internal/frontend/desktop/darwin # github.com/wailsapp/wails/v2/internal/frontend/desktop/darwin
@ -149,19 +149,19 @@ In file included from /Library/Developer/CommandLineTools/SDKs/MacOSX12.1.sdk/Sy
#define NS_FORMAT_ARGUMENT(A) __attribute__ ((format_arg(A))) #define NS_FORMAT_ARGUMENT(A) __attribute__ ((format_arg(A)))
``` ```
This is _normally_ due to a mismatch with the OS version you are running and the version of the XCode Command Line Tools installed. If you see an error like this, try upgrading your XCode Command Line Tools to the latest version. Dies liegt _normalerweise_ an einer Unstimmigkeit zwischen der von dir verwendeten Betriebssystemversion und der Version der installierten XCode Command Line Tools. Wenn du einen solchen Fehler siehst, aktualisiere deine XCode Command Line Tools auf die neueste Version.
If reinstalling Xcode Command Tools still fails, you can check the path where the toolkit is located using: Wenn die Neuinstallation von Xcode Command Tools noch fehlschlägt, kannst du den Pfad des Toolkits überprüfen:
`xcode-select -p` `xcode-select -p`
If `/Applications/Xcode.app/Contents/Developer` is displayed, run `sudo xcode-select --switch /Library/Developer/CommandLineTools` Wenn `/Applications/Xcode.app/Contents/Developer` angezeigt wird, führe `sudo xcode-select --switch /Library/Developer/CommandLineTools` aus
Sources: https://github.com/wailsapp/wails/issues/1806 and https://github.com/wailsapp/wails/issues/1140#issuecomment-1290446496 Quellen: https://github.com/wailsapp/wails/issues/1806 und https://github.com/wailsapp/wails/issues/1140#issuecomment-1290446496
## My application won't compile on Mac ## Meine Anwendung wird nicht auf Mac kompiliert
If you are getting errors like this: Wenn du solche Fehler bekommst:
```shell ```shell
l1@m2 GoEasyDesigner % go build -tags dev -gcflags "all=-N -l" l1@m2 GoEasyDesigner % go build -tags dev -gcflags "all=-N -l"
@ -172,30 +172,30 @@ Undefined symbols for architecture arm64:
ld: symbol(s) not found for architecture arm64 ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation) clang: error: linker command failed with exit code 1 (use -v to see invocation)
``` ```
Ensure you have the latest SDK installed. If so and you're still experiencing this issue, try the following: Vergewissere dich, dass du das neueste SDK installiert hast. Solltest du trotzdem denselben Fehler erhalten, versuche folgendes:
```shell ```shell
export CGO_LDFLAGS="-framework UniformTypeIdentifiers" && go build -tags dev -gcflags "all=-N -l" export CGO_LDFLAGS="-Framework UniformTypeIdentifiers" && go build -tags dev -gcflags "all=-N -l"
``` ```
Sources: https://github.com/wailsapp/wails/pull/2925#issuecomment-1726828562 Quelle: https://github.com/wailsapp/wails/pull/2925#issuecomment-1726828562
-- --
## Cannot start service: Host version "x.x.x does not match binary version "x.x.x" ## Dienst kann nicht gestartet werden: Host-Version "x.x.x stimmt nicht mit der Binärversion "x.x.x" überein
It's preferable to add `frontend/node_modules` and `frontend/package-lock.json` to your `.gitignore`. Otherwise when opening your repository on another machine that may have different versions of Node installed, you may not be able to run your application. Es ist besser, `frontend/node_modules` und `frontend/package-lock.json` zu deiner `.gitignore` hinzuzufügen. Andernfalls kann es vorkommen, dass du deine Anwendung nicht ausführen kannst, wenn du das Repository auf einem anderen Computer öffnest, auf dem möglicherweise andere Versionen von Node installiert sind.
If this does happen, simply delete `frontend/node_modules` and `frontend/package-lock.json` and run your `wails build` or `wails dev` command again. Falls das der Fall ist, lösche `frontend/node_modules` und `frontend/package-lock.json` und führe den `wails build` oder `wails dev` Befehl erneut aus.
## Build process stuck on "Generating bindings" ## Der Build Prozess hat sich bei "Generating bindings" aufgehängt
Bindings generation process runs your application in a special mode. If application, intentionally or unintentionally, contains an endless loop (i.e. not exiting after `wails.Run()` finished), this can lead to build process stuck on the stage of bindings generation. Please make sure your code exits properly. Das Erzeugen von Verknüpfungen führt deine Anwendung in einem speziellen Modus aus. Wenn die Anwendung, absichtlich oder unabsichtlich, eine Endlosschleife enthält (d.h. nicht beendet wird, nachdem `wails.Run()` beendet wurde), kann dies dazu führen, dass der Erstellungsprozess in der Phase der Verknüpfungserzeugung stecken bleibt. Bitte vergewissere dich, dass dein Code korrekt endet.
## Mac application flashes white at startup ## Beim Start blinkt die Mac-Anwendung weiß
This is due to the default background of the webview being white. If you want to use the window background colour instead, you can make the webview background transparent using the following config: Dies liegt daran, dass der Standard-Hintergrund der Webview weiß ist. Wenn du stattdessen die Hintergrundfarbe des Fensters verwenden möchtest, kannst du den Hintergrund des Webviews mit der folgenden Konfiguration transparent machen:
```go ```go
err := wails.Run(&options.App{ err := wails.Run(&options.App{
@ -209,26 +209,26 @@ This is due to the default background of the webview being white. If you want to
}) })
``` ```
## I get a "Microsoft Edge can't read or write to its data directory" error when running my program as admin on Windows ## Ich bekomme einen "Microsoft Edge can't read or write to its data directory" Fehler wenn ich mein Programm als Administrator unter Windows laufen lasse
You set your program to require admin permissions and it worked great! Unfortunately, some users are seeing a "Microsoft Edge can't read or write to its data directory" error when running it. Du hast dein Programm so eingestellt, dass es Administratorrechte benötigt, und es hat super funktioniert! Leider sehen einige Benutzer den Fehler "Microsoft Edge can't read or write to its data directory" beim ausführen der Anwendung.
When a Windows machine has two local accounts: Wenn ein Windows-Rechner zwei lokale Konten hat:
- Alice, an admin - Alice, ein Admin
- Bob, a regular user - Bob, ein normaler Benutzer
Bob sees a UAC prompt when running your program. Bob enters Alice's admin credentials into this prompt. The app launches with admin permissions under Alice's account. Bob sieht einen UAC-Prompt beim Ausführen deines Programms. Bob gibt Alices Administrator-Anmeldedaten in diese Eingabeaufforderung ein. Die App startet mit Administratorberechtigungen unter Alices Konto.
Wails instructs WebView2 to store user data at the specified `WebviewUserDataPath`. It defaults to `%APPDATA%\[BinaryName.exe]`. Wails weist das WebView2 an, Benutzerdaten im angegebenen `WebviewUserDataPath` zu speichern. Standardmäßig `%APPDATA%\[BinaryName.exe]`.
Because the application is running under Alice's account, `%APPDATA%\[BinaryName.exe]` resolves to `C:\Users\Alice\AppData\Roaming\[BinaryName.exe]`. Da die Anwendung unter Alices Konto läuft, wird `%APPDATA%\[BinaryName.exe]` zu `C:\Users\Alice\AppData\Roaming\[BinaryName.exe]` aufgelöst.
WebView2 [creates some child processes under Bob's logged-in account instead of Alice's admin account](https://github.com/MicrosoftEdge/WebView2Feedback/issues/932#issue-807464179). Since Bob cannot access `C:\Users\Alice\AppData\Roaming\[BinaryName.exe]`, the "Microsoft Edge can't read or write to its data directory" error is shown. WebView2 [erstellt einige untergeordnete Prozesse unter Bobs eingeloggtem Account anstelle von Alices Admin-Konto](https://github.com/MicrosoftEdge/WebView2Feedback/issues/932#issue-807464179). Da Bob nicht auf `C:\Users\Alice\AppData\Roaming\[BinaryName.exe]`zugreifen kann, wird der Fehler "Microsoft Edge can't read or write to its data directory" angezeigt.
Possible solution #1: Mögliche Lösung #1:
Refactor your application to work without constant admin permissions. If you just need to perform a small set of admin tasks (such as running an updater), you can run your application with the minimum permissions and then use the `runas` command to run these tasks with admin permissions as needed: Refactor your application to work without constant admin permissions. Wenn du nur eine kleine Anzahl von Verwaltungsaufgaben ausführen musst (z. B. einen Updater), kannst du deine Anwendung mit den minimalen Berechtigungen ausführen und dann den Befehl `runas` verwenden, um diese Aufgaben bei Bedarf mit Verwaltungsberechtigungen auszuführen:
```go ```go
//go:build windows //go:build windows
@ -240,7 +240,7 @@ import (
"syscall" "syscall"
) )
// Calling RunAs("C:\path\to\my\updater.exe") shows Bob a UAC prompt. Bob enters Alice's admin credentials. The updater launches with admin permissions under Alice's account. // Calling RunAs("C:\path\to\my\updater.exe") shows Bob a UAC prompt. Bob enters Alice's admin credentials. Der Updater startet mit Admin-Berechtigungen unter Alices Konto.
func RunAs(path string) error { func RunAs(path string) error {
verbPtr, _ := syscall.UTF16PtrFromString("runas") verbPtr, _ := syscall.UTF16PtrFromString("runas")
exePtr, _ := syscall.UTF16PtrFromString(path) exePtr, _ := syscall.UTF16PtrFromString(path)
@ -257,9 +257,9 @@ func RunAs(path string) error {
} }
``` ```
Possible solution #2: Mögliche Lösung #2:
Run your application with extended permissions. If you absolutely must run with constant admin permissions, WebView2 will function correctly if you use a data directory accessible by both users and you also launch your app with the `SeBackupPrivilege`, `SeDebugPrivilege`, and `SeRestorePrivilege` permissions. Here's an example: Führe deine Anwendung mit erweiterten Berechtigungen aus. Wenn du unbedingt mit konstanten Administratorrechten arbeiten willst, funktioniert WebView2 korrekt, auch wenn du ein Datenverzeichnis verwendest, auf dem beide Benutzer zugreifen können, vorrausgestzt du startest deine Anwendung mit folgenden Rechten: `SeBackupPrivilege`, `SeDebugPrivilege` und `SeRestorePrivilege`. Hier ist ein Beispiel:
```go ```go
package main package main
@ -352,17 +352,17 @@ func main() {
} }
``` ```
If you use a data directory accessible by both users but not the extended privileges, you will receive a WebView2 `80010108 The object invoked has disconnected from its clients` error. Wenn du ein Datenverzeichnis verwendest, auf das beide Benutzer Zugriff haben, aber nicht die erweiterten Rechte, erhälst du den WebView2 Fehler `80010108 The object invoked has disconnected from its clients`.
Possible future solution #3: [run WebView2 using an in-memory mode if implemented](https://github.com/MicrosoftEdge/WebView2Feedback/issues/3637#issuecomment-1728300982). Mögliche zukünftige Lösung #3: [führe das WebView2 über einen in-memory Modus aus, wenn dieser implementiert ist](https://github.com/MicrosoftEdge/WebView2Feedback/issues/3637#issuecomment-1728300982).
## WebView2 installation succeeded, but the wails doctor command shows that it is not installed ## WebView2 wurde erfolgreich installiert, obwohl der Befehl Wails Doctor anzeigt, dass WebView2 nicht installiert ist
If you have installed WebView2, but the `wails doctor` command shows that it is not installed, it is likely that the WebView2 runtime installed was for a different architecture. You can download the correct runtime from [here](https://developer.microsoft.com/en-us/microsoft-edge/webview2/). Wenn du das WebView2 installierst hast, aber der Befehl `wails doctor` anzeigt, dass es nicht installiert ist, ist es wahrscheinlich, dass die installierte WebView2-Laufzeit für eine andere Architektur war. Du kannst die korrekte Laufzeit [hier](https://developer.microsoft.com/en-us/microsoft-edge/webview2/) herunterladen.
Source: https://github.com/wailsapp/wails/issues/2917 Quelle: https://github.com/wailsapp/wails/issues/2917
## WebVie2wProcess failed with kind ## WebVie2wProcess failed with kind
If your Windows app generates this kind of error, you can check out what the error means [here](https://docs.microsoft.com/en-us/microsoft-edge/webview2/reference/winrt/microsoft_web_webview2_core/corewebview2processfailedkind?view=webview2-winrt-1.0.2045.28). Wenn deine Windows-App diese Art von Fehler erzeugt, kannst du [hier](https://docs.microsoft.com/en-us/microsoft-edge/webview2/reference/winrt/microsoft_web_webview2_core/corewebview2processfailedkind?view=webview2-winrt-1.0.2045.28) überprüfen, was der Fehler bedeutet.

View file

@ -1,15 +1,15 @@
# Visual Studio Code # Visual Studio Code
This page is for miscellaneous tips and tricks when using Visual Studio Code with Wails. Diese Seite ist für verschiedene Tipps und Tricks für die Verwendung von Visual Studio Code mit Wails.
## Vetur Configuration ## Vetur Konfiguration
Many thanks to [@Lyimmi](https://github.com/Lyimmi) for this tip. Originally posted [here](https://github.com/wailsapp/wails/issues/1791#issuecomment-1228158349). Vielen Dank an [@Lyimmi](https://github.com/Lyimmi) für diesen Tipp. Ursprünglich [hier](https://github.com/wailsapp/wails/issues/1791#issuecomment-1228158349) veröffentlicht.
Vetur is a popular plugin for Visual Studio Code that provides syntax highlighting and code completion for Vue projects. When loading a Wails project in VSCode, Vetur will throw an error as it is expecting to find the frontend project in the root directory. To fix this, you can do the following: Vetur ist ein beliebtes Plugin für Visual Studio Code, das Syntaxhervorhebung und Code-Fertigstellung für Vue Projekte bereitstellt. Beim Laden eines Wails Projekts in VSCode wirft Vetur einen Fehler, da erwartet wird, dass sich das Frontend-Projekt im Root-Verzeichnis befindet. Um das zu beheben, kannst du Folgendes tun:
Create a file named `vetur.config.js` in the project's root. Erstelle eine Datei mit dem Namen `vetur.config.js` im Stammverzeichnis des Projekts.
```javascript ```javascript
// vetur.config.js // vetur.config.js
@ -56,7 +56,7 @@ module.exports = {
} }
``` ```
Next, configure `frontend/tsconfig.json`: Als nächstes konfiguriere `frontend/tsconfig.json`:
```javascript ```javascript
{ {
@ -79,4 +79,4 @@ Next, configure `frontend/tsconfig.json`:
] ]
} }
``` ```
This should enable you to now use Vetur as expected. Das sollte es ermöglichen, Vetur wie erwartet zu verwenden.

View file

@ -1,4 +1,4 @@
# NSIS installer # NSIS-Installer
```mdx-code-block ```mdx-code-block
<p style={{ "text-align": "center" }}> <p style={{ "text-align": "center" }}>
@ -10,46 +10,46 @@
</p> </p>
``` ```
Wails supports generating Windows installers using the [NSIS installer](https://nsis.sourceforge.io/). Wails unterstützt die Generierung von Windows-Installern mit dem [NSIS Installer](https://nsis.sourceforge.io/).
## Installing NSIS ## NSIS installieren
### Windows ### Windows
The installer is available on the [NSIS Download](https://nsis.sourceforge.io/Download) page. Der Installer ist auf der [NSIS Download](https://nsis.sourceforge.io/Download) Seite verfügbar.
You can install with [Scoop](https://scoop.sh/) (which will automatically add it to your PATH): Du kannst diesen auch mit [Scoop](https://scoop.sh/) installieren (welcher diesen automatisch zu deinem PATH hinzufügt):
``` ```
scoop bucket add extras scoop bucket add extras
scoop install nsis scoop install nsis
``` ```
Or, you can use Winget (on Windows 10+): Eine weitere Option wäre die Installation mit Winget (bei Version von Windows 10+):
``` ```
winget install NSIS.NSIS --silent winget install NSIS.NSIS --silent
``` ```
If you use the chocolatey package manager, run the following script: Wenn du den chocolatey-Paketmanager verwendest, führe das folgende Skript aus:
``` ```
choco install nsis choco install nsis
``` ```
**NOTE:** If you install NSIS manually, you need to add the _Bin_ folder, which contains `makensis.exe`, in your NSIS installation to your path. [Here](https://www.architectryan.com/2018/03/17/add-to-the-path-on-windows-10/) is a good tutorial on how to add to path on Windows. **HINWEIS:** Wenn NSIS manuell installiert wurde, muss der Ordner _Bin_, der `makensis.exe` enthält, aus dem NSIS-Installationsverzeichnis zu deinem PATH hinzugefügt werden. [Hier](https://www.architectryan.com/2018/03/17/add-to-the-path-on-windows-10/) ist eine gute Anleitung, wie man dem Pfad unter Windows etwas hinzufügen kann.
### Linux ### Linux
The `nsis` package should be available through your distribution's package manager. Das `nsis` Paket sollte über den Paketmanager deiner Distribution verfügbar sein.
### MacOS ### MacOS
NSIS is available to install through homebrew: `brew install nsis`. NSIS kann über Homebrew installiert werden: `brew install nsis`.
## Generating the installer ## Generieren des Installers
When a new project is created, Wails generates the NSIS configuration files in `build/windows/installer`. The config data is read from `installer/info.json` and that is configured to use the project's `wails.json` Info section: Wenn ein neues Projekt erstellt wird, erzeugt Wails die NSIS-Konfigurationsdateien in `build/windows/installer`. Die Konfigurationsdaten werden von `installer/info.json` gelesen, welche so konfiguriert wurde, dass die Projektkonfiguration `wails.json` Info Sektion verwendet wird:
```json ```json
// ... // ...
@ -62,10 +62,10 @@ When a new project is created, Wails generates the NSIS configuration files in `
}, },
``` ```
To generate an installer for your application, use the `-nsis` flag with `wails build`: Um einen Installer für die Anwendung zu generieren, verwende die `-nsis` Flag mit `wails build`:
``` ```
wails build -nsis wails build -nsis
``` ```
The installer will now be available in the `build/bin` directory. Der Installer wird nun im `build/bin` Verzeichnis verfügbar sein.

View file

@ -1,39 +1,39 @@
# Windows # Windows
This page has miscellaneous guides related to developing Wails applications for Windows. Diese Seite enthält verschiedene Anleitungen zur Entwicklung von Wails Anwendungen für Windows.
## Handling the WebView2 Runtime Dependency ## Umgang mit der Laufzeitabhängigkeit von WebView2
Wails applications built for Windows have a runtime requirement on the Microsoft [WebView2 Runtime](https://developer.microsoft.com/en-us/microsoft-edge/webview2/). Windows 11 will have this installed by default, but some machines won't. Wails offers an easy approach to dealing with this dependency. Für builds auf Windows von Wails Anwendungen gibt es eine Laufzeitvoraussetzung von Microsoft für die [WebView2 Runtime](https://developer.microsoft.com/en-us/microsoft-edge/webview2/). Windows 11 wird diese standardmäßig installiert haben, dennoch gibt es einige Maschinen, die das nicht haben. Wails bietet einen einfachen Ansatz, um mit dieser Abhängigkeit umzugehen.
By using the `-webview2` flag when building, you can decide what your application will do when a suitable runtime is not detected (including if the installed runtime is too old). The four options are: Durch Verwendung der `-webview2` flag beim builden kann entschieden werden, was die Anwendung tun soll, wenn eine geeignete Laufzeit nicht erkannt wird (einschließlich, wenn die installierte Laufzeit zu alt ist). Die vier Optionen sind:
1. Download 1. Herunterladen
2. Embed 2. Einbetten
3. Browser 3. Browser
4. Error 4. Fehler
### Download ### Herunterladen
This option will prompt the user that no suitable runtime has been found and then offer to download and run the official bootstrapper from Microsoft's WebView2 site. If the user proceeds, the official bootstrapper will be downloaded and run. Diese Option weist den Benutzer darauf hin, dass keine passende Laufzeitumgebung gefunden wurde, und bietet anschließend den Download und die Ausführung des offiziellen Bootstrappers von der Microsoft WebView2-Website an. Wenn der Benutzer fortfährt, wird der offizielle Bootstrapper heruntergeladen und ausgeführt.
### Embed ### Einbetten
This option embeds the official bootstrapper within the application. If no suitable runtime has been found, the application will offer to run the bootstrapper. This adds ~150k to the binary size. Diese Option fügt den offiziellen Bootstrapper in die Anwendung ein. Wenn keine passende Laufzeit gefunden wurde, bietet die Anwendung an, den Bootstrapper auszuführen. Damit wird die Binärgröße um ~150k erhöht.
### Browser ### Browser
This option will prompt the user that no suitable runtime has been found and then offer to open a browser to the official WebView2 page where the bootstrapper can be downloaded and installed. The application will then exit, leaving the installation up to the user. Diese Option weist den Benutzer darauf hin, dass keine passende Laufzeitumgebung gefunden wurde, und bietet anschließend an, einen Browser zur offiziellen WebView2-Seite zu öffnen, auf der das Bootstrapper-Programm heruntergeladen und installiert werden kann. Die Anwendung wird anschließend beendet und die Installation wird dem Benutzer überlassen.
### Error ### Fehler
If no suitable runtime is found, an error is given to the user and no further action taken. Wenn keine passende Laufzeit gefunden wird, wird dem Benutzer ein Fehler gemeldet und es wird keine weitere Aktion durchgeführt.
## Fixed version runtime ## Feste Version der Laufzeit
Another way of dealing with webview2 dependency is shipping it yourself. You can download [fixed version runtime](https://developer.microsoft.com/microsoft-edge/webview2/#download-section) and bundle or download it with your application. Eine andere Möglichkeit, mit Webview2-Abhängigkeiten umzugehen, besteht darin, diese mit der Anwendung mit zu verschicken. [Feste Laufzeit Versionen](https://developer.microsoft.com/microsoft-edge/webview2/#download-section) können heruntergeladen und gebündelt, oder mit deiner Anwendung heruntergeladen werden.
Also, you should specify path to fixed version of webview2 runtime in the `windows.Options` structure when launching wails. Außerdem sollte der Pfad zur festen Version von der webview2 Laufzeit im `windows.Optionen` struct beim Starten von Wails angegeben werden.
```go ```go
wails.Run(&options.App{ wails.Run(&options.App{
@ -43,17 +43,17 @@ Also, you should specify path to fixed version of webview2 runtime in the `windo
}) })
``` ```
Note: When `WebviewBrowserPath` is specified, `error` strategy will be forced in case of minimal required version mismatch or invalid path to a runtime. Hinweis: Wenn `WebviewBrowserPath` angegeben ist, wird die `Fehler` Strategie erzwungen, um im Falle eines Fehlers mit der minimal benötigten Version oder eines ungültigen Pfades zu der Laufzeit reagieren zu können.
The downloaded file will be compressed (extension `.cab`), so you must extract it before using it, according to the instructions on the [official site](https://learn.microsoft.com/en-us/microsoft-edge/webview2/concepts/distribution#details-about-the-fixed-version-runtime-distribution-mode) should run in a terminal the following command to extract the file: Die heruntergeladene Datei ist komprimiert (Erweiterung `.cab`). Daher muss diese entpackt werden, bevor diese verwendet werden kann. Den Anweisungen auf der [offiziellen Seite](https://learn.microsoft.com/en-us/microsoft-edge/webview2/concepts/distribution#details-about-the-fixed-version-runtime-distribution-mode) zufolge soll folgender Befehl in einem Terminalfenster ausgeführt werden, um die Datei zu entpacken:
``` ```
expand {path to the package} -F:* {path to the destination folder} expand {path to the package} -F:* {path to the destination folder}
``` ```
## Spawning other programs ## Andere Programme ausführen
When spawning other programs, such as scripts, you will see the window appear on the screen. To hide the window, you can use the following code: Wenn andere Programme wie z. B. Skripte aufgerufen werden, erscheint das Fenster auf dem Bildschirm. Um das Fenster zu verstecken, kann folgender Code verwendet werden:
```go ```go
cmd := exec.Command("your_script.exe") cmd := exec.Command("your_script.exe")
@ -64,4 +64,4 @@ cmd.SysProcAttr = &syscall.SysProcAttr{
cmd.Start() cmd.Start()
``` ```
Solution provided by [sithembiso](https://github.com/sithembiso) on the [discussions board](https://github.com/wailsapp/wails/discussions/1734#discussioncomment-3386172). Lösung von [sithembiso](https://github.com/sithembiso) aus dem [Diskussionsforum](https://github.com/wailsapp/wails/discussions/1734#discussioncomment-3386172).

View file

@ -2,9 +2,9 @@
sidebar_position: 20 sidebar_position: 20
--- ---
# How does it work? # Wie funktioniert es?
A Wails application is a standard Go application, with a webkit frontend. The Go part of the application consists of the application code and a runtime library that provides a number of useful operations, like controlling the application window. The frontend is a webkit window that will display the frontend assets. Also available to the frontend is a JavaScript version of the runtime library. Finally, it is possible to bind Go methods to the frontend, and these will appear as JavaScript methods that can be called, just as if they were local JavaScript methods. Eine Wails Anwendung ist eine Standard-Go-Anwendung mit einem Webkit Frontend. Der Go-Teil der Anwendung besteht aus dem Anwendungscode und einer Laufzeitbibliothek, die eine Reihe nützlicher Operationen bietet, wie die Kontrolle des Anwendungsfensters. Das Frontend ist ein Webkit-Fenster, das die Frontend-Assets anzeigt. Im Frontend ist auch eine JavaScript- Version der Laufzeitbibliothek verfügbar. Schließlich ist es möglich, Go-Methoden an das Frontend zu binden. Diese erscheinen dann als JavaScript-Methoden, die aufgerufen werden können, als ob es sich um lokale JavaScript-Methoden handeln würde.
```mdx-code-block ```mdx-code-block
<div className="text--center"> <div className="text--center">
@ -12,11 +12,11 @@ A Wails application is a standard Go application, with a webkit frontend. The Go
</div> </div>
``` ```
## The Main Application ## Die Hauptanwendung
### Overview ### Übersicht
The main application consists of a single call to `wails.Run()`. It accepts the application configuration which describes the size of the application window, the window title, what assets to use, etc. A basic application might look like this: Die Hauptanwendung besteht aus einem einzigen Aufruf von `wails.Run()`. Es akzeptiert die App-Konfiguration, welche beispielsweise die Größe des Anwendungsfensters, den Fenstertitel, sowie welche Assets verwendet werden sollen, beschreibt. Eine einfache Anwendung könnte so aussehen:
```go title="main.go" ```go title="main.go"
package main package main
@ -71,51 +71,51 @@ func (b *App) Greet(name string) string {
} }
``` ```
### Options rundown ### Optionen
This example has the following options set: Dieses Beispiel hat die folgenden Optionen gesetzt:
- `Title` - The text that should appear in the window's title bar - `Titel` - Der Text, der in der Titelleiste des Fensters erscheinen soll
- `Width` & `Height` - The dimensions of the window - `Breite` & `Höhe` - Die Größe des Fensters
- `Assets` - The application's frontend assets - `Assets` - Frontend Assets der Anwendung
- `OnStartup` - A callback for when the window is created and is about to start loading the frontend assets - `OnStartup` - Ein Rückruf, welcher zwischen der Fenstererstellung und Frontend Asset Ladung aufgerufen wird
- `OnShutdown` - A callback for when the application is about to quit - `OnShutdown` - Ein Rückruf, der aufgerufen wird, sobald die Anwendung geschlossen wird
- `Bind` - A slice of struct instances that we wish to expose to the frontend - `Bind` - Ein slice von struct Instanzen, die im Frontend verfügbar sein sollen
A full list of application options can be found in the [Options Reference](reference/options.mdx). Eine vollständige Liste der Anwendungsoptionen in der [Optionenreferenz](reference/options.mdx).
#### Assets #### Assets
The `Assets` option is mandatory as you can't have a Wails application without frontend assets. Those assets can be any files you would expect to find in a web application - html, js, css, svg, png, etc. **There is no requirement to generate asset bundles** - plain files will do. When the application starts, it will attempt to load `index.html` from your assets and the frontend will essentially work as a browser from that point on. It is worth noting that there is no requirement on where in the `embed.FS` the files live. It is likely that the embed path uses a nested directory relative to your main application code, such as `frontend/dist`: Die Option `Assets` ist obligatorisch, da es keine Wails Anwendung ohne Frontend-Assets geben kann. Diese Assets können alle Dateien sein, die du in einer Web-Anwendung finden kannst - html, js, css, svg, png, etc. ** Es ist nicht erforderlich, Asset-Bundles zu generieren** - Source Dateien reichen aus. Wenn die Anwendung startet, wird versucht, aus den Assets, `Index.html` zu laden und von diesem Zeitpunkt an funktioniert das Frontend im Wesentlichen wie ein Browser. Nützlich, zu wissen ist, dass es keine Voraussetzungen dafür gibt, wo in der `embed.FS` die Dateien liegen. Es ist wahrscheinlich, dass der Embed Pfad ein verschachteltes Verzeichnis relativ zu dem Hauptanwendungscode verwendet, wie z.B. `frontend/dist`:
```go title="main.go" ```go title="main.go"
//go:embed all:frontend/dist //go:embed all:frontend/dist
var assets embed.FS var assets embed.FS
``` ```
At startup, Wails will iterate the embedded files looking for the directory containing `index.html`. All other assets will be loaded relative to this directory. Beim Start wird Wails die Embedded Dateien iterieren und nach dem Verzeichnis suchen, das `index.html` enthält. Alle anderen Assets werden relativ zu diesem Verzeichnis geladen.
As production binaries use the files contained in `embed.FS`, there are no external files required to be shipped with the application. Da Produktionsbinärdateien die in `embed.FS` enthaltenen Dateien verwenden, gibt es keine externen Dateien, die mit der Anwendung ausgeliefert werden müssen.
When running in development mode using the `wails dev` command, the assets are loaded off disk, and any changes result in a "live reload". The location of the assets will be inferred from the `embed.FS`. Beim Ausführen der Anwendung im Entwicklungsmodus, mit dem `wails dev` Befehl, werden die Assets von der Festplatte geladen, und alle Änderungen werden mit einem "live Reload" zur Verfügung gestellt. Der Standort der Assets wird vom `embed.FS` abgeleitet.
More details can be found in the [Application Development Guide](guides/application-development.mdx). Weitere Details in der [Anwendungs-Entwicklungs Anleitung](guides/application-development.mdx).
#### Application Lifecycle Callbacks #### Anwendungslaufzeit Callbacks
Just before the frontend is about to load `index.html`, a callback is made to the function provided in [OnStartup](reference/options.mdx#onstartup). A standard Go context is passed to this method. This context is required when calling the runtime so a standard pattern is to save a reference to in this method. Just before the application shuts down, the [OnShutdown](reference/options.mdx#onshutdown) callback is called in the same way, again with the context. There is also an [OnDomReady](reference/options.mdx#ondomready) callback for when the frontend has completed loading all assets in `index.html` and is equivalent of the [`body onload`](https://www.w3schools.com/jsref/event_onload.asp) event in JavaScript. It is also possible to hook into the window close (or application quit) event by setting the option [OnBeforeClose](reference/options.mdx#onbeforeclose). Kurz bevor das Frontend `index.html` lädt, wird ein Callback an die Funktion getätigt, die in [OnStartup](reference/options.mdx#onstartup) bereitgestellt wurde. Ein Standard-Go-Kontext wird an diese Methode übergeben. Dieser Kontext wird benötigt, wenn die Laufzeit aufgerufen wird, sodass ein Standardmuster eine Referenz in dieser Methode speichert. Kurz bevor die Anwendung herunterfährt, wird der [OnShutdown](reference/options.mdx#onshutdown) Callback auf die gleiche Art und Weise aufgerufen, erneut mit dem Kontext. Es gibt auch einen [OnDomReady](reference/options.mdx#ondomready) Rückruf für den Fall, dass das Frontend alle Assets in `Index.html` geladen hat, dieser ist gleichwertig mit dem [`body onload`](https://www.w3schools.com/jsref/event_onload.asp) Ereignis in JavaScript. Es ist auch möglich, das Schließen (oder Beenden von Anwendungen) des Fensters mit der Option [OnBeforeClose](reference/options.mdx#onbeforeclose) zu verknüpfen.
#### Method Binding #### Methodenverknüpfung
The `Bind` option is one of the most important options in a Wails application. It specifies which struct methods to expose to the frontend. Think of structs like "controllers" in a traditional web application. When the application starts, it examines the struct instances listed in the `Bind` field in the options, determines which methods are public (starts with an uppercase letter) and will generate JavaScript versions of those methods that can be called by the frontend code. Die `Bind` Option ist eine der wichtigsten Optionen in einer Wails Anwendung. Diese legt fest, welche struct Methoden zur Verwendung im Frontend zur Verfügung stehen sollen. Structs sind ähnlich zu Kontrollern einer traditionellen Webanwendung. Wenn die Anwendung startet, prüft sie die im Feld `Bind` aufgelisteten struct Instanzen, in den Optionen und bestimmt, welche Methoden öffentlich sind (beginnend mit einem Großbuchstaben) und erzeugt JavaScript-Versionen der Methoden, die im Frontend-Code aufgerufen werden können.
:::info Note :info Notiz
Wails requires that you pass in an _instance_ of the struct for it to bind it correctly Wails erfordert, dass du in eine _Instanz_ des structs weitergibst, damit es korrekt verknüpft werden kann
::: :::
In this example, we create a new `App` instance and then add this instance to the `Bind` option in `wails.Run`: In diesem Beispiel erstellen wir eine neue `App` Instanz und fügen diese Instanz der `Bind` Option in `wails.Run` hinzu:
```go {17,27} title="main.go" ```go {17,27} title="main.go"
package main package main
@ -162,7 +162,7 @@ func (a *App) Greet(name string) string {
} }
``` ```
You may bind as many structs as you like. Just make sure you create an instance of it and pass it in `Bind`: Es können so viele structs verknüpft werden, wie benötigt werden. Stelle sicher, dass eine Instanz erstellt wurde und in `Bind` verknüpft wurde:
```go {10-12} ```go {10-12}
//... //...
@ -182,7 +182,7 @@ You may bind as many structs as you like. Just make sure you create an instance
``` ```
You may bind enums types as well. In that case you should create array that will contain all possible enum values, instrument enum type and bind it to the app via `EnumBind`: Enum-Typen können auch verknüpft werden. In diesem Fall sollte ein Array erstellt werden, das alle möglichen Enum-Werte enthält. Verknüpfe das Enum mit der App über `EnumBind`:
```go {16-18} title="app.go" ```go {16-18} title="app.go"
type Weekday string type Weekday string
@ -232,26 +232,26 @@ var AllWeekdays = []struct {
``` ```
When you run `wails dev` (or `wails generate module`), a frontend module will be generated containing the following: Wenn `wails dev` (oder `wails gemerate module`) aufgeführt wird, wird ein Frontend-Modul generiert, das Folgendes enthält:
- JavaScript bindings for all bound methods - JavaScript-Verknüpfungen für alle verknüpften Methoden
- TypeScript declarations for all bound methods - TypeScript Deklarationen für alle verknüpften Methoden
- TypeScript definitions for all Go structs used as inputs or outputs by the bound methods - TypeScript Definitionen für alle Go-Structs, die als Eingaben oder Ausgaben der verknüpften Methoden verwendet werden
This makes it incredibly simple to call Go code from the frontend, using the same strongly typed datastructures. Das macht es unglaublich einfach, Go-Code vom Frontend aus aufzurufen, wobei die gleichen Datenrukturen verwendet werden.
## The Frontend ## Das Frontend
### Overview ### Übersicht
The frontend is a collection of files rendered by webkit. It's like a browser and webserver in one. There is virtually[^1] no limit to which frameworks or libraries you can use. The main points of interaction between the frontend and your Go code are: Das Frontend ist eine Sammlung von Dateien, die von Webkit gerendert werden. Es ist wie ein Browser und Webserver in einem. Es gibt praktisch[^1] kein Limit für welche Frameworks oder Bibliotheken es verwendet werden soll. Die wichtigsten Punkte der Interaktion zwischen Frontend und deinem Go-Code sind:
- Calling bound Go methods - Aufrufen von verknüpften Go-Methoden
- Calling runtime methods - Aufrufen von Laufzeit-Methoden
### Calling bound Go methods ### Aufrufen von verknüpften Go-Methoden
When you run your application with `wails dev`, it will automatically generate JavaScript bindings for your structs in a directory called `wailsjs/go` (You can also do this by running `wails generate module`). The generated files mirror the package names in your application. In the example above, we bind `app`, which has one public method `Greet`. This will lead to the generation of the following files: Wenn die Anwendung nach der Ausführung von `wails dev` läuft, werden automatisch JavaScript-Verknüpfungen für structs im Verzeichnis namens `wailsjs/go` generiert (Es kann ebenfalls manuell mit dem Befehl `wails generate module` erledigt werden). Die generierten Dateien spiegeln die Paketnamen in der Anwendung wider. Im obigen Beispiel verknüpfen wir `app`, die eine öffentliche Methode namens `Greet` hat. Das führt zur Generierung der folgenden Dateien:
```bash ```bash
wailsjs wailsjs
@ -261,7 +261,7 @@ wailsjs
└─App.js └─App.js
``` ```
Here we can see that there is a `main` package that contains the JavaScript bindings for the bound `App` struct, as well as the TypeScript declaration file for those methods. To call `Greet` from our frontend, we simply import the method and call it like a regular JavaScript function: Hier können wir sehen, dass es ein `main` package gibt, das die JavaScript-Verknüpfungen für die verknüpften `App` Structs enthält, sowie auch TypeScript Deklarationsdateien für ihre Methoden. Um `Greet` von unserem Frontend aufzurufen, importieren wir einfach die Methode und rufen sie wie eine normale JavaScript-Funktion auf:
```javascript ```javascript
// ... // ...
@ -274,29 +274,29 @@ function doGreeting(name) {
} }
``` ```
The TypeScript declaration file gives you the correct types for the bound methods: Die TypeScript-Deklarationsdatei gibt die richtigen Typen für die verknüpften Methoden:
```ts ```ts
export function Greet(arg1: string): Promise<string>; export function Greet(arg1: string): Promise<string>;
``` ```
The generated methods return a Promise. A successful call will result in the first return value from the Go call to be passed to the `resolve` handler. An unsuccessful call is when a Go method that has an error type as it's second return value, passes an error instance back to the caller. This is passed back via the `reject` handler. In the example above, `Greet` only returns a `string` so the JavaScript call will never reject - unless invalid data is passed to it. Die erzeugten Methoden geben ein Promise zurück. Ein erfolgreicher Aufruf führt dazu, dass der erste Rückgabewert des Go-Aufrufs an den `resolve`-Handler übergeben wird. Ein fehlgeschlagener Aufruf entsteht, wenn eine Go-Methode, die als zweiten Rückgabewert einen Fehlertyp hat eine Fehlerinstanz an den Aufrufer zurückgibt. Das wird über den `reject` Handler zurückgegeben. Im obigen Beispiel `Greet` wird nur ein `String` zurückgeben, sodass der JavaScript-Aufruf nie zurückgewiesen werden kann - es sei denn, es werden ungültige Daten übergeben.
All data types are correctly translated between Go and JavaScript. Even structs. If you return a struct from a Go call, it will be returned to your frontend as a JavaScript class. Alle Datentypen werden zwischen Go und JavaScript korrekt übersetzt. Selbst structs. Wenn du in einem Go-Aufruf ein struct zurückgibst, wird dieser als JavaScript-Klasse an dein Frontend zurückgeschickt.
:::info Note :info Notiz
Struct fields _must_ have a valid `json` tag to be included in the generated TypeScript. Struct felder _müssen_ einen gültigen `json` Tag besitzen, um in den generierten TypeScript code aufgenommen zu werden.
Anonymous nested structs are not supported at this time. Anonyme, verschachtelte structs werden derzeit nicht unterstützt.
::: :::
It is possible to send structs back to Go. Any JavaScript map/class passed as an argument that is expecting a struct, will be converted to that struct type. To make this process a lot easier, in `dev` mode, a TypeScript module is generated, defining all the struct types used in bound methods. Using this module, it's possible to construct and send native JavaScript objects to the Go code. Es ist möglich, structs zurück zu Go zu senden. Jede JavaScript-Map/Klasse, die als Argument übergeben wird und ein struct erwartet, wird in diesen struct-Typ konvertiert. Um diesen Prozess einfacher zu machen, wird im `dev` Modus ein TypeScript-Modul generiert, das alle struct Typen definiert, die in verknüpften Methoden verwendet werden. Mithilfe dieses Moduls können native JavaScript-Objekte erstellt werden und an den Go-Code versendet werden.
There is also support for Go methods that use structs in their signature. All Go structs specified by a bound method (either as parameters or return types) will have TypeScript versions auto generated as part of the Go code wrapper module. Using these, it's possible to share the same data model between Go and JavaScript. Es gibt auch Unterstützung für Go-Methoden, die structs in ihrer signature beinhalten. Bei allen Go-Anweisungen, die durch eine verknüpfte Methode (entweder als Parameter oder als Rückgabetypen) angegeben werden, werden TypeScript Versionen automatisch als Teil des Go-Code-Wrapper Moduls generiert. Mit diesem Datenmodell ist es möglich, die gleichen Daten zwischen Go und JavaScript zu teilen.
Example: We update our `Greet` method to accept a `Person` instead of a string: Beispiel: Wir aktualisieren unsere `Greet` Methode, um eine `Person` statt eines strings zu akzeptieren:
```go title="main.go" ```go title="main.go"
type Person struct { type Person struct {
@ -315,7 +315,7 @@ func (a *App) Greet(p Person) string {
} }
``` ```
The `wailsjs/go/main/App.js` file will still have the following code: Die `wailsjs/go/main/App.js` Datei hat immer noch den folgenden Code:
```js title="App.js" ```js title="App.js"
export function Greet(arg1) { export function Greet(arg1) {
@ -323,7 +323,7 @@ export function Greet(arg1) {
} }
``` ```
But the `wailsjs/go/main/App.d.ts` file will be updated with the following code: Aber die `wailsjs/go/main/App.d.ts` Datei wird mit folgendem Code aktualisiert:
```ts title="App.d.ts" ```ts title="App.d.ts"
import { main } from "../models"; import { main } from "../models";
@ -331,7 +331,7 @@ import { main } from "../models";
export function Greet(arg1: main.Person): Promise<string>; export function Greet(arg1: main.Person): Promise<string>;
``` ```
As we can see, the "main" namespace is imported from a new "models.ts" file. This file contains all the struct definitions used by our bound methods. In this example, this is a `Person` struct. If we look at `models.ts`, we can see how the models are defined: Wie wir sehen können, wird der "main"-Namensraum aus einer neuen "models.ts"-Datei importiert. Diese Datei enthält alle struct Definitionen, die von unseren verknüpften Methoden verwendet werden. In diesem Beispiel ist dies ein `Person` struct. Wenn wir uns `models.ts` anschauen, können wir sehen, wie die Modelle definiert sind:
```ts title="models.ts" ```ts title="models.ts"
export namespace main { export namespace main {
@ -386,7 +386,7 @@ export namespace main {
} }
``` ```
So long as you have TypeScript as part of your frontend build configuration, you can use these models in the following way: Solange TypeScript Teil der Frontend-Build-Konfiguration ist, können diese Modelle wie folgt verwenden:
```js title="mycode.js" ```js title="mycode.js"
import { Greet } from "../wailsjs/go/main/App"; import { Greet } from "../wailsjs/go/main/App";
@ -402,18 +402,18 @@ function generate() {
} }
``` ```
The combination of generated bindings and TypeScript models makes for a powerful development environment. Die Kombination aus generierten Verknüpfungen und TypeScript-Modellen sorgt für eine leistungsstarke Entwicklungsumgebung.
More information on Binding can be found in the [Binding Methods](guides/application-development.mdx#binding-methods) section of the [Application Development Guide](guides/application-development.mdx). Weitere Informationen zu Verknüpfungen sind im [Verknüpfungs methoden](guides/application-development.mdx#binding-methods) Abschnitt der [Anwendungs-Entwicklungs-Anleitungen](guides/application-development.mdx) zu finden.
### Calling runtime methods ### Aufrufen von Laufzeit-Methoden
The JavaScript runtime is located at `window.runtime` and contains many methods to do various tasks such as emit an event or perform logging operations: Die JavaScript-Laufzeit befindet sich in `window.runtime` und enthält viele Methoden, um verschiedene Aufgaben zu erledigen, wie zum Beispiel ein Event aufzurufen oder Logging durchführen:
```js title="mycode.js" ```js title="mycode.js"
window.runtime.EventsEmit("my-event", 1); window.runtime.EventsEmit("my-event", 1);
``` ```
More details about the JS runtime can be found in the [Runtime Reference](reference/runtime/intro.mdx). Weitere Details zur JS-Laufzeit in der [Laufzeitreferenz](reference/runtime/intro.mdx).
[^1]: There is a very small subset of libraries that use features unsupported in WebViews. There are often alternatives and workarounds for such cases. [^1]: Es gibt eine sehr kleine Teilmenge von Bibliotheken, die Funktionen verwenden, die in einem WebView nicht unterstützt werden. Es gibt häufig Alternativen und Workarounds für solche Fälle.

View file

@ -2,26 +2,26 @@
sidebar_position: 1 sidebar_position: 1
--- ---
# Introduction # Einführung
Wails is a project that enables you to write desktop apps using Go and web technologies. Wails ist ein Projekt, das es ermöglicht, Desktop-Apps mit Go- und Web-Technologien zu entwickeln.
Consider it a lightweight and fast Electron alternative for Go. You can easily build applications with the flexibility and power of Go, combined with a rich, modern frontend. Betrachte es als leichte und schnelle Electron-Alternative für Go. Mit der Flexibilität und Leistungsfähigkeit von Go, kombiniert mit einem umfangreichen, modernen Frontend, ist es einfach Anwendungen entwickeln.
### Features ### Funktionen
- Native Menus, Dialogs, Theming and Translucency - Native Menüs, Dialoge, Theming und Translucency
- Windows, macOS and linux support - Windows, MacOS und Linux Unterstützung
- Built in templates for Svelte, React, Preact, Vue, Lit and Vanilla JS - Eingebaute Vorlagen für Svelte, React, Preact, Vue, Lit und Vanilla JS
- Easily call Go methods from JavaScript - Einfache Möglichkeit Go-Methoden von JavaScript aufrufen
- Automatic Go struct to TypeScript model generation - Automatische Modellgenerierung für Go structs zu TypeScript Models
- No CGO or external DLLs required on Windows - Keine CGO oder externe DLLs unter Windows erforderlich
- Live development mode using the power of [Vite](https://vitejs.dev/) - Live-Entwicklungsmodus durch [Vite](https://vitejs.dev/)
- Powerful CLI to easily Create, Build and Package applications - Leistungsstarke CLI zum Erstellen, builden und Bündeln von Anwendungen
- A rich [runtime library](/docs/reference/runtime/intro) - Eine funktionsreiche [Laufzeitbibliothek](/docs/reference/runtime/intro)
- Applications built with Wails are Apple & Microsoft Store compliant - Applikationen mit Wails sind Apple & Microsoft Store konform
This is varly - a desktop application for MacOS & Windows written using Wails. Not only does it look great, it uses native menus and translucency - everything you'd expect from a modern native app. Dies ist varly - eine Desktop-Anwendung für MacOS & Windows, geschrieben mit Wails. Es sieht nicht nur großartig aus, es verwendet native Menüs und Transluzenz - alles, was man von einer modernen nativen App erwarten würde.
```mdx-code-block ```mdx-code-block
<p class="text--center"> <p class="text--center">
@ -32,42 +32,42 @@ This is varly - a desktop application for MacOS & Windows written using Wails. N
</p> </p>
``` ```
### Quick Start Templates ### Schnellstart-Vorlagen
Wails comes with a number of pre-configured templates that allow you to get your application up and running quickly. There are templates for the following frameworks: Svelte, React, Vue, Preact, Lit and Vanilla. There are both JavaScript and TypeScript versions for each template. Wails enthält eine Reihe von vorkonfigurierten Vorlagen, mit denen Anwendungen schneller zum Laufen gebracht werden können. Es gibt Vorlagen für die folgenden Frameworks: Svelte, React, Vue, Preact, Lit und Vanilla. Für jede Vorlage gibt es sowohl JavaScript als auch TypeScript Versionen.
### Native Elements ### Native Elemente
Wails uses a purpose built library for handling native elements such as Window, Menus, Dialogs, etc, so you can build good-looking, feature rich desktop applications. Wails benutzt für native Elemente wie Fenster, Menüs, Dialoge, etc Bibliotheken, die speziell dafür entwickelt wurden, um das Entwickeln von gut aussehenden und funktionsreichen Desktopanwendungen zu ermöglichen.
**It does not embed a browser**, so it delivers a small runtime. Instead, it reuses the native rendering engine for the platform. On Windows, this is the new Microsoft Webview2 library, built on Chromium. **Es wird kein Browser eingebettet**, stattdessen eine kleine Laufzeit. Stattdessen wird die native Rendering-Engine der Plattform verwendet. Unter Windows ist das die neue Microsoft Webview2 Bibliothek, die auf Chromium aufbaut.
### Go & JavaScript Interoperability ### Go & JavaScript Interoperabilität
Wails automatically makes your Go methods available to JavaScript, so you can call them by name from your frontend! It even generates TypeScript models for the structs used by your Go methods, so you can pass the same data structures between Go and JavaScript. Wails stellt automatisch die Go-Methoden JavaScript zur Verfügung, sodass diese nur noch mit ihrem Methodennamen aufgerufen werden müssen. Es werden ebenfalls TypeScript-Modelle für structs generiert, die in Methoden als Parameter oder Rückgabetypen verwendet werden. Das ermöglicht es, dieselben Datenstrukturen zwischen Go und JavaScript auszutauschen.
### Runtime Library ### Laufzeitbibliothek
Wails provides a runtime library, for both Go and JavaScript, that handles a lot of the things modern applications need, like Eventing, Logging, Dialogs, etc. Wails bietet eine Laufzeitbibliothek an, die sowohl in Go als auch JavaScript verwendet werden kann. Diese kümmert sich um alle Dinge, die eine moderne Anwendung benötigt, unter anderem Events, Logging, Dialoge, und mehr.
### Live Development Experience ### Live-Entwicklungserlebnis
#### Automatic Rebuilds #### Automatische Bündelungen
When you run your application in "dev" mode, Wails will build your application as a native desktop application, but will read your assets from disk. It will detect any changes to your Go code and automatically rebuild and relaunch your application. Wenn die Anwendung im "dev" Modus gestartet wird, wird die Anwendung als native Desktopanwendung gebündelt, und alle benötigten Assets werden von der Festplatte gelesen. Alle Änderungen im Go code werden automatisch erkannt und sorgen für eine erneute Bündelung so wie ein Neustart der Anwendung.
#### Automatic Reloads #### Automatisches Neuladen
When changes to your application assets are detected, your running application will "reload", reflecting your changes almost immediately. Wenn Änderungen an Anwendungs-Assets erkannt werden, wird die laufende Anwendung "neu geladen", damit die Veränderungen direkt sichtbar werden.
#### Develop your application in a Browser #### Entwickeln der Anwendung im Browser
If you prefer to debug and develop in a browser then Wails has you covered. The running application also has a webserver that will run your application in any browser that connects to it. It will even refresh when your assets change on disk. Wenn es vorgezogen wird, die Anwendung in einem Browser zu entwickeln und zu debuggen, kann Wails ebenfalls helfen. Die laufende Anwendung bietet einen Webserver, welcher es ermöglicht, die Anwendung in jedem Browser anzuzeigen, welcher sich mit diesem verbindet. Änderungen von Assets auf der Festplatte werden automatisch erkannt und die Seite wird neu geladen.
### Production-ready Native Binaries ### Produktionsfertige native Binärdateien
When you're ready to do the final build of your application, the CLI will compile it down to a single executable, with all the assets bundled into it. On Windows and MacOS, it is possible to create a native package for distribution. The assets used in packaging (icon, info.plist, manifest file, etc) are part of your project and may be customised, giving you total control over how your applications are built. Wenn du so weit bist, die finale Bündelung der Anwendung zu generieren, ist dir das CLI zur Hand. Das CLI kompiliert die Anwendung in eine einzelne Binärdatei, welche alle Assets gebündelt enthält. Unter Windows und MacOS ist es möglich, ein natives Paket für die Distribution zu erstellen. Die gebündelten Elemente (icon, info.plist, manifest Datei, etc.) sind Teil des Projekts und können angepasst werden. Dadurch ist es möglich, die Kompilierung vollständig anzupassen.
### Tooling ### Tools
The Wails CLI provides a hassle-free way to generate, build and bundle your applications. It will do the heavy lifting of creating icons, compiling your application with optimal settings and delivering a distributable, production ready binary. Choose from a number of starter templates to get up and running quickly! Die Wails CLI bietet eine problemlose Möglichkeit, eine Anwendung zu erstellen, zu builden und zu bündeln. Das CLI übernimmt die Hauptarbeit beim Erstellen von Icons, beim Kompilieren der Anwendung mit optimalen Einstellungen und beim Bereitstellen einer verteilbaren, produktionsreifen Binärdatei. Wähle aus einer Reihe von Schnellstart-Vorlagen eine aus, um schnell zu beginnen!

View file

@ -4,135 +4,135 @@ sidebar_position: 2
# CLI # CLI
The Wails CLI has a number of commands that are used for managing your projects. All commands are run in the following way: Das Wails CLI verfügt über eine Reihe von Befehlen, die für die Verwaltung deiner Projekte verwendet werden. Alle Befehle werden wie folgt ausgeführt:
`wails <command> <flags>` `wails <command> <flags>`
## init ## init
`wails init` is used for generating projects. `wails init` wird zum Generieren von Projekten verwendet.
| Flag | Description | Default | | Flag | Beschreibung | Standard |
|:------------------ |:----------------------------------------------------------------------------------------------------------------------- |:-------------------:| |:------------------------ |:------------------------------------------------------------------------------------------------------------------------------------------------------- |:-----------------:|
| -n "project name" | Name of the project. **Mandatory**. | | | -n "Projektname" | Name des Projekts. **Pflichtfeld**. | |
| -d "project dir" | Project directory to create | Name of the project | | -d "Projekt Verzeichnis" | Zu erstellendes Projektverzeichnis | Name des Projekts |
| -g | Initialise git repository | | | -g | Git-Repository initialisieren | |
| -l | List available project templates | | | -l | Verfügbare Projektvorlagen auflisten | |
| -q | Suppress output to console | | | -q | Ausgabe an Konsole unterdrücken | |
| -t "template name" | The project template to use. This can be the name of a default template or a URL to a remote template hosted on github. | vanilla | | -t "Vorlagenname" | Die zu verwendende Projektvorlage. Dies kann der Name einer Standardvorlage oder einer URL einer entfernten Vorlage sein, die auf Github gehostet wird. | vanilla |
| -ide | Generate IDE project files `vscode` or `goland` | | | -ide | Generiert IDE Projektdateien für `vscode` oder `goland` | |
| -f | Force build application | false | | -f | Erzwingt das Erstellen der Anwendung | false |
Example: `wails init -n test -d mytestproject -g -ide vscode -q` Beispiel: `wails init -n test -d mytestproject -g -ide vscode -q`
This will generate a a project called "test" in the "mytestproject" directory, initialise git, generate vscode project files and do so silently. Dies generiert ein Projekt mit dem Namen "test" im Verzeichnis "mytestproject", initialisiert git, generiert vscode Projektdateien und tut dies stillschweigend.
More information on using IDEs with Wails can be found [here](../guides/ides.mdx). Weitere Informationen zur Verwendung von IDEs mit Wails [hier](../guides/ides.mdx).
### Remote Templates ### Remote Vorlagen
Remote templates (hosted on GitHub) are supported and can be installed by using the template's project URL. Remote-Vorlagen (gehostet auf GitHub) werden unterstützt und können über die Projektadresse des Templates installiert werden.
Example: `wails init -n test -t https://github.com/leaanthony/testtemplate[@v1.0.0]` Beispiel: `wails init -n test -t https://github.com/leaanthony/testtemplate[@v1.0.0]`
A list of community maintained templates can be found [here](../community/templates.mdx) Eine Liste der von der Gemeinschaft betreuten Vorlagen ist [hier](../community/templates.mdx) zu finden
:::warning Attention ::warning Achtung
**The Wails project does not maintain, is not responsible nor liable for 3rd party templates!** **Das Wails Projekt pflegt keine Drittanbieter Vorlagen und ist auch nicht für diese verantwortlich!**
If you are unsure about a template, inspect `package.json` and `wails.json` for what scripts are run and what packages are installed. Wenn du dir wegen einer Vorlage unsicher bist, prüfe die `package.json` sowie die `wails.json` nach Scripts und installierten Paketen.
::: :::
## build ## build
`wails build` is used for compiling your project to a production-ready binary. `wails build` wird verwendet, um das Projekt in eine produktionsfertige Binärdatei zu kompilieren.
| Flag | Description | Default | | Flag | Beschreibung | Standard |
|:-------------------- |:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |:--------------------------------------------------------------------------------------------------------------------------------------------------- | |:-------------------- |:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |:---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| -clean | Cleans the `build/bin` directory | | | -clean | Löscht das Verzeichnis `build/bin` | |
| -compiler "compiler" | Use a different go compiler to build, eg go1.15beta1 | go | | -compiler "compiler" | Benutze einen anderen go compiler um zu builden, z. B. go1.15beta1 | go |
| -debug | Retains debug information in the application and shows the debug console. Allows the use of the devtools in the application window | | | -debug | Speichert Debug-Informationen in der Anwendung und zeigt die Debug-Konsole an. Ermöglicht die Verwendung der devtools im Anwendungsfenster | |
| -devtools | Allows the use of the devtools in the application window in production (when -debug is not used). Ctrl/Cmd+Shift+F12 may be used to open the devtools window. *NOTE*: This option will make your application FAIL Mac appstore guidelines. Use for debugging only. | | | -devtools | Ermöglicht die Verwendung der devtools im Anwendungsfenster in der Produktion (wenn -debug nicht verwendet wird). Ctrl/Cmd+Shift+F12 können verwendet werden, um das devtools-Fenster zu öffnen. *HINWEIS*: Diese Option macht die Anwendung nicht Richtlinien konform für den Mac App Store. Nur zum Debuggen verwenden. | |
| -dryrun | Prints the build command without executing it | | | -dryrun | Gibt den Build-Befehl aus, ohne ihn auszuführen | |
| -f | Force build application | | | -f | Erzwingt das Erstellen der Anwendung | |
| -garbleargs | Arguments to pass to garble | `-literals -tiny -seed=random` | | -garbleargs | Argumente, die an garble übergeben werden | `-literals -tiny -seed=random` |
| -ldflags "flags" | Additional ldflags to pass to the compiler | | | -ldflags "Flags" | Zusätzliche ldflags zum Übergeben an den Compiler | |
| -m | Skip mod tidy before compile | | | -m | Mod tidy vor dem Kompilieren überspringen | |
| -nopackage | Do not package application | | | -nopackage | Anwendung nicht packen | |
| -nocolour | Disable colour in output | | | -nocolour | Deaktiviere Farbe in den Ausgaben | |
| -nosyncgomod | Do not sync go.mod with the Wails version | | | -nosyncgomod | Go.mod nicht mit der Wails Version synchronisieren | |
| -nsis | Generate NSIS installer for Windows | | | -nsis | NSIS Installer für Windows generieren | |
| -o filename | Output filename | | | -o Dateiname | Dateiname | |
| -obfuscated | Obfuscate the application using [garble](https://github.com/burrowers/garble) | | | -obfuscated | Den code unkenntlich machen mit [garble](https://github.com/burrowers/garble) | |
| -platform | Build for the given (comma delimited) [platforms](../reference/cli.mdx#platforms) eg. `windows/arm64`. Note, if you do not give the architecture, `runtime.GOARCH` is used. | platform = `GOOS` environment variable if given else `runtime.GOOS`.<br/>arch = `GOARCH` environment variable if given else `runtime.GOARCH`. | | -platform | Build für die gegebenen (durch Komma getrennten) [Plattformen](../reference/cli.mdx#platforms) zB. `windows/arm64`. Beachte, wenn die Architektur nicht geben wird, wird `runtime.GOARCH` verwendet um diese zu bestimmen. | plattform = `GOOS` Umgebungsvariable wenn `runtime.GOOS` angegeben wird.<br/>arch = `GOARCH` Umgebungsvariable falls `runtime.GOARCH` angegeben ist. |
| -race | Build with Go's race detector | | | -race | Mit Go's Race Detector builden | |
| -s | Skip building the frontend | | | -s | Überspringe das builden des Frontends | |
| -skipbindings | Skip bindings generation | | | -skipbindings | Das builden von Verknüpfungen überspringen | |
| -tags "extra tags" | Build tags to pass to Go compiler. Must be quoted. Space or comma (but not both) separated | | | -tags "extra tags" | Build-Tags, die an den Go-Compiler übergeben werden. Muss in Anführungszeichen stehen. Wird mit Leerzeichen oder Komma (aber nicht beiden) getrennt | |
| -trimpath | Remove all file system paths from the resulting executable. | | | -trimpath | Entferne alle Dateisystempfade aus der resultierenden ausführbaren Datei. | |
| -u | Updates your project's `go.mod` to use the same version of Wails as the CLI | | | -u | Aktualisiert die `go.mod` Datei deines Projekts, um die gleiche Version von Wails wie von dem CLI zu verwenden | |
| -upx | Compress final binary using "upx" | | | -upx | Finale Binärdatei mit "upx" komprimieren | |
| -upxflags | Flags to pass to upx | | | -upxflags | Zu übergebende Flags an upx | |
| -v int | Verbosity level (0 - silent, 1 - default, 2 - verbose) | 1 | | -v int | Ausführlichkeitsstufe (0 - stumm, 1 - standard, 2 - ausführlich) | 1 |
| -webview2 | WebView2 installer strategy: download,embed,browser,error | download | | -webview2 | WebView2 Installationsstrategie: download, embed, browser, error | download |
| -windowsconsole | Keep the console window for Windows builds | | | -windowsconsole | Konsolenfenster für Windows-Builds behalten | |
For a detailed description of the `webview2` flag, please refer to the [Windows](../guides/windows.mdx) Guide. Eine detaillierte Beschreibung der `webview2` Flags findest du im [Windows](../guides/windows.mdx) Guide.
If you prefer to build using standard Go tooling, please consult the [Manual Builds](../guides/manual-builds.mdx) guide. Wenn du es vorziehst, mit Standard-Go-Werkzeugen zu builden, lese bitte die Anleitung zu [Manuellen Builds](../guides/manual-builds.mdx).
Example: Beispiel:
`wails build -clean -o myproject.exe` `wails build -clean -o myproject.exe`
:::info :::info
On Mac, the application will be bundled with `Info.plist`, not `Info.dev.plist`. Auf dem Mac wird die Anwendung mit `Info.plist` gebündelt, nicht mit `Info.dev.plist`.
::: :::
:::info UPX on Apple Silicon :::info UPX auf Apple Silicon
There are [issues](https://github.com/upx/upx/issues/446) with using UPX with Apple Silicon. Es gibt [Probleme](https://github.com/upx/upx/issues/446) mit der Verwendung von UPX mit Apple Silicon.
::: :::
:::info Set minimal version for MacOS :::info Minimale Version für MacOS setzen
You can override default [minimal version](../gettingstarted/installation#supported-platforms) of macOS for your app by providing version via `CGO_CFLAGS` and `CGO_LDFLAGS` environment variables. e.g. `CGO_CFLAGS=-mmacosx-version-min=10.15.0 CGO_LDFLAGS=-mmacosx-version-min=10.15.0 wails build` Du kannst die standardmäßige [minimal version](../gettingstarted/installation#supported-platforms) von macOS für deine App überschreiben, indem du die Version über die Umgebungsvariablen `CGO_CFLAGS` und `CGO_LDFLAGS` angibst. z. B. `CGO_CFLAGS=-mmacosx-version-min=10.15.0 CGO_LDFLAGS=-mmacosx-version-min=10.15.0 wails build`
::: :::
:::info UPX on Windows :::info UPX unter Windows
Some Antivirus vendors false positively mark `upx` compressed binaries as virus, see [issue](https://github.com/upx/upx/issues/437). Einige Antivirenhersteller markieren bei falscher Einstellung `upx` komprimierte Binärdateien als Virus, siehe dieses [issue](https://github.com/upx/upx/issues/437) für mehr Informationen.
::: :::
### Platforms ### Plattformen
Supported platforms are: Unterstützte Plattformen:
| Platform | Description | | Plattform | Beschreibung |
|:---------------- |:--------------------------------------------- | |:---------------- |:---------------------------------------------- |
| darwin | MacOS + architecture of build machine | | darwin | MacOS + Architektur des Build-Rechners |
| darwin/amd64 | MacOS 10.13+ AMD64 | | darwin/amd64 | MacOS 10.13+ AMD64 |
| darwin/arm64 | MacOS 11.0+ ARM64 | | darwin/arm64 | MacOS 11.0+ ARM64 |
| darwin/universal | MacOS AMD64+ARM64 universal application | | darwin/universal | MacOS AMD64+ARM64 universelle Anwendung |
| windows | Windows 10/11 + architecture of build machine | | windows | Windows 10/11 + Architektur des Build-Rechners |
| windows/amd64 | Windows 10/11 AMD64 | | windows/amd64 | Windows 10/11 AMD64 |
| windows/arm64 | Windows 10/11 ARM64 | | windows/arm64 | Windows 10/11 ARM64 |
| linux | Linux + architecture of build machine | | linux | Linux + Architektur des Build-Rechners |
| linux/amd64 | Linux AMD64 | | linux/amd64 | Linux AMD64 |
| linux/arm64 | Linux ARM64 | | linux/arm64 | Linux ARM64 |
## doctor ## doctor
`wails doctor` will run diagnostics to ensure that your system is ready for development. `wails doctor` startet eine Diagnose, um sicherzustellen, dass dein System für die Entwicklung bereit ist.
Example: Beispiel:
``` ```
Wails CLI v2.0.0-beta Wails CLI v2.0.0-beta
@ -164,88 +164,88 @@ Your system is ready for Wails development!
## dev ## dev
`wails dev` is used to run your application in a "live development" mode. This means: `wails dev` wird verwendet, um deine Anwendung im "Live Development"-Modus auszuführen. Das bedeutet:
- The application's `go.mod` will be updated to use the same version of Wails as the CLI - Die `go.mod` Datei der Anwendung wird aktualisiert, um die gleiche Version sowohl von Wails als auch dem CLI zu verwenden
- The application is compiled and run automatically - Die Anwendung wird kompiliert und automatisch ausgeführt
- A watcher is started and will trigger a rebuild of your dev app if it detects changes to your go files - Ein Beobachter wird gestartet und löst einen Neuaufbau der Anwendung aus, wenn er Änderungen in Go-Dateien erkennt
- A webserver is started on `http://localhost:34115` which serves your application (not just frontend) over http. This allows you to use your favourite browser development extensions - Ein Webserver wird auf `http://localhost:34115` gestartet, der die Anwendung (nicht nur Frontend) über http bedient. Damit können bevorzugte Browser-Entwicklungserweiterungen verwendet werden
- All application assets are loaded from disk. If they are changed, the application will automatically reload (not rebuild). All connected browsers will also reload - Alle App-Assets werden von der Festplatte geladen. Wenn diese geändert werden, wird die Anwendung automatisch neu geladen (nicht neu erstellt). Alle verbundenen Browser laden die Seite ebenfalls neu
- A JS module is generated that provides the following: - Ein JS-Modul wird generiert, das Folgendes bereitstellt:
- JavaScript wrappers of your Go methods with autogenerated JSDoc, providing code hinting - JavaScript-Wrapper deiner Go-Methoden mit automatisch generiertem JSDoc, die Code-Hinweise bereitstellen
- TypeScript versions of your Go structs, that can be constructed and passed to your go methods - TypeScript Versionen der Go-Structs, die erstellt und an die Go-Methoden übergeben werden können
- A second JS module is generated that provides a wrapper + TS declaration for the runtime - Ein zweites JS-Modul wird generiert, das eine Wrapper + TS Deklaration für die Laufzeit bereitstellt
- On macOS, it will bundle the application into a `.app` file and run it. It will use a `build/darwin/Info.dev.plist` for development. - Auf macOS bündelt es die Anwendung in eine `.app` Datei und führt diese aus. Es wird ein `build/darwin/Info.dev.plist` für die Entwicklung verwendet.
| Flag | Description | Default | | Flag | Beschreibung | Standard |
|:---------------------------- |:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |:--------------------- | |:----------------------------------- |:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |:-------------------- |
| -appargs "args" | Arguments passed to the application in shell style | | | -appargs "args" | Die an die Anwendung übergebenen Argumente im Shell-Stil | |
| -assetdir "./path/to/assets" | Serve assets from the given directory instead of using the provided asset FS | Value in `wails.json` | | -assetdir "./pfad/zu/deinen/assets" | Verwendet Assets aus dem angegebenen Verzeichnis anstatt des bereitgestellten Assets FS | Wert in `wails.json` |
| -browser | Opens a browser to `http://localhost:34115` on startup | | | -browser | Öffnet beim Start einen Browser für `http://localhost:34115` | |
| -compiler "compiler" | Use a different go compiler to build, eg go1.15beta1 | go | | -compiler "compiler" | Benutze einen anderen go compiler um zu builden, z. B. go1.15beta1 | go |
| -debounce | The time to wait for reload after an asset change is detected | 100 (milliseconds) | | -debounce | Die Wartezeit für das Neuladen nach einer erkannten Änderung an einem Asset | 100 (Millisekunden) |
| -devserver "host:port" | The address to bind the wails dev server to | "localhost:34115" | | -devserver "host:port" | Die Adresse, an die der Wails dev Server gebunden wird | "localhost:34115" |
| -extensions | Extensions to trigger rebuilds (comma separated) | go | | -extensions | Erweiterungen zum Auslösen von Rebuilds (Komma getrennt) | go |
| -forcebuild | Force build of application | | | -forcebuild | Erzwinge Erstellung der Anwendung | |
| -frontenddevserverurl "url" | Use 3rd party dev server url to serve assets, EG Vite | "" | | -frontenddevserverurl "url" | Benutze die Entwickler-URL von Drittanbietern, um Assets zu bedienen, EG Vite | "" |
| -ldflags "flags" | Additional ldflags to pass to the compiler | | | -ldflags "Flags" | Zusätzliche ldflags zum Übergeben an den Compiler | |
| -loglevel "loglevel" | Loglevel to use - Trace, Debug, Info, Warning, Error | Debug | | -loglevel "loglevel" | Loglevel, welcher verwendet werden soll - Trace, Debug, Info, Warnung, Fehler | Debug |
| -nocolour | Turn off colour cli output | false | | -nocolour | Farbe im Cli output deaktivieren | false |
| -noreload | Disable automatic reload when assets change | | | -noreload | Automatisches Nachladen bei Änderung von Assets deaktivieren | |
| -nosyncgomod | Do not sync go.mod with the Wails version | false | | -nosyncgomod | Go.mod nicht mit der Wails Version synchronisieren | false |
| -race | Build with Go's race detector | false | | -race | Mit Go's Race Detector builden | false |
| -reloaddirs | Additional directories to trigger reloads (comma separated) | Value in `wails.json` | | -reloaddirs | Zusätzliche Verzeichnisse zum Auslösen von Reloads (durch Komma getrennt) | Wert in `wails.json` |
| -s | Skip building the frontend | false | | -s | Überspringe das builden des Frontends | false |
| -save | Saves the given `assetdir`, `reloaddirs`, `wailsjsdir`, `debounce`, `devserver` and `frontenddevserverurl` flags in `wails.json` to become the defaults for subsequent invocations. | | | -save | Speichert den angegebenen `assetdir`, `reloaddirs`, `wailsjsdir`, `debounce`, `devserver` und `frontenddevserverurl` flags in `wails.json` als Standardwert für nachfolgende Anrufe. | |
| -skipbindings | Skip bindings generation | | | -skipbindings | Das builden von Verknüpfungen überspringen | |
| -tags "extra tags" | Build tags to pass to compiler (quoted and space separated) | | | -tags "extra tags" | Compiler-Optionen (in Anführungszeichen und durch Leerzeichen getrennt) | |
| -v | Verbosity level (0 - silent, 1 - standard, 2 - verbose) | 1 | | -v | Ausführlichkeitsstufe (0 - stumm, 1 - standard, 2 - ausführlich) | 1 |
| -wailsjsdir | The directory to generate the generated Wails JS modules | Value in `wails.json` | | -wailsjsdir | Das Verzeichnis, in dem die generierten Wails-JS-Module erstellt werden sollen | Wert in `wails.json` |
Example: Beispiel:
`wails dev -assetdir ./frontend/dist -wailsjsdir ./frontend/src -browser` `wails dev -assetdir ./frontend/dist -wailsjsdir ./frontend/src -browser`
This command will do the following: Dieser Befehl wird folgendes tun:
- Build the application and run it (more details [here](../guides/manual-builds.mdx) - Erstellt die Anwendung und führt diese aus (mehr Details [hier](../guides/manual-builds.mdx)
- Generate the Wails JS modules in `./frontend/src` - Generiert die Wails JS Module in `./frontend/src`
- Watch for updates to files in `./frontend/dist` and reload on any change - Achtet auf Aktualisierungen der Dateien in `./frontend/dist` und lädt die Seite bei jeder Änderung neu
- Open a browser and connect to the application - Öffnet einen Browser und verbindet dich mit der App
There is more information on using this feature with existing framework scripts [here](../guides/application-development.mdx#live-reloading). Weitere Informationen zur Verwendung dieser Funktion mit vorhandenen Frameworkskripten findest du [ hier](../guides/application-development.mdx#live-reloading).
## generate ## generate
### template ### template
Wails uses templates for project generation. The `wails generate template` command helps scaffold a template so that it may be used for generating projects. Wails verwendet Vorlagen für die Projekterstellung. Der Befehl `wails generate template` hilft beim Erstellen einer Vorlage, die zur Generierung von Projekten verwendet werden kann.
| Flag | Description | | Flag | Beschreibung |
|:---------------- |:------------------------------------------- | |:---------------- |:------------------------------------- |
| -name | The template name (Mandatory) | | -name | Der Vorlagenname (Pflicht) |
| -frontend "path" | Path to frontend project to use in template | | -frontend "Pfad" | Pfad zum Frontend-Projekt im Template |
For more details on creating templates, consult the [Templates guide](../guides/templates.mdx). Weitere Details zum Erstellen von Vorlagen findest du in der [Vorlagen Anleitung](../guides/templates.mdx).
### module ### module
The `wails generate module` command allows you to manually generate the `wailsjs` directory for your application. Mit dem `wails generate module` Befehl kann das `wailsjs` Verzeichnis für deine Anwendung manuell generiert werden.
| Flag | Description | Default | | Flag | Beschreibung | Standard |
|:-------------------- |:----------------------------------------------------------- |:------- | |:-------------------- |:----------------------------------------------------------------------- |:-------- |
| -compiler "compiler" | Use a different go compiler to build, eg go1.15beta1 | go | | -compiler "compiler" | Benutze einen anderen go compiler um zu builden, z. B. go1.15beta1 | go |
| -tags "extra tags" | Build tags to pass to compiler (quoted and space separated) | | | -tags "extra tags" | Compiler-Optionen (in Anführungszeichen und durch Leerzeichen getrennt) | |
## update ## update
`wails update` will update the version of the Wails CLI. `wails update` aktualisiert die Version des Wails CLI.
| Flag | Description | | Flag | Beschreibung |
|:------------------ |:------------------------------------- | |:------------------ |:------------------------------------------ |
| -pre | Update to latest pre-release version | | -pre | Update auf die neueste Vorabversion |
| -version "version" | Install a specific version of the CLI | | -version "version" | Installiere eine bestimmte Version des CLI |
## version ## version
`wails version` will simply output the current CLI version. `wails version` gibt die aktuelle CLI-Version aus.

View file

@ -4,9 +4,9 @@ sidebar_position: 4
# Menus # Menus
It is possible to add an application menu to Wails projects. This is achieved by defining a [Menu](#menu) struct and setting it in the [`Menu`](../reference/options.mdx#menu) application config, or by calling the runtime method [MenuSetApplicationMenu](../reference/runtime/menu.mdx#menusetapplicationmenu). Es ist möglich, ein Anwendungsmenü zu Wails Projekten hinzuzufügen. Dies wird durch die Definition eines [Menu](#menu) Struct und in der [`Menu`](../reference/options.mdx#menu) Anwendung Konfiguration erreicht, oder beim Aufrufen der Laufzeitmethode [MenuSetApplicationMenu](../reference/runtime/menu.mdx#menusetapplicationmenu).
An example of how to create a menu: Ein Beispiel dafür, wie man ein Menü erstellt:
```go ```go
@ -42,13 +42,13 @@ An example of how to create a menu:
// ... // ...
``` ```
It is also possible to dynamically update the menu, by updating the menu struct and calling [MenuUpdateApplicationMenu](../reference/runtime/menu.mdx#menuupdateapplicationmenu). Es ist auch möglich, das Menü dynamisch zu aktualisieren, indem du das Menü Struct aktualisierst, und [MenuUpdateApplicationMenu](../reference/runtime/menu.mdx#menuupdateapplicationmenu) aufrufst.
The example above uses helper methods, however it's possible to build the menu structs manually. Das obige Beispiel verwendet Hilfsmethoden, es ist jedoch möglich, die Menu Struct manuell zu erstellen.
## Menu ## Menu
A Menu is a collection of MenuItems: Ein Menü ist eine Sammlung von MenuItems:
```go title="Package: github.com/wailsapp/wails/v2/pkg/menu" ```go title="Package: github.com/wailsapp/wails/v2/pkg/menu"
type Menu struct { type Menu struct {
@ -56,19 +56,19 @@ type Menu struct {
} }
``` ```
For the Application menu, each MenuItem represents a single menu such as "Edit". Für das Anwendungsmenü repräsentiert jedes MenuItem ein einzelnes Menü, wie z. B. "Bearbeiten".
A simple helper method is provided for building menus: Eine einfache Hilfsmethode ist für das Erstellen von Menüs verfügbar:
```go title="Package: github.com/wailsapp/wails/v2/pkg/menu" ```go title="Package: github.com/wailsapp/wails/v2/pkg/menu"
func NewMenuFromItems(first *MenuItem, rest ...*MenuItem) *Menu func NewMenuFromItems(first *MenuItem, rest ...*MenuItem) *Menu
``` ```
This makes the layout of the code more like that of a menu without the need to add the menu items manually after creating them. Alternatively, you can just create the menu items and add them to the menu manually. Dadurch ähnelt das Layout des Codes dem eines Menüs, ohne dass die Menüpunkte nach ihrer Erstellung manuell hinzugefügt werden müssen. Alternativ können die Menüeinträge erstellt und manuell im Menü hinzugefügt werden.
## MenuItem ## MenuItem
A MenuItem represents an item within a Menu. Ein MenuItem stellt einen Eintrag in einem Menü dar.
```go title="Package: github.com/wailsapp/wails/v2/pkg/menu" ```go title="Package: github.com/wailsapp/wails/v2/pkg/menu"
// MenuItem represents a menu item contained in a menu // MenuItem represents a menu item contained in a menu
@ -85,30 +85,30 @@ type MenuItem struct {
} }
``` ```
| Field | Type | Notes | | Feld | Typ | Anmerkungen |
| ----------- | ------------------------------------ | ------------------------------------------------------------- | | ----------- | ------------------------------------ | ------------------------------------------------------------------ |
| Label | string | The menu text | | Label | string | Der Menütext |
| Accelerator | [\*keys.Accelerator](#accelerator) | Key binding for this menu item | | Accelerator | [\*keys.Accelerator](#accelerator) | Tastenbelegung für diesen Menüeintrag |
| Type | [Type](#type) | Type of MenuItem | | Typ | [Typ](#type) | Typ des MenuItem |
| Disabled | bool | Disables the menu item | | Disabled | bool | Deaktiviert den Menüpunkt |
| Hidden | bool | Hides this menu item | | Hidden | bool | Versteckt diesen Menüpunkt |
| Checked | bool | Adds check to item (Checkbox & Radio types) | | Checked | bool | Fügt ein Element zum Menüpunkt hinzu (Checkbox & Radio-Buttons) |
| SubMenu | [\*Menu](#menu) | Sets the submenu | | SubMenu | [\*Menu](#menu) | Legt das Untermenü fest |
| Click | [Callback](#callback) | Callback function when menu clicked | | Click | [Callback](#callback) | Callback-Funktion beim Anklicken des Menüs |
| Role | string | Defines a [role](#role) for this menu item. Mac only for now. | | Role | string | Definiert eine [Rolle](#role) für diesen Menüeintrag. Nur für Mac. |
### Accelerator ### Accelerator
Accelerators (sometimes called keyboard shortcuts) define a binding between a keystroke and a menu item. Wails defines an Accelerator as a combination or key + [Modifier](#modifier). They are available in the `"github.com/wailsapp/wails/v2/pkg/menu/keys"` package. Accelerators (manchmal auch Tastaturkürzel genannt) definieren eine Verknüpfung zwischen einem Tastendruck und einem Menüpunkt. Wails definiert einen Accelerator als Kombination oder Taste + [Modifikator](#modifier). Diese sind im `"github.com/wailsapp/wails/v2/pkg/menu/keys"` Paket verfügbar.
Example: Beispiel:
```go title="Package: github.com/wailsapp/wails/v2/pkg/menu/keys" ```go title="Package: github.com/wailsapp/wails/v2/pkg/menu/keys"
// Defines cmd+o on Mac and ctrl-o on Window/Linux // Defines cmd+o on Mac and ctrl-o on Window/Linux
myShortcut := keys.CmdOrCtrl("o") myShortcut := keys.CmdOrCtrl("o")
``` ```
Keys are any single character on a keyboard with the exception of `+`, which is defined as `plus`. Some keys cannot be represented as characters so there are a set of named characters that may be used: Tasten sind jedes einzelne Zeichen auf einer Tastatur mit Ausnahme von `+`, das als `plus` definiert ist. Einige Schlüssel können nicht als Zeichen dargestellt werden, daher gibt es eine Reihe von benannten Zeichen, die verwendet werden können:
| | | | | | | | | |
|:-----------:|:-----:|:-----:|:---------:| |:-----------:|:-----:|:-----:|:---------:|
@ -128,9 +128,9 @@ Keys are any single character on a keyboard with the exception of `+`, which is
| `page up` | `f14` | `f39` | | | `page up` | `f14` | `f39` | |
| `page down` | `f15` | `f30` | | | `page down` | `f15` | `f30` | |
Wails also supports parsing accelerators using the same syntax as Electron. This is useful for storing accelerators in config files. Wails unterstützt auch das Parsen von Accelerators mit der gleichen Syntax wie bei Electron. Das ist besonders nützlich, um Accelerators in Konfigurationsdateien zu speichern.
Example: Beispiel:
```go title="Package: github.com/wailsapp/wails/v2/pkg/menu/keys" ```go title="Package: github.com/wailsapp/wails/v2/pkg/menu/keys"
// Defines cmd+o on Mac and ctrl-o on Window/Linux // Defines cmd+o on Mac and ctrl-o on Window/Linux
@ -139,7 +139,7 @@ Example:
#### Modifier #### Modifier
The following modifiers are keys that may be used in combination with the accelerator key: Die folgenden Modifikatoren sind Schlüssel, die in Kombination mit dem Beschleunigungsschlüssel verwendet werden können:
```go title="Package: github.com/wailsapp/wails/v2/pkg/menu/keys" ```go title="Package: github.com/wailsapp/wails/v2/pkg/menu/keys"
const ( const (
@ -154,7 +154,7 @@ const (
) )
``` ```
A number of helper methods are available to create Accelerators using modifiers: Eine Reihe von Hilfsmethoden stehen zur Verfügung, um Accelerators mithilfe von Modifikatoren zu erstellen:
```go title="Package: github.com/wailsapp/wails/v2/pkg/menu/keys" ```go title="Package: github.com/wailsapp/wails/v2/pkg/menu/keys"
func CmdOrCtrl(key string) *Accelerator func CmdOrCtrl(key string) *Accelerator
@ -163,16 +163,16 @@ func Shift(key string) *Accelerator
func Control(key string) *Accelerator func Control(key string) *Accelerator
``` ```
Modifiers can be combined using `keys.Combo(key string, modifier1 Modifier, modifier2 Modifier, rest ...Modifier)`: Modifikatoren können mit `keys.Combo(key string, modifier1 Modifier, modifier2 Modifier, rest ...Modifier)` kombiniert werden:
```go title="Package: github.com/wailsapp/wails/v2/pkg/menu/keys" ```go title="Package: github.com/wailsapp/wails/v2/pkg/menu/keys"
// Defines "Ctrl+Option+A" on Mac and "Ctrl+Alt+A" on Window/Linux // Defines "Ctrl+Option+A" on Mac and "Ctrl+Alt+A" on Window/Linux
myShortcut := keys.Combo("a", ControlKey, OptionOrAltKey) myShortcut := keys.Combo("a", ControlKey, OptionOrAltKey)
``` ```
### Type ### Typ
Each menu item must have a type and there are 5 types available: Jeder Menüpunkt muss einem der 5 Typen entsprechen:
```go title="Package: github.com/wailsapp/wails/v2/pkg/menu" ```go title="Package: github.com/wailsapp/wails/v2/pkg/menu"
const ( const (
@ -184,7 +184,7 @@ const (
) )
``` ```
For convenience, helper methods are provided to quickly create a menu item: Zur Bequemlichkeit werden Hilfsmethoden angeboten, um schnell einen Menüpunkt zu erstellen:
```go title="Package: github.com/wailsapp/wails/v2/pkg/menu" ```go title="Package: github.com/wailsapp/wails/v2/pkg/menu"
func Text(label string, accelerator *keys.Accelerator, click Callback) *MenuItem func Text(label string, accelerator *keys.Accelerator, click Callback) *MenuItem
@ -194,7 +194,7 @@ func Checkbox(label string, checked bool, accelerator *keys.Accelerator, click C
func SubMenu(label string, menu *Menu) *Menu func SubMenu(label string, menu *Menu) *Menu
``` ```
You can also create menu items directly on a menu by using the "Add" helpers: Du kannst Menüpunkte auch direkt in einem Menü erstellen, indem du die "Add" Helfer verwendest:
```go title="Package: github.com/wailsapp/wails/v2/pkg/menu" ```go title="Package: github.com/wailsapp/wails/v2/pkg/menu"
func (m *Menu) AddText(label string, accelerator *keys.Accelerator, click Callback) *MenuItem func (m *Menu) AddText(label string, accelerator *keys.Accelerator, click Callback) *MenuItem
@ -204,11 +204,11 @@ func (m *Menu) AddCheckbox(label string, checked bool, accelerator *keys.Acceler
func (m *Menu) AddSubMenu(label string, menu *Menu) *MenuI func (m *Menu) AddSubMenu(label string, menu *Menu) *MenuI
``` ```
A note on radio groups: A radio group is defined as a number of radio menu items that are next to each other in the menu. This means that you do not need to group items together as it is automatic. However, that also means you cannot have 2 radio groups next to each other - there must be a non-radio item between them. Eine Notiz über "Radio" Gruppen: Eine "Radio" Gruppe wird als eine Reihe von Radiomenüelementen definiert, die nebeneinander im Menü stehen. Das bedeutet, dass keine Elemente zusammengefasst werden müssen, da das automatisch gehandhabt wird. Das bedeutet aber auch, dass du nicht 2 "Radio" Gruppen nebeneinander haben kannst. Es muss ein Nicht-Radio-Element sein.
### Callback ### Callback
Each menu item may have a callback that is executed when the item is clicked: Jeder Menüeintrag kann einen Callback haben, der ausgeführt wird, wenn das Element angeklickt wird:
```go title="Package: github.com/wailsapp/wails/v2/pkg/menu" ```go title="Package: github.com/wailsapp/wails/v2/pkg/menu"
type Callback func(*CallbackData) type Callback func(*CallbackData)
@ -218,19 +218,19 @@ type CallbackData struct {
} }
``` ```
The function is given a `CallbackData` struct which indicates which menu item triggered the callback. This is useful when using radio groups that may share a callback. Der Funktion wird ein `CallbackData` Struct gegeben, der anzeigt, welcher Menüpunkt den Rückruf ausgelöst hat. Das ist nützlich, wenn "Radio" Gruppen verwendet werden, die einen Callback teilen können.
### Role ### Role
:::info Roles :info Roles
Roles are currently supported on Mac only. Roles werden derzeit nur auf Mac unterstützt.
::: :::
A menu item may have a role, which is essentially a pre-defined menu item. We currently support the following roles: Ein Menüpunkt kann eine Role haben, was im Wesentlichen ein vordefinierter Menüeintrag ist. Zurzeit unterstützen wir die folgenden Roles:
| Role | Description | | Role | Beschreibung |
| ------------ | ------------------------------------------------------------------------ | | ------------ | ----------------------------------------------------------------------------- |
| AppMenuRole | The standard Mac application menu. Can be created using `menu.AppMenu()` | | AppMenuRole | Das Standard-Mac-Anwendungsmenü. Kann mit `menu.AppMenu()` erstellt werden |
| EditMenuRole | The standard Mac edit menu. Can be created using `menu.EditMenu()` | | EditMenuRole | Das Standard-Mac-Bearbeitungsmenü. Kann mit `menu.EditMenu()` erstellt werden |

View file

@ -4,9 +4,9 @@ sidebar_position: 3
# Options # Options
## Application Options ## Anwendungsoptionen
The `Options.App` struct contains the application configuration. It is passed to the `wails.Run()` method: Das `Options.App` Struct enthält die App-Konfiguration. Diese wird an die `wails.Run()` Methode übergeben:
```go title="Example" ```go title="Example"
import ( import (
@ -87,7 +87,7 @@ func main() {
LightModeTitleText: windows.RGB(20, 20, 20), LightModeTitleText: windows.RGB(20, 20, 20),
LightModeBorder: windows.RGB(200, 200, 200), LightModeBorder: windows.RGB(200, 200, 200),
}, },
// ZoomFactor is the zoom factor for the WebView2. This is the option matching the Edge user activated zoom in or out. // ZoomFactor is the zoom factor for the WebView2. Dies ist die Option, die mit dem aktivierten Zoom-Modus des Edge Benutzers übereinstimmt.
ZoomFactor: float64, ZoomFactor: float64,
// IsZoomControlEnabled enables the zoom factor to be changed by the user. // IsZoomControlEnabled enables the zoom factor to be changed by the user.
IsZoomControlEnabled: bool, IsZoomControlEnabled: bool,
@ -142,113 +142,113 @@ func main() {
### Title ### Title
The text shown in the window's title bar. Der Text, der in der Titelleiste des Fensters angezeigt wird.
Name: Title<br/> Type: `string` Name: Title<br/> Typ: `String`
### Width ### Width
The initial width of the window. Die anfängliche Breite des Fensters.
Name: Width<br/> Type: `int`<br/> Default: 1024. Name: Width<br/> Typ: `int`<br/> Standard: 1024.
### Height ### Height
The initial height of the window. Die anfängliche Höhe des Fensters.
Name: Height<br/> Type: `int`<br/> Default: 768 Name: Height<br/> Typ: `int`<br/> Standard: 768
### DisableResize ### DisableResize
By default, the main window is resizable. Setting this to `true` will keep it a fixed size. Standardmäßig ist das Hauptfenster skalierbar. Setze dies auf `true` um eine feste Größe zu behalten.
Name: DisableResize<br/> Type: `bool` Name: DisableResize<br/> Typ: `bool`
### Fullscreen ### Fullscreen
Deprecated: Please use [WindowStartState](#windowstartstate). Veraltet: Bitte verwende [WindowStartState](#windowstartstate).
### WindowStartState ### WindowStartState
Defines how the window should present itself at startup. Legt fest, wie sich das Fenster beim Start darstellen soll.
| Value | Win | Mac | Lin | | Wert | Win | Mac | Lin |
| ---------- | --- | --- | --- | | ---------- | --- | --- | --- |
| Fullscreen | ✅ | ✅ | ✅ | | Fullscreen | ✅ | ✅ | ✅ |
| Maximised | ✅ | ✅ | ✅ | | Maximised | ✅ | ✅ | ✅ |
| Minimised | ✅ | ❌ | ✅ | | Minimised | ✅ | ❌ | ✅ |
Name: WindowStartState<br/> Type: `options.WindowStartState` Name: WindowStartState<br/> Typ: `options.WindowStartState`
### Frameless ### Frameless
When set to `true`, the window will have no borders or title bar. Also see [Frameless Windows](../guides/frameless.mdx). Wenn auf `true` gesetzt, wird das Fenster keine Ränder oder Titelleiste haben. Siehe auch [Frameless Windows](../guides/frameless.mdx).
Name: Frameless<br/> Type: `bool` Name: Frameless<br/> Typ: `bool`
### MinWidth ### MinWidth
This sets the minimum width for the window. If the value given in `Width` is less than this value, the window will be set to `MinWidth` by default. Legt die Mindestbreite für das Fenster fest. Wenn der Wert in `Width` kleiner als dieser Wert ist, wird das Fenster standardmäßig auf `MinWidth` gesetzt.
Name: MinWidth<br/> Type: `int` Name: MinWidth<br/> Typ: `int`
### MinHeight ### MinHeight
This sets the minimum height for the window. If the value given in `Height` is less than this value, the window will be set to `MinHeight` by default. Legt die minimale Höhe für das Fenster fest. Wenn der Wert in `Height` kleiner ist als dieser Wert, wird das Fenster standardmäßig auf `MinHeight` gesetzt.
Name: MinHeight<br/> Type: `int` Name: MinHeight<br/> Typ: `int`
### MaxWidth ### MaxWidth
This sets the maximum width for the window. If the value given in `Width` is more than this value, the window will be set to `MaxWidth` by default. Legt die maximale Breite für das Fenster fest. Wenn der Wert in `Width` größer ist als dieser Wert, wird das Fenster standardmäßig auf `MaxWidth` gesetzt.
Name: MaxWidth<br/> Type: `int` Name: MaxWidth<br/> Typ: `int`
### MaxHeight ### MaxHeight
This sets the maximum height for the window. If the value given in `Height` is more than this value, the window will be set to `MaxHeight` by default. Legt die maximale Höhe für das Fenster fest. Wenn der Wert in `Height` größer als dieser Wert ist, wird das Fenster standardmäßig auf `MaxHeight` gesetzt.
Name: MaxHeight<br/> Type: `int` Name: MaxHeight<br/> Typ: `int`
### StartHidden ### StartHidden
When set to `true`, the application will be hidden until [WindowShow](../reference/runtime/window.mdx#windowshow) is called. Wenn auf `true` gesetzt, wird die Anwendung ausgeblendet bis [WindowShow](../reference/runtime/window.mdx#windowshow) aufgerufen wird.
Name: StartHidden<br/> Type: `bool` Name: StartHidden<br/> Typ: `bool`
### HideWindowOnClose ### HideWindowOnClose
By default, closing the window will close the application. Setting this to `true` means closing the window will Standardmäßig schließt das Schließen des Fensters die Anwendung. Das Setzen auf `true` bedeutet, dass das Fenster nicht geschlossen sondern
hide the window instead. versteckt wird.
Name: HideWindowOnClose<br/> Type: `bool` Name: HideWindowOnClose<br/> Typ: `bool`
### BackgroundColour ### Hintergrundfarbe
This value is the default background colour of the window. Example: options.NewRGBA(255,0,0,128) - Red at 50% transparency Dieser Wert ist die Standard-Hintergrundfarbe des Fensters. Beispiel: options.NewRGBA(255,0,0,128) - Rot bei 50% Transparenz
Name: BackgroundColour<br/> Type: `*options.RGBA`<br/> Default: white Name: BackgroundColour<br/> Typ: `*options.RGBA`<br/> Standard: white
### AlwaysOnTop ### AlwaysOnTop
Indicates that the window should stay above other windows when losing focus. Zeigt an, dass das Fenster über anderen Fenstern bleiben soll, wenn der Fokus verloren geht.
Name: AlwaysOnTop<br/> Type: `bool` Name: AlwaysOnTop<br/> Typ: `bool`
### Assets ### Assets
Deprecated: Please use Assets on [AssetServer specific options](#assetserver). Veraltet: Bitte verwende Assets auf [AssetServer spezifische Optionen](#assetserver).
### AssetsHandler ### AssetsHandler
Deprecated: Please use AssetsHandler on [AssetServer specific options](#assetserver). Veraltet: Bitte verwende AssetsHandler auf [AssetServer spezifische Optionen](#assetserver).
### AssetServer ### AssetServer
This defines AssetServer specific options. It allows to customize the AssetServer with static assets, serving assets dynamically with an `http.Handler` or hook into the request chain with an `assetserver.Middleware`. Dies definiert AssetServer spezifische Optionen. Es ermöglicht die Anpassung des AssetServers mit statischen Assets, das dynamische Bereitstellen von Assets mit einem `http.Handler` oder das Einbinden in die Anforderungskette mit einer `assetserver.Middleware`.
Not all features of an `http.Request` are currently supported, please see the following feature matrix: Nicht alle Funktionen eines `http.Request` werden derzeit unterstützt, siehe folgende Featurematrix:
| Feature | Win | Mac | Lin | | Feature | Win | Mac | Lin |
| ----------------------- | --- | --- | ------ | | ----------------------- | --- | --- | ------ |
@ -267,98 +267,98 @@ Not all features of an `http.Request` are currently supported, please see the fo
| WebSockets | ❌ | ❌ | ❌ | | WebSockets | ❌ | ❌ | ❌ |
| HTTP Redirects 30x | ✅ | ❌ | ❌ | | HTTP Redirects 30x | ✅ | ❌ | ❌ |
Name: AssetServer<br/> Type: `*assetserver.Options` Name: AssetServer<br/> Typ: `*assetserver.Options`
#### Assets #### Assets
The static frontend assets to be used by the application. Die statischen Frontend-Assets für die Anwendung.
A GET request is first tried to be served from this `fs.FS`. If the `fs.FS` returns `os.ErrNotExist` for that file, the request handling will fallback to the [Handler](#handler) and tries to serve the GET request from it. Zunächst wird versucht, eine GET-Anfrage vom `fs.FS` zu bedienen. Gibt die `fs.FS` für diese Datei `os.ErrNotExist` zurück, so greift die Anforderungsbehandlung auf den [Handler](#handler) zurück und versucht, die GET-Anforderung darüber zu bedienen.
If set to nil, all GET requests will be forwarded to [Handler](#handler). Wenn auf Null gesetzt, werden alle GET-Anfragen an [Handler](#handler) weitergeleitet.
Name: Assets<br/> Type: `fs.FS` Name: Assets<br/> Typ: `fs.FS`
#### Handler #### Handler
The assets handler is a generic `http.Handler` for fallback handling of assets that can't be found. Der Asset-Handler ist ein generischer `http.Handler` für den Fallback-Umgang mit Assets, die nicht gefunden werden können.
The handler will be called for every GET request that can't be served from [Assets](#assets), due to `os.ErrNotExist`. Furthermore all non GET requests will always be served from this Handler. If not defined, the result is the following in cases where the Handler would have been called: Der Handler wird für jede GET-Anfrage aufgerufen, die nicht von [Assets](#assets)bedient werden kann, aufgrund von `os.ErrNotExist`. Des Weiteren werden alle Nicht-GET-Anfragen immer von diesem Handler bedient. Wenn nicht definiert, ist das Ergebnis in den Fällen, in denen der Handler aufgerufen worden wäre, folgende:
- GET request: `http.StatusNotFound` - GET-Anfrage: `http.StatusNotFound`
- Other request: `http.StatusMethodNotAllowed` - Andere Anfrage: `http.StatusMethodNotAllowed`
:::info :::info
This does not work with vite v5.0.0+ and wails v2 due to changes in vite. Changes are planned in v3 to support similar functionality under vite v5.0.0+. If you need this feature, stay with vite v4.0.0+. See [issue 3240](https://github.com/wailsapp/wails/issues/3240) for details Diese Funktion funktioniert nicht mit vite v5.0.0+ und wails v2 aufgrund von Veränderungen in vite. Änderungen sind in v3 geplant, um ähnliche Funktionen unter v5.0.0+ zu unterstützen. Wenn du diese Funktion benötigst, bleibe bei vite v4.0.0+. Siehe [Issue 3240](https://github.com/wailsapp/wails/issues/3240) für Details
::: :::
NOTE: When used in combination with a Frontend DevServer there might be limitations, eg. Vite serves the index.html on every path, that does not contain a file extension. HINWEIS: Bei Verwendung in Kombination mit einem Frontend DevServer kann es zu Einschränkungen kommen wie z.B. Vite liefert index.html aus für jeden Pfad, der keine Dateiendung enthält.
Name: AssetsHandler<br/> Type: `http.Handler` Name: AssetsHandler<br/> Typ: `http.Handler`
#### Middleware #### Middleware
Middleware is a HTTP Middleware which allows to hook into the AssetServer request chain. It allows to skip the default request handler dynamically, e.g. implement specialized Routing etc. The Middleware is called to build a new `http.Handler` used by the AssetSever and it also receives the default handler used by the AssetServer as an argument. Middleware ist eine HTTP Middleware, mit der du in die AssetServer Request-Kette eingreifen kannst. Es erlaubt den Standard- Anfragehandler dynamisch zu überspringen, um z.B. spezialisiertes Routing etc. zu implementieren. Die Middleware wird aufgerufen, um einen neuen `http.Handler` zu erstellen, der vom AssetServer verwendet wird, und erhält auch den vom AssetServer verwendeten Standardhandler als Argument.
If not defined, the default AssetServer request chain is executed. Wenn nicht definiert, wird die standardmäßige AssetServer Request-Kette ausgeführt.
Name: Middleware<br/> Type: `assetserver.Middleware` Name: Middleware<br/> Typ: `assetserver.Middleware`
### Menu ### Menu
The menu to be used by the application. More details about Menus in the [Menu Reference](../reference/runtime/menu.mdx). Das Menü das von der Anwendung verwendet werden soll. Weitere Details zu Menüs findest du in der [Menü-Referenz](../reference/runtime/menu.mdx).
:::note :::note
On Mac, if no menu is specified, a default menu will be created. Wenn auf Mac kein Menü angegeben ist, wird ein Standardmenü erstellt.
::: :::
Name: Menu<br/> Type: `*menu.Menu` Name: Menu<br/> Typ: `*menu.Menu`
### Logger ### Logger
The logger to be used by the application. More details about logging in the [Log Reference](../reference/runtime/log.mdx). Der Logger, der von der Anwendung verwendet werden soll. Weitere Details zum Loggen in der [Log-Referenz](../reference/runtime/log.mdx).
Name: Logger<br/> Type: `logger.Logger`<br/> Default: Logs to Stdout Name: Logger<br/> Type: `logger.Logger`<br/> Default: Logs to Stdout
### LogLevel ### LogLevel
The default log level. More details about logging in the [Log Reference](../reference/runtime/log.mdx). Der Standard-Log-Level. Weitere Details zum Loggen in der [Log-Referenz](../reference/runtime/log.mdx).
Name: LogLevel<br/> Type: `logger.LogLevel`<br/> Default: `Info` in dev mode, `Error` in production mode Name: LogLevel<br/> Typ: `logger.LogLevel`<br/> Standard: `Info` im Dev-Modus, `Fehler` im Produktionsmodus
### LogLevelProduction ### LogLevelProduction
The default log level for production builds. More details about logging in the [Log Reference](../reference/runtime/log.mdx). Der Standard-Log-Level für Produktions-Builds. Weitere Details zum Loggen in der [Log-Referenz](../reference/runtime/log.mdx).
Name: LogLevelProduction<br/> Type: `logger.LogLevel`<br/> Default: `Error` Name: LogLevelProduction<br/> Typ: `logger.LogLevel`<br/> Standard: `Error`
### OnStartup ### OnStartup
This callback is called after the frontend has been created, but before `index.html` has been loaded. It is given the application context. Dieser Callback wird aufgerufen, nachdem das Frontend erstellt wurde und bevor `index.html` geladen wird. Der Kontext der Anwendung wird mit übergeben.
Name: OnStartup<br/> Type: `func(ctx context.Context)` Name: OnStartup<br/> Typ: `func(ctx context.Context)`
### OnDomReady ### OnDomReady
This callback is called after the frontend has loaded `index.html` and its resources. It is given the application context. Dieser Callback wird aufgerufen, nachdem das Frontend `index.html` und seine Ressourcen geladen hat. Der Kontext der Anwendung wird mit übergeben.
Name: OnDomReady<br/> Type: `func(ctx context.Context)` Name: OnDomReady<br/> Typ: `func(ctx context.Context)`
### OnShutdown ### OnShutdown
This callback is called after the frontend has been destroyed, just before the application terminates. It is given the application context. Dieser Callback wird aufgerufen, nachdem das Frontend geschlossen wurde und die Anwendung kurz davor ist beendet zu werden. Der Kontext der Anwendung wird mit übergeben.
Name: OnShutdown<br/> Type: `func(ctx context.Context)` Name: OnShutdown<br/> Typ: `func(ctx context.Context)`
### OnBeforeClose ### OnBeforeClose
If this callback is set, it will be called when the application is about to quit, either by clicking the window close button or calling `runtime.Quit`. Returning true will cause the application to continue, false will continue shutdown as normal. This is good for confirming with the user that they wish to exit the program. Wenn dieser Callback gesetzt ist, wird er aufgerufen, wenn die Anwendung beendet wird, entweder durch Klicken auf die Schließen-Taste oder durch den Aufruf der Funktion `runtime.Quit`. Das Zurückgeben von true führt dazu, dass die Anwendung bis zur manuellen Schließung weiter läuft, und false, wenn die Anwendung normal beendet werden soll. Das kann hilfreich werden, wenn man den Nutzer fragen will, ob er wirklich das Programm beenden will.
Example: Beispiel:
```go title=windowsapp.go ```go title=windowsapp.go
func (b *App) beforeClose(ctx context.Context) (prevent bool) { func (b *App) beforeClose(ctx context.Context) (prevent bool) {
@ -375,246 +375,246 @@ func (b *App) beforeClose(ctx context.Context) (prevent bool) {
} }
``` ```
Name: OnBeforeClose<br/> Type: `func(ctx context.Context) bool` Name: OnBeforeClose<br/> Typ: `func(ctx context.Context) bool`
### CSSDragProperty ### CSSDragProperty
Indicates the CSS property to use to identify which elements can be used to drag the window. Default: `--wails-draggable`. Gibt die CSS-Eigenschaft an, die verwendet werden soll, um zu ermitteln, welche Elemente verwendet werden können, um das Fenster zu ziehen. Standard: `--wails-draggable`.
Name: CSSDragProperty<br/> Type: `string` Name: CSSDragProperty<br/> Typ: `String`
### CSSDragValue ### CSSDragValue
Indicates what value the `CSSDragProperty` style should have to drag the window. Default: `drag`. Gibt an, welchen Wert der Stil `CSSDragProperty` haben muss, um das Fenster zu ziehen. Standard: `drag`.
Name: CSSDragValue<br/> Type: `string` Name: CSSDragValue<br/> Typ: `String`
### EnableDefaultContextMenu ### EnableDefaultContextMenu
EnableDefaultContextMenu enables the browser's default context-menu in production. EnableDefaultContextMenu aktiviert das Standard-Kontextmenü des Browsers im Produktionsmodus.
By default, the browser's default context-menu is only available in development and in a `-debug` [build](../reference/cli.mdx#build) along with the devtools inspector, Using this option you can enable the default context-menu in `production` while the devtools inspector won't be available unless the `-devtools` build flag is used. Standardmäßig ist das Standardkontextmenü des Browsers nur in der Entwicklung und in einem `-debug` [build](../reference/cli.mdx#build) zusammen mit dem Devtools-Inspektor verfügbar. Mit dieser Option kann das Standardkontextmenü in `production` aktiviert werden, während der Devtools-Inspektor nicht verfügbar ist, es sei denn, die `-devtools` Build-Flag wird verwendet.
When this option is enabled, by default the context-menu will only be shown for text contexts (where Cut/Copy/Paste is needed), to override this behavior, you can use the CSS property `--default-contextmenu` on any HTML element (including the `body`) with the following values : Wenn diese Option aktiviert ist, wird das Kontextmenü standardmäßig nur für Textkontexte angezeigt (wo Cut/Copy/Paste benötigt wird), um dieses Verhalten zu überschreiben, kann die CSS-Eigenschaft `--default-contextmenu` für jedes HTML-Element verwenden (einschließlich `body`) mit den folgenden Werten:
| CSS Style | Behavior | | CSS Style | Verhalten |
| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------- | | ------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `--default-contextmenu: auto;` | (**default**) will show the default context menu only if :<br/> contentEditable is true OR text has been selected OR element is input or textarea | | `--default-contextmenu: auto;` | (**Standard**) Das Standardkontextmenü wird nur angezeigt, wenn: <br/> contentEditable auf true gesetzt ist ODER Text markiert wurde ODER das Element ein Eingabefeld oder eine Textfläche ist |
| `--default-contextmenu: show;` | will always show the default context menu | | `--default-contextmenu: show;` | Das Standard-Kontextmenü wird, immer angezeigt |
| `--default-contextmenu: hide;` | will always hide the default context menu | | `--default-contextmenu: hide;` | Das Standard-Kontextmenü wird immer ausgeblendet |
This rule is inherited like any normal CSS rule, so nesting works as expected. Diese Regel wird wie jede normale CSS-Regel vererbt, so dass Nesting wie erwartet funktioniert.
:::note :::note
This filtering functionality is only enabled in production, so in development and in debug build, the full context-menu is always available everywhere. Diese Filterfunktionalität ist nur im Produktions-Modus aktiviert, daher ist in der Entwicklung und im Debug-Build das komplette Kontextmenü immer verfügbar.
::: :::
:::warning :::warning
This filtering functionality is NOT a security measure, the developer should expect that the full context-menu could be leaked anytime which could contain commands like (Download image, Reload, Save webpage), if this is a concern, the developer SHOULD NOT enable the default context-menu. Diese Filterfunktion ist KEINE Sicherheitsmaßnahme. Der Entwickler sollte damit rechnen, dass das vollständige Kontextmenü jederzeit offengelegt werden könnte und Befehle, wie (Bild herunterladen, neu laden, Webseite speichern), enthalten sein könnten. Wenn dies ein Problem darstellt, SOLLTE der Entwickler das Standardkontextmenü NICHT aktivieren.
::: :::
Name: EnableDefaultContextMenu<br/> Type: `bool` Name: EnableDefaultContextMenu<br/> Typ: `bool`
### EnableFraudulentWebsiteDetection ### EnableFraudulentWebsiteDetection
EnableFraudulentWebsiteDetection enables scan services for fraudulent content, such as malware or phishing attempts. These services might send information from your app like URLs navigated to and possibly other content to cloud services of Apple and Microsoft. EnableFraudulentWebsiteDetection aktiviert Scan-Services für betrügerische Inhalte, wie z. B. Malware oder Phishing-Versuche. Diese Dienste senden möglicherweise Informationen aus der App, wie z. B. aufgerufene URLs und möglicherweise andere Inhalte, an Cloud-Dienste von Apple und Microsoft.
Name: EnableFraudulentWebsiteDetection<br/> Type: `bool` Name: EnableFraudulentWebsiteDetection<br/> Typ: `bool`
### Bind ### Bind
A slice of struct instances defining methods that need to be bound to the frontend. Ein slice von Struct-Instanzen, die Methoden definieren, die an das Frontend gebunden werden müssen.
Name: Bind<br/> Type: `[]interface{}` Name: Bind<br/> Typ: `[]interface{}`
### EnumBind ### EnumBind
A slice of Enum arrays that need to be bound to the frontend. Ein slice von Enum-Arrays, die an das Frontend gebunden werden müssen.
Name: EnumBind<br/> Type: `[]interface{}` Name: EnumBind<br/> Type: `[]interface{}`
### ErrorFormatter ### ErrorFormatter
A function that determines how errors are formatted when returned by a JS-to-Go method call. The returned value will be marshalled as JSON. Eine Funktion, die bestimmt, wie Fehler formatiert werden, wenn sie von einem JS-to-Go-Methodenaufruf zurückgegeben werden. Der zurückgegebene Wert wird als JSON formatiert.
Name: ErrorFormatter<br/> Type: `func (error) any` Name: ErrorFormatter<br/> Typ: `func (error) any`
### SingleInstanceLock ### SingleInstanceLock
Enables single instance locking. This means that only one instance of your application can be running at a time. Aktiviert die Limitierung von mehreren Instanzen. Das bedeutet, dass nur eine Instanz der Anwendung gleichzeitig laufen kann.
Name: SingleInstanceLock<br/> Type: `*options.SingleInstanceLock` Name: SingleInstanceLock<br/> Typ: `*options.SingleInstanceLock`
#### UniqueId #### UniqueId
This id is used to generate the mutex name on Windows and macOS and the dbus name on Linux. Use a UUID to ensure that the id is unique. Diese Id wird verwendet, um den Mutex-Namen unter Windows und macOS und den dbus-Namen unter Linux zu erzeugen. Verwende eine UUID, um sicherzustellen, dass die Id einzigartig ist.
Name: UniqueId<br/> Type: `string` Name: UniqueId<br/> Typ: `string`
#### OnSecondInstanceLaunch #### OnSecondInstanceLaunch
Callback that is called when a second instance of your app is launched. Dieser Callback wird aufgerufen, wenn eine zweite Instanz der App gestartet wird.
Name: OnSecondInstanceLaunch<br/> Type: `func(secondInstanceData SecondInstanceData)` Name: OnSecondInstanceLaunch<br/> Typ: `func(secondInstanceData SecondInstanceData)`
### Drag and Drop ### Drag and Drop
Defines the behavior of drag and drop events on the window. Definiert das Verhalten von Drag and Drop Ereignissen im Fenster.
Name: DragAndDrop<br/> Type: `options.DragAndDrop` Name: DragAndDrop<br/> Typ: `options.DragAndDrop`
#### EnableFileDrop #### EnableFileDrop
EnableFileDrop enables wails' drag and drop functionality that returns the dropped in files' absolute paths. EnableFileDrop aktiviert die Drag-and-Drop-Funktion von Wails, die die absoluten Pfade der abgelegten Dateien zurückgibt.
When it is set to `true` the [runtime methods](../reference/runtime/draganddrop.mdx) can be used. <br/> Or you can listen for the `wails:file-drop` event with [runtime EventsOn method](../reference/runtime/events.mdx#eventson) both on the Javascript and GO side to implement any functionality you would like. Wenn auf `true` gesetzt, können die [Laufzeitmethoden](../reference/runtime/draganddrop.mdx) verwendet werden. <br/> Oder die Anwendung hört auf das `wails:file-drop` Event mit der [runtime EventsOn Methode](../reference/runtime/events.mdx#eventson) sowohl auf der JavaScript als auch auf GO Seite, um alle Funktionen zu implementieren, die du dir wünschst.
The event returns the coordinates of the drop and a file path slice. Das Ereignis gibt die Koordinaten des Drop und ein Datei-Pfad-Slice zurück.
Name: EnableFileDrop<br/> Type: `bool`<br/> Default: `false` Name: EnableFileDrop<br/> Typ: `bool`<br/> Standard: `false`
#### DisableWebViewDrop #### DisableWebViewDrop
Disables the webview's drag and drop functionality. Deaktiviert die Drag and Drop Funktion des Webviews.
It can be used to prevent accidental opening of dragged in files in the webview, when there is no need for drag and drop. Es kann verwendet werden, um das versehentliche Öffnen von Dateien in der Webansicht zu verhindern, wenn kein Drag & Drop erforderlich ist.
Name: DisableWebViewDrop<br/> Type: `bool`<br/> Default: `false` Name: DisableWebViewDrop<br/> Typ: `bool`<br/> Standard: `false`
#### CSSDropProperty #### CSSDropProperty
CSS property to test for drag and drop target elements. CSS-Eigenschaft, die auf Drag and Drop von Zielelementen getestet werden soll.
Name: CSSDropProperty<br/> Type: `string`<br/> Default: `--wails-drop-target` Name: CSSDropProperty<br/> Typ: `string`<br/> Standard: `--wails-drop-target`
#### CSSDropValue #### CSSDropValue
The CSS Value that the CSSDropProperty must have to be a valid drop target. Default "drop" Der CSS-Wert, den die CSSDropProperty haben muss, um ein gültiges Drop-Ziel zu sein. Standard "drop"
Name: CSSDropValue<br/> Type: `string`<br/> Default: `drop` Name: CSSDropValue<br/> Typ: `string`<br/> Standard: `drop`
### Windows ### Windows
This defines [Windows specific options](#windows). Definiert [Windows spezifische Optionen](#windows).
Name: Windows<br/> Type: `*windows.Options` Name: Windows<br/> Typ: `*windows.Options`
#### WebviewIsTransparent #### WebviewIsTransparent
Setting this to `true` will make the webview background transparent when an alpha value of `0` is used. This means that if you use `rgba(0,0,0,0)` for `background-color` in your CSS, the host window will show through. Often combined with [WindowIsTranslucent](#WindowIsTranslucent) to make frosty-looking applications. Wenn dies auf `true` gesetzt wird, wird der Hintergrund der Webansicht transparent, wenn ein Alphawert von `0` verwendet wird. Das bedeutet, dass, wenn `rgba(0,0,0,0)` als `background-color` CSS festgelegt wurde, das Host-Fenster durchsichtig ist. Oft kombiniert mit [WindowIsTranslucent](#WindowIsTranslucent) um einen frostigen Hintergrund für die Anwendungen zu erstellen.
Name: WebviewIsTransparent<br/> Type: `bool` Name: WebviewIsTransparent<br/> Typ: `bool`
#### WindowIsTranslucent #### WindowIsTranslucent
Setting this to `true` will make the window background translucent. Often combined with [WebviewIsTransparent](#WebviewIsTransparent). Wenn auf `true` gesetzt, wird der Hintergrund des Fensters transparent gemacht. Oft kombiniert mit [WebviewIsTransparent](#WebviewIsTransparent).
For Windows 11 versions before build 22621, this will use the [BlurBehind](https://learn.microsoft.com/en-us/windows/win32/dwm/blur-ovw) method for translucency, which can be slow. For Windows 11 versions after build 22621, this will enable the newer translucency types that are much faster. By default, the type of translucency used will be determined by Windows. To configure this, use the [BackdropType](#BackdropType) option. Bei Windows 11 Versionen vor dem Build 22621 wird die [BlurBehind](https://learn.microsoft.com/en-us/windows/win32/dwm/blur-ovw) Methode für Transluzenz verwendet, welche langsam sein kann. Für Windows 11 Versionen nach dem Build 22621 wird dies die neuere Transluzenz-Typen aktivieren, die wesentlich schneller sind. Standardmäßig wird der verwendete Transluzenz-Typ von Windows bestimmt. Verwenden dazu die [BackdropType](#BackdropType) Option.
Name: WindowIsTranslucent<br/> Type: `bool` Name: WindowIsTranslucent<br/> Typ: `bool`
#### BackdropType #### BackdropType
:::note :::note
Requires Windows 11 build 22621 or later. Benötigt Windows 11 Build 22621 oder höher.
::: :::
Sets the translucency type of the window. This is only applicable if [WindowIsTranslucent](#WindowIsTranslucent) is set to `true`. Legt den Transparenztyp des Fensters fest. Dies gilt nur, wenn [WindowIsTranslucent](#WindowIsTranslucent) auf `true` gesetzt ist.
Name: BackdropType<br/> Type `windows.BackdropType` Name: BackdropType<br/> Typ `windows.BackdropType`
The value can be one of the following: Der Wert kann einer der folgenden sein:
| Value | Description | | Wert | Beschreibung |
| ------- | ----------------------------------------------------------------------------------------- | | ------- | ---------------------------------------------------------------------------------------------- |
| Auto | Let Windows decide which backdrop to use | | Auto | Lässt Windows entscheiden, welcher Hintergrund verwendet werden soll |
| None | Do not use translucency | | None | Keine Transparenz verwenden |
| Acrylic | Use [Acrylic](https://learn.microsoft.com/en-us/windows/apps/design/style/acrylic) effect | | Acrylic | [Acryl-](https://learn.microsoft.com/en-us/windows/apps/design/style/acrylic) Effekt verwenden |
| Mica | Use [Mica](https://learn.microsoft.com/en-us/windows/apps/design/style/mica) effect | | Mica | [Mica](https://learn.microsoft.com/en-us/windows/apps/design/style/mica) Effekt verwenden |
| Tabbed | Use Tabbed. This is a backdrop that is similar to Mica. | | Tabbed | Tabbed verwenden. Dies ist ein Hintergrund, der Mica ähnlich ist. |
#### ZoomFactor #### ZoomFactor
Name: ZoomFactor<br/> Type: `float64` Name: ZoomFactor<br/> Typ: `float64`
This defines the zoom factor for the WebView2. This is the option matching the Edge user activated zoom in or out. Dies legt den Zoomfaktor für das WebView2 fest. Dies ist die Option, die mit dem aktivierten Zoom-Modus des Edge Benutzers übereinstimmt.
#### IsZoomControlEnabled #### IsZoomControl aktiviert
Name: IsZoomControlEnabled<br/> Type: `bool` Name: IsZoomControlEnabled<br/> Typ: `bool`
This enables the zoom factor to be changed by the user. Please note that the zoom factor can be set in the options while disallowing the user to change it at runtime (f.e. for a kiosk application or similar). Dadurch kann der Zoomfaktor vom Benutzer geändert werden. Bitte beachte, dass der Zoomfaktor in den Optionen gesetzt werden kann, während es dem Benutzer nicht erlaubt, ihn zur Laufzeit zu ändern (z. B. für eine Kiosk Applikation oder ähnliches).
#### DisablePinchZoom #### DisablePinchZoom
Setting this to `true` will disable pinch zoom gestures. Wenn dies auf `true` gesetzt wird, werden die Pinch-Zoom-Gesten deaktiviert.
Name: DisablePinchZoom<br/> Type: `bool` Name: DisablePinchZoom<br/> Typ: `bool`
#### DisableWindowIcon #### DisableWindowIcon
Setting this to `true` will remove the icon in the top left corner of the title bar. Wird dies auf `true` gesetzt, wird das Symbol in der oberen linken Ecke der Titelleiste entfernt.
Name: DisableWindowIcon<br/> Type: `bool` Name: DisableWindowIcon<br/> Typ: `bool`
#### DisableFramelessWindowDecorations #### DisableFramelessWindowDecorations
Setting this to `true` will remove the window decorations in [Frameless](#Frameless) mode. This means there will be no 'Aero Shadow' and no 'Rounded Corners' shown for the window. Please note that 'Rounded Corners' are only supported on Windows 11. Wird dies auf `true` gesetzt, werden die Fensterdekorationen im [Frameless](#Frameless) Modus entfernt. Dies bedeutet, dass kein 'Aero Schatten' und keine 'Abgerundeten Ecken' für das Fenster angezeigt werden. Bitte beachte, dass 'Abgerundete Ecken' nur unter Windows 11 unterstützt werden.
Name: DisableFramelessWindowDecorations<br/> Type: `bool` Name: DisableFramelessWindowDecorations<br/> Typ: `bool`
#### WebviewUserDataPath #### WebviewUserDataPath
This defines the path where the WebView2 stores the user data. If empty `%APPDATA%\[BinaryName.exe]` will be used. Dies legt den Pfad fest, in dem der WebView2 die Benutzerdaten speichert. Wenn leer wird `%APPDATA%\[BinaryName.exe]` verwendet.
Name: WebviewUserDataPath<br/> Type: `string` Name: WebviewUserDataPath<br/> Typ: `string`
#### WebviewBrowserPath #### WebviewBrowserPath
This defines the path to a directory with WebView2 executable files and libraries. If empty, webview2 installed in the system will be used. Definiert den Pfad zu einem Verzeichnis mit WebView2 ausführbaren Dateien und Bibliotheken. Falls leer, wird das Webview2 verwendet, welches bereits auf dem System installiert wurde.
Important information about distribution of fixed version runtime: Wichtige Informationen zur Verteilung der Fixed-Version-Laufzeit:
- [How to get and extract runtime](https://docs.microsoft.com/en-us/microsoft-edge/webview2/concepts/distribution#details-about-the-fixed-version-runtime-distribution-mode) - [Wie man Laufzeit erhält und extrahiert](https://docs.microsoft.com/en-us/microsoft-edge/webview2/concepts/distribution#details-about-the-fixed-version-runtime-distribution-mode)
- [Known issues for fixed version](https://docs.microsoft.com/en-us/microsoft-edge/webview2/concepts/distribution#known-issues-for-fixed-version) - [Bekannte Probleme für die fixed Version](https://docs.microsoft.com/en-us/microsoft-edge/webview2/concepts/distribution#known-issues-for-fixed-version)
- [The path of fixed version of the WebView2 Runtime should not contain \Edge\Application\.](https://docs.microsoft.com/en-us/microsoft-edge/webview2/reference/win32/webview2-idl?view=webview2-1.0.1245.22#createcorewebview2environmentwithoptions) - [Der Pfad der festen Version der WebView2-Laufzeitumgebung sollte nicht \Edge\Application\ enthalten.](https://docs.microsoft.com/en-us/microsoft-edge/webview2/reference/win32/webview2-idl?view=webview2-1.0.1245.22#createcorewebview2environmentwithoptions)
Name: WebviewBrowserPath<br/> Type: `string` Name: WebviewBrowserPath<br/> Typ: `string`
#### Theme #### Theme
Minimum Windows Version: Windows 10 2004/20H1 Minimale Windows-Version: Windows 10 2004/20H1
This defines the theme that the application should use: Dies definiert das Farbschema, das die Anwendung verwenden sollte:
| Value | Description | | Wert | Beschreibung |
| ------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| SystemDefault | _Default_. The theme will be based on the system default. If the user changes their theme, the application will update to use the new setting | | SystemDefault | _Standard_. Das Farbschema wird auf der System-Standardeinstellung basieren. Wenn der Benutzer sein Design ändert, wird die Anwendung aktualisiert, um die neue Einstellung zu verwenden |
| Dark | The application will use a dark theme exclusively | | Dark | Die Anwendung wird ausschließlich ein dunkles Farbschema verwenden |
| Light | The application will use a light theme exclusively | | Light | Die Anwendung wird ausschließlich ein helles Farbschema verwenden |
Name: Theme<br/> Type: `windows.Theme` Name: Theme<br/> Typ: `windows.Theme`
#### CustomTheme #### CustomTheme
:::note :::note
Minimum Windows Version: Windows 10/11 2009/21H2 Build 22000 Minimale Windows-Version: Windows 10/11 2009/21H2 Build 22000
::: :::
Allows you to specify custom colours for TitleBar, TitleText and Border for both light and dark mode, as well as when the window is active or inactive. Ermöglicht die Angabe benutzerdefinierter Farben für TitleBar, TitleText und Rahmen sowohl für den hellen als auch für den dunklen Modus, sowie wenn das Fenster aktiv oder inaktiv ist.
Name: CustomTheme<br/> Type: `windows.CustomTheme` Name: CustomTheme<br/> Typ: `windows.CustomTheme`
##### CustomTheme type ##### CustomTheme type
The CustomTheme struct uses `int32` to specify the colour values. These are in the standard(!) Windows format of: `0x00BBGGAA`. A helper function is provided to do RGB conversions into this format: `windows.RGB(r,g,b uint8)`. Der CustomTheme Struct verwendet ein `int32`, um die Farbwerte festzulegen. Diese sind im Standard(!) Windows-Format von: `0x00BBGGAA`. Für RGB-Konvertierungen in dieses Format wird eine Hilfsfunktion bereitgestellt: `windows.RGB(r,g,b uint8)`.
NOTE: Any value not provided will default to black. HINWEIS: Jeder nicht angegebene Wert ist standardmäßig schwarz.
```go ```go
type ThemeSettings struct { type ThemeSettings struct {
@ -633,7 +633,7 @@ type ThemeSettings struct {
} }
``` ```
Example: Beispiel:
```go ```go
CustomTheme: &windows.ThemeSettings{ CustomTheme: &windows.ThemeSettings{
@ -656,63 +656,63 @@ Example:
#### Messages #### Messages
A struct of strings used by the webview2 installer if a valid webview2 runtime is not found. Ein Strukt von Strings, die vom Webview2-Installer verwendet werden, falls keine gültige webview2-Laufzeit gefunden wird.
Name: Messages<br/> Type: `*windows.Messages` Name: Messages<br/> Typ: `*windows.Messages`
Customise this for any language you choose to support. Passe das für jede Sprache an, die du unterstützen möchtest.
#### ResizeDebounceMS #### ResizeDebounceMS
ResizeDebounceMS is the amount of time to debounce redraws of webview2 when resizing the window. The default value (0) will perform redraws as fast as it can. ResizeDebounceMS ist die Zeitspanne zum debounce Neuzeichnungen von webview2 bei der Größenänderung des Fensters. Der Standardwert (0) führt Neuziehungen so schnell wie möglich durch.
Name: ResizeDebounceMS<br/> Type: `uint16` Name: ResizeDebounceMS<br/> Typ: `uint16`
#### OnSuspend #### OnSuspend
If set, this function will be called when Windows initiates a switch to low power mode (suspend/hibernate) Wenn aktiviert, wird diese Funktion aufgerufen, wenn Windows in den Energiesparmodus wechselt (Standby/Ruhezustand)
Name: OnSuspend<br/> Type: `func()` Name: OnSuspend<br/> Typ: `func()`
#### OnResume #### OnResume
If set, this function will be called when Windows resumes from low power mode (suspend/hibernate) Wenn aktiviert, wird diese Funktion aufgerufen, wenn Windows im Energiesparmodus fortfährt (Standby/Ruhezustand)
Name: OnResume<br/> Type: `func()` Name: OnResume<br/> Typ: `func()`
#### WebviewGpuIsDisabled #### WebviewGpuIsDisabled
Setting this to `true` will disable GPU hardware acceleration for the webview. Wenn dies auf `true` gesetzt wird, wird die GPU-Hardware-Beschleunigung für das WebView deaktiviert.
Name: WebviewGpuIsDisabled<br/> Type: `bool` Name: WebviewGpuIsDisabled<br/> Typ: `bool`
#### EnableSwipeGestures #### EnableSwipeGestures
Setting this to `true` will enable swipe gestures for the webview. Wenn dies auf `true` gesetzt wird, werden Wischgesten für das WebView aktiviert.
Name: EnableSwipeGestures<br/> Type: `bool` Name: EnableSwipeGestures<br/> Typ: `bool`
#### WindowClassName #### WindowClassName
Class name for the window. If empty, 'wailsWindow' will be used. Klassenname für das Fenster. If empty, 'wailsWindow' will be used.
Name: WindowClassName<br/> Type: `string` Name: WindowClassName<br/> Typ: `string`
### Mac ### Mac
This defines [Mac specific options](#mac). Definiert [Mac-spezifische Optionen](#mac).
Name: Mac<br/> Type: `*mac.Options` Name: Mac<br/> Typ: `*mac.Options`
#### TitleBar #### TitleBar
The TitleBar struct provides the ability to configure the look and feel of the title bar. Der TitleBar Struct bietet die Möglichkeit, das Aussehen und das Gefühl der Titelleiste zu konfigurieren.
Name: TitleBar<br/> Type: [`*mac.TitleBar`](#titlebar-struct) Name: TitleBar<br/> Typ: [`*mac.TitleBar`](#titlebar-struct)
##### Titlebar struct ##### Titlebar struct
The titlebar of the application can be customised by using the TitleBar options: Die Titelleiste der Anwendung kann mit den TitleBar Optionen angepasst werden:
```go ```go
type TitleBar struct { type TitleBar struct {
@ -725,24 +725,24 @@ type TitleBar struct {
} }
``` ```
| Name | Description | | Name | Beschreibung |
| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| TitlebarAppearsTransparent | Makes the titlebar transparent. This has the effect of hiding the titlebar and the content fill the window. [Apple Docs](https://developer.apple.com/documentation/appkit/nswindow/1419167-titlebarappearstransparent?language=objc) | | TitlebarAppearsTransparent | Macht die Titelleiste transparent. Dies hat den Effekt, die Titelleiste zu verstecken und der Inhalt des Fensters füllt den freien Platz aus. [Apple Docs](https://developer.apple.com/documentation/appkit/nswindow/1419167-titlebarappearstransparent?language=objc) |
| HideTitle | Hides the title of the window. [Apple Docs](https://developer.apple.com/documentation/appkit/nswindowtitlevisibility?language=objc) | | HideTitle | Versteckt den Titel des Fensters. [Apple Docs](https://developer.apple.com/documentation/appkit/nswindowtitlevisibility?language=objc) |
| HideTitleBar | Removes [NSWindowStyleMaskTitled](https://developer.apple.com/documentation/appkit/nswindowstylemask/nswindowstylemasktitled/) from the style mask | | HideTitleBar | Entfernt [NSWindowStyleMaskTitled](https://developer.apple.com/documentation/appkit/nswindowstylemask/nswindowstylemasktitled/) aus der Stilmaske |
| FullSizeContent | Makes the webview fill the entire window. [Apple Docs](https://developer.apple.com/documentation/appkit/nswindowstylemask/nswindowstylemaskfullsizecontentview) | | FullSizeContent | Lässt das WebView das gesamte Fenster ausfüllen. [Apple Docs](https://developer.apple.com/documentation/appkit/nswindowstylemask/nswindowstylemaskfullsizecontentview) |
| UseToolbar | Adds a default toolbar to the window. [Apple Docs](https://developer.apple.com/documentation/appkit/nstoolbar?language=objc) | | UseToolbar | Fügt dem Fenster eine Standard-Symbolleiste hinzu. [Apple Docs](https://developer.apple.com/documentation/appkit/nstoolbar?language=objc) |
| HideToolbarSeparator | Removes the line beneath the toolbar. [Apple Docs](https://developer.apple.com/documentation/appkit/nstoolbar/1516954-showsbaselineseparator?language=objc) | | HideToolbarSeparator | Entfernt die Zeile unterhalb der Symbolleiste. [Apple Docs](https://developer.apple.com/documentation/appkit/nstoolbar/1516954-showsbaselineseparator?language=objc) |
Preconfigured titlebar settings are available: Vorkonfigurierte Titelleisten Einstellungen sind verfügbar:
| Setting | Example | | Einstellung | Beispiel |
| --------------------------- | ---------------------------------------------- | | --------------------------- | ---------------------------------------------- |
| `mac.TitleBarDefault()` | ![](/img/reference/titlebar-default.webp) | | `mac.TitleBarDefault()` | ![](/img/reference/titlebar-default.webp) |
| `mac.TitleBarHidden()` | ![](/img/reference/titlebar-hidden.webp) | | `mac.TitleBarHidden()` | ![](/img/reference/titlebar-hidden.webp) |
| `mac.TitleBarHiddenInset()` | ![](/img/reference/titlebar-hidden-inset.webp) | | `mac.TitleBarHiddenInset()` | ![](/img/reference/titlebar-hidden-inset.webp) |
Example: Beispiel:
```go ```go
Mac: &mac.Options{ Mac: &mac.Options{
@ -750,30 +750,30 @@ Mac: &mac.Options{
} }
``` ```
Click [here](https://github.com/lukakerr/NSWindowStyles) for some inspiration on customising the titlebar. Klicke [hier](https://github.com/lukakerr/NSWindowStyles) für eine Inspiration für das Anpassen der Titelleiste.
#### Appearance #### Appearance
Appearance is used to set the style of your app in accordance with Apple's [NSAppearance](https://developer.apple.com/documentation/appkit/nsappearancename?language=objc) names. Appearance wird verwendet, um den Stil der App in Übereinstimmung mit Apples [NSAussehen](https://developer.apple.com/documentation/appkit/nsappearancename?language=objc) Namen zu setzen.
Name: Appearance<br/> Type: [`mac.AppearanceType`](#appearance-type) Name: Appearance<br/> Typ: [`mac.AppearanceType`](#appearance-type)
##### Appearance type ##### Appearance type
You can specify the application's [appearance](https://developer.apple.com/documentation/appkit/nsappearance?language=objc). Du kannst das [Aussehen](https://developer.apple.com/documentation/appkit/nsappearance?language=objc) der Anwendung festlegen.
| Value | Description | | Wert | Beschreibung |
| ----------------------------------------------------- | --------------------------------------------------------------- | | ----------------------------------------------------- | -------------------------------------------------------------------------------- |
| DefaultAppearance | DefaultAppearance uses the default system value | | DefaultAppearance | DefaultAppearance verwendet den Standard-Systemwert |
| NSAppearanceNameAqua | The standard light system appearance | | NSAppearanceNameAqua | Das Standardmäßige helle Erscheinungsbild des Systems |
| NSAppearanceNameDarkAqua | The standard dark system appearance | | NSAppearanceNameDarkAqua | Das Standardmäßige dunkle Erscheinungsbild des Systems |
| NSAppearanceNameVibrantLight | The light vibrant appearance | | NSAppearanceNameVibrantLight | Das helle lebhafte Erscheinungsbild |
| NSAppearanceNameAccessibilityHighContrastAqua | A high-contrast version of the standard light system appearance | | NSAppearanceNameAccessibilityHighContrastAqua | Eine kontrastreiche Version des Standardmäßigen hellen Erscheinungsbild Systems |
| NSAppearanceNameAccessibilityHighContrastDarkAqua | A high-contrast version of the standard dark system appearance | | NSAppearanceNameAccessibilityHighContrastDarkAqua | Eine kontrastreiche Version des Standardmäßigen dunkeln Erscheinungsbild Systems |
| NSAppearanceNameAccessibilityHighContrastVibrantLight | A high-contrast version of the light vibrant appearance | | NSAppearanceNameAccessibilityHighContrastVibrantLight | Eine kontrastreiche Version des hellen, lebhaften Erscheinungsbilds |
| NSAppearanceNameAccessibilityHighContrastVibrantDark | A high-contrast version of the dark vibrant appearance | | NSAppearanceNameAccessibilityHighContrastVibrantDark | Eine kontrastreiche Version des dunklen lebendigen Erscheinungsbildes |
Example: Beispiel:
```go ```go
Mac: &mac.Options{ Mac: &mac.Options{
@ -783,37 +783,37 @@ Mac: &mac.Options{
#### WebviewIsTransparent #### WebviewIsTransparent
Setting this to `true` will make the webview background transparent when an alpha value of `0` is used. This means that if you use `rgba(0,0,0,0)` for `background-color` in your CSS, the host window will show through. Often combined with [WindowIsTranslucent](#WindowIsTranslucent) to make frosty-looking applications. Wenn dies auf `true` gesetzt wird, wird der Hintergrund der Webansicht transparent, wenn ein Alphawert von `0` verwendet wird. Das bedeutet, dass, wenn `rgba(0,0,0,0)` als `background-color` CSS festgelegt wurde, das Host-Fenster durchsichtig ist. Oft kombiniert mit [WindowIsTranslucent](#WindowIsTranslucent) um einen frostigen Hintergrund für die Anwendungen zu erstellen.
Name: WebviewIsTransparent<br/> Type: `bool` Name: WebviewIsTransparent<br/> Typ: `bool`
#### WindowIsTranslucent #### WindowIsTranslucent
Setting this to `true` will make the window background translucent. Often combined with [WebviewIsTransparent](#WebviewIsTransparent) to make frosty-looking applications. Wenn auf `true` gesetzt, wird der Hintergrund des Fensters transparent gemacht. Oft mit [WebviewIsTransparent](#WebviewIsTransparent) kombiniert, um frostig aussehende Anwendungshintergründe zu erstellen.
Name: WindowIsTranslucent<br/> Type: `bool` Name: WindowIsTranslucent<br/> Typ: `bool`
#### OnFileOpen #### OnFileOpen
Callback that is called when a file is opened with the application. Dieser Callback wird aufgerufen, wenn eine Datei mit der Anwendung geöffnet wird.
Name: OnFileOpen<br/> Type: `func(filePath string)` Name: OnFileOpen<br/> Typ: `func(filePath string)`
#### OnUrlOpen #### OnUrlOpen
Callback that is called when a URL is opened with the application. Dieser Callback wird aufgerufen, wenn eine URL mit der Anwendung geöffnet wird.
Name: OnUrlOpen<br/> Type: `func(filePath string)` Name: OnUrlOpen<br/> Typ: `func(filePath string)`
#### Preferences #### Preferences
The Preferences struct provides the ability to configure the Webview preferences. Das Preferences-Struct bietet die Möglichkeit, die Webview-Einstellungen zu konfigurieren.
Name: Preferences<br/> Type: [`*mac.Preferences`](#preferences-struct) Name: Preferences<br/> Typ: [`*mac.Preferences`](#preferences-struct)
##### Preferences struct ##### Preferences struct
You can specify the webview preferences. Du kannst die Webview-Einstellungen festlegen.
```go ```go
type Preferences struct { type Preferences struct {
@ -823,13 +823,13 @@ type Preferences struct {
} }
``` ```
| Name | Description | | Name | Beschreibung |
| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| TabFocusesLinks | A Boolean value that indicates whether pressing the tab key changes the focus to links and form controls. [Apple Docs](https://developer.apple.com/documentation/webkit/wkpreferences/2818595-tabfocuseslinks?language=objc) | | TabFocusesLinks | Ein Boolescher Wert, der angibt, ob durch Drücken der Tabulatortaste der Fokus auf Links und Formularelemente wechselt. [Apple Docs](https://developer.apple.com/documentation/webkit/wkpreferences/2818595-tabfocuseslinks?language=objc) |
| TextInteractionEnabled | A Boolean value that indicates whether to allow people to select or otherwise interact with text. [Apple Docs](https://developer.apple.com/documentation/webkit/wkpreferences/3727362-textinteractionenabled?language=objc) | | TextInteractionEnabled | Ein boolescher Wert, der angibt, ob Personen Text auswählen oder anderweitig mit Text interagieren sollen. [Apple Docs](https://developer.apple.com/documentation/webkit/wkpreferences/3727362-textinteractionenabled?language=objc) |
| FullscreenEnabled | A Boolean value that indicates whether a web view can display content full screen. [Apple Docs](https://developer.apple.com/documentation/webkit/wkpreferences/3917769-elementfullscreenenabled?language=objc) | | FullscreenEnabled | Ein boolescher Wert, der angibt, ob eine Web-Ansicht Inhalte im Vollbild anzeigen kann. [Apple Docs](https://developer.apple.com/documentation/webkit/wkpreferences/3917769-elementfullscreenenabled?language=objc) |
Example: Beispiel:
```go ```go
Mac: &mac.Options{ Mac: &mac.Options{
@ -843,9 +843,9 @@ Mac: &mac.Options{
#### About #### About
This configuration lets you set the title, message and icon for the "About" menu item in the app menu created by the "AppMenu" role. Diese Konfiguration ermöglicht es, den Titel, die Nachricht und das Symbol für den Menüpunkt "Über" im von der Rolle "AppMenu" erstellten App-Menü festzulegen.
Name: About<br/> Type: [`*mac.AboutInfo`](#about-struct) Name: About<br/> Typ: [`*mac.AboutInfo`](#about-struct)
##### About struct ##### About struct
@ -858,7 +858,7 @@ type AboutInfo struct {
} }
``` ```
If these settings are provided, an "About" menu item will appear in the app menu (when using the `AppMenu` role). Given this configuration: Wenn diese Einstellungen angegeben sind, erscheint im App-Menü ein "Info"-Menüeintrag (bei Verwendung der `AppMenu` Rolle). Ausgehend von dieser Konfiguration:
```go ```go
//go:embed build/appicon.png //go:embed build/appicon.png
@ -877,7 +877,7 @@ func main() {
}) })
``` ```
The "About" menu item will appear in the app menu: Der "Info" Menüeintrag wird im App-Menü erscheinen:
```mdx-code-block ```mdx-code-block
<div class="text--center"> <div class="text--center">
@ -889,7 +889,7 @@ The "About" menu item will appear in the app menu:
<br /> <br />
``` ```
When clicked, that will open an about message box: Wenn angeklickt, öffnet sich eine "Info" Message-Box:
```mdx-code-block ```mdx-code-block
<div class="text--center"> <div class="text--center">
@ -904,61 +904,61 @@ When clicked, that will open an about message box:
### Linux ### Linux
This defines [Linux specific options](#linux). Definiert [Linux-spezifische Optionen](#linux).
Name: Linux<br/> Type: `*linux.Options` Name: Linux<br/> Typ: `*linux.Options`
#### Icon #### Icon
Sets up the icon representing the window. This icon is used when the window is minimized (also known as iconified). Legt das Icon fest, das das Fenster darstellt. Dieses Icon wird verwendet, wenn das Fenster minimiert wird (auch bekannt als iconified).
Name: Icon<br/> Type: `[]byte` Name: Icon<br/> Typ: `[]byte`
Some window managers or desktop environments may also place it in the window frame, or display it in other contexts. On others, the icon is not used at all, so your mileage may vary. Einige Fenstermanager oder Desktop-Umgebungen können diese auch im Fensterrahmen platzieren oder in anderen Kontexten anzeigen. Bei anderen wird das Icon überhaupt nicht verwendet, sodass Ergebnisse variieren können.
NOTE: Gnome on Wayland at least does not display this icon. To have a application icon there, a `.desktop` file has to be used. On KDE it should work. HINWEIS: Wayland in Gnome zeigt dieses Icon nicht an. Um dort ein Anwendungsicon zu haben, muss eine `.desktop` Datei verwendet werden. Unter KDE sollte es funktionieren.
The icon should be provided in whatever size it was naturally drawn; that is, dont scale the image before passing it. Scaling is postponed until the last minute, when the desired final size is known, to allow best quality. Das Icon sollte in der Größe bereitgestellt werden, in der es ursprünglich gezeichnet wurde; das heißt, skaliere das Bild nicht, bevor es übergeben wird. Die Skalierung wird auf die letzte Minute verschoben, wenn die gewünschte Endgröße bekannt ist, um beste Qualität zu ermöglichen.
#### WindowIsTranslucent #### WindowIsTranslucent
Setting this to `true` will make the window background translucent. Some window managers may ignore it, or result in a black window. Wenn auf `true` gesetzt, wird der Hintergrund des Fensters transparent gemacht. Einige Fenstermanager ignorieren es oder führen zu einem schwarzen Fenster.
Name: WindowIsTranslucent<br/> Type: `bool` Name: WindowIsTranslucent<br/> Typ: `bool`
#### WebviewGpuPolicy #### WebviewGpuPolicy
This option is used for determining the webview's hardware acceleration policy. Diese Option wird verwendet, um die Hardwarebeschleunigungsrichtlinien des Webview zu bestimmen.
Name: WebviewGpuPolicy<br/> Type: [`options.WebviewGpuPolicy`](#webviewgpupolicy-type)<br/> Default: `WebviewGpuPolicyAlways` Name: WebviewGpuPolicy<br/> Typ: [`options.WebviewGpuPolicy`](#webviewgpupolicy-type)<br/> Standard: `WebviewGpuPolicyAlways`
##### WebviewGpuPolicy type ##### WebviewGpuPolicy Typ
| Value | Description | | Wert | Beschreibung |
| ------------------------ | -------------------------------------------------------------------- | | ------------------------ | ------------------------------------------------------------------------------------------ |
| WebviewGpuPolicyAlways | Hardware acceleration is always enabled | | WebviewGpuPolicyAlways | Hardwarebeschleunigung ist immer aktiviert |
| WebviewGpuPolicyOnDemand | Hardware acceleration is enabled/disabled as request by web contents | | WebviewGpuPolicyOnDemand | Die Hardwarebeschleunigung wird je nach Anforderung durch Webinhalte aktiviert/deaktiviert |
| WebviewGpuPolicyNever | Hardware acceleration is always disabled | | WebviewGpuPolicyNever | Hardwarebeschleunigung ist immer deaktiviert |
#### ProgramName #### ProgramName
This option is used to set the program's name for the window manager via GTK's g_set_prgname(). This name should not be localized, [see the docs](https://docs.gtk.org/glib/func.set_prgname.html). Mit dieser Option wird der Name des Programms für den Fenstermanager über GTK's g_set_prgname() gesetzt. Dieser Name sollte nicht lokalisiert werden, siehe die [Dokumentation](https://docs.gtk.org/glib/func.set_prgname.html).
When a .desktop file is created this value helps with window grouping and desktop icons when the .desktop file's `Name` property differs form the executable's filename. Wenn eine .desktop-Datei erstellt wird, hilft dieser Wert bei der Fenstergruppierung und bei Desktopsymbolen, wenn die Eigenschaft `Name` der .desktop-Datei vom Dateinamen der ausführbaren Datei abweicht.
Name: ProgramName<br/> Type: string<br/> Name: ProgramName<br/> Typ: String<br/>
### Debug ### Debug
This defines [Debug specific options](#Debug) that apply to debug builds. Dies definiert [Debug-spezifische Optionen](#Debug) , die für Debug-Builds gelten.
Name: Debug<br/> Type: `options.Debug` Name: Debug<br/> Typ: `options.Debug`
#### OpenInspectorOnStartup #### OpenInspectorOnStartup
Setting this to `true` will open the WebInspector on startup of the application. Wird dies auf `true` gesetzt, öffnet sich der Web-Inspektor beim Start der Anwendung.
Name: OpenInspectorOnStartup<br/> Type: `bool` Name: OpenInspectorOnStartup<br/> Typ: `bool`
[^1]: This requires WebKit2GTK 2.36+ support and your app needs to be build with the build tag `webkit2_36` to activate support for this feature. This also bumps the minimum requirement of WebKit2GTK to 2.36 for your app. [^1]: Dies erfordert WebKit2GTK 2.36+ Unterstützung und die App muss mit dem Build-Tag `webkit2_36` gebaut werden, um die Unterstützung für diese Funktion zu aktivieren. Dies erhöht auch die Mindestanforderungen von WebKit2GTK auf 2.36 für deine App.
[^2]: This requires WebKit2GTK 2.40+ support and your app needs to be build with the build tag `webkit2_40` to activate support for this feature. This also bumps the minimum requirement of WebKit2GTK to 2.40 for your app. [^2]: Dies erfordert WebKit2GTK 2.40+ Unterstützung und deine App muss mit dem Build-Tag `webkit2_40` gebaut werden, um die Unterstützung für diese Funktion zu aktivieren. Dies erhöht auch die Mindestanforderung von WebKit2GTK auf 2.40 für deine App.

View file

@ -2,9 +2,9 @@
sidebar_position: 5 sidebar_position: 5
--- ---
# Project Config # Projekt-Konfiguration
The project config resides in the `wails.json` file in the project directory. The structure of the config is: Die Projekt-Konfiguration befindet sich in der `wails.json` Datei im Projektverzeichnis. Die Struktur der Konfiguration sieht wie folgt aus:
```json5 ```json5
{ {
@ -122,9 +122,9 @@ The project config resides in the `wails.json` file in the project directory. Th
} }
``` ```
This file is read by the Wails CLI when running `wails build` or `wails dev`. Diese Datei wird vom Wails CLI gelesen, wenn `wails build` oder `wails dev` ausgeführt wird.
The `assetdir`, `reloaddirs`, `wailsjsdir`, `debounceMS`, `devserver` and `frontenddevserverurl` flags in `wails build/dev` will update the project config Die Flags `assetdir`, `reloaddirs`, `wailsjsdir`, `debounceMS`, `devserver` und `frontenddevserverurl` in `wails build/dev` aktualisieren die Projektkonfiguration
and thus become defaults for subsequent runs. und werden daher als Standard für spätere Ausführungen verwendet.
The JSON Schema for this file is located [here](https://wails.io/schemas/config.v2.json). Das JSON Schema für diese Datei befindet sich [hier](https://wails.io/schemas/config.v2.json).

View file

@ -4,10 +4,10 @@ sidebar_position: 7
# Browser # Browser
These methods are related to the system browser. Diese Methoden beziehen sich auf den System-Browser.
### BrowserOpenURL ### BrowserOpenURL
Opens the given URL in the system browser. Öffnet die angegebene URL im System-Browser.
Go: `BrowserOpenURL(ctx context.Context, url string)`<br/> JS: `BrowserOpenURL(url string)` Go: `BrowserOpenURL(ctx context.Context, url string)`<br/> JS: `BrowserOpenURL(url string)`

View file

@ -2,22 +2,22 @@
sidebar_position: 8 sidebar_position: 8
--- ---
# Clipboard # Zwischenablage
This part of the runtime provides access to the operating system's clipboard.<br/> The current implementation only handles text. Dieser Teil der Laufzeit bietet Zugriff auf die Zwischenablage des Betriebssystems.<br/> Die aktuelle Implementierung verarbeitet nur Texte.
### ClipboardGetText ### ClipboardGetText
This method reads the currently stored text from the clipboard. Diese Methode liest den aktuell gespeicherten Text aus der Zwischenablage aus.
Go: `ClipboardGetText(ctx context.Context) (string, error)`<br/> Returns: a string (if the clipboard is empty an empty string will be returned) or an error. Go: `ClipboardGetText(ctx context.Context) (string, error)`<br/> Gibt einen String zurück (wenn die Zwischenablage leer ist, wird ein leerer String zurückgegeben) oder einen Fehler.
JS: `ClipboardGetText(): Promise<string>`<br/> Returns: a promise with a string result (if the clipboard is empty an empty string will be returned). JS: `ClipboardGetText(): Promise<string>`<br/> Rückgabewert: Ein Promise mit einem String-Ergebnis (wenn die Zwischenablage leer ist, wird ein leerer String zurückgegeben).
### ClipboardSetText ### ClipboardSetText
This method writes a text to the clipboard. Diese Methode schreibt einen Text in die Zwischenablage.
Go: `ClipboardSetText(ctx context.Context, text string) error`<br/> Returns: an error if there is any. Go: `ClipboardSetText(ctx context.Context, text string) error`<br/> Gibt einen Fehler zurück, wenn es einen gibt.
JS: `ClipboardSetText(text: string): Promise<boolean>`<br/> Returns: a promise with true result if the text was successfully set on the clipboard, false otherwise. JS: `ClipboardSetText(text: string): Promise<boolean>`<br/> Rückgabewert: Ein Promise mit dem Ergebnis true, wenn der Text erfolgreich in die Zwischenablage kopiert wurde, andernfalls false.

View file

@ -4,53 +4,53 @@ sidebar_position: 5
# Dialog # Dialog
This part of the runtime provides access to native dialogs, such as File Selectors and Message boxes. Dieser Teil der Laufzeit ermöglicht den Zugriff auf native Dialoge wie Dateiauswahl und Nachrichtenfelder.
:::info JavaScript :::info JavaScript
Dialog is currently unsupported in the JS runtime. Dialoge werden derzeit nicht in der JS-Laufzeit unterstützt.
::: :::
### OpenDirectoryDialog ### OpenDirectoryDialog
Opens a dialog that prompts the user to select a directory. Can be customised using [OpenDialogOptions](#opendialogoptions). Öffnet einen Dialog, der den Benutzer auffordert, ein Verzeichnis auszuwählen. Kann mit [OpenDialogOptions](#opendialogoptions) angepasst werden.
Go: `OpenDirectoryDialog(ctx context.Context, dialogOptions OpenDialogOptions) (string, error)` Go: `OpenDirectoryDialog(ctx context.Context, dialogOptions OpenDialogOptions) (string, error)`
Returns: Selected directory (blank if the user cancelled) or an error Gibt das ausgewählte Verzeichnis (leer beim Abbruch) oder ein Fehler zurück
### OpenFileDialog ### OpenFileDialog
Opens a dialog that prompts the user to select a file. Can be customised using [OpenDialogOptions](#opendialogoptions). Öffnet einen Dialog, der den Benutzer auffordert, eine Datei auszuwählen. Kann mit [OpenDialogOptions](#opendialogoptions) angepasst werden.
Go: `OpenFileDialog(ctx context.Context, dialogOptions OpenDialogOptions) (string, error)` Go: `OpenFileDialog(ctx context.Context, dialogOptions OpenDialogOptions) (string, error)`
Returns: Selected file (blank if the user cancelled) or an error Gibt die ausgewählte Datei (leer beim Abbruch) oder ein Fehler zurück
### OpenMultipleFilesDialog ### OpenMultipleFilesDialog
Opens a dialog that prompts the user to select multiple files. Can be customised using [OpenDialogOptions](#opendialogoptions). Öffnet einen Dialog, der den Benutzer auffordert, mehrere Dateien auszuwählen. Kann mit [OpenDialogOptions](#opendialogoptions) angepasst werden.
Go: `OpenMultipleFilesDialog(ctx context.Context, dialogOptions OpenDialogOptions) ([]string, error)` Go: `OpenMultipleFilesDialog(ctx context.Context, dialogOptions OpenDialogOptions) ([]string, error)`
Returns: Selected files (nil if the user cancelled) or an error Gibt die ausgewählten Dateien (`nil`, falls der Benutzer den Vorgang abgebrochen hat) oder ein Fehler zurück
### SaveFileDialog ### SaveFileDialog
Opens a dialog that prompts the user to select a filename for the purposes of saving. Can be customised using [SaveDialogOptions](#savedialogoptions). Öffnet einen Dialog, der den Benutzer auffordert, einen Dateinamen zum Speichern auszuwählen. Kann mit [SaveDialogOptions](#savedialogoptions) angepasst werden.
Go: `SaveFileDialog(ctx context.Context, dialogOptions SaveDialogOptions) (string, error)` Go: `SaveFileDialog(ctx context.Context, dialogOptions SaveDialogOptions) (string, error)`
Returns: The selected file (blank if the user cancelled) or an error Gibt die ausgewählte Datei (leer beim Abbruch) oder ein Fehler zurück
### MessageDialog ### MessageDialog
Displays a message using a message dialog. Can be customised using [MessageDialogOptions](#messagedialogoptions). Zeigt eine Nachricht über einen Nachrichtendialog an. Kann über [MessageDialogOptions](#messagedialogoptions) angepasst werden.
Go: `MessageDialog(ctx context.Context, dialogOptions MessageDialogOptions) (string, error)` Go: `MessageDialog(ctx context.Context, dialogOptions MessageDialogOptions) (string, error)`
Returns: The text of the selected button or an error Gibt den Text des ausgewählten Buttons oder einen Fehler zurück
## Options ## Options
@ -69,16 +69,16 @@ type OpenDialogOptions struct {
} }
``` ```
| Field | Description | Win | Mac | Lin | | Feld | Beschreibung | Win | Mac | Lin |
| -------------------------- | ---------------------------------------------- | --- | --- | --- | | -------------------------- | --------------------------------------------------------- | --- | --- | --- |
| DefaultDirectory | The directory the dialog will show when opened | ✅ | ✅ | ✅ | | DefaultDirectory | Das Verzeichnis, das der Dialog beim Öffnen anzeigen wird | ✅ | ✅ | ✅ |
| DefaultFilename | The default filename | ✅ | ✅ | ✅ | | DefaultFilename | Der Standard-Dateiname | ✅ | ✅ | ✅ |
| Title | Title for the dialog | ✅ | ✅ | ✅ | | Title | Titel für den Dialog | ✅ | ✅ | ✅ |
| [Filters](#filefilter) | A list of file filters | ✅ | ✅ | ✅ | | [Filters](#filefilter) | Eine Liste der Datei-Filter | ✅ | ✅ | ✅ |
| ShowHiddenFiles | Show files hidden by the system | | ✅ | ✅ | | ShowHiddenFiles | Dateien, die vom System versteckt wurden, anzeigen | | ✅ | ✅ |
| CanCreateDirectories | Allow user to create directories | | ✅ | | | CanCreateDirectories | Dem Benutzer das Erstellen von Verzeichnissen erlauben | | ✅ | |
| ResolvesAliases | If true, returns the file not the alias | | ✅ | | | ResolvesAliases | Wenn true, gibt die Datei nicht den Alias zurück | | ✅ | |
| TreatPackagesAsDirectories | Allow navigating into packages | | ✅ | | | TreatPackagesAsDirectories | Navigation in Pakete erlauben | | ✅ | |
### SaveDialogOptions ### SaveDialogOptions
@ -94,15 +94,15 @@ type SaveDialogOptions struct {
} }
``` ```
| Field | Description | Win | Mac | Lin | | Feld | Beschreibung | Win | Mac | Lin |
| -------------------------- | ---------------------------------------------- | --- | --- | --- | | -------------------------- | --------------------------------------------------------- | --- | --- | --- |
| DefaultDirectory | The directory the dialog will show when opened | ✅ | ✅ | ✅ | | DefaultDirectory | Das Verzeichnis, das der Dialog beim Öffnen anzeigen wird | ✅ | ✅ | ✅ |
| DefaultFilename | The default filename | ✅ | ✅ | ✅ | | DefaultFilename | Der Standard-Dateiname | ✅ | ✅ | ✅ |
| Title | Title for the dialog | ✅ | ✅ | ✅ | | Title | Titel für den Dialog | ✅ | ✅ | ✅ |
| [Filters](#filefilter) | A list of file filters | ✅ | ✅ | ✅ | | [Filters](#filefilter) | Eine Liste der Datei-Filter | ✅ | ✅ | ✅ |
| ShowHiddenFiles | Show files hidden by the system | | ✅ | ✅ | | ShowHiddenFiles | Dateien, die vom System versteckt wurden, anzeigen | | ✅ | ✅ |
| CanCreateDirectories | Allow user to create directories | | ✅ | | | CanCreateDirectories | Dem Benutzer das Erstellen von Verzeichnissen erlauben | | ✅ | |
| TreatPackagesAsDirectories | Allow navigating into packages | | ✅ | | | TreatPackagesAsDirectories | Navigation in Pakete erlauben | | ✅ | |
### MessageDialogOptions ### MessageDialogOptions
@ -117,22 +117,22 @@ type MessageDialogOptions struct {
} }
``` ```
| Field | Description | Win | Mac | Lin | | Feld | Beschreibung | Win | Mac | Lin |
| ------------- | -------------------------------------------------------------------------- | -------------- | --- | --- | | ------------- | ------------------------------------------------------------------------------------------- | -------------- | --- | --- |
| Type | The type of message dialog, eg question, info... | ✅ | ✅ | ✅ | | Type | Die Art des Nachrichtendialogs, z. B. question, info... | ✅ | ✅ | ✅ |
| Title | Title for the dialog | ✅ | ✅ | ✅ | | Title | Titel für den Dialog | ✅ | ✅ | ✅ |
| Message | The message to show the user | ✅ | ✅ | ✅ | | Message | Die Nachricht, die dem Benutzer angezeigt werden soll | ✅ | ✅ | ✅ |
| Buttons | A list of button titles | | ✅ | | | Buttons | Eine Liste von Knopf titeln | | ✅ | |
| DefaultButton | The button with this text should be treated as default. Bound to `return`. | ✅[*](#windows) | ✅ | | | DefaultButton | Der Button mit diesem Text sollte als Standard verwendet werden. Gebunden an `return`. | ✅[*](#windows) | ✅ | |
| CancelButton | The button with this text should be treated as cancel. Bound to `escape` | | ✅ | | | CancelButton | Der Button mit diesem Text sollte als Abbruch Button verwendet werden. Gebunden an `escape` | | ✅ | |
#### Windows #### Windows
Windows has standard dialog types in which the buttons are not customisable. The value returned will be one of: "Ok", "Cancel", "Abort", "Retry", "Ignore", "Yes", "No", "Try Again" or "Continue". Windows hat Standarddialog-Typen, in denen die Buttons nicht anpassbar sind. Der zurückgegebene Wert wird folgendermaßen sein: "Ok", "Cancel", "Abort", "Retry", "Ignore", "Yes", "No", "Try Again" oder "Continue".
For Question dialogs, the default button is "Yes" and the cancel button is "No". This can be changed by setting the `DefaultButton` value to `"No"`. Bei Fragedialogen ist der Standard-Button "Yes" und der Abbrechen-Button "No". Dies kann geändert werden, indem der Wert `DefaultButton` auf `"No"` gesetzt wird.
Example: Beispiel:
```go ```go
result, err := runtime.MessageDialog(a.ctx, runtime.MessageDialogOptions{ result, err := runtime.MessageDialog(a.ctx, runtime.MessageDialogOptions{
Type: runtime.QuestionDialog, Type: runtime.QuestionDialog,
@ -144,13 +144,13 @@ Example:
#### Linux #### Linux
Linux has standard dialog types in which the buttons are not customisable. The value returned will be one of: "Ok", "Cancel", "Yes", "No" Linux hat Standarddialog-Typen, in denen die Buttons nicht anpassbar sind. Der zurückgegebene Wert wird folgendermaßen lauten: "Ok", "Cancel", "Yes", "No"
#### Mac #### Mac
A message dialog on Mac may specify up to 4 buttons. If no `DefaultButton` or `CancelButton` is given, the first button is considered default and is bound to the `return` key. Ein Nachrichtendialog auf Mac kann bis zu 4 Buttons haben. Wird kein `DefaultButton` oder `CancelButton` angegeben, so gilt der erste Button als Standard und ist der `Return`-Taste zugeordnet.
For the following code: Für den folgenden Code:
```go ```go
selection, err := runtime.MessageDialog(b.ctx, runtime.MessageDialogOptions{ selection, err := runtime.MessageDialog(b.ctx, runtime.MessageDialogOptions{
@ -160,7 +160,7 @@ selection, err := runtime.MessageDialog(b.ctx, runtime.MessageDialogOptions{
}) })
``` ```
the first button is shown as default: der erste Button wird als Standard angezeigt:
```mdx-code-block ```mdx-code-block
<div class="text--center"> <div class="text--center">
@ -173,7 +173,7 @@ the first button is shown as default:
<br /> <br />
``` ```
And if we specify `DefaultButton` to be "two": Und wenn wir `DefaultButton` als "two" angeben:
```go ```go
selection, err := runtime.MessageDialog(b.ctx, runtime.MessageDialogOptions{ selection, err := runtime.MessageDialog(b.ctx, runtime.MessageDialogOptions{
@ -184,7 +184,7 @@ selection, err := runtime.MessageDialog(b.ctx, runtime.MessageDialogOptions{
}) })
``` ```
the second button is shown as default. When `return` is pressed, the value "two" is returned. wird der zweite Button als Standard angezeigt. Wird `return` gedrückt, wird der Wert „two“ zurückgegeben.
```mdx-code-block ```mdx-code-block
<div class="text--center"> <div class="text--center">
@ -197,7 +197,7 @@ the second button is shown as default. When `return` is pressed, the value "two"
<br /> <br />
``` ```
If we now specify `CancelButton` to be "three": Wenn wir jetzt `CancelButton` für "three" festlegen:
```go ```go
selection, err := runtime.MessageDialog(b.ctx, runtime.MessageDialogOptions{ selection, err := runtime.MessageDialog(b.ctx, runtime.MessageDialogOptions{
@ -209,7 +209,7 @@ selection, err := runtime.MessageDialog(b.ctx, runtime.MessageDialogOptions{
}) })
``` ```
the button with "three" is shown at the bottom of the dialog. When `escape` is pressed, the value "three" is returned: wird der Button mit "three" unten im Dialog angezeigt. Wenn `Escape` gedrückt wird, wird der Wert "three" zurückgegeben:
```mdx-code-block ```mdx-code-block
<div class="text--center"> <div class="text--center">
@ -246,7 +246,7 @@ type FileFilter struct {
#### Windows #### Windows
Windows allows you to use multiple file filters in dialog boxes. Each FileFilter will show up as a separate entry in the dialog: Mit Windows kannst du mehrere Dateifilter in Dialogfenstern verwenden. Jeder Dateifilter wird als separater Eintrag im Dialog eingeben:
```mdx-code-block ```mdx-code-block
<div class="text--center"> <div class="text--center">
@ -263,7 +263,7 @@ Windows allows you to use multiple file filters in dialog boxes. Each FileFilter
#### Linux #### Linux
Linux allows you to use multiple file filters in dialog boxes. Each FileFilter will show up as a separate entry in the dialog: Linux erlaubt es dir, mehrere Dateifilter in Dialogfenstern zu verwenden. Jeder Dateifilter wird als separater Eintrag im Dialog eingeben:
```mdx-code-block ```mdx-code-block
<div class="text--center"> <div class="text--center">
@ -280,9 +280,9 @@ Linux allows you to use multiple file filters in dialog boxes. Each FileFilter w
#### Mac #### Mac
Mac dialogs only have the concept of a single set of patterns to filter files. If multiple FileFilters are provided, Wails will use all the Patterns defined. Mac-Dialoge haben nur das Konzept einer einzigen Reihe von Mustern zum Filtern von Dateien. Wenn mehrere Dateifilter zur Verfügung gestellt werden, wird Wails alle definierten Muster verwenden.
Example: Beispiel:
```go ```go
selection, err := runtime.OpenFileDialog(b.ctx, runtime.OpenDialogOptions{ selection, err := runtime.OpenFileDialog(b.ctx, runtime.OpenDialogOptions{
@ -299,4 +299,4 @@ Example:
}) })
``` ```
This will result in the Open File dialog using `*.png,*.jpg,*.mov,*.mp4` as a filter. Dies führt dazu, dass im Öffnen-Dialog `*.png,*.jpg,*.mov,*.mp4` als Filter verwendet wird.

View file

@ -6,32 +6,30 @@ sidebar_position: 10
::: :::
This part of the runtime handles dragging and dropping files and or folders in to the window.<br/> Dieser Teil der Laufzeit verarbeitet das Ziehen und Ablegen von Dateien oder Ordnern in das Fenster.<br/>
To enable this functionality you have to set [EnableFileDrop](../../reference/options.mdx#enablefiledrop) to `true` Um diese Funktion zu aktivieren, musst du in den [Anwendungsoptionen](../../reference/options.mdx#drag-and-drop) [EnableFileDrop](../../reference/options.mdx#enablefiledrop) auf `true`
in [Application Options](../../reference/options.mdx#drag-and-drop). setzen.
### OnFileDrop ### OnFileDrop
This method handles the drop event on the window. Diese Methode verarbeitet das Drop-Event im Fenster.
Go: `OnFileDrop(ctx context.Context, callback func(x, y int, paths []string))`<br/> Go: `OnFileDrop(ctx context.Context, callback func(x, y int, paths []string))`<br/>
Calls the callback function with the coordinates inside the window where the drag was released and a slice of absolute file paths. Ruft die Callback-Funktion mit den Koordinaten innerhalb des Fensters, an denen der Dragvorgang beendet wurde, und einer Liste absoluter Dateipfade auf.
JS: `OnFileDrop(callback: (x: number, y: number, paths: string[]) => void, useDropTarget: boolean) :void`<br/> JS: `OnFileDrop(callback: (x: number, y: number, paths: string[]) => void, useDropTarget: boolean) :void`<br/>
Calls the callback function with the coordinates inside the window where the drag was released and a slice of absolute file paths. Ruft die Callback-Funktion mit den Koordinaten innerhalb des Fensters auf, in dem die Ziehung freigegeben wurde, und ein slice mit den absoluten Dateipfaden auf.
When the `useDropTarget` is `true` in addition to calling the callback when the drop happens, it registers event listeners on Wenn `useDropTarget` auf `true` gesetzt ist, werden zusätzlich zum Aufruf des Callbacks beim Ablegen Event-Listener am Fenster registriert, die die Drag-Koordinaten überwachen und prüfen, ob sich die Maus über einem Element befindet, welches den [CSSDropProperty](../../reference/options.mdx#cssdropproperty) Stil aufweist. Wenn das Element die erforderliche Eigenschaft
the window that are listening for the drag coordinates and checks if the mouse is over an element that has the besitzt, fügt es die `wails-drop-target-active` Klasse zur Klassenliste des Elements hinzu und entfernt sie, wenn sich die Maus davon bewegt.
[CSSDropProperty](../../reference/options.mdx#cssdropproperty) style. If the element has the required property
it adds the `wails-drop-target-active` class to the element's class list and removes it when the mouse moves off of it.
### OnFileDropOff ### OnFileDropOff
This method removes all registered listeners and handlers for drag and drop events. Diese Methode entfernt alle registrierten listener und Handler für Drag & Drop Ereignisse.
Go: `OnFileDropOff(ctx context.Context)`<br/> Go: `OnFileDropOff(ctx context.Context)`<br/>
Returns: has no return value. Returns: hat keinen Rückgabewert.
JS: `OnFileDropOff(): void`<br/> JS: `OnFileDropOff(): void`<br/>
Returns: has no return value. Returns: hat keinen Rückgabewert.

View file

@ -4,34 +4,34 @@ sidebar_position: 2
# Events # Events
The Wails runtime provides a unified events system, where events can be emitted or received by either Go or JavaScript. Optionally, data may be passed with the events. Listeners will receive the data in the local data types. Die Wails Laufzeit bietet ein einheitliches Event-System, in dem Ereignisse von Go oder JavaScript emittiert oder empfangen werden können. Optional können Daten mit den Ereignissen übergeben werden. Die Zuhörer erhalten die Daten in den lokalen Datentypen.
### EventsOn ### EventsOn
This method sets up a listener for the given event name. When an event of type `eventName` is [emitted](#EventsEmit), the callback is triggered. Any additional data sent with the emitted event will be passed to the callback. It returns a function to cancel the listener. Diese Methode legt einen Listener für den angegebenen Ereignisnamen fest. Wenn ein Ereignis des Typs `eventName` [abgesendet wird](#EventsEmit), wird der Callback ausgelöst. Alle zusätzlichen Daten, die mit dem emittierten Ereignis gesendet werden, werden an den Callback übergeben. Gibt eine Funktion zurück, um den Listener abzubrechen.
Go: `EventsOn(ctx context.Context, eventName string, callback func(optionalData ...interface{})) func()`<br/> JS: `EventsOn(eventName string, callback function(optionalData?: any)): () => void` Go: `EventsOn(ctx context.Context, eventName string, callback func(optionalData ...interface{})) func()`<br/> JS: `EventsOn(eventName string, callback function(optionalData?: any)): () => void`
### EventsOff ### EventsOff
This method unregisters the listener for the given event name, optionally multiple listeners can be unregistered via `additionalEventNames`. Mit dieser Methode wird der Listener für den angegebenen Ereignisnamen abgemeldet, optional können mehrere Hörer über `additionalEventNames` abgemeldet werden.
Go: `EventsOff(ctx context.Context, eventName string, additionalEventNames ...string)`<br/> JS: `EventsOff(eventName string, ...additionalEventNames)` Go: `EventsOff(ctx context.Context, eventName string, additionalEventNames ...string)`<br/> JS: `EventsOff(eventName string, ...additionalEventNames)`
### EventsOnce ### EventsOnce
This method sets up a listener for the given event name, but will only trigger once. It returns a function to cancel the listener. Diese Methode legt einen Listener für den angegebenen Ereignisnamen fest, löst aber nur einmal aus. Gibt eine Funktion zurück, um den Listener abzubrechen.
Go: `EventsOnce(ctx context.Context, eventName string, callback func(optionalData ...interface{})) func()`<br/> JS: `EventsOnce(eventName string, callback function(optionalData?: any)): () => void` Go: `EventsOnce(ctx context.Context, eventName string, callback func(optionalData ...interface{})) func()`<br/> JS: `EventsOnce(eventName string, callback function(optionalData?: any)): () => void`
### EventsOnMultiple ### EventsOnMultiple
This method sets up a listener for the given event name, but will only trigger a maximum of `counter` times. It returns a function to cancel the listener. Diese Methode legt einen Listener für den angegebenen Ereignisnamen fest, löst aber nur eine vordefinierte Anzahl aus. Gibt eine Funktion zurück, um den Listener abzubrechen.
Go: `EventsOnMultiple(ctx context.Context, eventName string, callback func(optionalData ...interface{}), counter int) func()`<br/> JS: `EventsOnMultiple(eventName string, callback function(optionalData?: any), counter int): () => void` Go: `EventsOnMultiple(ctx context.Context, eventName string, callback func(optionalData ...interface{}), counter int) func()`<br/> JS: `EventsOnMultiple(eventName string, callback function(optionalData?: any), counter int): () => void`
### EventsEmit ### EventsEmit
This method emits the given event. Optional data may be passed with the event. This will trigger any event listeners. Diese Methode sendet das angegebene Ereignis ab. Optional können Daten mit den Ereignissen übergeben werden. Dies löst alle Ereignishörer aus.
Go: `EventsEmit(ctx context.Context, eventName string, optionalData ...interface{})`<br/> JS: `EventsEmit(eventName: string, ...optionalData: any)` Go: `EventsEmit(ctx context.Context, eventName string, optionalData ...interface{})`<br/> JS: `EventsEmit(eventName: string, ...optionalData: any)`

View file

@ -2,49 +2,49 @@
sidebar_position: 1 sidebar_position: 1
--- ---
# Introduction # Einführung
The runtime is a library that provides utility methods for your application. There is both a Go and JavaScript runtime and the aim is to try and keep them at parity where possible. Die Laufzeit ist eine Bibliothek, die Hilfsmethoden für deine Anwendung bereitstellt. Es gibt sowohl eine Go- als auch JavaScript-Laufzeit und das Ziel ist es, sie möglichst auf dem gleichen Stand zu halten.
It has utility methods for: Es hat nützliche Methoden für:
- [Window](window.mdx) - [Fenster](window.mdx)
- [Menu](menu.mdx) - [Menüs](menu.mdx)
- [Dialog](dialog.mdx) - [Dialoge](dialog.mdx)
- [Events](events.mdx) - [Events](events.mdx)
- [Browser](browser.mdx) - [Browser](browser.mdx)
- [Log](log.mdx) - [Logs](log.mdx)
- [Clipboard](clipboard.mdx) - [Zwischenablagen](clipboard.mdx)
The Go Runtime is available through importing `github.com/wailsapp/wails/v2/pkg/runtime`. All methods in this package take a context as the first parameter. This context should be obtained from the [OnStartup](../options.mdx#onstartup) or [OnDomReady](../options.mdx#ondomready) hooks. Die Go Runtime ist verfügbar durch das Importieren von `github.com/wailsapp/wails/v2/pkg/runtime`. Alle Methoden in diesem Paket nehmen einen Kontext als ersten Parameter. Dieser Kontext sollte von den [OnStartup](../options.mdx#onstartup) oder [OnDomReady](../options.mdx#ondomready) Hooks abgerufen werden.
:::info Note :info Notiz
Whilst the context will be provided to the [OnStartup](../options.mdx#onstartup) method, there's no guarantee the runtime will work in this method as the window is initialising in a different thread. If you wish to call runtime methods at startup, use [OnDomReady](../options.mdx#ondomready). Während der Kontext der [OnStartup](../options.mdx#onstartup) Methode zur Verfügung gestellt wird, gibt es keine Garantie dafür, dass die Laufzeit in dieser Methode funktioniert, da das Fenster in einem anderen Thread initialisiert wird. Wenn du beim Start Laufzeitmethoden aufrufen möchtest, verwende [OnDomReady](../options.mdx#ondomready).
::: :::
The JavaScript library is available to the frontend via the `window.runtime` map. There is a runtime package generated when using `dev` mode that provides TypeScript declarations for the runtime. This should be located in the `wailsjs` directory in your frontend directory. Die JavaScript-Bibliothek ist im Frontend über die `window.runtime` map verfügbar. Es wird ein Laufzeitpaket generiert, wenn der `dev` Modus verwendet wird, die TypeScript-Deklarationen für die Laufzeit werden ebenfalls bereitgestellt. Diese sollten sich im `wailsjs` Verzeichnis deines Frontend-Verzeichnisses befinden.
### Hide ### Hide
Go: `Hide(ctx context.Context)`<br/> JS: `Hide()` Go: `Hide(ctx context.Context)`<br/> JS: `Hide()`
Hides the application. Versteckt die Anwendung.
:::info Note :info Notiz
On Mac, this will hide the application in the same way as the `Hide` menu item in standard Mac applications. This is different to hiding the window, but the application still being in the foreground. For Windows and Linux, this is currently the same as `WindowHide`. Auf dem Mac wird die Anwendung auf die gleiche Weise versteckt wie im `Menüpunkt` in Standard-Mac-Anwendungen. Das ist anders als das Verstecken des Fensters, jedoch die Anwendung steht immer noch im Vordergrund. Für Windows und Linux ist dies derselbe wie `WindowHide`.
::: :::
### Show ### Show
Shows the application. Zeigt die Anwendung.
:::info Note :info Notiz
On Mac, this will bring the application back into the foreground. For Windows and Linux, this is currently the same as `WindowShow`. Auf dem Mac wird die Anwendung wieder in den Vordergrund gerückt. Für Windows und Linux ist dies derselbe wie `WindowShow`.
::: :::
@ -52,13 +52,13 @@ Go: `Show(ctx context.Context)`<br/> JS: `Show()`
### Quit ### Quit
Quits the application. Schließt die Anwendung.
Go: `Quit(ctx context.Context)`<br/> JS: `Quit()` Go: `Quit(ctx context.Context)`<br/> JS: `Quit()`
### Environment ### Environment
Returns details of the current environment. Gibt Details der aktuellen Umgebung zurück.
Go: `Environment(ctx context.Context) EnvironmentInfo`<br/> JS: `Environment(): Promise<EnvironmentInfo>` Go: `Environment(ctx context.Context) EnvironmentInfo`<br/> JS: `Environment(): Promise<EnvironmentInfo>`

View file

@ -4,7 +4,7 @@ sidebar_position: 3
# Log # Log
The Wails runtime provides a logging mechanism that may be called from Go or JavaScript. Like most loggers, there are a number of log levels: Die Wails Laufzeit bietet einen Logging-Mechanismus, der von Go oder JavaScript aufgerufen werden kann. Wie die meisten Logger gibt es eine Reihe von Log-Ebenen:
- Trace - Trace
- Debug - Debug
@ -13,109 +13,109 @@ The Wails runtime provides a logging mechanism that may be called from Go or Jav
- Error - Error
- Fatal - Fatal
The logger will output any log message at the current, or higher, log level. Example: The `Debug` log level will output all messages except `Trace` messages. Der Logger gibt jede Logmeldung auf der aktuellen oder höheren Log-Ebene aus. Beispiel: Die `Debug` Log Ebene gibt alle Nachrichten außer `Trace` Nachrichten aus.
### LogPrint ### LogPrint
Logs the given message as a raw message. Protokolliert die gegebene Nachricht als Rohnachricht.
Go: `LogPrint(ctx context.Context, message string)`<br/> JS: `LogPrint(message: string)` Go: `LogPrint(ctx context.Context, message string)`<br/> JS: `LogPrint(message: string)`
### LogPrintf ### LogPrintf
Logs the given message as a raw message. Protokolliert die gegebene Nachricht als Rohnachricht.
Go: `LogPrintf(ctx context.Context, format string, args ...interface{})`<br/> Go: `LogPrintf(ctx context.Context, format string, args ...interface{})`<br/>
### LogTrace ### LogTrace
Logs the given message at the `Trace` log level. Protokolliert die angegebene Nachricht im `Trace` Log-Level.
Go: `LogTrace(ctx context.Context, message string)`<br/> JS: `LogTrace(message: string)` Go: `LogTrace(ctx context.Context, message string)`<br/> JS: `LogTrace(message: string)`
### LogTracef ### LogTracef
Logs the given message at the `Trace` log level. Protokolliert die angegebene Nachricht im `Trace` Log-Level.
Go: `LogTracef(ctx context.Context, format string, args ...interface{})`<br/> Go: `LogTracef(ctx context.Context, format string, args ...interface{})`<br/>
### LogDebug ### LogDebug
Logs the given message at the `Debug` log level. Protokolliert die gegebene Nachricht im `Debug` Log-Level.
Go: `LogDebug(ctx context.Context, message string)`<br/> JS: `LogDebug(message: string)` Go: `LogDebug(ctx context.Context, message string)`<br/> JS: `LogDebug(message: string)`
### LogDebugf ### LogDebugf
Logs the given message at the `Debug` log level. Protokolliert die gegebene Nachricht im `Debug` Log-Level.
Go: `LogDebugf(ctx context.Context, format string, args ...interface{})`<br/> Go: `LogDebugf(ctx context.Context, format string, args ...interface{})`<br/>
### LogInfo ### LogInfo
Logs the given message at the `Info` log level. Protokolliert die angegebene Nachricht im `Info` Log-Level.
Go: `LogInfo(ctx context.Context, message string)`<br/> JS: `LogInfo(message: string)` Go: `LogInfo(ctx context.Context, message string)`<br/> JS: `LogInfo(message: string)`
### LogInfof ### LogInfof
Logs the given message at the `Info` log level. Protokolliert die angegebene Nachricht im `Info` Log-Level.
Go: `LogInfof(ctx context.Context, format string, args ...interface{})`<br/> Go: `LogInfof(ctx context.Context, format string, args ...interface{})`<br/>
### LogWarning ### LogWarning
Logs the given message at the `Warning` log level. Protokolliert die gegebene Nachricht auf der `Warnungs-` Log-Ebene.
Go: `LogWarning(ctx context.Context, message string)`<br/> JS: `LogWarning(message: string)` Go: `LogWarning(ctx context.Context, message string)`<br/> JS: `LogWarning(message: string)`
### LogWarningf ### LogWarningf
Logs the given message at the `Warning` log level. Protokolliert die gegebene Nachricht auf der `Warnungs-` Log-Ebene.
Go: `LogWarningf(ctx context.Context, format string, args ...interface{})`<br/> Go: `LogWarningf(ctx context.Context, format string, args ...interface{})`<br/>
### LogError ### LogError
Logs the given message at the `Error` log level. Protokolliert die angegebene Nachricht auf der `Error` Log-Ebene.
Go: `LogError(ctx context.Context, message string)`<br/> JS: `LogError(message: string)` Go: `LogError(ctx context.Context, message string)`<br/> JS: `LogError(message: string)`
### LogErrorf ### LogErrorf
Logs the given message at the `Error` log level. Protokolliert die angegebene Nachricht auf der `Error` Log-Ebene.
Go: `LogErrorf(ctx context.Context, format string, args ...interface{})`<br/> Go: `LogErrorf(ctx context.Context, format string, args ...interface{})`<br/>
### LogFatal ### LogFatal
Logs the given message at the `Fatal` log level. Protokolliert die angegebene Nachricht im `Fatal` Log-Level.
Go: `LogFatal(ctx context.Context, message string)`<br/> JS: `LogFatal(message: string)` Go: `LogFatal(ctx context.Context, message string)`<br/> JS: `LogFatal(message: string)`
### LogFatalf ### LogFatalf
Logs the given message at the `Fatal` log level. Protokolliert die angegebene Nachricht im `Fatal` Log-Level.
Go: `LogFatalf(ctx context.Context, format string, args ...interface{})`<br/> Go: `LogFatalf(ctx context.Context, format string, args ...interface{})`<br/>
### LogSetLogLevel ### LogSetLogLevel
Sets the log level. In JavaScript, the number relates to the following log levels: Legt den Log-Level fest. In JavaScript bezieht sich die Zahl auf die folgenden Log-Ebenen:
| Value | Log Level | | Wert | Log-Level |
| ----- | --------- | | ---- | --------- |
| 1 | Trace | | 1 | Trace |
| 2 | Debug | | 2 | Debug |
| 3 | Info | | 3 | Info |
| 4 | Warning | | 4 | Warning |
| 5 | Error | | 5 | Error |
Go: `LogSetLogLevel(ctx context.Context, level logger.LogLevel)`<br/> JS: `LogSetLogLevel(level: number)` Go: `LogSetLogLevel(ctx context.Context, level logger.LogLevel)`<br/> JS: `LogSetLogLevel(level: number)`
## Using a Custom Logger ## Benutze einen eigenen Logger
A custom logger may be used by providing it using the [Logger](../options.mdx#logger) application option. The only requirement is that the logger implements the `logger.Logger` interface defined in `github.com/wailsapp/wails/v2/pkg/logger`: Ein benutzerdefinierter Logger kann verwendet werden, indem er die [Logger](../options.mdx#logger) Anwendungsoption verwendet. Die einzige Voraussetzung ist, dass der Logger die `logger.Logger` Schnittstelle implementiert, die in `github.com/wailsapp/wails/v2/pkg/logger` definiert ist:
```go title="logger.go" ```go title="logger.go"
type Logger interface { type Logger interface {

View file

@ -4,22 +4,22 @@ sidebar_position: 6
# Menu # Menu
These methods are related to the application menu. Diese Methoden beziehen sich auf das Anwendungsmenü.
:::info JavaScript :::info JavaScript
Menu is currently unsupported in the JS runtime. Das Menü wird derzeit in der JS-Laufzeit nicht unterstützt.
::: :::
### MenuSetApplicationMenu ### MenuSetApplicationMenu
Sets the application menu to the given [menu](../menus.mdx). Setzt das Anwendungsmenü auf das angegebene [-Menü](../menus.mdx).
Go: `MenuSetApplicationMenu(ctx context.Context, menu *menu.Menu)` Go: `MenuSetApplicationMenu(ctx context.Context, menu *menu.Menu)`
### MenuUpdateApplicationMenu ### MenuSetApplicationMenu
Updates the application menu, picking up any changes to the menu passed to `MenuSetApplicationMenu`. Aktualisiert das Anwendungsmenü, um alle Änderungen an das Menü zu übernehmen, das an `MenuSetApplicationMenu` übergeben wurde.
Go: `MenuUpdateApplicationMenu(ctx context.Context)` Go: `MenuUpdateApplicationMenu(ctx context.Context)`

View file

@ -4,11 +4,11 @@ sidebar_position: 9
# Screen # Screen
These methods provide information about the currently connected screens. Diese Methoden geben Informationen über die aktuell angeschlossenen Bildschirme.
### ScreenGetAll ### ScreenGetAll
Returns a list of currently connected screens. Gibt eine Liste der aktuell verbundenen Bildschirme zurück.
Go: `ScreenGetAll(ctx context.Context) []screen`<br/> Go: `ScreenGetAll(ctx context.Context) []screen`<br/>
JS: `ScreenGetAll()` JS: `ScreenGetAll()`
@ -26,7 +26,7 @@ type Screen struct {
} }
``` ```
Typescript interface: Typescript Interface:
```ts ```ts
interface Screen { interface Screen {

View file

@ -4,197 +4,197 @@ sidebar_position: 4
# Window # Window
These methods give control of the application window. Diese Methoden ermöglichen die Kontrolle über das Anwendungsfenster.
### WindowSetTitle ### WindowSetTitle
Sets the text in the window title bar. Legt den Text in der Titelleiste des Fensters fest.
Go: `WindowSetTitle(ctx context.Context, title string)`<br/> JS: `WindowSetTitle(title: string)` Go: `WindowSetTitle(ctx context.Context, title string)`<br/> JS: `WindowSetTitle(title: string)`
### WindowFullscreen ### WindowFullscreen
Makes the window full screen. Ändert das Fenster zum Vollbildmodus.
Go: `WindowFullscreen(ctx context.Context)`<br/> JS: `WindowFullscreen()` Go: `WindowFullscreen(ctx context.Context)`<br/> JS: `WindowFullscreen()`
### WindowUnfullscreen ### WindowUnfullscreen
Restores the previous window dimensions and position prior to full screen. Stellt die vorherige Fenstergröße und -position vor dem Vollbild wieder her.
Go: `WindowUnfullscreen(ctx context.Context)`<br/> JS: `WindowUnfullscreen()` Go: `WindowUnfullscreen(ctx context.Context)`<br/> JS: `WindowUnfullscreen()`
### WindowIsFullscreen ### WindowIsFullscreen
Returns true if the window is full screen. Gibt true zurück, wenn das Fenster im Vollbildmodus ist.
Go: `WindowIsFullscreen(ctx context.Context) bool`<br/> JS: `WindowIsFullscreen() Promise<boolean>` Go: `WindowIsFullscreen(ctx context.Context) bool`<br/> JS: `WindowIsFullscreen() Promise<boolean>`
### WindowCenter ### WindowCenter
Centers the window on the monitor the window is currently on. Zentriert das Fenster auf dem Monitor, an dem sich das Fenster gerade befindet.
Go: `WindowCenter(ctx context.Context)`<br/> JS: `WindowCenter()` Go: `WindowCenter(ctx context.Context)`<br/> JS: `WindowCenter()`
### WindowExecJS ### WindowExecJS
Executes arbitrary JS code in the window. Führt beliebigen JS-Code im Fenster aus.
This method runs the code in the browser asynchronously and returns immediately. If the script causes any errors, they will only be available in the browser console. Diese Methode führt den Code asynchron im Browser aus und gibt sofort einen Rückgabewert zurück. Wenn das Skript Fehler verursacht, sind diese nur in dem Browser-Konsole verfügbar.
Go: `WindowExecJS(ctx context.Context, js string)` Go: `WindowExecJS(ctx context.Context, js string)`
### WindowReload ### WindowReload
Performs a "reload" (Reloads current page). Führt eine "Neuladung" aus (lädt aktuelle Seite neu).
Go: `WindowReload(ctx context.Context)`<br/> JS: `WindowReload()` Go: `WindowReload(ctx context.Context)`<br/> JS: `WindowReload()`
### WindowReloadApp ### WindowReloadApp
Reloads the application frontend. Lädt das Frontend der Anwendung neu.
Go: `WindowReloadApp(ctx context.Context)`<br/> JS: `WindowReloadApp()` Go: `WindowReloadApp(ctx context.Context)`<br/> JS: `WindowReloadApp()`
### WindowSetSystemDefaultTheme ### WindowSetSystemStandardTheme
Windows only. Nur für Windows.
Go: `WindowSetSystemDefaultTheme(ctx context.Context)`<br/> JS: `WindowSetSystemDefaultTheme()` Go: `WindowSetSystemDefaultTheme(ctx context.Context)`<br/> JS: `WindowSetSystemDefaultTheme()`
Sets window theme to system default (dark/light). Setzt Fensterdesign auf den Systemstandard (dunkel/hell).
### WindowSetLightTheme ### WindowSetLightTheme
Windows only. Nur für Windows.
Go: `WindowSetLightTheme(ctx context.Context)`<br/> JS: `WindowSetLightTheme()` Go: `WindowSetLightTheme(ctx context.Context)`<br/> JS: `WindowSetLightTheme()`
Sets window theme to light. Setzt das Fensterdesign auf den Hellen Modus.
### WindowSetDarkTheme ### WindowSetDarkTheme
Windows only. Nur für Windows.
Go: `WindowSetDarkTheme(ctx context.Context)`<br/> JS: `WindowSetDarkTheme()` Go: `WindowSetDarkTheme(ctx context.Context)`<br/> JS: `WindowSetDarkTheme()`
Sets window theme to dark. Setzt das Fensterdesign auf den dunklen Modus.
### WindowShow ### WindowShow
Shows the window, if it is currently hidden. Zeigt das Fenster, wenn es gerade ausgeblendet wird.
Go: `WindowShow(ctx context.Context)`<br/> JS: `WindowShow()` Go: `WindowShow(ctx context.Context)`<br/> JS: `WindowShow()`
### WindowHide ### WindowHide
Hides the window, if it is currently visible. Versteckt das Fenster, wenn es gerade sichtbar ist.
Go: `WindowHide(ctx context.Context)`<br/> JS: `WindowHide()` Go: `WindowHide(ctx context.Context)`<br/> JS: `WindowHide()`
### WindowIsNormal ### WindowIsNormal
Returns true if the window not minimised, maximised or fullscreen. Gibt true zurück, wenn das Fenster nicht minimiert, maximiert oder im Vollbild Modus ist.
Go: `WindowIsNormal(ctx context.Context) bool`<br/> JS: `WindowIsNormal() Promise<boolean>` Go: `WindowIsNormal(ctx context.Context) bool`<br/> JS: `WindowIsNormal() Promise<boolean>`
### WindowSetSize ### WindowSetSize
Sets the width and height of the window. Legt die Breite und Höhe des Fensters fest.
Go: `WindowSetSize(ctx context.Context, width int, height int)`<br/> JS: `WindowSetSize(width: number, height: number)` Go: `WindowSetSize(ctx context.Context, width int, height int)`<br/> JS: `WindowSetSize(width: number, height: number)`
### WindowGetSize ### WindowGetSize
Gets the width and height of the window. Ruft die Breite und Höhe des Fensters ab.
Go: `WindowGetSize(ctx context.Context) (width int, height int)`<br/> JS: `WindowGetSize(): Promise<Size>` Go: `WindowGetSize(ctx context.Context) (width int, height int)`<br/> JS: `WindowGetSize(): Promise<Size>`
### WindowSetMinSize ### WindowSetMinSize
Sets the minimum window size. Will resize the window if the window is currently smaller than the given dimensions. Legt die minimale Fenstergröße fest. Ändert die Größe des Fensters, wenn das Fenster derzeit kleiner ist als die angegebene Dimension.
Setting a size of `0,0` will disable this constraint. Das Setzen einer Größe von `0,0` deaktiviert diese Einschränkung.
Go: `WindowSetMinSize(ctx context.Context, width int, height int)`<br/> JS: `WindowSetMinSize(width: number, height: number)` Go: `WindowSetMinSize(ctx context.Context, width int, height int)`<br/> JS: `WindowSetMinSize(width: number, height: number)`
### WindowSetMaxSize ### WindowSetMaxSize
Sets the maximum window size. Will resize the window if the window is currently larger than the given dimensions. Legt die maximale Fenstergröße fest. Ändert die Größe des Fensters, wenn das Fenster zur Zeit größer ist als die angegebene Dimension.
Setting a size of `0,0` will disable this constraint. Das Setzen einer Größe von `0,0` deaktiviert diese Einschränkung.
Go: `WindowSetMaxSize(ctx context.Context, width int, height int)`<br/> JS: `WindowSetMaxSize(width: number, height: number)` Go: `WindowSetMaxSize(ctx context.Context, width int, height int)`<br/> JS: `WindowSetMaxSize(width: number, height: number)`
### WindowSetAlwaysOnTop ### WindowSetAlwaysOnTop
Sets the window AlwaysOnTop or not on top. Legt fest, ob das Fenster immer im Vordergrund oder nicht im Vordergrund angezeigt werden soll.
Go: `WindowSetAlwaysOnTop(ctx context.Context, b bool)`<br/> JS: `WindowSetAlwaysOnTop(b: boolean)` Go: `WindowSetAlwaysOnTop(ctx context.Context, b bool)`<br/> JS: `WindowSetAlwaysOnTop(b: boolean)`
### WindowSetPosition ### WindowSetPosition
Sets the window position relative to the monitor the window is currently on. Legt die Fensterposition relativ zum Monitor fest, auf dem sich das Fenster befindet.
Go: `WindowSetPosition(ctx context.Context, x int, y int)`<br/> JS: `WindowSetPosition(x: number, y: number)` Go: `WindowSetPosition(ctx context.Context, x int, y int)`<br/> JS: `WindowSetPosition(x: number, y: number)`
### WindowGetPosition ### WindowGetPosition
Gets the window position relative to the monitor the window is currently on. Ruft die Fensterposition relativ zum Monitor ab, auf dem sich das Fenster gerade befindet.
Go: `WindowGetPosition(ctx context.Context) (x int, y int)`<br/> JS: `WindowGetPosition(): Promise<Position>` Go: `WindowGetPosition(ctx context.Context) (x int, y int)`<br/> JS: `WindowGetPosition(): Promise<Position>`
### WindowMaximise ### WindowMaximise
Maximises the window to fill the screen. Maximiert das Fenster, um den Bildschirm zu füllen.
Go: `WindowMaximise(ctx context.Context)`<br/> JS: `WindowMaximise()` Go: `WindowMaximise(ctx context.Context)`<br/> JS: `WindowMaximise()`
### WindowUnmaximise ### WindowUnmaximise
Restores the window to the dimensions and position prior to maximising. Stellt das Fenster vor der Maximierung wieder auf die Dimensionen und Position zurück.
Go: `WindowUnmaximise(ctx context.Context)`<br/> JS: `WindowUnmaximise()` Go: `WindowUnmaximise(ctx context.Context)`<br/> JS: `WindowUnmaximise()`
### WindowIsMaximised ### WindowIsMaximised
Returns true if the window is maximised. Gibt true zurück, wenn das Fenster maximiert ist.
Go: `WindowIsMaximised(ctx context.Context) bool`<br/> JS: `WindowIsMaximised() Promise<boolean>` Go: `WindowIsMaximised(ctx context.Context) bool`<br/> JS: `WindowIsMaximised() Promise<boolean>`
### WindowToggleMaximise ### WindowToggleMaximise
Toggles between Maximised and UnMaximised. Wechselt zwischen Maximiert und Nicht-Maximiert.
Go: `WindowToggleMaximise(ctx context.Context)`<br/> JS: `WindowToggleMaximise()` Go: `WindowToggleMaximise(ctx context.Context)`<br/> JS: `WindowToggleMaximise()`
### WindowMinimise ### WindowMinimise
Minimises the window. Minimiert das Fenster.
Go: `WindowMinimise(ctx context.Context)`<br/> JS: `WindowMinimise()` Go: `WindowMinimise(ctx context.Context)`<br/> JS: `WindowMinimise()`
### WindowUnminimise ### WindowUnminimise
Restores the window to the dimensions and position prior to minimising. Stellt das Fenster vor der Minimierung wieder auf die Dimensionen und Position zurück.
Go: `WindowUnminimise(ctx context.Context)`<br/> JS: `WindowUnminimise()` Go: `WindowUnminimise(ctx context.Context)`<br/> JS: `WindowUnminimise()`
### WindowIsMinimised ### WindowIsMinimised
Returns true if the window is minimised. Gibt true zurück, wenn das Fenster minimiert ist.
Go: `WindowIsMinimised(ctx context.Context) bool`<br/> JS: `WindowIsMinimised() Promise<boolean>` Go: `WindowIsMinimised(ctx context.Context) bool`<br/> JS: `WindowIsMinimised() Promise<boolean>`
### WindowSetBackgroundColour ### WindowSetBackgroundColour
Sets the background colour of the window to the given RGBA colour definition. This colour will show through for all transparent pixels. Legt die Hintergrundfarbe des Fensters auf die angegebene RGBA-Farbdefinition fest. Diese Farbe wird für alle transparenten Pixel angezeigt.
Valid values for R, G, B and A are 0-255. Gültige Werte für R, G, B und A sind 0-255.
:::info Windows :::info Windows
On Windows, only alpha values of 0 or 255 are supported. Any value that is not 0 will be considered 255. Unter Windows werden nur Alphawerte von 0 oder 255 unterstützt. Jeder Wert, der nicht 0 ist, gilt als 255.
::: :::
@ -202,7 +202,7 @@ Go: `WindowSetBackgroundColour(ctx context.Context, R, G, B, A uint8)`<br/> JS:
### WindowPrint ### WindowPrint
Opens the native print dialog. Öffnet den nativen Druckdialog.
Go: `WindowPrint(ctx context.Context)`<br/> JS: `WindowPrint()` Go: `WindowPrint(ctx context.Context)`<br/> JS: `WindowPrint()`

View file

@ -2,7 +2,7 @@
sidebar_position: 20 sidebar_position: 20
--- ---
# Dogs API # Hunde API
```mdx-code-block ```mdx-code-block
<div class="text--center"> <div class="text--center">
@ -17,25 +17,25 @@ sidebar_position: 20
:::note :::note
This tutorial has been kindly provided by [@tatadan](https://twitter.com/tatadan) and forms part of their [Wails Examples Repository](https://github.com/tataDan/wails-v2-examples). Dieses Tutorial wurde freundlicherweise von [@tatadan](https://twitter.com/tatadan) bereitgestellt und ist Teil des [Wails Beispiel Repository](https://github.com/tataDan/wails-v2-examples).
::: :::
In this tutorial we are going to develop an application that retrieves photos of dogs from the web and then displays them. In diesem Tutorial werden wir eine Anwendung entwickeln, die Fotos von Hunden aus dem Web abruft und diese dann anzeigt.
### Create the project ### Das Projekt erstellen
Let's create the application. From a terminal enter: `wails init -n dogs-api -t svelte` Erstellen wir die Anwendung. Gebe folgendes im Terminal deiner Wahl ein: `wails init -n dogs-api -t svelte`
Note: We could optionally add `-ide vscode` or `-ide goland` to the end of this command if you wanted to add IDE support. Notiz: Wir könnten optional `-ide vscode` oder `-ide goland` zum Ende des Befehls hinzufügen, sollten wir IDE-Support hinzufügen wollten.
Now let's `cd dogs-api` and start editing the project files. Jetzt geben wir `cd dogs-api` ein und starten mit dem Editieren der Projektdateien.
### Remove unused code ### Unbenutzten Code entfernen
We will start by removing some elements that we know we will not use: Wir werden damit beginnen, einige Elemente zu entfernen, von denen wir wissen, dass wir sie nicht verwenden werden:
- Open `app.go` and remove the following lines: - Öffne `app.go` und entferne die folgenden Zeilen:
```go ```go
// Greet returns a greeting for the given name // Greet returns a greeting for the given name
@ -44,14 +44,14 @@ func (a *App) Greet(name string) string {
} }
``` ```
- Open `frontend/src/App.svelte` and delete all lines. - Öffne `frontend/src/App.svelte` und lösche alle Zeilen.
- Delete the `frontend/src/assets/images/logo-universal.png` file - Lösche die `frontend/src/assets/images/logo-universal.png` Datei
### Creating our application ### Erstellen der Anwendung
Now let's add our new Go code. Jetzt fügen wir unseren neuen Go-Code hinzu.
Add the following struct declarations to `app.go` before the function definitions: Füge vor den Funktionsdefinitionen folgende struct Deklarationen zu `app.go` hinzu:
```go ```go
type RandomImage struct { type RandomImage struct {
@ -70,7 +70,7 @@ type ImagesByBreed struct {
} }
``` ```
Add the following functions to `app.go` (perhaps after the existing function definitions): Füge die folgenden Funktionen zu `app.go` hinzu (nach den vorhandenen Funktionsdefinitionen):
```go ```go
func (a *App) GetRandomImageUrl() string { func (a *App) GetRandomImageUrl() string {
@ -135,7 +135,7 @@ func (a *App) GetImageUrlsByBreed(breed string) []string {
} }
``` ```
Modify the `import` section of `app.go` to look like this: Ändere den `Import` Abschnitt von `app.go`, wie folgt ab:
```go ```go
import ( import (
@ -149,7 +149,7 @@ import (
) )
``` ```
Add the following lines to `frontend/src/App.svelte`: Füge folgende Zeilen zu `frontend/src/App.svelte` hinzu:
<!-- prettier-ignore-start --> <!-- prettier-ignore-start -->
```html ```html
@ -236,10 +236,10 @@ Add the following lines to `frontend/src/App.svelte`:
``` ```
<!-- prettier-ignore-end --> <!-- prettier-ignore-end -->
### Testing the application ### Testen der Anwendung
To generate the bindings and test the application, run `wails dev`. Um die Verknüpfungen zu generieren und die Anwendung zu testen, führe `wails dev` aus.
### Compiling the application ### Kompilieren der Anwendung
To compile the application to a single, production grade binary, run `wails build`. Um die Anwendung in eine einzelne Anwendung zu kompilieren, führe `wails build` aus.

View file

@ -4,27 +4,27 @@ sidebar_position: 10
# Hello World # Hello World
The aim of this tutorial is to get you up and running with the most basic application using Wails. You will be able to: Das Ziel dieses Tutorials ist es, den Einstieg in Wails mit einer sehr grundlegenden Anwendung zu ermöglichen. Du wirst in der Lage sein:
- Create a new Wails application - Eine neue Wails Anwendung zu erstellen
- Build the application - Die Anwendung zu builden
- Run the application - Die Anwendung auszuführen
:::note :::note
This tutorial uses Windows as the target platform. Output will vary slightly depending on your operating system. Dieses Tutorial verwendet Windows als Zielplattform. Die Ausgabe variiert je nach Betriebssystem leicht.
::: :::
## Create a new Wails application ## Eine neue Wails Anwendung zu erstellen
To create a new Wails application using the default vanilla JS template, you need to run the following command: Um eine neue Wails-Anwendung mit der Standardvorlage für Vanilla JS zu erstellen, muss folgender Befehl ausgeführt werden:
```bash ```bash
wails init -n helloworld wails init -n helloworld
``` ```
You should see something similar to the following: Etwas Ähnliches, wie folgt, sollte zu sehen sein:
``` ```
Wails CLI v2.0.0 Wails CLI v2.0.0
@ -40,7 +40,7 @@ Template Support: https://wails.io
Initialised project 'helloworld' in 232ms. Initialised project 'helloworld' in 232ms.
``` ```
This will create a new directory called `helloworld` in the current directory. In this directory, you will find a number of files: Dies wird ein neues Verzeichnis namens `helloworld` im aktuellen Verzeichnis erstellen. In diesem Verzeichnis sind eine Anzahl von Dateien zu finden:
``` ```
build/ - Contains the build files + compiled application build/ - Contains the build files + compiled application
@ -52,15 +52,15 @@ go.mod - The go module file
go.sum - The go module checksum file go.sum - The go module checksum file
``` ```
## Build the application ## Die Anwendung zu builden
To build the application, change to the new `helloworld` project directory and run the following command: Um die Anwendung zu builden, wechsel in das neue `helloworld` Projektverzeichnis und führe den folgenden Befehl aus:
```bash ```bash
wails build wails build
``` ```
You should see something like the following: Etwas Ähnliches, wie folgt, sollte zu sehen sein:
``` ```
Wails CLI v2.0.0 Wails CLI v2.0.0
@ -87,11 +87,11 @@ Building target: windows/amd64
Built 'C:\Users\leaan\tutorial\helloworld\build\bin\helloworld.exe' in 10.616s. Built 'C:\Users\leaan\tutorial\helloworld\build\bin\helloworld.exe' in 10.616s.
``` ```
This has compiled the application and saved it in the `build/bin` directory. Dies hat die Anwendung kompiliert und im Verzeichnis `build/bin` gespeichert.
## Run the application ## Die Anwendung auszuführen
If we view the `build/bin` directory in Windows Explorer, we should see our project binary: Wenn wir das Verzeichnis `build/bin` im Windows Explorer ansehen, sollten wir unsere Projektdatei sehen:
```mdx-code-block ```mdx-code-block
<div class="text--center"> <div class="text--center">
@ -103,13 +103,13 @@ If we view the `build/bin` directory in Windows Explorer, we should see our proj
<br /> <br />
``` ```
We can run it by simply double-clicking the `helloworld.exe` file. Wir können diese durch einen Doppelklick auf die `helloworld.exe` Datei ausführen.
On Mac, Wails generates a `helloworld.app` file which can be run by double-clicking it. Auf Mac erzeugt Wails eine `helloworld.app` Datei, die durch einen Doppelklick ausgeführt werden kann.
On Linux, you can run the application using `./helloworld` from the `build/bin` directory. Unter Linux kann die Anwendung mit `./helloworld` aus dem `build/bin` Verzeichnis ausgeführt werden.
You should see the application working as expected: Die Anwendung sollte wie erwartet funktionieren:
```mdx-code-block ```mdx-code-block
<div class="text--center"> <div class="text--center">

View file

@ -4,15 +4,15 @@
"description": "The label for version v2.10" "description": "The label for version v2.10"
}, },
"sidebar.docs.category.Getting Started": { "sidebar.docs.category.Getting Started": {
"message": "Getting Started", "message": "Erste Schritte",
"description": "The label for category Getting Started in sidebar docs" "description": "The label for category Getting Started in sidebar docs"
}, },
"sidebar.docs.category.Reference": { "sidebar.docs.category.Reference": {
"message": "Reference", "message": "Referenz",
"description": "The label for category Reference in sidebar docs" "description": "The label for category Reference in sidebar docs"
}, },
"sidebar.docs.category.Runtime": { "sidebar.docs.category.Runtime": {
"message": "Runtime", "message": "Laufzeit",
"description": "The label for category Runtime in sidebar docs" "description": "The label for category Runtime in sidebar docs"
}, },
"sidebar.docs.category.Community": { "sidebar.docs.category.Community": {
@ -24,7 +24,7 @@
"description": "The label for category Showcase in sidebar docs" "description": "The label for category Showcase in sidebar docs"
}, },
"sidebar.docs.category.Guides": { "sidebar.docs.category.Guides": {
"message": "Guides", "message": "Anleitungen",
"description": "The label for category Guides in sidebar docs" "description": "The label for category Guides in sidebar docs"
}, },
"sidebar.docs.category.Tutorials": { "sidebar.docs.category.Tutorials": {
@ -32,7 +32,7 @@
"description": "The label for category Tutorials in sidebar docs" "description": "The label for category Tutorials in sidebar docs"
}, },
"sidebar.docs.link.Contributing": { "sidebar.docs.link.Contributing": {
"message": "Contributing", "message": "Mitwirken",
"description": "The label for link Contributing in sidebar docs, linking to /community-guide#ways-of-contributing" "description": "The label for link Contributing in sidebar docs, linking to /community-guide#ways-of-contributing"
} }
} }

View file

@ -4,15 +4,15 @@
"description": "The label for version v2.3.1" "description": "The label for version v2.3.1"
}, },
"sidebar.docs.category.Getting Started": { "sidebar.docs.category.Getting Started": {
"message": "Getting Started", "message": "Erste Schritte",
"description": "The label for category Getting Started in sidebar docs" "description": "The label for category Getting Started in sidebar docs"
}, },
"sidebar.docs.category.Reference": { "sidebar.docs.category.Reference": {
"message": "Reference", "message": "Referenz",
"description": "The label for category Reference in sidebar docs" "description": "The label for category Reference in sidebar docs"
}, },
"sidebar.docs.category.Runtime": { "sidebar.docs.category.Runtime": {
"message": "Runtime", "message": "Laufzeit",
"description": "The label for category Runtime in sidebar docs" "description": "The label for category Runtime in sidebar docs"
}, },
"sidebar.docs.category.Community": { "sidebar.docs.category.Community": {
@ -24,7 +24,7 @@
"description": "The label for category Showcase in sidebar docs" "description": "The label for category Showcase in sidebar docs"
}, },
"sidebar.docs.category.Guides": { "sidebar.docs.category.Guides": {
"message": "Guides", "message": "Anleitungen",
"description": "The label for category Guides in sidebar docs" "description": "The label for category Guides in sidebar docs"
}, },
"sidebar.docs.category.Tutorials": { "sidebar.docs.category.Tutorials": {
@ -32,7 +32,7 @@
"description": "The label for category Tutorials in sidebar docs" "description": "The label for category Tutorials in sidebar docs"
}, },
"sidebar.docs.link.Contributing": { "sidebar.docs.link.Contributing": {
"message": "Contributing", "message": "Mitwirken",
"description": "The label for link Contributing in sidebar docs, linking to /community-guide#ways-of-contributing" "description": "The label for link Contributing in sidebar docs, linking to /community-guide#ways-of-contributing"
} }
} }

View file

@ -4,15 +4,15 @@
"description": "The label for version v2.4.0" "description": "The label for version v2.4.0"
}, },
"sidebar.docs.category.Getting Started": { "sidebar.docs.category.Getting Started": {
"message": "Getting Started", "message": "Erste Schritte",
"description": "The label for category Getting Started in sidebar docs" "description": "The label for category Getting Started in sidebar docs"
}, },
"sidebar.docs.category.Reference": { "sidebar.docs.category.Reference": {
"message": "Reference", "message": "Referenz",
"description": "The label for category Reference in sidebar docs" "description": "The label for category Reference in sidebar docs"
}, },
"sidebar.docs.category.Runtime": { "sidebar.docs.category.Runtime": {
"message": "Runtime", "message": "Laufzeit",
"description": "The label for category Runtime in sidebar docs" "description": "The label for category Runtime in sidebar docs"
}, },
"sidebar.docs.category.Community": { "sidebar.docs.category.Community": {
@ -24,7 +24,7 @@
"description": "The label for category Showcase in sidebar docs" "description": "The label for category Showcase in sidebar docs"
}, },
"sidebar.docs.category.Guides": { "sidebar.docs.category.Guides": {
"message": "Guides", "message": "Anleitungen",
"description": "The label for category Guides in sidebar docs" "description": "The label for category Guides in sidebar docs"
}, },
"sidebar.docs.category.Tutorials": { "sidebar.docs.category.Tutorials": {
@ -32,7 +32,7 @@
"description": "The label for category Tutorials in sidebar docs" "description": "The label for category Tutorials in sidebar docs"
}, },
"sidebar.docs.link.Contributing": { "sidebar.docs.link.Contributing": {
"message": "Contributing", "message": "Mitwirken",
"description": "The label for link Contributing in sidebar docs, linking to /community-guide#ways-of-contributing" "description": "The label for link Contributing in sidebar docs, linking to /community-guide#ways-of-contributing"
} }
} }

View file

@ -4,15 +4,15 @@
"description": "The label for version v2.5.0" "description": "The label for version v2.5.0"
}, },
"sidebar.docs.category.Getting Started": { "sidebar.docs.category.Getting Started": {
"message": "Getting Started", "message": "Erste Schritte",
"description": "The label for category Getting Started in sidebar docs" "description": "The label for category Getting Started in sidebar docs"
}, },
"sidebar.docs.category.Reference": { "sidebar.docs.category.Reference": {
"message": "Reference", "message": "Referenz",
"description": "The label for category Reference in sidebar docs" "description": "The label for category Reference in sidebar docs"
}, },
"sidebar.docs.category.Runtime": { "sidebar.docs.category.Runtime": {
"message": "Runtime", "message": "Laufzeit",
"description": "The label for category Runtime in sidebar docs" "description": "The label for category Runtime in sidebar docs"
}, },
"sidebar.docs.category.Community": { "sidebar.docs.category.Community": {
@ -24,7 +24,7 @@
"description": "The label for category Showcase in sidebar docs" "description": "The label for category Showcase in sidebar docs"
}, },
"sidebar.docs.category.Guides": { "sidebar.docs.category.Guides": {
"message": "Guides", "message": "Anleitungen",
"description": "The label for category Guides in sidebar docs" "description": "The label for category Guides in sidebar docs"
}, },
"sidebar.docs.category.Tutorials": { "sidebar.docs.category.Tutorials": {
@ -32,7 +32,7 @@
"description": "The label for category Tutorials in sidebar docs" "description": "The label for category Tutorials in sidebar docs"
}, },
"sidebar.docs.link.Contributing": { "sidebar.docs.link.Contributing": {
"message": "Contributing", "message": "Mitwirken",
"description": "The label for link Contributing in sidebar docs, linking to /community-guide#ways-of-contributing" "description": "The label for link Contributing in sidebar docs, linking to /community-guide#ways-of-contributing"
} }
} }

View file

@ -4,15 +4,15 @@
"description": "The label for version v2.6.0" "description": "The label for version v2.6.0"
}, },
"sidebar.docs.category.Getting Started": { "sidebar.docs.category.Getting Started": {
"message": "Getting Started", "message": "Erste Schritte",
"description": "The label for category Getting Started in sidebar docs" "description": "The label for category Getting Started in sidebar docs"
}, },
"sidebar.docs.category.Reference": { "sidebar.docs.category.Reference": {
"message": "Reference", "message": "Referenz",
"description": "The label for category Reference in sidebar docs" "description": "The label for category Reference in sidebar docs"
}, },
"sidebar.docs.category.Runtime": { "sidebar.docs.category.Runtime": {
"message": "Runtime", "message": "Laufzeit",
"description": "The label for category Runtime in sidebar docs" "description": "The label for category Runtime in sidebar docs"
}, },
"sidebar.docs.category.Community": { "sidebar.docs.category.Community": {
@ -24,7 +24,7 @@
"description": "The label for category Showcase in sidebar docs" "description": "The label for category Showcase in sidebar docs"
}, },
"sidebar.docs.category.Guides": { "sidebar.docs.category.Guides": {
"message": "Guides", "message": "Anleitungen",
"description": "The label for category Guides in sidebar docs" "description": "The label for category Guides in sidebar docs"
}, },
"sidebar.docs.category.Tutorials": { "sidebar.docs.category.Tutorials": {
@ -32,7 +32,7 @@
"description": "The label for category Tutorials in sidebar docs" "description": "The label for category Tutorials in sidebar docs"
}, },
"sidebar.docs.link.Contributing": { "sidebar.docs.link.Contributing": {
"message": "Contributing", "message": "Mitwirken",
"description": "The label for link Contributing in sidebar docs, linking to /community-guide#ways-of-contributing" "description": "The label for link Contributing in sidebar docs, linking to /community-guide#ways-of-contributing"
} }
} }

View file

@ -4,15 +4,15 @@
"description": "The label for version v2.7.0" "description": "The label for version v2.7.0"
}, },
"sidebar.docs.category.Getting Started": { "sidebar.docs.category.Getting Started": {
"message": "Getting Started", "message": "Erste Schritte",
"description": "The label for category Getting Started in sidebar docs" "description": "The label for category Getting Started in sidebar docs"
}, },
"sidebar.docs.category.Reference": { "sidebar.docs.category.Reference": {
"message": "Reference", "message": "Referenz",
"description": "The label for category Reference in sidebar docs" "description": "The label for category Reference in sidebar docs"
}, },
"sidebar.docs.category.Runtime": { "sidebar.docs.category.Runtime": {
"message": "Runtime", "message": "Laufzeit",
"description": "The label for category Runtime in sidebar docs" "description": "The label for category Runtime in sidebar docs"
}, },
"sidebar.docs.category.Community": { "sidebar.docs.category.Community": {
@ -24,7 +24,7 @@
"description": "The label for category Showcase in sidebar docs" "description": "The label for category Showcase in sidebar docs"
}, },
"sidebar.docs.category.Guides": { "sidebar.docs.category.Guides": {
"message": "Guides", "message": "Anleitungen",
"description": "The label for category Guides in sidebar docs" "description": "The label for category Guides in sidebar docs"
}, },
"sidebar.docs.category.Tutorials": { "sidebar.docs.category.Tutorials": {
@ -32,7 +32,7 @@
"description": "The label for category Tutorials in sidebar docs" "description": "The label for category Tutorials in sidebar docs"
}, },
"sidebar.docs.link.Contributing": { "sidebar.docs.link.Contributing": {
"message": "Contributing", "message": "Mitwirken",
"description": "The label for link Contributing in sidebar docs, linking to /community-guide#ways-of-contributing" "description": "The label for link Contributing in sidebar docs, linking to /community-guide#ways-of-contributing"
} }
} }

View file

@ -4,15 +4,15 @@
"description": "The label for version v2.8.0" "description": "The label for version v2.8.0"
}, },
"sidebar.docs.category.Getting Started": { "sidebar.docs.category.Getting Started": {
"message": "Getting Started", "message": "Erste Schritte",
"description": "The label for category Getting Started in sidebar docs" "description": "The label for category Getting Started in sidebar docs"
}, },
"sidebar.docs.category.Reference": { "sidebar.docs.category.Reference": {
"message": "Reference", "message": "Referenz",
"description": "The label for category Reference in sidebar docs" "description": "The label for category Reference in sidebar docs"
}, },
"sidebar.docs.category.Runtime": { "sidebar.docs.category.Runtime": {
"message": "Runtime", "message": "Laufzeit",
"description": "The label for category Runtime in sidebar docs" "description": "The label for category Runtime in sidebar docs"
}, },
"sidebar.docs.category.Community": { "sidebar.docs.category.Community": {
@ -24,7 +24,7 @@
"description": "The label for category Showcase in sidebar docs" "description": "The label for category Showcase in sidebar docs"
}, },
"sidebar.docs.category.Guides": { "sidebar.docs.category.Guides": {
"message": "Guides", "message": "Anleitungen",
"description": "The label for category Guides in sidebar docs" "description": "The label for category Guides in sidebar docs"
}, },
"sidebar.docs.category.Tutorials": { "sidebar.docs.category.Tutorials": {
@ -32,7 +32,7 @@
"description": "The label for category Tutorials in sidebar docs" "description": "The label for category Tutorials in sidebar docs"
}, },
"sidebar.docs.link.Contributing": { "sidebar.docs.link.Contributing": {
"message": "Contributing", "message": "Mitwirken",
"description": "The label for link Contributing in sidebar docs, linking to /community-guide#ways-of-contributing" "description": "The label for link Contributing in sidebar docs, linking to /community-guide#ways-of-contributing"
} }
} }

View file

@ -4,15 +4,15 @@
"description": "The label for version v2.8.1" "description": "The label for version v2.8.1"
}, },
"sidebar.docs.category.Getting Started": { "sidebar.docs.category.Getting Started": {
"message": "Getting Started", "message": "Erste Schritte",
"description": "The label for category Getting Started in sidebar docs" "description": "The label for category Getting Started in sidebar docs"
}, },
"sidebar.docs.category.Reference": { "sidebar.docs.category.Reference": {
"message": "Reference", "message": "Referenz",
"description": "The label for category Reference in sidebar docs" "description": "The label for category Reference in sidebar docs"
}, },
"sidebar.docs.category.Runtime": { "sidebar.docs.category.Runtime": {
"message": "Runtime", "message": "Laufzeit",
"description": "The label for category Runtime in sidebar docs" "description": "The label for category Runtime in sidebar docs"
}, },
"sidebar.docs.category.Community": { "sidebar.docs.category.Community": {
@ -24,7 +24,7 @@
"description": "The label for category Showcase in sidebar docs" "description": "The label for category Showcase in sidebar docs"
}, },
"sidebar.docs.category.Guides": { "sidebar.docs.category.Guides": {
"message": "Guides", "message": "Anleitungen",
"description": "The label for category Guides in sidebar docs" "description": "The label for category Guides in sidebar docs"
}, },
"sidebar.docs.category.Tutorials": { "sidebar.docs.category.Tutorials": {
@ -32,7 +32,7 @@
"description": "The label for category Tutorials in sidebar docs" "description": "The label for category Tutorials in sidebar docs"
}, },
"sidebar.docs.link.Contributing": { "sidebar.docs.link.Contributing": {
"message": "Contributing", "message": "Mitwirken",
"description": "The label for link Contributing in sidebar docs, linking to /community-guide#ways-of-contributing" "description": "The label for link Contributing in sidebar docs, linking to /community-guide#ways-of-contributing"
} }
} }

View file

@ -4,15 +4,15 @@
"description": "The label for version v2.9.0" "description": "The label for version v2.9.0"
}, },
"sidebar.docs.category.Getting Started": { "sidebar.docs.category.Getting Started": {
"message": "Getting Started", "message": "Erste Schritte",
"description": "The label for category Getting Started in sidebar docs" "description": "The label for category Getting Started in sidebar docs"
}, },
"sidebar.docs.category.Reference": { "sidebar.docs.category.Reference": {
"message": "Reference", "message": "Referenz",
"description": "The label for category Reference in sidebar docs" "description": "The label for category Reference in sidebar docs"
}, },
"sidebar.docs.category.Runtime": { "sidebar.docs.category.Runtime": {
"message": "Runtime", "message": "Laufzeit",
"description": "The label for category Runtime in sidebar docs" "description": "The label for category Runtime in sidebar docs"
}, },
"sidebar.docs.category.Community": { "sidebar.docs.category.Community": {
@ -24,7 +24,7 @@
"description": "The label for category Showcase in sidebar docs" "description": "The label for category Showcase in sidebar docs"
}, },
"sidebar.docs.category.Guides": { "sidebar.docs.category.Guides": {
"message": "Guides", "message": "Anleitungen",
"description": "The label for category Guides in sidebar docs" "description": "The label for category Guides in sidebar docs"
}, },
"sidebar.docs.category.Tutorials": { "sidebar.docs.category.Tutorials": {
@ -32,7 +32,7 @@
"description": "The label for category Tutorials in sidebar docs" "description": "The label for category Tutorials in sidebar docs"
}, },
"sidebar.docs.link.Contributing": { "sidebar.docs.link.Contributing": {
"message": "Contributing", "message": "Mitwirken",
"description": "The label for link Contributing in sidebar docs, linking to /community-guide#ways-of-contributing" "description": "The label for link Contributing in sidebar docs, linking to /community-guide#ways-of-contributing"
} }
} }

Some files were not shown because too many files have changed in this diff Show more