From a4428022ecd6d7a39697698f958d1ed15ad5ba48 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 22 Jun 2024 14:07:04 +1000 Subject: [PATCH] docs: sync translations (#3543) * docs: sync translations * Fix build --------- Co-authored-by: leaanthony Co-authored-by: Lea Anthony --- website/i18n/ar/code.json | 431 ++++++++ .../2021-09-27-v2-beta1-release-notes.mdx | 161 +++ .../2021-11-08-v2-beta2-release-notes.mdx | 170 ++++ .../2022-02-22-v2-beta3-release-notes.mdx | 114 +++ .../2022-09-22-v2-release-notes.mdx | 98 ++ .../2023-01-17-v3-roadmap.mdx | 184 ++++ .../authors.yml | 10 + .../options.json | 14 + .../current.json | 38 + .../current/community/links.mdx | 26 + .../community/showcase/bulletinboard.mdx | 10 + .../current/community/showcase/cfntracker.mdx | 39 + .../current/community/showcase/emailit.mdx | 10 + .../community/showcase/encrypteasy.mdx | 12 + .../current/community/showcase/espstudio.mdx | 13 + .../current/community/showcase/filehound.mdx | 16 + .../current/community/showcase/hiposter.mdx | 10 + .../current/community/showcase/mchat.mdx | 10 + .../community/showcase/minecraftupdater.mdx | 14 + .../community/showcase/modalfilemanager.mdx | 14 + .../community/showcase/mollywallet.mdx | 10 + .../current/community/showcase/october.mdx | 14 + .../current/community/showcase/optimus.mdx | 10 + .../current/community/showcase/portfall.mdx | 10 + .../community/showcase/restic-browser.mdx | 12 + .../current/community/showcase/riftshare.mdx | 21 + .../current/community/showcase/scriptbar.mdx | 10 + .../community/showcase/snippetexpander.mdx | 27 + .../current/community/showcase/surge.mdx | 10 + .../current/community/showcase/tinyrdm.mdx | 11 + .../current/community/showcase/wally.mdx | 10 + .../current/community/showcase/warmine.mdx | 19 + .../current/community/showcase/wombat.mdx | 10 + .../current/community/showcase/ytd.mdx | 10 + .../current/community/templates.mdx | 73 ++ .../current/gettingstarted/building.mdx | 26 + .../current/gettingstarted/development.mdx | 16 + .../current/gettingstarted/firstproject.mdx | 130 +++ .../current/gettingstarted/installation.mdx | 90 ++ .../current/guides/angular.mdx | 14 + .../guides/application-development.mdx | 273 +++++ .../current/guides/crossplatform-build.mdx | 66 ++ .../guides/custom-protocol-schemes.mdx | 204 ++++ .../current/guides/dynamic-assets.mdx | 142 +++ .../current/guides/file-association.mdx | 244 +++++ .../current/guides/frameless.mdx | 87 ++ .../current/guides/frontend.mdx | 72 ++ .../current/guides/ides.mdx | 127 +++ .../current/guides/linux-distro-support.mdx | 103 ++ .../current/guides/linux.mdx | 70 ++ .../current/guides/local-development.mdx | 55 + .../current/guides/mac-appstore.mdx | 97 ++ .../current/guides/manual-builds.mdx | 95 ++ .../current/guides/migrating.mdx | 191 ++++ .../current/guides/mouse-buttons.mdx | 25 + .../current/guides/nixos-font.mdx | 10 + .../current/guides/obfuscated.mdx | 40 + .../current/guides/overscroll.mdx | 10 + .../current/guides/routing.mdx | 68 ++ .../current/guides/signing.mdx | 399 ++++++++ .../current/guides/single-instance-lock.mdx | 81 ++ .../current/guides/sveltekit.mdx | 157 +++ .../current/guides/templates.mdx | 97 ++ .../current/guides/troubleshooting.mdx | 368 +++++++ .../current/guides/vscode.mdx | 82 ++ .../current/guides/windows-installer.mdx | 71 ++ .../current/guides/windows.mdx | 67 ++ .../current/howdoesitwork.mdx | 419 ++++++++ .../current/introduction.mdx | 73 ++ .../current/reference/cli.mdx | 245 +++++ .../current/reference/menus.mdx | 230 +++++ .../current/reference/options.mdx | 956 ++++++++++++++++++ .../current/reference/project-config.mdx | 130 +++ .../current/reference/runtime/browser.mdx | 13 + .../current/reference/runtime/clipboard.mdx | 23 + .../current/reference/runtime/dialog.mdx | 302 ++++++ .../current/reference/runtime/draganddrop.mdx | 37 + .../current/reference/runtime/events.mdx | 37 + .../current/reference/runtime/intro.mdx | 85 ++ .../current/reference/runtime/log.mdx | 130 +++ .../current/reference/runtime/menu.mdx | 25 + .../current/reference/runtime/screen.mdx | 38 + .../current/reference/runtime/window.mdx | 227 +++++ .../current/tutorials/dogsapi.mdx | 245 +++++ .../current/tutorials/helloworld.mdx | 123 +++ .../version-v2.3.1.json | 38 + .../version-v2.4.0.json | 38 + .../version-v2.5.0.json | 38 + .../version-v2.6.0.json | 38 + .../version-v2.7.0.json | 38 + .../version-v2.8.0.json | 38 + .../version-v2.8.1.json | 38 + .../version-v2.9.0.json | 38 + .../changelog.mdx | 852 ++++++++++++++++ .../docusaurus-plugin-content-pages/coc.mdx | 83 ++ .../community-guide.mdx | 142 +++ .../credits.mdx | 269 +++++ .../docusaurus-plugin-content-pages/faq.mdx | 9 + .../markdown-page.md | 7 + .../ar/docusaurus-theme-classic/footer.json | 62 ++ .../ar/docusaurus-theme-classic/navbar.json | 46 + .../current/community/showcase/cfntracker.mdx | 42 +- .../current/community/templates.mdx | 7 +- .../current/gettingstarted/building.mdx | 4 + .../current/gettingstarted/installation.mdx | 2 +- .../current/guides/crossplatform-build.mdx | 10 +- .../guides/custom-protocol-schemes.mdx | 14 +- .../current/guides/file-association.mdx | 16 +- .../current/guides/ides.mdx | 2 +- .../current/guides/migrating.mdx | 2 +- .../current/guides/obfuscated.mdx | 2 +- .../current/guides/routing.mdx | 23 +- .../current/guides/sveltekit.mdx | 78 +- .../current/guides/windows-installer.mdx | 2 +- .../current/guides/windows.mdx | 6 + .../current/howdoesitwork.mdx | 6 +- .../current/introduction.mdx | 4 +- .../current/reference/cli.mdx | 2 +- .../current/reference/options.mdx | 41 + .../current/reference/runtime/draganddrop.mdx | 37 + .../current/reference/runtime/window.mdx | 14 +- .../version-v2.8.1.json | 38 + .../version-v2.9.0.json | 38 + .../changelog.mdx | 61 +- .../credits.mdx | 3 +- .../current/community/templates.mdx | 7 +- .../current/gettingstarted/building.mdx | 4 + .../current/gettingstarted/installation.mdx | 2 +- .../current/guides/ides.mdx | 2 +- .../current/guides/migrating.mdx | 2 +- .../current/guides/obfuscated.mdx | 2 +- .../current/guides/routing.mdx | 23 +- .../current/guides/windows-installer.mdx | 2 +- .../current/guides/windows.mdx | 6 + .../current/howdoesitwork.mdx | 6 +- .../current/introduction.mdx | 4 +- .../current/reference/cli.mdx | 2 +- .../current/reference/options.mdx | 41 + .../current/reference/runtime/draganddrop.mdx | 37 + .../current/reference/runtime/window.mdx | 14 +- .../version-v2.8.1.json | 38 + .../version-v2.9.0.json | 38 + .../changelog.mdx | 61 +- .../credits.mdx | 3 +- .../current/community/showcase/cfntracker.mdx | 42 +- .../current/community/templates.mdx | 7 +- .../current/gettingstarted/building.mdx | 4 + .../current/gettingstarted/installation.mdx | 2 +- .../current/guides/crossplatform-build.mdx | 10 +- .../guides/custom-protocol-schemes.mdx | 14 +- .../current/guides/file-association.mdx | 30 +- .../current/guides/ides.mdx | 2 +- .../current/guides/migrating.mdx | 2 +- .../current/guides/obfuscated.mdx | 2 +- .../current/guides/routing.mdx | 23 +- .../current/guides/sveltekit.mdx | 78 +- .../current/guides/windows-installer.mdx | 2 +- .../current/guides/windows.mdx | 6 + .../current/howdoesitwork.mdx | 6 +- .../current/introduction.mdx | 4 +- .../current/reference/cli.mdx | 2 +- .../current/reference/options.mdx | 41 + .../current/reference/runtime/draganddrop.mdx | 37 + .../current/reference/runtime/window.mdx | 14 +- .../version-v2.8.1.json | 38 + .../version-v2.9.0.json | 38 + .../changelog.mdx | 61 +- .../credits.mdx | 3 +- .../current/community/showcase/cfntracker.mdx | 42 +- .../current/community/templates.mdx | 7 +- .../current/gettingstarted/building.mdx | 4 + .../current/gettingstarted/installation.mdx | 2 +- .../current/guides/crossplatform-build.mdx | 10 +- .../guides/custom-protocol-schemes.mdx | 14 +- .../current/guides/file-association.mdx | 30 +- .../current/guides/ides.mdx | 2 +- .../current/guides/migrating.mdx | 2 +- .../current/guides/obfuscated.mdx | 2 +- .../current/guides/routing.mdx | 23 +- .../current/guides/sveltekit.mdx | 78 +- .../current/guides/windows-installer.mdx | 2 +- .../current/guides/windows.mdx | 6 + .../current/howdoesitwork.mdx | 6 +- .../current/introduction.mdx | 4 +- .../current/reference/cli.mdx | 2 +- .../current/reference/options.mdx | 41 + .../current/reference/runtime/draganddrop.mdx | 37 + .../current/reference/runtime/window.mdx | 14 +- .../version-v2.8.1.json | 38 + .../version-v2.9.0.json | 38 + .../changelog.mdx | 61 +- .../credits.mdx | 3 +- .../current/community/templates.mdx | 7 +- .../current/gettingstarted/building.mdx | 4 + .../current/gettingstarted/installation.mdx | 2 +- .../current/guides/ides.mdx | 2 +- .../current/guides/migrating.mdx | 2 +- .../current/guides/obfuscated.mdx | 2 +- .../current/guides/routing.mdx | 23 +- .../current/guides/windows-installer.mdx | 2 +- .../current/guides/windows.mdx | 6 + .../current/howdoesitwork.mdx | 6 +- .../current/introduction.mdx | 4 +- .../current/reference/cli.mdx | 2 +- .../current/reference/options.mdx | 41 + .../current/reference/runtime/draganddrop.mdx | 37 + .../current/reference/runtime/window.mdx | 14 +- .../version-v2.8.1.json | 38 + .../version-v2.9.0.json | 38 + .../changelog.mdx | 61 +- .../credits.mdx | 3 +- website/i18n/tr/code.json | 431 ++++++++ .../2021-09-27-v2-beta1-release-notes.mdx | 161 +++ .../2021-11-08-v2-beta2-release-notes.mdx | 170 ++++ .../2022-02-22-v2-beta3-release-notes.mdx | 114 +++ .../2022-09-22-v2-release-notes.mdx | 98 ++ .../2023-01-17-v3-roadmap.mdx | 184 ++++ .../authors.yml | 10 + .../options.json | 14 + .../current.json | 38 + .../current/community/links.mdx | 26 + .../community/showcase/bulletinboard.mdx | 10 + .../current/community/showcase/cfntracker.mdx | 39 + .../current/community/showcase/emailit.mdx | 10 + .../community/showcase/encrypteasy.mdx | 12 + .../current/community/showcase/espstudio.mdx | 13 + .../current/community/showcase/filehound.mdx | 16 + .../current/community/showcase/hiposter.mdx | 10 + .../current/community/showcase/mchat.mdx | 10 + .../community/showcase/minecraftupdater.mdx | 14 + .../community/showcase/modalfilemanager.mdx | 14 + .../community/showcase/mollywallet.mdx | 10 + .../current/community/showcase/october.mdx | 14 + .../current/community/showcase/optimus.mdx | 10 + .../current/community/showcase/portfall.mdx | 10 + .../community/showcase/restic-browser.mdx | 12 + .../current/community/showcase/riftshare.mdx | 21 + .../current/community/showcase/scriptbar.mdx | 10 + .../community/showcase/snippetexpander.mdx | 27 + .../current/community/showcase/surge.mdx | 10 + .../current/community/showcase/tinyrdm.mdx | 11 + .../current/community/showcase/wally.mdx | 10 + .../current/community/showcase/warmine.mdx | 19 + .../current/community/showcase/wombat.mdx | 10 + .../current/community/showcase/ytd.mdx | 10 + .../current/community/templates.mdx | 73 ++ .../current/gettingstarted/building.mdx | 26 + .../current/gettingstarted/development.mdx | 16 + .../current/gettingstarted/firstproject.mdx | 130 +++ .../current/gettingstarted/installation.mdx | 90 ++ .../current/guides/angular.mdx | 14 + .../guides/application-development.mdx | 273 +++++ .../current/guides/crossplatform-build.mdx | 66 ++ .../guides/custom-protocol-schemes.mdx | 204 ++++ .../current/guides/dynamic-assets.mdx | 142 +++ .../current/guides/file-association.mdx | 244 +++++ .../current/guides/frameless.mdx | 87 ++ .../current/guides/frontend.mdx | 72 ++ .../current/guides/ides.mdx | 127 +++ .../current/guides/linux-distro-support.mdx | 103 ++ .../current/guides/linux.mdx | 70 ++ .../current/guides/local-development.mdx | 55 + .../current/guides/mac-appstore.mdx | 97 ++ .../current/guides/manual-builds.mdx | 95 ++ .../current/guides/migrating.mdx | 191 ++++ .../current/guides/mouse-buttons.mdx | 25 + .../current/guides/nixos-font.mdx | 10 + .../current/guides/obfuscated.mdx | 40 + .../current/guides/overscroll.mdx | 10 + .../current/guides/routing.mdx | 68 ++ .../current/guides/signing.mdx | 399 ++++++++ .../current/guides/single-instance-lock.mdx | 81 ++ .../current/guides/sveltekit.mdx | 157 +++ .../current/guides/templates.mdx | 97 ++ .../current/guides/troubleshooting.mdx | 368 +++++++ .../current/guides/vscode.mdx | 82 ++ .../current/guides/windows-installer.mdx | 71 ++ .../current/guides/windows.mdx | 67 ++ .../current/howdoesitwork.mdx | 419 ++++++++ .../current/introduction.mdx | 73 ++ .../current/reference/cli.mdx | 245 +++++ .../current/reference/menus.mdx | 230 +++++ .../current/reference/options.mdx | 956 ++++++++++++++++++ .../current/reference/project-config.mdx | 130 +++ .../current/reference/runtime/browser.mdx | 13 + .../current/reference/runtime/clipboard.mdx | 23 + .../current/reference/runtime/dialog.mdx | 302 ++++++ .../current/reference/runtime/draganddrop.mdx | 37 + .../current/reference/runtime/events.mdx | 37 + .../current/reference/runtime/intro.mdx | 85 ++ .../current/reference/runtime/log.mdx | 130 +++ .../current/reference/runtime/menu.mdx | 25 + .../current/reference/runtime/screen.mdx | 38 + .../current/reference/runtime/window.mdx | 227 +++++ .../current/tutorials/dogsapi.mdx | 245 +++++ .../current/tutorials/helloworld.mdx | 123 +++ .../version-v2.3.1.json | 38 + .../version-v2.4.0.json | 38 + .../version-v2.5.0.json | 38 + .../version-v2.6.0.json | 38 + .../version-v2.7.0.json | 38 + .../version-v2.8.0.json | 38 + .../version-v2.8.1.json | 38 + .../version-v2.9.0.json | 38 + .../changelog.mdx | 852 ++++++++++++++++ .../docusaurus-plugin-content-pages/coc.mdx | 83 ++ .../community-guide.mdx | 142 +++ .../credits.mdx | 269 +++++ .../docusaurus-plugin-content-pages/faq.mdx | 9 + .../markdown-page.md | 7 + .../tr/docusaurus-theme-classic/footer.json | 62 ++ .../tr/docusaurus-theme-classic/navbar.json | 46 + .../current/community/showcase/cfntracker.mdx | 42 +- .../current/community/templates.mdx | 7 +- .../current/gettingstarted/building.mdx | 4 + .../current/gettingstarted/installation.mdx | 2 +- .../current/guides/crossplatform-build.mdx | 10 +- .../guides/custom-protocol-schemes.mdx | 14 +- .../current/guides/file-association.mdx | 30 +- .../current/guides/ides.mdx | 2 +- .../current/guides/migrating.mdx | 2 +- .../current/guides/obfuscated.mdx | 2 +- .../current/guides/routing.mdx | 23 +- .../current/guides/sveltekit.mdx | 78 +- .../current/guides/windows-installer.mdx | 2 +- .../current/guides/windows.mdx | 6 + .../current/howdoesitwork.mdx | 6 +- .../current/introduction.mdx | 4 +- .../current/reference/cli.mdx | 2 +- .../current/reference/options.mdx | 41 + .../current/reference/runtime/draganddrop.mdx | 37 + .../current/reference/runtime/window.mdx | 14 +- .../version-v2.8.1.json | 38 + .../version-v2.9.0.json | 38 + .../changelog.mdx | 61 +- .../credits.mdx | 3 +- .../current/community/showcase/cfntracker.mdx | 42 +- .../current/community/templates.mdx | 7 +- .../current/gettingstarted/building.mdx | 4 + .../current/gettingstarted/installation.mdx | 2 +- .../current/guides/crossplatform-build.mdx | 10 +- .../guides/custom-protocol-schemes.mdx | 14 +- .../current/guides/file-association.mdx | 30 +- .../current/guides/ides.mdx | 2 +- .../current/guides/migrating.mdx | 2 +- .../current/guides/obfuscated.mdx | 2 +- .../current/guides/routing.mdx | 23 +- .../current/guides/sveltekit.mdx | 78 +- .../current/guides/windows-installer.mdx | 2 +- .../current/guides/windows.mdx | 6 + .../current/howdoesitwork.mdx | 6 +- .../current/introduction.mdx | 4 +- .../current/reference/cli.mdx | 20 +- .../current/reference/options.mdx | 41 + .../current/reference/runtime/draganddrop.mdx | 37 + .../current/reference/runtime/window.mdx | 14 +- .../version-v2.8.1.json | 38 + .../version-v2.9.0.json | 38 + .../changelog.mdx | 61 +- .../credits.mdx | 3 +- 360 files changed, 23007 insertions(+), 605 deletions(-) create mode 100644 website/i18n/ar/code.json create mode 100644 website/i18n/ar/docusaurus-plugin-content-blog/2021-09-27-v2-beta1-release-notes.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-blog/2021-11-08-v2-beta2-release-notes.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-blog/2022-02-22-v2-beta3-release-notes.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-blog/2022-09-22-v2-release-notes.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-blog/2023-01-17-v3-roadmap.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-blog/authors.yml create mode 100644 website/i18n/ar/docusaurus-plugin-content-blog/options.json create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current.json create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/community/links.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/bulletinboard.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/cfntracker.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/emailit.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/encrypteasy.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/espstudio.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/filehound.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/hiposter.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/mchat.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/minecraftupdater.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/modalfilemanager.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/mollywallet.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/october.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/optimus.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/portfall.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/restic-browser.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/riftshare.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/scriptbar.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/snippetexpander.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/surge.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/tinyrdm.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/wally.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/warmine.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/wombat.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/ytd.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/community/templates.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/gettingstarted/building.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/gettingstarted/development.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/gettingstarted/firstproject.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/gettingstarted/installation.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/guides/angular.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/guides/application-development.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/guides/crossplatform-build.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/guides/custom-protocol-schemes.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/guides/dynamic-assets.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/guides/file-association.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/guides/frameless.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/guides/frontend.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/guides/ides.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/guides/linux-distro-support.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/guides/linux.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/guides/local-development.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/guides/mac-appstore.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/guides/manual-builds.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/guides/migrating.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/guides/mouse-buttons.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/guides/nixos-font.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/guides/obfuscated.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/guides/overscroll.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/guides/routing.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/guides/signing.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/guides/single-instance-lock.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/guides/sveltekit.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/guides/templates.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/guides/troubleshooting.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/guides/vscode.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/guides/windows-installer.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/guides/windows.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/howdoesitwork.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/introduction.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/reference/cli.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/reference/menus.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/reference/options.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/reference/project-config.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/reference/runtime/browser.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/reference/runtime/clipboard.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/reference/runtime/dialog.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/reference/runtime/draganddrop.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/reference/runtime/events.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/reference/runtime/intro.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/reference/runtime/log.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/reference/runtime/menu.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/reference/runtime/screen.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/reference/runtime/window.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/tutorials/dogsapi.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/current/tutorials/helloworld.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/version-v2.3.1.json create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/version-v2.4.0.json create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/version-v2.5.0.json create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/version-v2.6.0.json create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/version-v2.7.0.json create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/version-v2.8.0.json create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/version-v2.8.1.json create mode 100644 website/i18n/ar/docusaurus-plugin-content-docs/version-v2.9.0.json create mode 100644 website/i18n/ar/docusaurus-plugin-content-pages/changelog.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-pages/coc.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-pages/community-guide.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-pages/credits.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-pages/faq.mdx create mode 100644 website/i18n/ar/docusaurus-plugin-content-pages/markdown-page.md create mode 100644 website/i18n/ar/docusaurus-theme-classic/footer.json create mode 100644 website/i18n/ar/docusaurus-theme-classic/navbar.json create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/current/reference/runtime/draganddrop.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.8.1.json create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.9.0.json create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/current/reference/runtime/draganddrop.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.8.1.json create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.9.0.json create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/current/reference/runtime/draganddrop.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.8.1.json create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.9.0.json create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/current/reference/runtime/draganddrop.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.8.1.json create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.9.0.json create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/current/reference/runtime/draganddrop.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.8.1.json create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.9.0.json create mode 100644 website/i18n/tr/code.json create mode 100644 website/i18n/tr/docusaurus-plugin-content-blog/2021-09-27-v2-beta1-release-notes.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-blog/2021-11-08-v2-beta2-release-notes.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-blog/2022-02-22-v2-beta3-release-notes.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-blog/2022-09-22-v2-release-notes.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-blog/2023-01-17-v3-roadmap.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-blog/authors.yml create mode 100644 website/i18n/tr/docusaurus-plugin-content-blog/options.json create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current.json create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/community/links.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/community/showcase/bulletinboard.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/community/showcase/cfntracker.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/community/showcase/emailit.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/community/showcase/encrypteasy.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/community/showcase/espstudio.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/community/showcase/filehound.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/community/showcase/hiposter.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/community/showcase/mchat.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/community/showcase/minecraftupdater.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/community/showcase/modalfilemanager.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/community/showcase/mollywallet.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/community/showcase/october.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/community/showcase/optimus.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/community/showcase/portfall.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/community/showcase/restic-browser.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/community/showcase/riftshare.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/community/showcase/scriptbar.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/community/showcase/snippetexpander.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/community/showcase/surge.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/community/showcase/tinyrdm.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/community/showcase/wally.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/community/showcase/warmine.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/community/showcase/wombat.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/community/showcase/ytd.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/community/templates.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/gettingstarted/building.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/gettingstarted/development.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/gettingstarted/firstproject.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/gettingstarted/installation.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/guides/angular.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/guides/application-development.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/guides/crossplatform-build.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/guides/custom-protocol-schemes.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/guides/dynamic-assets.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/guides/file-association.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/guides/frameless.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/guides/frontend.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/guides/ides.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/guides/linux-distro-support.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/guides/linux.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/guides/local-development.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/guides/mac-appstore.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/guides/manual-builds.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/guides/migrating.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/guides/mouse-buttons.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/guides/nixos-font.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/guides/obfuscated.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/guides/overscroll.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/guides/routing.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/guides/signing.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/guides/single-instance-lock.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/guides/sveltekit.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/guides/templates.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/guides/troubleshooting.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/guides/vscode.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/guides/windows-installer.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/guides/windows.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/howdoesitwork.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/introduction.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/reference/cli.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/reference/menus.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/reference/options.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/reference/project-config.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/reference/runtime/browser.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/reference/runtime/clipboard.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/reference/runtime/dialog.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/reference/runtime/draganddrop.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/reference/runtime/events.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/reference/runtime/intro.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/reference/runtime/log.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/reference/runtime/menu.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/reference/runtime/screen.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/reference/runtime/window.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/tutorials/dogsapi.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/current/tutorials/helloworld.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/version-v2.3.1.json create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/version-v2.4.0.json create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/version-v2.5.0.json create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/version-v2.6.0.json create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/version-v2.7.0.json create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/version-v2.8.0.json create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/version-v2.8.1.json create mode 100644 website/i18n/tr/docusaurus-plugin-content-docs/version-v2.9.0.json create mode 100644 website/i18n/tr/docusaurus-plugin-content-pages/changelog.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-pages/coc.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-pages/community-guide.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-pages/credits.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-pages/faq.mdx create mode 100644 website/i18n/tr/docusaurus-plugin-content-pages/markdown-page.md create mode 100644 website/i18n/tr/docusaurus-theme-classic/footer.json create mode 100644 website/i18n/tr/docusaurus-theme-classic/navbar.json create mode 100644 website/i18n/vi/docusaurus-plugin-content-docs/current/reference/runtime/draganddrop.mdx create mode 100644 website/i18n/vi/docusaurus-plugin-content-docs/version-v2.8.1.json create mode 100644 website/i18n/vi/docusaurus-plugin-content-docs/version-v2.9.0.json create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/reference/runtime/draganddrop.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.8.1.json create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.9.0.json diff --git a/website/i18n/ar/code.json b/website/i18n/ar/code.json new file mode 100644 index 000000000..c3b0bdfeb --- /dev/null +++ b/website/i18n/ar/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/ar/docusaurus-plugin-content-blog/2021-09-27-v2-beta1-release-notes.mdx b/website/i18n/ar/docusaurus-plugin-content-blog/2021-09-27-v2-beta1-release-notes.mdx new file mode 100644 index 000000000..d01b542b1 --- /dev/null +++ b/website/i18n/ar/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/ar/docusaurus-plugin-content-blog/2021-11-08-v2-beta2-release-notes.mdx b/website/i18n/ar/docusaurus-plugin-content-blog/2021-11-08-v2-beta2-release-notes.mdx new file mode 100644 index 000000000..86d44616f --- /dev/null +++ b/website/i18n/ar/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/ar/docusaurus-plugin-content-blog/2022-02-22-v2-beta3-release-notes.mdx b/website/i18n/ar/docusaurus-plugin-content-blog/2022-02-22-v2-beta3-release-notes.mdx new file mode 100644 index 000000000..b405953cf --- /dev/null +++ b/website/i18n/ar/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/ar/docusaurus-plugin-content-blog/2022-09-22-v2-release-notes.mdx b/website/i18n/ar/docusaurus-plugin-content-blog/2022-09-22-v2-release-notes.mdx new file mode 100644 index 000000000..c321f5042 --- /dev/null +++ b/website/i18n/ar/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/ar/docusaurus-plugin-content-blog/2023-01-17-v3-roadmap.mdx b/website/i18n/ar/docusaurus-plugin-content-blog/2023-01-17-v3-roadmap.mdx new file mode 100644 index 000000000..9a137d09a --- /dev/null +++ b/website/i18n/ar/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/ar/docusaurus-plugin-content-blog/authors.yml b/website/i18n/ar/docusaurus-plugin-content-blog/authors.yml new file mode 100644 index 000000000..a1621fab6 --- /dev/null +++ b/website/i18n/ar/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/ar/docusaurus-plugin-content-blog/options.json b/website/i18n/ar/docusaurus-plugin-content-blog/options.json new file mode 100644 index 000000000..9239ff706 --- /dev/null +++ b/website/i18n/ar/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/ar/docusaurus-plugin-content-docs/current.json b/website/i18n/ar/docusaurus-plugin-content-docs/current.json new file mode 100644 index 000000000..b4e63124d --- /dev/null +++ b/website/i18n/ar/docusaurus-plugin-content-docs/current.json @@ -0,0 +1,38 @@ +{ + "version.label": { + "message": "Next Version 🚧", + "description": "The label for version current" + }, + "sidebar.docs.category.Getting Started": { + "message": "Getting Started", + "description": "The label for category Getting Started in sidebar docs" + }, + "sidebar.docs.category.Reference": { + "message": "Reference", + "description": "The label for category Reference in sidebar docs" + }, + "sidebar.docs.category.Runtime": { + "message": "Runtime", + "description": "The label for category Runtime in sidebar docs" + }, + "sidebar.docs.category.Community": { + "message": "Community", + "description": "The label for category Community in sidebar docs" + }, + "sidebar.docs.category.Showcase": { + "message": "Showcase", + "description": "The label for category Showcase in sidebar docs" + }, + "sidebar.docs.category.Guides": { + "message": "Guides", + "description": "The label for category Guides in sidebar docs" + }, + "sidebar.docs.category.Tutorials": { + "message": "Tutorials", + "description": "The label for category Tutorials in sidebar docs" + }, + "sidebar.docs.link.Contributing": { + "message": "Contributing", + "description": "The label for link Contributing in sidebar docs, linking to /community-guide#ways-of-contributing" + } +} diff --git a/website/i18n/ar/docusaurus-plugin-content-docs/current/community/links.mdx b/website/i18n/ar/docusaurus-plugin-content-docs/current/community/links.mdx new file mode 100644 index 000000000..e36a6edfe --- /dev/null +++ b/website/i18n/ar/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/ar/docusaurus-plugin-content-docs/current/community/showcase/bulletinboard.mdx b/website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/bulletinboard.mdx new file mode 100644 index 000000000..37be75135 --- /dev/null +++ b/website/i18n/ar/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/ar/docusaurus-plugin-content-docs/current/community/showcase/cfntracker.mdx b/website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/cfntracker.mdx new file mode 100644 index 000000000..8fab23b75 --- /dev/null +++ b/website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/cfntracker.mdx @@ -0,0 +1,39 @@ +# CFN Tracker + +```mdx-code-block +

+ +
+

+``` + +[CFN Tracker](https://github.com/williamsjokvist/cfn-tracker) - Track any Street +Fighter 6 or V CFN profile's live matches. Check +[the website](https://cfn.williamsjokvist.se/) to get started. + +## Features + +- Real-time match tracking +- Storing match logs and statistics +- Support for displaying live stats to OBS via Browser Source +- Support for both SF6 and SFV +- Ability for users to create their own OBS Browser themes with CSS + +### Major tech used alongside Wails + +- [Task](https://github.com/go-task/task) - wrapping the Wails CLI to make + common commands easy to use +- [React](https://github.com/facebook/react) - chosen for its rich ecosystem + (radix, framer-motion) +- [Bun](https://github.com/oven-sh/bun) - used for its fast dependency + resolution and build-time +- [Rod](https://github.com/go-rod/rod) - headless browser automation for + authentication and polling changes +- [SQLite](https://github.com/mattn/go-sqlite3) - used for storing matches, + sessions and profiles +- [Server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events) - + a http stream to send tracking updates to OBS browser sources +- [i18next](https://github.com/i18next/) - with backend connector to serve + localization objects from the Go layer +- [xstate](https://github.com/statelyai/xstate) - state machines for auth + process and tracking diff --git a/website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/emailit.mdx b/website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/emailit.mdx new file mode 100644 index 000000000..c1817b70f --- /dev/null +++ b/website/i18n/ar/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/ar/docusaurus-plugin-content-docs/current/community/showcase/encrypteasy.mdx b/website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/encrypteasy.mdx new file mode 100644 index 000000000..7504950ea --- /dev/null +++ b/website/i18n/ar/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/ar/docusaurus-plugin-content-docs/current/community/showcase/espstudio.mdx b/website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/espstudio.mdx new file mode 100644 index 000000000..44db858f9 --- /dev/null +++ b/website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/espstudio.mdx @@ -0,0 +1,13 @@ +# ESP Studio + +```mdx-code-block +

+ +
+

+``` + +[ESP Studio](https://github.com/torabian/esp-studio) - Cross platform, Desktop, Cloud, and Embedded software +for controlling ESP/Arduino devices, and building complex IOT workflows and control systems diff --git a/website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/filehound.mdx b/website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/filehound.mdx new file mode 100644 index 000000000..bc569c3fe --- /dev/null +++ b/website/i18n/ar/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/ar/docusaurus-plugin-content-docs/current/community/showcase/hiposter.mdx b/website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/hiposter.mdx new file mode 100644 index 000000000..87e5837d3 --- /dev/null +++ b/website/i18n/ar/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/ar/docusaurus-plugin-content-docs/current/community/showcase/mchat.mdx b/website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/mchat.mdx new file mode 100644 index 000000000..aa535a6f8 --- /dev/null +++ b/website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/mchat.mdx @@ -0,0 +1,10 @@ +# Mchat + +```mdx-code-block +

+ +
+

+``` + +[Official page](https://marcio199226.github.io/mchat-site/public/) Fully anonymous end2end encrypted chat. diff --git a/website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/minecraftupdater.mdx b/website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/minecraftupdater.mdx new file mode 100644 index 000000000..2f6c7c72b --- /dev/null +++ b/website/i18n/ar/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/ar/docusaurus-plugin-content-docs/current/community/showcase/modalfilemanager.mdx b/website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/modalfilemanager.mdx new file mode 100644 index 000000000..bcd212396 --- /dev/null +++ b/website/i18n/ar/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/ar/docusaurus-plugin-content-docs/current/community/showcase/mollywallet.mdx b/website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/mollywallet.mdx new file mode 100644 index 000000000..5d846d06d --- /dev/null +++ b/website/i18n/ar/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/ar/docusaurus-plugin-content-docs/current/community/showcase/october.mdx b/website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/october.mdx new file mode 100644 index 000000000..66d634dc5 --- /dev/null +++ b/website/i18n/ar/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/ar/docusaurus-plugin-content-docs/current/community/showcase/optimus.mdx b/website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/optimus.mdx new file mode 100644 index 000000000..4f87479d6 --- /dev/null +++ b/website/i18n/ar/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/ar/docusaurus-plugin-content-docs/current/community/showcase/portfall.mdx b/website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/portfall.mdx new file mode 100644 index 000000000..03e740f4c --- /dev/null +++ b/website/i18n/ar/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/ar/docusaurus-plugin-content-docs/current/community/showcase/restic-browser.mdx b/website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/restic-browser.mdx new file mode 100644 index 000000000..3646384ec --- /dev/null +++ b/website/i18n/ar/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/ar/docusaurus-plugin-content-docs/current/community/showcase/riftshare.mdx b/website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/riftshare.mdx new file mode 100644 index 000000000..9928b4785 --- /dev/null +++ b/website/i18n/ar/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/ar/docusaurus-plugin-content-docs/current/community/showcase/scriptbar.mdx b/website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/scriptbar.mdx new file mode 100644 index 000000000..3e41eb32a --- /dev/null +++ b/website/i18n/ar/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/ar/docusaurus-plugin-content-docs/current/community/showcase/snippetexpander.mdx b/website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/snippetexpander.mdx new file mode 100644 index 000000000..1f9fb6157 --- /dev/null +++ b/website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/snippetexpander.mdx @@ -0,0 +1,27 @@ +# Snippet Expander + +```mdx-code-block +

+ +
+ Screenshot of Snippet Expander's Select Snippet window +

+

+ +
+ Screenshot of Snippet Expander's Add Snippet screen +

+

+ +
+ Screenshot of Snippet Expander's Search & Paste window +

+``` + +[Snippet Expander](https://snippetexpander.org) is "Your little expandable text snippets helper", for Linux. + +Snippet Expander comprises of a GUI application built with Wails for managing snippets and settings, with a Search & Paste window mode for quickly selecting and pasting a snippet. + +The Wails based GUI, go-lang CLI and vala-lang auto expander daemon all communicate with a go-lang daemon via D-Bus. The daemon does the majority of the work, managing the database of snippets and common settings, and providing services for expanding and pasting snippets etc. + +Check out the [source code](https://git.sr.ht/~ianmjones/snippetexpander/tree/trunk/item/cmd/snippetexpandergui/app.go#L38) to see how the Wails app sends messages from the UI to the backend that are then sent to the daemon, and subscribes to a D-Bus event to monitor changes to snippets via another instance of the app or CLI and show them instantly in the UI via a Wails event. diff --git a/website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/surge.mdx b/website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/surge.mdx new file mode 100644 index 000000000..c3b3fb4c0 --- /dev/null +++ b/website/i18n/ar/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/ar/docusaurus-plugin-content-docs/current/community/showcase/tinyrdm.mdx b/website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/tinyrdm.mdx new file mode 100644 index 000000000..e3124bab7 --- /dev/null +++ b/website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/tinyrdm.mdx @@ -0,0 +1,11 @@ +# Tiny RDM + +```mdx-code-block +

+ + +
+

+``` + +The [Tiny RDM](https://redis.tinycraft.cc/) application is an open-source, modern lightweight Redis GUI. It has a beautful UI, intuitive Redis database management, and compatible with Windows, Mac, and Linux. It provides visual key-value data operations, supports various data decoding and viewing options, built-in console for executing commands, slow log queries and more. diff --git a/website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/wally.mdx b/website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/wally.mdx new file mode 100644 index 000000000..7408aa585 --- /dev/null +++ b/website/i18n/ar/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/ar/docusaurus-plugin-content-docs/current/community/showcase/warmine.mdx b/website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/warmine.mdx new file mode 100644 index 000000000..950dc3f3d --- /dev/null +++ b/website/i18n/ar/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/ar/docusaurus-plugin-content-docs/current/community/showcase/wombat.mdx b/website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/wombat.mdx new file mode 100644 index 000000000..f100c55e2 --- /dev/null +++ b/website/i18n/ar/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/ar/docusaurus-plugin-content-docs/current/community/showcase/ytd.mdx b/website/i18n/ar/docusaurus-plugin-content-docs/current/community/showcase/ytd.mdx new file mode 100644 index 000000000..5db428f72 --- /dev/null +++ b/website/i18n/ar/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/ar/docusaurus-plugin-content-docs/current/community/templates.mdx b/website/i18n/ar/docusaurus-plugin-content-docs/current/community/templates.mdx new file mode 100644 index 000000000..65f46a9e1 --- /dev/null +++ b/website/i18n/ar/docusaurus-plugin-content-docs/current/community/templates.mdx @@ -0,0 +1,73 @@ +--- +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-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-template-nextjs-app-router](https://github.com/thisisvk-in/wails-template-nextjs-app-router) - A template using Next.js and TypeScript with App router +- [wails-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 + + +## Lit (web components) + +- [wails-lit-shoelace-esbuild-template](https://github.com/Braincompiler/wails-lit-shoelace-esbuild-template) - Wails template providing frontend with lit, Shoelace component library + pre-configured prettier and typescript. diff --git a/website/i18n/ar/docusaurus-plugin-content-docs/current/gettingstarted/building.mdx b/website/i18n/ar/docusaurus-plugin-content-docs/current/gettingstarted/building.mdx new file mode 100644 index 000000000..6dbe1cfd0 --- /dev/null +++ b/website/i18n/ar/docusaurus-plugin-content-docs/current/gettingstarted/building.mdx @@ -0,0 +1,26 @@ +--- +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. + +:::info Linux +If you are using a Linux distribution that does not have webkit2gtk-4.0 (such as Ubuntu 24.04), you will need to add `-tags webkit2_41`. +::: + +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/ar/docusaurus-plugin-content-docs/current/gettingstarted/development.mdx b/website/i18n/ar/docusaurus-plugin-content-docs/current/gettingstarted/development.mdx new file mode 100644 index 000000000..034be31d6 --- /dev/null +++ b/website/i18n/ar/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/ar/docusaurus-plugin-content-docs/current/gettingstarted/firstproject.mdx b/website/i18n/ar/docusaurus-plugin-content-docs/current/gettingstarted/firstproject.mdx new file mode 100644 index 000000000..62ee97c84 --- /dev/null +++ b/website/i18n/ar/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/ar/docusaurus-plugin-content-docs/current/gettingstarted/installation.mdx b/website/i18n/ar/docusaurus-plugin-content-docs/current/gettingstarted/installation.mdx new file mode 100644 index 000000000..401d26789 --- /dev/null +++ b/website/i18n/ar/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.20+ +- 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/ar/docusaurus-plugin-content-docs/current/guides/angular.mdx b/website/i18n/ar/docusaurus-plugin-content-docs/current/guides/angular.mdx new file mode 100644 index 000000000..2b6c5a845 --- /dev/null +++ b/website/i18n/ar/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/ar/docusaurus-plugin-content-docs/current/guides/application-development.mdx b/website/i18n/ar/docusaurus-plugin-content-docs/current/guides/application-development.mdx new file mode 100644 index 000000000..8ad521116 --- /dev/null +++ b/website/i18n/ar/docusaurus-plugin-content-docs/current/guides/application-development.mdx @@ -0,0 +1,273 @@ +# 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) + } +} +``` + +Also you might want to use Enums in your structs and have models for them on frontend. In that case you should create array that will contain all possible enum values, instrument enum type and bind it to the app: + +```go {16-18} title="app.go" +type Weekday string + +const ( + Sunday Weekday = "Sunday" + Monday Weekday = "Monday" + Tuesday Weekday = "Tuesday" + Wednesday Weekday = "Wednesday" + Thursday Weekday = "Thursday" + Friday Weekday = "Friday" + Saturday Weekday = "Saturday" +) + +var AllWeekdays = []struct { + Value Weekday + TSName string +}{ + {Sunday, "SUNDAY"}, + {Monday, "MONDAY"}, + {Tuesday, "TUESDAY"}, + {Wednesday, "WEDNESDAY"}, + {Thursday, "THURSDAY"}, + {Friday, "FRIDAY"}, + {Saturday, "SATURDAY"}, +} +``` + +In the main application configuration, the `EnumBind` key is where we can tell Wails what we want to bind enums as well: + +```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, + }, + EnumBind: []interface{}{ + AllWeekdays, + }, + }) + if err != nil { + log.Fatal(err) + } +} + +``` + +This will add missing enums to your `model.ts` file. + +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/ar/docusaurus-plugin-content-docs/current/guides/crossplatform-build.mdx b/website/i18n/ar/docusaurus-plugin-content-docs/current/guides/crossplatform-build.mdx new file mode 100644 index 000000000..ff217c845 --- /dev/null +++ b/website/i18n/ar/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/ar/docusaurus-plugin-content-docs/current/guides/custom-protocol-schemes.mdx b/website/i18n/ar/docusaurus-plugin-content-docs/current/guides/custom-protocol-schemes.mdx new file mode 100644 index 000000000..3dccf4e3c --- /dev/null +++ b/website/i18n/ar/docusaurus-plugin-content-docs/current/guides/custom-protocol-schemes.mdx @@ -0,0 +1,204 @@ +# Custom Protocol Scheme association + +Custom Protocols feature allows you to associate specific custom protocol with your app so that when users open links with this protocol, +your app is launched to handle them. This can be particularly useful to connect your desktop app with your web app. +In this guide, we'll walk through the steps to implement custom protocols in Wails app. + +## Set Up Custom Protocol Schemes Association: + +To set up custom protocol, you need to modify your application's wails.json file. +In "info" section add a "protocols" section specifying the protocols your app should be associated with. + +For example: + +```json +{ + "info": { + "protocols": [ + { + "scheme": "myapp", + "description": "My App Protocol", + "role": "Editor" + } + ] + } +} +``` + +| Property | Description | +| :---------- | :------------------------------------------------------------------------------------ | +| scheme | Custom Protocol scheme. e.g. myapp | +| description | Windows-only. The description. | +| role | macOS-only. The app’s role with respect to the type. Corresponds to CFBundleTypeRole. | + +## Platform Specifics: + +### macOS + +When you open custom protocol with your app, the system will launch your app and call the `OnUrlOpen` function in your Wails app. Example: + +```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{ + OnUrlOpen: func(url string) { println(url) }, + }, + Bind: []interface{}{ + app, + }, + }) + + if err != nil { + println("Error:", err.Error()) + } +} +``` + +### Windows + +On Windows Custom Protocol Schemes is supported only with NSIS installer. During installation, the installer will create a +registry entry for your schemes. When you open url with your app, new instance of app is launched and url 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) + } +} +``` + +You also can enable single instance lock for your app. In this case, when you open url with your app, new instance of app is not launched +and arguments are passed to already running instance. Check single instance lock guide for details. 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}, + SingleInstanceLock: &options.SingleInstanceLock{ + UniqueId: "e3984e08-28dc-4e3d-b70a-45e961589cdc", + OnSecondInstanceLaunch: app.onSecondInstanceLaunch, + }, + Bind: []interface{}{ + app, + }, + }) +} +``` + +### 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 (note that `%u` is important in Exec). 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=x-scheme-handler/myapp; +``` + +2. Prepare postInstall/postRemove scripts for your package. Example: + +```sh +# reload desktop database to load app in list of available +update-desktop-database /usr/share/applications +``` + +3. 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: ../appicon.svg + dst: /usr/share/icons/hicolor/scalable/apps/wails-open-file.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 +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 custom protocol scheme. When you open url 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) + } +} +``` + +You also can enable single instance lock for your app. In this case, when you open url with your app, new instance of app is not launched +and arguments are passed to already running instance. Check single instance lock guide for details. 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}, + SingleInstanceLock: &options.SingleInstanceLock{ + UniqueId: "e3984e08-28dc-4e3d-b70a-45e961589cdc", + OnSecondInstanceLaunch: app.onSecondInstanceLaunch, + }, + Bind: []interface{}{ + app, + }, + }) +} +``` diff --git a/website/i18n/ar/docusaurus-plugin-content-docs/current/guides/dynamic-assets.mdx b/website/i18n/ar/docusaurus-plugin-content-docs/current/guides/dynamic-assets.mdx new file mode 100644 index 000000000..242276641 --- /dev/null +++ b/website/i18n/ar/docusaurus-plugin-content-docs/current/guides/dynamic-assets.mdx @@ -0,0 +1,142 @@ +# Dynamic Assets + +:::info + +This does not work with vite v5.0.0+ and wails v2 due to changes in vite. Changes are planned in v3 to support similar functionality under vite v5.0.0+. If you need this feature, stay with vite v4.0.0+. See [issue 3240](https://github.com/wailsapp/wails/issues/3240) for details + +::: + +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/ar/docusaurus-plugin-content-docs/current/guides/file-association.mdx b/website/i18n/ar/docusaurus-plugin-content-docs/current/guides/file-association.mdx new file mode 100644 index 000000000..c91757699 --- /dev/null +++ b/website/i18n/ar/docusaurus-plugin-content-docs/current/guides/file-association.mdx @@ -0,0 +1,244 @@ +# 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) + } +} +``` + +You also can enable single instance lock for your app. In this case, when you open file with your app, new instance of app is not launched +and arguments are passed to already running instance. Check single instance lock guide for details. 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}, + SingleInstanceLock: &options.SingleInstanceLock{ + UniqueId: "e3984e08-28dc-4e3d-b70a-45e961589cdc", + OnSecondInstanceLaunch: app.onSecondInstanceLaunch, + }, + Bind: []interface{}{ + app, + }, + }) +} +``` + +### 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) + } +} +``` + +You also can enable single instance lock for your app. In this case, when you open file with your app, new instance of app is not launched +and arguments are passed to already running instance. Check single instance lock guide for details. 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}, + SingleInstanceLock: &options.SingleInstanceLock{ + UniqueId: "e3984e08-28dc-4e3d-b70a-45e961589cdc", + OnSecondInstanceLaunch: app.onSecondInstanceLaunch, + }, + Bind: []interface{}{ + app, + }, + }) +} +``` diff --git a/website/i18n/ar/docusaurus-plugin-content-docs/current/guides/frameless.mdx b/website/i18n/ar/docusaurus-plugin-content-docs/current/guides/frameless.mdx new file mode 100644 index 000000000..3845736f4 --- /dev/null +++ b/website/i18n/ar/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/ar/docusaurus-plugin-content-docs/current/guides/frontend.mdx b/website/i18n/ar/docusaurus-plugin-content-docs/current/guides/frontend.mdx new file mode 100644 index 000000000..ac087ee45 --- /dev/null +++ b/website/i18n/ar/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/ar/docusaurus-plugin-content-docs/current/guides/ides.mdx b/website/i18n/ar/docusaurus-plugin-content-docs/current/guides/ides.mdx new file mode 100644 index 000000000..e59e144ee --- /dev/null +++ b/website/i18n/ar/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/) and [Goland](https://www.jetbrains.com/go/). + +## 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/ar/docusaurus-plugin-content-docs/current/guides/linux-distro-support.mdx b/website/i18n/ar/docusaurus-plugin-content-docs/current/guides/linux-distro-support.mdx new file mode 100644 index 000000000..8b25c1575 --- /dev/null +++ b/website/i18n/ar/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/ar/docusaurus-plugin-content-docs/current/guides/linux.mdx b/website/i18n/ar/docusaurus-plugin-content-docs/current/guides/linux.mdx new file mode 100644 index 000000000..f833ceffa --- /dev/null +++ b/website/i18n/ar/docusaurus-plugin-content-docs/current/guides/linux.mdx @@ -0,0 +1,70 @@ +# 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) + +## GStreamer error when using Audio or Video elements + +If you are seeing the following error when including `