diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/current/community/templates.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/current/community/templates.mdx index b4ab74e2363..d1b9913b1ec 100644 --- a/website/i18n/fr/docusaurus-plugin-content-docs/current/community/templates.mdx +++ b/website/i18n/fr/docusaurus-plugin-content-docs/current/community/templates.mdx @@ -60,6 +60,10 @@ Si vous n'êtes pas sûr d'un modèle, inspectez `package.json` et `wails.json` - [wails-elm-template](https://github.com/benjamin-thomas/wails-elm-template) - Développez votre application GUI avec de la programmation fonctionnelle et une configuration de développement en direct :tada: :rocket: - [wails-template-elm-tailwind](https://github.com/rnice01/wails-template-elm-tailwind) - Combine les puissances :muscle: d'Elm + Tailwind CSS + Wails ! Rechargement automatique pris en charge. +## 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 + ## Pure JavaScript (Vanilla) - [wails-pure-js-template](https://github.com/KiddoV/wails-pure-js-template) - Un modèle avec rien que du JavaScript, du HTML et du CSS de base diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/current/guides/crossplatform-build.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/current/guides/crossplatform-build.mdx new file mode 100644 index 00000000000..fd81a974d04 --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/current/guides/crossplatform-build.mdx @@ -0,0 +1,66 @@ +# Crossplatform build with 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. + +An action that facilitates building a Wails app is available at: +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: +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: + +```yaml +name: Wails build + +on: + push: + tags: + # Match any new tag + - '*' + +env: + # Necessary for most environments as build failure can occur due to OOM issues + NODE_OPTIONS: "--max-old-space-size=4096" + +jobs: + build: + strategy: + # Failure in one platform build won't impact the others + fail-fast: false + matrix: + build: + - name: 'App' + platform: 'linux/amd64' + os: 'ubuntu-latest' + - name: 'App' + platform: 'windows/amd64' + os: 'windows-latest' + - name: 'App' + platform: 'darwin/universal' + os: 'macos-latest' + + runs-on: ${{ matrix.build.os }} + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + submodules: recursive + + - name: Build wails + uses: dAppServer/wails-build-action@v2.2 + id: build + with: + build-name: ${{ matrix.build.name }} + build-platform: ${{ matrix.build.platform }} + package: false + go-version: '1.20' +``` + +This example offers opportunities for various enhancements, including: + +- Caching dependencies +- Code signing +- Uploading to platforms like S3, Supbase, etc. +- Injecting secrets as environment variables +- Utilizing environment variables as build variables (such as version variable extracted from the current Git tag) diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/current/guides/file-association.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/current/guides/file-association.mdx new file mode 100644 index 00000000000..b10c66bb373 --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/current/guides/file-association.mdx @@ -0,0 +1,199 @@ +# File Association + +File association feature allows you to associate specific file types with your app so that when users open those files, +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: + +To set up file association, you need to modify your application's wails.json file. +In "info" section add a "fileAssociations" section specifying the file types your app should be associated with. + +For example: + +```json +{ + "info": { + "fileAssociations": [ + { + "ext": "wails", + "name": "Wails", + "description": "Wails Application File", + "iconName": "wailsFileIcon", + "role": "Editor" + }, + { + "ext": "jpg", + "name": "JPEG", + "description": "Image File", + "iconName": "jpegFileIcon", + "role": "Editor" + } + ] + } +} +``` + +| Property | Description | +| :---------- | :------------------------------------------------------------------------------------------------------------------------------------------------- | +| ext | The extension (minus the leading period). e.g. png | +| name | The name. e.g. PNG File | +| 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 | +| description | Windows-only. The description. It is displayed on the `Type` column on Windows Explorer. | +| role | macOS-only. The app’s role with respect to the type. Corresponds to CFBundleTypeRole. | + +## Platform Specifics: + +### 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: + +```go title="main.go" +func main() { + // Create application with options + err := wails.Run(&options.App{ + Title: "wails-open-file", + Width: 1024, + Height: 768, + AssetServer: &assetserver.Options{ + Assets: assets, + }, + BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1}, + Mac: &mac.Options{ + OnFileOpen: func(filePaths []string) { println(filestring) }, + }, + Bind: []interface{}{ + app, + }, + }) + + if err != nil { + println("Error:", err.Error()) + } +} +``` + +### Windows + +On Windows file association is supported only with NSIS installer. During installation, the installer will create a +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" +func main() { + argsWithoutProg := os.Args[1:] + + if len(argsWithoutProg) != 0 { + println("launchArgs", argsWithoutProg) + } +} +``` + +### Linux + +Currently, Wails doesn't support bundling for Linux. So, you need to create file associations manually. +For example if you distribute your app as a .deb package, you can create file associations by adding required files in you bundle. +You can use [nfpm](https://nfpm.goreleaser.com/) to create .deb package for your app. + +1. Create a .desktop file for your app and specify file associations there. Example: + +```ini +[Desktop Entry] +Categories=Office +Exec=/usr/bin/wails-open-file %u +Icon=wails-open-file.png +Name=wails-open-file +Terminal=false +Type=Application +MimeType=application/x-wails;application/x-test +``` + +2. Create mime types file. Example: + +```xml + + + + Wails Application File + + + +``` + +3. Create icons for your file types. SVG icons are recommended. +4. Prepare postInstall/postRemove scripts for your package. Example: + +```sh +# reload mime types to register file associations +update-mime-database /usr/share/mime +# reload desktop database to load app in list of available +update-desktop-database /usr/share/applications +# update icons +update-icon-caches /usr/share/icons/* +``` + +5. Configure nfpm to use your scripts and files. Example: + +```yaml +name: "wails-open-file" +arch: "arm64" +platform: "linux" +version: "1.0.0" +section: "default" +priority: "extra" +maintainer: "FooBarCorp " +description: "Sample Package" +vendor: "FooBarCorp" +homepage: "http://example.com" +license: "MIT" +contents: +- src: ../bin/wails-open-file + dst: /usr/bin/wails-open-file +- src: ./main.desktop + dst: /usr/share/applications/wails-open-file.desktop +- src: ./application-wails-mime.xml + dst: /usr/share/mime/packages/application-x-wails.xml +- src: ./application-test-mime.xml + dst: /usr/share/mime/packages/application-x-test.xml +- src: ../appicon.svg + dst: /usr/share/icons/hicolor/scalable/apps/wails-open-file.svg +- src: ../wailsFileIcon.svg + dst: /usr/share/icons/hicolor/scalable/mimetypes/application-x-wails.svg +- src: ../testFileIcon.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 +- src: ../appicon.svg + dst: /usr/share/icons/Yaru/scalable/apps/wails-open-file.svg +- src: ../wailsFileIcon.svg + dst: /usr/share/icons/Yaru/scalable/mimetypes/application-x-wails.svg +- src: ../testFileIcon.svg + dst: /usr/share/icons/Yaru/scalable/mimetypes/application-x-test.svg +scripts: + postinstall: ./postInstall.sh + postremove: ./postRemove.sh +``` + +6. Build your .deb package using nfpm: + +```sh +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, + 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" +func main() { + argsWithoutProg := os.Args[1:] + + if len(argsWithoutProg) != 0 { + println("launchArgs", argsWithoutProg) + } +} +``` + +## Limitations: + +On Windows and Linux when associated file is opened, new instance of your app is launched. +Currently, Wails doesn't support opening files in already running app. There is plugin for single instance support for v3 in development. diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/current/guides/troubleshooting.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/current/guides/troubleshooting.mdx index 5b319f9a447..1c3b6a9cc52 100644 --- a/website/i18n/fr/docusaurus-plugin-content-docs/current/guides/troubleshooting.mdx +++ b/website/i18n/fr/docusaurus-plugin-content-docs/current/guides/troubleshooting.mdx @@ -159,6 +159,28 @@ If `/Applications/Xcode.app/Contents/Developer` is displayed, run `sudo xcode-se Sources: https://github.com/wailsapp/wails/issues/1806 and https://github.com/wailsapp/wails/issues/1140#issuecomment-1290446496 +## My application won't compile on Mac + +If you are getting errors like this: + +```shell +l1@m2 GoEasyDesigner % go build -tags dev -gcflags "all=-N -l" +/Users/l1/sdk/go1.20.5/pkg/tool/darwin_arm64/link: running clang failed: exit status 1 +Undefined symbols for architecture arm64: + "_OBJC_CLASS_$_UTType", referenced from: + objc-class-ref in 000016.o +ld: symbol(s) not found for architecture arm64 +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: + +```shell +export CGO_LDFLAGS="-framework UniformTypeIdentifiers" && go build -tags dev -gcflags "all=-N -l" +``` + +Sources: 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" @@ -185,4 +207,162 @@ This is due to the default background of the webview being white. If you want to WebviewIsTransparent: true, }, }) -``` \ No newline at end of file +``` + +## I get a "Microsoft Edge can't read or write to its data directory" error when running my program as admin on Windows + +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. + +When a Windows machine has two local accounts: + +- Alice, an admin +- Bob, a regular user + +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. + +Wails instructs WebView2 to store user data at the specified `WebviewUserDataPath`. It defaults to `%APPDATA%\[BinaryName.exe]`. + +Because the application is running under Alice's account, `%APPDATA%\[BinaryName.exe]` resolves to `C:\Users\Alice\AppData\Roaming\[BinaryName.exe]`. + +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. + +Possible solution #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: + +```go +//go:build windows + +package sample + +import ( + "golang.org/x/sys/windows" + "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. +func RunAs(path string) error { + verbPtr, _ := syscall.UTF16PtrFromString("runas") + exePtr, _ := syscall.UTF16PtrFromString(path) + cwdPtr, _ := syscall.UTF16PtrFromString("") + argPtr, _ := syscall.UTF16PtrFromString("") + + var showCmd int32 = 1 //SW_NORMAL + + err := windows.ShellExecute(0, verbPtr, exePtr, argPtr, cwdPtr, showCmd) + if err != nil { + return err + } + return nil +} +``` + +Possible solution #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: + +```go +package main + +import ( + "embed" + "os" + "runtime" + + "github.com/fourcorelabs/wintoken" + "github.com/hectane/go-acl" + "github.com/wailsapp/wails/v2" + "github.com/wailsapp/wails/v2/pkg/options" + "github.com/wailsapp/wails/v2/pkg/options/assetserver" + "github.com/wailsapp/wails/v2/pkg/options/windows" +) + +//go:embed all:frontend/dist +var assets embed.FS + +const ( + fixedTokenKey = "SAMPLE_RANDOM_KEY" + fixedTokenVal = "with-fixed-token" + webviewDir = "C:\\ProgramData\\Sample" +) + +func runWithFixedToken() { + println("Re-launching self") + token, err := wintoken.OpenProcessToken(0, wintoken.TokenPrimary) //pass 0 for own process + if err != nil { + panic(err) + } + defer token.Close() + + token.EnableTokenPrivileges([]string{ + "SeBackupPrivilege", + "SeDebugPrivilege", + "SeRestorePrivilege", + }) + + cmd := exec.Command(os.Args[0]) + cmd.Args = os.Args + cmd.Env = os.Environ() + cmd.Env = append(cmd.Env, fmt.Sprintf("%v=%v", fixedTokenKey, fixedTokenVal)) + cmd.Stdin = os.Stdin + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + cmd.SysProcAttr = &syscall.SysProcAttr{Token: syscall.Token(token.Token())} + if err := cmd.Run(); err != nil { + println("Error after launching self:", err) + os.Exit(1) + } + println("Clean self launch :)") + os.Exit(0) +} + +func main() { + if runtime.GOOS == "windows" && os.Getenv(fixedTokenKey) != fixedTokenVal { + runWithFixedToken() + } + + println("Setting data dir to", webviewDir) + if err := os.MkdirAll(webviewDir, os.ModePerm); err != nil { + println("Failed creating dir:", err) + } + if err := acl.Chmod(webviewDir, 0777); err != nil { + println("Failed setting ACL on dir:", err) + } + + app := NewApp() + + err := wails.Run(&options.App{ + Title: "sample-data-dir", + Width: 1024, + Height: 768, + AssetServer: &assetserver.Options{ + Assets: assets, + }, + Bind: []interface{}{ + app, + }, + Windows: &windows.Options{ + WebviewUserDataPath: webviewDir, + }, + }) + + if err != nil { + println("Error:", err.Error()) + } +} +``` + +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. + +Possible future solution #3: [run WebView2 using an in-memory mode if implemented](https://github.com/MicrosoftEdge/WebView2Feedback/issues/3637#issuecomment-1728300982). + +## WebView2 installation succeeded, but the wails doctor command shows that it is not installed + +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/). + +Source: https://github.com/wailsapp/wails/issues/2917 + +## 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). + diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/current/reference/cli.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/current/reference/cli.mdx index 1c9bea69494..30721c11204 100644 --- a/website/i18n/fr/docusaurus-plugin-content-docs/current/reference/cli.mdx +++ b/website/i18n/fr/docusaurus-plugin-content-docs/current/reference/cli.mdx @@ -49,35 +49,35 @@ Si vous n'êtes pas sûr d'un modèle, inspectez les fichiers `package.json` et `wails build` est utilisé pour compiler votre projet vers un binaire prêt à la production. -| Option | Description | Par défaut | -|:-------------------- |:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| -clean | Nettoie le répertoire `build/bin` | | -| -compiler "compiler" | Utiliser un autre compilateur pour compiler, par exemple go1.15beta1 | go | -| -debug | Conserve les informations de débogage dans l'application et affiche la console de débogage. Permet l'utilisation des outils de développement dans la fenêtre de l'application | | -| -devtools | Permet l'utilisation des devtools dans la fenêtre d'application en production (quand -debug n'est pas utilisé) | | -| -dryrun | Affiche la commande build sans l'exécuter | | -| -f | Forcer la compilation de l'application | | -| -garbleargs | Arguments à passer à garble | `-literals -tiny -seed=random` | -| -ldflags "flags" | Options supplémentaires à passer au compilateur | | -| -m | Permet d'ignorer mod tidy avant la compilation | | -| -nopackage | Ne pas empaqueter l'application | | -| -nocolour | Désactive la couleur des logs dans le terminal | | -| -nosyncgomod | Ne pas synchroniser go.mod avec la version Wails | | -| -nsis | Génère l'installateur NSIS pour Windows | | -| -o filename | Nom du fichier de sortie | | -| -obfuscated | Cacher le code de l'application en utilisant [garble](https://github.com/burrowers/garble) | | -| -platform | Construit pour les [plates-formes](../reference/cli.mdx#platforms) données (séparées par des virgules) par exemple. `windows/arm64`. Notez que si vous ne donnez pas l'architecture, `runtime.GOARCH` est utilisé. | platform = le contenu de la variable d'environnement `GOOS` si elle existe, autrement `runtime.GOOS`.
arch = le contenu de la variable d'environnement `GOARCH` si elle existe, autrement `runtime.GOARCH`. | -| -race | Construire avec le détecteur Go race | | -| -s | Ignorer la construction du frontend | | -| -skipbindings | Ignorer la génération des liaisons | | -| -tags "extra tags" | Options de compilation à passer au compilateur Go. Doivent être entre guillemets. Séparés par un espace ou une virgule (pas les deux) | | -| -trimpath | Supprimer tous les chemins vers les fichiers système de l'exécutable final. | | -| -u | Met à jour le `go.mod de votre projet` pour utiliser la même version de Wails que le CLI | | -| -upx | Compresser le binaire final en utilisant "upx" | | -| -upxflags | Options à passer à upx | | -| -v int | Niveau de verbosité (0 - silencieux, 1 - par défaut, 2 - verbeux) | 1 | -| -webview2 | Stratégie d'installation WebView2 : download,embed,browser,error | download | -| -windowsconsole | Garder la fenêtre de la console lors de la construction d'une version pour Windows | | +| Option | Description | Par défaut | +|:-------------------- |:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| -clean | Nettoie le répertoire `build/bin` | | +| -compiler "compiler" | Utiliser un autre compilateur pour compiler, par exemple go1.15beta1 | go | +| -debug | Conserve les informations de débogage dans l'application et affiche la console de débogage. Permet l'utilisation des outils de développement dans la fenêtre de l'application | | +| -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. | | +| -dryrun | Affiche la commande build sans l'exécuter | | +| -f | Forcer la compilation de l'application | | +| -garbleargs | Arguments à passer à garble | `-literals -tiny -seed=random` | +| -ldflags "flags" | Options supplémentaires à passer au compilateur | | +| -m | Permet d'ignorer mod tidy avant la compilation | | +| -nopackage | Ne pas empaqueter l'application | | +| -nocolour | Désactive la couleur des logs dans le terminal | | +| -nosyncgomod | Ne pas synchroniser go.mod avec la version Wails | | +| -nsis | Génère l'installateur NSIS pour Windows | | +| -o filename | Nom du fichier de sortie | | +| -obfuscated | Cacher le code de l'application en utilisant [garble](https://github.com/burrowers/garble) | | +| -platform | Construit pour les [plates-formes](../reference/cli.mdx#platforms) données (séparées par des virgules) par exemple. `windows/arm64`. Notez que si vous ne donnez pas l'architecture, `runtime.GOARCH` est utilisé. | platform = le contenu de la variable d'environnement `GOOS` si elle existe, autrement `runtime.GOOS`.
arch = le contenu de la variable d'environnement `GOARCH` si elle existe, autrement `runtime.GOARCH`. | +| -race | Construire avec le détecteur Go race | | +| -s | Ignorer la construction du frontend | | +| -skipbindings | Ignorer la génération des liaisons | | +| -tags "extra tags" | Options de compilation à passer au compilateur Go. Doivent être entre guillemets. Séparés par un espace ou une virgule (pas les deux) | | +| -trimpath | Supprimer tous les chemins vers les fichiers système de l'exécutable final. | | +| -u | Met à jour le `go.mod de votre projet` pour utiliser la même version de Wails que le CLI | | +| -upx | Compresser le binaire final en utilisant "upx" | | +| -upxflags | Options à passer à upx | | +| -v int | Niveau de verbosité (0 - silencieux, 1 - par défaut, 2 - verbeux) | 1 | +| -webview2 | Stratégie d'installation WebView2 : download,embed,browser,error | download | +| -windowsconsole | Garder la fenêtre de la console lors de la construction d'une version pour Windows | | Pour une description détaillée des options `webview2` , veuillez vous référer au Guide de [Windows](../guides/windows.mdx). @@ -167,8 +167,8 @@ Your system is ready for Wails development! - Un serveur web est lancé sur `http://localhost:34115` qui sert votre application (et pas seulement le frontend) sur http. Cela vous permet d'utiliser les extensions de développement de votre navigateur favori - Tous les assets de l'application sont chargés à partir du disque. Si elles sont modifiées, l'application se rechargera automatiquement (pas de recompilation). Tous les navigateurs connectés rechargeront également - Un module JS est généré fournissant les éléments suivants : - - Les méthodes Javascript permettant d'appeler vos méthodes Go avec JSDoc autogénérée, vous fournissant des indications sur les méthodes - - Les versions TypeScript de vos structures Go, qui peuvent être construites et transmises à vos méthodes +- Les méthodes Javascript permettant d'appeler vos méthodes Go avec JSDoc autogénérée, vous fournissant des indications sur les méthodes +- Les versions TypeScript de vos structures Go, qui peuvent être construites et transmises à vos méthodes - Un second module JS est généré qui fournit une déclaration des méthodes et structures pour l'exécutable - Sur macOS, il regroupera l'application dans un fichier `.app` et l'exécutera. Il utilisera un `build/darwin/Info.dev.plist` pour le développement. diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/current/reference/options.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/current/reference/options.mdx index 1d3166ee89d..a80e3526732 100644 --- a/website/i18n/fr/docusaurus-plugin-content-docs/current/reference/options.mdx +++ b/website/i18n/fr/docusaurus-plugin-content-docs/current/reference/options.mdx @@ -366,7 +366,7 @@ Nom: CSSDragValue
Type: `string` EnableDefaultContextMenu active le menu contextuel par défaut du navigateur en production. -Par défaut, le menu contextuel par défaut du navigateur n'est disponible qu'en développement et dans un `-debug` ou `-devtools` [build](../reference/cli.mdx#build) avec l'inspecteur de devtools, En utilisant cette option, vous pouvez activer le menu contextuel par défaut dans `production` alors que l'inspecteur devtools ne sera pas disponible à moins que le drapeau `-devtools` ne soit utilisé. +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. Lorsque cette option est activée, par défaut, le menu contextuel ne sera affiché que pour du texte (où Couper/Copier/Coller est nécessaire), pour remplacer ce comportement, vous pouvez utiliser la propriété CSS `--default-contextmenu` sur n'importe quel élément HTML (y compris le corps ``) avec les valeurs suivantes : @@ -593,6 +593,12 @@ Définir ceci à `true` désactivera l'accélération matérielle GPU pour la we Nom: WebviewGpuIsDisabled
Type: `bool` +#### EnableSwipeGestures + +Setting this to `true` will enable swipe gestures for the webview. + +Name: EnableSwipeGestures
Type: `bool` + ### Mac Ceci définit [les options spécifiques à Mac](#mac). @@ -688,6 +694,42 @@ Définir ceci à `true` rendra l'arrière-plan de la fenêtre translucide. Souve Nom: WindowIsTranslucent
Type: `bool` +#### Preferences + +The Preferences struct provides the ability to configure the Webview preferences. + +Name: Preferences
Type: [`*mac.Preferences`](#preferences-struct) + +##### Preferences struct + +You can specify the webview preferences. + +```go +type Preferences struct { + TabFocusesLinks u.Bool + TextInteractionEnabled u.Bool + FullscreenEnabled u.Bool +} +``` + +| Nom | Description | +| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 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) | +| 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) | +| 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) | + +Exemple: + +```go +Mac: &mac.Options{ + Preferences: &mac.Preferences{ + TabFocusesLinks: mac.Enabled, + TextInteractionEnabled: mac.Disabled, + FullscreenEnabled: mac.Enabled, + } +} +``` + #### About Cette configuration vous permet de définir le titre, le message et l'icône pour l'élément de menu "À propos" dans le menu de l'application créé par le rôle "AppMenu". diff --git a/website/i18n/fr/docusaurus-plugin-content-pages/changelog.mdx b/website/i18n/fr/docusaurus-plugin-content-pages/changelog.mdx index f8f9c2ffaca..b1b51b2277c 100644 --- a/website/i18n/fr/docusaurus-plugin-content-pages/changelog.mdx +++ b/website/i18n/fr/docusaurus-plugin-content-pages/changelog.mdx @@ -13,6 +13,28 @@ Le format est basé sur [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) ## [Unreleased] +### Ajouts + +- Added support for enabling/disabling swipe gestures for Windows WebView2. Added by @leaanthony in [PR](https://github.com/wailsapp/wails/pull/2878) +- When building with `-devtools` flag, CMD/CTRL+SHIFT+F12 can be used to open the devtools. Added by @leaanthony in [PR](https://github.com/wailsapp/wails/pull/2915) – Added file association support for macOS and Windows. Added by @APshenkin in [PR](https://github.com/wailsapp/wails/pull/2918) +- Added support for setting some of the Webview preferences, `textInteractionEnabled` and `tabFocusesLinks` on Mac. Added by @fkhadra in [PR](https://github.com/wailsapp/wails/pull/2937) +- Added support for enabling/disabling fullscreen of the Webview on Mac. Added by @fkhadra in [PR](https://github.com/wailsapp/wails/pull/2953) +- Added French README.fr.md page. Added by @nejos97 in [PR](https://github.com/wailsapp/wails/pull/2943) +- New task created for linting v2 `task v2:lint`. Workflow updated to run the task. Added by @mikeee in [PR](https://github.com/wailsapp/wails/pull/2957) +- Added new community template wails-htmx-templ-chi-tailwind. Added by [@pylotlight](https://github.com/pylotlight) in [PR](https://github.com/wailsapp/wails/pull/2984) +- Added CPU/GPU/Memory detection for `wails doctor`. Added by @leaanthony in #d51268b8d0680430f3a614775b13e6cd2b906d1c + +### Changements + +- AssetServer requests are now processed asynchronously without blocking the main thread on Windows. Changed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2926) +- AssetServer requests are now processed concurrently by spawning a goroutine per request. Changed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2926) +- Now building with `-devtools` flag doesn't enable the default context-menu. Changed by @mmghv in [PR](https://github.com/wailsapp/wails/pull/2923) +- Change Window Level. Changed by @almas1992 in [PR](https://github.com/wailsapp/wails/pull/2944) +#### Corrections + +- Fixed typo on docs/reference/options page. Added by [@pylotlight](https://github.com/pylotlight) in [PR](https://github.com/wailsapp/wails/pull/2887) +- Fixed issue with npm being called npm20 on openSUSE-Tumbleweed. Fixed by @TuffenDuffen in [PR] in (https://github.com/wailsapp/wails/pull/2941) + ## v2.6.0 - 2023-09-06 ### Modifications importantes @@ -27,6 +49,7 @@ Le format est basé sur [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) - Fixed `SetBackgroundColour` so it sets the window's background color to reduce resize flickering on Linux. Added by @lyimmi in [PR](https://github.com/wailsapp/wails/pull/2853) - Fixed disable window resize option and wrong initial window size when its enabled. Added by @lyimmi in [PR](https://github.com/wailsapp/wails/pull/2863) - Fixed build hook command parsing. Added by @smac89 in [PR](https://github.com/wailsapp/wails/pull/2836) +- Fixed filesystem watcher from filtering top level project directory if binary name is included in .gitignore. Added by [@haukened](https://github.com/haukened) in [PR #2869](https://github.com/wailsapp/wails/pull/2869) - Fixed `-reloaddir` flag to watch additional directories (non-recursively). [@haukened](https://github.com/haukened) in [PR #2871](https://github.com/wailsapp/wails/pull/2871) - Fixed support for Go 1.21 `go.mod` files. Fixed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2876) @@ -44,6 +67,7 @@ Le format est basé sur [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) - Added new community template wails-sveltekit-tailwind. Added by [@pylotlight](https://github.com/pylotlight) in [PR](https://github.com/wailsapp/wails/pull/2851) - Added support for print dialogs. Added by [@aangelisc](https://github.com/aangelisc) in [PR](https://github.com/wailsapp/wails/pull/2822) - Added new `wails dev -nogorebuild` flag to prevent restarts on back end file changes. [@haukened](https://github.com/haukened) in [PR #2870](https://github.com/wailsapp/wails/pull/2870) +- Added a guide to describe a cross-platform build using GitHub Actions. Added by [@dennypenta](https://github.com/dennypenta) in [PR](https://github.com/wailsapp/wails/pull/2879) ### Changements @@ -680,9 +704,6 @@ Experimental: &options.Experimental{ - [v2, nsis] On dirait que / comme séparateur de chemin ne fonctionne que pour certaines directives de manière cross-platform par [@stffabi](https://github.com/stffabi) dans #1227 - import des modèles sur la définition de bindings par [@adalessa](https://github.com/adalessa) dans #123 - - 1 - - Utilisation de la recherche locale sur le site web par [@leaanthony](https://github.com/leaanthony) en #1234 - Ensure binary resources can be served by [@napalu](https://github.com/napalu) in #1240 - Only retry loading assets when loading from disk by [@leaanthony](https://github.com/leaanthony) in #1241 diff --git a/website/i18n/ja/docusaurus-plugin-content-docs/current/community/templates.mdx b/website/i18n/ja/docusaurus-plugin-content-docs/current/community/templates.mdx index 9fc4a8d92af..3dc92d2fbd9 100644 --- a/website/i18n/ja/docusaurus-plugin-content-docs/current/community/templates.mdx +++ b/website/i18n/ja/docusaurus-plugin-content-docs/current/community/templates.mdx @@ -47,7 +47,7 @@ sidebar_position: 1 - [wails-svelte-template](https://github.com/raitonoberu/wails-svelte-template) - Svelteを使用したテンプレート - [wails-vite-svelte-template](https://github.com/BillBuilt/wails-vite-svelte-template) - SvelteおよびViteを使用したテンプレート - [wails-vite-svelte-tailwind-template](https://github.com/BillBuilt/wails-vite-svelte-tailwind-template) - TailwindCSS v3を含んだ、SvelteおよびViteを使用したテンプレート -- [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) - Svelte v4.2.0、Vite、TailwindCSS v3.3.3を使用したテンプレート - [wails-sveltekit-template](https://github.com/h8gi/wails-sveltekit-template) - SvelteKitを使用したテンプレート ## Solid @@ -60,6 +60,10 @@ sidebar_position: 1 - [wails-elm-template](https://github.com/benjamin-thomas/wails-elm-template) - 関数型プログラミングと**高速な**ホットリロードを使ったGUIアプリ開発 :tada: :rocket: - [wails-template-elm-tailwind](https://github.com/rnice01/wails-template-elm-tailwind) - Elm + Tailwind CSS + Wailsのパワー:muscle:を組み合わせたテンプレート (ホットリロードサポートあり) +## HTMX + +- [wails-htmx-templ-chi-tailwind](https://github.com/PylotLight/wails-hmtx-templ-template) - インタラクティビティを実現するためのピュアなhtmxに、コンポーネントおよびフォームを作成するためのテンプレートが合わさったテンプレート + ## ピュアJavaScript (バニラ) - [wails-pure-js-template](https://github.com/KiddoV/wails-pure-js-template) - 基本的なJavaScript、HTML、CSSのみを含むテンプレート diff --git a/website/i18n/ja/docusaurus-plugin-content-docs/current/guides/crossplatform-build.mdx b/website/i18n/ja/docusaurus-plugin-content-docs/current/guides/crossplatform-build.mdx new file mode 100644 index 00000000000..fd81a974d04 --- /dev/null +++ b/website/i18n/ja/docusaurus-plugin-content-docs/current/guides/crossplatform-build.mdx @@ -0,0 +1,66 @@ +# Crossplatform build with 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. + +An action that facilitates building a Wails app is available at: +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: +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: + +```yaml +name: Wails build + +on: + push: + tags: + # Match any new tag + - '*' + +env: + # Necessary for most environments as build failure can occur due to OOM issues + NODE_OPTIONS: "--max-old-space-size=4096" + +jobs: + build: + strategy: + # Failure in one platform build won't impact the others + fail-fast: false + matrix: + build: + - name: 'App' + platform: 'linux/amd64' + os: 'ubuntu-latest' + - name: 'App' + platform: 'windows/amd64' + os: 'windows-latest' + - name: 'App' + platform: 'darwin/universal' + os: 'macos-latest' + + runs-on: ${{ matrix.build.os }} + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + submodules: recursive + + - name: Build wails + uses: dAppServer/wails-build-action@v2.2 + id: build + with: + build-name: ${{ matrix.build.name }} + build-platform: ${{ matrix.build.platform }} + package: false + go-version: '1.20' +``` + +This example offers opportunities for various enhancements, including: + +- Caching dependencies +- Code signing +- Uploading to platforms like S3, Supbase, etc. +- Injecting secrets as environment variables +- Utilizing environment variables as build variables (such as version variable extracted from the current Git tag) diff --git a/website/i18n/ja/docusaurus-plugin-content-docs/current/guides/file-association.mdx b/website/i18n/ja/docusaurus-plugin-content-docs/current/guides/file-association.mdx new file mode 100644 index 00000000000..b10c66bb373 --- /dev/null +++ b/website/i18n/ja/docusaurus-plugin-content-docs/current/guides/file-association.mdx @@ -0,0 +1,199 @@ +# File Association + +File association feature allows you to associate specific file types with your app so that when users open those files, +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: + +To set up file association, you need to modify your application's wails.json file. +In "info" section add a "fileAssociations" section specifying the file types your app should be associated with. + +For example: + +```json +{ + "info": { + "fileAssociations": [ + { + "ext": "wails", + "name": "Wails", + "description": "Wails Application File", + "iconName": "wailsFileIcon", + "role": "Editor" + }, + { + "ext": "jpg", + "name": "JPEG", + "description": "Image File", + "iconName": "jpegFileIcon", + "role": "Editor" + } + ] + } +} +``` + +| Property | Description | +| :---------- | :------------------------------------------------------------------------------------------------------------------------------------------------- | +| ext | The extension (minus the leading period). e.g. png | +| name | The name. e.g. PNG File | +| 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 | +| description | Windows-only. The description. It is displayed on the `Type` column on Windows Explorer. | +| role | macOS-only. The app’s role with respect to the type. Corresponds to CFBundleTypeRole. | + +## Platform Specifics: + +### 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: + +```go title="main.go" +func main() { + // Create application with options + err := wails.Run(&options.App{ + Title: "wails-open-file", + Width: 1024, + Height: 768, + AssetServer: &assetserver.Options{ + Assets: assets, + }, + BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1}, + Mac: &mac.Options{ + OnFileOpen: func(filePaths []string) { println(filestring) }, + }, + Bind: []interface{}{ + app, + }, + }) + + if err != nil { + println("Error:", err.Error()) + } +} +``` + +### Windows + +On Windows file association is supported only with NSIS installer. During installation, the installer will create a +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" +func main() { + argsWithoutProg := os.Args[1:] + + if len(argsWithoutProg) != 0 { + println("launchArgs", argsWithoutProg) + } +} +``` + +### Linux + +Currently, Wails doesn't support bundling for Linux. So, you need to create file associations manually. +For example if you distribute your app as a .deb package, you can create file associations by adding required files in you bundle. +You can use [nfpm](https://nfpm.goreleaser.com/) to create .deb package for your app. + +1. Create a .desktop file for your app and specify file associations there. Example: + +```ini +[Desktop Entry] +Categories=Office +Exec=/usr/bin/wails-open-file %u +Icon=wails-open-file.png +Name=wails-open-file +Terminal=false +Type=Application +MimeType=application/x-wails;application/x-test +``` + +2. Create mime types file. Example: + +```xml + + + + Wails Application File + + + +``` + +3. Create icons for your file types. SVG icons are recommended. +4. Prepare postInstall/postRemove scripts for your package. Example: + +```sh +# reload mime types to register file associations +update-mime-database /usr/share/mime +# reload desktop database to load app in list of available +update-desktop-database /usr/share/applications +# update icons +update-icon-caches /usr/share/icons/* +``` + +5. Configure nfpm to use your scripts and files. Example: + +```yaml +name: "wails-open-file" +arch: "arm64" +platform: "linux" +version: "1.0.0" +section: "default" +priority: "extra" +maintainer: "FooBarCorp " +description: "Sample Package" +vendor: "FooBarCorp" +homepage: "http://example.com" +license: "MIT" +contents: +- src: ../bin/wails-open-file + dst: /usr/bin/wails-open-file +- src: ./main.desktop + dst: /usr/share/applications/wails-open-file.desktop +- src: ./application-wails-mime.xml + dst: /usr/share/mime/packages/application-x-wails.xml +- src: ./application-test-mime.xml + dst: /usr/share/mime/packages/application-x-test.xml +- src: ../appicon.svg + dst: /usr/share/icons/hicolor/scalable/apps/wails-open-file.svg +- src: ../wailsFileIcon.svg + dst: /usr/share/icons/hicolor/scalable/mimetypes/application-x-wails.svg +- src: ../testFileIcon.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 +- src: ../appicon.svg + dst: /usr/share/icons/Yaru/scalable/apps/wails-open-file.svg +- src: ../wailsFileIcon.svg + dst: /usr/share/icons/Yaru/scalable/mimetypes/application-x-wails.svg +- src: ../testFileIcon.svg + dst: /usr/share/icons/Yaru/scalable/mimetypes/application-x-test.svg +scripts: + postinstall: ./postInstall.sh + postremove: ./postRemove.sh +``` + +6. Build your .deb package using nfpm: + +```sh +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, + 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" +func main() { + argsWithoutProg := os.Args[1:] + + if len(argsWithoutProg) != 0 { + println("launchArgs", argsWithoutProg) + } +} +``` + +## Limitations: + +On Windows and Linux when associated file is opened, new instance of your app is launched. +Currently, Wails doesn't support opening files in already running app. There is plugin for single instance support for v3 in development. diff --git a/website/i18n/ja/docusaurus-plugin-content-docs/current/guides/troubleshooting.mdx b/website/i18n/ja/docusaurus-plugin-content-docs/current/guides/troubleshooting.mdx index 0746f225c8c..eb93618657c 100644 --- a/website/i18n/ja/docusaurus-plugin-content-docs/current/guides/troubleshooting.mdx +++ b/website/i18n/ja/docusaurus-plugin-content-docs/current/guides/troubleshooting.mdx @@ -159,6 +159,28 @@ XCodeコマンドラインツールの再インストールが引き続き失敗 出典: https://github.com/wailsapp/wails/issues/1806 および https://github.com/wailsapp/wails/issues/1140#issuecomment-1290446496 +## My application won't compile on Mac + +次のようなエラーが発生する場合: + +```shell +l1@m2 GoEasyDesigner % go build -tags dev -gcflags "all=-N -l" +/Users/l1/sdk/go1.20.5/pkg/tool/darwin_arm64/link: running clang failed: exit status 1 +Undefined symbols for architecture arm64: + "_OBJC_CLASS_$_UTType", referenced from: + objc-class-ref in 000016.o +ld: symbol(s) not found for architecture arm64 +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: + +```shell +export CGO_LDFLAGS="-framework UniformTypeIdentifiers" && go build -tags dev -gcflags "all=-N -l" +``` + +Sources: 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" @@ -185,4 +207,162 @@ This is due to the default background of the webview being white. If you want to WebviewIsTransparent: true, }, }) -``` \ No newline at end of file +``` + +## I get a "Microsoft Edge can't read or write to its data directory" error when running my program as admin on Windows + +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. + +When a Windows machine has two local accounts: + +- Alice, an admin +- Bob, a regular user + +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. + +Wails instructs WebView2 to store user data at the specified `WebviewUserDataPath`. It defaults to `%APPDATA%\[BinaryName.exe]`. + +Because the application is running under Alice's account, `%APPDATA%\[BinaryName.exe]` resolves to `C:\Users\Alice\AppData\Roaming\[BinaryName.exe]`. + +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. + +Possible solution #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: + +```go +//go:build windows + +package sample + +import ( + "golang.org/x/sys/windows" + "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. +func RunAs(path string) error { + verbPtr, _ := syscall.UTF16PtrFromString("runas") + exePtr, _ := syscall.UTF16PtrFromString(path) + cwdPtr, _ := syscall.UTF16PtrFromString("") + argPtr, _ := syscall.UTF16PtrFromString("") + + var showCmd int32 = 1 //SW_NORMAL + + err := windows.ShellExecute(0, verbPtr, exePtr, argPtr, cwdPtr, showCmd) + if err != nil { + return err + } + return nil +} +``` + +Possible solution #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: + +```go +package main + +import ( + "embed" + "os" + "runtime" + + "github.com/fourcorelabs/wintoken" + "github.com/hectane/go-acl" + "github.com/wailsapp/wails/v2" + "github.com/wailsapp/wails/v2/pkg/options" + "github.com/wailsapp/wails/v2/pkg/options/assetserver" + "github.com/wailsapp/wails/v2/pkg/options/windows" +) + +//go:embed all:frontend/dist +var assets embed.FS + +const ( + fixedTokenKey = "SAMPLE_RANDOM_KEY" + fixedTokenVal = "with-fixed-token" + webviewDir = "C:\\ProgramData\\Sample" +) + +func runWithFixedToken() { + println("Re-launching self") + token, err := wintoken.OpenProcessToken(0, wintoken.TokenPrimary) //pass 0 for own process + if err != nil { + panic(err) + } + defer token.Close() + + token.EnableTokenPrivileges([]string{ + "SeBackupPrivilege", + "SeDebugPrivilege", + "SeRestorePrivilege", + }) + + cmd := exec.Command(os.Args[0]) + cmd.Args = os.Args + cmd.Env = os.Environ() + cmd.Env = append(cmd.Env, fmt.Sprintf("%v=%v", fixedTokenKey, fixedTokenVal)) + cmd.Stdin = os.Stdin + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + cmd.SysProcAttr = &syscall.SysProcAttr{Token: syscall.Token(token.Token())} + if err := cmd.Run(); err != nil { + println("Error after launching self:", err) + os.Exit(1) + } + println("Clean self launch :)") + os.Exit(0) +} + +func main() { + if runtime.GOOS == "windows" && os.Getenv(fixedTokenKey) != fixedTokenVal { + runWithFixedToken() + } + + println("Setting data dir to", webviewDir) + if err := os.MkdirAll(webviewDir, os.ModePerm); err != nil { + println("Failed creating dir:", err) + } + if err := acl.Chmod(webviewDir, 0777); err != nil { + println("Failed setting ACL on dir:", err) + } + + app := NewApp() + + err := wails.Run(&options.App{ + Title: "sample-data-dir", + Width: 1024, + Height: 768, + AssetServer: &assetserver.Options{ + Assets: assets, + }, + Bind: []interface{}{ + app, + }, + Windows: &windows.Options{ + WebviewUserDataPath: webviewDir, + }, + }) + + if err != nil { + println("Error:", err.Error()) + } +} +``` + +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. + +Possible future solution #3: [run WebView2 using an in-memory mode if implemented](https://github.com/MicrosoftEdge/WebView2Feedback/issues/3637#issuecomment-1728300982). + +## WebView2 installation succeeded, but the wails doctor command shows that it is not installed + +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/). + +Source: https://github.com/wailsapp/wails/issues/2917 + +## 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). + diff --git a/website/i18n/ja/docusaurus-plugin-content-docs/current/reference/cli.mdx b/website/i18n/ja/docusaurus-plugin-content-docs/current/reference/cli.mdx index 6c83ddd938d..3a7ff0a1ae5 100644 --- a/website/i18n/ja/docusaurus-plugin-content-docs/current/reference/cli.mdx +++ b/website/i18n/ja/docusaurus-plugin-content-docs/current/reference/cli.mdx @@ -49,35 +49,35 @@ WailsではGitHubでホストされているリモートテンプレートをサ `wails build`は、プロジェクトを本番配布用のバイナリにコンパイルするときに使用します。 -| フラグ | 説明 | デフォルト | -|:-------------------- |:-------------------------------------------------------------------------------------------------------------------------------- |:--------------------------------------------------------------------------------------------------------------------------------------------------- | -| -clean | `build/bin`ディレクトリをクリーンする | | -| -compiler "compiler" | 違うGoコンパイラを使用する。例: go1.15beta1 | go | -| -debug | アプリケーションのデバッグ情報を保持し、デバッグコンソールを表示する。 これにより、アプリケーションウィンドウで開発者ツールを使用することを許可できます。 | | -| -devtools | 本番用のアプリケーションウィンドウにおいて開発者ツールの使用を許可する (-debugが使用されていないとき) | | -| -dryrun | 実際には実行せずにbuildコマンドの結果を表示する | | -| -f | アプリケーションを強制的にビルド | | -| -garbleargs | garbleへ渡す引数 | `-literals -tiny -seed=random` | -| -ldflags "flags" | コンパイラに渡す追加のldflags | | -| -m | コンパイル前のmod tidyの実行をスキップする | | -| -nopackage | アプリケーションをパッケージ化しない | | -| -nocolour | 出力文字に色をつけない | | -| -nosyncgomod | go.modとWailsのバージョンを同期させない | | -| -nsis | Windows向けのNSISインストーラを生成する | | -| -o filename | 出力ファイル名 | | -| -obfuscated | [garble](https://github.com/burrowers/garble)を使用してアプリケーションを難読化する | | -| -platform | 指定された[プラットフォーム](../reference/cli.mdx#platforms)(カンマ区切り) 向けにビルドする。例: `windows/arm64`。 アーキテクチャを指定しない場合は、`runtime.GOARCH`の値が使用されます。 | platform = `GOOS` environment variable if given else `runtime.GOOS`.
arch = `GOARCH` envrionment variable if given else `runtime.GOARCH`. | -| -race | Goのrace detectorを使用してビルドする | | -| -s | フロントエンドのビルドをスキップ | | -| -skipbindings | バインディングの生成をスキップする | | -| -tags "extra tags" | Goコンパイラに渡すビルドタグ。 値は引用符で囲んでください。 また、スペースまたはカンマで区切ってください(両方は使用しないでください)。 | | -| -trimpath | 実行可能ファイルから、すべてのファイルシステムパスを削除する | | -| -u | プロジェクトの`go.mod`を更新し、CLIと同じバージョンのWailsを使用する | | -| -upx | "upx"を使用して最終的にバイナリを圧縮する | | -| -upxflags | upxに渡すフラグ | | -| -v int | 詳細度レベル (0 - サイレント, 1 - デフォルト, 2 - 詳細) | 1 | -| -webview2 | WebView2インストーラーのストラテジ: download,embed,browser,error | download | -| -windowsconsole | Windiws向けビルドでコンソールウィンドウを維持する | | +| フラグ | 説明 | デフォルト | +|:-------------------- |:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |:--------------------------------------------------------------------------------------------------------------------------------------------------- | +| -clean | `build/bin`ディレクトリをクリーンする | | +| -compiler "compiler" | 違うGoコンパイラを使用する。例: go1.15beta1 | go | +| -debug | アプリケーションのデバッグ情報を保持し、デバッグコンソールを表示する。 これにより、アプリケーションウィンドウで開発者ツールを使用することを許可できます。 | | +| -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. | | +| -dryrun | 実際には実行せずにbuildコマンドの結果を表示する | | +| -f | アプリケーションを強制的にビルド | | +| -garbleargs | garbleへ渡す引数 | `-literals -tiny -seed=random` | +| -ldflags "flags" | コンパイラに渡す追加のldflags | | +| -m | コンパイル前のmod tidyの実行をスキップする | | +| -nopackage | アプリケーションをパッケージ化しない | | +| -nocolour | 出力文字に色をつけない | | +| -nosyncgomod | go.modとWailsのバージョンを同期させない | | +| -nsis | Windows向けのNSISインストーラを生成する | | +| -o filename | 出力ファイル名 | | +| -obfuscated | [garble](https://github.com/burrowers/garble)を使用してアプリケーションを難読化する | | +| -platform | 指定された[プラットフォーム](../reference/cli.mdx#platforms)(カンマ区切り) 向けにビルドする。例: `windows/arm64`。 アーキテクチャを指定しない場合は、`runtime.GOARCH`の値が使用されます。 | platform = `GOOS` environment variable if given else `runtime.GOOS`.
arch = `GOARCH` envrionment variable if given else `runtime.GOARCH`. | +| -race | Goのrace detectorを使用してビルドする | | +| -s | フロントエンドのビルドをスキップ | | +| -skipbindings | バインディングの生成をスキップする | | +| -tags "extra tags" | Goコンパイラに渡すビルドタグ。 値は引用符で囲んでください。 また、スペースまたはカンマで区切ってください(両方は使用しないでください)。 | | +| -trimpath | 実行可能ファイルから、すべてのファイルシステムパスを削除する | | +| -u | プロジェクトの`go.mod`を更新し、CLIと同じバージョンのWailsを使用する | | +| -upx | "upx"を使用して最終的にバイナリを圧縮する | | +| -upxflags | upxに渡すフラグ | | +| -v int | 詳細度レベル (0 - サイレント, 1 - デフォルト, 2 - 詳細) | 1 | +| -webview2 | WebView2インストーラーのストラテジ: download,embed,browser,error | download | +| -windowsconsole | Windiws向けビルドでコンソールウィンドウを維持する | | `webview2`フラグの詳細については、[Windows](../guides/windows.mdx)ガイドをご覧ください。 @@ -166,8 +166,8 @@ Your system is ready for Wails development! - `http://localhost:34115`でWebサーバが起動し、HTTP経由でアプリケーション(フロントエンドだけではありません)が提供されます。 これにより、任意のブラウザ拡張機能を使用することができます - すべてのアプリケーションアセットはディスクから読み込まれます。 アセットが変更された場合、アプリケーションは自動的に、リビルドではなくリロードされます。 接続されているすべてのブラウザもリロードされます - 以下のものを含むJSモジュールが生成されます: - - GoメソッドのJavaScriptラッパー (コードヒントに有用なJSDocも自動付与されています) - - Goの構造体のTypeScriptバージョン (構造体のインスタンスを生成したり、Goメソッドの引数として渡したりすることができます) +- GoメソッドのJavaScriptラッパー (コードヒントに有用なJSDocも自動付与されています) +- Goの構造体のTypeScriptバージョン (構造体のインスタンスを生成したり、Goメソッドの引数として渡したりすることができます) - 別のJSモジュールとして、ランタイムのラッパーおよびTS定義も生成されます - macOSの場合、アプリケーションは`.app`ファイルにバンドルされて実行されます。 これには、開発用の`build/darwin/Info.dev.plist`を使用します。 diff --git a/website/i18n/ja/docusaurus-plugin-content-docs/current/reference/options.mdx b/website/i18n/ja/docusaurus-plugin-content-docs/current/reference/options.mdx index 8f9a73bb97e..2f53915a0ea 100644 --- a/website/i18n/ja/docusaurus-plugin-content-docs/current/reference/options.mdx +++ b/website/i18n/ja/docusaurus-plugin-content-docs/current/reference/options.mdx @@ -366,7 +366,7 @@ func (b *App) beforeClose(ctx context.Context) (prevent bool) { EnableDefaultContextMenuは、本番環境において、ブラウザのデフォルトコンテキストメニューを有効にします。 -通常、ブラウザのデフォルトコンテキストメニューは、開発環境での動作時、または`-debug`・`-devtools`フラグをつけて開発者ツールを有効にして[ビルド](../reference/cli.mdx#build)したときのみ利用できますが、本オプションを使うと、`-devtools`フラグをつけない限り開発者ツールは使用できませんが、`本番`環境でもコンテキストメニューを有効にすることができます。 +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. このオプションを有効にすると、デフォルトでは、テキストに関するコンテキスト(切り取り/コピー/貼り付け) のみがコンテキストメニューに表示されます。この動作をオーバーライドするには、`--default-contextmenu`というCSSプロパティを任意のHTML要素(`body`含む) で以下の値と共に使用してください: @@ -593,6 +593,12 @@ Windowsがローパワーモード(サスペンド/休止状態) から復帰し 名前: WebviewGpuIsDisabled
データ型: `bool` +#### EnableSwipeGestures + +Setting this to `true` will enable swipe gestures for the webview. + +Name: EnableSwipeGestures
Type: `bool` + ### Mac [Mac固有のオプション](#mac)を定義します。 @@ -688,6 +694,42 @@ Mac: &mac.Options{ 名前: WindowIsTranslucent
データ型: `bool` +#### Preferences + +The Preferences struct provides the ability to configure the Webview preferences. + +Name: Preferences
Type: [`*mac.Preferences`](#preferences-struct) + +##### Preferences struct + +You can specify the webview preferences. + +```go +type Preferences struct { + TabFocusesLinks u.Bool + TextInteractionEnabled u.Bool + FullscreenEnabled u.Bool +} +``` + +| 名前 | 説明 | +| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 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) | +| 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) | +| 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) | + +例: + +```go +Mac: &mac.Options{ + Preferences: &mac.Preferences{ + TabFocusesLinks: mac.Enabled, + TextInteractionEnabled: mac.Disabled, + FullscreenEnabled: mac.Enabled, + } +} +``` + #### About "AppMenu"ロールで作成されたアプリケーションメニューの中にある"About"メニュー項目において、タイトル、メッセージ、アイコンを設定できます。 diff --git a/website/i18n/ja/docusaurus-plugin-content-docs/current/reference/runtime/window.mdx b/website/i18n/ja/docusaurus-plugin-content-docs/current/reference/runtime/window.mdx index d506cce7c83..ea6dd358d5b 100644 --- a/website/i18n/ja/docusaurus-plugin-content-docs/current/reference/runtime/window.mdx +++ b/website/i18n/ja/docusaurus-plugin-content-docs/current/reference/runtime/window.mdx @@ -202,7 +202,7 @@ Go: `WindowSetBackgroundColour(ctx context.Context, R, G, B, A uint8)`
JS: ### WindowPrint -Opens tha native print dialog. +ネイティブな印刷ダイアログを開きます。 Go: `WindowPrint(ctx context.Context)`
JS: `WindowPrint()` diff --git a/website/i18n/ja/docusaurus-plugin-content-docs/version-v2.6.0.json b/website/i18n/ja/docusaurus-plugin-content-docs/version-v2.6.0.json index a75900f45a1..3d895d3ebe5 100644 --- a/website/i18n/ja/docusaurus-plugin-content-docs/version-v2.6.0.json +++ b/website/i18n/ja/docusaurus-plugin-content-docs/version-v2.6.0.json @@ -4,35 +4,35 @@ "description": "The label for version v2.6.0" }, "sidebar.docs.category.Getting Started": { - "message": "Getting Started", + "message": "はじめよう", "description": "The label for category Getting Started in sidebar docs" }, "sidebar.docs.category.Reference": { - "message": "Reference", + "message": "リファレンス", "description": "The label for category Reference in sidebar docs" }, "sidebar.docs.category.Runtime": { - "message": "Runtime", + "message": "ランタイム", "description": "The label for category Runtime in sidebar docs" }, "sidebar.docs.category.Community": { - "message": "Community", + "message": "コミュニティ", "description": "The label for category Community in sidebar docs" }, "sidebar.docs.category.Showcase": { - "message": "Showcase", + "message": "事例紹介", "description": "The label for category Showcase in sidebar docs" }, "sidebar.docs.category.Guides": { - "message": "Guides", + "message": "ガイド", "description": "The label for category Guides in sidebar docs" }, "sidebar.docs.category.Tutorials": { - "message": "Tutorials", + "message": "チュートリアル", "description": "The label for category Tutorials in sidebar docs" }, "sidebar.docs.link.Contributing": { - "message": "Contributing", + "message": "コントリビューション", "description": "The label for link Contributing in sidebar docs, linking to /community-guide#ways-of-contributing" } } diff --git a/website/i18n/ja/docusaurus-plugin-content-pages/changelog.mdx b/website/i18n/ja/docusaurus-plugin-content-pages/changelog.mdx index 3cda7c1c716..5828a733f3a 100644 --- a/website/i18n/ja/docusaurus-plugin-content-pages/changelog.mdx +++ b/website/i18n/ja/docusaurus-plugin-content-pages/changelog.mdx @@ -13,6 +13,28 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ## [Unreleased] +### Added + +- Added support for enabling/disabling swipe gestures for Windows WebView2. Added by @leaanthony in [PR](https://github.com/wailsapp/wails/pull/2878) +- When building with `-devtools` flag, CMD/CTRL+SHIFT+F12 can be used to open the devtools. Added by @leaanthony in [PR](https://github.com/wailsapp/wails/pull/2915) – Added file association support for macOS and Windows. Added by @APshenkin in [PR](https://github.com/wailsapp/wails/pull/2918) +- Added support for setting some of the Webview preferences, `textInteractionEnabled` and `tabFocusesLinks` on Mac. Added by @fkhadra in [PR](https://github.com/wailsapp/wails/pull/2937) +- Added support for enabling/disabling fullscreen of the Webview on Mac. Added by @fkhadra in [PR](https://github.com/wailsapp/wails/pull/2953) +- Added French README.fr.md page. Added by @nejos97 in [PR](https://github.com/wailsapp/wails/pull/2943) +- New task created for linting v2 `task v2:lint`. Workflow updated to run the task. Added by @mikeee in [PR](https://github.com/wailsapp/wails/pull/2957) +- Added new community template wails-htmx-templ-chi-tailwind. Added by [@pylotlight](https://github.com/pylotlight) in [PR](https://github.com/wailsapp/wails/pull/2984) +- Added CPU/GPU/Memory detection for `wails doctor`. Added by @leaanthony in #d51268b8d0680430f3a614775b13e6cd2b906d1c + +### Changed + +- AssetServer requests are now processed asynchronously without blocking the main thread on Windows. Changed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2926) +- AssetServer requests are now processed concurrently by spawning a goroutine per request. Changed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2926) +- Now building with `-devtools` flag doesn't enable the default context-menu. Changed by @mmghv in [PR](https://github.com/wailsapp/wails/pull/2923) +- Change Window Level. Changed by @almas1992 in [PR](https://github.com/wailsapp/wails/pull/2944) +#### Fixed + +- Fixed typo on docs/reference/options page. Added by [@pylotlight](https://github.com/pylotlight) in [PR](https://github.com/wailsapp/wails/pull/2887) +- Fixed issue with npm being called npm20 on openSUSE-Tumbleweed. Fixed by @TuffenDuffen in [PR] in (https://github.com/wailsapp/wails/pull/2941) + ## v2.6.0 - 2023-09-06 ### Breaking Changes @@ -27,6 +49,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - Fixed `SetBackgroundColour` so it sets the window's background color to reduce resize flickering on Linux. Added by @lyimmi in [PR](https://github.com/wailsapp/wails/pull/2853) - Fixed disable window resize option and wrong initial window size when its enabled. Added by @lyimmi in [PR](https://github.com/wailsapp/wails/pull/2863) - Fixed build hook command parsing. Added by @smac89 in [PR](https://github.com/wailsapp/wails/pull/2836) +- Fixed filesystem watcher from filtering top level project directory if binary name is included in .gitignore. Added by [@haukened](https://github.com/haukened) in [PR #2869](https://github.com/wailsapp/wails/pull/2869) - Fixed `-reloaddir` flag to watch additional directories (non-recursively). [@haukened](https://github.com/haukened) in [PR #2871](https://github.com/wailsapp/wails/pull/2871) - Fixed support for Go 1.21 `go.mod` files. Fixed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2876) @@ -44,6 +67,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - Added new community template wails-sveltekit-tailwind. Added by [@pylotlight](https://github.com/pylotlight) in [PR](https://github.com/wailsapp/wails/pull/2851) - Added support for print dialogs. Added by [@aangelisc](https://github.com/aangelisc) in [PR](https://github.com/wailsapp/wails/pull/2822) - Added new `wails dev -nogorebuild` flag to prevent restarts on back end file changes. [@haukened](https://github.com/haukened) in [PR #2870](https://github.com/wailsapp/wails/pull/2870) +- Added a guide to describe a cross-platform build using GitHub Actions. Added by [@dennypenta](https://github.com/dennypenta) in [PR](https://github.com/wailsapp/wails/pull/2879) ### Changed @@ -680,9 +704,6 @@ Experimental: &options.Experimental{ - [v2, nsis] Seems like / as path separator works only for some directives in a cross platform way by [@stffabi](https://github.com/stffabi) in #1227 - import models on binding definition by [@adalessa](https://github.com/adalessa) in #123 - - 1 - - Use local search on website by [@leaanthony](https://github.com/leaanthony) in #1234 - Ensure binary resources can be served by [@napalu](https://github.com/napalu) in #1240 - Only retry loading assets when loading from disk by [@leaanthony](https://github.com/leaanthony) in #1241 diff --git a/website/i18n/ko/docusaurus-plugin-content-docs/current/community/templates.mdx b/website/i18n/ko/docusaurus-plugin-content-docs/current/community/templates.mdx index 3e000705ff4..6ecbac37ee8 100644 --- a/website/i18n/ko/docusaurus-plugin-content-docs/current/community/templates.mdx +++ b/website/i18n/ko/docusaurus-plugin-content-docs/current/community/templates.mdx @@ -60,6 +60,10 @@ If you are unsure about a template, inspect `package.json` and `wails.json` for - [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-template-elm-tailwind](https://github.com/rnice01/wails-template-elm-tailwind) - Combine the powers :muscle: of Elm + Tailwind CSS + Wails! Hot reloading supported. +## 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 + ## Pure 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 diff --git a/website/i18n/ko/docusaurus-plugin-content-docs/current/guides/crossplatform-build.mdx b/website/i18n/ko/docusaurus-plugin-content-docs/current/guides/crossplatform-build.mdx new file mode 100644 index 00000000000..fd81a974d04 --- /dev/null +++ b/website/i18n/ko/docusaurus-plugin-content-docs/current/guides/crossplatform-build.mdx @@ -0,0 +1,66 @@ +# Crossplatform build with 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. + +An action that facilitates building a Wails app is available at: +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: +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: + +```yaml +name: Wails build + +on: + push: + tags: + # Match any new tag + - '*' + +env: + # Necessary for most environments as build failure can occur due to OOM issues + NODE_OPTIONS: "--max-old-space-size=4096" + +jobs: + build: + strategy: + # Failure in one platform build won't impact the others + fail-fast: false + matrix: + build: + - name: 'App' + platform: 'linux/amd64' + os: 'ubuntu-latest' + - name: 'App' + platform: 'windows/amd64' + os: 'windows-latest' + - name: 'App' + platform: 'darwin/universal' + os: 'macos-latest' + + runs-on: ${{ matrix.build.os }} + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + submodules: recursive + + - name: Build wails + uses: dAppServer/wails-build-action@v2.2 + id: build + with: + build-name: ${{ matrix.build.name }} + build-platform: ${{ matrix.build.platform }} + package: false + go-version: '1.20' +``` + +This example offers opportunities for various enhancements, including: + +- Caching dependencies +- Code signing +- Uploading to platforms like S3, Supbase, etc. +- Injecting secrets as environment variables +- Utilizing environment variables as build variables (such as version variable extracted from the current Git tag) diff --git a/website/i18n/ko/docusaurus-plugin-content-docs/current/guides/file-association.mdx b/website/i18n/ko/docusaurus-plugin-content-docs/current/guides/file-association.mdx new file mode 100644 index 00000000000..b10c66bb373 --- /dev/null +++ b/website/i18n/ko/docusaurus-plugin-content-docs/current/guides/file-association.mdx @@ -0,0 +1,199 @@ +# File Association + +File association feature allows you to associate specific file types with your app so that when users open those files, +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: + +To set up file association, you need to modify your application's wails.json file. +In "info" section add a "fileAssociations" section specifying the file types your app should be associated with. + +For example: + +```json +{ + "info": { + "fileAssociations": [ + { + "ext": "wails", + "name": "Wails", + "description": "Wails Application File", + "iconName": "wailsFileIcon", + "role": "Editor" + }, + { + "ext": "jpg", + "name": "JPEG", + "description": "Image File", + "iconName": "jpegFileIcon", + "role": "Editor" + } + ] + } +} +``` + +| Property | Description | +| :---------- | :------------------------------------------------------------------------------------------------------------------------------------------------- | +| ext | The extension (minus the leading period). e.g. png | +| name | The name. e.g. PNG File | +| 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 | +| description | Windows-only. The description. It is displayed on the `Type` column on Windows Explorer. | +| role | macOS-only. The app’s role with respect to the type. Corresponds to CFBundleTypeRole. | + +## Platform Specifics: + +### 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: + +```go title="main.go" +func main() { + // Create application with options + err := wails.Run(&options.App{ + Title: "wails-open-file", + Width: 1024, + Height: 768, + AssetServer: &assetserver.Options{ + Assets: assets, + }, + BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1}, + Mac: &mac.Options{ + OnFileOpen: func(filePaths []string) { println(filestring) }, + }, + Bind: []interface{}{ + app, + }, + }) + + if err != nil { + println("Error:", err.Error()) + } +} +``` + +### Windows + +On Windows file association is supported only with NSIS installer. During installation, the installer will create a +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" +func main() { + argsWithoutProg := os.Args[1:] + + if len(argsWithoutProg) != 0 { + println("launchArgs", argsWithoutProg) + } +} +``` + +### Linux + +Currently, Wails doesn't support bundling for Linux. So, you need to create file associations manually. +For example if you distribute your app as a .deb package, you can create file associations by adding required files in you bundle. +You can use [nfpm](https://nfpm.goreleaser.com/) to create .deb package for your app. + +1. Create a .desktop file for your app and specify file associations there. Example: + +```ini +[Desktop Entry] +Categories=Office +Exec=/usr/bin/wails-open-file %u +Icon=wails-open-file.png +Name=wails-open-file +Terminal=false +Type=Application +MimeType=application/x-wails;application/x-test +``` + +2. Create mime types file. Example: + +```xml + + + + Wails Application File + + + +``` + +3. Create icons for your file types. SVG icons are recommended. +4. Prepare postInstall/postRemove scripts for your package. Example: + +```sh +# reload mime types to register file associations +update-mime-database /usr/share/mime +# reload desktop database to load app in list of available +update-desktop-database /usr/share/applications +# update icons +update-icon-caches /usr/share/icons/* +``` + +5. Configure nfpm to use your scripts and files. Example: + +```yaml +name: "wails-open-file" +arch: "arm64" +platform: "linux" +version: "1.0.0" +section: "default" +priority: "extra" +maintainer: "FooBarCorp " +description: "Sample Package" +vendor: "FooBarCorp" +homepage: "http://example.com" +license: "MIT" +contents: +- src: ../bin/wails-open-file + dst: /usr/bin/wails-open-file +- src: ./main.desktop + dst: /usr/share/applications/wails-open-file.desktop +- src: ./application-wails-mime.xml + dst: /usr/share/mime/packages/application-x-wails.xml +- src: ./application-test-mime.xml + dst: /usr/share/mime/packages/application-x-test.xml +- src: ../appicon.svg + dst: /usr/share/icons/hicolor/scalable/apps/wails-open-file.svg +- src: ../wailsFileIcon.svg + dst: /usr/share/icons/hicolor/scalable/mimetypes/application-x-wails.svg +- src: ../testFileIcon.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 +- src: ../appicon.svg + dst: /usr/share/icons/Yaru/scalable/apps/wails-open-file.svg +- src: ../wailsFileIcon.svg + dst: /usr/share/icons/Yaru/scalable/mimetypes/application-x-wails.svg +- src: ../testFileIcon.svg + dst: /usr/share/icons/Yaru/scalable/mimetypes/application-x-test.svg +scripts: + postinstall: ./postInstall.sh + postremove: ./postRemove.sh +``` + +6. Build your .deb package using nfpm: + +```sh +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, + 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" +func main() { + argsWithoutProg := os.Args[1:] + + if len(argsWithoutProg) != 0 { + println("launchArgs", argsWithoutProg) + } +} +``` + +## Limitations: + +On Windows and Linux when associated file is opened, new instance of your app is launched. +Currently, Wails doesn't support opening files in already running app. There is plugin for single instance support for v3 in development. diff --git a/website/i18n/ko/docusaurus-plugin-content-docs/current/guides/troubleshooting.mdx b/website/i18n/ko/docusaurus-plugin-content-docs/current/guides/troubleshooting.mdx index 28482ac3dd9..2b5b7a25840 100644 --- a/website/i18n/ko/docusaurus-plugin-content-docs/current/guides/troubleshooting.mdx +++ b/website/i18n/ko/docusaurus-plugin-content-docs/current/guides/troubleshooting.mdx @@ -159,6 +159,28 @@ If `/Applications/Xcode.app/Contents/Developer` is displayed, run `sudo xcode-se Sources: https://github.com/wailsapp/wails/issues/1806 and https://github.com/wailsapp/wails/issues/1140#issuecomment-1290446496 +## My application won't compile on Mac + +If you are getting errors like this: + +```shell +l1@m2 GoEasyDesigner % go build -tags dev -gcflags "all=-N -l" +/Users/l1/sdk/go1.20.5/pkg/tool/darwin_arm64/link: running clang failed: exit status 1 +Undefined symbols for architecture arm64: + "_OBJC_CLASS_$_UTType", referenced from: + objc-class-ref in 000016.o +ld: symbol(s) not found for architecture arm64 +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: + +```shell +export CGO_LDFLAGS="-framework UniformTypeIdentifiers" && go build -tags dev -gcflags "all=-N -l" +``` + +Sources: 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" @@ -185,4 +207,162 @@ This is due to the default background of the webview being white. If you want to WebviewIsTransparent: true, }, }) -``` \ No newline at end of file +``` + +## I get a "Microsoft Edge can't read or write to its data directory" error when running my program as admin on Windows + +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. + +When a Windows machine has two local accounts: + +- Alice, an admin +- Bob, a regular user + +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. + +Wails instructs WebView2 to store user data at the specified `WebviewUserDataPath`. It defaults to `%APPDATA%\[BinaryName.exe]`. + +Because the application is running under Alice's account, `%APPDATA%\[BinaryName.exe]` resolves to `C:\Users\Alice\AppData\Roaming\[BinaryName.exe]`. + +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. + +Possible solution #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: + +```go +//go:build windows + +package sample + +import ( + "golang.org/x/sys/windows" + "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. +func RunAs(path string) error { + verbPtr, _ := syscall.UTF16PtrFromString("runas") + exePtr, _ := syscall.UTF16PtrFromString(path) + cwdPtr, _ := syscall.UTF16PtrFromString("") + argPtr, _ := syscall.UTF16PtrFromString("") + + var showCmd int32 = 1 //SW_NORMAL + + err := windows.ShellExecute(0, verbPtr, exePtr, argPtr, cwdPtr, showCmd) + if err != nil { + return err + } + return nil +} +``` + +Possible solution #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: + +```go +package main + +import ( + "embed" + "os" + "runtime" + + "github.com/fourcorelabs/wintoken" + "github.com/hectane/go-acl" + "github.com/wailsapp/wails/v2" + "github.com/wailsapp/wails/v2/pkg/options" + "github.com/wailsapp/wails/v2/pkg/options/assetserver" + "github.com/wailsapp/wails/v2/pkg/options/windows" +) + +//go:embed all:frontend/dist +var assets embed.FS + +const ( + fixedTokenKey = "SAMPLE_RANDOM_KEY" + fixedTokenVal = "with-fixed-token" + webviewDir = "C:\\ProgramData\\Sample" +) + +func runWithFixedToken() { + println("Re-launching self") + token, err := wintoken.OpenProcessToken(0, wintoken.TokenPrimary) //pass 0 for own process + if err != nil { + panic(err) + } + defer token.Close() + + token.EnableTokenPrivileges([]string{ + "SeBackupPrivilege", + "SeDebugPrivilege", + "SeRestorePrivilege", + }) + + cmd := exec.Command(os.Args[0]) + cmd.Args = os.Args + cmd.Env = os.Environ() + cmd.Env = append(cmd.Env, fmt.Sprintf("%v=%v", fixedTokenKey, fixedTokenVal)) + cmd.Stdin = os.Stdin + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + cmd.SysProcAttr = &syscall.SysProcAttr{Token: syscall.Token(token.Token())} + if err := cmd.Run(); err != nil { + println("Error after launching self:", err) + os.Exit(1) + } + println("Clean self launch :)") + os.Exit(0) +} + +func main() { + if runtime.GOOS == "windows" && os.Getenv(fixedTokenKey) != fixedTokenVal { + runWithFixedToken() + } + + println("Setting data dir to", webviewDir) + if err := os.MkdirAll(webviewDir, os.ModePerm); err != nil { + println("Failed creating dir:", err) + } + if err := acl.Chmod(webviewDir, 0777); err != nil { + println("Failed setting ACL on dir:", err) + } + + app := NewApp() + + err := wails.Run(&options.App{ + Title: "sample-data-dir", + Width: 1024, + Height: 768, + AssetServer: &assetserver.Options{ + Assets: assets, + }, + Bind: []interface{}{ + app, + }, + Windows: &windows.Options{ + WebviewUserDataPath: webviewDir, + }, + }) + + if err != nil { + println("Error:", err.Error()) + } +} +``` + +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. + +Possible future solution #3: [run WebView2 using an in-memory mode if implemented](https://github.com/MicrosoftEdge/WebView2Feedback/issues/3637#issuecomment-1728300982). + +## WebView2 installation succeeded, but the wails doctor command shows that it is not installed + +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/). + +Source: https://github.com/wailsapp/wails/issues/2917 + +## 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). + diff --git a/website/i18n/ko/docusaurus-plugin-content-docs/current/reference/cli.mdx b/website/i18n/ko/docusaurus-plugin-content-docs/current/reference/cli.mdx index a4817110fc8..c7aea10a64d 100644 --- a/website/i18n/ko/docusaurus-plugin-content-docs/current/reference/cli.mdx +++ b/website/i18n/ko/docusaurus-plugin-content-docs/current/reference/cli.mdx @@ -49,35 +49,35 @@ If you are unsure about a template, inspect `package.json` and `wails.json` for `wails build` is used for compiling your project to a production-ready binary. -| Flag | Description | Default | -|:-------------------- |:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |:--------------------------------------------------------------------------------------------------------------------------------------------------- | -| -clean | Cleans the `build/bin` directory | | -| -compiler "compiler" | Use a different go compiler to build, eg 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 | | -| -devtools | Allows the use of the devtools in the application window in production (when -debug is not used) | | -| -dryrun | Prints the build command without executing it | | -| -f | Force build application | | -| -garbleargs | Arguments to pass to garble | `-literals -tiny -seed=random` | -| -ldflags "flags" | Additional ldflags to pass to the compiler | | -| -m | Skip mod tidy before compile | | -| -nopackage | Do not package application | | -| -nocolour | Disable colour in output | | -| -nosyncgomod | Do not sync go.mod with the Wails version | | -| -nsis | Generate NSIS installer for Windows | | -| -o filename | Output filename | | -| -obfuscated | Obfuscate the application using [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`.
arch = `GOARCH` envrionment variable if given else `runtime.GOARCH`. | -| -race | Build with Go's race detector | | -| -s | Skip building the frontend | | -| -skipbindings | Skip bindings generation | | -| -tags "extra tags" | Build tags to pass to Go compiler. Must be quoted. Space or comma (but not both) separated | | -| -trimpath | Remove all file system paths from the resulting executable. | | -| -u | Updates your project's `go.mod` to use the same version of Wails as the CLI | | -| -upx | Compress final binary using "upx" | | -| -upxflags | Flags to pass to upx | | -| -v int | Verbosity level (0 - silent, 1 - default, 2 - verbose) | 1 | -| -webview2 | WebView2 installer strategy: download,embed,browser,error | download | -| -windowsconsole | Keep the console window for Windows builds | | +| Flag | Description | Default | +|:-------------------- |:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |:--------------------------------------------------------------------------------------------------------------------------------------------------- | +| -clean | Cleans the `build/bin` directory | | +| -compiler "compiler" | Use a different go compiler to build, eg 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 | | +| -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. | | +| -dryrun | Prints the build command without executing it | | +| -f | Force build application | | +| -garbleargs | Arguments to pass to garble | `-literals -tiny -seed=random` | +| -ldflags "flags" | Additional ldflags to pass to the compiler | | +| -m | Skip mod tidy before compile | | +| -nopackage | Do not package application | | +| -nocolour | Disable colour in output | | +| -nosyncgomod | Do not sync go.mod with the Wails version | | +| -nsis | Generate NSIS installer for Windows | | +| -o filename | Output filename | | +| -obfuscated | Obfuscate the application using [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`.
arch = `GOARCH` envrionment variable if given else `runtime.GOARCH`. | +| -race | Build with Go's race detector | | +| -s | Skip building the frontend | | +| -skipbindings | Skip bindings generation | | +| -tags "extra tags" | Build tags to pass to Go compiler. Must be quoted. Space or comma (but not both) separated | | +| -trimpath | Remove all file system paths from the resulting executable. | | +| -u | Updates your project's `go.mod` to use the same version of Wails as the CLI | | +| -upx | Compress final binary using "upx" | | +| -upxflags | Flags to pass to upx | | +| -v int | Verbosity level (0 - silent, 1 - default, 2 - verbose) | 1 | +| -webview2 | WebView2 installer strategy: download,embed,browser,error | download | +| -windowsconsole | Keep the console window for Windows builds | | For a detailed description of the `webview2` flag, please refer to the [Windows](../guides/windows.mdx) Guide. @@ -166,8 +166,8 @@ Your system is ready for Wails development! - 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 - All application assets are loaded from disk. If they are changed, the application will automatically reload (not rebuild). All connected browsers will also reload - A JS module is generated that provides the following: - - JavaScript wrappers of your Go methods with autogenerated JSDoc, providing code hinting - - TypeScript versions of your Go structs, that can be constructed and passed to your go methods +- JavaScript wrappers of your Go methods with autogenerated JSDoc, providing code hinting +- TypeScript versions of your Go structs, that can be constructed and passed to your go methods - A second JS module is generated that provides a wrapper + TS declaration for the runtime - 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. diff --git a/website/i18n/ko/docusaurus-plugin-content-docs/current/reference/options.mdx b/website/i18n/ko/docusaurus-plugin-content-docs/current/reference/options.mdx index e1bb970a127..46d1c071b60 100644 --- a/website/i18n/ko/docusaurus-plugin-content-docs/current/reference/options.mdx +++ b/website/i18n/ko/docusaurus-plugin-content-docs/current/reference/options.mdx @@ -366,7 +366,7 @@ Name: CSSDragValue
Type: `string` EnableDefaultContextMenu enables the browser's default context-menu in production. -By default, the browser's default context-menu is only available in development and in a `-debug` or `-devtools` [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. +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. 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 : @@ -593,6 +593,12 @@ Setting this to `true` will disable GPU hardware acceleration for the webview. Name: WebviewGpuIsDisabled
Type: `bool` +#### EnableSwipeGestures + +Setting this to `true` will enable swipe gestures for the webview. + +Name: EnableSwipeGestures
Type: `bool` + ### Mac This defines [Mac specific options](#mac). @@ -688,6 +694,42 @@ Setting this to `true` will make the window background translucent. Often combin Name: WindowIsTranslucent
Type: `bool` +#### Preferences + +The Preferences struct provides the ability to configure the Webview preferences. + +Name: Preferences
Type: [`*mac.Preferences`](#preferences-struct) + +##### Preferences struct + +You can specify the webview preferences. + +```go +type Preferences struct { + TabFocusesLinks u.Bool + TextInteractionEnabled u.Bool + FullscreenEnabled u.Bool +} +``` + +| Name | Description | +| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 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) | +| 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) | +| 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) | + +Example: + +```go +Mac: &mac.Options{ + Preferences: &mac.Preferences{ + TabFocusesLinks: mac.Enabled, + TextInteractionEnabled: mac.Disabled, + FullscreenEnabled: mac.Enabled, + } +} +``` + #### 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. diff --git a/website/i18n/ko/docusaurus-plugin-content-pages/changelog.mdx b/website/i18n/ko/docusaurus-plugin-content-pages/changelog.mdx index 1af17f00c29..c4f2e844564 100644 --- a/website/i18n/ko/docusaurus-plugin-content-pages/changelog.mdx +++ b/website/i18n/ko/docusaurus-plugin-content-pages/changelog.mdx @@ -13,6 +13,28 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ## [Unreleased] +### Added + +- Added support for enabling/disabling swipe gestures for Windows WebView2. Added by @leaanthony in [PR](https://github.com/wailsapp/wails/pull/2878) +- When building with `-devtools` flag, CMD/CTRL+SHIFT+F12 can be used to open the devtools. Added by @leaanthony in [PR](https://github.com/wailsapp/wails/pull/2915) – Added file association support for macOS and Windows. Added by @APshenkin in [PR](https://github.com/wailsapp/wails/pull/2918) +- Added support for setting some of the Webview preferences, `textInteractionEnabled` and `tabFocusesLinks` on Mac. Added by @fkhadra in [PR](https://github.com/wailsapp/wails/pull/2937) +- Added support for enabling/disabling fullscreen of the Webview on Mac. Added by @fkhadra in [PR](https://github.com/wailsapp/wails/pull/2953) +- Added French README.fr.md page. Added by @nejos97 in [PR](https://github.com/wailsapp/wails/pull/2943) +- New task created for linting v2 `task v2:lint`. Workflow updated to run the task. Added by @mikeee in [PR](https://github.com/wailsapp/wails/pull/2957) +- Added new community template wails-htmx-templ-chi-tailwind. Added by [@pylotlight](https://github.com/pylotlight) in [PR](https://github.com/wailsapp/wails/pull/2984) +- Added CPU/GPU/Memory detection for `wails doctor`. Added by @leaanthony in #d51268b8d0680430f3a614775b13e6cd2b906d1c + +### Changed + +- AssetServer requests are now processed asynchronously without blocking the main thread on Windows. Changed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2926) +- AssetServer requests are now processed concurrently by spawning a goroutine per request. Changed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2926) +- Now building with `-devtools` flag doesn't enable the default context-menu. Changed by @mmghv in [PR](https://github.com/wailsapp/wails/pull/2923) +- Change Window Level. Changed by @almas1992 in [PR](https://github.com/wailsapp/wails/pull/2944) +#### Fixed + +- Fixed typo on docs/reference/options page. Added by [@pylotlight](https://github.com/pylotlight) in [PR](https://github.com/wailsapp/wails/pull/2887) +- Fixed issue with npm being called npm20 on openSUSE-Tumbleweed. Fixed by @TuffenDuffen in [PR] in (https://github.com/wailsapp/wails/pull/2941) + ## v2.6.0 - 2023-09-06 ### Breaking Changes @@ -27,6 +49,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - Fixed `SetBackgroundColour` so it sets the window's background color to reduce resize flickering on Linux. Added by @lyimmi in [PR](https://github.com/wailsapp/wails/pull/2853) - Fixed disable window resize option and wrong initial window size when its enabled. Added by @lyimmi in [PR](https://github.com/wailsapp/wails/pull/2863) - Fixed build hook command parsing. Added by @smac89 in [PR](https://github.com/wailsapp/wails/pull/2836) +- Fixed filesystem watcher from filtering top level project directory if binary name is included in .gitignore. Added by [@haukened](https://github.com/haukened) in [PR #2869](https://github.com/wailsapp/wails/pull/2869) - Fixed `-reloaddir` flag to watch additional directories (non-recursively). [@haukened](https://github.com/haukened) in [PR #2871](https://github.com/wailsapp/wails/pull/2871) - Fixed support for Go 1.21 `go.mod` files. Fixed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2876) @@ -44,6 +67,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - Added new community template wails-sveltekit-tailwind. Added by [@pylotlight](https://github.com/pylotlight) in [PR](https://github.com/wailsapp/wails/pull/2851) - Added support for print dialogs. Added by [@aangelisc](https://github.com/aangelisc) in [PR](https://github.com/wailsapp/wails/pull/2822) - Added new `wails dev -nogorebuild` flag to prevent restarts on back end file changes. [@haukened](https://github.com/haukened) in [PR #2870](https://github.com/wailsapp/wails/pull/2870) +- Added a guide to describe a cross-platform build using GitHub Actions. Added by [@dennypenta](https://github.com/dennypenta) in [PR](https://github.com/wailsapp/wails/pull/2879) ### Changed @@ -680,9 +704,6 @@ Experimental: &options.Experimental{ - [v2, nsis] Seems like / as path separator works only for some directives in a cross platform way by [@stffabi](https://github.com/stffabi) in #1227 - import models on binding definition by [@adalessa](https://github.com/adalessa) in #123 - - 1 - - Use local search on website by [@leaanthony](https://github.com/leaanthony) in #1234 - Ensure binary resources can be served by [@napalu](https://github.com/napalu) in #1240 - Only retry loading assets when loading from disk by [@leaanthony](https://github.com/leaanthony) in #1241 diff --git a/website/i18n/pt/docusaurus-plugin-content-blog/2021-09-27-v2-beta1-release-notes.mdx b/website/i18n/pt/docusaurus-plugin-content-blog/2021-09-27-v2-beta1-release-notes.mdx index d01b542b153..e8a637cfda1 100644 --- a/website/i18n/pt/docusaurus-plugin-content-blog/2021-09-27-v2-beta1-release-notes.mdx +++ b/website/i18n/pt/docusaurus-plugin-content-blog/2021-09-27-v2-beta1-release-notes.mdx @@ -1,6 +1,6 @@ --- slug: wails-v2-beta-for-windows -title: Wails v2 Beta for Windows +title: Wails v2 Beta para Windows authors: - leaanthony tags: @@ -19,19 +19,19 @@ tags:
``` -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. +Quando eu anunciei o pela primeira vez o Wails no Reddit, justamente a 2 anos atrás dentro de um trem em Sidney, Eu não esperava que isso teria muita atenção. Alguns dias mais tarde, um vlogger tecnológico prolífico lançou um vídeo de tutorial, deu uma revisão positiva desde então o interesse pelo projeto disparou. -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. +Estava claro que as pessoas estavam animadas para adicionar frontend ‘web’ nas suas aplicações em Go, e quase imediatamente o projeto foi para além da prova de conceito que criei. No momento, Wails usava o projeto [webview](https://github.com/webview/webview) para lidar com o frontend, e a única opção para Windows era o renderizador IE11. Muitos relatórios de erros tiveram root nessa limitação: suporte pobre de JavaScript/CSS e nenhuma ferramenta de desenvolvimento para depurá-lo. Esta foi uma experiência de desenvolvimento frustrante, mas não havia muito que pudesse ter sido feito para corrigi-lo. -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. +Por muito tempo, eu acreditava firmemente que a Microsoft acabaria por ter que resolver a situação do navegador. O mundo estava avançando, o desenvolvimento frondend estava crescendo e o IE não estava acompanhando. Quando a Microsoft anunciou o movimento para usar o Chromium como base para a nova direção do navegador. Eu sabia que era apenas uma questão de tempo até que as Wails pudessem usá-lo, e mova a experiência de desenvolvedor do Windows para o próximo nível. -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... +Hoje, estou contente em anunciar: **Wails v2 Beta para Windows**! Há uma enorme quantidade para descompactar esta atualização, então tome uma bebida, sente-se e nós começaremos... -### No CGO Dependency! +### Sem dependência CGO! -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. +Não, não estou brincando: _Não_ _CGO_ _dependência_🤯! O problema do Windows é que, diferentemente do MacOS e do Linux, ele não vem com um compilador padrão. Além disso, CGO requer um compilador mingw e há uma tonelada de diferentes opções de instalação. A remoção do requisito de CGO tem uma configuração simplificada massivamente, bem como tornar a depuração muito mais fácil. Embora eu tenha me esforçado bastante para fazer isso funcionar, a maioria dos o crédito deveria ir para [John Chadwick](https://github.com/jchv) por não apenas iniciar alguns projetos para fazer isso possível, mas também estar aberto a alguém que assuma esses projetos e os desenvolva. Crédito também a [Tad Vizbaras](https://github.com/tadvi) cujo projeto [winc](https://github.com/tadvi/winc) me iniciou por este caminho. -### WebView2 Chromium Renderer +### Renderizador Chromium WebView2 ```mdx-code-block
@@ -44,15 +44,15 @@ No, I'm not joking: _No_ _CGO_ _dependency_ 🤯! The thing about Windows is tha
``` -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! +Finalmente, os desenvolvedores do Windows recebem um mecanismo de renderização de primeira classe para as suas aplicações! Já se foram dias de contorno seu código frontend para funcionar no Windows. Além disso, você tem uma experiência de ferramentas de desenvolvedor de primeira classe! -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. +O componente WebView2 tem, no entanto, um requisito para que o `WebView2Loader.dll` fique lado a lado com o binário. Isso faz com que a distribuição seja um pouco mais dolorosa do que nós gophers gostamos de ver. Todas as soluções e bibliotecas (que eu conheço) que usam WebView2 têm essa dependência. -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. +No entanto, estou muito animado em anunciar que os aplicativos Wails _não têm tal exigência_! Obrigado à magia de [John Chadwick](https://github.com/jchv), nós somos capazes de agregar essa barra dentro do binário e fazer com que o Windows carregue como se estivesse presente no disco. -Gophers rejoice! The single binary dream lives on! +Gophers se alegram! O sonho binário único continua vivo! -### New Features +### Novos Recursos ```mdx-code-block
@@ -65,11 +65,11 @@ Gophers rejoice! The single binary dream lives on!
``` -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. +Houve muitas solicitações para o suporte ao menu nativo. Wails finalmente ajudou você. Os menus de aplicativo agora estão disponíveis e incluem suporte para a maioria dos recursos do menu nativo. Isto inclui itens de menu padrão, caixas de seleção, grupos de rádio, submenus e separadores. -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. +Houve um grande número de pedidos na v1 no sentido de se conseguir um maior controlo da própria janela. Estou feliz em anunciar que há novas APIs de tempo de execução especificamente para isso. Ele é rico em recursos e suporta configurações multi-monitores. Há também uma API de diálogos aprimorada: agora você pode ter diálogos com configuração avançada para atender a todas as suas necessidades de diálogo. -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. +Agora há a opção de gerar a configuração do IDE junto com o seu projeto. Isto significa que se você abrir o seu projeto em um IDE suportado, ele já será configurado para construir e depurar sua aplicação. Atualmente o VSCode é suportado mas esperamos dar suporte a outros IDEs como o Goland em breve. ```mdx-code-block
@@ -82,19 +82,19 @@ There is now the option to generate IDE configuration along with your project. T
``` -### No requirement to bundle assets +### Nenhum requisito para empacotar 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 `` tag with a local src path. Want to use a cool font? Copy it in and add the path to it in your CSS. +Um grande problema da v1 foi a necessidade de condensar todo o seu aplicativo em um único JS & Arquivos CSS. Estou feliz em anunciar que para v2, não há nenhum requisito de agrupar assets, de qualquer forma. Quer carregar uma imagem local? Use uma tag `` com um caminho de src local. Quer usar uma fonte legal? Copie ele e adicione o caminho para ele em seu CSS. -> Wow, that sounds like a webserver... +> Uau, isso soa como um servidor web... -Yes, it works just like a webserver, except it isn't. +Sim, funciona como um servidor web, mas não é. -> So how do I include my assets? +> Então, como incluo meus assets? -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. +Você apenas passa um único `embed.FS` que contém todos os seus assets na configuração da sua aplicação. Eles nem precisam estar no diretório superior - o Wails resolverá isso para você. -### New Development Experience +### Nova Experiência de Desenvolvimento ```mdx-code-block
@@ -107,20 +107,20 @@ You just pass a single `embed.FS` that contains all your assets into your applic
``` -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. +Agora que os ativos não precisam ser agrupados, foi possível uma experiência de desenvolvimento totalmente nova. O novo comando `wail dev` irá construir e executar seu aplicativo, mas em vez de usar os ativos do `incorporados. S`, carrega-os diretamente do disco. -It also provides the additional features: +Ele também fornece os recursos adicionais: -- Hot reload - Any changes to frontend assets will trigger and auto reload of the application frontend -- Auto rebuild - Any changes to your Go code will rebuild and relaunch your application +- Carregamento automatico - Quaisquer mudanças nos recursos do frontend irão ativar e recarregar automaticamente o frontend do aplicativo +- Reconstrução automática - Qualquer alteração ao seu código Go irá reconstruir e reiniciar seu aplicativo -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. +Além disso, um servidor web iniciará na porta 34115. Isso servirá seu aplicativo para qualquer navegador que conecta a ele. Todos os navegadores web conectados responderão a eventos do sistema como recarregar rapidamente na alteração de ativos. -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. +Em Go, estamos acostumados a lidar com estruturas em nossas aplicações. Muitas vezes é útil enviar estruturas para nosso frontend e use-os como estado em nosso aplicativo. Na v1, este foi um processo muito manual e um pouco de sobrecarga para o desenvolvedor. Tenho prazer em anunciar isso em v2, qualquer aplicativo executado no modo de desenvolvimento irá gerar automaticamente modelos TypeScript para todas as construções que são entradas ou parâmetros de saída para métodos vinculados. Isso permite uma troca perfeita de dados modelos entre os dois mundos. -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! +Além disso, outro módulo JS é gerado dinamicamente todos os seus métodos de vinculação. Isso fornece JSDoc para seus métodos, fornecendo a conclusão de código e dicas em seu IDE. É muito legal quando você obtém modelos de dados auto-importado quando atinge a aba em um módulo gerado automaticamente embrulhando o seu código Go! -### Remote Templates +### Modelos Remotos ```mdx-code-block
@@ -133,29 +133,29 @@ In addition to this, another JS module is dynamically generated wrapping all you
``` -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. +Colocar um aplicativo em funcionamento rapidamente sempre foi um objetivo importante do projeto Wails. Quando lançamos, tentamos cobrir muitos dos frameworks modernos no momento: react, vue e angular. O mundo do desenvolvimento frontend é muito teimoso, rápido e difícil de manter no controle! Como resultado, descobrimos que nossos modelos básicos estavam bastante desatualizados rapidamente e isso causou uma dor de cabeça de manutenção. Também significava que não tínhamos modelos modernos legais para os mais recentes e os maiores cumes tecnológicos. -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! +Com a v2, eu queria capacitar a comunidade, dando a vocês a capacidade de criar e hospedar modelos por conta própria, em vez de do que confiar no projeto Wails. Então agora você pode criar projetos usando templates suportados pela comunidade! Espero que isto vá inspirar os desenvolvedores a criar um ecossistema vibrante de modelos de projeto. Estou realmente animado com o que a comunidade de desenvolvedores pode criar! -### In Conclusion +### Em conclusão -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. +As trilhas v2 representam uma nova fundação para o projeto. O objetivo desta versão é obter feedback sobre a nova abordagem e aperfeiçoar quaisquer erros antes de uma versão completa. Sua opinião seria muito bem-vinda. Por favor, direcione qualquer feedback para o fórum de discussão [Beta](https://github.com/wailsapp/wails/discussions/828). -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: Go’s 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. +Houve muitas reviravoltas, pivots e reviravoltas para chegar a este ponto. Isto deveu-se em parte a decisões técnicas iniciais isso precisava ser mudado, e em parte porque alguns problemas principais para os quais passamos tempo criando soluções alternativas foram corrigidos no upstream: O recurso de incorporação do Go é um bom exemplo. Felizmente, tudo se juntou no momento certo, e hoje nós temos a melhor solução que podemos ter. Eu acredito que a espera tem valido a pena - isto não teria sido possível até 2 meses atrás. -I also need to give a huge thank you :pray: to the following people because without them, this release just wouldn't exist: +Eu também preciso dar um enorme agradecimento :pray: às seguintes pessoas, porque sem elas essa liberação não existiria: -- [Misite Bao](https://github.com/misitebao) - An absolute workhorse on the Chinese translations and an incredible bug finder. -- [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. -- [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. -- [Mat Ryer](https://github.com/matryer) - His support, encouragement and feedback has really helped drive the project forward. +- [Misite Bao](https://github.com/misitebao) - Um cavalo de trabalho absoluto sobre as traduções chinesas e uma incrível busca de bugs. +- [John Chadwick](https://github.com/jchv) - Seu excelente trabalho no [go-webview2](https://github.com/jchv/go-webview2) e [go-winloader](https://github.com/jchv/go-winloader) tornaram a versão do Windows que temos hoje possível. +- [Tad Vizbaras](https://github.com/tadvi) - Experimentar seu projeto [winc](https://github.com/tadvi/winc) foi o primeiro passo para um Go Wails puro. +- [Mat Ryer](https://github.com/matryer) - Seu apoio, encorajamento e feedback realmente ajudaram a impulsionar o projeto. -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. +E finalmente, eu gostaria de agradecer especialmente a todos os patrocinadores [do projeto](/credits#sponsors), incluindo [JetBrains](https://www.jetbrains.com?from=Wails), cujo suporte dirige o projeto de muitas formas nos bastidores. -I look forward to seeing what people build with Wails in this next exciting phase of the project! +Estou ansioso para ver o que as pessoas construirão com Wails nesta próxima fase emocionante do projeto! 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 e usuários do Linux não precisam de se sentir esquecidos - o facto de se portar para esta nova fundação está activamente em curso e a maior parte do trabalho árduo já foi feito. Aguenta firme! -PPS: If you or your company find Wails useful, please consider [sponsoring the project](https://github.com/sponsors/leaanthony). Thanks! +PPS: Se você ou sua empresa consideram o Wails útil, considere [patrocinar o projeto](https://github.com/sponsors/leaanthony). Obrigado! diff --git a/website/i18n/pt/docusaurus-plugin-content-blog/2021-11-08-v2-beta2-release-notes.mdx b/website/i18n/pt/docusaurus-plugin-content-blog/2021-11-08-v2-beta2-release-notes.mdx index 86d44616f40..74af6aa277d 100644 --- a/website/i18n/pt/docusaurus-plugin-content-blog/2021-11-08-v2-beta2-release-notes.mdx +++ b/website/i18n/pt/docusaurus-plugin-content-blog/2021-11-08-v2-beta2-release-notes.mdx @@ -1,6 +1,6 @@ --- slug: wails-v2-beta-for-mac -title: Wails v2 Beta for MacOS +title: Wails v2 Beta para MacOS authors: - leaanthony tags: @@ -19,13 +19,13 @@ tags:
``` -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. +Hoje marca a primeira versão beta do Wails v2 para Mac! Demorou um pouco para chegar a este ponto e espero que o lançamento de hoje lhe dará algo razoavelmente útil. Houve uma série de reviravoltas e turnos para chegar a este ponto e estou esperando, com a sua ajuda, para passar as rugas e polir a porta Mac para a versão final do v2. -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! +Quer dizer que isso não está pronto para a produção? Para o seu caso de uso, ele pode estar pronto, mas ainda há vários problemas conhecidos, então fique de olho [neste quadro de projeto](https://github.com/wailsapp/wails/projects/7) e se desejar gostaria de contribuir, será muito bem-vindo! -So what's new for Wails v2 for Mac vs v1? Hint: It's pretty similar to the Windows Beta :wink: +Então, o que há de novo para Wails v2 para Mac vs v1? Dica: É bem parecido com o Windows Beta :wink: -### New Features +### Novos Recursos ```mdx-code-block
@@ -38,47 +38,47 @@ So what's new for Wails v2 for Mac vs v1? Hint: It's pretty similar to the Windo
``` -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. +Houve muitas solicitações para o suporte ao menu nativo. Wails finalmente ajudou você. Os menus de aplicativo agora estão disponíveis e incluem suporte para a maioria dos recursos do menu nativo. Isto inclui itens de menu padrão, caixas de seleção, grupos de rádio, submenus e separadores. -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. +Houve um grande número de pedidos na v1 no sentido de se conseguir um maior controlo da própria janela. Estou feliz em anunciar que há novas APIs de tempo de execução especificamente para isso. Ele é rico em recursos e suporta configurações multi-monitores. Há também uma API de diálogos aprimorada: agora você pode ter diálogos com configuração avançada para atender a todas as suas necessidades de diálogo. -### Mac Specific Options +### Opções especificas para Mac -In addition to the normal application options, Wails v2 for Mac also brings some Mac extras: +Além das opções normais do aplicativo, o Wails v2 para Mac também traz alguns extras: -- Make your window all funky and translucent, like all the pretty swift apps! -- Highly customisable titlebar -- We support the NSAppearance options for the application -- Simple config to auto-create an "About" menu +- Faça sua janela totalmente engraçada e translucente, como todos os aplicativos muito rápidos! +- Barra de títulos altamente customizável +- Nós suportamos as opções NSAppearance para o aplicativo +- Configuração simples para criar automaticamente um menu "Sobre" -### No requirement to bundle assets +### Nenhum requisito para empacotar 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 `` tag with a local src path. Want to use a cool font? Copy it in and add the path to it in your CSS. +Um grande problema da v1 foi a necessidade de condensar todo o seu aplicativo em um único JS & Arquivos CSS. Estou feliz em anunciar que para v2, não há nenhum requisito de agrupar assets, de qualquer forma. Quer carregar uma imagem local? Use uma tag `` com um caminho de src local. Quer usar uma fonte legal? Copie ele e adicione o caminho para ele em seu CSS. -> Wow, that sounds like a webserver... +> Uau, isso soa como um servidor web... -Yes, it works just like a webserver, except it isn't. +Sim, funciona como um servidor web, mas não é. -> So how do I include my assets? +> Então, como incluo meus assets? -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. +Você apenas passa um único `embed.FS` que contém todos os seus assets na configuração da sua aplicação. Eles nem precisam estar no diretório superior - o Wails resolverá isso para você. -### New Development Experience +### Nova Experiência de Desenvolvimento -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. +Agora que os ativos não precisam ser agrupados, foi possível uma experiência de desenvolvimento totalmente nova. O novo comando `wail dev` irá construir e executar seu aplicativo, mas em vez de usar os ativos do `incorporados. S`, carrega-os diretamente do disco. -It also provides the additional features: +Ele também fornece os recursos adicionais: -- Hot reload - Any changes to frontend assets will trigger and auto reload of the application frontend -- Auto rebuild - Any changes to your Go code will rebuild and relaunch your application +- Carregamento automatico - Quaisquer mudanças nos recursos do frontend irão ativar e recarregar automaticamente o frontend do aplicativo +- Reconstrução automática - Qualquer alteração ao seu código Go irá reconstruir e reiniciar seu aplicativo -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. +Além disso, um servidor web iniciará na porta 34115. Isso servirá seu aplicativo para qualquer navegador que conecta a ele. Todos os navegadores web conectados responderão a eventos do sistema como recarregar rapidamente na alteração de ativos. -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. +Em Go, estamos acostumados a lidar com estruturas em nossas aplicações. Muitas vezes é útil enviar estruturas para nosso frontend e use-os como estado em nosso aplicativo. Na v1, este foi um processo muito manual e um pouco de sobrecarga para o desenvolvedor. Tenho prazer em anunciar isso em v2, qualquer aplicativo executado no modo de desenvolvimento irá gerar automaticamente modelos TypeScript para todas as construções que são entradas ou parâmetros de saída para métodos vinculados. Isso permite uma troca perfeita de dados modelos entre os dois mundos. -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! +Além disso, outro módulo JS é gerado dinamicamente todos os seus métodos de vinculação. Isso fornece JSDoc para seus métodos, fornecendo a conclusão de código e dicas em seu IDE. É muito legal quando você obtém modelos de dados auto-importado quando atinge a aba em um módulo gerado automaticamente embrulhando o seu código Go! -### Remote Templates +### Modelos Remotos ```mdx-code-block
@@ -91,13 +91,13 @@ In addition to this, another JS module is dynamically generated wrapping all you
``` -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. +Colocar um aplicativo em funcionamento rapidamente sempre foi um objetivo importante do projeto Wails. Quando lançamos, tentamos cobrir muitos dos frameworks modernos no momento: react, vue e angular. O mundo do desenvolvimento frontend é muito teimoso, rápido e difícil de manter no controle! Como resultado, descobrimos que nossos modelos básicos estavam bastante desatualizados rapidamente e isso causou uma dor de cabeça de manutenção. Também significava que não tínhamos modelos modernos legais para os mais recentes e os maiores cumes tecnológicos. -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! +Com a v2, eu queria capacitar a comunidade, dando a vocês a capacidade de criar e hospedar modelos por conta própria, em vez de do que confiar no projeto Wails. Então agora você pode criar projetos usando templates suportados pela comunidade! Espero que isto vá inspirar os desenvolvedores a criar um ecossistema vibrante de modelos de projeto. Estou realmente animado com o que a comunidade de desenvolvedores pode criar! -### Native M1 Support +### Suporte Nativo M1 -Thanks to the amazing support of [Mat Ryer](https://github.com/matryer/), the Wails project now supports M1 native builds: +Graças ao incrível apoio do [Ryer](https://github.com/matryer/)Mat, o projeto Wails agora suporta as construções nativas do M1: ```mdx-code-block
@@ -110,7 +110,7 @@ Thanks to the amazing support of [Mat Ryer](https://github.com/matryer/), the Wa
``` -You can also specify `darwin/amd64` as a target too: +Você também pode especificar `darwin/amd64` como um alvo também: ```mdx-code-block
@@ -123,7 +123,7 @@ You can also specify `darwin/amd64` as a target too:
``` -Oh, I almost forgot.... you can also do `darwin/universal`.... :wink: +Ah, eu quase esqueci... você também pode fazer `darwin/universal`.... :wink: ```mdx-code-block
@@ -136,9 +136,9 @@ Oh, I almost forgot.... you can also do `darwin/universal`.... :wink:
``` -### Cross Compilation to Windows +### Compilação para Windows -Because Wails v2 for Windows is pure Go, you can target Windows builds without docker. +Como o Wails v2 para Windows é um Go, você pode direcionar versões do Windows sem o docker. ```mdx-code-block
@@ -151,20 +151,20 @@ Because Wails v2 for Windows is pure Go, you can target Windows builds without d
``` -### WKWebView Renderer +### Renderizador WKWebView -V1 relied on a (now deprecated) WebView component. V2 uses the most recent WKWebKit component so expect the latest and greatest from Apple. +V1 dependeu de um componente WebView (agora obsoleto). V2 usa o componente WKWebKit mais recente então espere o mais recente e o maior da Apple. -### In Conclusion +### Em conclusão -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. +Como eu disse nas notas de lançamento do Windows, Wails v2 representa uma nova fundação para o projeto. O objetivo desta versão é obter feedback sobre a nova abordagem e aperfeiçoar quaisquer erros antes de uma versão completa. Sua opinião seria muito bem-vinda! Por favor, direcione qualquer feedback para o fórum de discussão [Beta](https://github.com/wailsapp/wails/discussions/828). -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. +E finalmente, eu gostaria de agradecer especialmente a todos os patrocinadores [do projeto](/credits#sponsors), incluindo [JetBrains](https://www.jetbrains.com?from=Wails), cujo suporte dirige o projeto de muitas formas nos bastidores. -I look forward to seeing what people build with Wails in this next exciting phase of the project! +Estou ansioso para ver o que as pessoas construirão com Wails nesta próxima fase emocionante do projeto! Lea. -PS: Linux users, you're next! +PS: usuários do Linux, você será o próximo! -PPS: If you or your company find Wails useful, please consider [sponsoring the project](https://github.com/sponsors/leaanthony). Thanks! +PPS: Se você ou sua empresa consideram o Wails útil, considere [patrocinar o projeto](https://github.com/sponsors/leaanthony). Obrigado! diff --git a/website/i18n/pt/docusaurus-plugin-content-blog/2022-02-22-v2-beta3-release-notes.mdx b/website/i18n/pt/docusaurus-plugin-content-blog/2022-02-22-v2-beta3-release-notes.mdx index b405953cfbc..e0a2c87c5dd 100644 --- a/website/i18n/pt/docusaurus-plugin-content-blog/2022-02-22-v2-beta3-release-notes.mdx +++ b/website/i18n/pt/docusaurus-plugin-content-blog/2022-02-22-v2-beta3-release-notes.mdx @@ -1,6 +1,6 @@ --- slug: wails-v2-beta-for-linux -title: Wails v2 Beta for Linux +title: Wails v2 Beta para Linux authors: - leaanthony tags: @@ -19,9 +19,9 @@ tags:
``` -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: +Tenho o prazer de finalmente anunciar que as Wails v2 agora estão em beta para Linux! É um pouco irônico que os primeiros experimentos com v2 tenha sido no Linux e, no entanto, ele acabou como o último lançamento. Dito isso, o v2 que temos hoje é muito diferente desses primeiros experimentos. Então, sem mais demora, vamos analisar os novos recursos: -### New Features +### Novos Recursos ```mdx-code-block
@@ -34,38 +34,38 @@ I'm pleased to finally announce that Wails v2 is now in beta for Linux! It is so
``` -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. +Houve muitas solicitações para o suporte ao menu nativo. Wails finalmente ajudou você. Os menus de aplicativo agora estão disponíveis e incluem suporte para a maioria dos recursos do menu nativo. Isto inclui itens de menu padrão, caixas de seleção, grupos de rádio, submenus e separadores. -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. +Houve um grande número de pedidos na v1 no sentido de se conseguir um maior controlo da própria janela. Estou feliz em anunciar que há novas APIs de tempo de execução especificamente para isso. Ele é rico em recursos e suporta configurações multi-monitores. Há também uma API de diálogos aprimorada: agora você pode ter diálogos com configuração avançada para atender a todas as suas necessidades de diálogo. -### No requirement to bundle assets +### Nenhum requisito para empacotar 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 `` tag with a local src path. Want to use a cool font? Copy it in and add the path to it in your CSS. +Um grande problema da v1 foi a necessidade de condensar todo o seu aplicativo em um único JS & Arquivos CSS. Estou feliz em anunciar que para v2, não há nenhum requisito de agrupar assets, de qualquer forma. Quer carregar uma imagem local? Use uma tag `` com um caminho de src local. Quer usar uma fonte legal? Copie ele e adicione o caminho para ele em seu CSS. -> Wow, that sounds like a webserver... +> Uau, isso soa como um servidor web... -Yes, it works just like a webserver, except it isn't. +Sim, funciona como um servidor web, mas não é. -> So how do I include my assets? +> Então, como incluo meus assets? -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. +Você apenas passa um único `embed.FS` que contém todos os seus assets na configuração da sua aplicação. Eles nem precisam estar no diretório superior - o Wails resolverá isso para você. -### New Development Experience +### Nova Experiência de Desenvolvimento -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. +Agora que os ativos não precisam ser agrupados, foi possível uma experiência de desenvolvimento totalmente nova. O novo comando `wail dev` irá construir e executar seu aplicativo, mas em vez de usar os ativos do `incorporados. S`, carrega-os diretamente do disco. -It also provides the additional features: +Ele também fornece os recursos adicionais: -- Hot reload - Any changes to frontend assets will trigger and auto reload of the application frontend -- Auto rebuild - Any changes to your Go code will rebuild and relaunch your application +- Carregamento automatico - Quaisquer mudanças nos recursos do frontend irão ativar e recarregar automaticamente o frontend do aplicativo +- Reconstrução automática - Qualquer alteração ao seu código Go irá reconstruir e reiniciar seu aplicativo -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. +Além disso, um servidor web iniciará na porta 34115. Isso servirá seu aplicativo para qualquer navegador que conecta a ele. Todos os navegadores web conectados responderão a eventos do sistema como recarregar rapidamente na alteração de ativos. -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. +Em Go, estamos acostumados a lidar com estruturas em nossas aplicações. Muitas vezes é útil enviar estruturas para nosso frontend e use-os como estado em nosso aplicativo. Na v1, este foi um processo muito manual e um pouco de sobrecarga para o desenvolvedor. Tenho prazer em anunciar isso em v2, qualquer aplicativo executado no modo de desenvolvimento irá gerar automaticamente modelos TypeScript para todas as construções que são entradas ou parâmetros de saída para métodos vinculados. Isso permite uma troca perfeita de dados modelos entre os dois mundos. -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! +Além disso, outro módulo JS é gerado dinamicamente todos os seus métodos de vinculação. Isso fornece JSDoc para seus métodos, fornecendo a conclusão de código e dicas em seu IDE. É muito legal quando você obtém modelos de dados auto-importado quando atinge a aba em um módulo gerado automaticamente embrulhando o seu código Go! -### Remote Templates +### Modelos Remotos ```mdx-code-block
@@ -78,13 +78,13 @@ In addition to this, another JS module is dynamically generated wrapping all you
``` -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. +Colocar um aplicativo em funcionamento rapidamente sempre foi um objetivo importante do projeto Wails. Quando lançamos, tentamos cobrir muitos dos frameworks modernos no momento: react, vue e angular. O mundo do desenvolvimento frontend é muito teimoso, rápido e difícil de manter no controle! Como resultado, descobrimos que nossos modelos básicos estavam bastante desatualizados rapidamente e isso causou uma dor de cabeça de manutenção. Também significava que não tínhamos modelos modernos legais para os mais recentes e os maiores cumes tecnológicos. -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! +Com a v2, eu queria capacitar a comunidade, dando a vocês a capacidade de criar e hospedar modelos por conta própria, em vez de do que confiar no projeto Wails. Então agora você pode criar projetos usando templates suportados pela comunidade! Espero que isto vá inspirar os desenvolvedores a criar um ecossistema vibrante de modelos de projeto. Estou realmente animado com o que a comunidade de desenvolvedores pode criar! -### Cross Compilation to Windows +### Compilação para Windows -Because Wails v2 for Windows is pure Go, you can target Windows builds without docker. +Como o Wails v2 para Windows é um Go, você pode direcionar versões do Windows sem o docker. ```mdx-code-block
@@ -97,18 +97,18 @@ Because Wails v2 for Windows is pure Go, you can target Windows builds without d
``` -### In Conclusion +### Em conclusão -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. +Como eu disse nas notas de lançamento do Windows, Wails v2 representa uma nova fundação para o projeto. O objetivo desta versão é obter feedback sobre a nova abordagem e aperfeiçoar quaisquer erros antes de uma versão completa. Sua opinião seria muito bem-vinda! Por favor, direcione qualquer feedback para o fórum de discussão [Beta](https://github.com/wailsapp/wails/discussions/828). -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 é **Difícil** de suporte. Esperamos que haja uma série de peculiaridades com o beta. Por favor, ajude-nos a lhe ajudar por a visualizar relatórios detalhados de erros! -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. +Por fim, gostaria de agradecer especialmente a todos os [patrocinadores do projeto](/credits#sponsors) cujo apoio conduzir o projeto de várias maneiras nos bastidores. -I look forward to seeing what people build with Wails in this next exciting phase of the project! +Estou ansioso para ver o que as pessoas construirão com Wails nesta próxima fase emocionante do projeto! Lea. -PS: The v2 release isn't far off now! +PS: A versão v2 não está muito distante agora! -PPS: If you or your company find Wails useful, please consider [sponsoring the project](https://github.com/sponsors/leaanthony). Thanks! +PPS: Se você ou sua empresa consideram o Wails útil, considere [patrocinar o projeto](https://github.com/sponsors/leaanthony). Obrigado! diff --git a/website/i18n/pt/docusaurus-plugin-content-blog/2022-09-22-v2-release-notes.mdx b/website/i18n/pt/docusaurus-plugin-content-blog/2022-09-22-v2-release-notes.mdx index c321f5042d7..064c1ad85d3 100644 --- a/website/i18n/pt/docusaurus-plugin-content-blog/2022-09-22-v2-release-notes.mdx +++ b/website/i18n/pt/docusaurus-plugin-content-blog/2022-09-22-v2-release-notes.mdx @@ -1,6 +1,6 @@ --- slug: wails-v2-released -title: Wails v2 Released +title: Wails v2 liberado authors: - leaanthony tags: @@ -18,81 +18,81 @@ tags:
``` -# It's here! +# Já disponível! -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. +Hoje marca a liberação de [Wails](https://wails.io) v2. Já faz cerca de 18 meses desde o primeiro alfa v2 e cerca de um ano desde a primeira versão beta. Eu sou realmente grato a todos que participaram da evolução do projeto. -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. +Uma parte da razão por que demorou tanto tempo a querer chegar a uma definição de completude antes de a designar oficialmente como v2. A verdade é que nunca há um momento perfeito para marcar uma versão - há sempre questões pendentes ou "apenas mais um" recurso para entrar. No entanto, o que marcar uma versão principal imperfeita faz. é fornecer um pouco de estabilidade para os usuários do projeto, bem como um pouco de redefinição para os desenvolvedores. -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. +Esta versão é mais do que eu já esperava que fosse. Espero que lhe dê tanto prazer como nos deu em desenvolvê-lo. -# What _is_ Wails? +# O que _é_ 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). +Se você não estiver familiarizado com as Wails, é um projeto que permite aos programadores Go fornecerem frontend ricos para seus programas usando tecnologias web familiares. É leve, uma alternativa ao Electron. Muito mais informações podem ser encontradas no [site oficial](https://wails.io/docs/introduction). -# What's new? +# O que há de novo? -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: +A liberação v2 é um enorme salto em frente para o projeto, abordando muitos dos pontos de dor da v1. Se você não leu nenhum dos posts no blog em versões beta para [macOS](/blog/wails-v2-beta-for-mac), [Windows](/blog/wails-v2-beta-for-windows) ou [Linux](/blog/wails-v2-beta-for-linux), Então eu encorajo-os a fazê-lo porque cobre todas as principais mudanças em mais detalhes. Resumo: -- Webview2 component for Windows that supports modern web standards and debugging capabilities. -- [Dark / Light theme](/docs/reference/options#theme) + [custom theming](/docs/reference/options#customtheme) on Windows. -- Windows now has no CGO requirements. -- Out-of-the-box support for Svelte, Vue, React, Preact, Lit & Vanilla project templates. -- [Vite](https://vitejs.dev/) integration providing a hot-reload development environment for your application. -- Native application [menus](/docs/guides/application-development#application-menu) and [dialogs](/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. -- Easily generate an [NSIS installer](/docs/guides/windows-installer) for Windows deployments. -- A rich [runtime library](/docs/reference/runtime/intro) providing utility methods for window manipulation, eventing, dialogs, menus and logging. -- Support for [obfuscating](/docs/guides/obfuscated) your application using [garble](https://github.com/burrowers/garble). -- Support for compressing your application using [UPX](https://upx.github.io/). -- Automatic TypeScript generation of Go structs. More info [here](/docs/howdoesitwork#calling-bound-go-methods). -- No extra libraries or DLLs are required to be shipped with your application. For any platform. -- No requirement to bundle frontend assets. Just develop your application like any other web application. +- Componente Webview2 para Windows que oferece suporte a modernos padrões da web e capacidades de depuração. +- [Tema Dark / Light](/docs/reference/options#theme) + [tema personalizado](/docs/reference/options#customtheme) no Windows. +- Windows não tem os requisitos de CGO. +- Suporte fora da caixa para modelos de projeto Svelte, Vue, React, Preact, Lit & Vanilla. +- [Vite](https://vitejs.dev/) integração proporcionando um ambiente de desenvolvimento de atualização quente para seu aplicativo. +- Aplicação nativa [menus](/docs/guides/application-development#application-menu) e [dialogs](/docs/reference/runtime/dialog). +- Efeitos de translucência nativos da janela para [Windows](/docs/reference/options#windowistranslucent) e [macOS](/docs/reference/options#windowistranslucent-1). Support para Mica & Acrylic backdrops. +- Gera facilmente um instalador [NSIS](/docs/guides/windows-installer) para deploys com Windows. +- Uma biblioteca [em tempo de execução](/docs/reference/runtime/intro) que fornece métodos utilitários para manipulação de janelas, eventos, diálogos, menus e logs. +- Suporte para [ofuscar](/docs/guides/obfuscated) seu aplicativo usando [garble](https://github.com/burrowers/garble). +- Suporte para compactar sua aplicação usando [UPX](https://upx.github.io/). +- Geração automática de estruturas de Go para TypeScript. Mais informações [aqui](/docs/howdoesitwork#calling-bound-go-methods). +- Não são necessárias bibliotecas extras ou DLLs para enviar com sua aplicação. Para qualquer plataforma. +- Nenhum requisito para empacotar assets. Apenas desenvolva seu aplicativo como qualquer outro aplicativo da web. -# Credit & Thanks +# Crédito & Obrigado -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. +Chegar à v2 tem sido um enorme esforço. Houve cerca de 2,2 mil commits de 89 colaboradores entre o alfa inicial e o lançamento de hoje, e muitos, muitos mais que forneceram traduções, testes, feedback e ajuda nos fóruns de discussão, bem como no rastreador de problemas. Sou tão incrivelmente grato a cada um de vocês. Eu também gostaria de dar um agradecimento especial extra para todos os patrocinadores do projeto que forneceram orientação, conselho e feedback. Tudo o que você faz é extremamente apreciado. -There are a few people I'd like to give special mention to: +Há algumas pessoas que eu gostaria de mencionar especialmente: -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! +Primeiro, a **enorme** obrigado a [@stffabi](https://github.com/stffabi) que forneceu tantas contribuições das quais todos nos beneficiamos, Para além de prestar muito apoio em muitas questões. Ele forneceu algumas principais características, como o suporte ao servidor de desenvolvimento externo que transformou a oferta de desenvolvimento ao nos permitir conectar aos superpoderes do [Vite](https://vitejs.dev/). É justo dizer que o Wails v2 seria um lançamento muito menos emocionante sem sua [incrível contribuição](https://github.com/wailsapp/wails/commits?author=stffabi&since=2020-01-04). Muito obrigado @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! +Eu também gostaria de dar um grande grito para [@misitebao](https://github.com/misitebao) que tem mantido o site incansavelmente. Além de fornecer traduções chinesas, gerenciar Crowdin e ajudar novos tradutores a se atualizarem para a velocidade. Esta é uma tarefa extremamente importante, e estou extremamente grato por todo o tempo e esforço investido nisso! Você é espetacular! -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! +Por último, mas não menos importante, um enorme agradecimento ao senhor Mat Ryer, que prestou aconselhamento e apoio durante o desenvolvimento da v2. Escrever xBar junto usando um alfa inicial da v2 foi útil para moldar a direção da v2, Além de me dar uma ideia de algumas falhas de design nas versões mais cedo. Tenho prazer em anunciar que, a partir de hoje, começaremos a abrir o porto xBar para Wails v2, e tornar-se-á o principal aplicativo para o projecto. Felicidades Mat! -# Lessons Learnt +# Lições Aprendidas -There are a number of lessons learnt in getting to v2 that will shape development moving forward. +Há uma série de lições aprendidas ao chegar à v2 que irão moldar o desenvolvimento avançado. -## Smaller, Quicker, Focused Releases +## Menor, Rápido e Focado Versões -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. +No desenvolvimento da v2, havia muitas características e correções de erros que foram desenvolvidas numa base ad-hoc. Isso levou a ciclos de lançamento mais longos e era mais difícil de depurar. Seguindo, vamos criar lançamentos com mais frequência que incluirá um número reduzido de recursos. Uma versão envolverá atualizações da documentação, bem como testes completos. Esperemos que estes lançamentos mais pequenos, mais rápidos e focados conduzam a menos regressões e a uma melhor documentação de qualidade. -## Encourage Engagement +## Incentive o envolvimento -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). +Ao iniciar este projeto, eu queria ajudar imediatamente todos os que tiveram um problema. Os problemas eram "pessoais" e eu queria que eles fossem resolvidos o mais rapidamente possível. Isto é insustentável e acaba por contrariar a longevidade do projecto. Avançando, darei mais espaço para que as pessoas se envolvam na resposta a perguntas e na triagem de questões. Seria bom conseguir algumas ferramentas para ajudar com isso, portanto, se você tiver alguma sugestão, por favor, participe da discussão [aqui](https://github.com/wailsapp/wails/discussions/1855). -## Learning to say No +## Aprendendo a dizer Não -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. +Quanto mais pessoas se envolverem com um projeto de Código Aberto, quanto mais pedidos forem para recursos adicionais que possam ou não ser úteis para a maioria das pessoas. Estas características levarão um tempo inicial para desenvolver e debugar e incorrer num custo de manutenção contínuo a partir desse ponto. Eu próprio sou o mais culpado por isso, querendo muitas vezes "ferver o mar" em vez de fornecer o mínimo viável. Seguindo, precisaremos dizer "Não" um pouco mais para adicionar recursos principais e concentrar as nossas energias em uma forma de capacitar os desenvolvedores para fornecer essas funcionalidades por conta própria. Estamos analisando seriamente plugins para este cenário. Isso permitirá a qualquer pessoa alargar o projecto como considerar conveniente, bem como proporcionar uma forma fácil de contribuir para o projecto. -# Looking to the Future +# Olhando para o futuro -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. +Há tantas características centrais que estamos a analisar para adicionar às Wails no próximo grande ciclo de desenvolvimento. O [planejamento](https://github.com/wailsapp/wails/discussions/1484) está cheio de ideias interessantes, e estou ansioso para começar a trabalhar nelas. Uma das grandes perguntas tem sido a de múltiplas janelas. É um pouco complicado e para fazer isso certo, e pode ser que precisemos analisar a prover uma API alternativa. Como o actual não foi concebido tendo isso em mente. Com base em algumas idéias preliminares e feedback, eu acho que você vai gostar de onde estamos procurando acompanhá-lo. -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! +Eu pessoalmente estou muito animado com a perspectiva de fazer aplicativos Wails funcionarem em dispositivos móveis. Já temos um projeto de demonstração mostrando que é possível executar um aplicativo Wails no Android, então eu estou realmente ansioso para explorar onde podemos ir com isso! -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. +Um último ponto que gostaria de levantar é o da paridade de recursos. Há muito tempo é um princípio central que não adicionamos nada ao projeto sem que haja suporte completo entre plataformas para ele. Embora isto tenha provado ser (principalmente) exequível até agora, conseguiu realmente reter o projeto na libertação de novas características. Movendo para frente, estaremos adotando uma abordagem ligeiramente diferente: qualquer nova funcionalidade que não possa ser imediatamente lançada para todas as plataformas será lançada sob uma configuração experimental ou API. Isso permite que usuários antecipados de certas plataformas experimentem o recurso e forneçam feedback que serão incorporados no design final da funcionalidade. Isto, claro, significa que não há garantias de estabilidade da API até que ela seja totalmente suportada por todas as plataformas em que pode ser suportada, mas pelo menos vai desbloquear o desenvolvimento. -# Final Words +# Palavras Finais -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. +Estou muito orgulhoso do que conseguimos alcançar com a versão V2. É incrível ver o que as pessoas já foram capazes de construir usando os lançamentos beta. Aplicativos de qualidade como [Varly](https://varly.app/), [Surge](https://getsurge.io/) e [outubro](https://october.utf9k.net/). Eu encorajo você a conferi-los. -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. +Esta libertação foi conseguida através do trabalho árduo de muitos contribuintes. Embora seja livre de descarregar e utilizar, não surgiu através de custo zero. Não cometamos erros, este projeto tem um custo considerável. Não foi só o meu tempo e o tempo de cada um dos intervenientes, mas também o de cada um. mas também o custo da ausência de amigos e famílias de cada uma dessas pessoas. É por isso que eu estou extremamente grato por cada segundo que foi dedicado a fazer este projeto acontecer. Quanto mais contribuidores tivermos, mais este esforço poderá ser repartido e mais conseguiremos alcançar em conjunto. Eu gostaria de encorajar todos vocês a escolherem uma coisa que você possa contribuir, seja confirmar o bug de alguém, Sugira uma correção, fazendo uma documentação mudar ou ajudando alguém que precise. Todas estas pequenas coisas têm um impacto tão grande! Seria fantástico se o senhor também fizesse parte da história para chegar à v3. -Enjoy! +Aproveite! ‐ Lea -PS: If you or your company find Wails useful, please consider [sponsoring the project](https://github.com/sponsors/leaanthony). Thanks! +PS: Se você ou sua empresa consideram o Wails útil, considere [patrocinar o projeto](https://github.com/sponsors/leaanthony). Obrigado! diff --git a/website/i18n/pt/docusaurus-plugin-content-blog/2023-01-17-v3-roadmap.mdx b/website/i18n/pt/docusaurus-plugin-content-blog/2023-01-17-v3-roadmap.mdx index 9a137d09a8c..7ec5accb578 100644 --- a/website/i18n/pt/docusaurus-plugin-content-blog/2023-01-17-v3-roadmap.mdx +++ b/website/i18n/pt/docusaurus-plugin-content-blog/2023-01-17-v3-roadmap.mdx @@ -1,6 +1,6 @@ --- slug: the-road-to-wails-v3 -title: The Road to Wails v3 +title: A Estrada para Wails v3 authors: - leaanthony tags: @@ -18,61 +18,61 @@ tags:
``` -# Introduction +# Introdução -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 é um projeto que simplifica a capacidade de escrever aplicativos de desktop multiplataforma usando Ir. Ele usa componentes nativos do webview para o frontend (não os navegadores incorporados), trazendo o poder do sistema de interface de usuário mais popular do mundo, enquanto permanece leve. -Version 2 was released on the 22nd of September 2022 and brought with it a lot of enhancements including: +A versão 2 foi lançada no dia 22 de setembro de 2022 e trouxe uma série de aprimoramentos incluindo: -- Live development, leveraging the popular Vite project -- Rich functionality for managing windows and creating menus +- Desenvolvimento ao vivo, aproveitando o projeto popular Vite +- Funcionalidade rica para gerenciar janelas e criar menus - Microsoft's WebView2 component -- Generation of Typescript models that mirror your Go structs -- Creating of NSIS Installer -- Obfuscated builds +- Geração de modelos de Typescript que espelham suas construções em Go +- Criação do NSIS Installer +- Compilações ofuscadas -Right now, Wails v2 provides powerful tooling for creating rich, cross-platform desktop applications. +No momento, o Wails v2 fornece ferramentas poderosas para a criação de ‘desktops’ ricos e multiplataforma. Formulários. Ir. -This blog post aims to look at where the project is at right now and what we can improve on moving forward. +Este post de blog visa ver onde o projeto está no momento e o que podemos melhorar ao avançar. -# Where are we now? +# Em que ponto estamos agora? -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. +Tem sido incrível ver a popularidade das Wails aumentar desde o lançamento v2. Estou constantemente maravilhados com a criatividade da comunidade e com as coisas maravilhosas que estão sendo construídas com ela. Com mais popularidade, vem mais olhos para o projeto. E com isso, mais solicitações de recursos e relatórios de bugs. -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. +Ao longo do tempo, consegui identificar alguns dos problemas mais prementes enfrentados pelo projeto. Eu também fui capaz de identificar algumas das coisas que estão segurando o projeto de volta. -## Current issues +## Problemas atuais -I've identified the following areas that I feel are holding the project back: +Eu identifiquei as seguintes áreas que sinto que estão segurando o projeto de volta: -- The API -- Bindings generation -- The Build System +- A API +- Geração de Atalhos +- O Sistema de Compilação -### The API +### A API -The API to build a Wails application currently consists of 2 parts: +A API para criar um aplicativo Wails atualmente consiste de 2 partes: -- The Application API -- The Runtime API +- A API do Aplicativo +- A API Runtime -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. +A aplicação API famosamente tem apenas 1 função: `Run()` que dá um monte de opções que governam como a aplicação vai funcionar. Embora isso seja muito simples de usar, é também muito limitado. É uma abordagem "declarativa" que esconde muita da complexidade subjacente. Por exemplo, não há nenhum identificador para a janela principal, então você não pode interagir diretamente com ele. Para isso, você precisa usar a API Runtime. Este é um problema quando você começar a fazer coisas mais complexas como criar múltiplas janelas. -The Runtime API provides a lot of utility functions for the developer. This includes: +A API do Runtime fornece um monte de funções de utilidade para o desenvolvedor. Isso inclui: -- Window management -- Dialogs +- Gestão de janelas +- Caixa de diálogo - Menus -- Events +- Eventos - 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. +Há várias coisas que eu não estou feliz com a API de Runtime. O primeiro é que ele requer um "contexto" para ser passado. Isto é frustrante e confuso para novos desenvolvedores que passam em um contexto e depois recebem um erro de tempo de execução. -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. +O maior problema com a API de Runtime é que ela foi projetada para aplicativos que só usam uma única janela. Ao longo do tempo, a demanda por várias janelas cresceu e a API é não adequada a isso. -### Thoughts on the v3 API +### Pensamentos na API v3 -Wouldn't it be great if we could do something like this? +Não seria ótimo se pudéssemos fazer algo assim? ```go 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: +Esta abordagem programática é muito mais intuitiva e permite que o desenvolvedor interaja com os elementos do aplicativo diretamente. Todos os métodos atuais de tempo de execução para o windows seriam simplesmente métodos no objeto da janela. Para os outros métodos de execução, poderíamos mover eles para o objeto do aplicativo assim: ```go app := wails.NewApplication(options.App{}) @@ -94,7 +94,7 @@ app.NewInfoDialog(options.InfoDialog{}) 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): +Esta é uma API muito mais poderosa que permitirá a criação de aplicações mais complexas. Ele também permite a criação de múltiplas janelas, [o recurso mais votado para cima no GitHub](https://github.com/wailsapp/wails/issues/1480): ```go func main() { @@ -113,72 +113,72 @@ func main() { } ``` -### Bindings generation +### Geração de Atalhos -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. +Uma das principais características das Wails é gerar ligações para seus métodos Go para que possam ser chamadas a partir de Javascript. O método atual para fazer isso é um pouco hackeado. Ele envolve construir o aplicativo com uma bandeira especial e, em seguida, executar o binário resultante que usa reflexão para determinar o que foi vinculado. Isso leva a um pouco de galinha e ovo situação: você não pode construir o aplicativo sem as ligações e não pode gerar o vinculações sem compilar o aplicativo. Há muitas maneiras em torno disso, mas a melhor seria não usar essa abordagem de todo. -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. +Houve uma série de tentativas de escrever um analisador estático para projetos Wails, mas eles não chegaram muito longe. Em tempos mais recentes, tornou-se um pouco mais fácil fazer isso com mais material disponível sobre o assunto. -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. +Comparada à reflexão, a abordagem AST é muito mais rápida, porém é significativamente mais complicado. Para começar, podemos precisar impor certas restrições de como especificar ligações no código. O objetivo é suportar os casos de uso mais comuns e, em seguida, expandir mais tarde. -### The Build System +### O Sistema de Compilação -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: -- Builds the backend binary for bindings and generates the bindings -- Installs the frontend dependencies -- Builds the frontend assets -- Determines if the application icon is present and if so, embeds it -- Builds the final binary -- 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` -- If compression is required, it compresses the binary with UPX -- Determines if this binary is to be packaged and if so: - - Ensures the icon and application manifest are compiled into the binary (Windows) - - Builds out the application bundle, generates the icon bundle and copies it, the binary and Info.plist to the application bundle (Mac) -- If an NSIS installer is required, it builds it +Como a abordagem declarativa para a API, o sistema de compilação foi criado para ocultar as complexidades da construção de um aplicativo desktop. Quando você executa `wails build`, ele faz um muitas coisas nos bastidores: +- Constrói o binário de back-end para ligações e gera as ligações +- Instala as dependências de frontend +- Constrói os assets do frontend +- Determina se o ícone da aplicação está presente e, se sim, incorpora-o +- Constrói o binário final +- Se a compilação for para `darwin/universal` compila 2 binários, um para `darwin/amd64` e um para `darwin/arm64` e então cria um binário gordo usando `lipo` +- Se a compressão é necessária, ela compacta o binário com UPX +- Determina se este binário deve ser empacotado e, se isso acontecer: + - Garante que o ícone e manifesto da aplicação são compilados em binário (Windows) + - Constrói o pacote de aplicativos, gera o pacote de ícones e copia-lo, o binário e o Info.plist para o pacote de aplicações (Mac) +- Se um instalador do NSIS for necessário, ele será compilado -This entire process, whilst very powerful, is also very opaque. It is very difficult to customise it and it is very difficult to debug. +Todo este processo, apesar de muito poderoso, é também muito opaco. É muito difícil personalize-o e é muito difícil de depurar. -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. +Para abordar esta questão na v3, gostaria de passar para um sistema de construção que existe fora das Wails. Depois de usar [Tarefa](https://taskfile.dev/) por um tempo, eu sou um grande fã dela. É uma ótima ferramenta para configurar sistemas de construção e deve ser razoavelmente familiar para qualquer um que tenha usado Makefiles. -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. +O sistema de compilação seria configurado usando um arquivo `Taskfile.yml` que seria gerado por padrão com qualquer um dos modelos suportados. Isto teria todas as etapas necessárias para realizar todas as tarefas atuais, como construir ou embalar a aplicação, permitindo fácil personalização. -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. +É muito difícil personalizar e é muito difícil de purificar. Isso significa que você ainda pode usar `wails build` e ele fará tudo o que faz hoje. No entanto, se você deseja personalizar o processo de construção, você pode fazê-lo editando o arquivo `Taskfile.yml`. Isso também significa que você pode facilmente entender as etapas de compilação e usar seu próprio sistema de compilação se desejar. -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. +A peça que falta no quebra-cabeça da construção são as operações atómicas no processo de construção, como geração, compactação e empacotamento de ícones. Para exigir um monte de ferramentas externas não seria uma ótima experiência para o desenvolvedor. Para resolver isso, a CLI do Wails fornecerá todos esses recursos como parte da CLI. Isso significa que as compilações ainda funcionam como esperado, sem ferramenta externa extra, no entanto você pode substituir qualquer passo da compilação por qualquer ferramenta que você goste. -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. +Este será um sistema de compilação muito mais transparente que permitirá uma personalização mais fácil e resolverá muitas das questões que foram levantadas em torno dele. -## The Payoff +## A Recompensa -These positive changes will be a huge benefit to the project: -- The new API will be much more intuitive and will allow for more complex applications to be built. -- Using static analysis for bindings generation will be much faster and reduce a lot of the complexity around the current process. -- Using an established, external build system will make the build process completely transparent, allowing for powerful customisation. +Estas mudanças positivas serão um grande benefício para o projeto: +- A nova API será muito mais intuitiva e permitirá a criação de aplicativos mais complexos. +- Usar análise estática para geração de ligações será muito mais rápido e reduzirá muito da complexidade em torno do processo atual. +- Usando um sistema de compilação externa estabelecido tornará o processo de construção completamente transparente, permitindo uma personalização poderosa. -Benefits to the project maintainers are: +Os benefícios para os mantenedores do projeto são: -- The new API will be much easier to maintain and adapt to new features and platforms. -- 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. -- Better separation of concerns within the project. This will make it easier to add new features and platforms. +- A nova API será muito mais fácil de manter e adaptar a novos recursos e plataformas. +- O novo sistema de construção será muito mais fácil de manter e alargar. Espero que isto conduza a um novo ecossistema de gasodutos de construção orientados pela comunidade. +- Melhor separação das preocupações no âmbito do projecto. Isso facilitará a adição de novos recursos e plataformas. -## The Plan +## O Plano -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. +Muitos dos experimentos já foram feitos e estão bons. Não há um cronograma atual para este trabalho, mas espero que até o final do primeiro trimestre de 2023, haja será uma versão alfa para Mac para permitir que a comunidade teste, experimente e dar uma resposta. -## Summary +## Resumo -- 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. -- The build system is opaque and difficult to customise so we will move to an external build system which will open it all up. -- 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. +- A API v2 é declarativa, esconde muito do desenvolvedor e não é adequada para recursos, como múltiplas janelas. Será criada uma nova API que será mais simples, intuitiva e mais poderosa. +- O sistema de construção é opaco e difícil de personalizar, pelo que passaremos a um sistema de construção externa que o irá abrir. +- A geração de bindings é lenta e complexa, pelo que avançaremos para uma análise estática, que removerá grande parte da complexidade do método atual. -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. +Tem havido muito trabalho colocado nas entranhas da v2 e é sólido. Agora é hora de abordar a camada acima dela e torná-la uma experiência muito melhor para o desenvolvedor. -I hope you are as excited about this as I am. I'm looking forward to hearing your thoughts and feedback. +Espero que você esteja tão empolgado com isso quanto eu. Estou ansioso em ouvir os seus pensamentos e sugestões. -Regards, +Cumprimentos, ‐ Lea -PS: If you or your company find Wails useful, please consider [sponsoring the project](https://github.com/sponsors/leaanthony). Thanks! +PS: Se você ou sua empresa consideram o Wails útil, considere [patrocinar o projeto](https://github.com/sponsors/leaanthony). Obrigado! -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. \ No newline at end of file +PPS: Sim, esse é um genuíno screenshot de um aplicativo com várias janelas construído com Wails. Não é uma simulação. É real. É impressionante. Está chegando. \ No newline at end of file diff --git a/website/i18n/pt/docusaurus-plugin-content-docs/current/community/links.mdx b/website/i18n/pt/docusaurus-plugin-content-docs/current/community/links.mdx index 58bc9761afd..006ff61ed06 100644 --- a/website/i18n/pt/docusaurus-plugin-content-docs/current/community/links.mdx +++ b/website/i18n/pt/docusaurus-plugin-content-docs/current/community/links.mdx @@ -12,7 +12,7 @@ A [lista definitiva](https://github.com/wailsapp/awesome-wails) dos links relaci ## Canais de Suporte -- [Wails Discord Server](https://discord.gg/JDdSxwjhGf) +- [Servidor do Discord Wails](https://discord.gg/JDdSxwjhGf) - [Github Issues](https://github.com/wailsapp/wails/issues) - [v2 Beta Discussion Board](https://github.com/wailsapp/wails/discussions/828) diff --git a/website/i18n/pt/docusaurus-plugin-content-docs/current/community/showcase/bulletinboard.mdx b/website/i18n/pt/docusaurus-plugin-content-docs/current/community/showcase/bulletinboard.mdx index 37be75135ed..6373a7ff16e 100644 --- a/website/i18n/pt/docusaurus-plugin-content-docs/current/community/showcase/bulletinboard.mdx +++ b/website/i18n/pt/docusaurus-plugin-content-docs/current/community/showcase/bulletinboard.mdx @@ -7,4 +7,4 @@

``` -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). +O aplicativo [BulletinBoard](https://github.com/raguay/BulletinBoard) é um quadro de mensagens versitais para mensagens estáticas ou diálogos para obter informações do usuário para um script. Ele tem uma TUI para criar novas caixas de diálogo que podem ser usadas por último para obter informações do usuário. É um design que fica em execução no seu sistema e mostra as informações conforme necessário e depois se esconde. Tenho um processo para assistir um arquivo no meu sistema e enviar o conteúdo para o BulletinBoard quando alterado. Funciona bem com meus fluxos de trabalho. Há também um [fluxo de trabalho Alfred](https://github.com/raguay/MyAlfred/blob/master/Alfred%205/EmailIt.alfredworkflow) para enviar informações ao programa. O fluxo de trabalho também é para trabalhar com [EmailIt](https://github.com/raguay/EmailIt). diff --git a/website/i18n/pt/docusaurus-plugin-content-docs/current/community/showcase/emailit.mdx b/website/i18n/pt/docusaurus-plugin-content-docs/current/community/showcase/emailit.mdx index c1817b70fff..862c304e973 100644 --- a/website/i18n/pt/docusaurus-plugin-content-docs/current/community/showcase/emailit.mdx +++ b/website/i18n/pt/docusaurus-plugin-content-docs/current/community/showcase/emailit.mdx @@ -7,4 +7,4 @@

``` -[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. It’s built using Wails2 and Svelte, and the download is a universal macOS application. +[EmailIt](https://github.com/raguay/EmailIt/) é um programa Wails 2 que é um remetente de e-mail baseado em markdown com apenas nove notepads, scripts para manipular o texto e templates. Ele também tem um terminal para rodar scripts em EmailIt em arquivos do seu sistema. Os scripts e modelos podem ser usados na própria linha de comando ou com as extensões Alfred, Keyboard Maestro, Dropzone ou PopClip. Ele também suporta scripts e temas baixados no formulário GitHub. A documentação não está completa, mas os programas funcionam. É construído usando Wails2 e Svelte, e o download é um aplicativo macOS universal. diff --git a/website/i18n/pt/docusaurus-plugin-content-docs/current/community/showcase/filehound.mdx b/website/i18n/pt/docusaurus-plugin-content-docs/current/community/showcase/filehound.mdx index b8ee7fdf38f..0b5d7fc36ba 100644 --- a/website/i18n/pt/docusaurus-plugin-content-docs/current/community/showcase/filehound.mdx +++ b/website/i18n/pt/docusaurus-plugin-content-docs/current/community/showcase/filehound.mdx @@ -13,4 +13,4 @@ O Utilitário de Exportação FileHound permite os admnistradores FileHound a ca Backend construído com: 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 +Frontend com: Vue 2.6.11 Vuex 3.4.0 TypeScript Tailwind 1.9.6 diff --git a/website/i18n/pt/docusaurus-plugin-content-docs/current/community/showcase/hiposter.mdx b/website/i18n/pt/docusaurus-plugin-content-docs/current/community/showcase/hiposter.mdx index 87e5837d32f..13ed9dc7c53 100644 --- a/website/i18n/pt/docusaurus-plugin-content-docs/current/community/showcase/hiposter.mdx +++ b/website/i18n/pt/docusaurus-plugin-content-docs/current/community/showcase/hiposter.mdx @@ -7,4 +7,4 @@

``` -[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) é uma ferramenta simples e eficiente de teste de cliente http API. Baseado em Wails, Go and sveltejs. diff --git a/website/i18n/pt/docusaurus-plugin-content-docs/current/community/showcase/modalfilemanager.mdx b/website/i18n/pt/docusaurus-plugin-content-docs/current/community/showcase/modalfilemanager.mdx index 8a075d19c8a..9633a7d4a84 100644 --- a/website/i18n/pt/docusaurus-plugin-content-docs/current/community/showcase/modalfilemanager.mdx +++ b/website/i18n/pt/docusaurus-plugin-content-docs/current/community/showcase/modalfilemanager.mdx @@ -9,6 +9,6 @@

``` -[Gerenciador de Arquivos Modal](https://github.com/raguay/ModalFileManager) é um gerenciador de arquivos dual pane usando tecnologias da web. Meu design original foi baseado em NW.js e pode ser encontrado [aqui](https://github.com/raguay/ModalFileManager-NWjs). Esta versão usa o mesmo código de frontend baseado em Svelte (mas foi muito modificado desde a partida do NW.), mas o backend implementado com [Wails 2](https://wails.io/). 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. Está totalmente codificado usando Go e roda muito mais rápido do que as versões anteriores. +[Gerenciador de Arquivos Modal](https://github.com/raguay/ModalFileManager) é um gerenciador de arquivos dual pane usando tecnologias da web. Meu design original foi baseado em NW.js e pode ser encontrado [aqui](https://github.com/raguay/ModalFileManager-NWjs). Esta versão usa o mesmo código de frontend baseado em Svelte (mas foi muito modificado desde a partida do NW.), mas o backend implementado com [Wails 2](https://wails.io/). Ao usar esta implementação, não uso mais comandos de linha de comando `rm`, `cp`, etc., mas um git install deve estar no sistema para baixar temas e extensões. Está totalmente codificado usando Go e roda muito mais rápido do que as versões anteriores. -Este gerenciador de arquivos é projetado em torno do mesmo princípio do Vim: uma ação controlada pelo teclado. O número de estados não é fixo, mas muito programável. Portanto, um número infinito de configurações de teclado pode ser criado e usado. Esta é a principal diferença em relação a outros gerenciadores de arquivos. There are themes and extensions available to download from GitHub. +Este gerenciador de arquivos é projetado em torno do mesmo princípio do Vim: uma ação controlada pelo teclado. O número de estados não é fixo, mas muito programável. Portanto, um número infinito de configurações de teclado pode ser criado e usado. Esta é a principal diferença em relação a outros gerenciadores de arquivos. Existem temas e extensões disponíveis para download do GitHub. diff --git a/website/i18n/pt/docusaurus-plugin-content-docs/current/community/showcase/scriptbar.mdx b/website/i18n/pt/docusaurus-plugin-content-docs/current/community/showcase/scriptbar.mdx index 066086458b0..335e360e37a 100644 --- a/website/i18n/pt/docusaurus-plugin-content-docs/current/community/showcase/scriptbar.mdx +++ b/website/i18n/pt/docusaurus-plugin-content-docs/current/community/showcase/scriptbar.mdx @@ -7,4 +7,4 @@

``` -[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. Também exibe a saída de scripts no seu sistema. ScriptBar não os coloca na barra de menus, mas os tenha todos em uma janela convidada para fácil visualização. Você pode ter várias abas para ter muitas coisas diferentes mostradas. Você também pode manter os links para os sites mais visitados. +[ScriptBar](https://GitHub.com/raguay/ScriptBarApp) é um programa que mostra a saída dos scripts ou o servidor [Node-Red](https://nodered.org). Ele executa scripts definidos no programa EmailIt e mostra a saída. Scripts de xBar ou TextBar podem ser usados, mas atualmente em scripts da TextBar funcionam bem. Também exibe a saída de scripts no seu sistema. ScriptBar não os coloca na barra de menus, mas os tenha todos em uma janela convidada para fácil visualização. Você pode ter várias abas para ter muitas coisas diferentes mostradas. Você também pode manter os links para os sites mais visitados. diff --git a/website/i18n/pt/docusaurus-plugin-content-docs/current/community/showcase/warmine.mdx b/website/i18n/pt/docusaurus-plugin-content-docs/current/community/showcase/warmine.mdx index 950dc3f3db1..c56880f0e19 100644 --- a/website/i18n/pt/docusaurus-plugin-content-docs/current/community/showcase/warmine.mdx +++ b/website/i18n/pt/docusaurus-plugin-content-docs/current/community/showcase/warmine.mdx @@ -1,4 +1,4 @@ -# Minecraft launcher for WarMine +# Launcher Minecraft para WarMine ```mdx-code-block

@@ -12,8 +12,8 @@

``` -[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 para WarMine](https://warmine.ru/) é uma aplicação Wails que permite que você entre nos servidores de jogos modificados facilmente e gerencie suas contas de jogo. -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. +O Launcher baixa os arquivos do jogo, verifica sua integridade e lança o jogo com uma grande variedade de opções de personalização para os argumentos de lançamento pelo backend. -Frontend is written in Svelte, whole launcher fits in 9MB and supports Windows 7-11. +Frontend está escrito em Svelte, todo o launcher se enquadra em 9MB e suporta Windows 7-11. diff --git a/website/i18n/pt/docusaurus-plugin-content-docs/current/community/templates.mdx b/website/i18n/pt/docusaurus-plugin-content-docs/current/community/templates.mdx index a019ec078dc..5fab64fd42a 100644 --- a/website/i18n/pt/docusaurus-plugin-content-docs/current/community/templates.mdx +++ b/website/i18n/pt/docusaurus-plugin-content-docs/current/community/templates.mdx @@ -25,13 +25,13 @@ Se você não tiver certeza sobre um template, inspecione `package.json` e `wail - [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-vite-vue-ts](https://github.com/codydbentley/wails-vite-vue-ts) - Vue 3 TypeScript with Vite (and instructions to add features) - [wails-vite-vue-the-works](https://github.com/codydbentley/wails-vite-vue-the-works) - Vue 3 TypeScript with Vite, Vuex, Vue Router, Sass, and ESLint + Prettier -- [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-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 <script setup>) -- [wails-template-naive](https://github.com/tk103331/wails-template-naive) - Wails template based on Naive UI (A Vue 3 Component Library) +- [wails-template-quasar-js](https://github.com/sgosiaco/wails-template-quasar-js) - Um template usando JavaScript + Quasar V2 (Vue 3, Vite, Sass, Pinia, ESLint, Prettier) +- [wails-template-quasar-ts](https://github.com/sgosiaco/wails-template-quasar-ts) - Um modelo usando TypeScript + Quasar V2 (Vue 3, Vite, Sass, Pinia, ESLint, Prettier, API de composição com <configuração de script>) +- [wails-template-naive](https://github.com/tk103331/wails-template-naive) - Modelo de ervas baseado em Naive UI (biblioteca de componentes Vue 3) ## Angular -- [wails-template-angular](https://github.com/mateothegreat/wails-template-angular) - Angular 15+ action packed & ready to roll to production. +- [A-modelo de wails-angular](https://github.com/mateothegreat/wails-template-angular) - ação Angular 15 + compactada & pronta para ser rolada para produção. - [wails-angular-template](https://github.com/TAINCER/wails-angular-template) - Angular with TypeScript, Sass, Hot-Reload, Code-Splitting and i18n ## React @@ -40,26 +40,30 @@ Se você não tiver certeza sobre um template, inspecione `package.json` e `wail - [wails-react-template](https://github.com/flin7/wails-react-template) - A minimal template for React that supports live development - [wails-template-nextjs](https://github.com/LGiki/wails-template-nextjs) - A template using Next.js and TypeScript - [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-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) - Um modelo com Vite, React, TypeScript, TailwindCSS, e shadcn/ui ## Svelte - [wails-svelte-template](https://github.com/raitonoberu/wails-svelte-template) - A template using Svelte - [wails-vite-svelte-template](https://github.com/BillBuilt/wails-vite-svelte-template) - A template using Svelte and Vite - [wails-vite-svelte-tailwind-template](https://github.com/BillBuilt/wails-vite-svelte-tailwind-template) - A template using Svelte and Vite with 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) - Um modelo atualizado usando Svelte v4.2.0 e Vite com TailwindCSS v3.3.3 - [wails-sveltekit-template](https://github.com/h8gi/wails-sveltekit-template) - A template using SvelteKit ## Solid -- [wails-template-vite-solid-ts](https://github.com/xijaja/wails-template-solid-ts) - A template using 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-ts](https://github.com/xijaja/wails-template-solid-ts) - Um modelo usando Sólido + Ts + Vite +- [wails-template-vite-solid-js](https://github.com/xijaja/wails-template-solid-js) - Um modelo usando Sólid + Js + Vite ## 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-template-elm-tailwind](https://github.com/rnice01/wails-template-elm-tailwind) - Combine the powers :muscle: of Elm + Tailwind CSS + Wails! Hot reloading supported. +## 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 + ## Pure 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 diff --git a/website/i18n/pt/docusaurus-plugin-content-docs/current/gettingstarted/development.mdx b/website/i18n/pt/docusaurus-plugin-content-docs/current/gettingstarted/development.mdx index de8bebe77b3..be641d3b98d 100644 --- a/website/i18n/pt/docusaurus-plugin-content-docs/current/gettingstarted/development.mdx +++ b/website/i18n/pt/docusaurus-plugin-content-docs/current/gettingstarted/development.mdx @@ -7,7 +7,7 @@ sidebar_position: 5 Você pode executar sua aplicação no modo de desenvolvimento executando `wails dev` no diretório do seu projeto. Isso fará o seguinte: - Construa seu aplicativo e o execute -- Bind your Go code to the frontend so it can be called from JavaScript +- Vincule seu código Go para o frontend para que ele possa ser chamado a partir de JavaScript - Usando o poder do [Vite](https://vitejs.dev/), observará modificações em seus arquivos Go e reconstruir/re-executar na alteração - Configure um [servidor web](http://localhost:34115) que irá servir seu aplicativo em um navegador. Isso permite usar suas extensões de navegador favoritas. Você pode até mesmo chamar seu código Go do console diff --git a/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/angular.mdx b/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/angular.mdx index 2b6c5a84571..cae0d7f95a5 100644 --- a/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/angular.mdx +++ b/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/angular.mdx @@ -1,10 +1,10 @@ # Angular -Whilst Wails does not have an Angular template, it is possible to use Angular with Wails. +Embora as Wails não tenham um modelo angular, é possível usar Angular com Wails. -## Dev Mode +## Modo Desenvolvedor -To get dev mode working with Angular, you need to add the following to your `wails.json`: +Para que o modo de desenvolvimento funcione com Angular, você precisa adicionar o seguinte ao seu `wails.json`: ```json "frontend:build": "npx ng build", diff --git a/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/application-development.mdx b/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/application-development.mdx index 0d78b9d9a47..f81eae7fa8d 100644 --- a/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/application-development.mdx +++ b/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/application-development.mdx @@ -189,16 +189,16 @@ O servidor de desenvolvimento utiliza uma técnica chamada "debwaring" que signi Alguns frameworks vêm com seu próprio servidor ao vivo, no entanto, eles não serão capazes de tirar proveito das ligações Go/Wails. Neste cenário, é melhor executar um script de observador que reconstrui o projeto no diretório build, que Wails estará assistindo. Por exemplo, veja o modelo padrão do svelte que usa [rollup](https://rollupjs.org/guide/en/). -### Create React App +### Criar Aplicativo React -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`: +O processo para um projeto Create-React-App é um pouco mais complicado. Para ajudar o frontend a recarregar ao vivo a seguinte configuração precisa ser adicionado ao seu `wails.json`: ```json "frontend:dev:watcher": "yarn start", "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: +O comando `frontend: dev:watcher` iniciará o servidor de desenvolvimento Create-React-App (hospedado na porta `3000` normalmente). O comando `frontend: dev:serverUrl` e instrui a Wails a servir assets do servidor de desenvolvimento ao carregar o frontend em vez de a partir da pasta de compilação. Além do acima acima o `index.html` precisa ser atualizado com o seguinte: ```html @@ -208,7 +208,7 @@ The `frontend:dev:watcher` command will start the Create-React-App development s ``` -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. +Isso é necessário pois o comando do observador que reconstrui o frontend impede que o Wails injete os scripts necessários. Isso contorna esse problema garantindo os scripts são sempre injetados. Com esta configuração, `ondas de desenvolvimento` pode ser executado, o que irá construir adequadamente o frontend e o backend com o carregamento de quente ativado. Além disso, ao acessar o aplicativo a partir de um navegador, as ferramentas de desenvolvedor do React agora podem ser usadas em uma versão não minificada do aplicativo para simplificar depuração. Finalmente, para compilações mais rápidas, `wail dev -s` pode ser executado para ignorar o edifício padrão do frontend pelas Wails, pois este é um passo desnecessário. ## Go Module diff --git a/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/crossplatform-build.mdx b/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/crossplatform-build.mdx new file mode 100644 index 00000000000..fd81a974d04 --- /dev/null +++ b/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/crossplatform-build.mdx @@ -0,0 +1,66 @@ +# Crossplatform build with 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. + +An action that facilitates building a Wails app is available at: +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: +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: + +```yaml +name: Wails build + +on: + push: + tags: + # Match any new tag + - '*' + +env: + # Necessary for most environments as build failure can occur due to OOM issues + NODE_OPTIONS: "--max-old-space-size=4096" + +jobs: + build: + strategy: + # Failure in one platform build won't impact the others + fail-fast: false + matrix: + build: + - name: 'App' + platform: 'linux/amd64' + os: 'ubuntu-latest' + - name: 'App' + platform: 'windows/amd64' + os: 'windows-latest' + - name: 'App' + platform: 'darwin/universal' + os: 'macos-latest' + + runs-on: ${{ matrix.build.os }} + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + submodules: recursive + + - name: Build wails + uses: dAppServer/wails-build-action@v2.2 + id: build + with: + build-name: ${{ matrix.build.name }} + build-platform: ${{ matrix.build.platform }} + package: false + go-version: '1.20' +``` + +This example offers opportunities for various enhancements, including: + +- Caching dependencies +- Code signing +- Uploading to platforms like S3, Supbase, etc. +- Injecting secrets as environment variables +- Utilizing environment variables as build variables (such as version variable extracted from the current Git tag) diff --git a/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/dynamic-assets.mdx b/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/dynamic-assets.mdx index 989202e27a6..627bbeb5e36 100644 --- a/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/dynamic-assets.mdx +++ b/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/dynamic-assets.mdx @@ -1,12 +1,12 @@ -# Dynamic Assets +# Recursos Dinâmicos -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. +Se você deseja carregar ou gerar assets para seu frontend de forma dinâmica, você pode conseguir isso usando a opção [AssetsHandler](../reference/options#assetshandler). O AssetsHandler é um `http.Handler` genérico que irá ser chamado para qualquer solicitação não GET no servidor de ativos e para solicitações GET que não podem ser atendidas pelo ativos agrupados porque o arquivo não foi encontrado. -By installing a custom AssetsHandler, you can serve your own assets using a custom asset server. +Ao instalar um AssetsHandler personalizado, você pode servir seus próprios assets usando um servidor de arquivos personalizado. -## Example +## Exemplo -In our example project, we will create a simple assets handler which will load files off disk: +Em nosso projeto de exemplo, vamos criar um gerenciador de arquivos simples que irá carregar arquivos fora do disco: ```go title=main.go {17-36,49} package main @@ -72,7 +72,7 @@ func main() { } ``` -When we run the application in dev mode using `wails dev`, we will see the following output: +Quando executarmos o aplicativo no modo de desenvolvimento usando `wail dev`, veremos a seguinte saída: ``` DEB | [ExternalAssetHandler] Loading 'http://localhost:3001/favicon.ico' @@ -80,15 +80,15 @@ DEB | [ExternalAssetHandler] Loading 'http://localhost:3001/favicon.ico' failed, 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. +Como você pode ver, o manipulador de assets é chamado quando o servidor de assets padrão não consegue servir o arquivo `favicon.ico`. -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: +Se você clicar com o botão direito no aplicativo principal e selecionar "inspeção" para abrir as devtools, você pode testar esta função digitando o seguinte no console: ``` 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: +Isto irá gerar um erro no devtools. Podemos ver que o erro é o que esperamos, retornado por nosso manipulador de ativos personalizados: ```mdx-code-block

@@ -98,7 +98,7 @@ This will generate an error in the devtools. We can see that the error is what w

``` -However, if we request `go.mod`, we will see the following output: +No entanto, se requisitarmos `go.mod`, veremos a seguinte saída: ```mdx-code-block

@@ -106,19 +106,19 @@ However, if we request `go.mod`, we will see the following output:

``` -This technique can be used to load images directly into the page. If we updated our default vanilla template and replaced the logo image: +Esta técnica pode ser usada para carregar imagens diretamente para a página. Se atualizarmos nosso modelo padrão do vanilla e substituirmos a imagem do logotipo: ```html ``` -with: +com: ```html ``` -Then we would see the following: +Veremos então o seguinte: ```mdx-code-block

@@ -131,6 +131,6 @@ Then we would see the following: :::warning -Exposing your filesystem in this way is a security risk. It is recommended that you properly manage access to your filesystem. +Expor seu sistema de arquivos desta forma é um risco à segurança. É recomendável que você gerencie corretamente o acesso ao seu sistema de arquivos. ::: diff --git a/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/file-association.mdx b/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/file-association.mdx new file mode 100644 index 00000000000..b10c66bb373 --- /dev/null +++ b/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/file-association.mdx @@ -0,0 +1,199 @@ +# File Association + +File association feature allows you to associate specific file types with your app so that when users open those files, +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: + +To set up file association, you need to modify your application's wails.json file. +In "info" section add a "fileAssociations" section specifying the file types your app should be associated with. + +For example: + +```json +{ + "info": { + "fileAssociations": [ + { + "ext": "wails", + "name": "Wails", + "description": "Wails Application File", + "iconName": "wailsFileIcon", + "role": "Editor" + }, + { + "ext": "jpg", + "name": "JPEG", + "description": "Image File", + "iconName": "jpegFileIcon", + "role": "Editor" + } + ] + } +} +``` + +| Property | Description | +| :---------- | :------------------------------------------------------------------------------------------------------------------------------------------------- | +| ext | The extension (minus the leading period). e.g. png | +| name | The name. e.g. PNG File | +| 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 | +| description | Windows-only. The description. It is displayed on the `Type` column on Windows Explorer. | +| role | macOS-only. The app’s role with respect to the type. Corresponds to CFBundleTypeRole. | + +## Platform Specifics: + +### 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: + +```go title="main.go" +func main() { + // Create application with options + err := wails.Run(&options.App{ + Title: "wails-open-file", + Width: 1024, + Height: 768, + AssetServer: &assetserver.Options{ + Assets: assets, + }, + BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1}, + Mac: &mac.Options{ + OnFileOpen: func(filePaths []string) { println(filestring) }, + }, + Bind: []interface{}{ + app, + }, + }) + + if err != nil { + println("Error:", err.Error()) + } +} +``` + +### Windows + +On Windows file association is supported only with NSIS installer. During installation, the installer will create a +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" +func main() { + argsWithoutProg := os.Args[1:] + + if len(argsWithoutProg) != 0 { + println("launchArgs", argsWithoutProg) + } +} +``` + +### Linux + +Currently, Wails doesn't support bundling for Linux. So, you need to create file associations manually. +For example if you distribute your app as a .deb package, you can create file associations by adding required files in you bundle. +You can use [nfpm](https://nfpm.goreleaser.com/) to create .deb package for your app. + +1. Create a .desktop file for your app and specify file associations there. Example: + +```ini +[Desktop Entry] +Categories=Office +Exec=/usr/bin/wails-open-file %u +Icon=wails-open-file.png +Name=wails-open-file +Terminal=false +Type=Application +MimeType=application/x-wails;application/x-test +``` + +2. Create mime types file. Example: + +```xml + + + + Wails Application File + + + +``` + +3. Create icons for your file types. SVG icons are recommended. +4. Prepare postInstall/postRemove scripts for your package. Example: + +```sh +# reload mime types to register file associations +update-mime-database /usr/share/mime +# reload desktop database to load app in list of available +update-desktop-database /usr/share/applications +# update icons +update-icon-caches /usr/share/icons/* +``` + +5. Configure nfpm to use your scripts and files. Example: + +```yaml +name: "wails-open-file" +arch: "arm64" +platform: "linux" +version: "1.0.0" +section: "default" +priority: "extra" +maintainer: "FooBarCorp " +description: "Sample Package" +vendor: "FooBarCorp" +homepage: "http://example.com" +license: "MIT" +contents: +- src: ../bin/wails-open-file + dst: /usr/bin/wails-open-file +- src: ./main.desktop + dst: /usr/share/applications/wails-open-file.desktop +- src: ./application-wails-mime.xml + dst: /usr/share/mime/packages/application-x-wails.xml +- src: ./application-test-mime.xml + dst: /usr/share/mime/packages/application-x-test.xml +- src: ../appicon.svg + dst: /usr/share/icons/hicolor/scalable/apps/wails-open-file.svg +- src: ../wailsFileIcon.svg + dst: /usr/share/icons/hicolor/scalable/mimetypes/application-x-wails.svg +- src: ../testFileIcon.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 +- src: ../appicon.svg + dst: /usr/share/icons/Yaru/scalable/apps/wails-open-file.svg +- src: ../wailsFileIcon.svg + dst: /usr/share/icons/Yaru/scalable/mimetypes/application-x-wails.svg +- src: ../testFileIcon.svg + dst: /usr/share/icons/Yaru/scalable/mimetypes/application-x-test.svg +scripts: + postinstall: ./postInstall.sh + postremove: ./postRemove.sh +``` + +6. Build your .deb package using nfpm: + +```sh +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, + 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" +func main() { + argsWithoutProg := os.Args[1:] + + if len(argsWithoutProg) != 0 { + println("launchArgs", argsWithoutProg) + } +} +``` + +## Limitations: + +On Windows and Linux when associated file is opened, new instance of your app is launched. +Currently, Wails doesn't support opening files in already running app. There is plugin for single instance support for v3 in development. diff --git a/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/frameless.mdx b/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/frameless.mdx index 3845736f427..430f53a6afc 100644 --- a/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/frameless.mdx +++ b/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/frameless.mdx @@ -1,8 +1,8 @@ -# Frameless Applications +# Aplicações sem frames -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). +O Wails suporta aplicativos que não possuem frames. Isso pode ser conseguido usando o campo [sem frameless](../reference/options.mdx#frameless) no [Application Options](../reference/options.mdx#application-options). -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 oferece uma solução simples para arrastar a janela: qualquer elemento HTML que tenha o estilo CSS `--wails-draggable:drag` irá atuar como uma "alça de arrastar". Esta propriedade se aplica a todos os elementos filhos. Se você precisar indicar que um elemento aninhado não deve arrastar, então use o atributo '--wails-draggable:no-drag' nesse elemento. ```html @@ -23,7 +23,7 @@ Wails offers a simple solution for dragging the window: Any HTML element that ha ``` -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: +Para alguns projetos, usar uma variável CSS pode não ser possível devido a um estilo dinâmico. Neste caso, você pode usar o aplicativo `CSSDragProperty` e `CSSDragValue` opções para definir uma propriedade e valor que serão usados para indicar regiões arrastáveis: ```go title=main.go package main @@ -80,8 +80,8 @@ func main() { ``` -:::info Fullscreen +:::info Tela Cheia -If you allow your application to go fullscreen, this drag functionality will be disabled. +Se você permitir que seu aplicativo vá para tela cheia, esta funcionalidade de arrastar será desativada. ::: diff --git a/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/local-development.mdx b/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/local-development.mdx index 4ba1f34c37d..4ba06231463 100644 --- a/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/local-development.mdx +++ b/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/local-development.mdx @@ -1,36 +1,36 @@ -# Local Development +# Desenvolvimento Local -## Overview +## Visão geral -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: +Os dispositivos estão em constante desenvolvimento e novos lançamentos são regularmente "marcados". Isso geralmente acontece quando todo o código no `master` foi testado e confirmado funcionando. Se você precisar de uma correção de bug ou recurso que ainda não foi lançado, é possível usar a versão mais recente "bleeding edge" seguindo as seguintes etapas: - `git clone https://github.com/wailsapp/wails` - `cd wails/v2/cmd/wails` - `go install` -NOTE: The directory that you cloned the project into will now be called "clonedir". +NOTA: O diretório para o qual você clonou o projeto será agora chamado de "clonedir". -The Wails CLI will now be at the very latest version. +A CLI do Wails estará na versão mais recente. -### Updating your project +### Atualizando seu projeto -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: +Para atualizar projetos para usar a versão mais recente da biblioteca Wails, atualize o `do projeto. od` e certifique-se que a seguinte linha está no final do arquivo: `replace github.com/wailsapp/wails/v2 => ` -Example: +Exemplo: -On Windows: `replace github.com/wailsapp/wails/v2 => C:\Users\leaan\Documents\wails-v2-beta\wails\v2` +Windows: `substitua 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` +Em 'nix: `substitui github.com/wailsapp/wails/v2 => /home/me/projects/wails/v2` -To revert to a stable version, run: +Para reverter para uma versão estável, execute: `go install github.com/wailsapp/wails/v2/cmd/wails@latest` -## Testing a Branch +## Testando uma Branch -If you want to test a branch, follow the instructions above, but ensure you switch the branch you want to test before installing: +Se você deseja testar um branch, siga as instruções acima, mas certifique-se de alternar o branch que você deseja testar antes de instalar: - `git clone https://github.com/wailsapp/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` - `go install` -Make sure you [update your project](#updating-your-project) as described above. +Certifique-se de [atualizar seu projeto](#updating-your-project) conforme descrito acima. -## Testing a PR +## Testando uma 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: +Se você deseja testar um branch, siga as instruções acima, mas certifique-se de alternar o branch que você deseja testar antes de instalar. Por favor, substitua `[IDofThePR]` pelo ID do PR mostrado no github.com: - `git clone https://github.com/wailsapp/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` - `go install` -Make sure you [update your project](#updating-your-project) as described above. +Certifique-se de [atualizar seu projeto](#updating-your-project) conforme descrito acima. diff --git a/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/mac-appstore.mdx b/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/mac-appstore.mdx index 961595711c7..4b7b589c1a4 100644 --- a/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/mac-appstore.mdx +++ b/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/mac-appstore.mdx @@ -1,42 +1,42 @@ -# Mac App Store Guide +# Guia para Mac App Store -This page gives a brief overview of how to submit your Wails App to the Mac App Store. +Esta página dá uma breve visão geral de como enviar seu App Wails para a Mac App Store. -## Prerequisites +## Pré-requisitos -- 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 -- You will need to have your Certificates, Identifiers, and App created on the developer portal. More on this below -- Xcode command line tools will need to be installed on your local machine +- Você precisará ter uma conta para o Apple Develop. Encontre mais informações no site [do Programa de Desenvolvedor Apple](https://developer.apple.com/support/compare-memberships/) +- Você precisará ter seus Certificados, Identificadores e App criados no portal de desenvolvimento. Mais sobre isto abaixo +- Ferramentas de linha de comando Xcode precisarão ser instaladas na sua máquina local -#### Create Certificates and Identifiers +#### Criar certificados e identificadores -1. Go to your [Apple Developer Account](https://developer.apple.com/account/) -2. Under `Certificates, Identifiers & Profiles`, click `Identifiers` and Register a New App ID. Use the 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. +1. Vá para sua [Conta de desenvolvedor Apple](https://developer.apple.com/account/) +2. Sob `Certificados, Identificadores & Perfis`, clique em `Identificadores` e Registrar um Novo App ID. Use o formato (com.exemplo.app) +3. Sob a mesma página, clique `Certificados` e gere novos Certificados para a Distribuição da Loja de Aplicativos Mac. Baixe-os e importe os certificados para o Keychain em sua máquina local. -#### Create App Submission +#### Criar Envio de App -1. Go to the [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 -3. Populate your app with the correct screen shots, descriptions, etc. as required by Apple -4. Create a new version of your app +1. Ir para [App Store Connect Site](https://appstoreconnect.apple.com/apps) +2. Registre um novo aplicativo e vincule o ID do pacote que você criou no passo anterior +3. Preencher seu aplicativo com as capturas de tela corretas, descrições, etc. conforme exigido pela Apple +4. Criar uma nova versão do seu aplicativo -#### Create Provisioning Profile -1. Go to the [Apple Developer Profiles](https://developer.apple.com/account/resources/profiles/list) page -2. Add a new provisioning profile for Mac App Store Distribution -3. Set the Profile Type as Mac and select the App ID for the application created above -4. Select the Mac App Distribution certificate -5. Name the Provisioning Profile embedded and download the created profile. +#### Criar perfil de provisionamento +1. Vá para a página [Apple Developer Profiles](https://developer.apple.com/account/resources/profiles/list) +2. Adicionar um novo perfil de provisionamento para Mac App Store de distribuição +3. Defina o tipo de perfil como Mac e selecione o ID do aplicativo criado acima +4. Selecione o certificado de Distribuição de Aplicativos Mac +5. Nomeie o Perfil de Provisão incorporado e baixe o perfil criado. -## Mac App Store Process +## Guia para Mac App Store -#### Enable Apple's App Sandbox +#### Ativar a App Sandbox da Apple -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`. +Os aplicativos enviados para Mac App Store devem ser executados na [App Sandbox](https://developer.apple.com/app-sandboxing/) da Apple. Você deve criar um arquivo `entitlements.plist` para que isso funcione. A recomendação é criar este arquivo sob este caminho `{PROJECT_DIR}/build/darwin/entitlements.plist`. -**Example Entitlements File** +**Exemplo de arquivo de direitos** -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. +Este é um exemplo de titularidade de arquivo do aplicativo [RiftShare](https://github.com/achhabra2/riftshare). Para referência, por favor coloque os direitos que seu aplicativo exigir. Consulte [este site](https://developer.apple.com/documentation/bundleresources/entitlements) para obter mais informações. Você precisará substituir a ID da Equipe e o Nome da Aplicação pelos que você se registrou acima. ```xml title="entitlements.plist" @@ -61,13 +61,13 @@ This is an example entitlements file from the [RiftShare](https://github.com/ach ``` -**Add the Embedded Provisioning Profile** The Provisioning Profile created above needs to be added to the root of the applicaton. It needs to be named embedded.provisionprofile. +**Adicionar Perfil de Provisão Embutido** O Perfil de Provisionamento criado acima precisa ser adicionado à raiz da aplicação. Precisa ser nomeado como embedded.provisionprofile. -#### Build and Sign the App Package +#### Construa e assine o Pacote de Aplicativos -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. +O seguinte é um exemplo de script para construir e assinar seu aplicativo para o envio da Mac App Store. Ele presume que você está executando o script do diretório do seu projeto raiz. -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. +Observe que os certificados para a assinatura do aplicativo e a assinatura do instalador são diferentes. Certifique-se de que ambos são importados para o Keychain. Encontre as sequências de caracteres no Keychain e insira-as abaixo. Preencha os nomes do seu certificado e o nome do app abaixo. Executar o seguinte script irá gerar um arquivo `assinado app.pkg` no diretório raiz do seu aplicativo. ```bash title="macappstore-build.sh" #!/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 ``` -#### Upload App Bundle +#### Enviar pacote de aplicativos -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. +Você precisará enviar o arquivo do pacote gerado e associá-lo à sua Aplicação antes de poder enviá-lo para revisão. -1. Download the [Transporter App](https://apps.apple.com/us/app/transporter/id1450874784) from the Mac App Store -2. Open it and sign in with your Apple ID -3. Click the + sign and select the `APP_NAME.pkg` file that you generated in the previous step. Upload it -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. +1. Baixe o [aplicativo Transporter](https://apps.apple.com/us/app/transporter/id1450874784) na Mac App Store +2. Abra e inicie sessão com a sua Apple ID +3. Clique no sinal + e selecione o arquivo `APP_NAME.pkg` que você gerou na etapa anterior. Carregar isto +4. Volte para [Loja de Apps Conectar](https://appstoreconnect.apple.com/apps) e navegue de volta para a submissão de seu aplicativo. Selecione a versão que você está pronto para disponibilizar na App Store. Em `Build` selecione o pacote que você enviou via Transporter. -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. +É isso! Agora você pode usar o site para enviar seu Aplicativo para análise. Após alguns dias úteis, se tudo correr bem, você verá seu App ao vivo na Mac App Store. diff --git a/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/migrating.mdx b/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/migrating.mdx index 7123cbe6b60..a874b03f4f5 100644 --- a/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/migrating.mdx +++ b/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/migrating.mdx @@ -1,14 +1,14 @@ -# Migrating from v1 +# Migrando da v1 -## Overview +## Visão geral -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 é uma mudança significativa em relação à v1. Este documento visa destacar as mudanças e as etapas na migração de um projeto existente. -### Creating the Application +### Criando uma aplicação Cli -In v1, the main application is created using `wails.CreateApp`, bindings are added with `app.Bind`, then the application is run using `app.Run()`. +Na v1, o aplicativo principal é criado usando `wails.CreateApp`, as ligações são adicionadas com `app.Bind` e, em seguida, o o aplicativo é executado usando `app.Run()`. -Example: +Exemplo: ```go title="v1" app := wails.CreateApp(&wails.AppConfig{ @@ -23,7 +23,7 @@ Example: app.Run() ``` -In v2, there is just a single method, `wails.Run()`, that accepts [application options](../reference/options.mdx#application-options). +Na v2, há apenas um único método, `wails.Run()`, que aceita as opções de aplicação [](../reference/options.mdx#application-options). ```go title="v2" err := wails.Run(&options.App{ @@ -39,9 +39,9 @@ In v2, there is just a single method, `wails.Run()`, that accepts [application o }) ``` -### Binding +### Mapeamento -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): +Na v1, foi possível vincular funções e estruturas arbitrárias. Em v2, foi simplificado apenas para estruturas vinculativas. As instâncias de construção que foram passadas anteriormente para o método `Bind()` na v1, estão agora especificados no campo `Vincular` do as opções de aplicação [](../reference/options.mdx#application-options): ```go title="v1" 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`.`` +Na v1, métodos vinculados estavam disponíveis para o frontend em `window.backend`. Isto mudou para `window.go` -### Application Lifecycle +### Ciclo de vida da Aplicação -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): +Na v1, havia 2 métodos especiais em uma estrutura vinculada: `WailsInit()` e `WailsShutdown()`. Foi substituído por três ganchos de ciclo de vida como parte das [opções do aplicativo](../reference/options.mdx#application-options): - [OnStartup](../reference/options.mdx#onstartup) - [OnShutdown](../reference/options.mdx#onshutdown) - [OnDomReady](../reference/options.mdx#ondomready) -Note: [OnDomReady](../reference/options.mdx#ondomready) replaces the `wails:ready` system event in v1. +Nota: [OnDomReady](../reference/options.mdx#ondomready) substitui o evento do sistema `wails:ready` na v1. -These methods can be standard functions, but a common practice is to have them part of a struct: +Estes métodos podem ser funções padrão, mas uma prática comum é tê-los incluído numa estrutura: ```go title="v2" basic := NewBasicApp() @@ -89,11 +89,11 @@ func (b *Basic) startup(ctx context.Context) { ... ``` -### Runtime +### Tempo de execução -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 the the [Runtime Reference](../reference/runtime/intro.mdx). +O tempo de execução na v2 é muito mais rico que a v1 com suporte para menus, manipulação de janelas e melhores diálogos. A assinatura dos métodos mudou ligeiramente - consulte a [Referência de tempo de execução](../reference/runtime/intro.mdx). -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. +Na v1, o [runtime](../reference/runtime/intro.mdx) estava disponível através de uma struct passada para `WailsInit()`. Em v2, o tempo de execução foi movido para o seu próprio pacote. Cada método no tempo de execução leva o `context.Context` que é passado para o método [OnStartup](../reference/options.mdx#onstartup). ```go title="Runtime Example" package main @@ -114,22 +114,22 @@ func (a *App) startup(ctx context.Context) { ### Assets -The _biggest_ change in v2 is how assets are handled. +A _maior mudança_ na v2 é como os ativos são geridos. -In v1, assets were passed via 2 application options: +Na v1, os ativos foram passados via 2 opções de aplicativo: -- `JS` - The application's JavaScript -- `CSS` - The application's CSS +- `JS` - O JavaScript do aplicativo +- `CSS` - O CSS da aplicação -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. +Isso significava que a responsabilidade de gerar um único arquivo JS e CSS era do desenvolvedor. Isto exigia essencialmente a utilização de embalagens complicadas como o 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`. +Na v2, Wails não faz suposições sobre seus ativos no frontend, como um servidor web. Todos os seus ativos de aplicação são passados para as opções de aplicação como um `embed.FS`. -**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**. +**Isso significa que não há necessidade de agrupar seus ativos, codificar imagens como Base64 ou experimente a arte obscura da configuração do bundler para usar fontes personalizadas**. -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. +Na inicialização, Wails verificará o `embed.FS` fornecido em busca de `index.html` e usará sua localização como caminho raiz para todos os outros ativos do aplicativo - assim como faria um servidor web. -Example: An application has the following project layout. All final assets are placed in the `frontend/dist` directory: +Exemplo: Uma aplicação tem o seguinte layout do projeto. Todos os arquivos finais são colocados no diretório `frontend/dist`: ```shell . @@ -144,7 +144,7 @@ Example: An application has the following project layout. All final assets are p └── wails.json ``` -Those assets may be used by the application by simply creating an `embed.FS`: +Esses ativos podem ser usados pelo aplicativo simplesmente criando um `embed.FS`: ```go title="Assets Example" //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). +Claro, empacotadores podem ser usados se você quiser. O único requisito é passar o diretório final de ativos do aplicativo para Wails usando um `embed.FS` no `Assets` chave das [opções do aplicativo](../reference/options.mdx#application-options). -### Project Configuration +### Configuração do Projeto -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. +Na v1, a configuração do projeto foi armazenada no arquivo `project.json` na raiz do projeto. Na v2, a configuração do projeto é armazenada no arquivo `wails.json` na raiz do projeto. -The format of the file is slightly different. Here is a comparison: +O formato do arquivo é ligeiramente diferente. Aqui está uma comparação:

@@ -185,7 +185,7 @@ The format of the file is slightly different. Here is a comparison: | frontend / serve | | Removed | | tags | | Removed | | | wailsjsdir | The directory to generate wailsjs modules | -| | assetdir | The directory of the compiled frontend assets for `dev` mode. This is normally inferred and could be left empty. | -| | 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. | +| | assetdir | The directory of the compiled frontend assets for `dev` mode. Normalmente, isto é inferido e pode ser deixado vazio. | +| | reloaddirs | Lista separada por vírgulas de diretórios adicionais para observar alterações e acionar recarregamentos no modo `dev`. Isso só é necessário para algumas configurações de ativos mais avançadas. |

diff --git a/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/mouse-buttons.mdx b/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/mouse-buttons.mdx index 4a3de2a61b5..054ac263bd1 100644 --- a/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/mouse-buttons.mdx +++ b/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/mouse-buttons.mdx @@ -1,6 +1,6 @@ -# Mouse Buttons +# Botões do Mouse -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: +As Wails runtime interceptam cliques do mouse para determinar se uma janela precisa ser redimensionada ou uma janela precisa ser movida. Foi perguntado como detectar quando um clique do mouse ocorreu, porque `window.onclick` não relata os botões do mouse corretamente. O código a seguir mostra como detectar cliques do mouse: ```javascript window.addEventListener("mousedown", handleMouseButtonDown); diff --git a/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/obfuscated.mdx b/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/obfuscated.mdx index 21f7875e389..d921a6a5fc2 100644 --- a/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/obfuscated.mdx +++ b/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/obfuscated.mdx @@ -1,32 +1,32 @@ -# Obfuscated Builds +# Builds ofuscadas -Wails includes support for obfuscating your application using [garble](https://github.com/burrowers/garble). +Wails inclui suporte para ofuscar a sua aplicação usando [garble](https://github.com/burrowers/garble). -To produce an obfuscated build, you can use the `-obfuscate` flag with the `wails build` command: +Para produzir uma compilação ofuscada, você pode usar o sinalizador `-obfuscate` com o comando `wails build`: ```bash wails build -obfuscated ``` -To customise the obfuscation settings, you can use the `-garbleargs` flag: +Para personalizar a configuração de ofuscação, pode-se utilizar a flag: `-garbleargs`: ```bash wails build -obfuscated -garbleargs "-literals -tiny -seed=myrandomseed" ``` -These settings may be persisted in your [project config](../reference/project-config). +Essas configurações podem estar persistentes na configuração do seu [projeto](../reference/project-config). -## How it works +## Como funciona -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. +Em uma compilação padrão, todos os métodos vinculados estão disponíveis no frontend sob a variável `window.go`. Quando esses métodos são chamados, o método backend correspondente é chamado usando o nome da função totalmente qualificada. Quando usando uma compilação ofuscada, os métodos são vinculados usando um ID em vez de um nome. Os bindings gerados no diretório `wailsjs` usam esses IDs para chamar as funções de backend. :::note -To ensure that your application will work in obfuscated mode, you must use the generated bindings under the `wailsjs` directory in your application. +Para garantir que o seu aplicativo irá funcionar no modo ofuscado, você deve usar os bindings geradas sob o diretório `wailsjs` no seu aplicativo. ::: -## Example +## Exemplo Importing the "Greet" method from the bindings like this: @@ -37,4 +37,4 @@ import { Greet } from "../../wailsjs/go/main/App"; 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. +irá garantir que o método funcionará corretamente no modo ofuscado, como os bindings serão regenerados com IDs e o mecanismo de chamada atualizado. diff --git a/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/overscroll.mdx b/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/overscroll.mdx index 9d1d772d0fb..dcd13f147c3 100644 --- a/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/overscroll.mdx +++ b/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/overscroll.mdx @@ -1,6 +1,6 @@ -# Overscroll +# Rolar demais -[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) é o "efeito de salto" que você às vezes obtém quando você rola além dos limites de conteúdo de uma página. This is common in mobile apps. Isso pode ser desativado usando CSS: ```css html { diff --git a/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/routing.mdx b/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/routing.mdx index 90d06d2872d..550e73a57f4 100644 --- a/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/routing.mdx +++ b/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/routing.mdx @@ -27,7 +27,7 @@ RouterModule.forRoot(routes, { useHash: true }); ## React -The recommended approach for routing in React is [HashRouter](https://reactrouter.com/en/main/router-components/hash-router): +A abordagem recomendada para roteamento em React é [HashRouter](https://reactrouter.com/en/main/router-components/hash-router): ```jsx import { HashRouter } from "react-router-dom"; diff --git a/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/sveltekit.mdx b/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/sveltekit.mdx index 4651c422ed1..8281281f325 100644 --- a/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/sveltekit.mdx +++ b/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/sveltekit.mdx @@ -1,66 +1,66 @@ # SvelteKit -This guide will go into: +Este guia será para: -1. Miminal Installation Steps - The steps needed to get a minimum Wails setup working for SvelteKit. -2. Install Script - Bash script for accomplishing the Minimal Installation Steps with optional Wails branding. -3. Important Notes - Issues that can be encountered when using SvelteKit + Wails and fixes. +1. Passos de instalação do Miminal - Os passos necessários para obter uma instalação mínima de Wails funcionando para o SvelteKit. +2. Script de Instalação - Bash script para cumprir os passos de Instalação Mínima com a marca opcional de Wails. +3. Notas importantes - Problemas que podem ser encontrados ao usar o SvelteKit + Wails e correções. -## 1. Minimal Installation Steps +## 1. Passos mínimos de instalação -##### Install Wails for Svelte. +##### Instalar Wails para Svelte. - `wails init -n myapp -t svelte` -##### Delete the svelte frontend. +##### Exclua o front-end do Svelte. -- Navigate into your newly created myapp folder. -- Delete the folder named "frontend" +- Navegue até a pasta myapp recém-criada. +- Excluir a pasta chamada "frontend" -##### While in the Wails project root. Use your favorite package manager and install SvelteKit as the new frontend. Follow the prompts. +##### Enquanto estiver na raiz do projeto Wails. Use o seu gerenciador de pacotes favorito e instale o SvelteKit como o novo frontend. Siga as instruções. - `npm create svelte@latest frontend` -##### Modify wails.json. +##### Modificar o wails.json. -- Add `"wailsjsdir": "./frontend/src/lib",` Do note that this is where your Go and runtime functions will appear. -- Change your package manager frontend here if not using npm. +- Add `"wailsjsdir": "./frontend/src/lib",` Observe que é aqui que suas funções Go e runtime aparecerão. +- Mude o frontend do seu gerenciador de pacotes se não estiver usando npm. -##### Modify main.go. +##### Modificar o main.go. -- The first comment `//go:embed all:frontend/dist` needs to be changed to `//go:embed all:frontend/build` +- O primeiro comentário `//go:embed all:frontend/dist` precisa ser alterado para `//go:embed all:frontend/build` -##### Install/remove dependencies using your favorite package manager. +##### Instalar/remover dependências usando seu gerenciador de pacote favorito. -- Navigate into your "frontend" folder. +- Entre na sua pasta "frontend". - `npm i` - `npm uninstall @sveltejs/adapter-auto` - `npm i -D @sveltejs/adapter-static` -##### Change adapter in svelte.config.js +##### Alterar adaptador em svelte.config.js -- First line of file change `import adapter from '@sveltejs/adapter-auto';` to `import adapter from '@sveltejs/adapter-static';` +- A primeira linha de arquivo altera `import adapter from '@sveltejs/adapter-auto';` to `import adapter from '@sveltejs/adapter-static';` -##### Put SvelteKit into SPA mode with prerendering. +##### Coloque o SvelteKit no modo SPA com pré-renderização. -- Create a file under myapp/frontend/src/routes/ named +layout.ts/+layout.js. -- Add two lines into the newly created file `export const prerender = true` and `export const ssr = false` +- Crie um arquivo sob myapp/frontend/src/routes/ chamado +layout.ts/+layout.js. +- Adicione duas linhas ao recém-criado arquivo `export const prerender = true` e `export const ssr = false` -##### Test installation. +##### Testar instalação. -- Navigate back into the Wails project root (one directory up). -- run `wails dev` -- If the application doesn't run please check through the previous steps. +- Navegue de volta à raiz do projeto Wails (um diretório para cima). +- execute `wails dev` +- Se a aplicação não executar, por favor verifique os passos anteriores. -## 2. Install Script +## 2. Script de Instalação -##### 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. +##### Este Script do Bash faz as etapas listadas acima. Certifique-se de ler o script e de entender o que o script está fazendo no seu computador. -- Create a file sveltekit-wails.sh -- Copy the below code into the new file then save it. -- Make it executable with `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. -- Example usage: `./sveltekit-wails.sh pnpm newapp brand` +- Criar um arquivo sveltekit-wails.sh +- Copie o código abaixo para o novo arquivo e o salve. +- Torná-lo executável com `chmod +x sveltekit-wails.sh` +- A marca é um parâmetro opcional abaixo que adiciona de volta na marca de fregueses. Deixe o terceiro parâmetro em branco para não inserir a marca das Wails. +- Exemplo de uso: `./sveltekit-wails.sh pnpm newapp brand` ##### sveltekit-wails.sh: @@ -96,17 +96,17 @@ cd .. wails dev ``` -## 3. Important Notes +## 3. Notas importantes -##### Server files will cause build failures. +##### Os arquivos do servidor causarão falhas de construção. -- \+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 ou qualquer arquivo com "server" em nome falhará na construção enquanto todas as rotas forem pré-renderizadas. -##### The Wails runtime unloads with full page navigations! +##### O tempo de execução do Wails descarrega com navegações de página inteira! -- Anything that causes full page navigations: `window.location.href = '//'` 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. -- Use `import { goto } from '$app/navigation'` then call `goto('//')` in your +page.svelte. This will prevent a full page navigation. -- If full page navigation can't be prevented the Wails runtime can be added to all pages by adding the below into the `` of myapp/frontend/src/app.html +- Tudo que causa navegações de página completa: `window.location.href = '//'` ou recarga do menu de contexto ao usar wails dev. Isso significa que você pode acabar perdendo a capacidade de chamar qualquer falha no aplicativo em tempo de execução. Há duas formas de trabalhar em torno desta questão. +- Use `import { goto } from '$app/navigation'` e então chame `goto('//')` em sua + page.svelte. Isso impedirá uma navegação de página completa. +- Se a navegação por página inteira não puder ser impedido que o tempo de execução do Wails seja adicionado a todas as páginas, adicionando o abaixo ao `` de myapp/frontend/src/app. Mt ``` @@ -118,17 +118,17 @@ wails dev ``` -See https://wails.io/docs/guides/frontend for more information. +Veja https://wails.io/docs/guides/frontend para mais informações. -##### Inital data can be loaded and refreshed from +page.ts/+page.js to +page.svelte. +##### Os dados de e-mail podem ser carregados e atualizados a partir de +page.ts/+page.js para +page.svelte. -- \+page.ts/+page.js works well with 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. +- \+page.ts/+page.js funciona bem com o load() https://kit.svelte.dev/docs/load#page-data +- invalidateAll() em +page.svelte irá chamar load() de +page.ts/+page.js https://kit.svelte.dev/docs/load#rerunning-load-functions-manual-invalidation. -##### Error Handling +##### Tratamento de erros -- Expected errors using Throw error works in +page.ts/+page.js with a +error.svelte page. https://kit.svelte.dev/docs/errors#expected-errors -- 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. +- Erros esperados usando o erro Throw funcionam em +page.ts/+page.js com uma página +error.svelte. https://kit.svelte.dev/docs/errors#expected-errors +- Erros inesperados farão com que o aplicativo se torne inutilizável. Somente a opção de recuperação (conhecida até agora) de erros inesperados é recarregar o aplicativo. Para fazer isso, crie um arquivo myapp/frontend/src/hooks.client.ts e adicione o código abaixo ao arquivo. ``` import { WindowReloadApp } from '$lib/wailsjs/runtime/runtime' @@ -137,10 +137,10 @@ export async function handleError() { } ``` -##### Using Forms and handling functions +##### Usando formas e funções de manipulação -- The simplest way is to call a function from the form is the standard, bind:value your variables and prevent submission `
` -- 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: +- A maneira mais simples é chamar uma função do formulário é o padrão, vincular:valor suas variáveis e evitar submissão `` +- A maneira mais avançada é use:enhance (aprimoramento progressivo) que permitirá acesso conveniente a formData, formElemento, emissor. A nota importante é sempre cancel() o formulário que impede o comportamento do lado do servidor. https://kit.svelte.dev/docs/form-actions#progressive-enhancement Exemplo: ``` { diff --git a/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/templates.mdx b/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/templates.mdx index 790e3107f04..2ae61796b73 100644 --- a/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/templates.mdx +++ b/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/templates.mdx @@ -1,17 +1,17 @@ # Templates -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 gera projetos a partir de modelos pré-criados. Na v1, este era um conjunto de projetos que estavam sujeitos a sair de moda. No v2, para capacitar a comunidade, alguns novos recursos foram adicionados para os templates: -- Ability to generate projects from [Remote Templates](../reference/cli.mdx#remote-templates) -- Tooling to help create your own templates +- Capacidade de gerar projetos a partir de [Modelos Remotos](../reference/cli.mdx#remote-templates) +- Ferramentas para ajudar a criar seus próprios modelos -## Creating Templates +## Criando Templates -To create a template, you can use the `wails generate template` command. To generate a default template, run: +Para criar um template, você pode usar o comando `wails generate template`. Para gerar um modelo padrão, execute: `wails generate template -name mytemplate` -This creates the directory "mytemplate" with default files: +Isso cria o diretório "mytemplate" com os arquivos padrão: ```shell title=mytemplate/ . @@ -35,31 +35,31 @@ This creates the directory "mytemplate" with default files: `-- wails.tmpl.json ``` -### Template Overview +### Visão Geral do Modelo -The default template consists of the following files and directories: +O modelo padrão consiste nos seguintes arquivos e diretórios: -| Filename / Dir | Description | -| --------------- | -------------------------------------------- | -| NEXTSTEPS.md | Instructions on how to complete the template | -| README.md | The README published with the template | -| app.tmpl.go | `app.go` template file | -| frontend/ | The directory containing frontend assets | -| go.mod.tmpl | `go.mod` template file | -| main.tmpl.go | `main.go` template file | -| template.json | The template metadata | -| wails.tmpl.json | `wails.json` template file | +| Nome do arquivo / diretório | Descrição | +| --------------------------- | -------------------------------------------- | +| NEXTSTEPS.md | Instruções sobre como completar o modelo | +| README.md | O README publicado com o modelo | +| app.tmpl.go | Arquivo de modelo `app.go` | +| frontend/ | O diretório que contém os assets do frontend | +| go.mod.tmpl | Arquivo de modelo `go.mod` | +| main.tmpl.go | Arquivo de modelo `main.go` | +| template.json | Os metadados do modelo | +| wails.tmpl.json | Arquivo de modelo `wails.json` | -At this point it is advisable to follow the steps in `NEXTSTEPS.md`. +Neste ponto é aconselhável seguir os passos em `NEXTSTEPS.md`. -## Creating a Template from an Existing Project +## Criando um Template de um Projeto Existente -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: +É possível criar um modelo a partir de um projeto de frontend existente, passando o caminho para o projeto ao gerar o template. Vamos agora andar sobre como criar um modelo do Vue 3: -- Install the vue cli: `npm install -g @vue/cli` -- Create the default project: `vue create vue3-base` - - Select `Default (Vue 3) ([Vue 3] babel, eslint)` -- After the project has been generated, run: +- Instale o vue cli: `npm install -g @vue/cli` +- Crie o projeto padrão: `vue create vue3-base` + - Selecione `Padrão (Vue 3) ([Vue 3] babel, eslint)` +- Depois que o projeto for gerado, execute: ```shell > 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... ``` -- The template may now be customised as specified in the `NEXTSTEPS.md` file -- Once the files are ready, it can be tested by running: `wails init -n my-vue3-project -t .\wails-vue3-template\` -- To test the new project, run: `cd my-vue3-project` then `wails build` -- Once the project has compiled, run it: `.\build\bin\my-vue3-project.exe` -- You should have a fully functioning Vue3 application: +- O template agora pode ser personalizado conforme especificado no arquivo `NEXTSTEPS.md` +- Uma vez que os arquivos estão prontos, eles podem ser testados executando: `wails init -n my-vue3-project -t .\wails-vue3-template\` +- Para testar o novo projeto, execute: `cd meu-vue3-projeto` e `wails constroem` +- Uma vez que o projeto tenha compilado, execute-o: `.\build\bin\my-vue3-project.exe` +- Você deve ter um aplicativo Vue3 que funcione plenamente: ```mdx-code-block
@@ -86,12 +86,12 @@ Renaming package-lock.json -> package-lock.tmpl.json...
``` -## Publishing Templates +## Publicando Templates -Publishing a template is simply pushing the files to GitHub. The following best practice is encouraged: +A publicação de um template está simplesmente enviando os arquivos para o GitHub. São encorajadas as seguintes melhores práticas: -- Remove any unwanted files and directories (such as `.git`) from your frontend directory -- Ensure that `template.json` is complete, especially `helpurl` -- Push the files to GitHub -- Create a PR on the [Community Templates](../community/templates.mdx) page -- Announce the template on the [Template Announcement](https://github.com/wailsapp/wails/discussions/825) discussion board +- Remova todos os arquivos e diretórios indesejados (como `.git`) do seu diretório no frontend +- Certifique-se de que `template.json` esteja completo, especialmente `helpurl` +- Faça push dos arquivos para o GitHub +- Crie um PR na página [Templates de Comunidade](../community/templates.mdx) +- Anuncie o modelo no fórum de discussão [de Anúncio de Modelo](https://github.com/wailsapp/wails/discussions/825) diff --git a/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/troubleshooting.mdx b/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/troubleshooting.mdx index 5b319f9a447..b4980716836 100644 --- a/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/troubleshooting.mdx +++ b/website/i18n/pt/docusaurus-plugin-content-docs/current/guides/troubleshooting.mdx @@ -1,25 +1,25 @@ -# Troubleshooting +# Resolução de Problemas -An assortment of troubleshooting tips. +Uma variedade de dicas de solução de problemas. -## The `wails` command appears to be missing? +## O comando `wail` parece estar faltando? -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. +Se o sistema está relatando que o comando `wails` está faltando, verifique se você seguiu o guia de instalação do Go corretamente. Normalmente, isso significa que o diretório `go/bin` no diretório inicial do seu usuário não está na variável `PATH` ambiente. Você normalmente também precisará fechar e reabrir qualquer prompt de comando aberto para que as alterações no ambiente feitas pelo instalador sejam refletidas no prompt de comando. -## My application is displaying a white/blank screen +## Meu aplicativo está exibindo uma tela branca/em branco -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: +Verifique se sua aplicação inclui os conteúdos do diretório correto. No seu arquivo `main.go`, você terá algo semelhante ao seguinte código: ```go //go:embed all:frontend/dist var assets embed.FS ``` -Check that `frontend/dist` contains your application assets. +Verifique que `frontend/dist` contém os ativos da aplicação. ### Mac -If this happens on Mac, try adding the following to your `Info.plist`: +Se isso acontecer no Mac, tente adicionar o seguinte ao seu `Info.plist`: ```xml NSAppTransportSecurity @@ -31,9 +31,9 @@ If this happens on Mac, try adding the following to your `Info.plist`: Reference: https://github.com/wailsapp/wails/issues/1504#issuecomment-1174317433 -## Mac application not valid +## Aplicativo Mac inválido -If your built application looks like this in finder: +Se a sua aplicação construída se parece com isso no buscador: ```mdx-code-block

@@ -45,17 +45,17 @@ If your built application looks like this in finder:

``` -it's likely that your application's `info.plist` is invalid. Update the file in `build/.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. +é provável que o `info.plist` do seu aplicativo seja inválido. Atualize o arquivo em `build/.app/Contents/info.plist` e verifique se os dados são válidos, verifique se o nome binário está correto. Para persistir nas alterações, copie o arquivo de volta para o diretório `build/darwin`. -## My application is not displaying the correct icon in Windows Explorer +## Meu aplicativo não está exibindo o ícone correto no Windows Explorer -If your application is not displaying the correct icon, try deleting the hidden `IconCache.db` file located in the `C:\Users\<your username>\AppData\Local` directory. This will force Windows to rebuild the icon cache. +Se seu aplicativo não estiver exibindo o ícone correto, tente excluir o arquivo `IconCache.db` oculto localizado na pasta Diretório `C:\Users\<seu nome de usuário>\AppData\Local`. Isto irá forçar o Windows a reconstruir o cache de ícones. -Source: https://github.com/wailsapp/wails/issues/2360#issuecomment-1556070036 +Reference: https://github.com/wailsapp/wails/issues/2360#issuecomment-1556070036 -## Cannot call backend method from frontend with variadic arguments +## Não é possível chamar o método backend no frontend com argumentos variados -If you have a backend method defined with variadic parameters, eg: +Se você tem um método de backend definido com parâmetros variadicos, por exemplo: ```go 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: +chamar esse método a partir do frontend como isso irá falhar: ```js var msg = "Hello: "; @@ -77,7 +77,7 @@ window.go.main.App.TestFunc(msg, ...args) }); ``` -Workaround: +Gambiarra: ```js var msg = "Hello "; @@ -94,30 +94,30 @@ window.go.main.App.TestFunc(msg, args) Credit: https://github.com/wailsapp/wails/issues/1186 -## I'm having getting proxy errors when trying to install Wails +## Estou recebendo erros de proxy ao tentar instalar o Wails -If you are getting errors like this: +Se você estiver recebendo erros como este: ``` "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: +é provavelmente porque o Proxy oficial Go está sendo bloqueado (usuários na China relataram isto). A solução é configurar o proxy manualmente, por exemplo: ``` go env -w GO111MODULE=on go env -w GOPROXY=https://goproxy.cn,direct ``` -Source: https://github.com/wailsapp/wails/issues/1233 +Reference: https://github.com/wailsapp/wails/issues/1233 -## The generated TypeScript doesn't have the correct types +## O TypeScript gerado não tem os tipos corretos -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). +Às vezes, o TypeScript gerado não tem os tipos corretos. Para mitigar isso, é possível especificar quais tipos devem ser gerados usando a tag de struct `ts_type`. Para mais detalhes do, leia [isto](https://github.com/tkrajina/typescriptify-golang-structs#custom-types). -## When I navigate away from `index.html`, I am unable to call methods on the frontend +## Quando navego longe do `index.html`, não consigo chamar métodos no frontend -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 `` section of any new page you navigate to: +Se você navegar do `index.html` para um novo arquivo html, o contexto será perdido. Isso pode ser corrigido adicionando as seguintes importações para a seção `` de qualquer nova página que você navegar: ```html @@ -126,17 +126,17 @@ If you navigate away from `index.html` to a new html file, the context will be l ``` -Source: https://github.com/wailsapp/wails/discussions/1512 +Reference: https://github.com/wailsapp/wails/discussions/1512 -## I get `too many open files` errors on my Mac when I run `wails dev` +## Eu recebo `muitos arquivos abertos` erros no meu Mac quando eu rodo `wails` -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. +Por padrão, o macOS só permitirá que você abra um máximo de 256 arquivos. Isso pode afetar o comando `wails dev`. Este limite pode ser aumentado em execução: `ulimit -n 1024` no terminal. -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 é [procurando mudar para os fsevents](https://github.com/fsnotify/fsnotify/issues/11) da Apple para Mac. Se isso não estiver concluído em breve, criaremos nossa própria implementação, monitorada [aqui](https://github.com/wailsapp/wails/issues/1733). -## My Mac app gives me weird compilation errors +## Meu aplicativo para Mac me dá erros estranhos de compilação -A few users have reported seeing compilation errors such as the following: +Alguns usuários relataram ver erros de compilação como os seguintes: ```shell # github.com/wailsapp/wails/v2/internal/frontend/desktop/darwin @@ -149,31 +149,53 @@ In file included from /Library/Developer/CommandLineTools/SDKs/MacOSX12.1.sdk/Sy #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. +Isto é _normalmente_ devido a uma incompatibilidade com a versão do sistema operacional que você está executando e a versão das Ferramentas de Comando XCode instalada. Se você vir um erro como este, tente atualizar suas Ferramentas de Linha de Comando XCode para a versão mais recente. -If reinstalling Xcode Command Tools still fails, you can check the path where the toolkit is located using: +Se reinstalar as Ferramentas de Comando Xcode ainda falhar, você pode verificar o caminho onde o kit de ferramentas está usando: `xcode-select -p` -If `/Applications/Xcode.app/Contents/Developer` is displayed, run `sudo xcode-select --switch /Library/Developer/CommandLineTools` +Se `/Applications/Xcode.app/Contents/Developer` for exibido, rode `sudo xcode-select --switch /Library/Developer/CommandLineTools` + +Fontes: https://github.com/wailsapp/wails/issues/1806 and https://github.com/wailsapp/wails/issues/1140#issuecomment-1290446496 + +## My application won't compile on Mac + +Se você estiver recebendo erros como este: + +```shell +l1@m2 GoEasyDesigner % go build -tags dev -gcflags "all=-N -l" +/Users/l1/sdk/go1.20.5/pkg/tool/darwin_arm64/link: running clang failed: exit status 1 +Undefined symbols for architecture arm64: + "_OBJC_CLASS_$_UTType", referenced from: + objc-class-ref in 000016.o +ld: symbol(s) not found for architecture arm64 +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: + +```shell +export CGO_LDFLAGS="-framework UniformTypeIdentifiers" && go build -tags dev -gcflags "all=-N -l" +``` + +Sources: https://github.com/wailsapp/wails/pull/2925#issuecomment-1726828562 -Sources: https://github.com/wailsapp/wails/issues/1806 and https://github.com/wailsapp/wails/issues/1140#issuecomment-1290446496 -- -## Cannot start service: Host version "x.x.x does not match binary version "x.x.x" +## Não foi possível iniciar o serviço: A versão do host "x.x.x não coincide com a versão binária "x.x.x" -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. +É preferível adicionar `frontend/node_modules` e `frontend/package-lock.json` ao seu `.gitignore`. Caso contrário, ao abrir o repositório em outra máquina que pode ter diferentes versões do Node instaladas, talvez você não seja capaz de executar seu aplicativo. -If this does happen, simply delete `frontend/node_modules` and `frontend/package-lock.json` and run your `wails build` or `wails dev` command again. +Se isso acontecer, simplesmente exclua `frontend/node_modules` e `frontend/pacote-lock. soa` e corra os seus wails `constroem` ou `wails dev` comando. -## Build process stuck on "Generating bindings" +## Processo de compilação travado em "Gerando vinculações" -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. +Processo de geração de Bindings executa sua aplicação em um modo especial. Se o aplicativo, intencionalmente ou não intencionalmente, contém um laço infinito (ou seja, não sair após `wails.Run()` terminado), isto pode levar a construção do processo travado na geração do palco de amarras. Por favor, certifique-se de que seu código sai corretamente. -## Mac application flashes white at startup +## Aplicação Mac pisca branco na inicialização -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: +Isto é devido ao plano de fundo padrão do webview ser branco. Se você quiser usar a cor de fundo da janela, você pode tornar o plano de fundo do webview transparente usando a seguinte configuração: ```go err := wails.Run(&options.App{ @@ -185,4 +207,162 @@ This is due to the default background of the webview being white. If you want to WebviewIsTransparent: true, }, }) -``` \ No newline at end of file +``` + +## I get a "Microsoft Edge can't read or write to its data directory" error when running my program as admin on Windows + +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. + +When a Windows machine has two local accounts: + +- Alice, an admin +- Bob, a regular user + +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. + +Wails instructs WebView2 to store user data at the specified `WebviewUserDataPath`. It defaults to `%APPDATA%\[BinaryName.exe]`. + +Because the application is running under Alice's account, `%APPDATA%\[BinaryName.exe]` resolves to `C:\Users\Alice\AppData\Roaming\[BinaryName.exe]`. + +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. + +Possible solution #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: + +```go +//go:build windows + +package sample + +import ( + "golang.org/x/sys/windows" + "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. +func RunAs(path string) error { + verbPtr, _ := syscall.UTF16PtrFromString("runas") + exePtr, _ := syscall.UTF16PtrFromString(path) + cwdPtr, _ := syscall.UTF16PtrFromString("") + argPtr, _ := syscall.UTF16PtrFromString("") + + var showCmd int32 = 1 //SW_NORMAL + + err := windows.ShellExecute(0, verbPtr, exePtr, argPtr, cwdPtr, showCmd) + if err != nil { + return err + } + return nil +} +``` + +Possible solution #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: + +```go +package main + +import ( + "embed" + "os" + "runtime" + + "github.com/fourcorelabs/wintoken" + "github.com/hectane/go-acl" + "github.com/wailsapp/wails/v2" + "github.com/wailsapp/wails/v2/pkg/options" + "github.com/wailsapp/wails/v2/pkg/options/assetserver" + "github.com/wailsapp/wails/v2/pkg/options/windows" +) + +//go:embed all:frontend/dist +var assets embed.FS + +const ( + fixedTokenKey = "SAMPLE_RANDOM_KEY" + fixedTokenVal = "with-fixed-token" + webviewDir = "C:\\ProgramData\\Sample" +) + +func runWithFixedToken() { + println("Re-launching self") + token, err := wintoken.OpenProcessToken(0, wintoken.TokenPrimary) //pass 0 for own process + if err != nil { + panic(err) + } + defer token.Close() + + token.EnableTokenPrivileges([]string{ + "SeBackupPrivilege", + "SeDebugPrivilege", + "SeRestorePrivilege", + }) + + cmd := exec.Command(os.Args[0]) + cmd.Args = os.Args + cmd.Env = os.Environ() + cmd.Env = append(cmd.Env, fmt.Sprintf("%v=%v", fixedTokenKey, fixedTokenVal)) + cmd.Stdin = os.Stdin + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + cmd.SysProcAttr = &syscall.SysProcAttr{Token: syscall.Token(token.Token())} + if err := cmd.Run(); err != nil { + println("Error after launching self:", err) + os.Exit(1) + } + println("Clean self launch :)") + os.Exit(0) +} + +func main() { + if runtime.GOOS == "windows" && os.Getenv(fixedTokenKey) != fixedTokenVal { + runWithFixedToken() + } + + println("Setting data dir to", webviewDir) + if err := os.MkdirAll(webviewDir, os.ModePerm); err != nil { + println("Failed creating dir:", err) + } + if err := acl.Chmod(webviewDir, 0777); err != nil { + println("Failed setting ACL on dir:", err) + } + + app := NewApp() + + err := wails.Run(&options.App{ + Title: "sample-data-dir", + Width: 1024, + Height: 768, + AssetServer: &assetserver.Options{ + Assets: assets, + }, + Bind: []interface{}{ + app, + }, + Windows: &windows.Options{ + WebviewUserDataPath: webviewDir, + }, + }) + + if err != nil { + println("Error:", err.Error()) + } +} +``` + +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. + +Possible future solution #3: [run WebView2 using an in-memory mode if implemented](https://github.com/MicrosoftEdge/WebView2Feedback/issues/3637#issuecomment-1728300982). + +## WebView2 installation succeeded, but the wails doctor command shows that it is not installed + +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/). + +Source: https://github.com/wailsapp/wails/issues/2917 + +## 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). + diff --git a/website/i18n/pt/docusaurus-plugin-content-docs/current/reference/cli.mdx b/website/i18n/pt/docusaurus-plugin-content-docs/current/reference/cli.mdx index 6d22b657122..c2a5d706bac 100644 --- a/website/i18n/pt/docusaurus-plugin-content-docs/current/reference/cli.mdx +++ b/website/i18n/pt/docusaurus-plugin-content-docs/current/reference/cli.mdx @@ -49,35 +49,35 @@ If you are unsure about a template, inspect `package.json` and `wails.json` for `wails build` é usado para compilar seu projeto para um binário pronto para produção. -| Flag | Descrição | Padrão | -|:-------------------- |:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |:----------------------------------------------------------------------------------------------------------------------------------------------------- | -| -clean | Limpa o diretório `compilação/bin` | | -| -compiler "compiler" | Use um compilador de ida diferente para realizar build, por exemplo, go1.15beta1 | go | -| -debug | Retains debug information in the application and shows the debug console. Permite o uso das ferramentas devtools na janela do aplicativo | | -| -devtools | Allows the use of the devtools in the application window in production (when -debug is not used) | | -| -dryrun | Prints the build command without executing it | | -| -f | Forçar compilação de aplicação | | -| -garbleargs | Argumentos para passar para o garble | `-literals -tiny -seed=random` | -| -ldflags "flags" | Ldflags adicionais para passar para o compilador | | -| -m | Skip mod tidy before compile | | -| -nopackage | Não empacotar aplicação | | -| -nocolour | Disable colour in output | | -| -nosyncgomod | Do not sync go.mod with the Wails version | | -| -nsis | Generate NSIS installer for Windows | | -| -o nome de arquivo | Nome do Arquivo de Saída | | -| -obfuscated | Ofuscar a aplicação usando [garble](https://github.com/burrowers/garble) | | -| -platform | Compila para as plataformas [(delimitadas por vírgula)](../reference/cli.mdx#platforms) por exemplo. `windows/arm64`. Note, se você não der arquitetura, `runtime.GOARCH` é usado. | platform = `variável de ambiente GOOS` se determinado `runtime.GOOS`.
arch = `GOARCH` variável de envrionment se for dado `runtime.GOARCH`. | -| -race | Realiza build com o Go race detector | | -| -s | Pular build do frontend | | -| -skipbindings | Skip bindings generation | | -| -tags "extra tags" | Compilar tags para passar para o compilador Go. Deve ser citado. Separados por espaço ou vírgula (mas não ambos) | | -| -trimpath | Remove todos os caminhos do sistema de arquivo do executável resultante. | | -| -u | Atualiza o `go.mod` do seu projeto para usar a mesma versão de Wails que o CLI | | -| -upx | Comprimir binário final usando "upx" | | -| -upxflags | Flags para passar para o upx | | -| -v int | Nível de verbosidade(0 - silencioso, 1 - padrão, 2 - verbose) | 1 | -| -webview2 | Estratégia de instalação WebView2: download,embed,browser,error | baixar | -| -windowsconsole | Manter a janela de console para builds do Windows | | +| Flag | Descrição | Padrão | +|:-------------------- |:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |:----------------------------------------------------------------------------------------------------------------------------------------------------- | +| -clean | Limpa o diretório `compilação/bin` | | +| -compiler "compiler" | Use um compilador de ida diferente para realizar build, por exemplo, go1.15beta1 | go | +| -debug | Retains debug information in the application and shows the debug console. Permite o uso das ferramentas devtools na janela do aplicativo | | +| -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. | | +| -dryrun | Prints the build command without executing it | | +| -f | Forçar compilação de aplicação | | +| -garbleargs | Argumentos para passar para o garble | `-literals -tiny -seed=random` | +| -ldflags "flags" | Ldflags adicionais para passar para o compilador | | +| -m | Skip mod tidy before compile | | +| -nopackage | Não empacotar aplicação | | +| -nocolour | Disable colour in output | | +| -nosyncgomod | Do not sync go.mod with the Wails version | | +| -nsis | Generate NSIS installer for Windows | | +| -o nome de arquivo | Nome do Arquivo de Saída | | +| -obfuscated | Ofuscar a aplicação usando [garble](https://github.com/burrowers/garble) | | +| -platform | Compila para as plataformas [(delimitadas por vírgula)](../reference/cli.mdx#platforms) por exemplo. `windows/arm64`. Note, se você não der arquitetura, `runtime.GOARCH` é usado. | platform = `variável de ambiente GOOS` se determinado `runtime.GOOS`.
arch = `GOARCH` variável de envrionment se for dado `runtime.GOARCH`. | +| -race | Realiza build com o Go race detector | | +| -s | Pular build do frontend | | +| -skipbindings | Skip bindings generation | | +| -tags "extra tags" | Compilar tags para passar para o compilador Go. Deve ser citado. Separados por espaço ou vírgula (mas não ambos) | | +| -trimpath | Remove todos os caminhos do sistema de arquivo do executável resultante. | | +| -u | Atualiza o `go.mod` do seu projeto para usar a mesma versão de Wails que o CLI | | +| -upx | Comprimir binário final usando "upx" | | +| -upxflags | Flags para passar para o upx | | +| -v int | Nível de verbosidade(0 - silencioso, 1 - padrão, 2 - verbose) | 1 | +| -webview2 | Estratégia de instalação WebView2: download,embed,browser,error | baixar | +| -windowsconsole | Manter a janela de console para builds do Windows | | Para uma descrição detalhada do sinalizador `webview2`, consulte o guia [Windows](../guides/windows.mdx). @@ -166,8 +166,8 @@ Your system is ready for Wails development! - Um servidor web foi iniciado em `http://localhost:34115` que serve sua aplicação (não apenas frontend) sobre http. Isso permite que você use suas extensões de desenvolvimento de navegador favoritas - Todos os conteúdos do aplicativo são carregados do disco. Se forem alterados, o aplicativo irá recarregar automaticamente (não reconstruir). Todos os navegadores conectados também recarregarão - A JS module is generated that provides the following: - - JavaScript wrappers of your Go methods with autogenerated JSDoc, providing code hinting - - TypeScript versions of your Go structs, that can be constructed and passed to your go methods +- JavaScript wrappers of your Go methods with autogenerated JSDoc, providing code hinting +- TypeScript versions of your Go structs, that can be constructed and passed to your go methods - A second JS module is generated that provides a wrapper + TS declaration for the runtime - 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. diff --git a/website/i18n/pt/docusaurus-plugin-content-docs/current/reference/menus.mdx b/website/i18n/pt/docusaurus-plugin-content-docs/current/reference/menus.mdx index ff9a2442281..a60919a04b3 100644 --- a/website/i18n/pt/docusaurus-plugin-content-docs/current/reference/menus.mdx +++ b/website/i18n/pt/docusaurus-plugin-content-docs/current/reference/menus.mdx @@ -4,9 +4,9 @@ sidebar_position: 4 # 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). +É possível adicionar um menu de aplicação aos projetos do Wails. Isso é conseguido definindo uma struct [Menu](#menu) e configurando-a no configuração do aplicativo [`Menu`](../reference/options.mdx#menu) ou chamando o método [MenuSetApplicationMenu](../reference/runtime/menu.mdx#menusetapplicationmenu). -An example of how to create a menu: +Um exemplo de como criar um menu: ```go @@ -36,13 +36,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). +Também é possível atualizar dinamicamente o menu, atualizando o menu struct e chamando [MenuUpdateApplicationMenu](../reference/runtime/menu.mdx#menuupdateapplicationmenu). -The example above uses helper methods, however it's possible to build the menu structs manually. +O exemplo acima usa métodos de ajuda, no entanto, é possível construir as construções do menu manualmente. ## Menu -A Menu is a collection of MenuItems: +Um Menu é uma coleção de MenuItems: ```go title="Package: github.com/wailsapp/wails/v2/pkg/menu" type Menu struct { @@ -50,19 +50,19 @@ type Menu struct { } ``` -For the Application menu, each MenuItem represents a single menu such as "Edit". +Para o menu de Aplicação, cada MenuItem representa um único menu como "Editar". -A simple helper method is provided for building menus: +Um método simples de ajuda é fornecido para menus de construção: ```go title="Package: github.com/wailsapp/wails/v2/pkg/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. +Isto torna o layout do código mais parecido com o de um menu sem a necessidade de adicionar os itens de menu manualmente depois de criá-los. Como alternativa, você pode apenas criar os itens de menu e adicioná-los ao menu manualmente. ## MenuItem -A MenuItem represents an item within a Menu. +Um MenuItem representa um item dentro de um Menu. ```go title="Package: github.com/wailsapp/wails/v2/pkg/menu" // MenuItem represents a menu item contained in a menu @@ -79,30 +79,30 @@ type MenuItem struct { } ``` -| Field | Type | Notes | -| ----------- | ------------------------------------ | ------------------------------------------------------------- | -| Label | string | The menu text | -| Accelerator | [\*keys.Accelerator](#accelerator) | Key binding for this menu item | -| Type | [Type](#type) | Type of MenuItem | -| Disabled | bool | Disables the menu item | -| Hidden | bool | Hides this menu item | -| Checked | bool | Adds check to item (Checkbox & Radio types) | -| SubMenu | [\*Menu](#menu) | Sets the submenu | -| Click | [Callback](#callback) | Callback function when menu clicked | -| Role | string | Defines a [role](#role) for this menu item. Mac only for now. | +| Campo | Tipo | Notas | +| ----------- | ------------------------------------ | -------------------------------------------------------------------------- | +| Label | string | O texto do menu | +| Accelerator | [\*keys.Accelerator](#accelerator) | Vinculação de teclas para este item de menu | +| Tipo | [Tipo](#type) | Tipo de MenuItem | +| Disabled | bool | Desativa o item de menu | +| Hidden | bool | Oculta este item de menu | +| Checked | bool | Adiciona uma seleção para o item ( & Tipos de Rádio) | +| SubMenu | [\*Menu](#menu) | Define o submenu | +| Click | [Callback](#callback) | Função Callback quando clicado no menu | +| Role | string | Define um papel [](#role) para este item de menu. Mac apenas por enquanto. | ### 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. +Os aceleradores (às vezes chamados atalhos de teclado) definem uma ligação entre um toque de tecla e um item de menu. Lamentos define um Acelerador como uma combinação ou tecla + [Modificador](#modifier). Eles estão disponíveis no pacote `"github.com/wailsapp/wails/v2/pkg/menu/keys"`. -Example: +Exemplo: ```go title="Package: github.com/wailsapp/wails/v2/pkg/menu/keys" // Defines cmd+o on Mac and ctrl-o on Window/Linux 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: +Teclas são qualquer caractere único em um teclado com exceção de `+`, que é definido como `plus`. Algumas chaves não podem ser representadas como caracteres, portanto há um conjunto de caracteres nomeados que podem ser usados: | | | | | |:-----------:|:-----:|:-----:|:---------:| @@ -122,18 +122,18 @@ Keys are any single character on a keyboard with the exception of `+`, which is | `page up` | `f14` | `f39` | | | `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 também suportam a análise de aceleradores usando a mesma sintaxe que o Electron. Isso é útil para armazenar aceleradores em arquivos de configuração. -Example: +Exemplo: ```go title="Package: github.com/wailsapp/wails/v2/pkg/menu/keys" // Defines cmd+o on Mac and ctrl-o on Window/Linux myShortcut, err := keys.Parse("Ctrl+Option+A") ``` -#### Modifier +#### Modificador -The following modifiers are keys that may be used in combination with the accelerator key: +Os seguintes modificadores são chaves que podem ser usadas em combinação com a tecla de aceleração: ```go title="Package: github.com/wailsapp/wails/v2/pkg/menu/keys" const ( @@ -148,7 +148,7 @@ const ( ) ``` -A number of helper methods are available to create Accelerators using modifiers: +Vários métodos de ajuda estão disponíveis para criar aceleradores usando modificadores: ```go title="Package: github.com/wailsapp/wails/v2/pkg/menu/keys" func CmdOrCtrl(key string) *Accelerator @@ -157,16 +157,16 @@ func Shift(key string) *Accelerator func Control(key string) *Accelerator ``` -Modifiers can be combined using `keys.Combo(key string, modifier1 Modifier, modifier2 Modifier, rest ...Modifier)`: +Modificadores podem ser combinados usando `keys.Combo(string de chaves, modificador 1 modificador, modificador modificador, rest ...Modificador)`: ```go title="Package: github.com/wailsapp/wails/v2/pkg/menu/keys" // Defines "Ctrl+Option+A" on Mac and "Ctrl+Alt+A" on Window/Linux myShortcut := keys.Combo("a", ControlKey, OptionOrAltKey) ``` -### Type +### Tipo -Each menu item must have a type and there are 5 types available: +Cada item de menu deve ter um tipo e existem 5 tipos disponíveis: ```go title="Package: github.com/wailsapp/wails/v2/pkg/menu" const ( @@ -178,7 +178,7 @@ const ( ) ``` -For convenience, helper methods are provided to quickly create a menu item: +Para conveniência, métodos auxiliares são fornecidos para criar rapidamente um item de menu: ```go title="Package: github.com/wailsapp/wails/v2/pkg/menu" func Text(label string, accelerator *keys.Accelerator, click Callback) *MenuItem @@ -188,7 +188,7 @@ func Checkbox(label string, checked bool, accelerator *keys.Accelerator, click C func SubMenu(label string, menu *Menu) *Menu ``` -You can also create menu items directly on a menu by using the "Add" helpers: +Você também pode criar itens de menu diretamente em um menu, usando os ajudantes "Adicionar": ```go title="Package: github.com/wailsapp/wails/v2/pkg/menu" func (m *Menu) AddText(label string, accelerator *keys.Accelerator, click Callback) *MenuItem @@ -198,11 +198,11 @@ func (m *Menu) AddCheckbox(label string, checked bool, accelerator *keys.Acceler 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. +Uma nota nos grupos de rádio: Um grupo de rádio é definido como um número de itens do menu de rádio que estão próximos um ao outro no menu. Isso significa que não é necessário agrupar os itens porque é automático. No entanto, isso também significa que você não pode ter 2 grupos lado a lado - deve haver um item que não seja de rádio entre eles. ### Callback -Each menu item may have a callback that is executed when the item is clicked: +Cada item de menu pode ter um callback que é executado quando o item é clicado: ```go title="Package: github.com/wailsapp/wails/v2/pkg/menu" type Callback func(*CallbackData) @@ -212,19 +212,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. +A função recebe uma instrução `CallbackData` que indica qual item de menu acionou a callback. Isso é útil quando usar grupos de rádio que podem compartilhar um callback. ### Role -:::info Roles +:::info Regras -Roles are currently supported on Mac only. +As regras que são atualmente suportados apenas no Mac. ::: -A menu item may have a role, which is essentially a pre-defined menu item. We currently support the following roles: +Um item de menu pode ter uma função, que é essencialmente um item de menu pré-definido. Atualmente, apoiamos as seguintes funções: -| Role | Description | -| ------------ | ------------------------------------------------------------------------ | -| AppMenuRole | The standard Mac application menu. Can be created using `menu.AppMenu()` | -| EditMenuRole | The standard Mac edit menu. Can be created using `menu.EditMenu()` | +| Role | Descrição | +| ------------ | --------------------------------------------------------------------------- | +| AppMenuRole | Menu padrão do aplicativo para Mac. Pode ser criado usando `menu.AppMenu()` | +| EditMenuRole | O menu de edição padrão para Mac. Pode ser criado usando `menu.EditMenu()` | diff --git a/website/i18n/pt/docusaurus-plugin-content-docs/current/reference/options.mdx b/website/i18n/pt/docusaurus-plugin-content-docs/current/reference/options.mdx index e1bb970a127..46d1c071b60 100644 --- a/website/i18n/pt/docusaurus-plugin-content-docs/current/reference/options.mdx +++ b/website/i18n/pt/docusaurus-plugin-content-docs/current/reference/options.mdx @@ -366,7 +366,7 @@ Name: CSSDragValue
Type: `string` EnableDefaultContextMenu enables the browser's default context-menu in production. -By default, the browser's default context-menu is only available in development and in a `-debug` or `-devtools` [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. +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. 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 : @@ -593,6 +593,12 @@ Setting this to `true` will disable GPU hardware acceleration for the webview. Name: WebviewGpuIsDisabled
Type: `bool` +#### EnableSwipeGestures + +Setting this to `true` will enable swipe gestures for the webview. + +Name: EnableSwipeGestures
Type: `bool` + ### Mac This defines [Mac specific options](#mac). @@ -688,6 +694,42 @@ Setting this to `true` will make the window background translucent. Often combin Name: WindowIsTranslucent
Type: `bool` +#### Preferences + +The Preferences struct provides the ability to configure the Webview preferences. + +Name: Preferences
Type: [`*mac.Preferences`](#preferences-struct) + +##### Preferences struct + +You can specify the webview preferences. + +```go +type Preferences struct { + TabFocusesLinks u.Bool + TextInteractionEnabled u.Bool + FullscreenEnabled u.Bool +} +``` + +| Name | Description | +| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 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) | +| 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) | +| 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) | + +Example: + +```go +Mac: &mac.Options{ + Preferences: &mac.Preferences{ + TabFocusesLinks: mac.Enabled, + TextInteractionEnabled: mac.Disabled, + FullscreenEnabled: mac.Enabled, + } +} +``` + #### 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. diff --git a/website/i18n/pt/docusaurus-plugin-content-docs/version-v2.3.1.json b/website/i18n/pt/docusaurus-plugin-content-docs/version-v2.3.1.json index c793961dca3..3d8fbe05279 100644 --- a/website/i18n/pt/docusaurus-plugin-content-docs/version-v2.3.1.json +++ b/website/i18n/pt/docusaurus-plugin-content-docs/version-v2.3.1.json @@ -4,35 +4,35 @@ "description": "The label for version v2.3.1" }, "sidebar.docs.category.Getting Started": { - "message": "Getting Started", + "message": "Guia de Introdução", "description": "The label for category Getting Started in sidebar docs" }, "sidebar.docs.category.Reference": { - "message": "Reference", + "message": "Referência", "description": "The label for category Reference in sidebar docs" }, "sidebar.docs.category.Runtime": { - "message": "Runtime", + "message": "Tempo de execução", "description": "The label for category Runtime in sidebar docs" }, "sidebar.docs.category.Community": { - "message": "Community", + "message": "Comunidade", "description": "The label for category Community in sidebar docs" }, "sidebar.docs.category.Showcase": { - "message": "Showcase", + "message": "Casos de sucesso", "description": "The label for category Showcase in sidebar docs" }, "sidebar.docs.category.Guides": { - "message": "Guides", + "message": "Guias", "description": "The label for category Guides in sidebar docs" }, "sidebar.docs.category.Tutorials": { - "message": "Tutorials", + "message": "Tutoriais", "description": "The label for category Tutorials in sidebar docs" }, "sidebar.docs.link.Contributing": { - "message": "Contributing", + "message": "Contribuir", "description": "The label for link Contributing in sidebar docs, linking to /community-guide#ways-of-contributing" } } diff --git a/website/i18n/pt/docusaurus-plugin-content-pages/changelog.mdx b/website/i18n/pt/docusaurus-plugin-content-pages/changelog.mdx index ac2ac18bc68..7f4f545d3fb 100644 --- a/website/i18n/pt/docusaurus-plugin-content-pages/changelog.mdx +++ b/website/i18n/pt/docusaurus-plugin-content-pages/changelog.mdx @@ -13,6 +13,28 @@ O formato é baseado em [Manter um Log de Alterações](https://keepachangelog.c ## [Unreleased] +### Adicionado + +- Added support for enabling/disabling swipe gestures for Windows WebView2. Added by @leaanthony in [PR](https://github.com/wailsapp/wails/pull/2878) +- When building with `-devtools` flag, CMD/CTRL+SHIFT+F12 can be used to open the devtools. Added by @leaanthony in [PR](https://github.com/wailsapp/wails/pull/2915) – Added file association support for macOS and Windows. Added by @APshenkin in [PR](https://github.com/wailsapp/wails/pull/2918) +- Added support for setting some of the Webview preferences, `textInteractionEnabled` and `tabFocusesLinks` on Mac. Added by @fkhadra in [PR](https://github.com/wailsapp/wails/pull/2937) +- Added support for enabling/disabling fullscreen of the Webview on Mac. Added by @fkhadra in [PR](https://github.com/wailsapp/wails/pull/2953) +- Added French README.fr.md page. Added by @nejos97 in [PR](https://github.com/wailsapp/wails/pull/2943) +- New task created for linting v2 `task v2:lint`. Workflow updated to run the task. Added by @mikeee in [PR](https://github.com/wailsapp/wails/pull/2957) +- Added new community template wails-htmx-templ-chi-tailwind. Added by [@pylotlight](https://github.com/pylotlight) in [PR](https://github.com/wailsapp/wails/pull/2984) +- Added CPU/GPU/Memory detection for `wails doctor`. Added by @leaanthony in #d51268b8d0680430f3a614775b13e6cd2b906d1c + +### Alterado + +- AssetServer requests are now processed asynchronously without blocking the main thread on Windows. Changed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2926) +- AssetServer requests are now processed concurrently by spawning a goroutine per request. Changed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2926) +- Now building with `-devtools` flag doesn't enable the default context-menu. Changed by @mmghv in [PR](https://github.com/wailsapp/wails/pull/2923) +- Change Window Level. Changed by @almas1992 in [PR](https://github.com/wailsapp/wails/pull/2944) +#### Corrigido + +- Fixed typo on docs/reference/options page. Added by [@pylotlight](https://github.com/pylotlight) in [PR](https://github.com/wailsapp/wails/pull/2887) +- Fixed issue with npm being called npm20 on openSUSE-Tumbleweed. Fixed by @TuffenDuffen in [PR] in (https://github.com/wailsapp/wails/pull/2941) + ## v2.6.0 - 2023-09-06 ### Grandes Alterações @@ -27,6 +49,7 @@ O formato é baseado em [Manter um Log de Alterações](https://keepachangelog.c - Fixed `SetBackgroundColour` so it sets the window's background color to reduce resize flickering on Linux. Added by @lyimmi in [PR](https://github.com/wailsapp/wails/pull/2853) - Fixed disable window resize option and wrong initial window size when its enabled. Added by @lyimmi in [PR](https://github.com/wailsapp/wails/pull/2863) - Fixed build hook command parsing. Added by @smac89 in [PR](https://github.com/wailsapp/wails/pull/2836) +- Fixed filesystem watcher from filtering top level project directory if binary name is included in .gitignore. Added by [@haukened](https://github.com/haukened) in [PR #2869](https://github.com/wailsapp/wails/pull/2869) - Fixed `-reloaddir` flag to watch additional directories (non-recursively). [@haukened](https://github.com/haukened) in [PR #2871](https://github.com/wailsapp/wails/pull/2871) - Fixed support for Go 1.21 `go.mod` files. Fixed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2876) @@ -44,6 +67,7 @@ O formato é baseado em [Manter um Log de Alterações](https://keepachangelog.c - Added new community template wails-sveltekit-tailwind. Added by [@pylotlight](https://github.com/pylotlight) in [PR](https://github.com/wailsapp/wails/pull/2851) - Added support for print dialogs. Added by [@aangelisc](https://github.com/aangelisc) in [PR](https://github.com/wailsapp/wails/pull/2822) - Added new `wails dev -nogorebuild` flag to prevent restarts on back end file changes. [@haukened](https://github.com/haukened) in [PR #2870](https://github.com/wailsapp/wails/pull/2870) +- Added a guide to describe a cross-platform build using GitHub Actions. Added by [@dennypenta](https://github.com/dennypenta) in [PR](https://github.com/wailsapp/wails/pull/2879) ### Alterado @@ -680,9 +704,6 @@ Experimental: &options.Experimental{ - [v2, nsis] Seems like / as path separator works only for some directives in a cross platform way by [@stffabi](https://github.com/stffabi) in #1227 - import models on binding definition by [@adalessa](https://github.com/adalessa) in #123 - - 1 - - Use local search on website by [@leaanthony](https://github.com/leaanthony) in #1234 - Ensure binary resources can be served by [@napalu](https://github.com/napalu) in #1240 - Only retry loading assets when loading from disk by [@leaanthony](https://github.com/leaanthony) in #1241 diff --git a/website/i18n/ru/docusaurus-plugin-content-docs/current/community/templates.mdx b/website/i18n/ru/docusaurus-plugin-content-docs/current/community/templates.mdx index 6dd14b917ae..0b86bb8d9bd 100644 --- a/website/i18n/ru/docusaurus-plugin-content-docs/current/community/templates.mdx +++ b/website/i18n/ru/docusaurus-plugin-content-docs/current/community/templates.mdx @@ -60,6 +60,10 @@ sidebar_position: 1 - [wails-elm-шаблон](https://github.com/benjamin-thomas/wails-elm-template) - Разработайте ваше GUI приложение с функциональным программированием и **snappy** настройками горячей перезагрузки :tada: :rocket: - [wails-template-elm-tailwind](https://github.com/rnice01/wails-template-elm-tailwind) - Объединение возможностей :muscle: Elm + Tailwind CSS + Wails! Поддерживается горячая перезагрузка. +## 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 + ## Чистый JavaScript (Vanilla) - [wails-pure-js-шаблон](https://github.com/KiddoV/wails-pure-js-template) - шаблон, содержащий только базовый JavaScript, HTML и CSS diff --git a/website/i18n/ru/docusaurus-plugin-content-docs/current/guides/crossplatform-build.mdx b/website/i18n/ru/docusaurus-plugin-content-docs/current/guides/crossplatform-build.mdx new file mode 100644 index 00000000000..fd81a974d04 --- /dev/null +++ b/website/i18n/ru/docusaurus-plugin-content-docs/current/guides/crossplatform-build.mdx @@ -0,0 +1,66 @@ +# Crossplatform build with 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. + +An action that facilitates building a Wails app is available at: +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: +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: + +```yaml +name: Wails build + +on: + push: + tags: + # Match any new tag + - '*' + +env: + # Necessary for most environments as build failure can occur due to OOM issues + NODE_OPTIONS: "--max-old-space-size=4096" + +jobs: + build: + strategy: + # Failure in one platform build won't impact the others + fail-fast: false + matrix: + build: + - name: 'App' + platform: 'linux/amd64' + os: 'ubuntu-latest' + - name: 'App' + platform: 'windows/amd64' + os: 'windows-latest' + - name: 'App' + platform: 'darwin/universal' + os: 'macos-latest' + + runs-on: ${{ matrix.build.os }} + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + submodules: recursive + + - name: Build wails + uses: dAppServer/wails-build-action@v2.2 + id: build + with: + build-name: ${{ matrix.build.name }} + build-platform: ${{ matrix.build.platform }} + package: false + go-version: '1.20' +``` + +This example offers opportunities for various enhancements, including: + +- Caching dependencies +- Code signing +- Uploading to platforms like S3, Supbase, etc. +- Injecting secrets as environment variables +- Utilizing environment variables as build variables (such as version variable extracted from the current Git tag) diff --git a/website/i18n/ru/docusaurus-plugin-content-docs/current/guides/file-association.mdx b/website/i18n/ru/docusaurus-plugin-content-docs/current/guides/file-association.mdx new file mode 100644 index 00000000000..b10c66bb373 --- /dev/null +++ b/website/i18n/ru/docusaurus-plugin-content-docs/current/guides/file-association.mdx @@ -0,0 +1,199 @@ +# File Association + +File association feature allows you to associate specific file types with your app so that when users open those files, +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: + +To set up file association, you need to modify your application's wails.json file. +In "info" section add a "fileAssociations" section specifying the file types your app should be associated with. + +For example: + +```json +{ + "info": { + "fileAssociations": [ + { + "ext": "wails", + "name": "Wails", + "description": "Wails Application File", + "iconName": "wailsFileIcon", + "role": "Editor" + }, + { + "ext": "jpg", + "name": "JPEG", + "description": "Image File", + "iconName": "jpegFileIcon", + "role": "Editor" + } + ] + } +} +``` + +| Property | Description | +| :---------- | :------------------------------------------------------------------------------------------------------------------------------------------------- | +| ext | The extension (minus the leading period). e.g. png | +| name | The name. e.g. PNG File | +| 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 | +| description | Windows-only. The description. It is displayed on the `Type` column on Windows Explorer. | +| role | macOS-only. The app’s role with respect to the type. Corresponds to CFBundleTypeRole. | + +## Platform Specifics: + +### 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: + +```go title="main.go" +func main() { + // Create application with options + err := wails.Run(&options.App{ + Title: "wails-open-file", + Width: 1024, + Height: 768, + AssetServer: &assetserver.Options{ + Assets: assets, + }, + BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1}, + Mac: &mac.Options{ + OnFileOpen: func(filePaths []string) { println(filestring) }, + }, + Bind: []interface{}{ + app, + }, + }) + + if err != nil { + println("Error:", err.Error()) + } +} +``` + +### Windows + +On Windows file association is supported only with NSIS installer. During installation, the installer will create a +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" +func main() { + argsWithoutProg := os.Args[1:] + + if len(argsWithoutProg) != 0 { + println("launchArgs", argsWithoutProg) + } +} +``` + +### Linux + +Currently, Wails doesn't support bundling for Linux. So, you need to create file associations manually. +For example if you distribute your app as a .deb package, you can create file associations by adding required files in you bundle. +You can use [nfpm](https://nfpm.goreleaser.com/) to create .deb package for your app. + +1. Create a .desktop file for your app and specify file associations there. Example: + +```ini +[Desktop Entry] +Categories=Office +Exec=/usr/bin/wails-open-file %u +Icon=wails-open-file.png +Name=wails-open-file +Terminal=false +Type=Application +MimeType=application/x-wails;application/x-test +``` + +2. Create mime types file. Example: + +```xml + + + + Wails Application File + + + +``` + +3. Create icons for your file types. SVG icons are recommended. +4. Prepare postInstall/postRemove scripts for your package. Example: + +```sh +# reload mime types to register file associations +update-mime-database /usr/share/mime +# reload desktop database to load app in list of available +update-desktop-database /usr/share/applications +# update icons +update-icon-caches /usr/share/icons/* +``` + +5. Configure nfpm to use your scripts and files. Example: + +```yaml +name: "wails-open-file" +arch: "arm64" +platform: "linux" +version: "1.0.0" +section: "default" +priority: "extra" +maintainer: "FooBarCorp " +description: "Sample Package" +vendor: "FooBarCorp" +homepage: "http://example.com" +license: "MIT" +contents: +- src: ../bin/wails-open-file + dst: /usr/bin/wails-open-file +- src: ./main.desktop + dst: /usr/share/applications/wails-open-file.desktop +- src: ./application-wails-mime.xml + dst: /usr/share/mime/packages/application-x-wails.xml +- src: ./application-test-mime.xml + dst: /usr/share/mime/packages/application-x-test.xml +- src: ../appicon.svg + dst: /usr/share/icons/hicolor/scalable/apps/wails-open-file.svg +- src: ../wailsFileIcon.svg + dst: /usr/share/icons/hicolor/scalable/mimetypes/application-x-wails.svg +- src: ../testFileIcon.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 +- src: ../appicon.svg + dst: /usr/share/icons/Yaru/scalable/apps/wails-open-file.svg +- src: ../wailsFileIcon.svg + dst: /usr/share/icons/Yaru/scalable/mimetypes/application-x-wails.svg +- src: ../testFileIcon.svg + dst: /usr/share/icons/Yaru/scalable/mimetypes/application-x-test.svg +scripts: + postinstall: ./postInstall.sh + postremove: ./postRemove.sh +``` + +6. Build your .deb package using nfpm: + +```sh +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, + 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" +func main() { + argsWithoutProg := os.Args[1:] + + if len(argsWithoutProg) != 0 { + println("launchArgs", argsWithoutProg) + } +} +``` + +## Limitations: + +On Windows and Linux when associated file is opened, new instance of your app is launched. +Currently, Wails doesn't support opening files in already running app. There is plugin for single instance support for v3 in development. diff --git a/website/i18n/ru/docusaurus-plugin-content-docs/current/guides/troubleshooting.mdx b/website/i18n/ru/docusaurus-plugin-content-docs/current/guides/troubleshooting.mdx index 5b319f9a447..1c3b6a9cc52 100644 --- a/website/i18n/ru/docusaurus-plugin-content-docs/current/guides/troubleshooting.mdx +++ b/website/i18n/ru/docusaurus-plugin-content-docs/current/guides/troubleshooting.mdx @@ -159,6 +159,28 @@ If `/Applications/Xcode.app/Contents/Developer` is displayed, run `sudo xcode-se Sources: https://github.com/wailsapp/wails/issues/1806 and https://github.com/wailsapp/wails/issues/1140#issuecomment-1290446496 +## My application won't compile on Mac + +If you are getting errors like this: + +```shell +l1@m2 GoEasyDesigner % go build -tags dev -gcflags "all=-N -l" +/Users/l1/sdk/go1.20.5/pkg/tool/darwin_arm64/link: running clang failed: exit status 1 +Undefined symbols for architecture arm64: + "_OBJC_CLASS_$_UTType", referenced from: + objc-class-ref in 000016.o +ld: symbol(s) not found for architecture arm64 +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: + +```shell +export CGO_LDFLAGS="-framework UniformTypeIdentifiers" && go build -tags dev -gcflags "all=-N -l" +``` + +Sources: 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" @@ -185,4 +207,162 @@ This is due to the default background of the webview being white. If you want to WebviewIsTransparent: true, }, }) -``` \ No newline at end of file +``` + +## I get a "Microsoft Edge can't read or write to its data directory" error when running my program as admin on Windows + +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. + +When a Windows machine has two local accounts: + +- Alice, an admin +- Bob, a regular user + +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. + +Wails instructs WebView2 to store user data at the specified `WebviewUserDataPath`. It defaults to `%APPDATA%\[BinaryName.exe]`. + +Because the application is running under Alice's account, `%APPDATA%\[BinaryName.exe]` resolves to `C:\Users\Alice\AppData\Roaming\[BinaryName.exe]`. + +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. + +Possible solution #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: + +```go +//go:build windows + +package sample + +import ( + "golang.org/x/sys/windows" + "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. +func RunAs(path string) error { + verbPtr, _ := syscall.UTF16PtrFromString("runas") + exePtr, _ := syscall.UTF16PtrFromString(path) + cwdPtr, _ := syscall.UTF16PtrFromString("") + argPtr, _ := syscall.UTF16PtrFromString("") + + var showCmd int32 = 1 //SW_NORMAL + + err := windows.ShellExecute(0, verbPtr, exePtr, argPtr, cwdPtr, showCmd) + if err != nil { + return err + } + return nil +} +``` + +Possible solution #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: + +```go +package main + +import ( + "embed" + "os" + "runtime" + + "github.com/fourcorelabs/wintoken" + "github.com/hectane/go-acl" + "github.com/wailsapp/wails/v2" + "github.com/wailsapp/wails/v2/pkg/options" + "github.com/wailsapp/wails/v2/pkg/options/assetserver" + "github.com/wailsapp/wails/v2/pkg/options/windows" +) + +//go:embed all:frontend/dist +var assets embed.FS + +const ( + fixedTokenKey = "SAMPLE_RANDOM_KEY" + fixedTokenVal = "with-fixed-token" + webviewDir = "C:\\ProgramData\\Sample" +) + +func runWithFixedToken() { + println("Re-launching self") + token, err := wintoken.OpenProcessToken(0, wintoken.TokenPrimary) //pass 0 for own process + if err != nil { + panic(err) + } + defer token.Close() + + token.EnableTokenPrivileges([]string{ + "SeBackupPrivilege", + "SeDebugPrivilege", + "SeRestorePrivilege", + }) + + cmd := exec.Command(os.Args[0]) + cmd.Args = os.Args + cmd.Env = os.Environ() + cmd.Env = append(cmd.Env, fmt.Sprintf("%v=%v", fixedTokenKey, fixedTokenVal)) + cmd.Stdin = os.Stdin + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + cmd.SysProcAttr = &syscall.SysProcAttr{Token: syscall.Token(token.Token())} + if err := cmd.Run(); err != nil { + println("Error after launching self:", err) + os.Exit(1) + } + println("Clean self launch :)") + os.Exit(0) +} + +func main() { + if runtime.GOOS == "windows" && os.Getenv(fixedTokenKey) != fixedTokenVal { + runWithFixedToken() + } + + println("Setting data dir to", webviewDir) + if err := os.MkdirAll(webviewDir, os.ModePerm); err != nil { + println("Failed creating dir:", err) + } + if err := acl.Chmod(webviewDir, 0777); err != nil { + println("Failed setting ACL on dir:", err) + } + + app := NewApp() + + err := wails.Run(&options.App{ + Title: "sample-data-dir", + Width: 1024, + Height: 768, + AssetServer: &assetserver.Options{ + Assets: assets, + }, + Bind: []interface{}{ + app, + }, + Windows: &windows.Options{ + WebviewUserDataPath: webviewDir, + }, + }) + + if err != nil { + println("Error:", err.Error()) + } +} +``` + +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. + +Possible future solution #3: [run WebView2 using an in-memory mode if implemented](https://github.com/MicrosoftEdge/WebView2Feedback/issues/3637#issuecomment-1728300982). + +## WebView2 installation succeeded, but the wails doctor command shows that it is not installed + +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/). + +Source: https://github.com/wailsapp/wails/issues/2917 + +## 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). + diff --git a/website/i18n/ru/docusaurus-plugin-content-docs/current/reference/cli.mdx b/website/i18n/ru/docusaurus-plugin-content-docs/current/reference/cli.mdx index a4817110fc8..c7aea10a64d 100644 --- a/website/i18n/ru/docusaurus-plugin-content-docs/current/reference/cli.mdx +++ b/website/i18n/ru/docusaurus-plugin-content-docs/current/reference/cli.mdx @@ -49,35 +49,35 @@ If you are unsure about a template, inspect `package.json` and `wails.json` for `wails build` is used for compiling your project to a production-ready binary. -| Flag | Description | Default | -|:-------------------- |:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |:--------------------------------------------------------------------------------------------------------------------------------------------------- | -| -clean | Cleans the `build/bin` directory | | -| -compiler "compiler" | Use a different go compiler to build, eg 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 | | -| -devtools | Allows the use of the devtools in the application window in production (when -debug is not used) | | -| -dryrun | Prints the build command without executing it | | -| -f | Force build application | | -| -garbleargs | Arguments to pass to garble | `-literals -tiny -seed=random` | -| -ldflags "flags" | Additional ldflags to pass to the compiler | | -| -m | Skip mod tidy before compile | | -| -nopackage | Do not package application | | -| -nocolour | Disable colour in output | | -| -nosyncgomod | Do not sync go.mod with the Wails version | | -| -nsis | Generate NSIS installer for Windows | | -| -o filename | Output filename | | -| -obfuscated | Obfuscate the application using [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`.
arch = `GOARCH` envrionment variable if given else `runtime.GOARCH`. | -| -race | Build with Go's race detector | | -| -s | Skip building the frontend | | -| -skipbindings | Skip bindings generation | | -| -tags "extra tags" | Build tags to pass to Go compiler. Must be quoted. Space or comma (but not both) separated | | -| -trimpath | Remove all file system paths from the resulting executable. | | -| -u | Updates your project's `go.mod` to use the same version of Wails as the CLI | | -| -upx | Compress final binary using "upx" | | -| -upxflags | Flags to pass to upx | | -| -v int | Verbosity level (0 - silent, 1 - default, 2 - verbose) | 1 | -| -webview2 | WebView2 installer strategy: download,embed,browser,error | download | -| -windowsconsole | Keep the console window for Windows builds | | +| Flag | Description | Default | +|:-------------------- |:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |:--------------------------------------------------------------------------------------------------------------------------------------------------- | +| -clean | Cleans the `build/bin` directory | | +| -compiler "compiler" | Use a different go compiler to build, eg 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 | | +| -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. | | +| -dryrun | Prints the build command without executing it | | +| -f | Force build application | | +| -garbleargs | Arguments to pass to garble | `-literals -tiny -seed=random` | +| -ldflags "flags" | Additional ldflags to pass to the compiler | | +| -m | Skip mod tidy before compile | | +| -nopackage | Do not package application | | +| -nocolour | Disable colour in output | | +| -nosyncgomod | Do not sync go.mod with the Wails version | | +| -nsis | Generate NSIS installer for Windows | | +| -o filename | Output filename | | +| -obfuscated | Obfuscate the application using [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`.
arch = `GOARCH` envrionment variable if given else `runtime.GOARCH`. | +| -race | Build with Go's race detector | | +| -s | Skip building the frontend | | +| -skipbindings | Skip bindings generation | | +| -tags "extra tags" | Build tags to pass to Go compiler. Must be quoted. Space or comma (but not both) separated | | +| -trimpath | Remove all file system paths from the resulting executable. | | +| -u | Updates your project's `go.mod` to use the same version of Wails as the CLI | | +| -upx | Compress final binary using "upx" | | +| -upxflags | Flags to pass to upx | | +| -v int | Verbosity level (0 - silent, 1 - default, 2 - verbose) | 1 | +| -webview2 | WebView2 installer strategy: download,embed,browser,error | download | +| -windowsconsole | Keep the console window for Windows builds | | For a detailed description of the `webview2` flag, please refer to the [Windows](../guides/windows.mdx) Guide. @@ -166,8 +166,8 @@ Your system is ready for Wails development! - 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 - All application assets are loaded from disk. If they are changed, the application will automatically reload (not rebuild). All connected browsers will also reload - A JS module is generated that provides the following: - - JavaScript wrappers of your Go methods with autogenerated JSDoc, providing code hinting - - TypeScript versions of your Go structs, that can be constructed and passed to your go methods +- JavaScript wrappers of your Go methods with autogenerated JSDoc, providing code hinting +- TypeScript versions of your Go structs, that can be constructed and passed to your go methods - A second JS module is generated that provides a wrapper + TS declaration for the runtime - 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. diff --git a/website/i18n/ru/docusaurus-plugin-content-docs/current/reference/options.mdx b/website/i18n/ru/docusaurus-plugin-content-docs/current/reference/options.mdx index e1bb970a127..46d1c071b60 100644 --- a/website/i18n/ru/docusaurus-plugin-content-docs/current/reference/options.mdx +++ b/website/i18n/ru/docusaurus-plugin-content-docs/current/reference/options.mdx @@ -366,7 +366,7 @@ Name: CSSDragValue
Type: `string` EnableDefaultContextMenu enables the browser's default context-menu in production. -By default, the browser's default context-menu is only available in development and in a `-debug` or `-devtools` [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. +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. 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 : @@ -593,6 +593,12 @@ Setting this to `true` will disable GPU hardware acceleration for the webview. Name: WebviewGpuIsDisabled
Type: `bool` +#### EnableSwipeGestures + +Setting this to `true` will enable swipe gestures for the webview. + +Name: EnableSwipeGestures
Type: `bool` + ### Mac This defines [Mac specific options](#mac). @@ -688,6 +694,42 @@ Setting this to `true` will make the window background translucent. Often combin Name: WindowIsTranslucent
Type: `bool` +#### Preferences + +The Preferences struct provides the ability to configure the Webview preferences. + +Name: Preferences
Type: [`*mac.Preferences`](#preferences-struct) + +##### Preferences struct + +You can specify the webview preferences. + +```go +type Preferences struct { + TabFocusesLinks u.Bool + TextInteractionEnabled u.Bool + FullscreenEnabled u.Bool +} +``` + +| Name | Description | +| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 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) | +| 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) | +| 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) | + +Example: + +```go +Mac: &mac.Options{ + Preferences: &mac.Preferences{ + TabFocusesLinks: mac.Enabled, + TextInteractionEnabled: mac.Disabled, + FullscreenEnabled: mac.Enabled, + } +} +``` + #### 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. diff --git a/website/i18n/ru/docusaurus-plugin-content-pages/changelog.mdx b/website/i18n/ru/docusaurus-plugin-content-pages/changelog.mdx index 3cda7c1c716..5828a733f3a 100644 --- a/website/i18n/ru/docusaurus-plugin-content-pages/changelog.mdx +++ b/website/i18n/ru/docusaurus-plugin-content-pages/changelog.mdx @@ -13,6 +13,28 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ## [Unreleased] +### Added + +- Added support for enabling/disabling swipe gestures for Windows WebView2. Added by @leaanthony in [PR](https://github.com/wailsapp/wails/pull/2878) +- When building with `-devtools` flag, CMD/CTRL+SHIFT+F12 can be used to open the devtools. Added by @leaanthony in [PR](https://github.com/wailsapp/wails/pull/2915) – Added file association support for macOS and Windows. Added by @APshenkin in [PR](https://github.com/wailsapp/wails/pull/2918) +- Added support for setting some of the Webview preferences, `textInteractionEnabled` and `tabFocusesLinks` on Mac. Added by @fkhadra in [PR](https://github.com/wailsapp/wails/pull/2937) +- Added support for enabling/disabling fullscreen of the Webview on Mac. Added by @fkhadra in [PR](https://github.com/wailsapp/wails/pull/2953) +- Added French README.fr.md page. Added by @nejos97 in [PR](https://github.com/wailsapp/wails/pull/2943) +- New task created for linting v2 `task v2:lint`. Workflow updated to run the task. Added by @mikeee in [PR](https://github.com/wailsapp/wails/pull/2957) +- Added new community template wails-htmx-templ-chi-tailwind. Added by [@pylotlight](https://github.com/pylotlight) in [PR](https://github.com/wailsapp/wails/pull/2984) +- Added CPU/GPU/Memory detection for `wails doctor`. Added by @leaanthony in #d51268b8d0680430f3a614775b13e6cd2b906d1c + +### Changed + +- AssetServer requests are now processed asynchronously without blocking the main thread on Windows. Changed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2926) +- AssetServer requests are now processed concurrently by spawning a goroutine per request. Changed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2926) +- Now building with `-devtools` flag doesn't enable the default context-menu. Changed by @mmghv in [PR](https://github.com/wailsapp/wails/pull/2923) +- Change Window Level. Changed by @almas1992 in [PR](https://github.com/wailsapp/wails/pull/2944) +#### Fixed + +- Fixed typo on docs/reference/options page. Added by [@pylotlight](https://github.com/pylotlight) in [PR](https://github.com/wailsapp/wails/pull/2887) +- Fixed issue with npm being called npm20 on openSUSE-Tumbleweed. Fixed by @TuffenDuffen in [PR] in (https://github.com/wailsapp/wails/pull/2941) + ## v2.6.0 - 2023-09-06 ### Breaking Changes @@ -27,6 +49,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - Fixed `SetBackgroundColour` so it sets the window's background color to reduce resize flickering on Linux. Added by @lyimmi in [PR](https://github.com/wailsapp/wails/pull/2853) - Fixed disable window resize option and wrong initial window size when its enabled. Added by @lyimmi in [PR](https://github.com/wailsapp/wails/pull/2863) - Fixed build hook command parsing. Added by @smac89 in [PR](https://github.com/wailsapp/wails/pull/2836) +- Fixed filesystem watcher from filtering top level project directory if binary name is included in .gitignore. Added by [@haukened](https://github.com/haukened) in [PR #2869](https://github.com/wailsapp/wails/pull/2869) - Fixed `-reloaddir` flag to watch additional directories (non-recursively). [@haukened](https://github.com/haukened) in [PR #2871](https://github.com/wailsapp/wails/pull/2871) - Fixed support for Go 1.21 `go.mod` files. Fixed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2876) @@ -44,6 +67,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - Added new community template wails-sveltekit-tailwind. Added by [@pylotlight](https://github.com/pylotlight) in [PR](https://github.com/wailsapp/wails/pull/2851) - Added support for print dialogs. Added by [@aangelisc](https://github.com/aangelisc) in [PR](https://github.com/wailsapp/wails/pull/2822) - Added new `wails dev -nogorebuild` flag to prevent restarts on back end file changes. [@haukened](https://github.com/haukened) in [PR #2870](https://github.com/wailsapp/wails/pull/2870) +- Added a guide to describe a cross-platform build using GitHub Actions. Added by [@dennypenta](https://github.com/dennypenta) in [PR](https://github.com/wailsapp/wails/pull/2879) ### Changed @@ -680,9 +704,6 @@ Experimental: &options.Experimental{ - [v2, nsis] Seems like / as path separator works only for some directives in a cross platform way by [@stffabi](https://github.com/stffabi) in #1227 - import models on binding definition by [@adalessa](https://github.com/adalessa) in #123 - - 1 - - Use local search on website by [@leaanthony](https://github.com/leaanthony) in #1234 - Ensure binary resources can be served by [@napalu](https://github.com/napalu) in #1240 - Only retry loading assets when loading from disk by [@leaanthony](https://github.com/leaanthony) in #1241 diff --git a/website/i18n/vi/code.json b/website/i18n/vi/code.json new file mode 100644 index 00000000000..c3b0bdfeb4b --- /dev/null +++ b/website/i18n/vi/code.json @@ -0,0 +1,431 @@ +{ + "homepage.Features.Title1": { + "message": "Feature Rich" + }, + "homepage.Features.Description1": { + "message": "Build comprehensive cross-platform applications using native UI elements such as menus and dialogs." + }, + "homepage.Features.Title2": { + "message": "Familiar" + }, + "homepage.Features.Description2": { + "message": "Use the technologies you already know to build amazing applications." + }, + "homepage.Features.Title3": { + "message": "Fast" + }, + "homepage.Features.Description3": { + "message": "Quickly generate, build and package your projects using the Wails CLI." + }, + "homepage.Tagline": { + "message": "Build beautiful cross-platform applications using Go" + }, + "homepage.ButtonText": { + "message": "Get Started" + }, + "homepage.LearnMoreButtonText": { + "message": "Learn More" + }, + "theme.ErrorPageContent.title": { + "message": "This page crashed.", + "description": "The title of the fallback page when the page crashed" + }, + "theme.ErrorPageContent.tryAgain": { + "message": "Try again", + "description": "The label of the button to try again rendering when the React error boundary captures an error" + }, + "theme.NotFound.title": { + "message": "Page Not Found", + "description": "The title of the 404 page" + }, + "theme.NotFound.p1": { + "message": "We could not find what you were looking for.", + "description": "The first paragraph of the 404 page" + }, + "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.", + "description": "The 2nd paragraph of the 404 page" + }, + "theme.AnnouncementBar.closeButtonAriaLabel": { + "message": "Close", + "description": "The ARIA label for close button of announcement bar" + }, + "theme.blog.archive.title": { + "message": "Archive", + "description": "The page & hero title of the blog archive page" + }, + "theme.blog.archive.description": { + "message": "Archive", + "description": "The page & hero description of the blog archive page" + }, + "theme.BackToTopButton.buttonAriaLabel": { + "message": "Scroll back to top", + "description": "The ARIA label for the back to top button" + }, + "theme.blog.paginator.navAriaLabel": { + "message": "Blog list page navigation", + "description": "The ARIA label for the blog pagination" + }, + "theme.blog.paginator.newerEntries": { + "message": "Newer Entries", + "description": "The label used to navigate to the newer blog posts page (previous page)" + }, + "theme.blog.paginator.olderEntries": { + "message": "Older Entries", + "description": "The label used to navigate to the older blog posts page (next page)" + }, + "theme.blog.post.readingTime.plurals": { + "message": "One min read|{readingTime} min read", + "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": { + "message": "Read more about {title}", + "description": "The ARIA label for the link to full blog posts from excerpts" + }, + "theme.blog.post.readMore": { + "message": "Read More", + "description": "The label used in blog post item excerpts to link to full blog posts" + }, + "theme.blog.post.paginator.navAriaLabel": { + "message": "Blog post page navigation", + "description": "The ARIA label for the blog posts pagination" + }, + "theme.blog.post.paginator.newerPost": { + "message": "Newer Post", + "description": "The blog post button label to navigate to the newer/previous post" + }, + "theme.blog.post.paginator.olderPost": { + "message": "Older Post", + "description": "The blog post button label to navigate to the older/next post" + }, + "theme.blog.sidebar.navAriaLabel": { + "message": "Blog recent posts navigation", + "description": "The ARIA label for recent posts in the blog sidebar" + }, + "theme.blog.post.plurals": { + "message": "One post|{count} posts", + "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": { + "message": "{nPosts} tagged with \"{tagName}\"", + "description": "The title of the page for a blog tag" + }, + "theme.tags.tagsPageLink": { + "message": "View All Tags", + "description": "The label of the link targeting the tag list page" + }, + "theme.CodeBlock.copyButtonAriaLabel": { + "message": "Copy code to clipboard", + "description": "The ARIA label for copy code blocks button" + }, + "theme.CodeBlock.copied": { + "message": "Copied", + "description": "The copied button label on code blocks" + }, + "theme.CodeBlock.copy": { + "message": "Copy", + "description": "The copy button label on code blocks" + }, + "theme.colorToggle.ariaLabel": { + "message": "Switch between dark and light mode (currently {mode})", + "description": "The ARIA label for the navbar color mode toggle" + }, + "theme.colorToggle.ariaLabel.mode.dark": { + "message": "dark mode", + "description": "The name for the dark color mode" + }, + "theme.colorToggle.ariaLabel.mode.light": { + "message": "light mode", + "description": "The name for the light color mode" + }, + "theme.docs.DocCard.categoryDescription": { + "message": "{count} items", + "description": "The default description for a category card in the generated index about how many items this category includes" + }, + "theme.docs.sidebar.expandButtonTitle": { + "message": "Expand sidebar", + "description": "The ARIA label and title attribute for expand button of doc sidebar" + }, + "theme.docs.sidebar.expandButtonAriaLabel": { + "message": "Expand sidebar", + "description": "The ARIA label and title attribute for expand button of doc sidebar" + }, + "theme.docs.paginator.navAriaLabel": { + "message": "Docs pages navigation", + "description": "The ARIA label for the docs pagination" + }, + "theme.docs.paginator.previous": { + "message": "Previous", + "description": "The label used to navigate to the previous doc" + }, + "theme.docs.paginator.next": { + "message": "Next", + "description": "The label used to navigate to the next doc" + }, + "theme.docs.sidebar.collapseButtonTitle": { + "message": "Collapse sidebar", + "description": "The title attribute for collapse button of doc sidebar" + }, + "theme.docs.sidebar.collapseButtonAriaLabel": { + "message": "Collapse sidebar", + "description": "The title attribute for collapse button of doc sidebar" + }, + "theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel": { + "message": "Toggle the collapsible sidebar category '{label}'", + "description": "The ARIA label to toggle the collapsible sidebar category" + }, + "theme.docs.tagDocListPageTitle.nDocsTagged": { + "message": "One doc tagged|{count} docs tagged", + "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": { + "message": "{nDocsTagged} with \"{tagName}\"", + "description": "The title of the page for a docs tag" + }, + "theme.docs.versionBadge.label": { + "message": "Version: {versionLabel}" + }, + "theme.docs.versions.unreleasedVersionLabel": { + "message": "This is unreleased documentation for {siteTitle} {versionLabel} version.", + "description": "The label used to tell the user that he's browsing an unreleased doc version" + }, + "theme.docs.versions.unmaintainedVersionLabel": { + "message": "This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.", + "description": "The label used to tell the user that he's browsing an unmaintained doc version" + }, + "theme.docs.versions.latestVersionSuggestionLabel": { + "message": "For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).", + "description": "The label used to tell the user to check the latest version" + }, + "theme.docs.versions.latestVersionLinkLabel": { + "message": "latest version", + "description": "The label used for the latest version suggestion link label" + }, + "theme.common.editThisPage": { + "message": "Edit this page", + "description": "The link label to edit the current page" + }, + "theme.common.headingLinkTitle": { + "message": "Direct link to heading", + "description": "Title for link to heading" + }, + "theme.lastUpdated.atDate": { + "message": " on {date}", + "description": "The words used to describe on which date a page has been last updated" + }, + "theme.lastUpdated.byUser": { + "message": " by {user}", + "description": "The words used to describe by who the page has been last updated" + }, + "theme.lastUpdated.lastUpdatedAtBy": { + "message": "Last updated{atDate}{byUser}", + "description": "The sentence used to display when a page has been last updated, and by who" + }, + "theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel": { + "message": "← Back to main menu", + "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": { + "message": "Versions", + "description": "The label for the navbar versions dropdown on mobile view" + }, + "theme.common.skipToMainContent": { + "message": "Skip to main content", + "description": "The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation" + }, + "theme.tags.tagsListLabel": { + "message": "Tags:", + "description": "The label alongside a tag list" + }, + "theme.TOCCollapsible.toggleButtonLabel": { + "message": "On this page", + "description": "The label used by the button on the collapsible TOC component" + }, + "theme.navbar.mobileLanguageDropdown.label": { + "message": "Languages", + "description": "The label for the mobile language switcher dropdown" + }, + "theme.SearchBar.seeAll": { + "message": "See all {count} results" + }, + "theme.SearchBar.label": { + "message": "Search", + "description": "The ARIA label and placeholder for search button" + }, + "theme.SearchPage.documentsFound.plurals": { + "message": "One document found|{count} documents found", + "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": { + "message": "Search results for \"{query}\"", + "description": "The search page title for non-empty query" + }, + "theme.SearchPage.emptyResultsTitle": { + "message": "Search the documentation", + "description": "The search page title for empty query" + }, + "theme.SearchPage.inputPlaceholder": { + "message": "Type your search here", + "description": "The placeholder for search page input" + }, + "theme.SearchPage.inputLabel": { + "message": "Search", + "description": "The ARIA label for search page input" + }, + "theme.SearchPage.algoliaLabel": { + "message": "Search by Algolia", + "description": "The ARIA label for Algolia mention" + }, + "theme.SearchPage.noResultsText": { + "message": "No results were found", + "description": "The paragraph for empty search result" + }, + "theme.SearchPage.fetchingNewResults": { + "message": "Fetching new results...", + "description": "The paragraph for fetching new search results" + }, + "theme.tags.tagsPageTitle": { + "message": "Tags", + "description": "The title of the tag list page" + }, + "theme.docs.breadcrumbs.home": { + "message": "Home page", + "description": "The ARIA label for the home page in the breadcrumbs" + }, + "theme.docs.breadcrumbs.navAriaLabel": { + "message": "Breadcrumbs", + "description": "The ARIA label for the breadcrumbs" + }, + "theme.CodeBlock.wordWrapToggle": { + "message": "Toggle word wrap", + "description": "The title attribute for toggle word wrapping button of code block lines" + }, + "theme.admonition.note": { + "message": "note", + "description": "The default label used for the Note admonition (:::note)" + }, + "theme.admonition.tip": { + "message": "tip", + "description": "The default label used for the Tip admonition (:::tip)" + }, + "theme.admonition.danger": { + "message": "danger", + "description": "The default label used for the Danger admonition (:::danger)" + }, + "theme.admonition.info": { + "message": "info", + "description": "The default label used for the Info admonition (:::info)" + }, + "theme.admonition.caution": { + "message": "caution", + "description": "The default label used for the Caution admonition (:::caution)" + }, + "theme.SearchModal.searchBox.resetButtonTitle": { + "message": "Clear the query", + "description": "The label and ARIA label for search box reset button" + }, + "theme.SearchModal.searchBox.cancelButtonText": { + "message": "Cancel", + "description": "The label and ARIA label for search box cancel button" + }, + "theme.SearchModal.startScreen.recentSearchesTitle": { + "message": "Recent", + "description": "The title for recent searches" + }, + "theme.SearchModal.startScreen.noRecentSearchesText": { + "message": "No recent searches", + "description": "The text when no recent searches" + }, + "theme.SearchModal.startScreen.saveRecentSearchButtonTitle": { + "message": "Save this search", + "description": "The label for save recent search button" + }, + "theme.SearchModal.startScreen.removeRecentSearchButtonTitle": { + "message": "Remove this search from history", + "description": "The label for remove recent search button" + }, + "theme.SearchModal.startScreen.favoriteSearchesTitle": { + "message": "Favorite", + "description": "The title for favorite searches" + }, + "theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle": { + "message": "Remove this search from favorites", + "description": "The label for remove favorite search button" + }, + "theme.SearchModal.errorScreen.titleText": { + "message": "Unable to fetch results", + "description": "The title for error screen of search modal" + }, + "theme.SearchModal.errorScreen.helpText": { + "message": "You might want to check your network connection.", + "description": "The help text for error screen of search modal" + }, + "theme.SearchModal.footer.selectText": { + "message": "to select", + "description": "The explanatory text of the action for the enter key" + }, + "theme.SearchModal.footer.selectKeyAriaLabel": { + "message": "Enter key", + "description": "The ARIA label for the Enter key button that makes the selection" + }, + "theme.SearchModal.footer.navigateText": { + "message": "to navigate", + "description": "The explanatory text of the action for the Arrow up and Arrow down key" + }, + "theme.SearchModal.footer.navigateUpKeyAriaLabel": { + "message": "Arrow up", + "description": "The ARIA label for the Arrow up key button that makes the navigation" + }, + "theme.SearchModal.footer.navigateDownKeyAriaLabel": { + "message": "Arrow down", + "description": "The ARIA label for the Arrow down key button that makes the navigation" + }, + "theme.SearchModal.footer.closeText": { + "message": "to close", + "description": "The explanatory text of the action for Escape key" + }, + "theme.SearchModal.footer.closeKeyAriaLabel": { + "message": "Escape key", + "description": "The ARIA label for the Escape key button that close the modal" + }, + "theme.SearchModal.footer.searchByText": { + "message": "Search by", + "description": "The text explain that the search is making by Algolia" + }, + "theme.SearchModal.noResultsScreen.noResultsText": { + "message": "No results for", + "description": "The text explains that there are no results for the following search" + }, + "theme.SearchModal.noResultsScreen.suggestedQueryText": { + "message": "Try searching for", + "description": "The text for the suggested query when no results are found for the following search" + }, + "theme.SearchModal.noResultsScreen.reportMissingResultsText": { + "message": "Believe this query should return results?", + "description": "The text for the question where the user thinks there are missing results" + }, + "theme.SearchModal.noResultsScreen.reportMissingResultsLinkText": { + "message": "Let us know.", + "description": "The text for the link to report missing results" + }, + "theme.SearchModal.placeholder": { + "message": "Search docs", + "description": "The placeholder of the input of the DocSearch pop-up modal" + }, + "theme.docs.sidebar.closeSidebarButtonAriaLabel": { + "message": "Close navigation bar", + "description": "The ARIA label for close button of mobile sidebar" + }, + "theme.docs.sidebar.toggleSidebarButtonAriaLabel": { + "message": "Toggle navigation bar", + "description": "The ARIA label for hamburger menu button of mobile navigation" + }, + "theme.NavBar.navAriaLabel": { + "message": "Main", + "description": "The ARIA label for the main navigation" + }, + "theme.docs.sidebar.navAriaLabel": { + "message": "Docs sidebar", + "description": "The ARIA label for the sidebar navigation" + } +} diff --git a/website/i18n/vi/docusaurus-plugin-content-blog/2021-09-27-v2-beta1-release-notes.mdx b/website/i18n/vi/docusaurus-plugin-content-blog/2021-09-27-v2-beta1-release-notes.mdx new file mode 100644 index 00000000000..d01b542b153 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-blog/2021-09-27-v2-beta1-release-notes.mdx @@ -0,0 +1,161 @@ +--- +slug: wails-v2-beta-for-windows +title: Wails v2 Beta for Windows +authors: + - leaanthony +tags: + - wails + - v2 +--- + +```mdx-code-block +
+ +
+
+``` + +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. + +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. + +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. + +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... + +### No CGO Dependency! + +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. + +### WebView2 Chromium Renderer + +```mdx-code-block +
+ +
+
+``` + +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! + +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. + +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. + +Gophers rejoice! The single binary dream lives on! + +### New Features + +```mdx-code-block +
+ +
+
+``` + +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. + +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. + +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. + +```mdx-code-block +
+ +
+
+``` + +### No requirement to bundle 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 `` tag with a local src path. Want to use a cool font? Copy it in and add the path to it in your CSS. + +> Wow, that sounds like a webserver... + +Yes, it works just like a webserver, except it isn't. + +> So how do I include my assets? + +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. + +### New Development Experience + +```mdx-code-block +
+ +
+
+``` + +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. + +It also provides the additional features: + +- Hot reload - Any changes to frontend assets will trigger and auto reload of the application frontend +- Auto rebuild - Any changes to your Go code will rebuild and relaunch your application + +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. + +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 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! + +### Remote Templates + +```mdx-code-block +
+ +
+
+``` + +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. + +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! + +### In Conclusion + +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. + +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: Go’s 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. + +I also need to give a huge thank you :pray: to the following people because without them, this release just wouldn't exist: + +- [Misite Bao](https://github.com/misitebao) - An absolute workhorse on the Chinese translations and an incredible bug finder. +- [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. +- [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. +- [Mat Ryer](https://github.com/matryer) - His support, encouragement and feedback has really helped drive the project forward. + +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. + +I look forward to seeing what people build with Wails in this next exciting phase of the project! + +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! + +PPS: If you or your company find Wails useful, please consider [sponsoring the project](https://github.com/sponsors/leaanthony). Thanks! diff --git a/website/i18n/vi/docusaurus-plugin-content-blog/2021-11-08-v2-beta2-release-notes.mdx b/website/i18n/vi/docusaurus-plugin-content-blog/2021-11-08-v2-beta2-release-notes.mdx new file mode 100644 index 00000000000..86d44616f40 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-blog/2021-11-08-v2-beta2-release-notes.mdx @@ -0,0 +1,170 @@ +--- +slug: wails-v2-beta-for-mac +title: Wails v2 Beta for MacOS +authors: + - leaanthony +tags: + - wails + - v2 +--- + +```mdx-code-block +
+ +
+
+``` + +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. + +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! + +So what's new for Wails v2 for Mac vs v1? Hint: It's pretty similar to the Windows Beta :wink: + +### New Features + +```mdx-code-block +
+ +
+
+``` + +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. + +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. + +### Mac Specific Options + +In addition to the normal application options, Wails v2 for Mac also brings some Mac extras: + +- Make your window all funky and translucent, like all the pretty swift apps! +- Highly customisable titlebar +- We support the NSAppearance options for the application +- Simple config to auto-create an "About" menu + +### No requirement to bundle 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 `` tag with a local src path. Want to use a cool font? Copy it in and add the path to it in your CSS. + +> Wow, that sounds like a webserver... + +Yes, it works just like a webserver, except it isn't. + +> So how do I include my assets? + +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. + +### New Development Experience + +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. + +It also provides the additional features: + +- Hot reload - Any changes to frontend assets will trigger and auto reload of the application frontend +- Auto rebuild - Any changes to your Go code will rebuild and relaunch your application + +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. + +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 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! + +### Remote Templates + +```mdx-code-block +
+ +
+
+``` + +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. + +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! + +### Native M1 Support + +Thanks to the amazing support of [Mat Ryer](https://github.com/matryer/), the Wails project now supports M1 native builds: + +```mdx-code-block +
+ +
+
+``` + +You can also specify `darwin/amd64` as a target too: + +```mdx-code-block +
+ +
+
+``` + +Oh, I almost forgot.... you can also do `darwin/universal`.... :wink: + +```mdx-code-block +
+ +
+
+``` + +### Cross Compilation to Windows + +Because Wails v2 for Windows is pure Go, you can target Windows builds without docker. + +```mdx-code-block +
+ +
+
+``` + +### 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. + +### In Conclusion + +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. + +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. + +I look forward to seeing what people build with Wails in this next exciting phase of the project! + +Lea. + +PS: Linux users, you're next! + +PPS: If you or your company find Wails useful, please consider [sponsoring the project](https://github.com/sponsors/leaanthony). Thanks! diff --git a/website/i18n/vi/docusaurus-plugin-content-blog/2022-02-22-v2-beta3-release-notes.mdx b/website/i18n/vi/docusaurus-plugin-content-blog/2022-02-22-v2-beta3-release-notes.mdx new file mode 100644 index 00000000000..b405953cfbc --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-blog/2022-02-22-v2-beta3-release-notes.mdx @@ -0,0 +1,114 @@ +--- +slug: wails-v2-beta-for-linux +title: Wails v2 Beta for Linux +authors: + - leaanthony +tags: + - wails + - v2 +--- + +```mdx-code-block +
+ +
+
+``` + +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: + +### New Features + +```mdx-code-block +
+ +
+
+``` + +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. + +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. + +### No requirement to bundle 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 `` tag with a local src path. Want to use a cool font? Copy it in and add the path to it in your CSS. + +> Wow, that sounds like a webserver... + +Yes, it works just like a webserver, except it isn't. + +> So how do I include my assets? + +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. + +### New Development Experience + +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. + +It also provides the additional features: + +- Hot reload - Any changes to frontend assets will trigger and auto reload of the application frontend +- Auto rebuild - Any changes to your Go code will rebuild and relaunch your application + +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. + +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 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! + +### Remote Templates + +```mdx-code-block +
+ +
+
+``` + +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. + +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! + +### Cross Compilation to Windows + +Because Wails v2 for Windows is pure Go, you can target Windows builds without docker. + +```mdx-code-block +
+ +
+
+``` + +### In Conclusion + +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. + +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! + +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. + +I look forward to seeing what people build with Wails in this next exciting phase of the project! + +Lea. + +PS: The v2 release isn't far off now! + +PPS: If you or your company find Wails useful, please consider [sponsoring the project](https://github.com/sponsors/leaanthony). Thanks! diff --git a/website/i18n/vi/docusaurus-plugin-content-blog/2022-09-22-v2-release-notes.mdx b/website/i18n/vi/docusaurus-plugin-content-blog/2022-09-22-v2-release-notes.mdx new file mode 100644 index 00000000000..c321f5042d7 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-blog/2022-09-22-v2-release-notes.mdx @@ -0,0 +1,98 @@ +--- +slug: wails-v2-released +title: Wails v2 Released +authors: + - leaanthony +tags: + - wails + - v2 +--- + +```mdx-code-block +
+ +
+
+``` + +# It's here! + +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. + +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. + +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. + +# What _is_ 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). + +# What's new? + +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: + +- Webview2 component for Windows that supports modern web standards and debugging capabilities. +- [Dark / Light theme](/docs/reference/options#theme) + [custom theming](/docs/reference/options#customtheme) on Windows. +- Windows now has no CGO requirements. +- Out-of-the-box support for Svelte, Vue, React, Preact, Lit & Vanilla project templates. +- [Vite](https://vitejs.dev/) integration providing a hot-reload development environment for your application. +- Native application [menus](/docs/guides/application-development#application-menu) and [dialogs](/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. +- Easily generate an [NSIS installer](/docs/guides/windows-installer) for Windows deployments. +- A rich [runtime library](/docs/reference/runtime/intro) providing utility methods for window manipulation, eventing, dialogs, menus and logging. +- Support for [obfuscating](/docs/guides/obfuscated) your application using [garble](https://github.com/burrowers/garble). +- Support for compressing your application using [UPX](https://upx.github.io/). +- Automatic TypeScript generation of Go structs. More info [here](/docs/howdoesitwork#calling-bound-go-methods). +- No extra libraries or DLLs are required to be shipped with your application. For any platform. +- No requirement to bundle frontend assets. Just develop your application like any other web application. + +# Credit & Thanks + +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. + +There are a few people I'd like to give special mention to: + +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! + +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! + +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! + +# Lessons Learnt + +There are a number of lessons learnt in getting to v2 that will shape development moving forward. + +## Smaller, Quicker, Focused Releases + +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. + +## Encourage Engagement + +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). + +## Learning to say No + +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. + +# Looking to the Future + +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. + +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! + +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. + +# Final Words + +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. + +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. + +Enjoy! + +‐ Lea + +PS: If you or your company find Wails useful, please consider [sponsoring the project](https://github.com/sponsors/leaanthony). Thanks! diff --git a/website/i18n/vi/docusaurus-plugin-content-blog/2023-01-17-v3-roadmap.mdx b/website/i18n/vi/docusaurus-plugin-content-blog/2023-01-17-v3-roadmap.mdx new file mode 100644 index 00000000000..9a137d09a8c --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-blog/2023-01-17-v3-roadmap.mdx @@ -0,0 +1,184 @@ +--- +slug: the-road-to-wails-v3 +title: The Road to Wails v3 +authors: + - leaanthony +tags: + - wails + - v3 +--- + +```mdx-code-block +
+ +
+
+``` + +# Introduction + +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. + +Version 2 was released on the 22nd of September 2022 and brought with it a lot of enhancements including: + +- Live development, leveraging the popular Vite project +- Rich functionality for managing windows and creating menus +- Microsoft's WebView2 component +- Generation of Typescript models that mirror your Go structs +- Creating of NSIS Installer +- Obfuscated builds + +Right now, Wails v2 provides powerful tooling for creating rich, cross-platform desktop applications. + +This blog post aims to look at where the project is at right now and what we can improve on moving forward. + +# Where are we now? + +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. + +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. + +## Current issues + +I've identified the following areas that I feel are holding the project back: + +- The API +- Bindings generation +- The Build System + +### The API + +The API to build a Wails application currently consists of 2 parts: + +- The Application API +- The Runtime 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. + +The Runtime API provides a lot of utility functions for the developer. This includes: + +- Window management +- Dialogs +- Menus +- Events +- 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. + +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. + +### Thoughts on the v3 API + +Wouldn't it be great if we could do something like this? + +```go +func main() { + app := wails.NewApplication(options.App{}) + myWindow := app.NewWindow(options.Window{}) + myWindow.SetTitle("My Window") + myWindow.On(events.Window.Close, func() { + app.Quit() + }) + app.Run() +} +``` + +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: + +```go +app := wails.NewApplication(options.App{}) +app.NewInfoDialog(options.InfoDialog{}) +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): + +```go +func main() { + app := wails.NewApplication(options.App{}) + myWindow := app.NewWindow(options.Window{}) + myWindow.SetTitle("My Window") + myWindow.On(events.Window.Close, func() { + app.Quit() + }) + myWindow2 := app.NewWindow(options.Window{}) + myWindow2.SetTitle("My Window 2") + myWindow2.On(events.Window.Close, func() { + app.Quit() + }) + app.Run() +} +``` + +### Bindings generation + +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. + +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. + +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. + +### The 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: +- Builds the backend binary for bindings and generates the bindings +- Installs the frontend dependencies +- Builds the frontend assets +- Determines if the application icon is present and if so, embeds it +- Builds the final binary +- 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` +- If compression is required, it compresses the binary with UPX +- Determines if this binary is to be packaged and if so: + - Ensures the icon and application manifest are compiled into the binary (Windows) + - Builds out the application bundle, generates the icon bundle and copies it, the binary and Info.plist to the application bundle (Mac) +- If an NSIS installer is required, it builds it + +This entire process, whilst very powerful, is also very opaque. It is very difficult to customise it and it is very difficult to debug. + +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. + +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. + +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. + +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. + +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. + +## The Payoff + +These positive changes will be a huge benefit to the project: +- The new API will be much more intuitive and will allow for more complex applications to be built. +- Using static analysis for bindings generation will be much faster and reduce a lot of the complexity around the current process. +- Using an established, external build system will make the build process completely transparent, allowing for powerful customisation. + +Benefits to the project maintainers are: + +- The new API will be much easier to maintain and adapt to new features and platforms. +- 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. +- Better separation of concerns within the project. This will make it easier to add new features and platforms. + +## The 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. + +## Summary + +- 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. +- The build system is opaque and difficult to customise so we will move to an external build system which will open it all up. +- 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. + +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. + +I hope you are as excited about this as I am. I'm looking forward to hearing your thoughts and feedback. + +Regards, + +‐ Lea + +PS: If you or your company find Wails useful, please consider [sponsoring the project](https://github.com/sponsors/leaanthony). Thanks! + +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. \ No newline at end of file diff --git a/website/i18n/vi/docusaurus-plugin-content-blog/authors.yml b/website/i18n/vi/docusaurus-plugin-content-blog/authors.yml new file mode 100644 index 00000000000..a1621fab6b0 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-blog/authors.yml @@ -0,0 +1,10 @@ +leaanthony: + name: Lea Anthony + title: Maintainer of Wails + url: https://github.com/leaanthony + image_url: https://github.com/leaanthony.png +misitebao: + name: Misite Bao + title: Architect + url: https://github.com/misitebao + image_url: https://github.com/misitebao.png diff --git a/website/i18n/vi/docusaurus-plugin-content-blog/options.json b/website/i18n/vi/docusaurus-plugin-content-blog/options.json new file mode 100644 index 00000000000..9239ff706c2 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-blog/options.json @@ -0,0 +1,14 @@ +{ + "title": { + "message": "Blog", + "description": "The title for the blog used in SEO" + }, + "description": { + "message": "Blog", + "description": "The description for the blog used in SEO" + }, + "sidebar.title": { + "message": "Recent posts", + "description": "The label for the left sidebar" + } +} diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current.json b/website/i18n/vi/docusaurus-plugin-content-docs/current.json new file mode 100644 index 00000000000..ea817110073 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current.json @@ -0,0 +1,38 @@ +{ + "version.label": { + "message": "Phiên Bản Tiếp Theo 🚧", + "description": "The label for version current" + }, + "sidebar.docs.category.Getting Started": { + "message": "Hướng Dẫn Nhanh", + "description": "The label for category Getting Started in sidebar docs" + }, + "sidebar.docs.category.Reference": { + "message": "Tham Khảo", + "description": "The label for category Reference in sidebar docs" + }, + "sidebar.docs.category.Runtime": { + "message": "Bộ Công Cụ Runtime", + "description": "The label for category Runtime in sidebar docs" + }, + "sidebar.docs.category.Community": { + "message": "Cộng Đồng", + "description": "The label for category Community in sidebar docs" + }, + "sidebar.docs.category.Showcase": { + "message": "Trưng Bày", + "description": "The label for category Showcase in sidebar docs" + }, + "sidebar.docs.category.Guides": { + "message": "Định Hướng", + "description": "The label for category Guides in sidebar docs" + }, + "sidebar.docs.category.Tutorials": { + "message": "Thực Hành", + "description": "The label for category Tutorials in sidebar docs" + }, + "sidebar.docs.link.Contributing": { + "message": "Đóng Góp", + "description": "The label for link Contributing in sidebar docs, linking to /community-guide#ways-of-contributing" + } +} diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/community/links.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/community/links.mdx new file mode 100644 index 00000000000..e36a6edfe8c --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/community/links.mdx @@ -0,0 +1,26 @@ +--- +sidebar_position: 2 +--- + +# 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. + +## Awesome Wails + +The [definitive list](https://github.com/wailsapp/awesome-wails) of links related to Wails. + +## Support Channels + +- [Wails Discord Server](https://discord.gg/JDdSxwjhGf) +- [Github Issues](https://github.com/wailsapp/wails/issues) +- [v2 Beta Discussion Board](https://github.com/wailsapp/wails/discussions/828) + +## Social Media + +- [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 + +## Other Tutorials and Articles + +- [Building of Bulletin Board](https://blog.customct.com/building-bulletin-board) diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/bulletinboard.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/bulletinboard.mdx new file mode 100644 index 00000000000..37be75135ed --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/bulletinboard.mdx @@ -0,0 +1,10 @@ +# BulletinBoard + +```mdx-code-block +

+ +
+

+``` + +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). diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/emailit.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/emailit.mdx new file mode 100644 index 00000000000..c1817b70fff --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/emailit.mdx @@ -0,0 +1,10 @@ +# EmailIt + +```mdx-code-block +

+ +
+

+``` + +[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. It’s built using Wails2 and Svelte, and the download is a universal macOS application. diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/encrypteasy.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/encrypteasy.mdx new file mode 100644 index 00000000000..7504950ea76 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/encrypteasy.mdx @@ -0,0 +1,12 @@ +# EncryptEasy + +```mdx-code-block +

+ +
+

+``` + +**[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.** + +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. diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/filehound.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/filehound.mdx new file mode 100644 index 00000000000..bc569c3fec4 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/filehound.mdx @@ -0,0 +1,16 @@ +# FileHound Export Utility + +```mdx-code-block +

+ +
+

+``` + +[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. + +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. + +Backend built with: 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 diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/hiposter.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/hiposter.mdx new file mode 100644 index 00000000000..87e5837d32f --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/hiposter.mdx @@ -0,0 +1,10 @@ +# hiposter + +```mdx-code-block +

+ +
+

+``` + +[hiposter](https://github.com/obity/hiposter) is a simple and efficient http API testing client tool. Based on Wails, Go and sveltejs. diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/minecraftupdater.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/minecraftupdater.mdx new file mode 100644 index 00000000000..2f6c7c72b57 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/minecraftupdater.mdx @@ -0,0 +1,14 @@ +# Minecraft Updater + +```mdx-code-block +

+ +
+

+``` + +[Minecraft Updater](https://github.com/Gurkengewuerz/MinecraftModUpdater) is a utility tool to update and synchronize Minecraft mods for your userbase. It’s built using Wails2 and React with [antd](https://ant.design/) as frontend framework. diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/modalfilemanager.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/modalfilemanager.mdx new file mode 100644 index 00000000000..bcd21239607 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/modalfilemanager.mdx @@ -0,0 +1,14 @@ +# Modal File Manager + +```mdx-code-block +

+ +
+

+``` + +[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. + +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. diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/mollywallet.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/mollywallet.mdx new file mode 100644 index 00000000000..5d846d06d33 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/mollywallet.mdx @@ -0,0 +1,10 @@ +# Molley Wallet + +```mdx-code-block +

+ +
+

+``` + +[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. diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/october.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/october.mdx new file mode 100644 index 00000000000..66d634dc519 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/october.mdx @@ -0,0 +1,14 @@ +# October + +```mdx-code-block +

+ +
+

+``` + +[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). + +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/)! + +In contrast, the author's previous attempts with Electron quickly bloated to several hundred megabytes. diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/optimus.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/optimus.mdx new file mode 100644 index 00000000000..4f87479d6cf --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/optimus.mdx @@ -0,0 +1,10 @@ +# Optimus + +```mdx-code-block +

+ +
+

+``` + +[Optimus](https://github.com/splode/optimus) is a desktop image optimization application. It supports conversion and compression between WebP, JPEG, and PNG image formats. diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/portfall.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/portfall.mdx new file mode 100644 index 00000000000..03e740f4c6d --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/portfall.mdx @@ -0,0 +1,10 @@ +# Portfall + +```mdx-code-block +

+ +
+

+``` + +[Portfall](https://github.com/rekon-oss/portfall) - A desktop k8s port-forwarding portal for easy access to all your cluster UIs diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/restic-browser.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/restic-browser.mdx new file mode 100644 index 00000000000..3646384ecad --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/restic-browser.mdx @@ -0,0 +1,12 @@ +# Restic Browser + +```mdx-code-block +

+ +
+

+``` + +[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. diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/riftshare.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/riftshare.mdx new file mode 100644 index 00000000000..9928b478576 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/riftshare.mdx @@ -0,0 +1,21 @@ +# RiftShare + +```mdx-code-block +

+ +
+

+``` + +Easy, Secure, and Free file sharing for everyone. Learn more at [Riftshare.app](https://riftshare.app) + +## Features + +- Easy secure file sharing between computers both in the local network and through the internet +- Supports sending files or directories securely through the [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.) +- Automatic zipping of multiple selected files to send at once +- Full animations, progress bar, and cancellation support for sending and receiving +- Native OS File Selection +- Open files in one click once received +- Auto Update - don't worry about having the latest release! diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/scriptbar.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/scriptbar.mdx new file mode 100644 index 00000000000..3e41eb32abf --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/scriptbar.mdx @@ -0,0 +1,10 @@ +# ScriptBar + +```mdx-code-block +

+ +
+

+``` + +[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. diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/surge.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/surge.mdx new file mode 100644 index 00000000000..c3b3fb4c06d --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/surge.mdx @@ -0,0 +1,10 @@ +# Surge + +```mdx-code-block +

+ +
+

+``` + +[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. diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/wally.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/wally.mdx new file mode 100644 index 00000000000..7408aa5854f --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/wally.mdx @@ -0,0 +1,10 @@ +# Wally + +```mdx-code-block +

+ +
+

+``` + +[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. diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/warmine.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/warmine.mdx new file mode 100644 index 00000000000..950dc3f3db1 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/warmine.mdx @@ -0,0 +1,19 @@ +# Minecraft launcher for WarMine + +```mdx-code-block +

+ + +
+

+``` + +[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. + +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. + +Frontend is written in Svelte, whole launcher fits in 9MB and supports Windows 7-11. diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/wombat.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/wombat.mdx new file mode 100644 index 00000000000..f100c55e2de --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/wombat.mdx @@ -0,0 +1,10 @@ +# Wombat + +```mdx-code-block +

+ +
+

+``` + +[Wombat](https://github.com/rogchap/wombat) is a cross platform gRPC client. diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/ytd.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/ytd.mdx new file mode 100644 index 00000000000..5db428f722c --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/community/showcase/ytd.mdx @@ -0,0 +1,10 @@ +# Ytd + +```mdx-code-block +

+ +
+

+``` + +[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. diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/community/templates.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/community/templates.mdx new file mode 100644 index 00000000000..6ecbac37ee8 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/community/templates.mdx @@ -0,0 +1,69 @@ +--- +sidebar_position: 1 +--- + +# Templates + +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. + +To use these templates, run `wails init -n "Your Project Name" -t [the link below[@version]]` + +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. + +Example: `wails init -n "Your Project Name" -t https://github.com/misitebao/wails-template-vue` + +:::warning Attention + +**The Wails project does not maintain, is not responsible nor liable for 3rd party templates!** + +If you are unsure about a template, inspect `package.json` and `wails.json` for what scripts are run and what packages are installed. + +::: + +## 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-vite-vue-ts](https://github.com/codydbentley/wails-vite-vue-ts) - Vue 3 TypeScript with Vite (and instructions to add features) +- [wails-vite-vue-the-works](https://github.com/codydbentley/wails-vite-vue-the-works) - Vue 3 TypeScript with Vite, Vuex, Vue Router, Sass, and ESLint + Prettier +- [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-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 <script setup>) +- [wails-template-naive](https://github.com/tk103331/wails-template-naive) - Wails template based on Naive UI (A Vue 3 Component Library) + +## Angular + +- [wails-template-angular](https://github.com/mateothegreat/wails-template-angular) - Angular 15+ action packed & ready to roll to production. +- [wails-angular-template](https://github.com/TAINCER/wails-angular-template) - Angular with TypeScript, Sass, Hot-Reload, Code-Splitting and i18n + +## React + +- [wails-react-template](https://github.com/AlienRecall/wails-react-template) - A template using reactjs +- [wails-react-template](https://github.com/flin7/wails-react-template) - A minimal template for React that supports live development +- [wails-template-nextjs](https://github.com/LGiki/wails-template-nextjs) - A template using Next.js and TypeScript +- [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-shadcnui-template](https://github.com/Mahcks/wails-vite-react-tailwind-shadcnui-ts) - A template with Vite, React, TypeScript, TailwindCSS, and shadcn/ui + +## Svelte + +- [wails-svelte-template](https://github.com/raitonoberu/wails-svelte-template) - A template using Svelte +- [wails-vite-svelte-template](https://github.com/BillBuilt/wails-vite-svelte-template) - A template using Svelte and Vite +- [wails-vite-svelte-tailwind-template](https://github.com/BillBuilt/wails-vite-svelte-tailwind-template) - A template using Svelte and Vite with 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-sveltekit-template](https://github.com/h8gi/wails-sveltekit-template) - A template using SvelteKit + +## Solid + +- [wails-template-vite-solid-ts](https://github.com/xijaja/wails-template-solid-ts) - A template using Solid + Ts + Vite +- [wails-template-vite-solid-js](https://github.com/xijaja/wails-template-solid-js) - A template using Solid + Js + Vite + +## 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-template-elm-tailwind](https://github.com/rnice01/wails-template-elm-tailwind) - Combine the powers :muscle: of Elm + Tailwind CSS + Wails! Hot reloading supported. + +## 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 + +## Pure 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 diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/gettingstarted/building.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/gettingstarted/building.mdx new file mode 100644 index 00000000000..a1f69f03357 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/gettingstarted/building.mdx @@ -0,0 +1,22 @@ +--- +sidebar_position: 6 +--- + +# Compiling your Project + +From the project directory, run `wails build`. This will compile your project and save the production-ready binary in the `build/bin` directory. + +If you run the binary, you should see the default application: + +```mdx-code-block +
+ +
+
+``` + +For more details on compilation options, please refer to the [CLI Reference](../reference/cli.mdx#build). diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/gettingstarted/development.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/gettingstarted/development.mdx new file mode 100644 index 00000000000..034be31d620 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/gettingstarted/development.mdx @@ -0,0 +1,16 @@ +--- +sidebar_position: 5 +--- + +# Developing your Application + +You can run your application in development mode by running `wails dev` from your project directory. This will do the following things: + +- Build your application and run it +- Bind your Go code to the frontend so it can be called from JavaScript +- Using the power of [Vite](https://vitejs.dev/), will watch for modifications in your Go files and rebuild/re-run on change +- 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 + +To get started, run `wails dev` in the project directory. More information on this can be found [here](../reference/cli.mdx#dev). + +Coming soon: Tutorial diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/gettingstarted/firstproject.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/gettingstarted/firstproject.mdx new file mode 100644 index 00000000000..62ee97c8487 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/gettingstarted/firstproject.mdx @@ -0,0 +1,130 @@ +--- +sidebar_position: 2 +--- + +# Creating a Project + +## Project Generation + +Now that the CLI is installed, you can generate a new project by using the `wails init` command. + +Pick your favourite framework: + +```mdx-code-block +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + + + + Generate a Svelte project using JavaScript with:

+ + wails init -n myproject -t svelte + +If you would rather use TypeScript:
+ + wails init -n myproject -t svelte-ts + +
+ + Generate a React project using JavaScript with:

+ + wails init -n myproject -t react + +If you would rather use TypeScript:
+ + wails init -n myproject -t react-ts + +
+ + Generate a Vue project using JavaScript with:

+ + wails init -n myproject -t vue + +If you would rather use TypeScript:
+ + wails init -n myproject -t vue-ts + +
+ + Generate a Preact project using JavaScript with:

+ + wails init -n myproject -t preact + +If you would rather use TypeScript:
+ + wails init -n myproject -t preact-ts + +
+ + Generate a Lit project using JavaScript with:

+ + wails init -n myproject -t lit + +If you would rather use TypeScript:
+ + wails init -n myproject -t lit-ts + +
+ + Generate a Vanilla project using JavaScript with:

+ + wails init -n myproject -t vanilla + +If you would rather use TypeScript:
+ + wails init -n myproject -t vanilla-ts + +
+
+``` + +
+ +There are also [community templates](../community/templates.mdx) available that offer different capabilities and frameworks. + +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). + +## Project Layout + +Wails projects have the following layout: + +``` +. +├── build/ +│ ├── appicon.png +│ ├── darwin/ +│ └── windows/ +├── frontend/ +├── go.mod +├── go.sum +├── main.go +└── wails.json +``` + +### Project structure rundown + +- `/main.go` - The main application +- `/frontend/` - Frontend project files +- `/build/` - Project build directory +- `/build/appicon.png` - The application icon +- `/build/darwin/` - Mac specific project files +- `/build/windows/` - Windows specific project files +- `/wails.json` - The project configuration +- `/go.mod` - Go module file +- `/go.sum` - Go module checksum file + +The `frontend` directory has nothing specific to Wails and can be any frontend project of your choosing. + +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. + +The default module name in `go.mod` is "changeme". You should change this to something more appropriate. diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/gettingstarted/installation.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/gettingstarted/installation.mdx new file mode 100644 index 00000000000..14ed47373fa --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/gettingstarted/installation.mdx @@ -0,0 +1,90 @@ +--- +sidebar_position: 1 +--- + +# Installation + +## Supported Platforms + +- Windows 10/11 AMD64/ARM64 +- MacOS 10.13+ AMD64 +- MacOS 11.0+ ARM64 +- Linux AMD64/ARM64 + +## Dependencies + +Wails has a number of common dependencies that are required before installation: + +- Go 1.18+ +- NPM (Node 15+) + +### Go + +Download Go from the [Go Downloads Page](https://go.dev/dl/). + +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: + +- Check Go is installed correctly: `go version` +- Check "~/go/bin" is in your PATH variable: `echo $PATH | grep go/bin` + +### 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. + +Run `npm --version` to verify. + +## Platform Specific Dependencies + +You will also need to install platform specific dependencies: + +```mdx-code-block +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + + + + Wails requires that the xcode command line tools are installed. This can be + done by running xcode-select --install. + + + Wails requires that the WebView2 runtime is installed. Some Windows installations will already have this installed. You can check using the wails doctor command. + + + Linux requires the standard gcc build tools plus libgtk3 and libwebkit. 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 wails doctor after installation to be shown how to install the dependencies. If your distro/package manager is not supported, please consult the Add Linux Distro guide. + + +``` + +## Optional Dependencies + +- [UPX](https://upx.github.io/) for compressing your applications. +- [NSIS](https://wails.io/docs/guides/windows-installer/) for generating Windows installers. + +## Installing Wails + +Run `go install github.com/wailsapp/wails/v2/cmd/wails@latest` to install the Wails CLI. + +Note: If you get an error similar to this: + +```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 +``` +please check you have Go 1.18+ installed: +```shell +go version +``` + +## System Check + +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. + +## The `wails` command appears to be missing? + +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. diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/angular.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/angular.mdx new file mode 100644 index 00000000000..2b6c5a84571 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/angular.mdx @@ -0,0 +1,14 @@ +# Angular + +Whilst Wails does not have an Angular template, it is possible to use Angular with Wails. + +## Dev Mode + +To get dev mode working with Angular, you need to add the following to your `wails.json`: + +```json + "frontend:build": "npx ng build", + "frontend:install": "npm install", + "frontend:dev:watcher": "npx ng serve", + "frontend:dev:serverUrl": "http://localhost:4200", +``` \ No newline at end of file diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/application-development.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/application-development.mdx new file mode 100644 index 00000000000..e3b7cbc668d --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/application-development.mdx @@ -0,0 +1,215 @@ +# Application Development + +There are no hard and fast rules for developing applications with Wails, but there are some basic guidelines. + +## Application Setup + +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. + +The `app.go` file will define a struct that has 2 methods which act as hooks into the main application: + +```go title="app.go" +type App struct { + ctx context.Context +} + +func NewApp() *App { + return &App{} +} + +func (a *App) startup(ctx context.Context) { + a.ctx = ctx +} + +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. + +- 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. + +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: + +```go {3,9,10} title="main.go" +func main() { + + app := NewApp() + + err := wails.Run(&options.App{ + Title: "My App", + Width: 800, + Height: 600, + OnStartup: app.startup, + OnShutdown: app.shutdown, + }) + if err != nil { + log.Fatal(err) + } +} + +``` + +More information on application lifecycle hooks can be found [here](../howdoesitwork.mdx#application-lifecycle-callbacks). + +## Binding Methods + +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`: + +```go {16-18} title="app.go" +type App struct { + ctx context.Context +} + +func NewApp() *App { + return &App{} +} + +func (a *App) startup(ctx context.Context) { + a.ctx = ctx +} + +func (a *App) shutdown(ctx context.Context) { +} + +func (a *App) Greet(name string) string { + return fmt.Sprintf("Hello %s!", name) +} +``` + +In the main application configuration, the `Bind` key is where we can tell Wails what we want to bind: + +```go {11-13} title="main.go" +func main() { + + app := NewApp() + + err := wails.Run(&options.App{ + Title: "My App", + Width: 800, + Height: 600, + OnStartup: app.startup, + OnShutdown: app.shutdown, + Bind: []interface{}{ + app, + }, + }) + if err != nil { + log.Fatal(err) + } +} + +``` + +This will bind all public methods in our `App` struct (it will never bind the startup and shutdown methods). + +### Dealing with context when binding multiple structs + +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 : + +```go +func main() { + + app := NewApp() + otherStruct := NewOtherStruct() + + err := wails.Run(&options.App{ + Title: "My App", + Width: 800, + Height: 600, + OnStartup: func(ctx context.Context){ + app.SetContext(ctx) + otherStruct.SetContext(ctx) + }, + OnShutdown: app.shutdown, + Bind: []interface{}{ + app, + otherStruct + }, + }) + if err != nil { + log.Fatal(err) + } +} +``` + +More information on Binding can be found [here](../howdoesitwork.mdx#method-binding). + +## Application Menu + +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. + +```go {11} title="main.go" +func main() { + + app := NewApp() + + err := wails.Run(&options.App{ + Title: "My App", + Width: 800, + Height: 600, + OnStartup: app.startup, + OnShutdown: app.shutdown, + Menu: app.menu(), + Bind: []interface{}{ + app, + }, + }) + if err != nil { + log.Fatal(err) + } +} + +``` + +## 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. + +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: + +- "frontend:install" +- "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. + +If these 2 keys aren't given, then Wails does absolutely nothing with the frontend. It is only expecting that `embed.FS`. + +### 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 specifiy `nil` as the `Assets` option. + +## Built in 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. + +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. + +## External 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/). + +### 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`: + +```json + "frontend:dev:watcher": "yarn start", + "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: + +```html + + + + + +``` + +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. + +## 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. diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/crossplatform-build.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/crossplatform-build.mdx new file mode 100644 index 00000000000..fd81a974d04 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/crossplatform-build.mdx @@ -0,0 +1,66 @@ +# Crossplatform build with 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. + +An action that facilitates building a Wails app is available at: +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: +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: + +```yaml +name: Wails build + +on: + push: + tags: + # Match any new tag + - '*' + +env: + # Necessary for most environments as build failure can occur due to OOM issues + NODE_OPTIONS: "--max-old-space-size=4096" + +jobs: + build: + strategy: + # Failure in one platform build won't impact the others + fail-fast: false + matrix: + build: + - name: 'App' + platform: 'linux/amd64' + os: 'ubuntu-latest' + - name: 'App' + platform: 'windows/amd64' + os: 'windows-latest' + - name: 'App' + platform: 'darwin/universal' + os: 'macos-latest' + + runs-on: ${{ matrix.build.os }} + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + submodules: recursive + + - name: Build wails + uses: dAppServer/wails-build-action@v2.2 + id: build + with: + build-name: ${{ matrix.build.name }} + build-platform: ${{ matrix.build.platform }} + package: false + go-version: '1.20' +``` + +This example offers opportunities for various enhancements, including: + +- Caching dependencies +- Code signing +- Uploading to platforms like S3, Supbase, etc. +- Injecting secrets as environment variables +- Utilizing environment variables as build variables (such as version variable extracted from the current Git tag) diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/dynamic-assets.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/dynamic-assets.mdx new file mode 100644 index 00000000000..989202e27a6 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/dynamic-assets.mdx @@ -0,0 +1,136 @@ +# Dynamic Assets + +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. + +By installing a custom AssetsHandler, you can serve your own assets using a custom asset server. + +## Example + +In our example project, we will create a simple assets handler which will load files off disk: + +```go title=main.go {17-36,49} +package main + +import ( + "embed" + "fmt" + "github.com/wailsapp/wails/v2" + "github.com/wailsapp/wails/v2/pkg/options" + "github.com/wailsapp/wails/v2/pkg/options/assetserver" + "net/http" + "os" + "strings" +) + +//go:embed all:frontend/dist +var assets embed.FS + +type FileLoader struct { + http.Handler +} + +func NewFileLoader() *FileLoader { + return &FileLoader{} +} + +func (h *FileLoader) ServeHTTP(res http.ResponseWriter, req *http.Request) { + var err error + requestedFilename := strings.TrimPrefix(req.URL.Path, "/") + println("Requesting file:", requestedFilename) + fileData, err := os.ReadFile(requestedFilename) + if err != nil { + res.WriteHeader(http.StatusBadRequest) + res.Write([]byte(fmt.Sprintf("Could not load file %s", requestedFilename))) + } + + res.Write(fileData) +} + +func main() { + // Create an instance of the app structure + app := NewApp() + + // Create application with options + err := wails.Run(&options.App{ + Title: "helloworld", + Width: 1024, + Height: 768, + AssetServer: &assetserver.Options{ + Assets: assets, + Handler: NewFileLoader(), + }, + BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 255}, + OnStartup: app.startup, + Bind: []interface{}{ + app, + }, + }) + + if err != nil { + println("Error:", err) + } +} +``` + +When we run the application in dev mode using `wails dev`, we will see the following output: + +``` +DEB | [ExternalAssetHandler] Loading 'http://localhost:3001/favicon.ico' +DEB | [ExternalAssetHandler] Loading 'http://localhost:3001/favicon.ico' failed, using AssetHandler +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. + +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: + +``` +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: + +```mdx-code-block +

+ +

+``` + +However, if we request `go.mod`, we will see the following output: + +```mdx-code-block +

+ +

+``` + +This technique can be used to load images directly into the page. If we updated our default vanilla template and replaced the logo image: + +```html + +``` + +with: + +```html + +``` + +Then we would see the following: + +```mdx-code-block +

+ +

+``` + +:::warning + +Exposing your filesystem in this way is a security risk. It is recommended that you properly manage access to your filesystem. + +::: diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/file-association.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/file-association.mdx new file mode 100644 index 00000000000..b10c66bb373 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/file-association.mdx @@ -0,0 +1,199 @@ +# File Association + +File association feature allows you to associate specific file types with your app so that when users open those files, +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: + +To set up file association, you need to modify your application's wails.json file. +In "info" section add a "fileAssociations" section specifying the file types your app should be associated with. + +For example: + +```json +{ + "info": { + "fileAssociations": [ + { + "ext": "wails", + "name": "Wails", + "description": "Wails Application File", + "iconName": "wailsFileIcon", + "role": "Editor" + }, + { + "ext": "jpg", + "name": "JPEG", + "description": "Image File", + "iconName": "jpegFileIcon", + "role": "Editor" + } + ] + } +} +``` + +| Property | Description | +| :---------- | :------------------------------------------------------------------------------------------------------------------------------------------------- | +| ext | The extension (minus the leading period). e.g. png | +| name | The name. e.g. PNG File | +| 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 | +| description | Windows-only. The description. It is displayed on the `Type` column on Windows Explorer. | +| role | macOS-only. The app’s role with respect to the type. Corresponds to CFBundleTypeRole. | + +## Platform Specifics: + +### 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: + +```go title="main.go" +func main() { + // Create application with options + err := wails.Run(&options.App{ + Title: "wails-open-file", + Width: 1024, + Height: 768, + AssetServer: &assetserver.Options{ + Assets: assets, + }, + BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1}, + Mac: &mac.Options{ + OnFileOpen: func(filePaths []string) { println(filestring) }, + }, + Bind: []interface{}{ + app, + }, + }) + + if err != nil { + println("Error:", err.Error()) + } +} +``` + +### Windows + +On Windows file association is supported only with NSIS installer. During installation, the installer will create a +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" +func main() { + argsWithoutProg := os.Args[1:] + + if len(argsWithoutProg) != 0 { + println("launchArgs", argsWithoutProg) + } +} +``` + +### Linux + +Currently, Wails doesn't support bundling for Linux. So, you need to create file associations manually. +For example if you distribute your app as a .deb package, you can create file associations by adding required files in you bundle. +You can use [nfpm](https://nfpm.goreleaser.com/) to create .deb package for your app. + +1. Create a .desktop file for your app and specify file associations there. Example: + +```ini +[Desktop Entry] +Categories=Office +Exec=/usr/bin/wails-open-file %u +Icon=wails-open-file.png +Name=wails-open-file +Terminal=false +Type=Application +MimeType=application/x-wails;application/x-test +``` + +2. Create mime types file. Example: + +```xml + + + + Wails Application File + + + +``` + +3. Create icons for your file types. SVG icons are recommended. +4. Prepare postInstall/postRemove scripts for your package. Example: + +```sh +# reload mime types to register file associations +update-mime-database /usr/share/mime +# reload desktop database to load app in list of available +update-desktop-database /usr/share/applications +# update icons +update-icon-caches /usr/share/icons/* +``` + +5. Configure nfpm to use your scripts and files. Example: + +```yaml +name: "wails-open-file" +arch: "arm64" +platform: "linux" +version: "1.0.0" +section: "default" +priority: "extra" +maintainer: "FooBarCorp " +description: "Sample Package" +vendor: "FooBarCorp" +homepage: "http://example.com" +license: "MIT" +contents: +- src: ../bin/wails-open-file + dst: /usr/bin/wails-open-file +- src: ./main.desktop + dst: /usr/share/applications/wails-open-file.desktop +- src: ./application-wails-mime.xml + dst: /usr/share/mime/packages/application-x-wails.xml +- src: ./application-test-mime.xml + dst: /usr/share/mime/packages/application-x-test.xml +- src: ../appicon.svg + dst: /usr/share/icons/hicolor/scalable/apps/wails-open-file.svg +- src: ../wailsFileIcon.svg + dst: /usr/share/icons/hicolor/scalable/mimetypes/application-x-wails.svg +- src: ../testFileIcon.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 +- src: ../appicon.svg + dst: /usr/share/icons/Yaru/scalable/apps/wails-open-file.svg +- src: ../wailsFileIcon.svg + dst: /usr/share/icons/Yaru/scalable/mimetypes/application-x-wails.svg +- src: ../testFileIcon.svg + dst: /usr/share/icons/Yaru/scalable/mimetypes/application-x-test.svg +scripts: + postinstall: ./postInstall.sh + postremove: ./postRemove.sh +``` + +6. Build your .deb package using nfpm: + +```sh +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, + 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" +func main() { + argsWithoutProg := os.Args[1:] + + if len(argsWithoutProg) != 0 { + println("launchArgs", argsWithoutProg) + } +} +``` + +## Limitations: + +On Windows and Linux when associated file is opened, new instance of your app is launched. +Currently, Wails doesn't support opening files in already running app. There is plugin for single instance support for v3 in development. diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/frameless.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/frameless.mdx new file mode 100644 index 00000000000..3845736f427 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/frameless.mdx @@ -0,0 +1,87 @@ +# Frameless Applications + +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 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. + +```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: + +```go title=main.go +package main + +import ( + "embed" + + "github.com/wailsapp/wails/v2" + "github.com/wailsapp/wails/v2/pkg/options" + "github.com/wailsapp/wails/v2/pkg/options/assetserver" +) + +//go:embed all:frontend/dist +var assets embed.FS + +func main() { + // Create an instance of the app structure + app := NewApp() + + // Create application with options + err := wails.Run(&options.App{ + Title: "alwaysontop", + Width: 1024, + Height: 768, + AssetServer: &assetserver.Options{ + Assets: assets, + }, + Frameless: true, + CSSDragProperty: "widows", + CSSDragValue: "1", + Bind: []interface{}{ + app, + }, + }) + + if err != nil { + println("Error:", err) + } +} +``` + +```html title=index.html + + + + + + alwaysontop + + +
+ + + +``` + +:::info Fullscreen + +If you allow your application to go fullscreen, this drag functionality will be disabled. + +::: diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/frontend.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/frontend.mdx new file mode 100644 index 00000000000..ac087ee4514 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/frontend.mdx @@ -0,0 +1,72 @@ +# Frontend + +## Script Injection + +When Wails serves your `index.html`, by default, it will inject 2 script entries into the `` tag to load `/wails/ipc.js` and `/wails/runtime.js`. These files install the bindings and runtime respectively. + +The code below shows where these are injected by default: + +```html + + + injection example + + + + + + + +
Please enter your name below 👇
+
+ + +
+ + + + +``` + +### Overriding Default Script Injection + +To provide more flexibility to developers, there is a meta tag that may be used to customise this behaviour: + +```html + +``` + +The options are as follows: + +| Value | Description | +| ------------------- | ------------------------------------------------ | +| noautoinjectruntime | Disable the autoinjection of `/wails/runtime.js` | +| noautoinjectipc | Disable the autoinjection of `/wails/ipc.js` | +| noautoinject | Disable all autoinjection of scripts | + +Multiple options may be used provided they are comma seperated. + +This code is perfectly valid and operates the same as the autoinjection version: + +```html + + + injection example + + + + + + +
Please enter your name below 👇
+
+ + +
+ + + + + + +``` diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/ides.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/ides.mdx new file mode 100644 index 00000000000..f742822832a --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/ides.mdx @@ -0,0 +1,127 @@ +# IDEs + +Wails aims to provide a great development experience. To that aim, we now support generating IDE specific configuration to provide smoother project setup. + +Currently, we support [Visual Studio Code](https://code.visualstudio.com/) but aim to support other IDEs such as Goland. + +## Visual Studio Code + +```mdx-code-block +

+ +

+``` + +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. + +The 2 files generated are `tasks.json` and `launch.json`. Below are the files generated for the default vanilla project: + +```json title="tasks.json" +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "type": "shell", + "options": { + "cwd": "${workspaceFolder}" + }, + "command": "go", + "args": [ + "build", + "-tags", + "dev", + "-gcflags", + "all=-N -l", + "-o", + "build/bin/myproject.exe" + ] + } + ] +} +``` + +```json title="launch.json" +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Wails: Debug myproject", + "type": "go", + "request": "launch", + "mode": "exec", + "program": "${workspaceFolder}/build/bin/myproject.exe", + "preLaunchTask": "build", + "cwd": "${workspaceFolder}", + "env": {} + } + ] +} +``` + +### Configuring the install and build steps + +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: + +```json title="tasks.json" +{ + "version": "2.0.0", + "tasks": [ + { + "label": "npm install", + "type": "npm", + "script": "install", + "options": { + "cwd": "${workspaceFolder}/frontend" + }, + "presentation": { + "clear": true, + "panel": "shared", + "showReuseMessage": false + }, + "problemMatcher": [] + }, + { + "label": "npm run build", + "type": "npm", + "script": "build", + "options": { + "cwd": "${workspaceFolder}/frontend" + }, + "presentation": { + "clear": true, + "panel": "shared", + "showReuseMessage": false + }, + "problemMatcher": [] + }, + { + "label": "build", + "type": "shell", + "options": { + "cwd": "${workspaceFolder}" + }, + "command": "go", + "args": [ + "build", + "-tags", + "dev", + "-gcflags", + "all=-N -l", + "-o", + "build/bin/vscode.exe" + ], + "dependsOn": ["npm install", "npm run build"] + } + ] +} +``` + +:::info Future Enhancement + +In the future, we hope to generate a `tasks.json` that includes the install and build steps automatically. + +::: diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/linux-distro-support.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/linux-distro-support.mdx new file mode 100644 index 00000000000..8b25c15754a --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/linux-distro-support.mdx @@ -0,0 +1,103 @@ +# Linux Distro Support + +## Overview + +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: + +- apt +- dnf +- emerge +- eopkg +- nixpkgs +- pacman +- zypper + +## Adding package names + +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`. + +In this file, the list of packages are defined by the `Packages()` method: + +```go +func (a *Apt) Packages() packagemap { + return packagemap{ + "libgtk-3": []*Package{ + {Name: "libgtk-3-dev", SystemPackage: true, Library: true}, + }, + "libwebkit": []*Package{ + {Name: "libwebkit2gtk-4.0-dev", SystemPackage: true, Library: true}, + }, + "gcc": []*Package{ + {Name: "build-essential", SystemPackage: true}, + }, + "pkg-config": []*Package{ + {Name: "pkg-config", SystemPackage: true}, + }, + "npm": []*Package{ + {Name: "npm", SystemPackage: true}, + }, + "docker": []*Package{ + {Name: "docker.io", SystemPackage: true, Optional: true}, + }, + } +} +``` + +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: + +```go {5} +func (a *Apt) Packages() packagemap { + return packagemap{ + "libgtk-3": []*Package{ + {Name: "libgtk-3-dev", SystemPackage: true, Library: true}, + {Name: "lib-gtk3-dev", SystemPackage: true, Library: true}, + }, + "libwebkit": []*Package{ + {Name: "libwebkit2gtk-4.0-dev", SystemPackage: true, Library: true}, + }, + "gcc": []*Package{ + {Name: "build-essential", SystemPackage: true}, + }, + "pkg-config": []*Package{ + {Name: "pkg-config", SystemPackage: true}, + }, + "npm": []*Package{ + {Name: "npm", SystemPackage: true}, + }, + "docker": []*Package{ + {Name: "docker.io", SystemPackage: true, Optional: true}, + }, + } +} +``` + +## Adding new package managers + +To add a new package manager, perform the following steps: + +- Create a new file in `v2/internal/system/packagemanager` called `.go`, where `` is the name of the package manager. +- Define a struct that conforms to the package manager interface defined in `pm.go`: + +```go +type PackageManager interface { + Name() string + Packages() packagemap + PackageInstalled(*Package) (bool, error) + PackageAvailable(*Package) (bool, error) + InstallCommand(*Package) string +} +``` + +- `Name()` should return the name of the package manager +- `Packages()` should return a `packagemap`, that provides candidate filenames for dependencies +- `PackageInstalled()` should return `true` if the given package is installed +- `PackageAvailable()` should return `true` if the given package is not installed but available for installation +- `InstallCommand()` should return the exact command to install the given package name + +Take a look at the other package managers code to get an idea how this works. + +:::info Remember + +If you add support for a new package manager, don't forget to also update this page! + +::: diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/linux.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/linux.mdx new file mode 100644 index 00000000000..229c282bf55 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/linux.mdx @@ -0,0 +1,18 @@ +# Linux + +This page has miscellaneous guides related to developing Wails applications for Linux. + +## Video tag doesn't fire "ended" event + +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: + +```js +videoTag.addEventListener("timeupdate", (event) => { + if (event.target.duration - event.target.currentTime < 0.2) { + let ended = new Event("ended"); + event.target.dispatchEvent(ended); + } +}); +``` + +Source: [Lyimmi](https://github.com/Lyimmi) on the [discussions board](https://github.com/wailsapp/wails/issues/1729#issuecomment-1212291275) diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/local-development.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/local-development.mdx new file mode 100644 index 00000000000..4ba1f34c37d --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/local-development.mdx @@ -0,0 +1,55 @@ +# Local Development + +## Overview + +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: + +- `git clone https://github.com/wailsapp/wails` +- `cd wails/v2/cmd/wails` +- `go install` + +NOTE: The directory that you cloned the project into will now be called "clonedir". + +The Wails CLI will now be at the very latest version. + +### Updating your project + +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: + +`replace github.com/wailsapp/wails/v2 => ` + +Example: + +On 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` + +To revert to a stable version, run: + +`go install github.com/wailsapp/wails/v2/cmd/wails@latest` + +## Testing a Branch + +If you want to test a branch, follow the instructions above, but ensure you switch the branch you want to test before installing: + +- `git clone https://github.com/wailsapp/wails` +- `cd wails` +- `git checkout -b branch-to-test --track origin/branch-to-test` +- `cd v2/cmd/wails` +- `go install` + +Make sure you [update your project](#updating-your-project) as described above. + +## Testing a 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: + +- `git clone https://github.com/wailsapp/wails` +- `cd wails` +- `git fetch -u origin pull/[IDofThePR]/head:test/pr-[IDofThePR]` +- `git checkout test/pr-[IDofThePR]` +- `git reset --hard HEAD` +- `cd v2/cmd/wails` +- `go install` + +Make sure you [update your project](#updating-your-project) as described above. diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/mac-appstore.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/mac-appstore.mdx new file mode 100644 index 00000000000..961595711c7 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/mac-appstore.mdx @@ -0,0 +1,97 @@ +# Mac App Store Guide + +This page gives a brief overview of how to submit your Wails App to the Mac App Store. + +## Prerequisites + +- 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 +- You will need to have your Certificates, Identifiers, and App created on the developer portal. More on this below +- Xcode command line tools will need to be installed on your local machine + +#### Create Certificates and Identifiers + +1. Go to your [Apple Developer Account](https://developer.apple.com/account/) +2. Under `Certificates, Identifiers & Profiles`, click `Identifiers` and Register a New App ID. Use the 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. + +#### Create App Submission + +1. Go to the [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 +3. Populate your app with the correct screen shots, descriptions, etc. as required by Apple +4. Create a new version of your app + +#### Create Provisioning Profile +1. Go to the [Apple Developer Profiles](https://developer.apple.com/account/resources/profiles/list) page +2. Add a new provisioning profile for Mac App Store Distribution +3. Set the Profile Type as Mac and select the App ID for the application created above +4. Select the Mac App Distribution certificate +5. Name the Provisioning Profile embedded and download the created profile. + +## Mac App Store Process + +#### Enable Apple's App Sandbox + +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`. + +**Example Entitlements File** + +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. + +```xml title="entitlements.plist" + + + + + com.apple.security.app-sandbox + + com.apple.security.network.client + + com.apple.security.network.server + + com.apple.security.files.user-selected.read-write + + com.apple.security.files.downloads.read-write + + com.apple.application-identifier + TEAM_ID.APP_NAME + com.apple.developer.team-identifier + TEAM_ID + + +``` + +**Add the Embedded Provisioning Profile** The Provisioning Profile created above needs to be added to the root of the applicaton. It needs to be named embedded.provisionprofile. + +#### Build and Sign the App Package + +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. + +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. + +```bash title="macappstore-build.sh" +#!/bin/bash + +APP_CERTIFICATE="3rd Party Mac Developer Application: YOUR NAME (CODE)" +PKG_CERTIFICATE="3rd Party Mac Developer Installer: YOUR NAME (CODE)" +APP_NAME="YourApp" + +wails build -platform darwin/universal -clean + +cp ./embedded.provisionprofile "./build/bin/$APP_NAME.app/Contents" + +codesign --timestamp --options=runtime -s "$APP_CERTIFICATE" -v --entitlements ./build/darwin/entitlements.plist ./build/bin/$APP_NAME.app + +productbuild --sign "$PKG_CERTIFICATE" --component ./build/bin/$APP_NAME.app /Applications ./$APP_NAME.pkg +``` + +#### Upload App Bundle + +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. + +1. Download the [Transporter App](https://apps.apple.com/us/app/transporter/id1450874784) from the Mac App Store +2. Open it and sign in with your Apple ID +3. Click the + sign and select the `APP_NAME.pkg` file that you generated in the previous step. Upload it +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. + +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. diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/manual-builds.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/manual-builds.mdx new file mode 100644 index 00000000000..190084c52c3 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/manual-builds.mdx @@ -0,0 +1,95 @@ +# Xây Dựng Ứng Dụng Một Cách Thủ Công + +Các giao diện dòng lệnh (CLI) của Wails thực hiện rất nhiều công việc nặng nhọc nhất cho dự án của bạn, nhưng đôi khi bạn muốn xây dựng dự án theo một cách thủ công. Tài liệu tham khảo sau sẽ thảo luận về các cách khác nhau mà CLI có thể đạt được điều nêu trên. + +## Quy Trình Xây Dựng + +Khi dùng một trong hai câu lệnh `wails build` hoặc `wails dev`, CLI của Wails sẽ thực hiện các bước xây dựng sau đây: + + - Cài đặt các tập tin cần thiết cho frontend + - Xây dựng frontend + - Tạo ra các tập tin hệ thống + - Biên dịch ứng dụng cho hệ điều hành + - [không bắt buộc] Nén ứng dụng + +### Cài đặt các tập tin cần thiết cho frontend + +#### Các Bước CLI + +- Nếu lệnh phụ `-s` được đưa ra, bước này được lược bỏ +- Kiểm ra tệp `wails.json` xem nó đã được thêm vào câu lệnh `frontend:install` chưa +- Nếu chưa thì bước này được lược bỏ +- Nếu có thì tiếp tục kiểm tra xem tệp `package.json` có tồn tại trong thư mục frontend không. Nếu không có thì bước này được lược bỏ +- Tệp tin định dạng MD5 được tự tạo từ tệp tin `package.json` trong các tệp tin nội dung +- Nó kiểm tra sự tồn tại của tệp `package.json.md5` và nếu nó tồn tại, thì nó sẽ so sánh nội dung trong tập tin của chính mình (MD5 sum) với nội dung được tự tạo để xem nội dung có bị thay đổi hay không. Nếu chúng giống nhau thì bước này được bỏ qua +- Nếu tệp `package.json.md5` không tồn tại, nó sẽ tự động được tạo ra sử dụng nguồn từ tệp MD5 sum +- 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 + +#### Manual Steps + +This step could be done from the command line or a script with `npm install`. + +### Xây dựng frontend + +#### Wails CLI + +- Nếu lệnh phụ `-s` được đưa ra, bước này được lược bỏ +- Checks `wails.json` to see if there is a build command in the key `frontend:build` +- Nếu chưa thì bước này được lược bỏ +- If there is, it is executed in the frontend directory + +#### Manual Steps + +This step could be done from the command line or a script with `npm run build` or whatever the frontend build script is. + +### Generate assets + +#### Wails CLI + +- If `-nopackage` flag is set, this stage is skipped +- If the `build/appicon.png` file does not exist, a default one is created +- For Windows, see [Bundling for Windows](#windows) +- If `build/windows/icon.ico` does not exist, it will create it from the `build/appicon.png` image. + +##### 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). +- If the `build/windows/.manifest` file does not exist, it creates it from a default version. +- Compiles the application as a production build (above) +- Uses [winres](https://github.com/tc-hib/winres) to bundle the icon and manifest into a `.syso` file ready for linking. + +#### Manual Steps + +- Create `icon.ico` using the [winicon](https://github.com/leaanthony/winicon) CLI tool (or any other tool). +- Create / Update a `.manifest` file for your application +- Use the [winres CLI](https://github.com/tc-hib/go-winres) to generate a `.syso` file. + +### Biên dịch ứng dụng cho hệ điều hành + +#### Wails CLI + +- If the `-clean` flag is provided, the `build` directory is deleted and recreated +- For `wails dev`, the following default Go flags are used: `-tags dev -gcflags "all=-N -l"` +- For `wails build`, the following default Go flags are used: `-tags desktop,production -ldflags "-w -s"` + - On Windows, `-ldflags "-w -h -H windowsgui"` +- Additional tags passed to the CLI using `-tags` are added to the defaults +- Additional ldflags passed to the CLI using `-ldflags` are added to the defaults +- The `-o` flag is passed through +- The Go compiler specified by `-compiler` will be used for compilation + +#### Manual steps + +- For dev build, the minimum command would be: `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"` +- Ensure that you compile in the same directory as the `.syso` file + +### Compress application + +#### Wails CLI + +- If the `-upx` flag has been given, the `upx` program will be run to compress the application with the default settings +- If `-upxflags` is also passed, these flags are used instead of the default ones + +#### Manual steps + +- Run `upx [flags]` manually to compress the application. diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/migrating.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/migrating.mdx new file mode 100644 index 00000000000..7123cbe6b60 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/migrating.mdx @@ -0,0 +1,191 @@ +# Migrating from v1 + +## Overview + +Wails v2 is a significant change from v1. This document aims to highlight the changes and the steps in migrating an existing project. + +### Creating the Application + +In v1, the main application is created using `wails.CreateApp`, bindings are added with `app.Bind`, then the application is run using `app.Run()`. + +Example: + +```go title="v1" + app := wails.CreateApp(&wails.AppConfig{ + Title: "MyApp", + Width: 1024, + Height: 768, + JS: js, + CSS: css, + Colour: "#131313", + }) + app.Bind(basic) + app.Run() +``` + +In v2, there is just a single method, `wails.Run()`, that accepts [application options](../reference/options.mdx#application-options). + +```go title="v2" + err := wails.Run(&options.App{ + Title: "MyApp", + Width: 800, + Height: 600, + AssetServer: &assetserver.Options{ + Assets: assets, + }, + Bind: []interface{}{ + basic, + }, + }) +``` + +### Binding + +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): + +```go title="v1" + app := wails.CreateApp(/* options */) + app.Bind(basic) +``` + +```go title="v2" + err := wails.Run(&options.App{ + /* other options */ + Bind: []interface{}{ + basic, + }, + }) +``` + +In v1, bound methods were available to the frontend at `window.backend`. This has changed to `window.go`.`` + +### Application Lifecycle + +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): + +- [OnStartup](../reference/options.mdx#onstartup) +- [OnShutdown](../reference/options.mdx#onshutdown) +- [OnDomReady](../reference/options.mdx#ondomready) + +Note: [OnDomReady](../reference/options.mdx#ondomready) replaces the `wails:ready` system event in v1. + +These methods can be standard functions, but a common practice is to have them part of a struct: + +```go title="v2" + basic := NewBasicApp() + err := wails.Run(&options.App{ + /* Other Options */ + OnStartup: basic.startup, + OnShutdown: basic.shutdown, + OnDomReady: basic.domready, + }) +... +type Basic struct { + ctx context.Context +} +func (b *Basic) startup(ctx context.Context) { + b.ctx = ctx +} +... +``` + +### Runtime + +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 the the [Runtime Reference](../reference/runtime/intro.mdx). + +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. + +```go title="Runtime Example" +package main + +import "github.com/wailsapp/wails/v2/pkg/runtime" + +type Basic struct { + ctx context.Context +} + +// startup is called at application startup +func (a *App) startup(ctx context.Context) { + a.ctx = ctx + runtime.LogInfo(ctx, "Application Startup called!") +} + +``` + +### Assets + +The _biggest_ change in v2 is how assets are handled. + +In v1, assets were passed via 2 application options: + +- `JS` - The application's JavaScript +- `CSS` - The application's CSS + +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. + +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`. + +**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**. + +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. + +Example: An application has the following project layout. All final assets are placed in the `frontend/dist` directory: + +```shell +. +├── build/ +├── frontend/ +│ └── dist/ +│ ├── index.html +│ ├── main.js +│ ├── main.css +│ └── logo.svg +├── main.go +└── wails.json +``` + +Those assets may be used by the application by simply creating an `embed.FS`: + +```go title="Assets Example" +//go:embed all:frontend/dist +var assets embed.FS + +func main() { + err := wails.Run(&options.App{ + /* Other Options */ + AssetServer: &assetserver.Options{ + Assets: assets, + }, + }) +} +``` + +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). + +### Project Configuration + +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. + +The format of the file is slightly different. Here is a comparison: + +

+ +| v1 | v2 | Notes | +| ------------------ | ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| name | name | | +| description | | Removed | +| author / name | author / name | | +| author / email | author / email | | +| version | version | | +| binaryname | outputfilename | Changed | +| frontend / dir | | Removed | +| frontend / install | frontend:install | Changed | +| frontend / build | frontend:build | Changed | +| frontend / bridge | | Removed | +| frontend / serve | | Removed | +| tags | | Removed | +| | wailsjsdir | The directory to generate wailsjs modules | +| | assetdir | The directory of the compiled frontend assets for `dev` mode. This is normally inferred and could be left empty. | +| | 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. | + +

diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/mouse-buttons.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/mouse-buttons.mdx new file mode 100644 index 00000000000..4a3de2a61b5 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/mouse-buttons.mdx @@ -0,0 +1,25 @@ +# Mouse Buttons + +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: + +```javascript +window.addEventListener("mousedown", handleMouseButtonDown); + +function handleMouseButtonDown(event) { + if (event.button === 0) { + // left mouse button + } else if (event.button === 1) { + // middle mouse button + } else if (event.button === 2) { + // right mouse button + } else if (event.button === 3) { + // back mouse button + } else if (event.button === 4) { + // forward mouse button + } else { + // other mouse button + } +} +``` + +Reference: https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/button diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/obfuscated.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/obfuscated.mdx new file mode 100644 index 00000000000..21f7875e389 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/obfuscated.mdx @@ -0,0 +1,40 @@ +# Obfuscated Builds + +Wails includes support for obfuscating your application using [garble](https://github.com/burrowers/garble). + +To produce an obfuscated build, you can use the `-obfuscate` flag with the `wails build` command: + +```bash +wails build -obfuscated +``` + +To customise the obfuscation settings, you can use the `-garbleargs` flag: + +```bash +wails build -obfuscated -garbleargs "-literals -tiny -seed=myrandomseed" +``` + +These settings may be persisted in your [project config](../reference/project-config). + +## How it works + +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. + +:::note + +To ensure that your application will work in obfuscated mode, you must use the generated bindings under the `wailsjs` directory in your application. + +::: + +## Example + +Importing the "Greet" method from the bindings like this: + +```js +import { Greet } from "../../wailsjs/go/main/App"; + +// snip +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. diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/overscroll.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/overscroll.mdx new file mode 100644 index 00000000000..9d1d772d0fb --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/overscroll.mdx @@ -0,0 +1,10 @@ +# 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: + +```css +html { + height: 100%; + overflow: hidden; +} +``` diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/routing.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/routing.mdx new file mode 100644 index 00000000000..ce176943ea5 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/routing.mdx @@ -0,0 +1,47 @@ +# Routing + +Routing is a popular way to switch views in an application. This page offers some guidance around how to do that. + +## Vue + +The recommended approach for routing in Vue is [Hash Mode](https://next.router.vuejs.org/guide/essentials/history-mode.html#hash-mode): + +```js +import { createRouter, createWebHashHistory } from "vue-router"; + +const router = createRouter({ + history: createWebHashHistory(), + routes: [ + //... + ], +}); +``` + +## Angular + +The recommended approach for routing in Angular is [HashLocationStrategy](https://codecraft.tv/courses/angular/routing/routing-strategies#_hashlocationstrategy): + +```ts +RouterModule.forRoot(routes, { useHash: true }); +``` + +## React + +The recommended approach for routing in React is [HashRouter](https://reactrouter.com/en/main/router-components/hash-router): + +```jsx +import { HashRouter } from "react-router-dom"; + +ReactDOM.render( + + {/* The rest of your app goes here */} + + } exact /> + } /> + } /> + {/* more... */} + + , + root +); +``` diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/signing.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/signing.mdx new file mode 100644 index 00000000000..4c7cf45ba99 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/signing.mdx @@ -0,0 +1,387 @@ +# Code Signing + +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. + +## 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. + +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. + +First off, let's make sure we are able to build our Wails app in our GitHub CI. Here is a small workflow template: + +```yaml +name: "example" +on: + workflow_dispatch: + # This Action only starts when you go to Actions and manually run the workflow. + +jobs: + package: + strategy: + matrix: + platform: [windows-latest, macos-latest] + go-version: [1.18] + runs-on: ${{ matrix.platform }} + steps: + - uses: actions/checkout@v3 + - name: Install Go + uses: actions/setup-go@v2 + with: + go-version: ${{ matrix.go-version }} + - name: setup node + uses: actions/setup-node@v2 + with: + 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. + - name: Get Wails + run: go install github.com/wailsapp/wails/v2/cmd/wails@latest + - name: Build Wails app + run: | + wails build + - name: upload artifacts macOS + if: matrix.platform == 'macos-latest' + uses: actions/upload-artifact@v2 + with: + name: wails-binaries-macos + path: build/bin/* + - name: upload artifacts windows + if: matrix.platform == 'windows-latest' + uses: actions/upload-artifact@v2 + with: + name: wails-binaries-windows + 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': + +```PowerShell +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: + +- **WIN_SIGNING_CERT** with the contents of your base64 encoded certificate text. +- **WIN_SIGNING_CERT_PASSWORD** with the contents of your certificate password. + +Now we're ready to implement the signing in our workflow using one of the two methods: + +### Method 1: signing with commands + +This method uses PowerShell commands to sign our app, and leaves you control over the entire signing process. + +After the `"Build Wails app"` step, we can add the following step to our workflow: + +```yaml +- name: Sign Windows binaries + if: matrix.platform == 'windows-latest' + run: | + echo "Creating certificate file" + New-Item -ItemType directory -Path certificate + Set-Content -Path certificate\certificate.txt -Value '${{ secrets.WIN_SIGNING_CERT }}' + certutil -decode certificate\certificate.txt certificate\certificate.pfx + echo "Signing our binaries" + & 'C:/Program Files (x86)/Windows Kits/10/bin/10.0.17763.0/x86/signtool.exe' sign /fd /t /f certificate\certificate.pfx /p '${{ secrets.WIN_SIGNING_CERT_PASSWORD }}' + +``` + +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: + +- **signing algorithm**: usually sha256. +- **timestamping server**: URL to the timestamping server to use with your certificate. +- **path to binary**: path to the binary you want to sign. + +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: + +```yaml +name: "example" +on: + workflow_dispatch: + # This Action only starts when you go to Actions and manually run the workflow. + +jobs: + package: + strategy: + matrix: + platform: [windows-latest, macos-latest] + go-version: [1.18] + runs-on: ${{ matrix.platform }} + steps: + - uses: actions/checkout@v3 + - name: Install Go + uses: actions/setup-go@v2 + with: + go-version: ${{ matrix.go-version }} + - name: setup node + uses: actions/setup-node@v2 + with: + node-version: 14 + # You may need to manually build you frontend here, unless you have configured frontend build and install commands in wails.json. + - name: Get Wails + run: go install github.com/wailsapp/wails/v2/cmd/wails@latest + - name: Build Wails app + run: | + wails build + - name: Sign Windows binaries + if: matrix.platform == 'windows-latest' + run: | + echo "Creating certificate file" + New-Item -ItemType directory -Path certificate + Set-Content -Path certificate\certificate.txt -Value '${{ secrets.WIN_SIGNING_CERT }}' + certutil -decode certificate\certificate.txt certificate\certificate.pfx + echo "Signing our binaries" + & 'C:/Program Files (x86)/Windows Kits/10/bin/10.0.17763.0/x86/signtool.exe' sign /fd sha256 /tr http://ts.ssl.com /f certificate\certificate.pfx /p '${{ secrets.WIN_SIGNING_CERT_PASSWORD }}' .\build\bin\app.exe + + - name: upload artifacts macOS + if: matrix.platform == 'macos-latest' + uses: actions/upload-artifact@v2 + with: + name: wails-binaries-macos + path: build/bin/* + - name: upload artifacts windows + if: matrix.platform == 'windows-latest' + uses: actions/upload-artifact@v2 + with: + name: wails-binaries-windows + path: build/bin/* +``` + +### Method 2: automatically signing with Action + +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). + +--- + +## 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: + +```bash +base64 Certificates.p12 | pbcopy +``` + +Now you're ready to create some GitHub project secrets, just as with Windows: + +- **APPLE_DEVELOPER_CERTIFICATE_P12_BASE64** with the contents of your newly copied base64 certificate. +- **APPLE_DEVELOPER_CERTIFICATE_PASSWORD** with the contents of your certificate password. +- **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). + +Let's make sure we are able to build our Wails app in our GitHub Action workflow. Here is a small template: + +```yaml +name: "example" +on: + workflow_dispatch: + # This Action only starts when you go to Actions and manually run the workflow. + +jobs: + package: + strategy: + matrix: + platform: [windows-latest, macos-latest] + go-version: [1.18] + runs-on: ${{ matrix.platform }} + steps: + - uses: actions/checkout@v3 + - name: Install Go + uses: actions/setup-go@v2 + with: + go-version: ${{ matrix.go-version }} + - name: setup node + uses: actions/setup-node@v2 + with: + node-version: 14 + # You may need to manually build you frontend here, unless you have configured frontend build and install commands in wails.json. + - name: Get Wails + run: go install github.com/wailsapp/wails/v2/cmd/wails@latest + - name: Build Wails app + run: | + wails build + - name: upload artifacts macOS + if: matrix.platform == 'macos-latest' + uses: actions/upload-artifact@v2 + with: + name: wails-binaries-macos + path: build/bin/* + - name: upload artifacts windows + if: matrix.platform == 'windows-latest' + uses: actions/upload-artifact@v2 + with: + name: wails-binaries-windows + path: build/bin/* +``` + +For code signing on macOS, [gon](https://github.com/mitchellh/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. + +After the `Build Wails app` step, add the following to the workflow: + +```yaml +- name: MacOS download gon for code signing and app notarization + if: matrix.platform == 'macos-latest' + run: | + brew install mitchellh/gon/gon +``` + +Now we need to configure some gon config files in our `build/darwin` directory: + +1. gon-sign.json: + +```json +{ + "source": ["./build/bin/app.app"], + "bundle_id": "app.myapp", + "apple_id": { + "username": "my-appleid@email.com", + "password": "@env:APPLE_PASSWORD" + }, + "sign": { + "application_identity": "Developer ID Application: My Name" + } +} +``` + +Where `source` is your Wails binary, `bundle_id` is your bundle ID, `apple_id` contains your Apple ID username and App-Specific password which you created earlier, and `sign.application_identity` is your identity which you can find by running the following command: + +```bash +security find-identity -v -p codesigning +``` + +2. entitlements.plist: + +```plist + + + + + com.apple.security.app-sandbox + + com.apple.security.network.client + + com.apple.security.network.server + + com.apple.security.files.user-selected.read-write + + com.apple.security.files.downloads.read-write + + + +``` + +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). + +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: + +```plist + + + CFBundlePackageTypeAPPL + CFBundleNameMyApp + CFBundleExecutableapp + CFBundleIdentifierapp.myapp + CFBundleVersion0.1.0 + CFBundleGetInfoStringMy app is cool and nice and chill and + CFBundleShortVersionString0.1.0 + CFBundleIconFileiconfile + LSMinimumSystemVersion10.13.0 + NSHighResolutionCapabletrue + LSApplicationCategoryTypepublic.app-category.utilities + NSHumanReadableCopyright© Me + +``` + +Now we're ready to add the signing step in our workflow after building the Wails app: + +```yaml +- name: Import Code-Signing Certificates for macOS + if: matrix.platform == 'macos-latest' + uses: Apple-Actions/import-codesign-certs@v1 + with: + # The certificates in a PKCS12 file encoded as a base64 string + p12-file-base64: ${{ secrets.APPLE_DEVELOPER_CERTIFICATE_P12_BASE64 }} + # The password used to import the PKCS12 file. + p12-password: ${{ secrets.APPLE_DEVELOPER_CERTIFICATE_PASSWORD }} +- name: Sign our macOS binary + if: matrix.platform == 'macos-latest' + run: | + echo "Signing Package" + gon -log-level=info ./build/darwin/gon-sign.json +``` + +Please note that signing binaries with Apple could take anywhere from minutes to hours. + +## Combined workflow file: + +Here is our GitHub workflow file with Windows + macOS combined: + +```yaml +name: "example combined" +on: + workflow_dispatch: + # This Action only starts when you go to Actions and manually run the workflow. + +jobs: + package: + strategy: + matrix: + platform: [windows-latest, macos-latest] + go-version: [1.18] + runs-on: ${{ matrix.platform }} + steps: + - uses: actions/checkout@v3 + - name: Install Go + uses: actions/setup-go@v2 + with: + go-version: ${{ matrix.go-version }} + - name: setup node + uses: actions/setup-node@v2 + with: + node-version: 14 + # You may need to manually build you frontend here, unless you have configured frontend build and install commands in wails.json. + - name: Get Wails + run: go install github.com/wailsapp/wails/v2/cmd/wails@latest + - name: Build Wails app + run: | + wails build + - name: MacOS download gon for code signing and app notarization + if: matrix.platform == 'macos-latest' + run: | + brew install mitchellh/gon/gon + - name: Import Code-Signing Certificates for macOS + if: matrix.platform == 'macos-latest' + uses: Apple-Actions/import-codesign-certs@v1 + with: + # The certificates in a PKCS12 file encoded as a base64 string + p12-file-base64: ${{ secrets.APPLE_DEVELOPER_CERTIFICATE_P12_BASE64 }} + # The password used to import the PKCS12 file. + p12-password: ${{ secrets.APPLE_DEVELOPER_CERTIFICATE_PASSWORD }} + - name: Sign our macOS binary + if: matrix.platform == 'macos-latest' + run: | + echo "Signing Package" + gon -log-level=info ./build/darwin/gon-sign.json + - name: Sign Windows binaries + if: matrix.platform == 'windows-latest' + run: | + echo "Creating certificate file" + New-Item -ItemType directory -Path certificate + Set-Content -Path certificate\certificate.txt -Value '${{ secrets.WIN_SIGNING_CERT }}' + certutil -decode certificate\certificate.txt certificate\certificate.pfx + echo "Signing our binaries" + & 'C:/Program Files (x86)/Windows Kits/10/bin/10.0.17763.0/x86/signtool.exe' sign /fd sha256 /tr http://ts.ssl.com /f certificate\certificate.pfx /p '${{ secrets.WIN_SIGNING_CERT_PASSWORD }}' .\build\bin\Monitor.exe + - name: upload artifacts macOS + if: matrix.platform == 'macos-latest' + uses: actions/upload-artifact@v2 + with: + name: wails-binaries-macos + path: build/bin/* + - name: upload artifacts windows + if: matrix.platform == 'windows-latest' + uses: actions/upload-artifact@v2 + with: + name: wails-binaries-windows + path: build/bin/* +``` + +# End notes + +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). diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/sveltekit.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/sveltekit.mdx new file mode 100644 index 00000000000..4651c422ed1 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/sveltekit.mdx @@ -0,0 +1,153 @@ +# SvelteKit + +This guide will go into: + +1. Miminal Installation Steps - The steps needed to get a minimum Wails setup working for SvelteKit. +2. Install Script - Bash script for accomplishing the Minimal Installation Steps with optional Wails branding. +3. Important Notes - Issues that can be encountered when using SvelteKit + Wails and fixes. + +## 1. Minimal Installation Steps + +##### Install Wails for Svelte. + +- `wails init -n myapp -t svelte` + +##### Delete the svelte frontend. + +- Navigate into your newly created myapp folder. +- Delete the folder named "frontend" + +##### While in the Wails project root. Use your favorite package manager and install SvelteKit as the new frontend. Follow the prompts. + +- `npm create svelte@latest frontend` + +##### Modify wails.json. + +- Add `"wailsjsdir": "./frontend/src/lib",` Do note that this is where your Go and runtime functions will appear. +- Change your package manager frontend here if not using npm. + +##### Modify main.go. + +- The first comment `//go:embed all:frontend/dist` needs to be changed to `//go:embed all:frontend/build` + +##### Install/remove dependencies using your favorite package manager. + +- Navigate into your "frontend" folder. +- `npm i` +- `npm uninstall @sveltejs/adapter-auto` +- `npm i -D @sveltejs/adapter-static` + +##### Change adapter in svelte.config.js + +- First line of file change `import adapter from '@sveltejs/adapter-auto';` to `import adapter from '@sveltejs/adapter-static';` + +##### Put SvelteKit into SPA mode with prerendering. + +- Create a file under myapp/frontend/src/routes/ named +layout.ts/+layout.js. +- Add two lines into the newly created file `export const prerender = true` and `export const ssr = false` + +##### Test installation. + +- Navigate back into the Wails project root (one directory up). +- run `wails dev` +- If the application doesn't run please check through the previous steps. + +## 2. Install Script + +##### 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. + +- Create a file sveltekit-wails.sh +- Copy the below code into the new file then save it. +- Make it executable with `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. +- Example usage: `./sveltekit-wails.sh pnpm newapp brand` + +##### sveltekit-wails.sh: + +``` +manager=$1 +project=$2 +brand=$3 +wails init -n $project -t svelte +cd $project +sed -i "s|npm|$manager|g" wails.json +sed -i 's|"auto",|"auto",\n "wailsjsdir": "./frontend/src/lib",|' wails.json +sed -i "s|all:frontend/dist|all:frontend/build|" main.go +if [[ -n $brand ]]; then + mv frontend/src/App.svelte +page.svelte + sed -i "s|'./assets|'\$lib/assets|" +page.svelte + sed -i "s|'../wails|'\$lib/wails|" +page.svelte + mv frontend/src/assets . +fi +rm -r frontend +$manager create svelte@latest frontend +if [[ -n $brand ]]; then + mv +page.svelte frontend/src/routes/+page.svelte + mkdir frontend/src/lib + mv assets frontend/src/lib/ +fi +cd frontend +$manager i +$manager uninstall @sveltejs/adapter-auto +$manager i -D @sveltejs/adapter-static +echo -e "export const prerender = true\nexport const ssr = false" > src/routes/+layout.ts +sed -i "s|-auto';|-static';|" svelte.config.js +cd .. +wails dev +``` + +## 3. Important Notes + +##### Server files will cause build failures. + +- \+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. + +##### The Wails runtime unloads with full page navigations! + +- Anything that causes full page navigations: `window.location.href = '//'` 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. +- Use `import { goto } from '$app/navigation'` then call `goto('//')` in your +page.svelte. This will prevent a full page navigation. +- If full page navigation can't be prevented the Wails runtime can be added to all pages by adding the below into the `` of myapp/frontend/src/app.html + +``` + +... + + + +... + +``` + +See https://wails.io/docs/guides/frontend for more information. + +##### Inital data can be loaded and refreshed from +page.ts/+page.js to +page.svelte. + +- \+page.ts/+page.js works well with 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. + +##### Error Handling + +- Expected errors using Throw error works in +page.ts/+page.js with a +error.svelte page. https://kit.svelte.dev/docs/errors#expected-errors +- 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. + +``` +import { WindowReloadApp } from '$lib/wailsjs/runtime/runtime' +export async function handleError() { + WindowReloadApp() +} +``` + +##### Using Forms and handling functions + +- The simplest way is to call a function from the form is the standard, bind:value your variables and prevent submission `` +- 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: + +``` + { + cancel() + console.log(Object.fromEntries(formData)) + console.log(formElement) + console.log(submitter) + handle() +}}> +``` diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/templates.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/templates.mdx new file mode 100644 index 00000000000..790e3107f04 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/templates.mdx @@ -0,0 +1,97 @@ +# Templates + +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: + +- Ability to generate projects from [Remote Templates](../reference/cli.mdx#remote-templates) +- Tooling to help create your own templates + +## Creating Templates + +To create a template, you can use the `wails generate template` command. To generate a default template, run: + +`wails generate template -name mytemplate` + +This creates the directory "mytemplate" with default files: + +```shell title=mytemplate/ +. +|-- NEXTSTEPS.md +|-- README.md +|-- app.tmpl.go +|-- frontend +| `-- dist +| |-- assets +| | |-- fonts +| | | |-- OFL.txt +| | | `-- nunito-v16-latin-regular.woff2 +| | `-- images +| | `-- logo-dark.svg +| |-- index.html +| |-- main.css +| `-- main.js +|-- go.mod.tmpl +|-- main.tmpl.go +|-- template.json +`-- wails.tmpl.json +``` + +### Template Overview + +The default template consists of the following files and directories: + +| Filename / Dir | Description | +| --------------- | -------------------------------------------- | +| NEXTSTEPS.md | Instructions on how to complete the template | +| README.md | The README published with the template | +| app.tmpl.go | `app.go` template file | +| frontend/ | The directory containing frontend assets | +| go.mod.tmpl | `go.mod` template file | +| main.tmpl.go | `main.go` template file | +| template.json | The template metadata | +| wails.tmpl.json | `wails.json` template file | + +At this point it is advisable to follow the steps in `NEXTSTEPS.md`. + +## Creating a Template from an Existing Project + +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: + +- Install the vue cli: `npm install -g @vue/cli` +- Create the default project: `vue create vue3-base` + - Select `Default (Vue 3) ([Vue 3] babel, eslint)` +- After the project has been generated, run: + +```shell +> wails generate template -name wails-vue3-template -frontend .\vue3-base\ +Extracting base template files... +Migrating existing project files to frontend directory... +Updating package.json data... +Renaming package.json -> package.tmpl.json... +Updating package-lock.json data... +Renaming package-lock.json -> package-lock.tmpl.json... +``` + +- The template may now be customised as specified in the `NEXTSTEPS.md` file +- Once the files are ready, it can be tested by running: `wails init -n my-vue3-project -t .\wails-vue3-template\` +- To test the new project, run: `cd my-vue3-project` then `wails build` +- Once the project has compiled, run it: `.\build\bin\my-vue3-project.exe` +- You should have a fully functioning Vue3 application: + +```mdx-code-block +
+ +
+``` + +## Publishing Templates + +Publishing a template is simply pushing the files to GitHub. The following best practice is encouraged: + +- Remove any unwanted files and directories (such as `.git`) from your frontend directory +- Ensure that `template.json` is complete, especially `helpurl` +- Push the files to GitHub +- Create a PR on the [Community Templates](../community/templates.mdx) page +- Announce the template on the [Template Announcement](https://github.com/wailsapp/wails/discussions/825) discussion board diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/troubleshooting.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/troubleshooting.mdx new file mode 100644 index 00000000000..1c3b6a9cc52 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/troubleshooting.mdx @@ -0,0 +1,368 @@ +# Troubleshooting + +An assortment of troubleshooting tips. + +## The `wails` command appears to be missing? + +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. + +## My application is displaying a white/blank screen + +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: + +```go +//go:embed all:frontend/dist +var assets embed.FS +``` + +Check that `frontend/dist` contains your application assets. + +### Mac + +If this happens on Mac, try adding the following to your `Info.plist`: + +```xml +NSAppTransportSecurity + + NSAllowsLocalNetworking + + +``` + +Reference: https://github.com/wailsapp/wails/issues/1504#issuecomment-1174317433 + +## Mac application not valid + +If your built application looks like this in finder: + +```mdx-code-block +

+ +

+``` + +it's likely that your application's `info.plist` is invalid. Update the file in `build/.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. + +## My application is not displaying the correct icon in Windows Explorer + +If your application is not displaying the correct icon, try deleting the hidden `IconCache.db` file located in the `C:\Users\<your username>\AppData\Local` directory. This will force Windows to rebuild the icon cache. + +Source: https://github.com/wailsapp/wails/issues/2360#issuecomment-1556070036 + +## Cannot call backend method from frontend with variadic arguments + +If you have a backend method defined with variadic parameters, eg: + +```go +func (a *App) TestFunc(msg string, args ...interface{}) error { + // Code +} +``` + +calling this method from the frontend like this will fail: + +```js +var msg = "Hello: "; +var args = ["Go", "JS"]; +window.go.main.App.TestFunc(msg, ...args) + .then((result) => { + //do things here + }) + .catch((error) => { + //handle error + }); +``` + +Workaround: + +```js +var msg = "Hello "; +var args = ["Go", "JS"]; +window.go.main.App.TestFunc(msg, args) + .then((result) => { + //without the 3 dots + //do things here + }) + .catch((error) => { + //handle error + }); +``` + +Credit: https://github.com/wailsapp/wails/issues/1186 + +## I'm having getting proxy errors when trying to install Wails + +If you are getting errors like this: + +``` +"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: + +``` +go env -w GO111MODULE=on +go env -w GOPROXY=https://goproxy.cn,direct +``` + +Source: https://github.com/wailsapp/wails/issues/1233 + +## The generated TypeScript doesn't have the correct types + +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). + +## When I navigate away from `index.html`, I am unable to call methods on the frontend + +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 `` section of any new page you navigate to: + +```html + + + + +``` + +Source: https://github.com/wailsapp/wails/discussions/1512 + +## I get `too many open files` errors on my Mac when I run `wails dev` + +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. + +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). + +## My Mac app gives me weird compilation errors + +A few users have reported seeing compilation errors such as the following: + +```shell +# github.com/wailsapp/wails/v2/internal/frontend/desktop/darwin +In file included from ../../pkg/mod/github.com/wailsapp/wails/v2@v2.0.0-beta.44.2/internal/frontend/desktop/darwin/callbacks.go:9: +In file included from /Library/Developer/CommandLineTools/SDKs/MacOSX12.1.sdk/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h:12: +/Library/Developer/CommandLineTools/SDKs/MacOSX12.1.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSBundle.h:91:143: error: function does not return NSString +- (NSAttributedString *)localizedAttributedStringForKey:(NSString *)key value:(nullable NSString *)value table:(nullable NSString *)tableName NS_FORMAT_ARGUMENT(1) NS_REFINED_FOR_SWIFT API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0)); + ~~~~~~~~~~~~~~ ^ ~ +/Library/Developer/CommandLineTools/SDKs/MacOSX12.1.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:103:48: note: expanded from macro 'NS_FORMAT_ARGUMENT' + #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. + +If reinstalling Xcode Command Tools still fails, you can check the path where the toolkit is located using: + +`xcode-select -p` + +If `/Applications/Xcode.app/Contents/Developer` is displayed, run `sudo xcode-select --switch /Library/Developer/CommandLineTools` + +Sources: https://github.com/wailsapp/wails/issues/1806 and https://github.com/wailsapp/wails/issues/1140#issuecomment-1290446496 + +## My application won't compile on Mac + +If you are getting errors like this: + +```shell +l1@m2 GoEasyDesigner % go build -tags dev -gcflags "all=-N -l" +/Users/l1/sdk/go1.20.5/pkg/tool/darwin_arm64/link: running clang failed: exit status 1 +Undefined symbols for architecture arm64: + "_OBJC_CLASS_$_UTType", referenced from: + objc-class-ref in 000016.o +ld: symbol(s) not found for architecture arm64 +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: + +```shell +export CGO_LDFLAGS="-framework UniformTypeIdentifiers" && go build -tags dev -gcflags "all=-N -l" +``` + +Sources: 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" + +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. + +If this does happen, simply delete `frontend/node_modules` and `frontend/package-lock.json` and run your `wails build` or `wails dev` command again. + +## Build process stuck on "Generating bindings" + +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. + +## Mac application flashes white at startup + +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: + +```go + err := wails.Run(&options.App{ + Title: "macflash", + Width: 1024, + Height: 768, + // Other settings + Mac: &mac.Options{ + WebviewIsTransparent: true, + }, + }) +``` + +## I get a "Microsoft Edge can't read or write to its data directory" error when running my program as admin on Windows + +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. + +When a Windows machine has two local accounts: + +- Alice, an admin +- Bob, a regular user + +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. + +Wails instructs WebView2 to store user data at the specified `WebviewUserDataPath`. It defaults to `%APPDATA%\[BinaryName.exe]`. + +Because the application is running under Alice's account, `%APPDATA%\[BinaryName.exe]` resolves to `C:\Users\Alice\AppData\Roaming\[BinaryName.exe]`. + +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. + +Possible solution #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: + +```go +//go:build windows + +package sample + +import ( + "golang.org/x/sys/windows" + "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. +func RunAs(path string) error { + verbPtr, _ := syscall.UTF16PtrFromString("runas") + exePtr, _ := syscall.UTF16PtrFromString(path) + cwdPtr, _ := syscall.UTF16PtrFromString("") + argPtr, _ := syscall.UTF16PtrFromString("") + + var showCmd int32 = 1 //SW_NORMAL + + err := windows.ShellExecute(0, verbPtr, exePtr, argPtr, cwdPtr, showCmd) + if err != nil { + return err + } + return nil +} +``` + +Possible solution #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: + +```go +package main + +import ( + "embed" + "os" + "runtime" + + "github.com/fourcorelabs/wintoken" + "github.com/hectane/go-acl" + "github.com/wailsapp/wails/v2" + "github.com/wailsapp/wails/v2/pkg/options" + "github.com/wailsapp/wails/v2/pkg/options/assetserver" + "github.com/wailsapp/wails/v2/pkg/options/windows" +) + +//go:embed all:frontend/dist +var assets embed.FS + +const ( + fixedTokenKey = "SAMPLE_RANDOM_KEY" + fixedTokenVal = "with-fixed-token" + webviewDir = "C:\\ProgramData\\Sample" +) + +func runWithFixedToken() { + println("Re-launching self") + token, err := wintoken.OpenProcessToken(0, wintoken.TokenPrimary) //pass 0 for own process + if err != nil { + panic(err) + } + defer token.Close() + + token.EnableTokenPrivileges([]string{ + "SeBackupPrivilege", + "SeDebugPrivilege", + "SeRestorePrivilege", + }) + + cmd := exec.Command(os.Args[0]) + cmd.Args = os.Args + cmd.Env = os.Environ() + cmd.Env = append(cmd.Env, fmt.Sprintf("%v=%v", fixedTokenKey, fixedTokenVal)) + cmd.Stdin = os.Stdin + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + cmd.SysProcAttr = &syscall.SysProcAttr{Token: syscall.Token(token.Token())} + if err := cmd.Run(); err != nil { + println("Error after launching self:", err) + os.Exit(1) + } + println("Clean self launch :)") + os.Exit(0) +} + +func main() { + if runtime.GOOS == "windows" && os.Getenv(fixedTokenKey) != fixedTokenVal { + runWithFixedToken() + } + + println("Setting data dir to", webviewDir) + if err := os.MkdirAll(webviewDir, os.ModePerm); err != nil { + println("Failed creating dir:", err) + } + if err := acl.Chmod(webviewDir, 0777); err != nil { + println("Failed setting ACL on dir:", err) + } + + app := NewApp() + + err := wails.Run(&options.App{ + Title: "sample-data-dir", + Width: 1024, + Height: 768, + AssetServer: &assetserver.Options{ + Assets: assets, + }, + Bind: []interface{}{ + app, + }, + Windows: &windows.Options{ + WebviewUserDataPath: webviewDir, + }, + }) + + if err != nil { + println("Error:", err.Error()) + } +} +``` + +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. + +Possible future solution #3: [run WebView2 using an in-memory mode if implemented](https://github.com/MicrosoftEdge/WebView2Feedback/issues/3637#issuecomment-1728300982). + +## WebView2 installation succeeded, but the wails doctor command shows that it is not installed + +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/). + +Source: https://github.com/wailsapp/wails/issues/2917 + +## 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). + diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/vscode.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/vscode.mdx new file mode 100644 index 00000000000..ed258656d63 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/vscode.mdx @@ -0,0 +1,82 @@ + +# Visual Studio Code + +This page is for miscellaneous tips and tricks when using Visual Studio Code with Wails. + +## Vetur Configuration + +Many thanks to [@Lyimmi](https://github.com/Lyimmi) for this tip. Originally posted [here](https://github.com/wailsapp/wails/issues/1791#issuecomment-1228158349). + +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: + +Create a file named `vetur.config.js` in the project's root. + +```javascript +// vetur.config.js +/** @type {import('vls').VeturConfig} */ +module.exports = { + // **optional** default: `{}` + // override vscode settings + // Notice: It only affects the settings used by Vetur. + settings: { + "vetur.useWorkspaceDependencies": true, + "vetur.experimental.templateInterpolationService": true + }, + // **optional** default: `[{ root: './' }]` + // support monorepos + projects: [ + { + // **required** + // Where is your project? + // It is relative to `vetur.config.js`. + // root: './packages/repo1', + root: './frontend', + // **optional** default: `'package.json'` + // Where is `package.json` in the project? + // We use it to determine the version of vue. + // It is relative to root property. + package: './package.json', + // **optional** + // Where is TypeScript config file in the project? + // It is relative to root property. + tsconfig: './tsconfig.json', + // **optional** default: `'./.vscode/vetur/snippets'` + // Where is vetur custom snippets folders? + snippetFolder: './.vscode/vetur/snippets', + // **optional** default: `[]` + // Register globally Vue component glob. + // If you set it, you can get completion by that components. + // It is relative to root property. + // Notice: It won't actually do it. You need to use `require.context` or `Vue.component` + globalComponents: [ + './src/components/**/*.vue' + ] + } + ] +} +``` + +Next, configure `frontend/tsconfig.json`: + +```javascript +{ + "compilerOptions": { + "module": "system", + "noImplicitAny": true, + "removeComments": true, + "preserveConstEnums": true, + "sourceMap": true, + "outFile": "../../built/local/tsc.js", + "allowJs": true + }, + "exclude": [ + "node_modules", + "**/*.spec.ts" + ], + "include": [ + "src/**/*", + "wailsjs/**/*.ts" + ] +} +``` +This should enable you to now use Vetur as expected. diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/windows-installer.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/windows-installer.mdx new file mode 100644 index 00000000000..2a360bb1cf5 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/windows-installer.mdx @@ -0,0 +1,58 @@ +# NSIS installer + +```mdx-code-block +

+ +
+

+``` + +Wails supports generating Windows installers using the [NSIS installer](https://nsis.sourceforge.io/). + +## Installing NSIS + +### Windows + +The installer is available on the [NSIS Download](https://nsis.sourceforge.io/Download) page. + +Nếu bạn sử dụng chocolatey package manager, chạy đoạn mã lệnh sau: + +``` +choco install nsis +``` + +Nếu bạn cài đặt NSIS một cách thủ công, thì bạn phải thêm thư mục _Bin_, thư mục này chứa tệp tin `makensis.exe`, trong gói cài đặt NSIS vào đường dẫn thư mục gốc của bạn. [Đây](https://www.architectryan.com/2018/03/17/add-to-the-path-on-windows-10/) là một ví dụ cụ thể về cách thức thêm đường dẫn trên Windows. + +### Linux + +Gói `NSIS` sẽ có sẵn thông qua quá trình phân phối của package manager. + +### MacOS + +NSIS sẽ có sẵn để cài đặt thông qua homebrew: `brew install nsis`. + +## Khởi Tạo Trình Cài Đặt + +Khi một dư án mới được khởi tạo, Wails sẽ tự động thiết lập các tệp cấu hình cho NSIS trong thư mục `build/windows/installer`. Các dữ liệu của cấu hình được đọc trong tệp `installer/info.json` và các cấu hình đó được sử dụng trong phần Info của file dự án `wails.json`: + +```json +// ... + "Info": { + "companyName": "My Company Name", + "productName": "Wails Vite", + "productVersion": "1.0.0", + "copyright": "Copyright.........", + "comments": "Built using Wails (https://wails.io)" + }, +``` + +Để khởi tạo trình cài đặt cho ứng dụng, bạn hãy dùng thêm lệnh `-nsis` phía sau lệnh `wails build`: + +``` +wails build -nsis +``` + +Trình cài đặt giờ đay đã sẵn sàng để sử dụng trong thue mục `build/bin`. diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/windows.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/windows.mdx new file mode 100644 index 00000000000..821808c0b8d --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/guides/windows.mdx @@ -0,0 +1,61 @@ +# Windows + +This page has miscellaneous guides related to developing Wails applications for Windows. + +## Handling the WebView2 Runtime Dependency + +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. + +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: + +1. Download +2. Embed +3. Browser +4. Error + +### Download + +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. + +### Embed + +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. + +### 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. + +### Error + +If no suitable runtime is found, an error is given to the user and no further action taken. + +## Fixed version runtime + +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. + +Also, you should specify path to fixed version of webview2 runtime in the `windows.Options` structure when launching wails. + +```go + wails.Run(&options.App{ + Windows: &windows.Options{ + WebviewBrowserPath: "", + }, + }) +``` + +Note: When `WebviewBrowserPath` is specified, `error` strategy will be forced in case of minimal required version mismatch or invalid path to a runtime. + +## Spawning other programs + +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: + +```go +cmd := exec.Command("your_script.exe") +cmd.SysProcAttr = &syscall.SysProcAttr{ + HideWindow: true, + CreationFlags: 0x08000000, +} +cmd.Start() +``` + +Solution provided by [sithembiso](https://github.com/sithembiso) on the [discussions board](https://github.com/wailsapp/wails/discussions/1734#discussioncomment-3386172). diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/howdoesitwork.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/howdoesitwork.mdx new file mode 100644 index 00000000000..44fa130cc74 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/howdoesitwork.mdx @@ -0,0 +1,369 @@ +--- +sidebar_position: 20 +--- + +# How does it work? + +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. + +```mdx-code-block +
+ +
+``` + +## The Main Application + +### Overview + +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: + +```go title="main.go" +package main + +import ( + "embed" + "log" + + "github.com/wailsapp/wails/v2" + "github.com/wailsapp/wails/v2/pkg/options" + "github.com/wailsapp/wails/v2/pkg/options/assetserver" +) + +//go:embed all:frontend/dist +var assets embed.FS + +func main() { + + app := &App{} + + err := wails.Run(&options.App{ + Title: "Basic Demo", + Width: 1024, + Height: 768, + AssetServer: &assetserver.Options{ + Assets: assets, + }, + OnStartup: app.startup, + OnShutdown: app.shutdown, + Bind: []interface{}{ + app, + }, + }) + if err != nil { + log.Fatal(err) + } +} + + +type App struct { + ctx context.Context +} + +func (b *App) startup(ctx context.Context) { + b.ctx = ctx +} + +func (b *App) shutdown(ctx context.Context) {} + +func (b *App) Greet(name string) string { + return fmt.Sprintf("Hello %s!", name) +} +``` + +### Options rundown + +This example has the following options set: + +- `Title` - The text that should appear in the window's title bar +- `Width` & `Height` - The dimensions of the window +- `Assets` - The application's frontend assets +- `OnStartup` - A callback for when the window is created and is about to start loading the frontend assets +- `OnShutdown` - A callback for when the application is about to quit +- `Bind` - A slice of struct instances that we wish to expose to the frontend + +A full list of application options can be found in the [Options Reference](reference/options). + +#### 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`: + +```go title="main.go" +//go:embed all:frontend/dist +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. + +As production binaries use the files contained in `embed.FS`, there are no external files required to be shipped with the application. + +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`. + +More details can be found in the [Application Development Guide](guides/application-development.mdx). + +#### Application Lifecycle 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). + +#### Method Binding + +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. + +:::info Note + +Wails requires that you pass in an _instance_ of the struct for it to bind it correctly + +::: + +In this example, we create a new `App` instance and then add this instance to the `Bind` option in `wails.Run`: + +```go {17,27} title="main.go" +package main + +import ( + "embed" + "log" + + "github.com/wailsapp/wails/v2" + "github.com/wailsapp/wails/v2/pkg/options" + "github.com/wailsapp/wails/v2/pkg/options/assetserver" +) + +//go:embed all:frontend/dist +var assets embed.FS + +func main() { + + app := &App{} + + err := wails.Run(&options.App{ + Title: "Basic Demo", + Width: 1024, + Height: 768, + AssetServer: &assetserver.Options{ + Assets: assets, + }, + Bind: []interface{}{ + app, + }, + }) + if err != nil { + log.Fatal(err) + } +} + + +type App struct { + ctx context.Context +} + +func (a *App) Greet(name string) string { + return fmt.Sprintf("Hello %s!", name) +} +``` + +You may bind as many structs as you like. Just make sure you create an instance of it and pass it in `Bind`: + +```go {10-12} + //... + err := wails.Run(&options.App{ + Title: "Basic Demo", + Width: 1024, + Height: 768, + AssetServer: &assetserver.Options{ + Assets: assets, + }, + Bind: []interface{}{ + app, + &mystruct1{}, + &mystruct2{}, + }, + }) + +``` + +When you run `wails dev` (or `wails generate module`), a frontend module will be generated containing the following: + +- JavaScript bindings for all bound methods +- TypeScript declarations for all bound methods +- TypeScript definitions for all Go structs used as inputs or outputs by the bound methods + +This makes it incredibly simple to call Go code from the frontend, using the same strongly typed datastructures. + +## The Frontend + +### Overview + +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: + +- Calling bound Go methods +- Calling runtime methods + +### Calling bound Go methods + +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: + +```bash +wailsjs + └─go + └─main + ├─App.d.ts + └─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: + +```javascript +// ... +import { Greet } from "../wailsjs/go/main/App"; + +function doGreeting(name) { + Greet(name).then((result) => { + // Do something with result + }); +} +``` + +The TypeScript declaration file gives you the correct types for the bound methods: + +```ts +export function Greet(arg1: string): Promise; +``` + +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. + +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. + +:::info Note + +Struct fields _must_ have a valid `json` tag to be included in the generated TypeScript. + +Anonymous nested structs are not supported at this time. + +::: + +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. + +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. + +Example: We update our `Greet` method to accept a `Person` instead of a string: + +```go title="main.go" +type Person struct { + Name string `json:"name"` + Age uint8 `json:"age"` + Address *Address `json:"address"` +} + +type Address struct { + Street string `json:"street"` + Postcode string `json:"postcode"` +} + +func (a *App) Greet(p Person) string { + return fmt.Sprintf("Hello %s (Age: %d)!", p.Name, p.Age) +} +``` + +The `wailsjs/go/main/App.js` file will still have the following code: + +```js title="App.js" +export function Greet(arg1) { + return window["go"]["main"]["App"]["Greet"](arg1); +} +``` + +But the `wailsjs/go/main/App.d.ts` file will be updated with the following code: + +```ts title="App.d.ts" +import { main } from "../models"; + +export function Greet(arg1: main.Person): Promise; +``` + +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: + +```ts title="models.ts" +export namespace main { + export class Address { + street: string; + postcode: string; + + static createFrom(source: any = {}) { + return new Address(source); + } + + constructor(source: any = {}) { + if ("string" === typeof source) source = JSON.parse(source); + this.street = source["street"]; + this.postcode = source["postcode"]; + } + } + export class Person { + name: string; + age: number; + address?: Address; + + static createFrom(source: any = {}) { + return new Person(source); + } + + constructor(source: any = {}) { + if ("string" === typeof source) source = JSON.parse(source); + this.name = source["name"]; + this.age = source["age"]; + this.address = this.convertValues(source["address"], Address); + } + + convertValues(a: any, classs: any, asMap: boolean = false): any { + if (!a) { + return a; + } + if (a.slice) { + return (a as any[]).map((elem) => this.convertValues(elem, classs)); + } else if ("object" === typeof a) { + if (asMap) { + for (const key of Object.keys(a)) { + a[key] = new classs(a[key]); + } + return a; + } + return new classs(a); + } + return a; + } + } +} +``` + +So long as you have TypeScript as part of your frontend build configuration, you can use these models in the following way: + +```js title="mycode.js" +import { Greet } from "../wailsjs/go/main/App"; +import { main } from "../wailsjs/go/models"; + +function generate() { + let person = new main.Person(); + person.name = "Peter"; + person.age = 27; + Greet(person).then((result) => { + console.log(result); + }); +} +``` + +The combination of generated bindings and TypeScript models makes for a powerful development environment. + +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). + +### Calling runtime methods + +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: + +```js title="mycode.js" +window.runtime.EventsEmit("my-event", 1); +``` + +More details about the JS runtime can be found in the [Runtime Reference](reference/runtime/intro). + +[^1]: There is a very small subset of libraries that use features unsupported in WebViews. There are often alternatives and workarounds for such cases. diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/introduction.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/introduction.mdx new file mode 100644 index 00000000000..a8bb301fb23 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/introduction.mdx @@ -0,0 +1,75 @@ +--- +sidebar_position: 1 +--- + +# Introduction + +Wails is a project that enables you to write desktop apps using Go and web technologies. + +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. + +### Features + +- Native Menus, Dialogs, Theming and Translucency +- Windows, macOS and linux support +- Built in templates for Svelte, React, Preact, Vue, Lit and Vanilla JS +- Easily call Go methods from JavaScript +- Automatic Go struct to TypeScript model generation +- No CGO or external DLLs required on Windows +- Live development mode using the power of [Vite](https://vitejs.dev/) +- Powerful CLI to easily Create, Build and Package applications +- A rich [runtime library](/docs/reference/runtime/intro) +- Applications built with Wails are Apple & Microsoft Store compliant + +This is [varly](https://varly.app) - 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. + +```mdx-code-block +

+ + + +

+``` + +### Quick Start Templates + +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. + +### Native Elements + +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. + +**It does not embed a browser**, so it is resource efficient. Instead, it uses the native rendering engine for the platform. On Windows, this is the new Microsoft Webview2 library, built on Chromium. + +### Go & JavaScript Interoperability + +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. + +### Runtime Library + +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. + +### Live Development Experience + +#### Automatic Rebuilds + +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. + +#### Automatic Reloads + +When changes to your application assets are detected, your running application will "reload", reflecting your changes almost immediately. + +#### Develop your application in a 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. + +### Production-ready Native Binaries + +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. + +### Tooling + +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! diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/reference/cli.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/reference/cli.mdx new file mode 100644 index 00000000000..c7aea10a64d --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/reference/cli.mdx @@ -0,0 +1,240 @@ +--- +sidebar_position: 2 +--- + +# CLI + +The Wails CLI has a number of commands that are used for managing your projects. All commands are run in the following way: + +`wails ` + +## init + +`wails init` is used for generating projects. + +| Flag | Description | Default | +|:------------------ |:----------------------------------------------------------------------------------------------------------------------- |:-------------------:| +| -n "project name" | Name of the project. **Mandatory**. | | +| -d "project dir" | Project directory to create | Name of the project | +| -g | Initialise git repository | | +| -l | List available project templates | | +| -q | Suppress output to console | | +| -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 | +| -ide | Generate IDE project files | | +| -f | Force build application | false | + +Example: `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. + +More information on using IDEs with Wails can be found [here](../guides/ides.mdx). + +### Remote Templates + +Remote templates (hosted on GitHub) are supported and can be installed by using the template's project URL. + +Example: `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) + +:::warning Attention + +**The Wails project does not maintain, is not responsible nor liable for 3rd party templates!** + +If you are unsure about a template, inspect `package.json` and `wails.json` for what scripts are run and what packages are installed. + +::: + +## build + +`wails build` is used for compiling your project to a production-ready binary. + +| Flag | Description | Default | +|:-------------------- |:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |:--------------------------------------------------------------------------------------------------------------------------------------------------- | +| -clean | Cleans the `build/bin` directory | | +| -compiler "compiler" | Use a different go compiler to build, eg 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 | | +| -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. | | +| -dryrun | Prints the build command without executing it | | +| -f | Force build application | | +| -garbleargs | Arguments to pass to garble | `-literals -tiny -seed=random` | +| -ldflags "flags" | Additional ldflags to pass to the compiler | | +| -m | Skip mod tidy before compile | | +| -nopackage | Do not package application | | +| -nocolour | Disable colour in output | | +| -nosyncgomod | Do not sync go.mod with the Wails version | | +| -nsis | Generate NSIS installer for Windows | | +| -o filename | Output filename | | +| -obfuscated | Obfuscate the application using [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`.
arch = `GOARCH` envrionment variable if given else `runtime.GOARCH`. | +| -race | Build with Go's race detector | | +| -s | Skip building the frontend | | +| -skipbindings | Skip bindings generation | | +| -tags "extra tags" | Build tags to pass to Go compiler. Must be quoted. Space or comma (but not both) separated | | +| -trimpath | Remove all file system paths from the resulting executable. | | +| -u | Updates your project's `go.mod` to use the same version of Wails as the CLI | | +| -upx | Compress final binary using "upx" | | +| -upxflags | Flags to pass to upx | | +| -v int | Verbosity level (0 - silent, 1 - default, 2 - verbose) | 1 | +| -webview2 | WebView2 installer strategy: download,embed,browser,error | download | +| -windowsconsole | Keep the console window for Windows builds | | + +For a detailed description of the `webview2` flag, please refer to the [Windows](../guides/windows.mdx) Guide. + +If you prefer to build using standard Go tooling, please consult the [Manual Builds](../guides/manual-builds.mdx) guide. + +Example: + +`wails build -clean -o myproject.exe` + +:::info + +On Mac, the application will be bundled with `Info.plist`, not `Info.dev.plist`. + +::: + +:::info UPX on Apple Silicon + +There are [issues](https://github.com/upx/upx/issues/446) with using UPX with Apple Silicon. + +::: + +:::info UPX on Windows + +Some Antivirus vendors false positively mark `upx` compressed binaries as virus, see [issue](https://github.com/upx/upx/issues/437). + +::: + +### Platforms + +Supported platforms are: + +| Platform | Description | +|:---------------- |:--------------------------------------------- | +| darwin | MacOS + architecture of build machine | +| darwin/amd64 | MacOS 10.13+ AMD64 | +| darwin/arm64 | MacOS 11.0+ ARM64 | +| darwin/universal | MacOS AMD64+ARM64 universal application | +| windows | Windows 10/11 + architecture of build machine | +| windows/amd64 | Windows 10/11 AMD64 | +| windows/arm64 | Windows 10/11 ARM64 | +| linux | Linux + architecture of build machine | +| linux/amd64 | Linux AMD64 | +| linux/arm64 | Linux ARM64 | + +## doctor + +`wails doctor` will run diagnostics to ensure that your system is ready for development. + +Example: + +``` +Wails CLI v2.0.0-beta + +Scanning system - Please wait (this may take a long time)...Done. + +System +------ +OS: Windows 10 Pro +Version: 2009 (Build: 19043) +ID: 21H1 +Go Version: go1.18 +Platform: windows +Architecture: amd64 + +Dependency Package Name Status Version +---------- ------------ ------ ------- +WebView2 N/A Installed 93.0.961.52 +npm N/A Installed 6.14.15 +*upx N/A Installed upx 3.96 + +* - Optional Dependency + +Diagnosis +--------- +Your system is ready for Wails development! + +``` + +## dev + +`wails dev` is used to run your application in a "live development" mode. This means: + +- The application's `go.mod` will be updated to use the same version of Wails as the CLI +- The application is compiled and run automatically +- A watcher is started and will trigger a rebuild of your dev app if it detects changes to your go files +- 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 +- All application assets are loaded from disk. If they are changed, the application will automatically reload (not rebuild). All connected browsers will also reload +- A JS module is generated that provides the following: +- JavaScript wrappers of your Go methods with autogenerated JSDoc, providing code hinting +- TypeScript versions of your Go structs, that can be constructed and passed to your go methods +- A second JS module is generated that provides a wrapper + TS declaration for the runtime +- 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. + +| Flag | Description | Default | +|:---------------------------- |:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |:--------------------- | +| -appargs "args" | Arguments passed to the application in shell style | | +| -assetdir "./path/to/assets" | Serve assets from the given directory instead of using the provided asset FS | Value in `wails.json` | +| -browser | Opens a browser to `http://localhost:34115` on startup | | +| -compiler "compiler" | Use a different go compiler to build, eg go1.15beta1 | go | +| -debounce | The time to wait for reload after an asset change is detected | 100 (milliseconds) | +| -devserver "host:port" | The address to bind the wails dev server to | "localhost:34115" | +| -extensions | Extensions to trigger rebuilds (comma separated) | go | +| -forcebuild | Force build of application | | +| -frontenddevserverurl "url" | Use 3rd party dev server url to serve assets, EG Vite | "" | +| -ldflags "flags" | Additional ldflags to pass to the compiler | | +| -loglevel "loglevel" | Loglevel to use - Trace, Debug, Info, Warning, Error | Debug | +| -nocolour | Turn off colour cli output | false | +| -noreload | Disable automatic reload when assets change | | +| -nosyncgomod | Do not sync go.mod with the Wails version | false | +| -race | Build with Go's race detector | false | +| -reloaddirs | Additional directories to trigger reloads (comma separated) | Value in `wails.json` | +| -s | Skip building the frontend | false | +| -save | Saves the given `assetdir`, `reloaddirs`, `wailsjsdir`, `debounce`, `devserver` and `frontenddevserverurl` flags in `wails.json` to become the defaults for subsequent invocations. | | +| -skipbindings | Skip bindings generation | | +| -tags "extra tags" | Build tags to pass to compiler (quoted and space separated) | | +| -v | Verbosity level (0 - silent, 1 - standard, 2 - verbose) | 1 | +| -wailsjsdir | The directory to generate the generated Wails JS modules | Value in `wails.json` | + +Example: + +`wails dev -assetdir ./frontend/dist -wailsjsdir ./frontend/src -browser` + +This command will do the following: + +- Build the application and run it (more details [here](../guides/manual-builds.mdx) +- Generate the Wails JS modules in `./frontend/src` +- Watch for updates to files in `./frontend/dist` and reload on any change +- Open a browser and connect to the application + +There is more information on using this feature with existing framework scripts [here](../guides/application-development.mdx#live-reloading). + +## generate + +### 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. + +| Flag | Description | +|:---------------- |:------------------------------------------- | +| -name | The template name (Mandatory) | +| -frontend "path" | Path to frontend project to use in template | + +For more details on creating templates, consult the [Templates guide](../guides/templates.mdx). + +### module + +The `wails generate module` command allows you to manually generate the `wailsjs` directory for your application. + +## update + +`wails update` will update the version of the Wails CLI. + +| Flag | Description | +|:------------------ |:------------------------------------- | +| -pre | Update to latest pre-release version | +| -version "version" | Install a specific version of the CLI | + +## version + +`wails version` will simply output the current CLI version. diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/reference/menus.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/reference/menus.mdx new file mode 100644 index 00000000000..ff9a2442281 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/reference/menus.mdx @@ -0,0 +1,230 @@ +--- +sidebar_position: 4 +--- + +# 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). + +An example of how to create a menu: + +```go + + app := NewApp() + + AppMenu := menu.NewMenu() + FileMenu := AppMenu.AddSubmenu("File") + FileMenu.AddText("&Open", keys.CmdOrCtrl("o"), openFile) + FileMenu.AddSeparator() + FileMenu.AddText("Quit", keys.CmdOrCtrl("q"), func(_ *menu.CallbackData) { + runtime.Quit(app.ctx) + }) + + if runtime.GOOS == "darwin" { + AppMenu.Append(menu.EditMenu()) // on macos platform, we should append EditMenu to enable Cmd+C,Cmd+V,Cmd+Z... shortcut + } + + err := wails.Run(&options.App{ + Title: "Menus Demo", + Width: 800, + Height: 600, + Menu: AppMenu, // reference the menu above + Bind: []interface{}{ + app, + }, + ) + // ... +``` + +It is also possible to dynamically update the menu, by updating the menu struct and calling [MenuUpdateApplicationMenu](../reference/runtime/menu.mdx#menuupdateapplicationmenu). + +The example above uses helper methods, however it's possible to build the menu structs manually. + +## Menu + +A Menu is a collection of MenuItems: + +```go title="Package: github.com/wailsapp/wails/v2/pkg/menu" +type Menu struct { + Items []*MenuItem +} +``` + +For the Application menu, each MenuItem represents a single menu such as "Edit". + +A simple helper method is provided for building menus: + +```go title="Package: github.com/wailsapp/wails/v2/pkg/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. + +## MenuItem + +A MenuItem represents an item within a Menu. + +```go title="Package: github.com/wailsapp/wails/v2/pkg/menu" +// MenuItem represents a menu item contained in a menu +type MenuItem struct { + Label string + Role Role + Accelerator *keys.Accelerator + Type Type + Disabled bool + Hidden bool + Checked bool + SubMenu *Menu + Click Callback +} +``` + +| Field | Type | Notes | +| ----------- | ------------------------------------ | ------------------------------------------------------------- | +| Label | string | The menu text | +| Accelerator | [\*keys.Accelerator](#accelerator) | Key binding for this menu item | +| Type | [Type](#type) | Type of MenuItem | +| Disabled | bool | Disables the menu item | +| Hidden | bool | Hides this menu item | +| Checked | bool | Adds check to item (Checkbox & Radio types) | +| SubMenu | [\*Menu](#menu) | Sets the submenu | +| Click | [Callback](#callback) | Callback function when menu clicked | +| Role | string | Defines a [role](#role) for this menu item. Mac only for now. | + +### 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. + +Example: + +```go title="Package: github.com/wailsapp/wails/v2/pkg/menu/keys" + // Defines cmd+o on Mac and ctrl-o on Window/Linux + 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: + +| | | | | +|:-----------:|:-----:|:-----:|:---------:| +| `backspace` | `f1` | `f16` | `f31` | +| `tab` | `f2` | `f17` | `f32` | +| `return` | `f3` | `f18` | `f33` | +| `enter` | `f4` | `f19` | `f34` | +| `escape` | `f5` | `f20` | `f35` | +| `left` | `f6` | `f21` | `numlock` | +| `right` | `f7` | `f22` | | +| `up` | `f8` | `f23` | | +| `down` | `f9` | `f24` | | +| `space` | `f10` | `f25` | | +| `delete` | `f11` | `f36` | | +| `home` | `f12` | `f37` | | +| `end` | `f13` | `f38` | | +| `page up` | `f14` | `f39` | | +| `page down` | `f15` | `f30` | | + +Wails also supports parsing accelerators using the same syntax as Electron. This is useful for storing accelerators in config files. + +Example: + +```go title="Package: github.com/wailsapp/wails/v2/pkg/menu/keys" + // Defines cmd+o on Mac and ctrl-o on Window/Linux + myShortcut, err := keys.Parse("Ctrl+Option+A") +``` + +#### Modifier + +The following modifiers are keys that may be used in combination with the accelerator key: + +```go title="Package: github.com/wailsapp/wails/v2/pkg/menu/keys" +const ( + // CmdOrCtrlKey represents Command on Mac and Control on other platforms + CmdOrCtrlKey Modifier = "cmdorctrl" + // OptionOrAltKey represents Option on Mac and Alt on other platforms + OptionOrAltKey Modifier = "optionoralt" + // ShiftKey represents the shift key on all systems + ShiftKey Modifier = "shift" + // ControlKey represents the control key on all systems + ControlKey Modifier = "ctrl" +) +``` + +A number of helper methods are available to create Accelerators using modifiers: + +```go title="Package: github.com/wailsapp/wails/v2/pkg/menu/keys" +func CmdOrCtrl(key string) *Accelerator +func OptionOrAlt(key string) *Accelerator +func Shift(key string) *Accelerator +func Control(key string) *Accelerator +``` + +Modifiers can be combined using `keys.Combo(key string, modifier1 Modifier, modifier2 Modifier, rest ...Modifier)`: + +```go title="Package: github.com/wailsapp/wails/v2/pkg/menu/keys" + // Defines "Ctrl+Option+A" on Mac and "Ctrl+Alt+A" on Window/Linux + myShortcut := keys.Combo("a", ControlKey, OptionOrAltKey) +``` + +### Type + +Each menu item must have a type and there are 5 types available: + +```go title="Package: github.com/wailsapp/wails/v2/pkg/menu" +const ( + TextType Type = "Text" + SeparatorType Type = "Separator" + SubmenuType Type = "Submenu" + CheckboxType Type = "Checkbox" + RadioType Type = "Radio" +) +``` + +For convenience, helper methods are provided to quickly create a menu item: + +```go title="Package: github.com/wailsapp/wails/v2/pkg/menu" +func Text(label string, accelerator *keys.Accelerator, click Callback) *MenuItem +func Separator() *MenuItem +func Radio(label string, selected bool, accelerator *keys.Accelerator, click Callback) *MenuItem +func Checkbox(label string, checked bool, accelerator *keys.Accelerator, click Callback) *MenuItem +func SubMenu(label string, menu *Menu) *Menu +``` + +You can also create menu items directly on a menu by using the "Add" helpers: + +```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) AddSeparator() *MenuItem +func (m *Menu) AddRadio(label string, selected bool, accelerator *keys.Accelerator, click Callback) *MenuItem +func (m *Menu) AddCheckbox(label string, checked bool, accelerator *keys.Accelerator, click Callback) *MenuItem +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. + +### Callback + +Each menu item may have a callback that is executed when the item is clicked: + +```go title="Package: github.com/wailsapp/wails/v2/pkg/menu" +type Callback func(*CallbackData) + +type CallbackData struct { + MenuItem *MenuItem +} +``` + +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. + +### Role + +:::info Roles + +Roles are currently supported on Mac only. + +::: + +A menu item may have a role, which is essentially a pre-defined menu item. We currently support the following roles: + +| Role | Description | +| ------------ | ------------------------------------------------------------------------ | +| AppMenuRole | The standard Mac application menu. Can be created using `menu.AppMenu()` | +| EditMenuRole | The standard Mac edit menu. Can be created using `menu.EditMenu()` | diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/reference/options.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/reference/options.mdx new file mode 100644 index 00000000000..46d1c071b60 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/reference/options.mdx @@ -0,0 +1,853 @@ +--- +sidebar_position: 3 +--- + +# Options + +## Application Options + +The `Options.App` struct contains the application configuration. It is passed to the `wails.Run()` method: + +```go title="Example" +import ( + "github.com/wailsapp/wails/v2/pkg/options" + "github.com/wailsapp/wails/v2/pkg/options/assetserver" + "github.com/wailsapp/wails/v2/pkg/options/linux" + "github.com/wailsapp/wails/v2/pkg/options/mac" + "github.com/wailsapp/wails/v2/pkg/options/windows" +) + +func main() { + + err := wails.Run(&options.App{ + Title: "Menus Demo", + Width: 800, + Height: 600, + DisableResize: false, + Fullscreen: false, + WindowStartState: options.Maximised, + Frameless: true, + MinWidth: 400, + MinHeight: 400, + MaxWidth: 1280, + MaxHeight: 1024, + StartHidden: false, + HideWindowOnClose: false, + BackgroundColour: &options.RGBA{R: 0, G: 0, B: 0, A: 255}, + AlwaysOnTop: false, + AssetServer: &assetserver.Options{ + Assets: assets, + Handler: assetsHandler, + Middleware: assetsMidldeware, + }, + Menu: app.applicationMenu(), + Logger: nil, + LogLevel: logger.DEBUG, + LogLevelProduction: logger.ERROR, + OnStartup: app.startup, + OnDomReady: app.domready, + OnShutdown: app.shutdown, + OnBeforeClose: app.beforeClose, + CSSDragProperty: "--wails-draggable", + CSSDragValue: "drag", + EnableDefaultContextMenu: false, + EnableFraudulentWebsiteDetection: false, + ZoomFactor: 1.0, + IsZoomControlEnabled: false, + Bind: []interface{}{ + app, + }, + ErrorFormatter: func(err error) any { return err.Error() }, + Windows: &windows.Options{ + WebviewIsTransparent: false, + WindowIsTranslucent: false, + BackdropType: windows.Mica, + DisableWindowIcon: false, + DisableFramelessWindowDecorations: false, + WebviewUserDataPath: "", + WebviewBrowserPath: "", + Theme: windows.SystemDefault, + CustomTheme: &windows.ThemeSettings{ + DarkModeTitleBar: windows.RGB(20, 20, 20), + DarkModeTitleText: windows.RGB(200, 200, 200), + DarkModeBorder: windows.RGB(20, 0, 20), + LightModeTitleBar: windows.RGB(200, 200, 200), + LightModeTitleText: windows.RGB(20, 20, 20), + LightModeBorder: windows.RGB(200, 200, 200), + }, + // User messages that can be customised + Messages *windows.Messages + // OnSuspend is called when Windows enters low power mode + OnSuspend func() + // OnResume is called when Windows resumes from low power mode + OnResume func(), + WebviewGpuDisabled: false, + }, + Mac: &mac.Options{ + TitleBar: &mac.TitleBar{ + TitlebarAppearsTransparent: true, + HideTitle: false, + HideTitleBar: false, + FullSizeContent: false, + UseToolbar: false, + HideToolbarSeparator: true, + }, + Appearance: mac.NSAppearanceNameDarkAqua, + WebviewIsTransparent: true, + WindowIsTranslucent: false, + About: &mac.AboutInfo{ + Title: "My Application", + Message: "© 2021 Me", + Icon: icon, + }, + }, + Linux: &linux.Options{ + Icon: icon, + WindowIsTranslucent: false, + WebviewGpuPolicy: linux.WebviewGpuPolicyAlways, + ProgramName: "wails" + }, + Debug: options.Debug{ + OpenInspectorOnStartup: false, + }, + }) + + if err != nil { + log.Fatal(err) + } +} + +``` + +### Title + +The text shown in the window's title bar. + +Name: Title
Type: `string` + +### Width + +The initial width of the window. + +Name: Width
Type: `int`
Default: 1024. + +### Height + +The initial height of the window. + +Name: Height
Type: `int`
Default: 768 + +### DisableResize + +By default, the main window is resizable. Setting this to `true` will keep it a fixed size. + +Name: DisableResize
Type: `bool` + +### Fullscreen + +Deprecated: Please use [WindowStartState](#windowstartstate). + +### WindowStartState + +Defines how the window should present itself at startup. + +| Value | Win | Mac | Lin | +| ---------- | --- | --- | --- | +| Fullscreen | ✅ | ✅ | ✅ | +| Maximised | ✅ | ✅ | ✅ | +| Minimised | ✅ | ❌ | ✅ | + +Name: WindowStartState
Type: `options.WindowStartState` + +### Frameless + +When set to `true`, the window will have no borders or title bar. Also see [Frameless Windows](../guides/frameless.mdx). + +Name: Frameless
Type: `bool` + +### 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. + +Name: MinWidth
Type: `int` + +### 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. + +Name: MinHeight
Type: `int` + +### 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. + +Name: MaxWidth
Type: `int` + +### 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. + +Name: MaxHeight
Type: `int` + +### StartHidden + +When set to `true`, the application will be hidden until [WindowShow](../reference/runtime/window.mdx#windowshow) is called. + +Name: StartHidden
Type: `bool` + +### HideWindowOnClose + +By default, closing the window will close the application. Setting this to `true` means closing the window will + +hide the window instead. + +Name: HideWindowOnClose
Type: `bool` + +### BackgroundColour + +This value is the default background colour of the window. Example: options.NewRGBA(255,0,0,128) - Red at 50% transparency + +Name: BackgroundColour
Type: `*options.RGBA`
Default: white + +### AlwaysOnTop + +Indicates that the window should stay above other windows when losing focus. + +Name: AlwaysOnTop
Type: `bool` + +### Assets + +Deprecated: Please use Assets on [AssetServer specific options](#assetserver). + +### AssetsHandler + +Deprecated: Please use AssetsHandler on [AssetServer specific options](#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`. + +Not all features of an `http.Request` are currently supported, please see the following feature matrix: + +| Feature | Win | Mac | Lin | +| ----------------------- | --- | --- | ------ | +| GET | ✅ | ✅ | ✅ | +| POST | ✅ | ✅ | ✅ [^1] | +| PUT | ✅ | ✅ | ✅ [^1] | +| PATCH | ✅ | ✅ | ✅ [^1] | +| DELETE | ✅ | ✅ | ✅ [^1] | +| Request Headers | ✅ | ✅ | ✅ [^1] | +| Request Body | ✅ | ✅ | ✅ [^2] | +| Request Body Streaming | ✅ | ✅ | ✅ [^2] | +| Response StatusCodes | ✅ | ✅ | ✅ [^1] | +| Response Headers | ✅ | ✅ | ✅ [^1] | +| Response Body | ✅ | ✅ | ✅ | +| Response Body Streaming | ❌ | ✅ | ✅ | +| WebSockets | ❌ | ❌ | ❌ | +| HTTP Redirects 30x | ✅ | ❌ | ❌ | + +Name: AssetServer
Type: `*assetserver.Options` + +#### Assets + +The static frontend assets to be used by the application. + +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. + +If set to nil, all GET requests will be forwarded to [Handler](#handler). + +Name: Assets
Type: `fs.FS` + +#### Handler + +The assets handler is a generic `http.Handler` for fallback handling of assets that can't be found. + +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: + +- GET request: `http.StatusNotFound` +- Other request: `http.StatusMethodNotAllowed` + +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. + +Name: AssetsHandler
Type: `http.Handler` + +#### 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. + +If not defined, the default AssetServer request chain is executed. + +Name: Middleware
Type: `assetserver.Middleware` + +### Menu + +The menu to be used by the application. More details about Menus in the [Menu Reference](../reference/runtime/menu.mdx). + +:::note + +On Mac, if no menu is specified, a default menu will be created. + +::: + +Name: Menu
Type: `*menu.Menu` + +### Logger + +The logger to be used by the application. More details about logging in the [Log Reference](../reference/runtime/log.mdx). + +Name: Logger
Type: `logger.Logger`
Default: Logs to Stdout + +### LogLevel + +The default log level. More details about logging in the [Log Reference](../reference/runtime/log.mdx). + +Name: LogLevel
Type: `logger.LogLevel`
Default: `Info` in dev mode, `Error` in production mode + +### LogLevelProduction + +The default log level for production builds. More details about logging in the [Log Reference](../reference/runtime/log.mdx). + +Name: LogLevelProduction
Type: `logger.LogLevel`
Default: `Error` + +### OnStartup + +This callback is called after the frontend has been created, but before `index.html` has been loaded. It is given the application context. + +Name: OnStartup
Type: `func(ctx context.Context)` + +### OnDomReady + +This callback is called after the frontend has loaded `index.html` and its resources. It is given the application context. + +Name: OnDomReady
Type: `func(ctx context.Context)` + +### OnShutdown + +This callback is called after the frontend has been destroyed, just before the application terminates. It is given the application context. + +Name: OnShutdown
Type: `func(ctx context.Context)` + +### 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. + +Example: + +```go title=windowsapp.go +func (b *App) beforeClose(ctx context.Context) (prevent bool) { + dialog, err := runtime.MessageDialog(ctx, runtime.MessageDialogOptions{ + Type: runtime.QuestionDialog, + Title: "Quit?", + Message: "Are you sure you want to quit?", + }) + + if err != nil { + return false + } + return dialog != "Yes" +} +``` + +Name: OnBeforeClose
Type: `func(ctx context.Context) bool` + +### CSSDragProperty + +Indicates the CSS property to use to identify which elements can be used to drag the window. Default: `--wails-draggable`. + +Name: CSSDragProperty
Type: `string` + +### CSSDragValue + +Indicates what value the `CSSDragProperty` style should have to drag the window. Default: `drag`. + +Name: CSSDragValue
Type: `string` + +### EnableDefaultContextMenu + +EnableDefaultContextMenu enables the browser's default context-menu in production. + +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. + +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 : + +| CSS Style | Behavior | +| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `--default-contextmenu: auto;` | (**default**) will show the default context menu only if :
contentEditable is true OR text has been selected OR element is input or textarea | +| `--default-contextmenu: show;` | will always show the default context menu | +| `--default-contextmenu: hide;` | will always hide the default context menu | + +This rule is inherited like any normal CSS rule, so nesting works as expected. + +:::note +This filtering functionality is only enabled in production, so in development and in debug build, the full context-menu is always available everywhere. +::: + +:::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. +::: + + +Name: EnableDefaultContextMenu
Type: `bool` + +### 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. + +Name: EnableFraudulentWebsiteDetection
Type: `bool` + +### ZoomFactor + +Name: ZoomFactor
Type: `float64` + +This defines the zoom factor for the WebView2. This is the option matching the Edge user activated zoom in or out. + +### IsZoomControlEnabled + +Name: IsZoomControlEnabled
Type: `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). + +### Bind + +A slice of struct instances defining methods that need to be bound to the frontend. + +Name: Bind
Type: `[]interface{}` + +### 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. + +Name: ErrorFormatter
Type: `func (error) any` + +### Windows + +This defines [Windows specific options](#windows). + +Name: Windows
Type: `*windows.Options` + +#### 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. + +Name: WebviewIsTransparent
Type: `bool` + +#### WindowIsTranslucent + +Setting this to `true` will make the window background translucent. Often combined with [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. + +Name: WindowIsTranslucent
Type: `bool` + +#### BackdropType + +:::note + +Requires Windows 11 build 22621 or later. + +::: + +Sets the translucency type of the window. This is only applicable if [WindowIsTranslucent](#WindowIsTranslucent) is set to `true`. + +Name: BackdropType
Type `windows.BackdropType` + +The value can be one of the following: + +| Value | Description | +| ------- | ----------------------------------------------------------------------------------------- | +| Auto | Let Windows decide which backdrop to use | +| None | Do not use translucency | +| Acrylic | Use [Acrylic](https://learn.microsoft.com/en-us/windows/apps/design/style/acrylic) effect | +| Mica | Use [Mica](https://learn.microsoft.com/en-us/windows/apps/design/style/mica) effect | +| Tabbed | Use Tabbed. This is a backdrop that is similar to Mica. | + +#### DisableWindowIcon + +Setting this to `true` will remove the icon in the top left corner of the title bar. + +Name: DisableWindowIcon
Type: `bool` + +#### 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. + +Name: DisableFramelessWindowDecorations
Type: `bool` + +#### WebviewUserDataPath + +This defines the path where the WebView2 stores the user data. If empty `%APPDATA%\[BinaryName.exe]` will be used. + +Name: WebviewUserDataPath
Type: `string` + +#### WebviewBrowserPath + +This defines the path to a directory with WebView2 executable files and libraries. If empty, webview2 installed in the system will be used. + +Important information about distribution of fixed version runtime: + +- [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) +- [Known issues for 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) + +Name: WebviewBrowserPath
Type: `string` + +#### Theme + +Minimum Windows Version: Windows 10 2004/20H1 + +This defines the theme that the application should use: + +| Value | Description | +| ------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | +| 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 | +| Dark | The application will use a dark theme exclusively | +| Light | The application will use a light theme exclusively | + +Name: Theme
Type: `windows.Theme` + +#### CustomTheme + +:::note + +Minimum 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. + +Name: CustomTheme
Type: `windows.CustomTheme` + +##### 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)`. + +NOTE: Any value not provided will default to black. + +```go +type ThemeSettings struct { + DarkModeTitleBar int32 + DarkModeTitleBarInactive int32 + DarkModeTitleText int32 + DarkModeTitleTextInactive int32 + DarkModeBorder int32 + DarkModeBorderInactive int32 + LightModeTitleBar int32 + LightModeTitleBarInactive int32 + LightModeTitleText int32 + LightModeTitleTextInactive int32 + LightModeBorder int32 + LightModeBorderInactive int32 +} +``` + +Example: + +```go + CustomTheme: &windows.ThemeSettings{ + // Theme to use when window is active + DarkModeTitleBar: windows.RGB(255, 0, 0), // Red + DarkModeTitleText: windows.RGB(0, 255, 0), // Green + DarkModeBorder: windows.RGB(0, 0, 255), // Blue + LightModeTitleBar: windows.RGB(200, 200, 200), + LightModeTitleText: windows.RGB(20, 20, 20), + LightModeBorder: windows.RGB(200, 200, 200), + // Theme to use when window is inactive + DarkModeTitleBarInactive: windows.RGB(128, 0, 0), + DarkModeTitleTextInactive: windows.RGB(0, 128, 0), + DarkModeBorderInactive: windows.RGB(0, 0, 128), + LightModeTitleBarInactive: windows.RGB(100, 100, 100), + LightModeTitleTextInactive: windows.RGB(10, 10, 10), + LightModeBorderInactive: windows.RGB(100, 100, 100), + }, +``` + +#### Messages + +A struct of strings used by the webview2 installer if a valid webview2 runtime is not found. + +Name: Messages
Type: `*windows.Messages` + +Customise this for any language you choose to support. + +#### 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. + +Name: ResizeDebounceMS
Type: `uint16` + +#### OnSuspend + +If set, this function will be called when Windows initiates a switch to low power mode (suspend/hibernate) + +Name: OnSuspend
Type: `func()` + +#### OnResume + +If set, this function will be called when Windows resumes from low power mode (suspend/hibernate) + +Name: OnResume
Type: `func()` + +#### WebviewGpuIsDisabled + +Setting this to `true` will disable GPU hardware acceleration for the webview. + +Name: WebviewGpuIsDisabled
Type: `bool` + +#### EnableSwipeGestures + +Setting this to `true` will enable swipe gestures for the webview. + +Name: EnableSwipeGestures
Type: `bool` + +### Mac + +This defines [Mac specific options](#mac). + +Name: Mac
Type: `*mac.Options` + +#### TitleBar + +The TitleBar struct provides the ability to configure the look and feel of the title bar. + +Name: TitleBar
Type: [`*mac.TitleBar`](#titlebar-struct) + +##### Titlebar struct + +The titlebar of the application can be customised by using the TitleBar options: + +```go +type TitleBar struct { + TitlebarAppearsTransparent bool + HideTitle bool + HideTitleBar bool + FullSizeContent bool + UseToolbar bool + HideToolbarSeparator bool +} +``` + +| Name | Description | +| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| 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) | +| HideTitle | Hides the title of the window. [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 | +| FullSizeContent | Makes the webview fill the entire window. [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) | +| HideToolbarSeparator | Removes the line beneath the toolbar. [Apple Docs](https://developer.apple.com/documentation/appkit/nstoolbar/1516954-showsbaselineseparator?language=objc) | + +Preconfigured titlebar settings are available: + +| Setting | Example | +| --------------------------- | ---------------------------------------------- | +| `mac.TitleBarDefault()` | ![](/img/reference/titlebar-default.webp) | +| `mac.TitleBarHidden()` | ![](/img/reference/titlebar-hidden.webp) | +| `mac.TitleBarHiddenInset()` | ![](/img/reference/titlebar-hidden-inset.webp) | + +Example: + +```go +Mac: &mac.Options{ + TitleBar: mac.TitleBarHiddenInset(), +} +``` + +Click [here](https://github.com/lukakerr/NSWindowStyles) for some inspiration on customising the titlebar. + +#### 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. + +Name: Appearance
Type: [`mac.AppearanceType`](#appearance-type) + +##### Appearance type + +You can specify the application's [appearance](https://developer.apple.com/documentation/appkit/nsappearance?language=objc). + +| Value | Description | +| ----------------------------------------------------- | --------------------------------------------------------------- | +| DefaultAppearance | DefaultAppearance uses the default system value | +| NSAppearanceNameAqua | The standard light system appearance | +| NSAppearanceNameDarkAqua | The standard dark system appearance | +| NSAppearanceNameVibrantLight | The light vibrant appearance | +| NSAppearanceNameAccessibilityHighContrastAqua | A high-contrast version of the standard light system appearance | +| NSAppearanceNameAccessibilityHighContrastDarkAqua | A high-contrast version of the standard dark system appearance | +| NSAppearanceNameAccessibilityHighContrastVibrantLight | A high-contrast version of the light vibrant appearance | +| NSAppearanceNameAccessibilityHighContrastVibrantDark | A high-contrast version of the dark vibrant appearance | + +Example: + +```go +Mac: &mac.Options{ + Appearance: mac.NSAppearanceNameDarkAqua, +} +``` + +#### 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. + +Name: WebviewIsTransparent
Type: `bool` + +#### WindowIsTranslucent + +Setting this to `true` will make the window background translucent. Often combined with [WebviewIsTransparent](#WebviewIsTransparent) to make frosty-looking applications. + +Name: WindowIsTranslucent
Type: `bool` + +#### Preferences + +The Preferences struct provides the ability to configure the Webview preferences. + +Name: Preferences
Type: [`*mac.Preferences`](#preferences-struct) + +##### Preferences struct + +You can specify the webview preferences. + +```go +type Preferences struct { + TabFocusesLinks u.Bool + TextInteractionEnabled u.Bool + FullscreenEnabled u.Bool +} +``` + +| Name | Description | +| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 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) | +| 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) | +| 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) | + +Example: + +```go +Mac: &mac.Options{ + Preferences: &mac.Preferences{ + TabFocusesLinks: mac.Enabled, + TextInteractionEnabled: mac.Disabled, + FullscreenEnabled: mac.Enabled, + } +} +``` + +#### 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. + +Name: About
Type: [`*mac.AboutInfo`](#about-struct) + +##### About struct + +```go + +type AboutInfo struct { + Title string + Message string + Icon []byte +} +``` + +If these settings are provided, an "About" menu item will appear in the app menu (when using the `AppMenu` role). Given this configuration: + +```go +//go:embed build/appicon.png +var icon []byte + +func main() { + err := wails.Run(&options.App{ + ... + Mac: &mac.Options{ + About: &mac.AboutInfo{ + Title: "My Application", + Message: "© 2021 Me", + Icon: icon, + }, + }, + }) +``` + +The "About" menu item will appear in the app menu: + +```mdx-code-block +
+ +
+
+``` + +When clicked, that will open an about message box: + +```mdx-code-block +
+ +
+
+``` + +### Linux + +This defines [Linux specific options](#linux). + +Name: Linux
Type: `*linux.Options` + +#### Icon + +Sets up the icon representing the window. This icon is used when the window is minimized (also known as iconified). + +Name: Icon
Type: `[]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. + +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. + +The icon should be provided in whatever size it was naturally drawn; that is, don’t scale the image before passing it. Scaling is postponed until the last minute, when the desired final size is known, to allow best quality. + +#### WindowIsTranslucent + +Setting this to `true` will make the window background translucent. Some window managers may ignore it, or result in a black window. + +Name: WindowIsTranslucent
Type: `bool` + +#### WebviewGpuPolicy + +This option is used for determining the webview's hardware acceleration policy. + +Name: WebviewGpuPolicy
Type: [`options.WebviewGpuPolicy`](#webviewgpupolicy-type)
Default: `WebviewGpuPolicyAlways` + +##### WebviewGpuPolicy type + +| Value | Description | +| ------------------------ | -------------------------------------------------------------------- | +| WebviewGpuPolicyAlways | Hardware acceleration is always enabled | +| WebviewGpuPolicyOnDemand | Hardware acceleration is enabled/disabled as request by web contents | +| WebviewGpuPolicyNever | Hardware acceleration is always disabled | + +#### 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). + +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. + +Name: ProgramName
Type: string
+ +### Debug + +This defines [Debug specific options](#Debug) that apply to debug builds. + +Name: Debug
Type: `options.Debug` + +#### OpenInspectorOnStartup + +Setting this to `true` will open the WebInspector on startup of the application. + +Name: OpenInspectorOnStartup
Type: `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. +[^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. diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/reference/project-config.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/reference/project-config.mdx new file mode 100644 index 00000000000..8e763502bcc --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/reference/project-config.mdx @@ -0,0 +1,92 @@ +--- +sidebar_position: 5 +--- + +# Project Config + +The project config resides in the `wails.json` file in the project directory. The structure of the config is: + +```json5 +{ + // Project config version + "version": "", + // The project name + "name": "", + // Relative path to the directory containing the compiled assets, this is normally inferred and could be left empty + "assetdir": "", + // Additional directories to trigger reloads (comma separated), this is only used for some advanced asset configurations + "reloaddirs": "", + // The directory where the build files reside. Defaults to 'build' + "build:dir": "", + // Relative path to the frontend directory. Defaults to 'frontend' + "frontend:dir": "", + // The command to install node dependencies, run in the frontend directory - often `npm install` + "frontend:install": "", + // The command to build the assets, run in the frontend directory - often `npm run build` + "frontend:build": "", + // This command has been replaced by frontend:dev:build. If frontend:dev:build is not specified will falls back to this command. \nIf this command is also not specified will falls back to frontend:build + "frontend:dev": "", + // This command is the dev equivalent of frontend:build. If not specified falls back to frontend:dev + "frontend:dev:build": "", + // This command is the dev equivalent of frontend:install. If not specified falls back to frontend:install + "frontend:dev:install": "", + // This command is run in a separate process on `wails dev`. Useful for 3rd party watchers or starting 3d party dev servers + "frontend:dev:watcher": "", + // URL to a 3rd party dev server to be used to serve assets, EG Vite. \nIf this is set to 'auto' then the devServerUrl will be inferred from the Vite output + "frontend:dev:serverUrl": "", + // Relative path to the directory that the auto-generated JS modules will be created + "wailsjsdir": "", + // The name of the binary + "outputfilename": "", + // The default time the dev server waits to reload when it detects a change in assets + "debounceMS": 100, + // Address to bind the wails dev sever to. Default: localhost:34115 + "devServer": "", + // Arguments passed to the application in shell style when in dev mode + "appargs": "", + // Defines if build hooks should be run though they are defined for an OS other than the host OS. + "runNonNativeBuildHooks": false, + "preBuildHooks": { + // The command that will be executed before a build of the specified GOOS/GOARCH: ${platform} is replaced with the "GOOS/GOARCH". The "GOOS/GOARCH" hook is executed before the "GOOS/*" and "*/*" hook. + "GOOS/GOARCH": "", + // The command that will be executed before a build of the specified GOOS: ${platform} is replaced with the "GOOS/GOARCH". The "GOOS/*" hook is executed before the "*/*" hook. + "GOOS/*": "", + // The command that will be executed before every build: ${platform} is replaced with the "GOOS/GOARCH". + "*/*": "" + }, + "postBuildHooks": { + // The command that will be executed after a build of the specified GOOS/GOARCH: ${platform} is replaced with the "GOOS/GOARCH" and ${bin} with the path to the compiled binary. The "GOOS/GOARCH" hook is executed before the "GOOS/*" and "*/*" hook. + "GOOS/GOARCH": "", + // The command that will be executed after a build of the specified GOOS: ${platform} is replaced with the "GOOS/GOARCH" and ${bin} with the path to the compiled binary. The "GOOS/*" hook is executed before the "*/*" hook. + "GOOS/*": "", + // The command that will be executed after every build: ${platform} is replaced with the "GOOS/GOARCH" and ${bin} with the path to the compiled binary. + "*/*": "" + }, + // Data used to populate manifests and version info. + "info": { + // The company name. Default: [The project name] + "companyName": "", + // The product name. Default: [The project name] + "productName": "", + // The version of the product. Default: '1.0.0' + "productVersion": "", + // The copyright of the product. Default: 'Copyright.........' + "copyright": "", + // A short comment of the app. Default: 'Built using Wails (https://wails.app)' + "comments": "" + }, + // 'multiple': One installer per architecture. 'single': Single universal installer for all architectures being built. Default: 'multiple' + "nsisType": "", + // Whether the app should be obfuscated. Default: false + "obfuscated": "", + // The arguments to pass to the garble command when using the obfuscated flag + "garbleargs": "" +} +``` + +This file is read by the Wails CLI when running `wails build` or `wails dev`. + +The `assetdir`, `reloaddirs`, `wailsjsdir`, `debounceMS`, `devserver` and `frontenddevserverurl` flags in `wails build/dev` will update the project config +and thus become defaults for subsequent runs. + +The JSON Schema for this file is located [here](https://wails.io/schemas/config.v2.json). diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/reference/runtime/browser.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/reference/runtime/browser.mdx new file mode 100644 index 00000000000..c71ec4a3a29 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/reference/runtime/browser.mdx @@ -0,0 +1,13 @@ +--- +sidebar_position: 7 +--- + +# Browser + +These methods are related to the system browser. + +### BrowserOpenURL + +Opens the given URL in the system browser. + +Go: `BrowserOpenURL(ctx context.Context, url string)`
JS: `BrowserOpenURL(url string)` diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/reference/runtime/clipboard.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/reference/runtime/clipboard.mdx new file mode 100644 index 00000000000..805f68ed917 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/reference/runtime/clipboard.mdx @@ -0,0 +1,23 @@ +--- +sidebar_position: 8 +--- + +# Clipboard + +This part of the runtime provides access to the operating system's clipboard.
The current implementation only handles text. + +### ClipboardGetText + +This method reads the currently stored text from the clipboard. + +Go: `ClipboardGetText(ctx context.Context) (string, error)`
Returns: a string (if the clipboard is empty an empty string will be returned) or an error. + +JS: `ClipboardGetText(): Promise`
Returns: a promise with a string result (if the clipboard is empty an empty string will be returned). + +### ClipboardSetText + +This method writes a text to the clipboard. + +Go: `ClipboardSetText(ctx context.Context, text string) error`
Returns: an error if there is any. + +JS: `ClipboardSetText(text: string): Promise`
Returns: a promise with true result if the text was successfully set on the clipboard, false otherwise. diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/reference/runtime/dialog.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/reference/runtime/dialog.mdx new file mode 100644 index 00000000000..9b3e6cf145c --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/reference/runtime/dialog.mdx @@ -0,0 +1,302 @@ +--- +sidebar_position: 5 +--- + +# Dialog + +This part of the runtime provides access to native dialogs, such as File Selectors and Message boxes. + +:::info JavaScript + +Dialog is currently unsupported in the JS runtime. + +::: + +### OpenDirectoryDialog + +Opens a dialog that prompts the user to select a directory. Can be customised using [OpenDialogOptions](#opendialogoptions). + +Go: `OpenDirectoryDialog(ctx context.Context, dialogOptions OpenDialogOptions) (string, error)` + +Returns: Selected directory (blank if the user cancelled) or an error + +### OpenFileDialog + +Opens a dialog that prompts the user to select a file. Can be customised using [OpenDialogOptions](#opendialogoptions). + +Go: `OpenFileDialog(ctx context.Context, dialogOptions OpenDialogOptions) (string, error)` + +Returns: Selected file (blank if the user cancelled) or an error + +### OpenMultipleFilesDialog + +Opens a dialog that prompts the user to select multiple files. Can be customised using [OpenDialogOptions](#opendialogoptions). + +Go: `OpenMultipleFilesDialog(ctx context.Context, dialogOptions OpenDialogOptions) ([]string, error)` + +Returns: Selected files (nil if the user cancelled) or an error + +### SaveFileDialog + +Opens a dialog that prompts the user to select a filename for the purposes of saving. Can be customised using [SaveDialogOptions](#savedialogoptions). + +Go: `SaveFileDialog(ctx context.Context, dialogOptions SaveDialogOptions) (string, error)` + +Returns: The selected file (blank if the user cancelled) or an error + +### MessageDialog + +Displays a message using a message dialog. Can be customised using [MessageDialogOptions](#messagedialogoptions). + +Go: `MessageDialog(ctx context.Context, dialogOptions MessageDialogOptions) (string, error)` + +Returns: The text of the selected button or an error + +## Options + +### OpenDialogOptions + +```go +type OpenDialogOptions struct { + DefaultDirectory string + DefaultFilename string + Title string + Filters []FileFilter + ShowHiddenFiles bool + CanCreateDirectories bool + ResolvesAliases bool + TreatPackagesAsDirectories bool +} +``` + +| Field | Description | Win | Mac | Lin | +| -------------------------- | ---------------------------------------------- | --- | --- | --- | +| DefaultDirectory | The directory the dialog will show when opened | ✅ | ✅ | ✅ | +| DefaultFilename | The default filename | ✅ | ✅ | ✅ | +| Title | Title for the dialog | ✅ | ✅ | ✅ | +| [Filters](#filefilter) | A list of file filters | ✅ | ✅ | ✅ | +| ShowHiddenFiles | Show files hidden by the system | | ✅ | ✅ | +| CanCreateDirectories | Allow user to create directories | | ✅ | | +| ResolvesAliases | If true, returns the file not the alias | | ✅ | | +| TreatPackagesAsDirectories | Allow navigating into packages | | ✅ | | + +### SaveDialogOptions + +```go +type SaveDialogOptions struct { + DefaultDirectory string + DefaultFilename string + Title string + Filters []FileFilter + ShowHiddenFiles bool + CanCreateDirectories bool + TreatPackagesAsDirectories bool +} +``` + +| Field | Description | Win | Mac | Lin | +| -------------------------- | ---------------------------------------------- | --- | --- | --- | +| DefaultDirectory | The directory the dialog will show when opened | ✅ | ✅ | ✅ | +| DefaultFilename | The default filename | ✅ | ✅ | ✅ | +| Title | Title for the dialog | ✅ | ✅ | ✅ | +| [Filters](#filefilter) | A list of file filters | ✅ | ✅ | ✅ | +| ShowHiddenFiles | Show files hidden by the system | | ✅ | ✅ | +| CanCreateDirectories | Allow user to create directories | | ✅ | | +| TreatPackagesAsDirectories | Allow navigating into packages | | ✅ | | + +### MessageDialogOptions + +```go +type MessageDialogOptions struct { + Type DialogType + Title string + Message string + Buttons []string + DefaultButton string + CancelButton string +} +``` + +| Field | Description | Win | Mac | Lin | +| ------------- | -------------------------------------------------------------------------- | -------------- | --- | --- | +| Type | The type of message dialog, eg question, info... | ✅ | ✅ | ✅ | +| Title | Title for the dialog | ✅ | ✅ | ✅ | +| Message | The message to show the user | ✅ | ✅ | ✅ | +| Buttons | A list of button titles | | ✅ | | +| DefaultButton | The button with this text should be treated as default. Bound to `return`. | ✅[*](#windows) | ✅ | | +| CancelButton | The button with this text should be treated as cancel. Bound to `escape` | | ✅ | | + +#### 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". + +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"`. + +Example: +```go + result, err := runtime.MessageDialog(a.ctx, runtime.MessageDialogOptions{ + Type: runtime.QuestionDialog, + Title: "Question", + Message: "Do you want to continue?", + DefaultButton: "No", + }) +``` + +#### Linux + +Linux has standard dialog types in which the buttons are not customisable. The value returned will be one of: "Ok", "Cancel", "Yes", "No" + +#### 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. + +For the following code: + +```go +selection, err := runtime.MessageDialog(b.ctx, runtime.MessageDialogOptions{ + Title: "It's your turn!", + Message: "Select a number", + Buttons: []string{"one", "two", "three", "four"}, +}) +``` + +the first button is shown as default: + +```mdx-code-block +
+ +
+
+``` + +And if we specify `DefaultButton` to be "two": + +```go +selection, err := runtime.MessageDialog(b.ctx, runtime.MessageDialogOptions{ + Title: "It's your turn!", + Message: "Select a number", + Buttons: []string{"one", "two", "three", "four"}, + DefaultButton: "two", +}) +``` + +the second button is shown as default. When `return` is pressed, the value "two" is returned. + +```mdx-code-block +
+ +
+
+``` + +If we now specify `CancelButton` to be "three": + +```go +selection, err := runtime.MessageDialog(b.ctx, runtime.MessageDialogOptions{ + Title: "It's your turn!", + Message: "Select a number", + Buttons: []string{"one", "two", "three", "four"}, + DefaultButton: "two", + CancelButton: "three", +}) +``` + +the button with "three" is shown at the bottom of the dialog. When `escape` is pressed, the value "three" is returned: + +```mdx-code-block +
+ +
+
+
+
+``` + +#### DialogType + +```go +const ( + InfoDialog DialogType = "info" + WarningDialog DialogType = "warning" + ErrorDialog DialogType = "error" + QuestionDialog DialogType = "question" + ) +``` + +### FileFilter + +```go +type FileFilter struct { + DisplayName string // Filter information EG: "Image Files (*.jpg, *.png)" + Pattern string // semi-colon separated list of extensions, EG: "*.jpg;*.png" +} +``` + +#### Windows + +Windows allows you to use multiple file filters in dialog boxes. Each FileFilter will show up as a separate entry in the dialog: + +```mdx-code-block +
+ +
+
+
+
+``` + +#### Linux + +Linux allows you to use multiple file filters in dialog boxes. Each FileFilter will show up as a separate entry in the dialog: + +```mdx-code-block +
+ +
+
+
+
+``` + +#### 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. + +Example: + +```go + selection, err := runtime.OpenFileDialog(b.ctx, runtime.OpenDialogOptions{ + Title: "Select File", + Filters: []runtime.FileFilter{ + { + DisplayName: "Images (*.png;*.jpg)", + Pattern: "*.png;*.jpg", + }, { + DisplayName: "Videos (*.mov;*.mp4)", + Pattern: "*.mov;*.mp4", + }, + }, + }) +``` + +This will result in the Open File dialog using `*.png,*.jpg,*.mov,*.mp4` as a filter. diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/reference/runtime/events.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/reference/runtime/events.mdx new file mode 100644 index 00000000000..856ba6f0c26 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/reference/runtime/events.mdx @@ -0,0 +1,37 @@ +--- +sidebar_position: 2 +--- + +# 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. + +### 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. + +Go: `EventsOn(ctx context.Context, eventName string, callback func(optionalData ...interface{})) func()`
JS: `EventsOn(eventName string, callback function(optionalData?: any)): () => void` + +### EventsOff + +This method unregisters the listener for the given event name, optionally multiple listeneres can be unregistered via `additionalEventNames`. + +Go: `EventsOff(ctx context.Context, eventName string, additionalEventNames ...string)`
JS: `EventsOff(eventName string, ...additionalEventNames)` + +### 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. + +Go: `EventsOnce(ctx context.Context, eventName string, callback func(optionalData ...interface{})) func()`
JS: `EventsOnce(eventName string, callback function(optionalData?: any)): () => void` + +### 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. + +Go: `EventsOnMultiple(ctx context.Context, eventName string, callback func(optionalData ...interface{}), counter int) func()`
JS: `EventsOnMultiple(eventName string, callback function(optionalData?: any), counter int): () => void` + +### EventsEmit + +This method emits the given event. Optional data may be passed with the event. This will trigger any event listeners. + +Go: `EventsEmit(ctx context.Context, eventName string, optionalData ...interface{})`
JS: `EventsEmit(eventName: string, ...optionalData: any)` diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/reference/runtime/intro.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/reference/runtime/intro.mdx new file mode 100644 index 00000000000..aae8efccccf --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/reference/runtime/intro.mdx @@ -0,0 +1,85 @@ +--- +sidebar_position: 1 +--- + +# Introduction + +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. + +It has utility methods for: + +- [Window](window.mdx) +- [Menu](menu.mdx) +- [Dialog](dialog.mdx) +- [Events](events.mdx) +- [Browser](browser.mdx) +- [Log](log.mdx) +- [Clipboard](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. + +:::info Note + +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). + +::: + +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. + +### Hide + +Go: `Hide(ctx context.Context)`
JS: `Hide()` + +Hides the application. + +:::info Note + +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`. + +::: + +### Show + +Shows the application. + +:::info Note + +On Mac, this will bring the application back into the foreground. For Windows and Linux, this is currently the same as `WindowShow`. + +::: + +Go: `Show(ctx context.Context)`
JS: `Show()` + +### Quit + +Quits the application. + +Go: `Quit(ctx context.Context)`
JS: `Quit()` + +### Environment + +Returns details of the current environment. + +Go: `Environment(ctx context.Context) EnvironmentInfo`
JS: `Environment(): Promise` + +#### EnvironmentInfo + +Go: + +```go +type EnvironmentInfo struct { + BuildType string + Platform string + Arch string +} +``` + +JS: + +```ts +interface EnvironmentInfo { + buildType: string; + platform: string; + arch: string; +} +``` diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/reference/runtime/log.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/reference/runtime/log.mdx new file mode 100644 index 00000000000..06f0423b0a8 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/reference/runtime/log.mdx @@ -0,0 +1,130 @@ +--- +sidebar_position: 3 +--- + +# 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: + +- Trace +- Debug +- Info +- Warning +- Error +- 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. + +### LogPrint + +Logs the given message as a raw message. + +Go: `LogPrint(ctx context.Context, message string)`
JS: `LogPrint(message: string)` + +### LogPrintf + +Logs the given message as a raw message. + +Go: `LogPrintf(ctx context.Context, format string, args ...interface{})`
+ +### LogTrace + +Logs the given message at the `Trace` log level. + +Go: `LogTrace(ctx context.Context, message string)`
JS: `LogTrace(message: string)` + +### LogTracef + +Logs the given message at the `Trace` log level. + +Go: `LogTracef(ctx context.Context, format string, args ...interface{})`
+ +### LogDebug + +Logs the given message at the `Debug` log level. + +Go: `LogDebug(ctx context.Context, message string)`
JS: `LogDebug(message: string)` + +### LogDebugf + +Logs the given message at the `Debug` log level. + +Go: `LogDebugf(ctx context.Context, format string, args ...interface{})`
+ +### LogInfo + +Logs the given message at the `Info` log level. + +Go: `LogInfo(ctx context.Context, message string)`
JS: `LogInfo(message: string)` + +### LogInfof + +Logs the given message at the `Info` log level. + +Go: `LogInfof(ctx context.Context, format string, args ...interface{})`
+ +### LogWarning + +Logs the given message at the `Warning` log level. + +Go: `LogWarning(ctx context.Context, message string)`
JS: `LogWarning(message: string)` + +### LogWarningf + +Logs the given message at the `Warning` log level. + +Go: `LogWarningf(ctx context.Context, format string, args ...interface{})`
+ +### LogError + +Logs the given message at the `Error` log level. + +Go: `LogError(ctx context.Context, message string)`
JS: `LogError(message: string)` + +### LogErrorf + +Logs the given message at the `Error` log level. + +Go: `LogErrorf(ctx context.Context, format string, args ...interface{})`
+ +### LogFatal + +Logs the given message at the `Fatal` log level. + +Go: `LogFatal(ctx context.Context, message string)`
JS: `LogFatal(message: string)` + +### LogFatalf + +Logs the given message at the `Fatal` log level. + +Go: `LogFatalf(ctx context.Context, format string, args ...interface{})`
+ +### LogSetLogLevel + +Sets the log level. In JavaScript, the number relates to the following log levels: + +| Value | Log Level | +| ----- | --------- | +| 1 | Trace | +| 2 | Debug | +| 3 | Info | +| 4 | Warning | +| 5 | Error | + +Go: `LogSetLogLevel(ctx context.Context, level logger.LogLevel)`
JS: `LogSetLogLevel(level: number)` + +## Using a Custom 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`: + +```go title="logger.go" +type Logger interface { + Print(message string) + Trace(message string) + Debug(message string) + Info(message string) + Warning(message string) + Error(message string) + Fatal(message string) +} +``` diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/reference/runtime/menu.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/reference/runtime/menu.mdx new file mode 100644 index 00000000000..8a0c79e371c --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/reference/runtime/menu.mdx @@ -0,0 +1,25 @@ +--- +sidebar_position: 6 +--- + +# Menu + +These methods are related to the application menu. + +:::info JavaScript + +Menu is currently unsupported in the JS runtime. + +::: + +### MenuSetApplicationMenu + +Sets the application menu to the given [menu](../menus.mdx). + +Go: `MenuSetApplicationMenu(ctx context.Context, menu *menu.Menu)` + +### MenuUpdateApplicationMenu + +Updates the application menu, picking up any changes to the menu passed to `MenuSetApplicationMenu`. + +Go: `MenuUpdateApplicationMenu(ctx context.Context)` diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/reference/runtime/screen.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/reference/runtime/screen.mdx new file mode 100644 index 00000000000..457c92ebff9 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/reference/runtime/screen.mdx @@ -0,0 +1,38 @@ +--- +sidebar_position: 9 +--- + +# Screen + +These methods provide information about the currently connected screens. + +### ScreenGetAll + +Returns a list of currently connected screens. + +Go: `ScreenGetAll(ctx context.Context) []screen`
+JS: `ScreenGetAll()` + +#### Screen + +Go struct: + +```go +type Screen struct { + IsCurrent bool + IsPrimary bool + Width int + Height int +} +``` + +Typescript interface: + +```ts +interface Screen { + isCurrent: boolean; + isPrimary: boolean; + width : number + height : number +} +``` diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/reference/runtime/window.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/reference/runtime/window.mdx new file mode 100644 index 00000000000..15f555c5a79 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/reference/runtime/window.mdx @@ -0,0 +1,227 @@ +--- +sidebar_position: 4 +--- + +# Window + +These methods give control of the application window. + +### WindowSetTitle + +Sets the text in the window title bar. + +Go: `WindowSetTitle(ctx context.Context, title string)`
JS: `WindowSetTitle(title: string)` + +### WindowFullscreen + +Makes the window full screen. + +Go: `WindowFullscreen(ctx context.Context)`
JS: `WindowFullscreen()` + +### WindowUnfullscreen + +Restores the previous window dimensions and position prior to full screen. + +Go: `WindowUnfullscreen(ctx context.Context)`
JS: `WindowUnfullscreen()` + +### WindowIsFullscreen + +Returns true if the window is full screen. + +Go: `WindowIsFullscreen(ctx context.Context) bool`
JS: `WindowIsFullscreen() bool` + +### WindowCenter + +Centers the window on the monitor the window is currently on. + +Go: `WindowCenter(ctx context.Context)`
JS: `WindowCenter()` + +### WindowExecJS + +Executes arbitrary JS code in the window. + +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. + +Go: `WindowExecJS(ctx context.Context, js string)` + +### WindowReload + +Performs a "reload" (Reloads current page). + +Go: `WindowReload(ctx context.Context)`
JS: `WindowReload()` + +### WindowReloadApp + +Reloads the application frontend. + +Go: `WindowReloadApp(ctx context.Context)`
JS: `WindowReloadApp()` + +### WindowSetSystemDefaultTheme + +Windows only. + +Go: `WindowSetSystemDefaultTheme(ctx context.Context)`
JS: `WindowSetSystemDefaultTheme()` + +Sets window theme to system default (dark/light). + +### WindowSetLightTheme + +Windows only. + +Go: `WindowSetLightTheme(ctx context.Context)`
JS: `WindowSetLightTheme()` + +Sets window theme to light. + +### WindowSetDarkTheme + +Windows only. + +Go: `WindowSetDarkTheme(ctx context.Context)`
JS: `WindowSetDarkTheme()` + +Sets window theme to dark. + +### WindowShow + +Shows the window, if it is currently hidden. + +Go: `WindowShow(ctx context.Context)`
JS: `WindowShow()` + +### WindowHide + +Hides the window, if it is currently visible. + +Go: `WindowHide(ctx context.Context)`
JS: `WindowHide()` + +### WindowIsNormal + +Returns true if the window not minimised, maximised or fullscreen. + +Go: `WindowIsNormal(ctx context.Context) bool`
JS: `WindowIsNormal() bool` + +### WindowSetSize + +Sets the width and height of the window. + +Go: `WindowSetSize(ctx context.Context, width int, height int)`
JS: `WindowSetSize(width: number, height: number)` + +### WindowGetSize + +Gets the width and height of the window. + +Go: `WindowGetSize(ctx context.Context) (width int, height int)`
JS: `WindowGetSize() : Size` + +### WindowSetMinSize + +Sets the minimum window size. Will resize the window if the window is currently smaller than the given dimensions. + +Setting a size of `0,0` will disable this constraint. + +Go: `WindowSetMinSize(ctx context.Context, width int, height int)`
JS: `WindowSetMinSize(width: number, height: number)` + +### WindowSetMaxSize + +Sets the maximum window size. Will resize the window if the window is currently larger than the given dimensions. + +Setting a size of `0,0` will disable this constraint. + +Go: `WindowSetMaxSize(ctx context.Context, width int, height int)`
JS: `WindowSetMaxSize(width: number, height: number)` + +### WindowSetAlwaysOnTop + +Sets the window AlwaysOnTop or not on top. + +Go: `WindowSetAlwaysOnTop(ctx context.Context, b bool)`
JS: `WindowSetAlwaysOnTop(b: Boolen)` + +### WindowSetPosition + +Sets the window position relative to the monitor the window is currently on. + +Go: `WindowSetPosition(ctx context.Context, x int, y int)`
JS: `WindowSetPosition(x: number, y: number)` + +### WindowGetPosition + +Gets the window position relative to the monitor the window is currently on. + +Go: `WindowGetPosition(ctx context.Context) (x int, y int)`
JS: `WindowGetPosition() : Position` + +### WindowMaximise + +Maximises the window to fill the screen. + +Go: `WindowMaximise(ctx context.Context)`
JS: `WindowMaximise()` + +### WindowUnmaximise + +Restores the window to the dimensions and position prior to maximising. + +Go: `WindowUnmaximise(ctx context.Context)`
JS: `WindowUnmaximise()` + +### WindowIsMaximised + +Returns true if the window is maximised. + +Go: `WindowIsMaximised(ctx context.Context) bool`
JS: `WindowIsMaximised() bool` + +### WindowToggleMaximise + +Toggles between Maximised and UnMaximised. + +Go: `WindowToggleMaximise(ctx context.Context)`
JS: `WindowToggleMaximise()` + +### WindowMinimise + +Minimises the window. + +Go: `WindowMinimise(ctx context.Context)`
JS: `WindowMinimise()` + +### WindowUnminimise + +Restores the window to the dimensions and position prior to minimising. + +Go: `WindowUnminimise(ctx context.Context)`
JS: `WindowUnminimise()` + +### WindowIsMinimised + +Returns true if the window is minimised. + +Go: `WindowIsMinimised(ctx context.Context) bool`
JS: `WindowIsMinimised() bool` + +### WindowSetBackgroundColour + +Sets the background colour of the window to the given RGBA colour definition. This colour will show through for all transparent pixels. + +Valid values for R, G, B and A are 0-255. + +:::info Windows + +On Windows, only alpha values of 0 or 255 are supported. Any value that is not 0 will be considered 255. + +::: + +Go: `WindowSetBackgroundColour(ctx context.Context, R, G, B, A uint8)`
JS: `WindowSetBackgroundColour(R, G, B, A)` + +### WindowPrint + +Opens tha native print dialog. + +Go: `WindowPrint(ctx context.Context)`
JS: `WindowPrint()` + +## TypeScript Object Definitions + +### Position + +```ts +interface Position { + x: number; + y: number; +} +``` + +### Size + +```ts +interface Size { + w: number; + h: number; +} +``` diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/tutorials/dogsapi.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/tutorials/dogsapi.mdx new file mode 100644 index 00000000000..1af16f7745a --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/tutorials/dogsapi.mdx @@ -0,0 +1,245 @@ +--- +sidebar_position: 20 +--- + +# Dogs API + +```mdx-code-block +
+ +
+
+``` + +:::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). + +::: + +In this tutorial we are going to develop an application that retrieves photos of dogs from the web and then displays them. + +### Create the project + +Let's create the application. From a terminal enter: `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. + +Now let's `cd dogs-api` and start editing the project files. + +### Remove unused code + +We will start by removing some elements that we know we will not use: + +- Open `app.go` and remove the following lines: + +```go +// Greet returns a greeting for the given name +func (a *App) Greet(name string) string { + return fmt.Sprintf("Hello %s, It's show time!", name) +} +``` + +- Open `frontend/src/App.svelte` and delete all lines. +- Delete the `frontend/src/assets/images/logo-universal.png` file + +### Creating our application + +Now let's add our new Go code. + +Add the following struct declarations to `app.go` before the function definitions: + +```go +type RandomImage struct { + Message string + Status string +} + +type AllBreeds struct { + Message map[string]map[string][]string + Status string +} + +type ImagesByBreed struct { + Message []string + Status string +} +``` + +Add the following functions to `app.go` (perhaps after the existing function definitions): + +```go +func (a *App) GetRandomImageUrl() string { + response, err := http.Get("https://dog.ceo/api/breeds/image/random") + if err != nil { + log.Fatal(err) + } + + responseData, err := ioutil.ReadAll(response.Body) + if err != nil { + log.Fatal(err) + } + + var data RandomImage + json.Unmarshal(responseData, &data) + + return data.Message +} + +func (a *App) GetBreedList() []string { + var breeds []string + + response, err := http.Get("https://dog.ceo/api/breeds/list/all") + if err != nil { + log.Fatal(err) + } + + responseData, err := ioutil.ReadAll(response.Body) + if err != nil { + log.Fatal(err) + } + + var data AllBreeds + json.Unmarshal(responseData, &data) + + for k := range data.Message { + breeds = append(breeds, k) + } + + sort.Strings(breeds) + + return breeds +} + +func (a *App) GetImageUrlsByBreed(breed string) []string { + + url := fmt.Sprintf("%s%s%s%s", "https://dog.ceo/api/", "breed/", breed, "/images") + response, err := http.Get(url) + if err != nil { + log.Fatal(err) + } + + responseData, err := ioutil.ReadAll(response.Body) + if err != nil { + log.Fatal(err) + } + + var data ImagesByBreed + json.Unmarshal(responseData, &data) + + return data.Message +} +``` + +Modify the `import` section of `app.go` to look like this: + +```go +import ( + "context" + "fmt" + "encoding/json" + "io/ioutil" + "log" + "net/http" + "sort" +) +``` + +Add the following lines to `frontend/src/App.svelte`: + + +```html + + +

Dogs API

+
+ + Click on down arrow to select a breed + + +
+
+{#if showRandomPhoto} + No dog found +{/if} +{#if showBreedPhotos} + {#each photos as photo} + No dog found + {/each} +{/if} + + +``` + + +### Testing the application + +To generate the bindings and test the application, run `wails dev`. + +### Compiling the application + +To compile the application to a single, production grade binary, run `wails build`. diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/tutorials/helloworld.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/tutorials/helloworld.mdx new file mode 100644 index 00000000000..ea350890049 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/tutorials/helloworld.mdx @@ -0,0 +1,123 @@ +--- +sidebar_position: 10 +--- + +# 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: + +- Create a new Wails application +- Build the application +- Run the application + +:::note + +This tutorial uses Windows as the target platform. Output will vary slightly depending on your operating system. + +::: + +## Create a new Wails application + +To create a new Wails application using the default vanilla JS template, you need to run the following command: + +```bash +wails init -n helloworld +``` + +You should see something similar to the following: + +``` +Wails CLI v2.0.0 + +Initialising Project 'helloworld' +--------------------------------- + +Project Name: helloworld +Project Directory: C:\Users\leaan\tutorial\helloworld +Project Template: vanilla +Template Support: https://wails.io + +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: + +``` +build/ - Contains the build files + compiled application +frontend/ - Contains the frontend files +app.go - Contains the application code +main.go - The main program with the application configuration +wails.json - The project configuration file +go.mod - The go module file +go.sum - The go module checksum file +``` + +## Build the application + +To build the application, change to the new `helloworld` project directory and run the following command: + +```bash +wails build +``` + +You should see something like the following: + +``` +Wails CLI v2.0.0 + +App Type: desktop +Platforms: windows/amd64 +Compiler: C:\Users\leaan\go\go1.18.3\bin\go.exe +Build Mode: Production +Devtools: false +Skip Frontend: false +Compress: false +Package: true +Clean Build Dir: false +LDFlags: "" +Tags: [] +Race Detector: false + +Building target: windows/amd64 +------------------------------ + - Installing frontend dependencies: Done. + - Compiling frontend: Done. + - Generating bundle assets: Done. + - Compiling application: Done. +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. + +## Run the application + +If we view the `build/bin` directory in Windows Explorer, we should see our project binary: + +```mdx-code-block +
+ +
+
+``` + +We can run it by simply double-clicking the `helloworld.exe` file. + +On Mac, Wails generates a `helloworld.app` file which can be run by double-clicking it. + +On Linux, you can run the application using `./helloworld` from the `build/bin` directory. + +You should see the application working as expected: + +```mdx-code-block +
+ +
+
+``` diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/version-v2.3.1.json b/website/i18n/vi/docusaurus-plugin-content-docs/version-v2.3.1.json new file mode 100644 index 00000000000..e413aa9df6f --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/version-v2.3.1.json @@ -0,0 +1,38 @@ +{ + "version.label": { + "message": "v2.3.1", + "description": "The label for version v2.3.1" + }, + "sidebar.docs.category.Getting Started": { + "message": "Hướng Dẫn Nhanh", + "description": "The label for category Getting Started in sidebar docs" + }, + "sidebar.docs.category.Reference": { + "message": "Tham Khảo", + "description": "The label for category Reference in sidebar docs" + }, + "sidebar.docs.category.Runtime": { + "message": "Bộ Công Cụ Runtime", + "description": "The label for category Runtime in sidebar docs" + }, + "sidebar.docs.category.Community": { + "message": "Cộng Đồng", + "description": "The label for category Community in sidebar docs" + }, + "sidebar.docs.category.Showcase": { + "message": "Trưng Bày", + "description": "The label for category Showcase in sidebar docs" + }, + "sidebar.docs.category.Guides": { + "message": "Định Hướng", + "description": "The label for category Guides in sidebar docs" + }, + "sidebar.docs.category.Tutorials": { + "message": "Thực Hành", + "description": "The label for category Tutorials in sidebar docs" + }, + "sidebar.docs.link.Contributing": { + "message": "Đóng Góp", + "description": "The label for link Contributing in sidebar docs, linking to /community-guide#ways-of-contributing" + } +} diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/version-v2.4.0.json b/website/i18n/vi/docusaurus-plugin-content-docs/version-v2.4.0.json new file mode 100644 index 00000000000..ff5f2e9c8e8 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/version-v2.4.0.json @@ -0,0 +1,38 @@ +{ + "version.label": { + "message": "v2.4.0", + "description": "The label for version v2.4.0" + }, + "sidebar.docs.category.Getting Started": { + "message": "Hướng Dẫn Nhanh", + "description": "The label for category Getting Started in sidebar docs" + }, + "sidebar.docs.category.Reference": { + "message": "Tham Khảo", + "description": "The label for category Reference in sidebar docs" + }, + "sidebar.docs.category.Runtime": { + "message": "Bộ Công Cụ Runtime", + "description": "The label for category Runtime in sidebar docs" + }, + "sidebar.docs.category.Community": { + "message": "Cộng Đồng", + "description": "The label for category Community in sidebar docs" + }, + "sidebar.docs.category.Showcase": { + "message": "Trưng Bày", + "description": "The label for category Showcase in sidebar docs" + }, + "sidebar.docs.category.Guides": { + "message": "Định Hướng", + "description": "The label for category Guides in sidebar docs" + }, + "sidebar.docs.category.Tutorials": { + "message": "Thực Hành", + "description": "The label for category Tutorials in sidebar docs" + }, + "sidebar.docs.link.Contributing": { + "message": "Đóng Góp", + "description": "The label for link Contributing in sidebar docs, linking to /community-guide#ways-of-contributing" + } +} diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/version-v2.5.0.json b/website/i18n/vi/docusaurus-plugin-content-docs/version-v2.5.0.json new file mode 100644 index 00000000000..af3a23601d9 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/version-v2.5.0.json @@ -0,0 +1,38 @@ +{ + "version.label": { + "message": "v2.5.0", + "description": "The label for version v2.5.0" + }, + "sidebar.docs.category.Getting Started": { + "message": "Hướng Dẫn Nhanh", + "description": "The label for category Getting Started in sidebar docs" + }, + "sidebar.docs.category.Reference": { + "message": "Tham Khảo", + "description": "The label for category Reference in sidebar docs" + }, + "sidebar.docs.category.Runtime": { + "message": "Bộ Công Cụ Runtime", + "description": "The label for category Runtime in sidebar docs" + }, + "sidebar.docs.category.Community": { + "message": "Cộng Đồng", + "description": "The label for category Community in sidebar docs" + }, + "sidebar.docs.category.Showcase": { + "message": "Trưng Bày", + "description": "The label for category Showcase in sidebar docs" + }, + "sidebar.docs.category.Guides": { + "message": "Định Hướng", + "description": "The label for category Guides in sidebar docs" + }, + "sidebar.docs.category.Tutorials": { + "message": "Thực Hành", + "description": "The label for category Tutorials in sidebar docs" + }, + "sidebar.docs.link.Contributing": { + "message": "Đóng Góp", + "description": "The label for link Contributing in sidebar docs, linking to /community-guide#ways-of-contributing" + } +} diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/version-v2.6.0.json b/website/i18n/vi/docusaurus-plugin-content-docs/version-v2.6.0.json new file mode 100644 index 00000000000..2d5505b0d36 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-docs/version-v2.6.0.json @@ -0,0 +1,38 @@ +{ + "version.label": { + "message": "v2.6.0", + "description": "The label for version v2.6.0" + }, + "sidebar.docs.category.Getting Started": { + "message": "Hướng Dẫn Nhanh", + "description": "The label for category Getting Started in sidebar docs" + }, + "sidebar.docs.category.Reference": { + "message": "Tham Khảo", + "description": "The label for category Reference in sidebar docs" + }, + "sidebar.docs.category.Runtime": { + "message": "Bộ Công Cụ Runtime", + "description": "The label for category Runtime in sidebar docs" + }, + "sidebar.docs.category.Community": { + "message": "Cộng Đồng", + "description": "The label for category Community in sidebar docs" + }, + "sidebar.docs.category.Showcase": { + "message": "Trưng Bày", + "description": "The label for category Showcase in sidebar docs" + }, + "sidebar.docs.category.Guides": { + "message": "Định Hướng", + "description": "The label for category Guides in sidebar docs" + }, + "sidebar.docs.category.Tutorials": { + "message": "Thực Hành", + "description": "The label for category Tutorials in sidebar docs" + }, + "sidebar.docs.link.Contributing": { + "message": "Đóng Góp", + "description": "The label for link Contributing in sidebar docs, linking to /community-guide#ways-of-contributing" + } +} diff --git a/website/i18n/vi/docusaurus-plugin-content-pages/changelog.mdx b/website/i18n/vi/docusaurus-plugin-content-pages/changelog.mdx new file mode 100644 index 00000000000..4a332a43083 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-pages/changelog.mdx @@ -0,0 +1,751 @@ +# Nhật Ký Phiên Bản + +Tất cả những thay đổi đáng chú ý sẽ được thêm vào tài liệu này. + +Định dạng văn bản dựa trên [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) và dự án này tuân thủ [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +- `Added` cho các tính năng mới nhất. +- `Changed` cho các chỉnh sửa của các tính năng sẵn có. +- `Deprecated` cho các tính năng mà sắp bị gỡ bỏ ở các phiên bản tiếp theo. +- `Removed` các tính năng đã được gỡ bỏ. +- `Fixed` cho các lỗi hoặc bug đã được sửa. +- `Security` cho các trường hợp vá lỗ hổng bảo mật. + +## [Unreleased] + +### Added + +- Added support for enabling/disabling swipe gestures for Windows WebView2. Added by @leaanthony in [PR](https://github.com/wailsapp/wails/pull/2878) +- When building with `-devtools` flag, CMD/CTRL+SHIFT+F12 can be used to open the devtools. Added by @leaanthony in [PR](https://github.com/wailsapp/wails/pull/2915) – Added file association support for macOS and Windows. Added by @APshenkin in [PR](https://github.com/wailsapp/wails/pull/2918) +- Added support for setting some of the Webview preferences, `textInteractionEnabled` and `tabFocusesLinks` on Mac. Added by @fkhadra in [PR](https://github.com/wailsapp/wails/pull/2937) +- Added support for enabling/disabling fullscreen of the Webview on Mac. Added by @fkhadra in [PR](https://github.com/wailsapp/wails/pull/2953) +- Added French README.fr.md page. Added by @nejos97 in [PR](https://github.com/wailsapp/wails/pull/2943) +- New task created for linting v2 `task v2:lint`. Workflow updated to run the task. Added by @mikeee in [PR](https://github.com/wailsapp/wails/pull/2957) +- Added new community template wails-htmx-templ-chi-tailwind. Added by [@pylotlight](https://github.com/pylotlight) in [PR](https://github.com/wailsapp/wails/pull/2984) +- Added CPU/GPU/Memory detection for `wails doctor`. Added by @leaanthony in #d51268b8d0680430f3a614775b13e6cd2b906d1c + +### Changed + +- AssetServer requests are now processed asynchronously without blocking the main thread on Windows. Changed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2926) +- AssetServer requests are now processed concurrently by spawning a goroutine per request. Changed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2926) +- Now building with `-devtools` flag doesn't enable the default context-menu. Changed by @mmghv in [PR](https://github.com/wailsapp/wails/pull/2923) +- Change Window Level. Changed by @almas1992 in [PR](https://github.com/wailsapp/wails/pull/2944) +#### Fixed + +- Fixed typo on docs/reference/options page. Added by [@pylotlight](https://github.com/pylotlight) in [PR](https://github.com/wailsapp/wails/pull/2887) +- Fixed issue with npm being called npm20 on openSUSE-Tumbleweed. Fixed by @TuffenDuffen in [PR] in (https://github.com/wailsapp/wails/pull/2941) + +## v2.6.0 - 2023-09-06 + +### Breaking Changes + +- AssetServer RequestURI and URL are now RFC and Go Docs compliant for server requests. This means Scheme, Host and Fragments are not provided anymore. Changed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2722) + +### Fixed + +- Avoid app crashing when the Linux GTK key is empty. Fixed by @aminya in [PR](https://github.com/wailsapp/wails/pull/2672) +- Fix issue where app would exit before main() on linux if $DISPLAY env var was not set. Fixed by @phildrip in [PR](https://github.com/wailsapp/wails/pull/2841) +- Fixed a race condition when positioning the window on Linux. Added by @lyimmi in [PR](https://github.com/wailsapp/wails/pull/2850) +- Fixed `SetBackgroundColour` so it sets the window's background color to reduce resize flickering on Linux. Added by @lyimmi in [PR](https://github.com/wailsapp/wails/pull/2853) +- Fixed disable window resize option and wrong initial window size when its enabled. Added by @lyimmi in [PR](https://github.com/wailsapp/wails/pull/2863) +- Fixed build hook command parsing. Added by @smac89 in [PR](https://github.com/wailsapp/wails/pull/2836) +- Fixed filesystem watcher from filtering top level project directory if binary name is included in .gitignore. Added by [@haukened](https://github.com/haukened) in [PR #2869](https://github.com/wailsapp/wails/pull/2869) +- Fixed `-reloaddir` flag to watch additional directories (non-recursively). [@haukened](https://github.com/haukened) in [PR #2871](https://github.com/wailsapp/wails/pull/2871) +- Fixed support for Go 1.21 `go.mod` files. Fixed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2876) + +### Added + +- Added correct NodeJS and Docker package names for DNF package manager of Fedora 38. Added by @aranggitoar in [PR](https://github.com/wailsapp/wails/pull/2790) +- Added `-devtools` production build flag. Added by @mmghv in [PR](https://github.com/wailsapp/wails/pull/2725) +- Added `EnableDefaultContextMenu` option to allow enabling the browser's default context-menu in production . Added by @mmghv in [PR](https://github.com/wailsapp/wails/pull/2733) +- Added smart functionality for the default context-menu in production with CSS styles to control it. Added by @mmghv in [PR](https://github.com/wailsapp/wails/pull/2748) +- Added custom error formatting to allow passing structured errors back to the frontend. +- Added sveltekit.mdx guide. Added by @figuerom16 in [PR](https://github.com/wailsapp/wails/pull/2771) +- Added ProgramName option to [linux.Options](/docs/reference/options#linux). Added by @lyimmi in [PR](https://github.com/wailsapp/wails/pull/2817) +- Added new community template wails-sveltekit-ts. Added by [@haukened](https://github.com/haukened) in [PR](https://github.com/wailsapp/wails/pull/2851) +- Added support for retrieving the logical and physical screen size in the screen api. Added by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2856) +- Added new community template wails-sveltekit-tailwind. Added by [@pylotlight](https://github.com/pylotlight) in [PR](https://github.com/wailsapp/wails/pull/2851) +- Added support for print dialogs. Added by [@aangelisc](https://github.com/aangelisc) in [PR](https://github.com/wailsapp/wails/pull/2822) +- Added new `wails dev -nogorebuild` flag to prevent restarts on back end file changes. [@haukened](https://github.com/haukened) in [PR #2870](https://github.com/wailsapp/wails/pull/2870) +- Added a guide to describe a cross-platform build using GitHub Actions. Added by [@dennypenta](https://github.com/dennypenta) in [PR](https://github.com/wailsapp/wails/pull/2879) + +### Changed + +- Now uses new `go-webview2` module. Added by @leaanthony in [PR](https://github.com/wailsapp/wails/pull/2687). +- Changed styling of `doctor` command. Changed by @MarvinJWendt in [PR](https://github.com/wailsapp/wails/pull/2660) +- Enable HiDPI option by default in windows nsis installer. Changed by @5aaee9 in [PR](https://github.com/wailsapp/wails/pull/2694) +- Now debug builds include the un-minified version of the runtime JS with source maps . Changed by @mmghv in [PR](https://github.com/wailsapp/wails/pull/2745) + +## v2.5.1 - 2023-05-16 + +### Breaking Changes + +- The Go WebView2Loader allowed env variable and registry overrides to change the behaviour of WebView2. This is not possible when using the native WebView2Loader with Wails and should not be possible according to [PR](https://github.com/wailsapp/wails/pull/1771). Changed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2668) +- `wails dev` now uses the custom schemes `wails://` on macOS and Linux for all Vite versions. This also fixes missing reloads after multiple fast savings on Linux and Windows. Changed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2664) + +### Fixed + +- Fixed segfaults during fast reloads of requests on macOS. Fixed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2664) +- Fixed devserver on Linux for older WebKit2GTK versions < 2.36. Fixed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2664) +- Fixed devserver on Windows that might have triggered the WebView2 into a hang. Fixed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2664) + +## v2.5.0 - 2023-05-13 + +### Breaking Changes + +- `wails dev` now uses the custom schemes `wails://` on macOS and Linux if Vite >= `v3.0.0` is used. This makes the dev application consistent in behaviour with the final production application and fixes some long-standing inconsistencies. Changed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2610) + +### Added + +- Added Nodejs version in `wails doctor`. Added by @misitebao in [PR](https://github.com/wailsapp/wails/pull/2546) +- Added support for WebKit2GTK 2.40+ on Linux. This brings additional features for the [AssetServer](/docs/reference/options#assetserver), like support for HTTP Request Bodies. The app must be compiled with the Go build tag `webkit2_40` to activate support for this features. This also bumps the minimum requirement of WebKit2GTK to 2.40 for your app. Added by @stffabi in this [PR](https://github.com/wailsapp/wails/pull/2592) +- macOS: Added Window menu role with well known shortcuts "Minimize, Full-Screen and Zoom". Added by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2586) +- macOS: Added "Hide, Hide Others, Show All“ to appmenu. Added by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2586) +- Windows: Added flag to disable the WebView2 `RendererCodeIntegrity` checks, please see the comment on the flag for more information. Added by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2627) +- Windows: Added handling of WebView2 process crashes, for unrecoverable errors an error message is shown that the app needs to be restarted. If an error occurs that shows a chromium error page, make sure the Window and the WebView2 is visible. Added by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2627) + +### Changed + +- [v3] Typescript model generation using `StructDef`s from new AST-based parser. Added by @ATenderholt in [PR1](https://github.com/wailsapp/wails/pull/2428/files) and [PR2](https://github.com/wailsapp/wails/pull/2485). + +### Fixed + +- Fixed console printing in `wails generate template`. Fixed by @misitebao in [PR](https://github.com/wailsapp/wails/pull/2483) +- Fixed unicode encoding of strings for multi-rune characters. Fixed by @joshbuddy in [PR](https://github.com/wailsapp/wails/pull/2509) +- Fixed `-skipbindings` flag in `wails dev`. Fixed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2584) +- Fixed `runtime.MenuUpdateApplicationMenu` on macOS. Fixed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2588) +- Fixed add package name for `libwebkit`/`pkg-config` and use shell.RunCommandWithENV instead of shell.RunCommand in `zypper.go`. Fixed by @wgjtyu in [PR](https://github.com/wailsapp/wails/pull/2593) +- Make sure to start the CommonFileDialogs on Windows on the Main-Thread. Fixed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2606) +- Fixed generated typescript bindings. Fixed by @dominictwlee in [PR](https://github.com/wailsapp/wails/pull/2552) +- Fixed `StartHidden` option not working on Linux. Fixed by @LGiki in [PR](https://github.com/wailsapp/wails/pull/2624) + +## v2.4.1 - 2023-03-20 + +### Changed + +- Support single clicks on items with `--wails-draggable: drag` again on Windows. Changed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2482) + +### Fixed + +- Fixed panic when using `wails dev` and the AssetServer tried to log to the logger. Fixed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2481) +- Fixed compatibility with WebView2 Runtime > `110.0.1587.69` which showed a `connection refused` html page before doing a reload of the frontend. Fixed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2496) + +## v2.4.0 - 2023-03-08 + +### Added + +- Added Webview GPU acceleration options for [Windows](/docs/reference/options#webviewgpuisdisabled) and [Linux](/docs/reference/options#webviewgpupolicy). Added by @Lyimmi in [PR](https://github.com/wailsapp/wails/pull/2266) +- Added `EnableFraudulentWebsiteDetection` option to opt-in to scan services for fraudulent content, such as malware or phishing attempts. Older releases had the scan services per default activated. Added by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2269) +- Allow an [AssetServer Middleware](/docs/reference/options#middleware) to specify the `Content-Type` of a file served by the [Assets](/docs/reference/options#assets-1) `fs.FS`. Added by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2286) +- The AssetServer now detects more mimetypes by extension, e.g. `.mjs`. Added by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2391) + +### Changed + +- Improved fullscreen mode for frameless window on Windows. Changed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2279), [PR](https://github.com/wailsapp/wails/pull/2288) and [PR](https://github.com/wailsapp/wails/pull/2299) +- On Windows unmaximising a window has no effect anymore when the window is in fullscreen mode, this makes it consistent with e.g. macOS. Changed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2279) +- Frameless resize now sets the cursor on documentElement, otherwise resizing cursor won't be shown outside of the body rectangle. Changed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2289) +- Improved the `--wails-draggable` experience to be more reactive. Changed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2302) +- NSIS template now installs the shortcuts for all users and not only for the current user. Changed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2373) + +### Fixed + +- Fixed failing build hooks when `build/bin` was missing. Fixed by @Lyimmi in [PR](https://github.com/wailsapp/wails/pull/2273) +- Fixed fullscreen mode for frameless window on Windows to fully cover the taskbar when changing into fullscreen from maximised state. Fixed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2279) +- Fixed set window background colour on Windows when setting the colour via runtime. Fixed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2279) +- Fixed the showing of a white border around a fullscreen window when `DisableWindowIcon` is active on Windows. Fixed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2299) +- Fixed the sometimes lagging drag experience with `--wails-draggable` on Windows. Fixed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2302) +- Fixed applying the default arch to platform flag in wails cli. If only a `GOOS` has been supplied as platform flag e.g. `wails build --platform windows` the current architecture wasn't applied and the build failed. Fixed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2309) +- Fixed a segfault on opening the inspector on older macOS versions. Fixed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2397) +- Fixed the macos single architecture builds not respecting an output file name specified with the '-o' flag. Fixed by @gwynforthewyn in [PR](https://github.com/wailsapp/wails/pull/2358) +- Fixed `undo`/`redo` on macOS. Fixed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2430) +- Fixed `Events*` runtime functions in JavaScript not returning the function to cancel the watcher. Fixed by @zllovesuki in [PR](https://github.com/wailsapp/wails/pull/2434) +- Fixed AppOptions merging defaults when a custom logger is used. Fixed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2452) +- Fixed race condition and missing unlock of mutex in events handling. Fixed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2453) + +## v2.3.0 - 2022-12-29 + +### Added + +- Added `OpenInspectorOnStartup` to debug options to allow opening the WebInspector during startup of the application in debug mode. Added by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2080) +- On macOS `wails doctor` now also shows the version of Xcode installed. Added by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2089) +- The [AssetServer](/docs/reference/options#assetserver) now supports handling range-requests if the [Assets](/docs/reference/options/#assets-1) `fs.FS` provides an `io.ReadSeeker`. Added by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2091) +- Add new property for the `wails.json` config file - `bindings`. More information on the new property can be found in the updated [schema](/schemas/config.v2.json). Properties `prefix` and `suffix` allow you to control the generated TypeScript entity name in the `model.ts` file. Added by @OlegGulevskyy in [PR](https://github.com/wailsapp/wails/pull/2101) +- The `WindowSetAlwaysOnTop` method is now exposed in the JS runtime. Fixed by @gotid in [PR](https://github.com/wailsapp/wails/pull/2128) +- The [AssetServer](/docs/reference/options#assetserver) now supports serving the index.html file when requesting a directory. Added by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2110) +- Added support for WebKit2GTK 2.36+ on Linux. This brings additional features for the [AssetServer](/docs/reference/options#assetserver), like support for HTTP methods and Headers. The app must be compiled with the Go build tag `webkit2_36` to activate support for this features. This also bumps the minimum requirement of WebKit2GTK to 2.36 for your app. Fixed by @stffabi in this [PR](https://github.com/wailsapp/wails/pull/2151) +- Added support for file input selection on macOS. Added by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2209) +- Added support Request/Response streaming of the AssetServer on macOS. Added by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2219) +- Added request path checks for the AssetServer. Added by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2235) +- Added new App Store guide. Added by @achhabra2 in [PR](https://github.com/wailsapp/wails/pull/2142) +- Added extra libwebkit check for dnf package manager (required for latest Fedora). Fixed by @NullCode1337 in this [PR](https://github.com/wailsapp/wails/pull/2218) +- Added new `-nomodsync` flag to disable the automatic syncing of the `go.mod` file. Added by @leaanthony in [PR](https://github.com/wailsapp/wails/pull/2215) +- Added support for adding prefix and postfix text to generated Typescript classes. Added by @OlegGulevskyy in [PR](https://github.com/wailsapp/wails/pull/2101) +- Added reference to NSIS as optional dependency. Added by @acheong08 in [PR](https://github.com/wailsapp/wails/pull/2070) +- Added Korean translation for the website. Added by @cybertramp in [PR](https://github.com/wailsapp/wails/pull/2093) + +### Fixed + +- The `noreload` flag in wails dev wasn't applied. Fixed by @stffabi in this [PR](https://github.com/wailsapp/wails/pull/2081) +- `build/bin` folder was duplicating itself on each reload in `wails dev` mode. Fixed by @OlegGulevskyy in this [PR](https://github.com/wailsapp/wails/pull/2103) +- Prevent a thin white line at the bottom of a frameless window on Windows. Fixed by @stffabi in this [PR](https://github.com/wailsapp/wails/pull/2111) +- Better signal handling for Linux. Fixed by @leaanthony in this [PR](https://github.com/wailsapp/wails/pull/2152) +- Running the docs locally was broken due to mandatory crowdin token requirement. Fixed by @OlegGulevskyy in this [PR](https://github.com/wailsapp/wails/pull/2231) +- Generated typescript for Go functions that returned a single error was incorrect. Fixed by @ATenderholt in this [PR](https://github.com/wailsapp/wails/pull/2247) +- The right mouse event was not being raised correctly for Linux. Fixed by @leaanthony in this [PR](https://github.com/wailsapp/wails/pull/2190) +- Remove extra spaces in Wails version when querying `go.mod`. Fixed by @matholt in this [PR](https://github.com/wailsapp/wails/pull/2197) +- Fix go tests failure on Mac. Fixed by @avengerweb in this [PR](https://github.com/wailsapp/wails/pull/2187) +- Fix go test errors. Fixed by @misitebao & @avengerweb in [these](https://github.com/wailsapp/wails/pull/2169) [PRs](https://github.com/wailsapp/wails/pull/2187) +- Added `WindowSetAlwaysOnTop` to the JS runtime. Fixed by @gotid in [PR](https://github.com/wailsapp/wails/pull/2128) +- Fixed obfuscated flag typo in docs. Fixed by @ckilb in [PR](https://github.com/wailsapp/wails/pull/2102) +- Fixed React Hash Router link in docs. Fixed by @marvinhosea in [PR](https://github.com/wailsapp/wails/pull/2050) + +### Changed + +- Improve error message if no `index.html` could be found in the assets and validate assetserver options. Changed by @stffabi in this [PR](https://github.com/wailsapp/wails/pull/2110) +- Promote the Go WebView2Loader from experimental to stable. This means now per default all Wails build use the new loader introduced with `v2.2.0`. The old loader remains usable with build tag `native_webview2loader` for the next few releases. Changed by @stffabi in this [PR](https://github.com/wailsapp/wails/pull/2199) +- Refactored CLI. Changed by @leaanthony in this [PR](https://github.com/wailsapp/wails/pull/2123) +- Remove unreachable code. Changed by @tmclane in this [PR](https://github.com/wailsapp/wails/pull/2182) + +## v2.2.0 - 2022-11-09 + +### Added + +- Wails now uses a purpose built, native Go implementation of Microsoft's webview2loader dll. This means there is no need to embed the `Webview2Loader.dll` file in your binaries, meaning filesizes will be ~130k smaller! Thanks to @stffabi for this [awesome contribution](https://github.com/wailsapp/wails/pull/1974)! +- This release provides much more control over custom asset handling via the new [AssetServer](https://wails.io/docs/reference/options#assetserver) options. This allows you to provide your own custom asset handler and hook into the request chain through middleware. Thanks to @stffabi for this [awesome contribution](https://github.com/wailsapp/wails/pull/2016) and @mholt for the [initial idea](https://github.com/wailsapp/wails/issues/2007) and extensive testing. +- It is now possible to customise the layout of your Wails projects using 2 new options in `wails.json`: + - `build:dir` can be used to specify where the build files reside + - `frontend:dir` can be used to specify where the frontend files reside + - If `go.mod` is not found in the same directory as `wails.json`, the cli will look up the parent directories to find it. Fixed by @leaanthony in this [PR](https://github.com/wailsapp/wails/pull/2009) +- Colour output in the CLI can now be turned off by using the `--nocolor` flag. This is useful for CI/CD pipelines. Thanks to @scottopell for the [PR](https://github.com/wailsapp/wails/pull/1947) +- A JSON schema definition for the `wails.json` file has been added. IDEs should now provide code complete when editing `wails.json`. Thanks to @binyamin for the [PR](https://github.com/wailsapp/wails/pull/1864) +- The `EventsOn*` methods now return a function that can be called to deregister the listener. Thanks to @joshbuddy for the [PR](https://github.com/wailsapp/wails/pull/1969) + +### Fixed + +- Webview2 on Windows returns a potential whitespace when defining the style like this style="--wails-draggable: drag". Fixed by @stffabi in https://github.com/wailsapp/wails/pull/1989 +- Bound structs that had `struct{}` field types would cause the TypeScript generation to fail. Thanks to @ParkourLiu for the [PR](https://github.com/wailsapp/wails/pull/1999) +- When maximising a frameless window on Windows with multiple monitors, the window could sometimes become blank. Thanks to @stffabi for the [fix](https://github.com/wailsapp/wails/pull/2043) + +### Changed + +- The troubleshooting guide was updated to provide guidance when [Vite fails to start](https://wails.io/docs/guides/troubleshooting#cannot-start-service-host-version-xxx-does-not-match-binary-version-xxx). Thanks to @willdot for the [PR](https://github.com/wailsapp/wails/pull/2000). +- English, Chinese and Japanese documentation updates. Thanks to @misitebao. + +### Deprecated + +- The [AssetsHandler](https://wails.io/docs/reference/options#assetshandler) option has been deprecated. Please use the [AssetServer](https://wails.io/docs/reference/options#assetserver) option instead. + +### New Contributors + +- @willdot made their first contribution in https://github.com/wailsapp/wails/pull/2000 +- @ParkourLiu made their first contribution in https://github.com/wailsapp/wails/pull/1999 +- @binyamin made their first contribution in https://github.com/wailsapp/wails/pull/1864 +- @joshbuddy made their first contribution in https://github.com/wailsapp/wails/pull/1969 +- @sgosiaco made their first contribution in https://github.com/wailsapp/wails/pull/2062 + +## v2.1.0 - 2022-10-18 + +### Removed + +- The `RGBA` option in `options.App` has now been removed. Use `BackgroundColour` instead. + +### Added + +- [Support for defaulting to No button in Windows dialogs](https://wails.io/docs/reference/runtime/dialog/#windows) - @leaanthony in https://github.com/wailsapp/wails/pull/1875 +- Add missing resize for frameless window on Linux - @Lyimmi in https://github.com/wailsapp/wails/pull/1918 +- [Add window transparency for linux](https://wails.io/docs/reference/options#windowistranslucent-2) - @Lyimmi in https://github.com/wailsapp/wails/pull/1926 +- [Add WindowExecJS method](https://wails.io/docs/reference/runtime/window#windowexecjs) - @leaanthony in https://github.com/wailsapp/wails/pull/1927 +- [Add support for `Info.dev.plist` on macOS](https://wails.io/docs//reference/cli#dev) - @leaanthony in https://github.com/wailsapp/wails/pull/1960 +- [Add ZoomFactor get/set and add the respective windows only options](https://wails.io/docs/reference/options#zoomfactor) - @pierrejoye in https://github.com/wailsapp/wails/pull/1463 + +### Fixed + +- Embed directories auto-created if they don't exist - @leaanthony in https://github.com/wailsapp/wails/pull/1983 +- Quote command arguments if they have a space - @leaanthony in https://github.com/wailsapp/wails/pull/1892 +- Fixed Linux frameless window drag - @Lyimmi in https://github.com/wailsapp/wails/pull/1916 +- Fix gtk_window_begin_resize_drag's mouse button - @Lyimmi in https://github.com/wailsapp/wails/pull/1920 +- Fix binding generation special cases - @JulioDRF in https://github.com/wailsapp/wails/pull/1902 +- Remove the `.git` directory in the template - @misitebao in https://github.com/wailsapp/wails/pull/1929 +- Fix wails dev - @JulioDRF in https://github.com/wailsapp/wails/pull/1931 +- Fix for considering new `go` files in dev filesystem watcher - @scottopell in https://github.com/wailsapp/wails/pull/1946 +- Prevent type parsing to interfere with TypeScript package name - @ValentinTrinque in https://github.com/wailsapp/wails/pull/1942 +- [dev] Do not try to infer assetdir from fs.FS when a frontend dev server is in use - @stffabi in https://github.com/wailsapp/wails/pull/1972 +- Fix init command not listed in wails help message - @lyon-lee-dev in https://github.com/wailsapp/wails/pull/1976 + +### Changed + +- Add PR checks - @leaanthony in https://github.com/wailsapp/wails/pull/1879 +- Auto label project cards - @leaanthony in https://github.com/wailsapp/wails/pull/1881 +- Add issue translator - @leaanthony in https://github.com/wailsapp/wails/pull/1891 +- Update label names in the issue template - @misitebao in https://github.com/wailsapp/wails/pull/1893 +- obfuscated instead of obfuscate in the docs - @arifali123 in https://github.com/wailsapp/wails/pull/1895 +- [assetHandler] Remove redundant log prefix - @stffabi in https://github.com/wailsapp/wails/pull/1896 +- [dev] Do not generate bindings in the dev app itself - @stffabi in https://github.com/wailsapp/wails/pull/1899 +- Update Chinese translation - @almas1992 in https://github.com/wailsapp/wails/pull/1894 +- Refactor app - @leaanthony in https://github.com/wailsapp/wails/pull/1909 +- Update documents - @misitebao in https://github.com/wailsapp/wails/pull/1907 https://github.com/wailsapp/wails/pull/1936 +- Adding Tutorial link - @raguay in https://github.com/wailsapp/wails/pull/1903 +- Add react-ts-vite-tailwind template - @hotafrika in https://github.com/wailsapp/wails/pull/1930 +- Update README.zh-Hans.md - @o8x in https://github.com/wailsapp/wails/pull/1949 +- Add Elm Tailwind CSS community template - @rnice01 in https://github.com/wailsapp/wails/pull/1939 +- Chore/generate sponsors - @leaanthony in https://github.com/wailsapp/wails/pull/1965 +- Use swc + pnpm for website - @leaanthony in https://github.com/wailsapp/wails/pull/1966 +- Sort structs in models.ts - @leaanthony in https://github.com/wailsapp/wails/pull/1961 +- Update Sponsor Image - @github-actions in https://github.com/wailsapp/wails/pull/1973 +- docs: sync documents - @misitebao in https://github.com/wailsapp/wails/pull/1968 +- Update events.mdx - @cuigege in https://github.com/wailsapp/wails/pull/1979 + +### New Contributors + +- @arifali123 made their first contribution in https://github.com/wailsapp/wails/pull/1895 +- @almas1992 made their first contribution in https://github.com/wailsapp/wails/pull/1894 +- @JulioDRF made their first contribution in https://github.com/wailsapp/wails/pull/1902 +- @hotafrika made their first contribution in https://github.com/wailsapp/wails/pull/1930 +- @scottopell made their first contribution in https://github.com/wailsapp/wails/pull/1946 +- @o8x made their first contribution in https://github.com/wailsapp/wails/pull/1949 +- @rnice01 made their first contribution in https://github.com/wailsapp/wails/pull/1939 +- @cuigege made their first contribution in https://github.com/wailsapp/wails/pull/1979 +- @lyon-lee-dev made their first contribution in https://github.com/wailsapp/wails/pull/1976 + +## v2.0.0 - 2022-09-22 + +### Fixed + +- Fix buildtags parsing if only one tag is specified by @stffabi in https://github.com/wailsapp/wails/pull/1858 +- Use embed all to include all files in templates by @stffabi in https://github.com/wailsapp/wails/pull/1862 + +### Changed + +- Bump minimum required Go version to 1.18 by @stffabi in https://github.com/wailsapp/wails/pull/1854 +- Add check for minimum required Go version by @stffabi in https://github.com/wailsapp/wails/pull/1853 +- chore: update README and workflows by @misitebao in https://github.com/wailsapp/wails/pull/1848 +- Update introduction.mdx by @ParvinEyvazov in https://github.com/wailsapp/wails/pull/1863 +- Releasetest/release workflow by @leaanthony in https://github.com/wailsapp/wails/pull/1869 +- Optimize documentation website by @misitebao in https://github.com/wailsapp/wails/pull/1849 + +### New Contributors + +- @ParvinEyvazov made their first contribution in https://github.com/wailsapp/wails/pull/1863 + +## v2.0.0-rc.1 - 2022-09-13 + +### Deprecated + +- The `-noGen` flag for the `wails dev` command has been replaced with `-skipbindings`. This is to align with the `wails build` command. + +### Added + +- Add garble support by @leaanthony in https://github.com/wailsapp/wails/pull/1793 +- Make draggable CSS property customisable by @leaanthony in https://github.com/wailsapp/wails/pull/1828 +- Add Some WindowState by @zandercodes in https://github.com/wailsapp/wails/pull/1349 +- Make EventsOff capable of removing multiple listeners by @Lyimmi in https://github.com/wailsapp/wails/pull/1822 + +### Fixed + +- Use `Promise` when Go routine does not output by @SheetJSDev in https://github.com/wailsapp/wails/pull/1821 +- preact-ts template build fix by @Debdut in https://github.com/wailsapp/wails/pull/1781 +- fix frontend/tsconfig.js by @Lyimmi in https://github.com/wailsapp/wails/pull/1795 +- fix: fix bugs in website by @misitebao in https://github.com/wailsapp/wails/pull/1810 +- Fix vue-ts template by @leaanthony in https://github.com/wailsapp/wails/pull/1813 +- Remove duplicate defs in win32/window.go by @AlbinoDrought in https://github.com/wailsapp/wails/pull/1832 + +### Changed + +- Upgrade React to use Vite v3 by @leaanthony in https://github.com/wailsapp/wails/pull/1744 +- Upgrade Lit to use Vite v3 by @leaanthony in https://github.com/wailsapp/wails/pull/1745 +- Support vite3 for Vue by @leaanthony in https://github.com/wailsapp/wails/pull/1746 +- Preact templates for vite 3 by @leaanthony in https://github.com/wailsapp/wails/pull/1770 +- Prevent env variables and registry overrides from changing behaviour by @stffabi in https://github.com/wailsapp/wails/pull/1771 +- Use go implementation to retrieve the version of a fixed runtime by @stffabi in https://github.com/wailsapp/wails/pull/1790 +- Change contribution guide type from "doc" to "page" by @misitebao in https://github.com/wailsapp/wails/pull/1777 +- feat(website): repair document content by @misitebao in https://github.com/wailsapp/wails/pull/1775 +- chore: sort out files by @misitebao in https://github.com/wailsapp/wails/pull/1776 +- Add Korean to doc by @jaesung9507 in https://github.com/wailsapp/wails/pull/1774 +- Add README.ja.md by @shinshin86 in https://github.com/wailsapp/wails/pull/1783 +- Reorganized contribution guidelines page by @misitebao in https://github.com/wailsapp/wails/pull/1784 +- fix(website): fix link by @misitebao in https://github.com/wailsapp/wails/pull/1785 +- Update templates.mdx by @KiddoV in https://github.com/wailsapp/wails/pull/1799 +- Better watcher by @leaanthony in https://github.com/wailsapp/wails/pull/1827 +- Only set GDK_BACKEND to "x11" if GDK_BACKEND is unset and XDG_SESSION_TYPE is not "wayland" by @prurigro in https://github.com/wailsapp/wails/pull/1811 +- Optimize images by @imgbot in https://github.com/wailsapp/wails/pull/1812 + +### New Contributors + +- @shinshin86 made their first contribution in https://github.com/wailsapp/wails/pull/1783 +- @Debdut made their first contribution in https://github.com/wailsapp/wails/pull/1781 +- @KiddoV made their first contribution in https://github.com/wailsapp/wails/pull/1799 +- @zandercodes made their first contribution in https://github.com/wailsapp/wails/pull/1349 +- @prurigro made their first contribution in https://github.com/wailsapp/wails/pull/1811 +- @SheetJSDev made their first contribution in https://github.com/wailsapp/wails/pull/1821 +- @AlbinoDrought made their first contribution in https://github.com/wailsapp/wails/pull/1832 +- @imgbot made their first contribution in https://github.com/wailsapp/wails/pull/1812 + +## v2.0.0-beta.44 - 2022-08-20 + +### Deprecated + +The `data-wails-drag` attribute is being deprecated in favour of the following CSS style: `style="--wails-draggable:drag"`. You can use `style="--wails-draggable:no-drag"` to disable the drag behaviour. For this release only, you can test this by setting the following application option: + +```go +Experimental: &options.Experimental{ + UseCSSDrag: true, +}, +``` + +### Added + +- Set file permissions for generated files by @leaanthony in https://github.com/wailsapp/wails/pull/1763 +- Experimental support for CSS Drag detection by @leaanthony in https://github.com/wailsapp/wails/pull/1750 + +### Fixed + +- Bug fix collecting of output binaries for platforms by @stffabi in https://github.com/wailsapp/wails/pull/1715 +- Fix registration of exposed fields by @ValentinTrinque in https://github.com/wailsapp/wails/pull/1727 +- Fix column widths for doctor command's dependencies table by @ianmjones in https://github.com/wailsapp/wails/pull/1717 +- Do not generate bindings for `OnBeforeClose` method + +### Changed + +- Misc code refactors and removal by @leaanthony in https://github.com/wailsapp/wails/pull/1713 +- Add react-router to routing.mdx by @Maicarons2022 in https://github.com/wailsapp/wails/pull/1755 +- Add Japanese to doc by @RyoTagami in https://github.com/wailsapp/wails/pull/1716 +- Added EmailIt and Modal File Manager by @raguay in https://github.com/wailsapp/wails/pull/1728 +- Adding my ScriptBar program by @raguay in https://github.com/wailsapp/wails/pull/1761 +- Link to general webview2 runtime download page and not to a specific language by @stffabi in https://github.com/wailsapp/wails/pull/1764 +- Updated translations in https://github.com/wailsapp/wails/pull/1719 and https://github.com/wailsapp/wails/pull/1720 +- Remove text outside style's brackets by @DragoSpiro98 in https://github.com/wailsapp/wails/pull/1765 + +### New Contributors + +- @RyoTagami made their first contribution in https://github.com/wailsapp/wails/pull/1716 +- @raguay made their first contribution in https://github.com/wailsapp/wails/pull/1728 +- @Maicarons2022 made their first contribution in https://github.com/wailsapp/wails/pull/1755 +- @DragoSpiro98 made their first contribution in https://github.com/wailsapp/wails/pull/1765 + +## v2.0.0-beta.43 - 2022-08-08 + +### Added + +- Add support for retrieving the release notes from Github by @leaanthony in https://github.com/wailsapp/wails/pull/1679 +- Add `frontend:dev:install` configuration by @LGiki in https://github.com/wailsapp/wails/pull/1666 + +### Fixed + +- Fix formatting of some error messages by @stffabi in https://github.com/wailsapp/wails/pull/1665 +- Windows dialogs now work when window is not visible yet by @leaanthony in https://github.com/wailsapp/wails/pull/1662 +- Multiple fixes for MacOS asset requests by @stffabi in https://github.com/wailsapp/wails/pull/1668 and https://github.com/wailsapp/wails/pull/1681 +- Fix for Go 1.19 by @stffabi in https://github.com/wailsapp/wails/pull/1689 +- Removed Linux warnings by @leaanthony in https://github.com/wailsapp/wails/pull/1656 +- Better support for doubleclick events in drag regions by @leaanthony in https://github.com/wailsapp/wails/pull/1704 +- Allow MacOS frameless window to be miniturisable by @leaanthony in https://github.com/wailsapp/wails/pull/1705 + +### Changed + +- add wails-sveltekit-template by @h8gi in https://github.com/wailsapp/wails/pull/1671 +- wails doctor now reports correct MacOS os id by @stffabi in https://github.com/wailsapp/wails/pull/1673 +- Update application-development.mdx by @SamHennessy in https://github.com/wailsapp/wails/pull/1682 +- Move SetMin/Max calls to main thread by @leaanthony in https://github.com/wailsapp/wails/pull/1684 +- Change `frontend:dev` to `frontend:dev:build` by @LGiki in https://github.com/wailsapp/wails/pull/1691 +- Build frontend only before starting the dev watcher command by @stffabi in https://github.com/wailsapp/wails/pull/1694 +- Improve error message for auto dev server discovery without a dev watcher by @stffabi in https://github.com/wailsapp/wails/pull/1711 + +### New Contributors + +- @h8gi made their first contribution in https://github.com/wailsapp/wails/pull/1671 +- @SamHennessy made their first contribution in https://github.com/wailsapp/wails/pull/1682 + +## v2.0.0-beta.42 - 2022-07-25 + +### Added + +- Added `options.NewRGBA` and `options.NewRGB` functions to create `*options.RGBA` by @leaanthony + +### Fixed + +- Fixed initial build of frontend when using `wails dev` on new projects by @leaanthony in https://github.com/wailsapp/wails/pull/1650 +- Ignore empty install command when running `wails dev` by @stffabi in https://github.com/wailsapp/wails/pull/1651 +- Fixed error reporting in templates +- BackgroundColour documentation fix +- Generalize manual compile steps [Documentation] by @acheong08 in https://github.com/wailsapp/wails/pull/1644 + +## v2.0.0-beta.40 - 2022-07-24 + +### Added + +- Add Show() and Hide() to runtime to show/hide application by @leaanthony in https://github.com/wailsapp/wails/pull/1599 +- Override target platform/arch using GOOS and GOARCH environment variables by @leaanthony in https://github.com/wailsapp/wails/pull/1618 +- Add option to skip frontend rebuild in dev mode by @leaanthony in https://github.com/wailsapp/wails/pull/1632 + +### Fixed + +- Update svelte templates to use vite 3 by @leaanthony in https://github.com/wailsapp/wails/pull/1643 +- Fix plain template by @stffabi in https://github.com/wailsapp/wails/pull/1609 +- Fix Website layout by @leaanthony in https://github.com/wailsapp/wails/pull/1616 +- Fixed typo in documentation page docs/howdoesitwork by @MyNameIsAres in https://github.com/wailsapp/wails/pull/1636 +- Use scaling when setting min/max window by @leaanthony in https://github.com/wailsapp/wails/pull/1557 + +### Changed + +- Install dev dependencies before starting dev mode by @leaanthony in https://github.com/wailsapp/wails/pull/1615 +- Translate and fix website text by @misitebao in https://github.com/wailsapp/wails/pull/1525 +- docs: add MyNameIsAres as a contributor for doc by @allcontributors in https://github.com/wailsapp/wails/pull/1638 +- Deprecate Fullscreen appoption by @acheong08 in https://github.com/wailsapp/wails/pull/1640 + +### Deprecated + +- The `Fullscreen` application option is deprecated. Please use [`WindowStartState`](https://wails.io/docs/reference/options#windowstartstate) instead. + +### New Contributors + +- @MyNameIsAres made their first contribution in https://github.com/wailsapp/wails/pull/1636 + +## v2.0.0-beta.39.2 - 2022-07-20 + +### Added + +- Update example for macOS Menu by @acheong08 in https://github.com/wailsapp/wails/pull/1600 + +### Fixed + +- Reinstate Go 1.17 compatibility by @leaanthony in https://github.com/wailsapp/wails/pull/1605 + +## v2.0.0-beta.39 - 2022-07-19 + +### Added + +- New screen dimensions runtime API by @skamensky in https://github.com/wailsapp/wails/pull/1519 +- Auto discover vite devserver port by @leaanthony in https://github.com/wailsapp/wails/pull/1547 +- Add nixpkgs support to doctor command. by @ianmjones in https://github.com/wailsapp/wails/pull/1551 +- New pre-build hooks feature by @leaanthony in https://github.com/wailsapp/wails/pull/1578 +- New production log level option by @leaanthony in https://github.com/wailsapp/wails/pull/1555 + +### Fixed + +- Fix stack corruption in Windows when using ICoreWebView2HttpHeadersCollectionIterator by @stffabi in https://github.com/wailsapp/wails/pull/1589 +- Move WindowGet\* to main thread by @leaanthony in https://github.com/wailsapp/wails/pull/1464 +- Allow -appargs flag to pass flags to binary. by @ianmjones in https://github.com/wailsapp/wails/pull/1534 +- Fix checking for installed apt package in none English session. by @ianmjones in https://github.com/wailsapp/wails/pull/1548 +- Fix OnBeforeClose code for Mac by @leaanthony in https://github.com/wailsapp/wails/pull/1558 +- Support Maps in TS conversion by @leaanthony in https://github.com/wailsapp/wails/pull/1435 +- Check for line length when scanning for local devserver url by @leaanthony in https://github.com/wailsapp/wails/pull/1566 +- Remove usage of unsafe.Pointer in winc by @stffabi and @leaanthony in https://github.com/wailsapp/wails/pull/1556 + +### Changed + +- Rename WindowSetRGBA -> WindowSetBackgroundColour by @leaanthony in https://github.com/wailsapp/wails/pull/1506 +- Improvements to the dev command by @stffabi in https://github.com/wailsapp/wails/pull/1510 +- Update vscode template by @leaanthony in https://github.com/wailsapp/wails/pull/1398 +- Bump svelte from 3.42.2 to 3.49.0 in /v2/internal/frontend/runtime/dev by @dependabot in https://github.com/wailsapp/wails/pull/1572 +- Bump svelte from 3.42.5 to 3.49.0 in /v2/internal/frontend/runtime by @dependabot in https://github.com/wailsapp/wails/pull/1573 +- Add troubleshooting for `Not Found` error by @acheong08 in https://github.com/wailsapp/wails/pull/1586 +- Docs/better homepage by @leaanthony in https://github.com/wailsapp/wails/pull/1591 + +### New Contributors + +- @skamensky made their first contribution in https://github.com/wailsapp/wails/pull/1519 +- @acheong08 made their first contribution in https://github.com/wailsapp/wails/pull/1586 + +**Full Changelog**: https://github.com/wailsapp/wails/compare/v2.0.0-beta.38...v2.0.0-beta.39 + +## v2.0.0-beta.38 - 2022-06-27 + +### Added + +- Add race detector to build & dev by @Lyimmi in https://github.com/wailsapp/wails/pull/1426 +- [linux] Support `linux/arm` architecture by @Lyimmi in https://github.com/wailsapp/wails/pull/1427 +- Create gitignore when using `-g` option by @jaesung9507 in https://github.com/wailsapp/wails/pull/1430 +- [windows] Add Suspend/Resume callback support by @leaanthony in https://github.com/wailsapp/wails/pull/1474 +- Add runtime function `WindowSetAlwaysOnTop` by @chenxiao1990 in https://github.com/wailsapp/wails/pull/1442 +- [windows] Allow setting browser path by @NanoNik in https://github.com/wailsapp/wails/pull/1448 + +### Fixed + +- [linux] Improve switching to main thread for callbacks by @stffabi in https://github.com/wailsapp/wails/pull/1392 +- [windows] Fix WebView2 minimum runtime version check by @stffabi in https://github.com/wailsapp/wails/pull/1456 +- [linux] Fix apt command syntax (#1458) by @abtin in https://github.com/wailsapp/wails/pull/1461 +- [windows] Set Window Background colour if provided + debounce redraw option by @leaanthony in https://github.com/wailsapp/wails/pull/1466 +- Fix small typo in docs by @LukenSkyne in https://github.com/wailsapp/wails/pull/1449 +- Fix the url to surge by @andywenk in https://github.com/wailsapp/wails/pull/1460 +- Fixed theme change at runtime by @leaanthony in https://github.com/wailsapp/wails/pull/1473 +- Fix: Don't stop if unable to remove temporary bindings build by @leaanthony in https://github.com/wailsapp/wails/pull/1465 +- [windows] Pass the correct installationStatus to the webview installation strategy by @stffabi in https://github.com/wailsapp/wails/pull/1483 +- [windows] Make `SetBackgroundColour` compatible for `windows/386` by @stffabi in https://github.com/wailsapp/wails/pull/1493 +- Fix lit-ts template by @Orijhins in https://github.com/wailsapp/wails/pull/1494 + +### Changed + +- [windows] Load WebView2 loader from embedded only by @stffabi in https://github.com/wailsapp/wails/pull/1432 +- Add showcase entry for October + update homepage carousel entry for October by @marcus-crane in https://github.com/wailsapp/wails/pull/1436 +- Always use return in wrapped method by @leaanthony in https://github.com/wailsapp/wails/pull/1410 +- [windows] Unlock OSThread after native calls have been finished by @stffabi in https://github.com/wailsapp/wails/pull/1441 +- Add `BackgroundColour` and deprecate `RGBA` by @leaanthony in https://github.com/wailsapp/wails/pull/1475 +- AssetsHandler remove retry logic in dev mode by @stffabi in https://github.com/wailsapp/wails/pull/1479 +- Add Solid JS template to docs by @sidwebworks in https://github.com/wailsapp/wails/pull/1492 +- Better signal handling by @leaanthony in https://github.com/wailsapp/wails/pull/1488 +- Chore/react 18 create root by @tomanagle in https://github.com/wailsapp/wails/pull/1489 + +### New Contributors + +- @jaesung9507 made their first contribution in https://github.com/wailsapp/wails/pull/1430 +- @LukenSkyne made their first contribution in https://github.com/wailsapp/wails/pull/1449 +- @andywenk made their first contribution in https://github.com/wailsapp/wails/pull/1460 +- @abtin made their first contribution in https://github.com/wailsapp/wails/pull/1461 +- @chenxiao1990 made their first contribution in https://github.com/wailsapp/wails/pull/1442 +- @NanoNik made their first contribution in https://github.com/wailsapp/wails/pull/1448 +- @sidwebworks made their first contribution in https://github.com/wailsapp/wails/pull/1492 +- @tomanagle made their first contribution in https://github.com/wailsapp/wails/pull/1489 + +## v2.0.0-beta.37 - 2022-05-26 + +### Added + +- Add `nogen` flag in wails dev command by @mondy in https://github.com/wailsapp/wails/pull/1413 +- Initial support for new native translucency in Windows Preview by @leaanthony in https://github.com/wailsapp/wails/pull/1400 + +### Fixed + +- Bugfix/incorrect bindings by @leaanthony in https://github.com/wailsapp/wails/pull/1383 +- Fix runtime.js events by @polikow in https://github.com/wailsapp/wails/pull/1369 +- Fix docs formatting by @antimatter96 in https://github.com/wailsapp/wails/pull/1372 +- Events | fixes #1388 by @lambdajack in https://github.com/wailsapp/wails/pull/1390 +- bugfix: correct typo by @tmclane in https://github.com/wailsapp/wails/pull/1391 +- Fix typo in docs by @LGiki in https://github.com/wailsapp/wails/pull/1393 +- Fix typo bindings.js to ipc.js by @rayshoo in https://github.com/wailsapp/wails/pull/1406 +- Make sure to execute the menu callbacks on a new goroutine by @stffabi in https://github.com/wailsapp/wails/pull/1403 +- Update runtime.d.ts & templates by @Yz4230 in https://github.com/wailsapp/wails/pull/1421 +- Add missing className to input in React and Preact templates by @edwardbrowncross in https://github.com/wailsapp/wails/pull/1419 + +### Changed + +- Improve multi-platform builds by @stffabi in https://github.com/wailsapp/wails/pull/1373 +- During wails dev only use reload logic if no AssetsHandler are in use by @stffabi in https://github.com/wailsapp/wails/pull/1385 +- Update events.mdx by @Junkher in https://github.com/wailsapp/wails/pull/1387 +- Add Next.js template by @LGiki in https://github.com/wailsapp/wails/pull/1394 +- Add docs on wails generate module by @TechplexEngineer in https://github.com/wailsapp/wails/pull/1414 +- Add macos custom menu EditMenu tips by @daodao97 in https://github.com/wailsapp/wails/pull/1423 + +### New Contributors + +- @polikow made their first contribution in https://github.com/wailsapp/wails/pull/1369 +- @antimatter96 made their first contribution in https://github.com/wailsapp/wails/pull/1372 +- @Junkher made their first contribution in https://github.com/wailsapp/wails/pull/1387 +- @lambdajack made their first contribution in https://github.com/wailsapp/wails/pull/1390 +- @LGiki made their first contribution in https://github.com/wailsapp/wails/pull/1393 +- @rayshoo made their first contribution in https://github.com/wailsapp/wails/pull/1406 +- @TechplexEngineer made their first contribution in https://github.com/wailsapp/wails/pull/1414 +- @mondy made their first contribution in https://github.com/wailsapp/wails/pull/1413 +- @Yz4230 made their first contribution in https://github.com/wailsapp/wails/pull/1421 +- @daodao97 made their first contribution in https://github.com/wailsapp/wails/pull/1423 +- @edwardbrowncross made their first contribution in https://github.com/wailsapp/wails/pull/1419 + +## v2.0.0-beta.36 - 2022-04-27 + +### Fixed + +- [v2] Validate devServer property to be of the correct form by [@stffabi](https://github.com/stffabi) in https://github.com/wailsapp/wails/pull/1359 +- [v2, darwin] Initialize native variables on stack to prevent segfault by [@stffabi](https://github.com/stffabi) in https://github.com/wailsapp/wails/pull/1362 +- Vue-TS template fix + +### Changed + +- Added `OnStartup` method back to default templates + +## v2.0.0-beta.35 - 2022-04-27 + +### Breaking Changes + +- When data was sent to the `EventsOn` callback, it was being sent as a slice of values, instead of optional parameters to the method. `EventsOn` now works as expected, but you will need to update your code if you currently use this. [More information](https://github.com/wailsapp/wails/issues/1324) +- The broken `bindings.js` and `bindings.d.ts` files have been replaced by a new JS/TS code generation system. More details [here](https://wails.io/docs/howdoesitwork#calling-bound-go-methods) + +### Added + +- **New Templates**: Svelte, React, Vue, Preact, Lit and Vanilla templates, both JS and TS versions. `wails init -l` for more info. +- Default templates now powered by [Vite](https://vitejs.dev). This enables lightning fast reloads when you use `wails dev`! +- Add support for external frontend development servers. See `frontend:dev:serverUrl` in the [project config](https://wails.io/docs/reference/project-config) - [@stffabi](https://github.com/stffabi) +- [Fully configurable dark mode](https://wails.io/docs/reference/options#theme) for Windows. +- Hugely improved [WailsJS generation](https://wails.io/docs/howdoesitwork#calling-bound-go-methods) (both JavaScript and TypeScript) +- Wails doctor now reports information about the wails installation - [@stffabi](https://github.com/stffabi) +- Added docs for [code-signing](https://wails.io/docs/guides/signing) and [NSIS installer](https://wails.io/docs/guides/windows-installer) - [@gardc](https://github.com/gardc) +- Add support for `-trimpath` [build flag](https://wails.io/docs/reference/cli#build) +- Add support for a default AssetsHandler - [@stffabi](https://github.com/stffabi) + +### Fixed + +- Improved mimetype detection for BOM marker and comments - [@napalu](https://github.com/napalu) +- Remove duplicate mimetype entries - [@napalu](https://github.com/napalu) +- Remove duplicate TypeScript imports in generated definition files - [@adalessa](https://github.com/adalessa) +- Add missing method declaration - [@adalessa](https://github.com/adalessa) +- Fix Linux sigabrt on start - [@napalu](https://github.com/napalu) +- Double Click event now works on elements with `data-wails-drag` attribute - [@jicg](https://github.com/jicg) +- Suppress resizing during minimize of a frameless window - [@stffabi](https://github.com/stffabi) +- Fixed TS/JS generation for Go methods with no returns +- Fixed WailsJS being generated in project directory + +### Changed + +- Website docs are now versioned +- Improved `runtime.Environment` call +- Improve the close action for Mac +- A bunch of dependabot security updates +- Improved website content - [@misitebao](https://github.com/misitebao) +- Upgrade issue template - [@misitebao](https://github.com/misitebao) +- Convert documents that don't require version management to individual pages + - [@misitebao](https://github.com/misitebao) +- Website now using Algolia search + +## v2.0.0-beta.34 - 2022-03-26 + +### Added + +- Add support for 'DomReady' callback on linux by [@napalu](https://github.com/napalu) in #1249 +- MacOS - Show extension by default by [@leaanthony](https://github.com/leaanthony) in #1228 + +### Fixed + +- [v2, nsis] Seems like / as path separator works only for some directives in a cross platform way by [@stffabi](https://github.com/stffabi) in #1227 +- import models on binding definition by [@adalessa](https://github.com/adalessa) in #123 +- Use local search on website by [@leaanthony](https://github.com/leaanthony) in #1234 +- Ensure binary resources can be served by [@napalu](https://github.com/napalu) in #1240 +- Only retry loading assets when loading from disk by [@leaanthony](https://github.com/leaanthony) in #1241 +- [v2, windows] Fix maximised start state by [@stffabi](https://github.com/stffabi) in #1243 +- Ensure Linux IsFullScreen uses GDK_WINDOW_STATE_FULLSCREEN bitmask appropriately. by [@ianmjones](https://github.com/ianmjones) in #1245 +- Fix memory leak in ExecJS for Mac by [@leaanthony](https://github.com/leaanthony) in #1230 +- Fix, or at least a workaround, for (#1232) by [@BillBuilt](https://github.com/BillBuilt) in #1247 +- [v2] Use os.Args[0] for self starting wails by [@stffabi](https://github.com/stffabi) in #1258 +- [v2, windows] Windows switch scheme: https -> http by @stefpap in #1255 +- Ensure Focus is regained by Webview2 when tabbing by [@leaanthony](https://github.com/leaanthony) in #1257 +- Try to focus window when Show() is called. by [@leaanthony](https://github.com/leaanthony) in #1212 +- Check system for user installed Linux dependencies by [@leaanthony](https://github.com/leaanthony) in #1180 + +### Changed + +- feat(website): sync documents and add content by [@misitebao](https://github.com/misitebao) in #1215 +- refactor(cli): optimize default templates by [@misitebao](https://github.com/misitebao) in #1214 +- Run watcher after initial build by [@leaanthony](https://github.com/leaanthony) in #1216 +- Feature/docs update by [@leaanthony](https://github.com/leaanthony) in #1218 +- feat(website): optimize website and sync documents by [@misitebao](https://github.com/misitebao) in #1219 +- docs: sync documents by [@misitebao](https://github.com/misitebao) in #1224 +- Default index page by [@leaanthony](https://github.com/leaanthony) in #1229 +- Build added win32 compatibility by [@fengweiqiang](https://github.com/fengweiqiang) in #1238 +- docs: sync documents by [@misitebao](https://github.com/misitebao) in #1260 + +## v2.0.0-beta.33 - 2022-03-05 + +### Added + +- NSIS Installer support for creating installers for Windows applications - Thanks [@stffabi](https://github.com/stffabi) 🎉 +- New frontend:dev:watcher command to spin out 3rd party watchers when using wails dev - Thanks [@stffabi](https://github.com/stffabi)🎉 +- Remote templates now support version tags - Thanks [@misitebao](https://github.com/misitebao) 🎉 + +### Fixed + +- A number of fixes for ARM Linux providing a huge improvement - Thanks [@ianmjones](https://github.com/ianmjones) 🎉 +- Fixed potential Nil reference when discovering the path to `index.html` +- Fixed crash when using `runtime.Log` methods in a production build +- Improvements to internal file handling meaning webworkers will now work on Windows - Thanks [@stffabi](https://github.com/stffabi)🎉 + +### Changed + +- The Webview2 bootstrapper is now run as a normal user and doesn't require admin rights +- The docs have been improved and updated +- Added troubleshooting guide diff --git a/website/i18n/vi/docusaurus-plugin-content-pages/coc.mdx b/website/i18n/vi/docusaurus-plugin-content-pages/coc.mdx new file mode 100644 index 00000000000..a027c6273df --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-pages/coc.mdx @@ -0,0 +1,83 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our community include: + +- Demonstrating empathy and kindness toward other people +- Being respectful of differing opinions, viewpoints, and experiences +- Giving and gracefully accepting constructive feedback +- Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience +- Focusing on what is best not just for us as individuals, but for the overall community + +Examples of unacceptable behavior include: + +- The use of sexualized language or imagery, and sexual attention or advances of any kind +- Trolling, insulting or derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or email address, without their explicit permission +- Other conduct which could reasonably be considered inappropriate in a professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at coc@wails.io. All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series of actions. + +**Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within the community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.1, available at [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. + +Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder][mozilla coc]. + +For answers to common questions about this code of conduct, see the FAQ at [https://www.contributor-covenant.org/faq][faq]. Translations are available at [https://www.contributor-covenant.org/translations][translations]. + +[homepage]: https://www.contributor-covenant.org +[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html +[mozilla coc]: https://github.com/mozilla/diversity +[faq]: https://www.contributor-covenant.org/faq +[translations]: https://www.contributor-covenant.org/translations diff --git a/website/i18n/vi/docusaurus-plugin-content-pages/community-guide.mdx b/website/i18n/vi/docusaurus-plugin-content-pages/community-guide.mdx new file mode 100644 index 00000000000..8bc5a3e193a --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-pages/community-guide.mdx @@ -0,0 +1,142 @@ +# Community Guide + +The number of Wails users is growing at an incredible rate, and if you're reading this, chances are you're ready to join. So... welcome! + +## Resources + +### Code of Conduct + +This [Code of Conduct](./coc) is an easy guide to develop the technical communities in which we participate. + +### Stay in the Know + +- Follow our [official Twitter account](https://twitter.com/wailsapp). + +### Get Support + +- [GitHub](https://github.com/wailsapp/wails) - If you have a bug to report or feature to request, that's what the GitHub issues are for. Please respect the rules specified in each repository's issue template. +- [Discord](https://discord.gg/JDdSxwjhGf) - A place for Wails devs to meet and chat in real time. +- [QQ Group(中文)](https://qm.qq.com/cgi-bin/qm/qr?k=PmIURne5hFGNd7QWzW5qd6FV-INEjNJv&jump_from=webapi) - A Wails group for Chinese developers to communicate, where you can get help from other developers. + +### Explore the Ecosystem + +- [The Awesome Wails Page](https://github.com/wailsapp/awesome-wails) - See what other awesome resources have been published by other awesome people. + +## Ways of contributing + +Wails is an open source, community driven project. We welcome anyone to join us in contributing to the project. This documentation is aimed at anyone wishing to get familiar with the project and the development processes. + +There are many ways to contribute to the project: + +- Developing new features +- Fixing bugs +- Testing +- Documenting features +- Writing tutorials / guides +- Helping others on the issues + discussions boards + +Guides for these have been created in their own sections. Before getting started, please introduce yourself in the [Contributing to Wails](https://github.com/wailsapp/wails/discussions/1520) discussion. + +### Developing New Features + +We are always keen to add features to Wails and expand on what the project can do. The process for adding new features are as follows: + +- Pick an enhancement ticket with the "TODO" label. It's preferable to select one from the current [Backlog](https://github.com/orgs/wailsapp/projects/1/views/1) but the choice is yours. +- Before developing, check that the ticket includes the following information: + - The purpose of the enhancement + - What is out of scope for the enhancement + - What platforms the enhancement targets (most features should be cross-platform unless there's a very specific reason) +- If the ticket does not include this information, feel free to request the information from the person who opened the ticket. Sometimes placeholder tickets are created and require more details +- Comment on the ticket stating if you wish to develop the feature +- Clone the repository and create a branch with the format `feature/_` +- New features often require documentation so please ensure you have also added or updated the documentation as part of the changes +- Once the feature is ready for testing, create a draft PR. Please ensure the PR description has the test scenarios and test cases listed with checkmarks, so that others can know what still needs to be tested. +- Once all the testing is completed, please update the status of the PR from draft and leave a message. + +:::note +There is nothing stopping you from opening a ticket and working on it yourself, but please be aware that all enhancement requests are reviewed for good fit. Not all ideas will be selected, so it's best to have discussion about the enhancement first. +::: + +:::warning +Any PRs opened without a corresponding ticket may be rejected. +::: + +### Fixing Bugs + +The process for fixing bugs are as follows: + +- Check the current [Backlog](https://github.com/orgs/wailsapp/projects/1/views/1) and select a bug to fix +- Before developing, check that the ticket includes the following information: +- The scope of the issue including platforms affected +- The steps to reproduce. Sometimes bugs are opened that are not Wails issues and the onus is on the reporter to prove that it is a Wails issue with a [minimal reproducible example](https://stackoverflow.com/help/minimal-reproducible-example) +- The output of `wails doctor` +- A test that can reproduce the bug +- If the ticket does not include this information, feel free to request the information from the person who opened the ticket. +- Comment on the ticket stating you wish to develop a fix +- Clone the repository and create a branch with the format `bugfix/_` +- Once the fix is ready for testing, create a draft PR. Please ensure the PR description has the test scenarios and test cases listed with checkmarks, so that others can know what still needs to be tested. +- Once all the testing is completed, please update the status of the PR from draft and leave a message. + +:::note +There is nothing stopping you from opening a ticket and working on it yourself, but please be aware that all bugfixes should be discussed as the approach may have unintended side effects. +::: + +:::warning +Any PRs opened without a corresponding ticket may be rejected. +::: + +### Testing + +Testing is vitally important to ensure quality in the project. There are a couple of scenarios where testing can really help the project: + +- Testing if a bug is reproducible on your local system +- Testing PRs to ensure that they work correctly + +If you chose to test if someone's bug report is reproducible on your local system, then feel free to add a comment on the ticket confirming this with the output of `wails doctor`. + +To test PRs, choose a PR to test and check if the PR description has the testing scenarios listed. If not, please ask the person who opened the PR to provide that list. Once you have determined a valid test scenario, please report your findings on the PR. + +If you ever need more clarity or help on testing, please ask a question in the [Contributing to Wails](https://github.com/wailsapp/wails/discussions/1520) discussion or on slack. + +### Documenting + +This website is also the main documentation site for the project. Sometimes this gets out of date and needs some slight adjustments. Some of the documentation isn't written to the best standards either. Developing documentation is hard and so any contribution to this is greatly appreciated. Features without documentation are unfinished so to the project, it's _as important_ as the code. + +We generally do not create tickets for updating documentation so if there is text you think should be updated or rephrased then feel free to submit a PR for that. This site is in the main repository under the `website` directory. We use [Docusaurus](https://docusaurus.io/) to create the site so there is plenty of existing documentation and tutorials around to get started. + +To set up a local documentation development environment, do the following: + +- [Install npm](https://docs.npmjs.com/cli/v8/configuring-npm/install) +- `cd website` +- `npm install` +- `npm run start` + +After it has all installed and is running, you should see the site at [`http://localhost:3000`](http://localhost:3000). Any changes made to the site text will be immediately reflected in the browser. + +#### Versioning + +We employ a versioning system where we have the "latest" documentation AKA "Next Version" which has all the changes that have occurred since the last release. We also keep the last release documentation as well as the version before that. + +There isn't usually a reason to update released documentation so we don't generally update the documents in the `versioned_docs` or `versioned_sidebars` directories. + +The "next version" docs are mainly in `website/docs` with some "version independent" documents in `src/pages`. Any updates should be made in the `website/docs` directory. + +#### Languages + +The default documents of the Wails project are English documents. We use the "crowdin" tool to translate documents in other languages and synchronize them to the website. You can [join our project](https://crowdin.com/project/wails) and submit your translations to make contributions. + +##### Add new language + +If you want to add a new language to the documentation, please follow the prompts to [fill in and submit an Issue](https://github.com/wailsapp/wails/issues/new?assignees=&labels=documentation&template=documentation.yml). After being confirmed by the maintainer, we will add the language to the "crowdin" and you will then be able to submit your translation. + +### Helping Others + +A great way to contribute to the project is to help others who are experiencing difficulty. This is normally reported as a ticket or a message on the Wails discord server. Even just clarifying the issue can really help out. Sometimes, when an issue is discussed and gets resolved, we create a guide out of it to help others who face the same issues. + +To join the Wails discord server, click [here](https://discord.gg/JDdSxwjhGf). + +:::note + +Work In Progress + +::: diff --git a/website/i18n/vi/docusaurus-plugin-content-pages/credits.mdx b/website/i18n/vi/docusaurus-plugin-content-pages/credits.mdx new file mode 100644 index 00000000000..af5cd28c530 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-pages/credits.mdx @@ -0,0 +1,268 @@ +# Credits + +- [Lea Anthony](https://github.com/leaanthony) - Project owner, lead developer +- [Stffabi](https://github.com/stffabi) - Technical lead, developer and maintainer +- [Misite Bao](https://github.com/misitebao) - Documentation wizard, Chinese translation, Windows testing, Bug finder general +- [Travis McLane](https://github.com/tmclane) - Cross-compilation work, MacOS testing +- [Lyimmi](https://github.com/Lyimmi) - All things Linux + +## Sponsors + + + +## Contributors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Lea Anthony
Lea Anthony

💻 🤔 🎨 🖋 💡 🧑‍🏫 📆 🔧 🐛 📝 🚧 📦 👀 💬 🔬 ⚠️ 📢 👀 📖
stffabi
stffabi

💻 🤔 🎨 🐛 🚧 📦 👀 💬 🔬 👀 📖 ⚠️
Travis McLane
Travis McLane

💻 🔬 📦 🤔 🐛 👀 ⚠️ 💬 📖
Misite Bao
Misite Bao

📖 🌍 🔬 🚧
Byron Chris
Byron Chris

💻 🔬 🚧 🐛 👀 ⚠️ 💬 🤔 🎨 📦 🚇
konez2k
konez2k

💻 📦 🤔
Dario Emerson
Dario Emerson

💻 🐛 🤔 ⚠️
Ian M. Jones
Ian M. Jones

💻 🐛 🤔 ⚠️ 👀 📦
marktohark
marktohark

💻
Ryan H
Ryan H

💻
Cody Bentley
Cody Bentley

💻 📦 🤔 💵
Florent
Florent

💻 🐛
Alexander Hudek
Alexander Hudek

💻 💵
Tim Kipp
Tim Kipp

💻
Altynbek Kaliakbarov
Altynbek Kaliakbarov

💻
Nikolai Zimmermann
Nikolai Zimmermann

💻
k-muchmore
k-muchmore

💻
Snider
Snider

💻 🤔 📖 💵
Albert Sun
Albert Sun

💻 ⚠️
Ariel
Ariel

💻 🐛
Ilgıt Yıldırım
Ilgıt Yıldırım

💻 🐛 💵
Toyam Cox
Toyam Cox

💻 📦 🐛
hi019
hi019

💻 🐛
Arthur Wiebe
Arthur Wiebe

💻 🐛
Balakrishna Prasad Ganne
Balakrishna Prasad Ganne

💻
BillBuilt
BillBuilt

💻 📦 🤔 💬 💵
Eng Zer Jun
Eng Zer Jun

🚧 💻
LGiki
LGiki

📖
Lontten
Lontten

📖
Lukas Crepaz
Lukas Crepaz

💻 🐛
Marcus Crane
Marcus Crane

🐛 📖 💵
Qais Patankar
Qais Patankar

📖
Wakeful-Cloud
Wakeful-Cloud

💻 🐛
Zámbó, Levente
Zámbó, Levente

💻 📦 🐛 ⚠️
Ironpark
Ironpark

💻 🤔
mondy
mondy

💻 📖
Benjamin Ryan
Benjamin Ryan

🐛
fallendusk
fallendusk

📦 💻
Mat Ryer
Mat Ryer

💻 🤔 🐛
Abtin
Abtin

💻 🐛
Adrian Lanzafame
Adrian Lanzafame

📦 💻
Aleksey Polyakov
Aleksey Polyakov

🐛 💻
Alexander Matviychuk
Alexander Matviychuk

💻 📦
AlienRecall
AlienRecall

💻 📦
Aman
Aman

📖
Amaury Tobias Quiroz
Amaury Tobias Quiroz

💻 🐛
Andreas Wenk
Andreas Wenk

📖
Antonio Stanković
Antonio Stanković

💻 📦
Arpit Jain
Arpit Jain

📖
Austin Schey
Austin Schey

💻 🐛
Benjamin Thomas
Benjamin Thomas

💻 📦 🤔
Bertram Truong
Bertram Truong

💻 🐛
Blake Bourque
Blake Bourque

📖
Denis
Denis

📖
diogox
diogox

💻 📦
Dmitry Gomzyakov
Dmitry Gomzyakov

💻 📦
Edward Browncross
Edward Browncross

💻
Elie Grenon
Elie Grenon

💻
Florian Didron
Florian Didron

💻 🐛 🤔 ⚠️ 👀 📦
GargantuaX
GargantuaX

💵
Igor Minin
Igor Minin

💻 🐛
Jae-Sung Lee
Jae-Sung Lee

💻 🤔
Jarek
Jarek

💻 📦
Junker
Junker

📖
Kris Raney
Kris Raney

💻 🐛
Luken
Luken

📖
Mark Stenglein
Mark Stenglein

💻 🐛
buddyabaddon
buddyabaddon

💻
MikeSchaap
MikeSchaap

💻 🐛
NYSSEN Michaël
NYSSEN Michaël

💻 🐛
Nan0
Nan0

💻 🤔 ⚠️ 👀
oskar
oskar

📖
Pierre Joye
Pierre Joye

💻 🐛 🤔 ⚠️
Reuben Thomas-Davis
Reuben Thomas-Davis

💻 🐛
Robin
Robin

💻 🐛
Sebastian Bauer
Sebastian Bauer

💻 🤔 ⚠️ 👀 💬
Sidharth Rathi
Sidharth Rathi

📖 🐛
Sithembiso Khumalo
Sithembiso Khumalo

💻 🐛
Soheib El-Harrache
Soheib El-Harrache

💻 🐛 💵
Sophie Au
Sophie Au

💻 🐛
Stefanos Papadakis
Stefanos Papadakis

💻 🐛
Steve Chung
Steve Chung

💻 🐛
Timm Ortloff
Timm Ortloff

📖
Tom
Tom

💻
Valentin Trinqué
Valentin Trinqué

💻 🐛
mattn
mattn

💻 🐛
bearsh
bearsh

💻 🤔 📖
chenxiao
chenxiao

💻 🤔 📖
fengweiqiang
fengweiqiang

💻 📦
flin7
flin7

📖
fred21O4
fred21O4

📖
gardc
gardc

📖
rayshoo
rayshoo

📖
Ishiyama Yuzuki
Ishiyama Yuzuki

💻 🐛
佰阅
佰阅

💻
刀刀
刀刀

📖 🐛
归位
归位

💻 🐛
skamensky
skamensky

💻 🤔 📖
dependabot[bot]
dependabot[bot]

💻 🚧
Damian Sieradzki
Damian Sieradzki

💵
John Dorman
John Dorman

💵
Ian Sinnott
Ian Sinnott

💵
Arden Shackelford
Arden Shackelford

💵
Bironou
Bironou

💵
CharlieGo_
CharlieGo_

💵
overnet
overnet

💵
jugglingjsons
jugglingjsons

💵
Selvin Ortiz
Selvin Ortiz

💵
ZanderCodes
ZanderCodes

💵
Michael Voronov
Michael Voronov

💵
letheanVPN
letheanVPN

💵
Tai Groot
Tai Groot

💵
easy-web-it
easy-web-it

💵
Michael Olson
Michael Olson

💵
EdenNetwork Italia
EdenNetwork Italia

💵
ondoki
ondoki

💵
QuEST Rail LLC
QuEST Rail LLC

💵
Gilgameš
Gilgameš

💵
Bernt-Johan Bergshaven
Bernt-Johan Bergshaven

💵
Liam Bigelow
Liam Bigelow

💵
Nick Arellano
Nick Arellano

💵
Frank Chiarulli Jr.
Frank Chiarulli Jr.

💵
Tyler
Tyler

💵
Trea Hauet
Trea Hauet

💵
Kent 'picat' Gruber
Kent 'picat' Gruber

💵
tc-hib
tc-hib

💵
Antonio
Antonio

📖
MyNameIsAres
MyNameIsAres

📖
Maicarons J
Maicarons J

📖
kiddov
kiddov

📖 💵 ⚠️ 🤔
Nicolas Coutin
Nicolas Coutin

💵
Parvin Eyvazov
Parvin Eyvazov

📖
github-actions[bot]
github-actions[bot]

💻
Oleg Gulevskyy
Oleg Gulevskyy

💻 📖 🚧 📦
Richard Guay
Richard Guay

📖
Adam Tenderholt
Adam Tenderholt

💻
JulioDRF
JulioDRF

💻
Scott Opell
Scott Opell

💻
Vadim Shchepotev
Vadim Shchepotev

💻
Will Andrews
Will Andrews

💻
Gwyn
Gwyn

💻 👀 💬 🔬
希嘉嘉
希嘉嘉

💻
ALMAS
ALMAS

💻
Alex
Alex

💻
Arif Ali
Arif Ali

💻
Artur Siarohau
Artur Siarohau

💻
Binyamin Aron Green
Binyamin Aron Green

💻
Brian Dwyer
Brian Dwyer

💻
Christian Kilb
Christian Kilb

💻
David Florness
David Florness

📖
David Walton
David Walton

💻
Debdut Karmakar
Debdut Karmakar

💻
Dieter Zhu
Dieter Zhu

💻
Fredrik Holmqvist
Fredrik Holmqvist

💻
Giovanni Palma
Giovanni Palma

💻
Hao
Hao

💻
Igor Sementsov
Igor Sementsov

💻
Johannes Haseitl
Johannes Haseitl

💻
Joshua Hull
Joshua Hull

💻
Joshua Mangiola
Joshua Mangiola

📖
Kevin MacMartin
Kevin MacMartin

💻
Liang Li
Liang Li

💻
Marvin Collins Hosea
Marvin Collins Hosea

💻
Matt Holt
Matt Holt

💻
Niklas
Niklas

💻
Andy Hsu
Andy Hsu

💻
NullCode
NullCode

💻
Oussama Sethoum
Oussama Sethoum

💻
ParkourLiu
ParkourLiu

💻
Rachel Chen
Rachel Chen

💻
Rob Nice
Rob Nice

💻
Ryo TAGAMI
Ryo TAGAMI

💻
Sam Hennessy
Sam Hennessy

💻
Sean
Sean

💻
Sean Gosiaco
Sean Gosiaco

💻
Eric P Sheets
Eric P Sheets

💻
Supian M
Supian M

💻
Watson-Sei
Watson-Sei

💻 📖
Yuki Shindo
Yuki Shindo

💻
cuigege
cuigege

💻
cybertramp
cybertramp

💻
hiroki yagi
hiroki yagi

💻
imgbot[bot]
imgbot[bot]

💻
juju
juju

💻
Michael Eatherly
Michael Eatherly

💻
tk
tk

💻
allcontributors[bot]
allcontributors[bot]

📖
wander
wander

📖
+ + + +## Special Mentions + +- [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 possible. +- [Tad Vizbaras](https://github.com/tadvi) - His winc project was the first step down the path to a pure Go Wails. +- [Mat Ryer](https://github.com/matryer) - For advice, support and bants. +- [Byron Chris](https://github.com/bh90210) - For his long term contributions to this project. +- [Dustin Krysak](https://wiki.ubuntu.com/bashfulrobot) - His support and feedback has been invaluable. +- [Justen Walker](https://github.com/justenwalker/) - For helping wrangle COM issues which got v2 over the line. +- [Wang, Chi](https://github.com/patr0nus/) - The DeskGap project was a huge influence on the direction of Wails v2. +- [Serge Zaitsev](https://github.com/zserge) - Whilst Wails does not use the Webview project, it is still a source of inspiration. diff --git a/website/i18n/vi/docusaurus-plugin-content-pages/faq.mdx b/website/i18n/vi/docusaurus-plugin-content-pages/faq.mdx new file mode 100644 index 00000000000..98b68d55794 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-pages/faq.mdx @@ -0,0 +1,9 @@ +# FAQ + +## What's with the name? + +When I saw WebView, I thought "What I really want is tooling around building a WebView app, a bit like Rails is to Ruby". So initially it was a play on words (**W**ebview on R**ails**). It just so happened to also be a homophone of the English name for the [Country](https://en.wikipedia.org/wiki/Wales) I am from. So it stuck. + +## Is this an alternative to Electron? + +Depends on your requirements. It's designed to make it easy for Go programmers to make lightweight desktop applications or add a frontend to their existing applications. Wails v2 does offer native elements such as menus and dialogs, so it is becoming a lightweight electron alternative. diff --git a/website/i18n/vi/docusaurus-plugin-content-pages/markdown-page.md b/website/i18n/vi/docusaurus-plugin-content-pages/markdown-page.md new file mode 100644 index 00000000000..9756c5b6685 --- /dev/null +++ b/website/i18n/vi/docusaurus-plugin-content-pages/markdown-page.md @@ -0,0 +1,7 @@ +--- +title: Markdown page example +--- + +# Markdown page example + +You don't need React to write simple standalone pages. diff --git a/website/i18n/vi/docusaurus-theme-classic/footer.json b/website/i18n/vi/docusaurus-theme-classic/footer.json new file mode 100644 index 00000000000..20f38e25af4 --- /dev/null +++ b/website/i18n/vi/docusaurus-theme-classic/footer.json @@ -0,0 +1,62 @@ +{ + "link.title.Docs": { + "message": "Tài Liệu", + "description": "The title of the footer links column with title=Docs in the footer" + }, + "link.title.Community": { + "message": "Cộng Đồng", + "description": "The title of the footer links column with title=Community in the footer" + }, + "link.title.More": { + "message": "Bổ Xung", + "description": "The title of the footer links column with title=More in the footer" + }, + "link.item.label.Introduction": { + "message": "Lời Giới Thiệu", + "description": "The label of footer link with label=Introduction linking to /docs/introduction" + }, + "link.item.label.Getting Started": { + "message": "Hướng Dẫn Nhanh", + "description": "The label of footer link with label=Getting Started linking to /docs/gettingstarted/installation" + }, + "link.item.label.Changelog": { + "message": "Nhật Ký Phiên Bản", + "description": "The label of footer link with label=Changelog linking to /changelog" + }, + "link.item.label.Github": { + "message": "Github", + "description": "The label of footer link with label=Github linking to https://github.com/wailsapp/wails" + }, + "link.item.label.Twitter": { + "message": "X", + "description": "The label of footer link with label=Twitter linking to https://twitter.com/wailsapp" + }, + "link.item.label.Slack": { + "message": "Slack", + "description": "The label of footer link with label=Slack linking to https://gophers.slack.com/messages/CJ4P9F7MZ/" + }, + "link.item.label.Slack invite": { + "message": "Lời Mời Slack", + "description": "The label of footer link with label=Slack invite linking to https://invite.slack.golangbridge.org/" + }, + "link.item.label.Blog": { + "message": "Blog", + "description": "The label of footer link with label=Blog linking to /blog" + }, + "copyright": { + "message": "Bản Quyền Thuộc Về © 2022 Lea Anthony", + "description": "The footer copyright" + }, + "link.item.label.Awesome": { + "message": "Awesome", + "description": "The label of footer link with label=Awesome linking to https://github.com/wailsapp/awesome-wails" + }, + "link.item.label.Discord": { + "message": "Discord", + "description": "The label of footer link with label=Discord linking to https://discord.gg/JDdSxwjhGf" + }, + "logo.alt": { + "message": "Wails Logo", + "description": "The alt text of footer logo" + } +} diff --git a/website/i18n/vi/docusaurus-theme-classic/navbar.json b/website/i18n/vi/docusaurus-theme-classic/navbar.json new file mode 100644 index 00000000000..bfed862b88b --- /dev/null +++ b/website/i18n/vi/docusaurus-theme-classic/navbar.json @@ -0,0 +1,46 @@ +{ + "item.label.Sponsor": { + "message": "Tài Trợ", + "description": "Navbar item with label Sponsor" + }, + "item.label.Docs": { + "message": "Tài Liệu", + "description": "Navbar item with label Docs" + }, + "item.label.Blog": { + "message": "Blog", + "description": "Navbar item with label Blog" + }, + "item.label.GitHub": { + "message": "GitHub", + "description": "Navbar item with label GitHub" + }, + "item.label.About": { + "message": "Thông Tin", + "description": "Navbar item with label About" + }, + "item.label.FAQ": { + "message": "Câu Hỏi Thường Gặp", + "description": "Navbar item with label FAQ" + }, + "item.label.Changelog": { + "message": "Nhật Ký Phiên Bản", + "description": "Navbar item with label Changelog" + }, + "item.label.Community Guide": { + "message": "Hướng Dẫn của Cộng Đồng", + "description": "Navbar item with label Community Guide" + }, + "item.label.Credits": { + "message": "Tín Nhiệm", + "description": "Navbar item with label Credits" + }, + "item.label.Code of Conduct": { + "message": "Quy Tắc Ứng Xử", + "description": "Navbar item with label Code of Conduct" + }, + "logo.alt": { + "message": "Wails Logo", + "description": "The alt text of navbar logo" + } +} diff --git a/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/community/templates.mdx b/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/community/templates.mdx index b2dd2b372ad..fb487e87c79 100644 --- a/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/community/templates.mdx +++ b/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/community/templates.mdx @@ -60,6 +60,10 @@ sidebar_position: 1 - [wails-elm-template](https://github.com/benjamin-thomas/wails-elm-template) - 使用函数式编程和 **快速** 的热重载设置开发您的 GUI 应用程序 :tada: :rocket: - [wails-template-elm-tailwind](https://github.com/rnice01/wails-template-elm-tailwind) - 结合 Elm + Tailwind CSS + Wails 的力量 :muscle: ! 支持热重载。 +## 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 + ## 纯 JavaScript (Vanilla) - [wails-pure-js-template](https://github.com/KiddoV/wails-pure-js-template) - 一个只有基本 JavaScript、HTML 和 CSS 的模板 diff --git a/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/guides/crossplatform-build.mdx b/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/guides/crossplatform-build.mdx new file mode 100644 index 00000000000..fd81a974d04 --- /dev/null +++ b/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/guides/crossplatform-build.mdx @@ -0,0 +1,66 @@ +# Crossplatform build with 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. + +An action that facilitates building a Wails app is available at: +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: +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: + +```yaml +name: Wails build + +on: + push: + tags: + # Match any new tag + - '*' + +env: + # Necessary for most environments as build failure can occur due to OOM issues + NODE_OPTIONS: "--max-old-space-size=4096" + +jobs: + build: + strategy: + # Failure in one platform build won't impact the others + fail-fast: false + matrix: + build: + - name: 'App' + platform: 'linux/amd64' + os: 'ubuntu-latest' + - name: 'App' + platform: 'windows/amd64' + os: 'windows-latest' + - name: 'App' + platform: 'darwin/universal' + os: 'macos-latest' + + runs-on: ${{ matrix.build.os }} + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + submodules: recursive + + - name: Build wails + uses: dAppServer/wails-build-action@v2.2 + id: build + with: + build-name: ${{ matrix.build.name }} + build-platform: ${{ matrix.build.platform }} + package: false + go-version: '1.20' +``` + +This example offers opportunities for various enhancements, including: + +- Caching dependencies +- Code signing +- Uploading to platforms like S3, Supbase, etc. +- Injecting secrets as environment variables +- Utilizing environment variables as build variables (such as version variable extracted from the current Git tag) diff --git a/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/guides/file-association.mdx b/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/guides/file-association.mdx new file mode 100644 index 00000000000..b10c66bb373 --- /dev/null +++ b/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/guides/file-association.mdx @@ -0,0 +1,199 @@ +# File Association + +File association feature allows you to associate specific file types with your app so that when users open those files, +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: + +To set up file association, you need to modify your application's wails.json file. +In "info" section add a "fileAssociations" section specifying the file types your app should be associated with. + +For example: + +```json +{ + "info": { + "fileAssociations": [ + { + "ext": "wails", + "name": "Wails", + "description": "Wails Application File", + "iconName": "wailsFileIcon", + "role": "Editor" + }, + { + "ext": "jpg", + "name": "JPEG", + "description": "Image File", + "iconName": "jpegFileIcon", + "role": "Editor" + } + ] + } +} +``` + +| Property | Description | +| :---------- | :------------------------------------------------------------------------------------------------------------------------------------------------- | +| ext | The extension (minus the leading period). e.g. png | +| name | The name. e.g. PNG File | +| 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 | +| description | Windows-only. The description. It is displayed on the `Type` column on Windows Explorer. | +| role | macOS-only. The app’s role with respect to the type. Corresponds to CFBundleTypeRole. | + +## Platform Specifics: + +### 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: + +```go title="main.go" +func main() { + // Create application with options + err := wails.Run(&options.App{ + Title: "wails-open-file", + Width: 1024, + Height: 768, + AssetServer: &assetserver.Options{ + Assets: assets, + }, + BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1}, + Mac: &mac.Options{ + OnFileOpen: func(filePaths []string) { println(filestring) }, + }, + Bind: []interface{}{ + app, + }, + }) + + if err != nil { + println("Error:", err.Error()) + } +} +``` + +### Windows + +On Windows file association is supported only with NSIS installer. During installation, the installer will create a +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" +func main() { + argsWithoutProg := os.Args[1:] + + if len(argsWithoutProg) != 0 { + println("launchArgs", argsWithoutProg) + } +} +``` + +### Linux + +Currently, Wails doesn't support bundling for Linux. So, you need to create file associations manually. +For example if you distribute your app as a .deb package, you can create file associations by adding required files in you bundle. +You can use [nfpm](https://nfpm.goreleaser.com/) to create .deb package for your app. + +1. Create a .desktop file for your app and specify file associations there. Example: + +```ini +[Desktop Entry] +Categories=Office +Exec=/usr/bin/wails-open-file %u +Icon=wails-open-file.png +Name=wails-open-file +Terminal=false +Type=Application +MimeType=application/x-wails;application/x-test +``` + +2. Create mime types file. Example: + +```xml + + + + Wails Application File + + + +``` + +3. Create icons for your file types. SVG icons are recommended. +4. Prepare postInstall/postRemove scripts for your package. Example: + +```sh +# reload mime types to register file associations +update-mime-database /usr/share/mime +# reload desktop database to load app in list of available +update-desktop-database /usr/share/applications +# update icons +update-icon-caches /usr/share/icons/* +``` + +5. Configure nfpm to use your scripts and files. Example: + +```yaml +name: "wails-open-file" +arch: "arm64" +platform: "linux" +version: "1.0.0" +section: "default" +priority: "extra" +maintainer: "FooBarCorp " +description: "Sample Package" +vendor: "FooBarCorp" +homepage: "http://example.com" +license: "MIT" +contents: +- src: ../bin/wails-open-file + dst: /usr/bin/wails-open-file +- src: ./main.desktop + dst: /usr/share/applications/wails-open-file.desktop +- src: ./application-wails-mime.xml + dst: /usr/share/mime/packages/application-x-wails.xml +- src: ./application-test-mime.xml + dst: /usr/share/mime/packages/application-x-test.xml +- src: ../appicon.svg + dst: /usr/share/icons/hicolor/scalable/apps/wails-open-file.svg +- src: ../wailsFileIcon.svg + dst: /usr/share/icons/hicolor/scalable/mimetypes/application-x-wails.svg +- src: ../testFileIcon.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 +- src: ../appicon.svg + dst: /usr/share/icons/Yaru/scalable/apps/wails-open-file.svg +- src: ../wailsFileIcon.svg + dst: /usr/share/icons/Yaru/scalable/mimetypes/application-x-wails.svg +- src: ../testFileIcon.svg + dst: /usr/share/icons/Yaru/scalable/mimetypes/application-x-test.svg +scripts: + postinstall: ./postInstall.sh + postremove: ./postRemove.sh +``` + +6. Build your .deb package using nfpm: + +```sh +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, + 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" +func main() { + argsWithoutProg := os.Args[1:] + + if len(argsWithoutProg) != 0 { + println("launchArgs", argsWithoutProg) + } +} +``` + +## Limitations: + +On Windows and Linux when associated file is opened, new instance of your app is launched. +Currently, Wails doesn't support opening files in already running app. There is plugin for single instance support for v3 in development. diff --git a/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/guides/manual-builds.mdx b/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/guides/manual-builds.mdx index 72028ea6b12..83de0fdfd8f 100644 --- a/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/guides/manual-builds.mdx +++ b/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/guides/manual-builds.mdx @@ -80,7 +80,6 @@ Wails CLI 为项目做了很多繁重的工作,但有时需要手动构建项 #### 手动步骤 - 对于 dev 构建,最少的命令是:`go build -tags dev -gcflags "all=-N -l"` - - 在macos上需要加上环境变量 `export CGO_LDFLAGS="-framework UniformTypeIdentifiers" && go build -tags dev -gcflags "all=-N -l"` - 对于生产构建,最少的命令是:`go build -tags desktop,production -ldflags "-w -s -H windowsgui"` - 确保在与 `.syso` 文件相同的目录中进行编译 diff --git a/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/guides/troubleshooting.mdx b/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/guides/troubleshooting.mdx index 0bf892edb88..3f12baf7d60 100644 --- a/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/guides/troubleshooting.mdx +++ b/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/guides/troubleshooting.mdx @@ -159,6 +159,28 @@ In file included from /Library/Developer/CommandLineTools/SDKs/MacOSX12.1.sdk/Sy 来源:https://github.com/wailsapp/wails/issues/1806 和 https://github.com/wailsapp/wails/issues/1140#issuecomment-1290446496 +## My application won't compile on Mac + +如果您遇到这样的错误: + +```shell +l1@m2 GoEasyDesigner % go build -tags dev -gcflags "all=-N -l" +/Users/l1/sdk/go1.20.5/pkg/tool/darwin_arm64/link: running clang failed: exit status 1 +Undefined symbols for architecture arm64: + "_OBJC_CLASS_$_UTType", referenced from: + objc-class-ref in 000016.o +ld: symbol(s) not found for architecture arm64 +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: + +```shell +export CGO_LDFLAGS="-framework UniformTypeIdentifiers" && go build -tags dev -gcflags "all=-N -l" +``` + +Sources: https://github.com/wailsapp/wails/pull/2925#issuecomment-1726828562 + + -- ## 无法启动服务:主机版本“x.x.x”与二进制版本“x.x.x”不匹配 @@ -185,4 +207,162 @@ This is due to the default background of the webview being white. If you want to WebviewIsTransparent: true, }, }) -``` \ No newline at end of file +``` + +## I get a "Microsoft Edge can't read or write to its data directory" error when running my program as admin on Windows + +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. + +When a Windows machine has two local accounts: + +- Alice, an admin +- Bob, a regular user + +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. + +Wails instructs WebView2 to store user data at the specified `WebviewUserDataPath`. It defaults to `%APPDATA%\[BinaryName.exe]`. + +Because the application is running under Alice's account, `%APPDATA%\[BinaryName.exe]` resolves to `C:\Users\Alice\AppData\Roaming\[BinaryName.exe]`. + +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. + +Possible solution #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: + +```go +//go:build windows + +package sample + +import ( + "golang.org/x/sys/windows" + "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. +func RunAs(path string) error { + verbPtr, _ := syscall.UTF16PtrFromString("runas") + exePtr, _ := syscall.UTF16PtrFromString(path) + cwdPtr, _ := syscall.UTF16PtrFromString("") + argPtr, _ := syscall.UTF16PtrFromString("") + + var showCmd int32 = 1 //SW_NORMAL + + err := windows.ShellExecute(0, verbPtr, exePtr, argPtr, cwdPtr, showCmd) + if err != nil { + return err + } + return nil +} +``` + +Possible solution #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: + +```go +package main + +import ( + "embed" + "os" + "runtime" + + "github.com/fourcorelabs/wintoken" + "github.com/hectane/go-acl" + "github.com/wailsapp/wails/v2" + "github.com/wailsapp/wails/v2/pkg/options" + "github.com/wailsapp/wails/v2/pkg/options/assetserver" + "github.com/wailsapp/wails/v2/pkg/options/windows" +) + +//go:embed all:frontend/dist +var assets embed.FS + +const ( + fixedTokenKey = "SAMPLE_RANDOM_KEY" + fixedTokenVal = "with-fixed-token" + webviewDir = "C:\\ProgramData\\Sample" +) + +func runWithFixedToken() { + println("Re-launching self") + token, err := wintoken.OpenProcessToken(0, wintoken.TokenPrimary) //pass 0 for own process + if err != nil { + panic(err) + } + defer token.Close() + + token.EnableTokenPrivileges([]string{ + "SeBackupPrivilege", + "SeDebugPrivilege", + "SeRestorePrivilege", + }) + + cmd := exec.Command(os.Args[0]) + cmd.Args = os.Args + cmd.Env = os.Environ() + cmd.Env = append(cmd.Env, fmt.Sprintf("%v=%v", fixedTokenKey, fixedTokenVal)) + cmd.Stdin = os.Stdin + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + cmd.SysProcAttr = &syscall.SysProcAttr{Token: syscall.Token(token.Token())} + if err := cmd.Run(); err != nil { + println("Error after launching self:", err) + os.Exit(1) + } + println("Clean self launch :)") + os.Exit(0) +} + +func main() { + if runtime.GOOS == "windows" && os.Getenv(fixedTokenKey) != fixedTokenVal { + runWithFixedToken() + } + + println("Setting data dir to", webviewDir) + if err := os.MkdirAll(webviewDir, os.ModePerm); err != nil { + println("Failed creating dir:", err) + } + if err := acl.Chmod(webviewDir, 0777); err != nil { + println("Failed setting ACL on dir:", err) + } + + app := NewApp() + + err := wails.Run(&options.App{ + Title: "sample-data-dir", + Width: 1024, + Height: 768, + AssetServer: &assetserver.Options{ + Assets: assets, + }, + Bind: []interface{}{ + app, + }, + Windows: &windows.Options{ + WebviewUserDataPath: webviewDir, + }, + }) + + if err != nil { + println("Error:", err.Error()) + } +} +``` + +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. + +Possible future solution #3: [run WebView2 using an in-memory mode if implemented](https://github.com/MicrosoftEdge/WebView2Feedback/issues/3637#issuecomment-1728300982). + +## WebView2 installation succeeded, but the wails doctor command shows that it is not installed + +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/). + +Source: https://github.com/wailsapp/wails/issues/2917 + +## 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). + diff --git a/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/reference/cli.mdx b/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/reference/cli.mdx index b157a1bb5be..d28d2732c30 100644 --- a/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/reference/cli.mdx +++ b/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/reference/cli.mdx @@ -49,35 +49,35 @@ Wails CLI 有许多用于管理项目的命令。 所有命令都以此方式运 `wails build` 用于将您的项目编译为生产可用的二进制文件。 -| 标志 | 描述 | 默认 | -|:--------------- |:------------------------------------------------------------------------------------------------------------- |:---------------------------------------------------------------------------------------------------------- | -| -clean | 清理 `build/bin` 目录 | | -| -compiler "编译器" | 使用不同的 go 编译器来构建,例如 go1.15beta1 | go | -| -debug | Retains debug information in the application and shows the debug console. 允许在应用程序窗口中使用 devtools | | -| -devtools | Allows the use of the devtools in the application window in production (when -debug is not used) | | -| -dryrun | 打印构建命令但不执行它 | | -| -f | 强制构建应用 | | -| -garbleargs | 传递给 garble 的参数 | `-literals -tiny -seed=random` | -| -ldflags "标志" | 传递给编译器的额外 ldflags | | -| -m | 编译前跳过 mod tidy | | -| -nopackage | 不打包应用程序 | | -| -nocolour | 在输出中禁用颜色 | | -| -nosyncgomod | 不同步 go.mod 中的 Wails 版本 | | -| -nsis | 为 Windows 生成 NSIS 安装程序 | | -| -o 文件名 | 输出文件名 | | -| -obfuscated | 使用 [garble](https://github.com/burrowers/garble) 混淆应用程序 | | -| -platform | 为指定的 [平台](../reference/cli#平台)(逗号分割)构建,例如: `windows/arm64`。 `windows/arm64`。 注意,如果不给出架构,则使用 `runtime.GOARCH`。 | 如果给定环境变量 platform = `GOOS` 否则等于 `runtime.GOOS`。
如果给定环境变量 arch = `GOARCH` 否则等于 `runtime.GOARCH`. | -| -race | 使用 Go 的竞态检测器构建 | | -| -s | 跳过前端构建 | | -| -skipbindings | 跳过 bindings 生成 | | -| -tags "额外标签" | 构建标签以传递给 Go 编译器。 必须引用。 空格或逗号(但不能同时使用)分隔 | | -| -trimpath | 从生成的可执行文件中删除所有文件系统路径。 | | -| -u | 更新项目的 `go.mod` 以使用与 CLI 相同版本的 Wails | | -| -upx | 使用 “upx” 压缩最终二进制文件 | | -| -upxflags | 传递给 upx 的标志 | | -| -v int | 详细级别 (0 - silent, 1 - default, 2 - verbose) | 1 | -| -webview2 | WebView2 安装策略:download,embed,browser,error. | download | -| -windowsconsole | 保留Windows构建控制台窗口 | | +| 标志 | 描述 | 默认 | +|:--------------- |:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |:---------------------------------------------------------------------------------------------------------- | +| -clean | 清理 `build/bin` 目录 | | +| -compiler "编译器" | 使用不同的 go 编译器来构建,例如 go1.15beta1 | go | +| -debug | Retains debug information in the application and shows the debug console. 允许在应用程序窗口中使用 devtools | | +| -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. | | +| -dryrun | 打印构建命令但不执行它 | | +| -f | 强制构建应用 | | +| -garbleargs | 传递给 garble 的参数 | `-literals -tiny -seed=random` | +| -ldflags "标志" | 传递给编译器的额外 ldflags | | +| -m | 编译前跳过 mod tidy | | +| -nopackage | 不打包应用程序 | | +| -nocolour | 在输出中禁用颜色 | | +| -nosyncgomod | 不同步 go.mod 中的 Wails 版本 | | +| -nsis | 为 Windows 生成 NSIS 安装程序 | | +| -o 文件名 | 输出文件名 | | +| -obfuscated | 使用 [garble](https://github.com/burrowers/garble) 混淆应用程序 | | +| -platform | 为指定的 [平台](../reference/cli#平台)(逗号分割)构建,例如: `windows/arm64`。 `windows/arm64`。 注意,如果不给出架构,则使用 `runtime.GOARCH`。 | 如果给定环境变量 platform = `GOOS` 否则等于 `runtime.GOOS`。
如果给定环境变量 arch = `GOARCH` 否则等于 `runtime.GOARCH`. | +| -race | 使用 Go 的竞态检测器构建 | | +| -s | 跳过前端构建 | | +| -skipbindings | 跳过 bindings 生成 | | +| -tags "额外标签" | 构建标签以传递给 Go 编译器。 必须引用。 空格或逗号(但不能同时使用)分隔 | | +| -trimpath | 从生成的可执行文件中删除所有文件系统路径。 | | +| -u | 更新项目的 `go.mod` 以使用与 CLI 相同版本的 Wails | | +| -upx | 使用 “upx” 压缩最终二进制文件 | | +| -upxflags | 传递给 upx 的标志 | | +| -v int | 详细级别 (0 - silent, 1 - default, 2 - verbose) | 1 | +| -webview2 | WebView2 安装策略:download,embed,browser,error. | download | +| -windowsconsole | 保留Windows构建控制台窗口 | | 有关 `webview2` 标志的详细描述,请参阅 [Windows 系统指南](../guides/windows)。 @@ -166,8 +166,8 @@ Your system is ready for Wails development! - 启动一个网络服务器 `http://localhost:34115`,通过 http 为您的应用程序(不仅仅是前端)提供服务。 这允许您使用您喜欢的浏览器开发扩展 - 所有应用程序资源都从磁盘加载。 如果它们被更改,应用程序将自动重新加载(而不是重新构建)。 所有连接的浏览器也将重新加载 - 生成的 JS 模块提供以下内容: - - 带有自动生成的 JSDoc 的 Go 方法的 JavaScript 包装器,提供代码提示 - - 您的 Go 结构的 TypeScript 版本,可以构建并传递给您的 go 方法 +- 带有自动生成的 JSDoc 的 Go 方法的 JavaScript 包装器,提供代码提示 +- 您的 Go 结构的 TypeScript 版本,可以构建并传递给您的 go 方法 - 生成第二个 JS 模块,为运行时提供包装器 + TS 声明 - 在 macOS 上,它将应用程序捆绑到一个 `.app` 文件中并运行它。 开发模式将使用 `build/darwin/Info.dev.plist` 。 diff --git a/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/reference/options.mdx b/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/reference/options.mdx index 0c43e683811..d6c559d8d69 100644 --- a/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/reference/options.mdx +++ b/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/reference/options.mdx @@ -366,7 +366,7 @@ func (b *App) beforeClose(ctx context.Context) (prevent bool) { EnableDefaultContextMenu enables the browser's default context-menu in production. -By default, the browser's default context-menu is only available in development and in a `-debug` or `-devtools` [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. +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. 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 : @@ -593,6 +593,12 @@ ResizeDebounceMS 是调整窗口大小时去抖动 webview2 重绘的时间量 名称:WebviewGpuIsDisabled
类型:`bool` +#### EnableSwipeGestures + +Setting this to `true` will enable swipe gestures for the webview. + +Name: EnableSwipeGestures
Type: `bool` + ### Mac 这定义了 [Mac 特定的选项](#mac)。 @@ -688,6 +694,42 @@ Mac: &mac.Options{ 名称:WindowIsTranslucent
类型:`bool` +#### Preferences + +The Preferences struct provides the ability to configure the Webview preferences. + +Name: Preferences
Type: [`*mac.Preferences`](#preferences-struct) + +##### Preferences struct + +You can specify the webview preferences. + +```go +type Preferences struct { + TabFocusesLinks u.Bool + TextInteractionEnabled u.Bool + FullscreenEnabled u.Bool +} +``` + +| 设置 | 描述 | +| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 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) | +| 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) | +| 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) | + +示例: + +```go +Mac: &mac.Options{ + Preferences: &mac.Preferences{ + TabFocusesLinks: mac.Enabled, + TextInteractionEnabled: mac.Disabled, + FullscreenEnabled: mac.Enabled, + } +} +``` + #### 关于 此配置允许您在“AppMenu”角色创建的应用程序菜单中设置“关于”菜单项的标题、消息和图标。 diff --git a/website/i18n/zh-Hans/docusaurus-plugin-content-pages/changelog.mdx b/website/i18n/zh-Hans/docusaurus-plugin-content-pages/changelog.mdx index 57ff12d08d3..4b2142d8c3c 100644 --- a/website/i18n/zh-Hans/docusaurus-plugin-content-pages/changelog.mdx +++ b/website/i18n/zh-Hans/docusaurus-plugin-content-pages/changelog.mdx @@ -13,6 +13,28 @@ ## [即将发布] +### 新增 + +- Added support for enabling/disabling swipe gestures for Windows WebView2. Added by @leaanthony in [PR](https://github.com/wailsapp/wails/pull/2878) +- When building with `-devtools` flag, CMD/CTRL+SHIFT+F12 can be used to open the devtools. Added by @leaanthony in [PR](https://github.com/wailsapp/wails/pull/2915) – Added file association support for macOS and Windows. Added by @APshenkin in [PR](https://github.com/wailsapp/wails/pull/2918) +- Added support for setting some of the Webview preferences, `textInteractionEnabled` and `tabFocusesLinks` on Mac. Added by @fkhadra in [PR](https://github.com/wailsapp/wails/pull/2937) +- Added support for enabling/disabling fullscreen of the Webview on Mac. Added by @fkhadra in [PR](https://github.com/wailsapp/wails/pull/2953) +- Added French README.fr.md page. Added by @nejos97 in [PR](https://github.com/wailsapp/wails/pull/2943) +- New task created for linting v2 `task v2:lint`. Workflow updated to run the task. Added by @mikeee in [PR](https://github.com/wailsapp/wails/pull/2957) +- Added new community template wails-htmx-templ-chi-tailwind. Added by [@pylotlight](https://github.com/pylotlight) in [PR](https://github.com/wailsapp/wails/pull/2984) +- Added CPU/GPU/Memory detection for `wails doctor`. Added by @leaanthony in #d51268b8d0680430f3a614775b13e6cd2b906d1c + +### 变更 + +- AssetServer requests are now processed asynchronously without blocking the main thread on Windows. Changed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2926) +- AssetServer requests are now processed concurrently by spawning a goroutine per request. Changed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2926) +- Now building with `-devtools` flag doesn't enable the default context-menu. Changed by @mmghv in [PR](https://github.com/wailsapp/wails/pull/2923) +- Change Window Level. Changed by @almas1992 in [PR](https://github.com/wailsapp/wails/pull/2944) +#### 修复 + +- Fixed typo on docs/reference/options page. Added by [@pylotlight](https://github.com/pylotlight) in [PR](https://github.com/wailsapp/wails/pull/2887) +- Fixed issue with npm being called npm20 on openSUSE-Tumbleweed. Fixed by @TuffenDuffen in [PR] in (https://github.com/wailsapp/wails/pull/2941) + ## v2.6.0 - 2023-09-06 ### 重大变更 @@ -27,6 +49,7 @@ - Fixed `SetBackgroundColour` so it sets the window's background color to reduce resize flickering on Linux. Added by @lyimmi in [PR](https://github.com/wailsapp/wails/pull/2853) - Fixed disable window resize option and wrong initial window size when its enabled. Added by @lyimmi in [PR](https://github.com/wailsapp/wails/pull/2863) - Fixed build hook command parsing. Added by @smac89 in [PR](https://github.com/wailsapp/wails/pull/2836) +- Fixed filesystem watcher from filtering top level project directory if binary name is included in .gitignore. Added by [@haukened](https://github.com/haukened) in [PR #2869](https://github.com/wailsapp/wails/pull/2869) - Fixed `-reloaddir` flag to watch additional directories (non-recursively). [@haukened](https://github.com/haukened) in [PR #2871](https://github.com/wailsapp/wails/pull/2871) - Fixed support for Go 1.21 `go.mod` files. Fixed by @stffabi in [PR](https://github.com/wailsapp/wails/pull/2876) @@ -44,6 +67,7 @@ - Added new community template wails-sveltekit-tailwind. Added by [@pylotlight](https://github.com/pylotlight) in [PR](https://github.com/wailsapp/wails/pull/2851) - Added support for print dialogs. Added by [@aangelisc](https://github.com/aangelisc) in [PR](https://github.com/wailsapp/wails/pull/2822) - Added new `wails dev -nogorebuild` flag to prevent restarts on back end file changes. [@haukened](https://github.com/haukened) in [PR #2870](https://github.com/wailsapp/wails/pull/2870) +- Added a guide to describe a cross-platform build using GitHub Actions. Added by [@dennypenta](https://github.com/dennypenta) in [PR](https://github.com/wailsapp/wails/pull/2879) ### 变更 @@ -680,9 +704,6 @@ Experimental: &options.Experimental{ - [v2, nsis] Seems like / as path separator works only for some directives in a cross platform way by [@stffabi](https://github.com/stffabi) in #1227 - import models on binding definition by [@adalessa](https://github.com/adalessa) in #123 - - 1 - - Use local search on website by [@leaanthony](https://github.com/leaanthony) in #1234 - Ensure binary resources can be served by [@napalu](https://github.com/napalu) in #1240 - Only retry loading assets when loading from disk by [@leaanthony](https://github.com/leaanthony) in #1241