docs: sync documents (#2443)

Co-authored-by: misitebao <misitebao@users.noreply.github.com>
This commit is contained in:
github-actions[bot]
2023-03-11 17:57:56 +11:00
committed by GitHub
co-authored by misitebao
parent e339c40e85
commit 4cd873fecb
215 changed files with 5219 additions and 2810 deletions
+8
View File
@@ -411,5 +411,13 @@
"theme.SearchModal.placeholder": {
"message": "Rechercher des docs",
"description": "The placeholder of the input of the DocSearch pop-up modal"
},
"theme.docs.sidebar.closeSidebarButtonAriaLabel": {
"message": "Fermer la barre de navigation",
"description": "The ARIA label for close button of mobile sidebar"
},
"theme.docs.sidebar.toggleSidebarButtonAriaLabel": {
"message": "Ouvrir/fermer la barre de navigation",
"description": "The ARIA label for hamburger menu button of mobile navigation"
}
}
@@ -69,7 +69,7 @@ Il y avait beaucoup de demandes pour le support des menus natifs. Wails a enfin
Il y avait un grand nombre de demandes dans la v1 pour avoir un plus grand contrôle de la fenêtre elle-même. Je suis heureux d'annoncer qu'il y a de nouvelles API runtime spécifiquement pour cela. Il est riche en fonctionnalités et supporte les configurations multi-moniteurs. Il y a aussi une API de boite de dialogues améliorée : maintenant, vous pouvez avoir des boites de dialogues modernes et natives avec une configuration enrichie pour répondre à tous vos besoins.
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.
Il y a maintenant la possibilité de générer la configuration dee votre IDE avec votre projet. Cela signifie que si vous ouvrez votre projet dans un IDE pris en charge, il sera déjà configuré pour construire et déboguer votre application. Actuellement, VSCode est supporté mais nous espérons bientôt pouvoir prendre en charge d'autres IDE comme Goland.
```mdx-code-block
<div class="text--center">
@@ -82,17 +82,17 @@ There is now the option to generate IDE configuration along with your project. T
<br />
```
### No requirement to bundle assets
### Pas d'obligation de regrouper les ressources
A huge pain-point of v1 was the need to condense your entire application down to single JS & CSS files. I'm happy to announce that for v2, there is no requirement to bundle assets, in any way, shape or form. Want to load a local image? Use an `<img>` tag with a local src path. Want to use a cool font? Copy it in and add the path to it in your CSS.
Un énorme point de douleur de v1 était le besoin de condenser toute votre application en un seul fichier JS & CSS. Je suis heureux d'annoncer que, pour la v2, il n'y a pas d'obligation de regrouper des actifs, de quelque manière que ce soit. Vous voulez charger une image locale? Utilisez un tag `<img>` avec un chemin src local. Vous voulez utiliser une police de caractères cool ? Copiez-la et ajoutez le chemin d'accès dans votre CSS.
> Wow, that sounds like a webserver...
> Wow, ça ressemble à un serveur web...
Yes, it works just like a webserver, except it isn't.
Oui, il fonctionne comme un serveur web, sauf que ce n'est pas le cas.
> So how do I include my assets?
> Comment puis-je inclure mes ressources?
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.
Vous passez simplement un seul `embed.FS` qui contient tous vos actifs dans la configuration de votre application. Ils n'ont même pas besoin d'être dans le répertoire racine du projet - Wails s'assurera de le faire fonctionner pour vous.
### Nouvelle expérience de développement
@@ -107,20 +107,20 @@ You just pass a single `embed.FS` that contains all your assets into your applic
<br />
```
Now that assets don't need to be bundled, it's enabled a whole new development experience. The new `wails dev` command will build and run your application, but instead of using the assets in the `embed.FS`, it loads them directly from disk.
Maintenant que les actifs n'ont pas besoin d'être regroupés, cela permet de vivre une toute nouvelle expérience de développement. La nouvelle commande `wails dev` construira et exécutera votre application, mais au lieu d'utiliser les ressources embarquées dans `embed.FS`, il les charge directement à partir du disque.
It also provides the additional features:
Il fournit également les fonctionnalités supplémentaires :
- 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
- Rechargement à chaud - Toutes les modifications apportées aux ressources du frontend déclencheront le rechargement automatique du frontend de l'application
- Reconstruction automatique - Toutes les modifications apportées à votre code Go déclencheront une reconstruction automatique avant de relancer votre 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.
En plus de cela, un serveur web démarrera sur le port 34115. Cela servira votre application à n'importe quel navigateur qui s'y connecte. Tous les navigateurs Web connectés recevront les événements du système tels que le rechargement chaud en cas de modification.
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.
Avec Go, nous sommes habitués à traiter les structs dans nos applications. Il est souvent utile d'envoyer des structs sur notre site et de les utiliser dans notre application. Dans la v1, c'était un processus manuel et un peu lourd pour le développeur. Je suis heureux de vous annoncer qu'en v2, toute application exécutée en mode dev générera automatiquement des modèles TypeScript pour tous les structs qui sont des paramètres d'entrée ou de sortie aux méthodes Go liées au frontend. Cela permet un échange transparent de modèles de données entre les deux mondes.
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!
En plus de cela, un autre module JS est généré dynamiquement en enveloppant toutes vos méthodes liées. Cela fournit la JSDoc pour vos méthodes, en fournissant la complétion de code et des suggestions dans votre IDE. C'est vraiment cool quand vous obtenez des modèles de données auto-importés en appuyant sur la touche tab dans un module généré automatiquement à partir de votre code Go !
### Remote Templates
### Modèles distants
```mdx-code-block
<div class="text--center">
@@ -133,15 +133,15 @@ In addition to this, another JS module is dynamically generated wrapping all you
<br />
```
Getting an application up and running quickly was always a key goal for the Wails project. When we launched, we tried to cover a lot of the modern frameworks at the time: react, vue and angular. The world of frontend development is very opinionated, fast moving and hard to keep on top of! As a result, we found our base templates getting out of date pretty quickly and this caused a maintenance headache. It also meant that we didn't have cool modern templates for the latest and greatest tech stacks.
La mise en place rapide d'une application a toujours été un objectif clé pour le projet Wails. Quand nous avons lancé le projet, nous avons essayé de couvrir beaucoup de frameworks modernes à l'époque : react, vue et angular. Le monde du développement du frontend est rapide et difficile à garder à jour ! En conséquence, nous avons trouvé que nos modèles de base étaient obsolètes rapidement et cela a causé des maux de tête de maintenance. Cela signifie également que nous n'avons pas de modèles modernes et cool pour les dernières grandes technologies.
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!
Avec la v2, je voulais donner à la communauté la possibilité de créer et d'héberger des modèles vous-même, plutôt que que de compter sur le projet Wails. Maintenant vous pouvez créer des projets en utilisant des modèles supportés par la communauté! J'espère que cela inspirera les développeurs à créer un écosystème dynamique de modèles de projet. Je suis vraiment très excité par ce que notre communauté de développeurs peut créer !
### En 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.
Wails v2 représente une nouvelle fondation pour le projet. Le but de cette version est d'obtenir des commentaires sur la nouvelle approche et d'éliminer tout bug avant une version complète. Vos commentaires sont les bienvenus. Veuillez diriger tout commentaire vers le forum de discussion [v2 Bêta](https://github.com/wailsapp/wails/discussions/828) .
There were many twists and turns, pivots and u-turns to get to this point. This was due partly to early technical decisions that needed changing, and partly because some core problems we had spent time building workarounds for were fixed upstream: Gos embed feature is a good example. Fortunately, everything came together at the right time, and today we have the very best solution that we can have. I believe the wait has been worth it - this would not have been possible even 2 months ago.
Il y a eu beaucoup de détours, de virages et de retournements de situation pour atteindre ce but. Cela est dû en partie à des décisions techniques précoces qui devaient être modifiées, et en partie parce que certains problèmes de base pour lesquels nous avions passé du temps à construire des solutions de contournement ont été corrigés en amont : L'intégration de Go est un bon exemple. Heureusement, tout s'est réuni au bon moment, et aujourd'hui nous avons la meilleure solution que nous puissions avoir. Je pense que l'attente en valait la peine, cela n'aurait pas été possible il y a même 2 mois .
J'ai également besoin de remercier énormément les personnes suivantes :pray: parce que sans elles, cette version n'existerait tout simplement pas:
@@ -19,13 +19,13 @@ tags:
<br />
```
Today marks the first beta release of Wails v2 for Mac! It's taken quite a while to get to this point and I'm hoping that today's release will give you something that's reasonably useful. There have been a number of twists and turns to get to this point and I'm hoping, with your help, to iron out the crinkles and get the Mac port polished for the final v2 release.
Aujourd'hui marque la première version bêta de Wails v2 pour Mac! Il a fallu un certain temps pour arriver à ce point et j'espère que la version d'aujourd'hui vous donnera quelque chose de raisonnablement utile. Il y a eu un certain nombre de virages et détours pour atteindre ce point et j'espère, avec votre aide, pour aplanir les croupes et faire polir le portage sur Mac pour la version définitive de la v2.
You mean this isn't ready for production? For your use case, it may well be ready, but there are still a number of known issues so keep your eye on [this project board](https://github.com/wailsapp/wails/projects/7) and if you would like to contribute, you'd be very welcome!
Vous voulez dire que ce n'est pas prêt pour la production ? Pour votre cas d'utilisation, il peut être prêt, mais il y a encore un certain nombre de problèmes connus donc gardez votre œil sur [ce tableau de projet](https://github.com/wailsapp/wails/projects/7) et si vous souhaitez contribuer, vous serez les bienvenus !
So what's new for Wails v2 for Mac vs v1? Hint: It's pretty similar to the Windows Beta :wink:
Alors quoi de neuf pour Wails v2 pour Mac vs v1 ? Indice : C'est assez similaire à la bêta de Windows :wink:
### New Features
### Nouvelles fonctionnalités
```mdx-code-block
<div class="text--center">
@@ -38,47 +38,47 @@ So what's new for Wails v2 for Mac vs v1? Hint: It's pretty similar to the Windo
<br />
```
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.
Il y avait beaucoup de demandes pour le support des menus natifs. Wails a enfin ce qu'il vous faut. Les menus des applications sont maintenant disponibles et incluent la prise en charge de la plupart des fonctions natives de menu. Cela inclut les éléments de menu standard, les cases à cocher, les groupes radio, les sous-menus et les séparateurs.
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.
Il y avait un grand nombre de demandes dans la v1 pour avoir un plus grand contrôle de la fenêtre elle-même. Je suis heureux d'annoncer qu'il y a de nouvelles API runtime spécifiquement pour cela. Il est riche en fonctionnalités et supporte les configurations multi-moniteurs. Il y a aussi une API de boite de dialogues améliorée : maintenant, vous pouvez avoir des boites de dialogues modernes et natives avec une configuration enrichie pour répondre à tous vos besoins.
### Mac Specific Options
### Options spécifiques à Mac
In addition to the normal application options, Wails v2 for Mac also brings some Mac extras:
En plus des options d'application normales, Wails v2 pour Mac apporte également quelques options supplémentaires pour Mac :
- 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
- Faites de votre fenêtre une fenêtre funky et transparente, comme toutes les applications assez rapides !
- Barre de titre hautement personnalisable
- Nous prenons en charge les options NSAppearance pour l'application
- Configuration simple pour créer automatiquement un menu "À propos"
### No requirement to bundle assets
### Pas d'obligation de regrouper les ressources
A huge pain-point of v1 was the need to condense your entire application down to single JS & CSS files. I'm happy to announce that for v2, there is no requirement to bundle assets, in any way, shape or form. Want to load a local image? Use an `<img>` tag with a local src path. Want to use a cool font? Copy it in and add the path to it in your CSS.
Un énorme point de douleur de v1 était le besoin de condenser toute votre application en un seul fichier JS & CSS. Je suis heureux d'annoncer que, pour la v2, il n'y a pas d'obligation de regrouper des ressources, de quelque manière que ce soit. Vous voulez charger une image locale? Utilisez un tag `<img>` avec un chemin src local. Vous voulez utiliser une police de caractères cool ? Copiez-la et ajoutez le chemin d'accès dans votre CSS.
> Wow, that sounds like a webserver...
> Wow, ça ressemble à un serveur web...
Yes, it works just like a webserver, except it isn't.
Oui, il fonctionne comme un serveur web, sauf que ce n'est pas le cas.
> So how do I include my assets?
> Comment puis-je inclure mes ressources?
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.
Vous passez simplement un seul `embed.FS` qui contient tous vos actifs dans la configuration de votre application. Ils n'ont même pas besoin d'être dans le répertoire racine du projet - Wails s'assurera de le faire fonctionner pour vous.
### New Development Experience
### Nouvelle expérience de développement
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.
Maintenant que les actifs n'ont pas besoin d'être regroupés, cela permet de vivre une toute nouvelle expérience de développement. La nouvelle commande `wails dev` construira et exécutera votre application, mais au lieu d'utiliser les ressources embarquées dans `embed.FS`, il les charge directement à partir du disque.
It also provides the additional features:
Il fournit également les fonctionnalités supplémentaires :
- 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
- Rechargement à chaud - Toutes les modifications apportées aux ressources du frontend déclencheront le rechargement automatique du frontend de l'application
- Reconstruction automatique - Toutes les modifications apportées à votre code Go déclencheront une reconstruction automatique avant de relancer votre 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.
En plus de cela, un serveur web démarrera sur le port 34115. Cela servira votre application à n'importe quel navigateur qui s'y connecte. Tous les navigateurs Web connectés recevront les événements du système tels que le rechargement chaud en cas de modification.
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.
Avec Go, nous sommes habitués à traiter avec des structs dans nos applications. Il est souvent utile d'envoyer des structs sur notre site et de les utiliser dans notre application. Dans la v1, c'était un processus manuel et un peu lourd pour le développeur. Je suis heureux de vous annoncer qu'en v2, toute application exécutée en mode dev générera automatiquement des modèles TypeScript pour tous les structs qui sont des paramètres d'entrée ou de sortie aux méthodes Go liées au frontend. Cela permet un échange transparent de modèles de données entre les deux mondes.
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!
En plus de cela, un autre module JS est généré dynamiquement en enveloppant toutes vos méthodes liées. Cela fournit la JSDoc pour vos méthodes, en fournissant la complétion de code et des suggestions dans votre IDE. C'est vraiment cool quand vous obtenez des modèles de données auto-importés en appuyant sur la touche tab dans un module généré automatiquement à partir de votre code Go !
### Remote Templates
### Modèles distants
```mdx-code-block
<div class="text--center">
@@ -91,13 +91,13 @@ In addition to this, another JS module is dynamically generated wrapping all you
<br />
```
Getting an application up and running quickly was always a key goal for the Wails project. When we launched, we tried to cover a lot of the modern frameworks at the time: react, vue and angular. The world of frontend development is very opinionated, fast moving and hard to keep on top of! As a result, we found our base templates getting out of date pretty quickly and this caused a maintenance headache. It also meant that we didn't have cool modern templates for the latest and greatest tech stacks.
La mise en place rapide d'une application a toujours été un objectif clé pour le projet Wails. Quand nous avons lancé le projet, nous avons essayé de couvrir beaucoup de frameworks modernes à l'époque : react, vue et angular. Le monde du développement du frontend évolue très vite et est difficile à garder à jour ! En conséquence, nous avons trouvé que nos modèles de base étaient obsolètes rapidement et cela a causé des maux de tête de maintenance. Cela signifie également que nous n'avons pas de modèles modernes et cool pour les dernières grandes technologies.
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!
Avec la v2, je voulais donner à la communauté la possibilité de créer et d'héberger des modèles vous-même, plutôt que que de compter sur le projet Wails. Maintenant vous pouvez créer des projets en utilisant des modèles supportés par la communauté! J'espère que cela inspirera les développeurs à créer un écosystème de modèles de projet. Je suis vraiment très excité par ce que notre communauté de développeurs peut créer !
### Native M1 Support
### Prise en charge native de M1
Thanks to the amazing support of [Mat Ryer](https://github.com/matryer/), the Wails project now supports M1 native builds:
Grâce au support incroyable de [Mat Ryer](https://github.com/matryer/), le projet Wails prend maintenant en charge les versions natives de M1 :
```mdx-code-block
<div class="text--center">
@@ -110,7 +110,7 @@ Thanks to the amazing support of [Mat Ryer](https://github.com/matryer/), the Wa
<br />
```
You can also specify `darwin/amd64` as a target too:
Vous pouvez également spécifier `darwin/amd64` comme cible :
```mdx-code-block
<div class="text--center">
@@ -123,7 +123,7 @@ You can also specify `darwin/amd64` as a target too:
<br />
```
Oh, I almost forgot.... you can also do `darwin/universal`.... :wink:
Oh, j'ai presque oublié.... vous pouvez aussi faire `darwin/universal`.... :wink:
```mdx-code-block
<div class="text--center">
@@ -136,9 +136,9 @@ Oh, I almost forgot.... you can also do `darwin/universal`.... :wink:
<br />
```
### Cross Compilation to Windows
### Cross Compilation sur Windows
Because Wails v2 for Windows is pure Go, you can target Windows builds without docker.
Parce que Wails v2 pour Windows est pur Go, vous pouvez cibler les versions Windows sans docker.
```mdx-code-block
<div class="text--center">
@@ -153,18 +153,18 @@ Because Wails v2 for Windows is pure Go, you can target Windows builds without d
### WKWebView Renderer
V1 relied on a (now deprecated) WebView component. V2 uses the most recent WKWebKit component so expect the latest and greatest from Apple.
V1 s'est appuyé sur un composant WebView (maintenant obsolète). V2 utilise le composant WKWebKit le plus récent, donc attendez-vous au meilleur d'Apple.
### In Conclusion
### En 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.
Comme je l'ai dit dans les notes de version de Windows, Wails v2 représente une nouvelle base pour le projet. Le but de cette version est d'obtenir des commentaires sur la nouvelle approche et d'éliminer tout bug avant une version complète. Vos commentaires sont les bienvenus! Veuillez diriger tout commentaire vers le forum de discussion [v2 Bêta](https://github.com/wailsapp/wails/discussions/828) .
And finally, I'd like to give a special thank you to all the [project sponsors](/credits#sponsors), including [JetBrains](https://www.jetbrains.com?from=Wails), whose support drive the project in many ways behind the scenes.
Enfin, je voudrais remercier tout particulièrement tous les [sponsors du projet](/credits#sponsors), y compris [JetBrains](https://www.jetbrains.com?from=Wails), dont le soutien anime le projet de plusieurs manières en coulisses.
I look forward to seeing what people build with Wails in this next exciting phase of the project!
J'ai hâte de voir ce que les gens construisent avec Wails dans cette prochaine phase excitante du projet!
Lea.
PS: Linux users, you're next!
PS: Les utilisateurs de Linux, vous êtes les prochains !
PPS: If you or your company find Wails useful, please consider [sponsoring the project](https://github.com/sponsors/leaanthony). Thanks!
PPS : Si vous ou votre entreprise trouvez Wails utile, veuillez envisager [de parrainer le projet](https://github.com/sponsors/leaanthony). Merci !
@@ -19,9 +19,9 @@ tags:
<br />
```
I'm pleased to finally announce that Wails v2 is now in beta for Linux! It is somewhat ironic that the very first experiments with v2 was on Linux and yet it has ended up as the last release. That being said, the v2 we have today is very different from those first experiments. So without further ado, let's go over the new features:
J'ai le plaisir d'annoncer enfin que Wails v2 est maintenant en version bêta pour Linux ! Il est quelque peu ironique que les toutes premières expériences avec v2 aient été sous Linux et pourtant elles ont fini comme la dernière version. Cela dit, la v2 que nous avons aujourd'hui est très différente de ces premières expériences. Donc, sans perdre plus de temps, passons en revue les nouvelles fonctionnalités :
### New Features
### Nouvelles fonctionnalités
```mdx-code-block
<div class="text--center">
@@ -34,38 +34,38 @@ I'm pleased to finally announce that Wails v2 is now in beta for Linux! It is so
<br />
```
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.
Il y avait beaucoup de demandes pour le support des menus natifs. Wails a enfin ce qu'il vous faut. Les menus des applications sont maintenant disponibles et incluent la prise en charge de la plupart des fonctions natives de menu. Cela inclut les éléments de menu standard, les cases à cocher, les groupes radio, les sous-menus et les séparateurs.
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.
Il y avait un grand nombre de demandes dans la v1 pour avoir un plus grand contrôle de la fenêtre elle-même. Je suis heureux d'annoncer qu'il y a de nouvelles API runtime spécifiquement pour cela. Il est riche en fonctionnalités et supporte les configurations multi-moniteurs. Il y a aussi une API de boite de dialogues améliorée : maintenant, vous pouvez avoir des boites de dialogues modernes et natives avec une configuration enrichie pour répondre à tous vos besoins.
### No requirement to bundle assets
### Pas d'obligation de regrouper les ressources
A huge pain-point of v1 was the need to condense your entire application down to single JS & CSS files. I'm happy to announce that for v2, there is no requirement to bundle assets, in any way, shape or form. Want to load a local image? Use an `<img>` tag with a local src path. Want to use a cool font? Copy it in and add the path to it in your CSS.
Un énorme point de douleur de v1 était le besoin de condenser toute votre application en un seul fichier JS & CSS. Je suis heureux d'annoncer que, pour la v2, il n'y a pas d'obligation de regrouper des ressources, de quelque manière que ce soit. Vous voulez charger une image locale? Utilisez un tag `<img>` avec un chemin src local. Vous voulez utiliser une police de caractères cool ? Copiez-la et ajoutez le chemin d'accès dans votre CSS.
> Wow, that sounds like a webserver...
> Wow, ça ressemble à un serveur web...
Yes, it works just like a webserver, except it isn't.
Oui, il fonctionne comme un serveur web, sauf que ce n'est pas le cas.
> So how do I include my assets?
> Comment puis-je inclure mes ressources?
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.
Vous passez simplement un seul `embed.FS` qui contient tous vos actifs dans la configuration de votre application. Ils n'ont même pas besoin d'être dans le répertoire racine du projet - Wails s'assurera de le faire fonctionner pour vous.
### New Development Experience
### Nouvelle expérience de développement
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.
Maintenant que les actifs n'ont pas besoin d'être regroupés, cela permet de vivre une toute nouvelle expérience de développement. La nouvelle commande `wails dev` construira et exécutera votre application, mais au lieu d'utiliser les ressources embarquées dans `embed.FS`, il les charge directement à partir du disque.
It also provides the additional features:
Il fournit également les fonctionnalités supplémentaires :
- 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
- Rechargement à chaud - Toutes les modifications apportées aux ressources du frontend déclencheront le rechargement automatique du frontend de l'application
- Reconstruction automatique - Toutes les modifications apportées à votre code Go déclencheront une reconstruction automatique avant de relancer votre 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.
En plus de cela, un serveur web démarrera sur le port 34115. Cela servira votre application à n'importe quel navigateur qui s'y connecte. Tous les navigateurs Web connectés recevront les événements du système tels que le rechargement chaud en cas de modification.
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.
Avec Go, nous sommes habitués à traiter avec des structs dans nos applications. Il est souvent utile d'envoyer des structs sur notre site et de les utiliser dans notre application. Dans la v1, c'était un processus manuel et un peu lourd pour le développeur. Je suis heureux de vous annoncer qu'en v2, toute application exécutée en mode dev générera automatiquement des modèles TypeScript pour tous les structs qui sont des paramètres d'entrée ou de sortie aux méthodes Go liées au frontend. Cela permet un échange transparent de modèles de données entre les deux mondes.
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!
En plus de cela, un autre module JS est généré dynamiquement en enveloppant toutes vos méthodes liées. Cela fournit la JSDoc pour vos méthodes, en fournissant la complétion de code et des suggestions dans votre IDE. C'est vraiment cool quand vous obtenez des modèles de données auto-importés en appuyant sur la touche tab dans un module généré automatiquement à partir de votre code Go !
### Remote Templates
### Modèles distants
```mdx-code-block
<div class="text--center">
@@ -78,13 +78,13 @@ In addition to this, another JS module is dynamically generated wrapping all you
<br />
```
Getting an application up and running quickly was always a key goal for the Wails project. When we launched, we tried to cover a lot of the modern frameworks at the time: react, vue and angular. The world of frontend development is very opinionated, fast moving and hard to keep on top of! As a result, we found our base templates getting out of date pretty quickly and this caused a maintenance headache. It also meant that we didn't have cool modern templates for the latest and greatest tech stacks.
La mise en place rapide d'une application a toujours été un objectif clé pour le projet Wails. Quand nous avons lancé le projet, nous avons essayé de couvrir beaucoup de frameworks modernes à l'époque : react, vue et angular. Le monde du développement du frontend évolue très vite et est difficile à garder à jour ! En conséquence, nous avons trouvé que nos modèles de base étaient obsolètes rapidement et cela a causé des maux de tête de maintenance. Cela signifie également que nous n'avons pas de modèles modernes et cool pour les dernières grandes technologies.
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!
Avec la v2, je voulais donner à la communauté la possibilité de créer et d'héberger des modèles vous-même, plutôt que que de compter sur le projet Wails. Maintenant vous pouvez créer des projets en utilisant des modèles supportés par la communauté! J'espère que cela inspirera les développeurs à créer un écosystème de modèles de projet. Je suis vraiment très excité par ce que notre communauté de développeurs peut créer !
### Cross Compilation to Windows
### Cross Compilation sur Windows
Because Wails v2 for Windows is pure Go, you can target Windows builds without docker.
Parce que Wails v2 pour Windows est pur Go, vous pouvez cibler les versions Windows sans docker.
```mdx-code-block
<div class="text--center">
@@ -97,18 +97,18 @@ Because Wails v2 for Windows is pure Go, you can target Windows builds without d
<br />
```
### In Conclusion
### En 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.
Comme je l'ai dit dans les notes de version de Windows, Wails v2 représente une nouvelle base pour le projet. Le but de cette version est d'obtenir des commentaires sur la nouvelle approche et d'éliminer tout bug avant une version complète. Vos commentaires sont les bienvenus! Veuillez diriger tout commentaire vers le forum de discussion [v2 Bêta](https://github.com/wailsapp/wails/discussions/828) .
Linux is **hard** to support. We expect there to be a number of quirks with the beta. Please help us to help you by filing detailed bug reports!
Linux est **difficile** à supporter. Nous espérons qu'il y aura un certain nombre de bizarreries avec la bêta. Veuillez nous aider à vous aider en remplissant des rapports de bogue détaillés !
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.
Enfin J'aimerais remercier tout particulièrement tous les [sponsors du projet](/credits#sponsors) dont le soutien propulse le projet de plusieurs manières en coulisses.
I look forward to seeing what people build with Wails in this next exciting phase of the project!
J'ai hâte de voir ce que les gens construisent avec Wails dans cette prochaine phase excitante du projet!
Lea.
PS: The v2 release isn't far off now!
PS: La sortie de la version v2 n'est plus pour très longtemps.
PPS: If you or your company find Wails useful, please consider [sponsoring the project](https://github.com/sponsors/leaanthony). Thanks!
PPS : Si vous ou votre entreprise trouvez Wails utile, veuillez envisager [de parrainer le projet](https://github.com/sponsors/leaanthony). Merci !
@@ -20,76 +20,76 @@ tags:
# C'est là!
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.
Aujourd'hui marque la sortie de [Wails](https://wails.io) v2. Il y a environ 18 mois depuis la première version alpha de la v2 et environ un an depuis la première version bêta. Je suis vraiment reconnaissant à toutes les personnes impliquées dans l'évolution du projet.
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.
Une partie de la raison pour laquelle il a fallu aussi longtemps était dû à la volonté d'obtenir une version bien stable et complète avant de l'appeler officiellement v2. La vérité est qu'il n'y a jamais un moment parfait pour taguer une version - il y a toujours des problèmes en suspens ou une fonctionnalité de plus pour y ajouter. Taguer une version majeure imparfaite ça arrive, cependant, ça permet de fournir un peu de stabilité pour les utilisateurs du projet, ainsi qu'un peu de réinitialisation pour les développeurs.
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.
Cette version contient bien plus que ce à quoi je m'attendais. J'espère qu'il vous donnera autant de plaisir qu'il nous en a donné de le développer.
# Qu'est-ce 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).
Si vous n'êtes pas familier avec Wails, c'est un projet qui permet aux programmeurs Go de fournir des interfaces pour leurs programmes Go en utilisant des technologies web. C'est une alternative Go à Electron. Beaucoup plus d'informations peuvent être trouvées sur le site [officiel](https://wails.io/docs/introduction).
# Quelles sont les nouveautés ?
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:
La version v2 est un énorme bond en avant pour le projet, en abordant la plupart des points douloureux de la v1. Si vous n'avez lu aucun des articles de blog sur la version bêta pour [macOS](/blog/wails-v2-beta-for-mac), [Windows](/blog/wails-v2-beta-for-windows) ou [Linux](/blog/wails-v2-beta-for-linux), alors je vous encourage à le faire car il couvre tous les changements majeurs plus en détail. En sumé:
- 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.
- Le composant Webview2 pour Windows qui prend en charge les standards Web modernes et les capacités de débogage.
- [Thème sombre / clair](/docs/reference/options#theme) + [thème personnalisé](/docs/reference/options#customtheme) sur Windows.
- Windows n'a plus besoin de CGO.
- Prise en charge des modèles de projet Svelte, Vue, React, Preact, Lit & Vanilla.
- [Intégration de Vite](https://vitejs.dev/) fournissant un environnement de développement de rechargement à chaud pour votre application.
- Support des [menus](/docs/guides/application-development#application-menu) et [boites de dialogues](/docs/reference/runtime/dialog) natifs.
- Effets de transparence de fenêtre native pour [Windows](/docs/reference/options#windowistranslucent) et [macOS](/docs/reference/options#windowistranslucent-1). Prise en charge des fonds Mica & Acrylic.
- Générez facilement un [installateur NSIS](/docs/guides/windows-installer) pour les déploiements Windows.
- Une riche bibliothèque [runtime](/docs/reference/runtime/intro) fournissant des méthodes utilitaires pour la manipulation de fenêtres, évènements, les boites de dialogues, les menus et les logs.
- Prise en charge pour le [masquage](/docs/guides/obfuscated) de votre application en utilisant [garble](https://github.com/burrowers/garble).
- Prise en charge de la compression de votre application en utilisant [UPX](https://upx.github.io/).
- Génération automatique en TypeScript de structures Go. Plus d'infos [ici](/docs/howdoesitwork#calling-bound-go-methods).
- Aucune autre bibliothèque ou DLL ne doit être fournie avec votre application. Pour n'importe quelle plateforme.
- Pas d'obligation de regrouper les actifs en frontend. Il vous suffit developper votre application comme toute autre application web.
# Crédits & Remerciements
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.
Le passage à la v2 a été un effort énorme. Il y a eu ~2.2K commits par 89 contributeurs entre l'alpha initial et la publication aujourd'hui, et plusieurs, beaucoup d'autres qui ont fourni des traductions, des tests, des commentaires et de l'aide sur les forums de discussion ainsi que le suivi des problèmes. Je suis si incroyablement reconnaissant de chacun de vous. Je voudrais également remercier tout particulièrement tous les commanditaires du projet qui ont fourni des conseils, des conseils et des commentaires. Tout ce que vous faites est grandement apprécié.
There are a few people I'd like to give special mention to:
Il y a quelques personnes auxquelles je voudrais donner une mention spéciale à:
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!
Tout d'abord, un **grand merci** à [@stffabi](https://github.com/stffabi) qui a fourni tant de contributions dont nous bénéficions tous, en plus de fournir un grand soutien sur de nombreuses questions. Il a fourni quelques fonctionnalités clés comme le support du serveur de développement externe qui a transformé notre offre de mode de développement en nous permettant de nous brancher sur les superpouvoirs de [Vite](https://vitejs.dev/). Il est juste de dire que Wails v2 serait une version beaucoup moins excitante sans ses [contributions incroyables](https://github.com/wailsapp/wails/commits?author=stffabi&since=2020-01-04). Merci beaucoup @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!
Je voudrais également adresser un cri énorme à [@misitebao](https://github.com/misitebao) qui a inlassablement maintenu le site web en plus de fournir des traductions chinoises, de gérer Crowdin et d'aider les nouveaux traducteurs à se mettre à la hauteur. C'est une tâche extrêmement importante, et je suis extrêmement reconnaissant pour tout le temps et les efforts consentis dans cette tâche! Tu assures !
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!
Enfin, et surtout, un grand merci à Mat Ryer qui a fourni des conseils et du soutien pendant le développement de la v2. Écrire xBar ensemble en utilisant une Alpha de v2 était utile pour façonner la direction de v2, en plus de me donner une compréhension de certains défauts de conception dans les premières versions. Je suis heureux de vous annoncer qu'à partir d'aujourd'hui, nous allons commencer à porter xBar sur Wails v2, et il deviendra l'application phare du projet. Bravo Mat!
# Leçons apprises
There are a number of lessons learnt in getting to v2 that will shape development moving forward.
Il y a un certain nombre de leçons apprises à se rendre à la version 2 qui façonneront les futurs développements.
## Des versions plus petites, plus rapides et ciblées
In the course of developing v2, there were many features and bug fixes that were developed on an ad-hoc basis. This led to longer release cycles and were harder to debug. Moving forward, we are going to create releases more often that will include a reduced number of features. A release will involve updates to documentation as well as thorough testing. Hopefully, these smaller, quicker, focussed releases will lead to fewer regressions and better quality documentation.
Au cours du développement de la version 2, de nombreuses fonctionnalités et corrections de bogues ont été développées sur une base ad-hoc. Cela a entraîné des cycles de publication plus longs et a été plus difficile à déboger. Dans le futur, nous allons créer des versions plus souvent qui incluront un nombre réduit de fonctionnalités. Une version implique des mises à jour de la documentation ainsi que des tests approfondis. Espérons que ces versions plus petites, plus rapides et ciblées conduiront à moins de régressions et à une meilleure qualité de la documentation.
## Encourager l'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).
Lors du lancement de ce projet, je voulais aider immédiatement tous ceux qui avaient un problème. Les problèmes étaient "personnels" et je voulais les résoudre le plus rapidement possible. Ceci n'est pas durable et va finalement à l'encontre de la longévité du projet. En avançant, je donnerai plus de place aux gens pour s'impliquer dans la réponse aux questions et vis à vis du triage. Il serait bon d'obtenir des outils pour aider à cela, donc si vous avez des suggestions, veuillez vous joindre à la discussion [ici](https://github.com/wailsapp/wails/discussions/1855).
## Apprendre à dire non
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.
Plus il y a de personnes qui s'engagent dans un projet Open Source, plus il y aura de requêtes pour des fonctionnalités supplémentaires qui peuvent ou non être utiles à la majorité des personnes. Ces fonctionnalités prendront un temps initial de développement et de débogage, et entraîneront un coût de maintenance continu à partir de ce moment. Je suis moi-même coupable de cela, souvent vouloir "remuer terre et mer" plutôt que de fournir la caractéristique minimale viable. Dorénavant, nous devrons dire "Non" un peu plus pour ajouter des fonctionnalités de base et concentrer nos énergies sur un moyen de permettre aux développeurs de fournir eux-mêmes cette fonctionnalité. Nous examinons sérieusement les plugins pour ce scénario. Cela permettra à tous de prolonger le projet comme bon leur semble, tout en fournissant un moyen facile de contribuer au projet.
# Un regard tourné vers l'avenir
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.
Il y a tant de fonctionnalités fondamentales que nous envisageons d'ajouter à Wails dans le prochain cycle de développement majeur. La [feuille de route](https://github.com/wailsapp/wails/discussions/1484) est pleine d'idées intéressantes, et je suis impatient de commencer à y travailler. Une des grandes demandes a été le support de plusieurs fenêtres. C'est délicat et pour le faire correctement, et nous pourrions avoir besoin d'envisager de fournir une API alternative, car la version courante n'a pas été conçue en gardant cela à l'esprit. Sur la base de quelques idées préliminaires et de commentaires, je pense que vous aimerez où nous allons aller.
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!
Personnellement, je suis très excité à l'idée de faire fonctionner des applications Wails sur mobile. Nous avons déjà un projet de démo qui montre qu'il est possible d'exécuter une application Wails sur Android, donc je suis vraiment impatient d'explorer où nous pouvons aller avec ceci!
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.
Un dernier point que je voudrais soulever est celui de la parité des fonctionnalités. Cela fait longtemps que nous n'ajouterions rien au projet sans un support cross-plateforme complet. Bien que cela se soit avéré (principalement) réalisable jusqu'à présent, il a vraiment repoussé le projet dans la publication de nouvelles fonctionnalités. A présent, nous adopterons une approche légèrement différente : toute nouvelle fonctionnalité qui ne peut pas être publiée immédiatement pour toutes les plates-formes sera publiée sous une configuration expérimentale ou une API. Cela permet aux adopteurs précoces sur certaines plates-formes d'essayer la fonctionnalité et de fournir des commentaires qui alimenteront la conception finale de la fonctionnalité. Ceci, bien sûr, signifie qu'il n'y a aucune garantie de stabilité de l'API tant qu'il n'est pas entièrement supporté par toutes les plateformes sur lesquelles il peut être supporté, mais au moins cela débloquera le développement.
# Derniers Mots
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.
Je suis vraiment fier de ce que nous avons pu réaliser avec la version V2. C'est incroyable de voir ce que les gens ont déjà pu construire en utilisant les versions bêta jusqu'à présent. Applications de qualité comme [Varly](https://varly.app/), [Surge](https://getsurge.io/) et [October](https://october.utf9k.net/). Je vous encourage à aller voir ces projets.
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.
Cette version a été obtenue grâce au travail acharné de nombreux contributeurs. Bien qu'il soit gratuit à télécharger et à utiliser, il n'a pas rien coûté. Ne vous y trompez pas, ce projet a eu un coût considérable. Ce n'est pas seulement mon temps et le temps de chaque contributeur, mais aussi le coût de l'absence des amis et des familles de chacune de ces personnes aussi. C'est pourquoi je suis extrêmement reconnaissant pour chaque seconde qui a été consacré à faire de ce projet se produire. Plus nous avons de contributeurs, plus cet effort peut être réparti et le plus nous pourrons faire ensemble. Je voudrais vous encourager tous à choisir une chose que vous pouvez contribuer, si elle confirme le bogue de quelqu'un, suggérer un correctif, faire un changement de documentation ou aider quelqu'un qui en a besoin. Toutes ces petites choses ont un impact énorme! Ça serait si génial si vous aussi faisiez aussi parti de l'histoire de la v3.
Profitez bien!
@@ -0,0 +1,184 @@
---
slug: the-road-to-wails-v3
title: The Road to Wails v3
authors:
- leaanthony
tags:
- wails
- v3
---
```mdx-code-block
<div class="text--center">
<img
src={require("@site/static/img/blog/multiwindow.webp").default}
width="90%"
/>
</div>
<br />
```
# 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,
&dash; 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.
@@ -22,4 +22,5 @@ La [liste définitive](https://github.com/wailsapp/awesome-wails) de liens relat
- [Groupe QQ pour la communauté chinoise de Wails](https://qm.qq.com/cgi-bin/qm/qr?k=PmIURne5hFGNd7QWzW5qd6FV-INEjNJv&jump_from=webapi) - Numéro de groupe : 1067173054
## Autres tutoriels et articles
- [Construction d'un Panneau d'Affichage](https://blog.customct.com/building-bulletin-board)
@@ -0,0 +1,10 @@
# BulletinBoard
```mdx-code-block
<p style={{ "text-align": "center" }}>
<img src={require("@site/static/img/showcase/bboard.webp").default} />
<br />
</p>
```
The [BulletinBoard](https://github.com/raguay/BulletinBoard) application is a versital message board for static messages or dialogs to get information from the user for a script. It has a TUI for creating new dialogs that can latter be used to get information from the user. It's design is to stay running on your system and show the information as needed and then hide away. I have a process for watching a file on my system and sending the contents to BulletinBoard when changed. It works great with my workflows. There is also an [Alfred workflow](https://github.com/raguay/MyAlfred/blob/master/Alfred%205/EmailIt.alfredworkflow) for sending information to the program. The workflow is also for working with [EmailIt](https://github.com/raguay/EmailIt).
@@ -7,4 +7,4 @@
</p>
```
[EmailIt](https://github.com/raguay/EmailIt/) is a Wails 2 program that is a markdown based email sender only with nine notepads, scripts to manipulate the text, and templates. It also has a builtin [Node-Red](https://nodered.org/) server, scripts terminal, and the [ScriptBar](https://github.com/raguay/ScriptBarApp) program for displaying results from Node-Red or a script on your system. Documentation is very scarce, but the programs works. Its built using Wails2 and Svelte, and the download is a universal macOS application.
[EmailIt](https://github.com/raguay/EmailIt/) is a Wails 2 program that is a markdown based email sender only with nine notepads, scripts to manipulate the text, and templates. It also has a scripts terminal to run scripts in EmailIt on files in your system. The scripts and templates can be used from the commandline itself or with the Alfred, Keyboard Maestro, Dropzone, or PopClip extensions. It also supports scripts and themes downloaded form GitHub. Documentation is not complete, but the programs works. Its built using Wails2 and Svelte, and the download is a universal macOS application.
@@ -0,0 +1,10 @@
# hiposter
```mdx-code-block
<p style={{ "text-align": "center" }}>
<img src={require("@site/static/img/showcase/hiposter.webp").default} />
<br />
</p>
```
[hiposter](https://github.com/obity/hiposter) is a simple and efficient http API testing client tool. Based on Wails, Go and sveltejs.
@@ -9,6 +9,6 @@
</p>
```
[Modal File Manager](https://github.com/raguay/ModalFileManager) est un gestionnaire de fichiers à double volet utilisant des technologies web. Mon design original était basé sur NW.js et peut être trouvé [ici](https://github.com/raguay/ModalFileManager-NWjs). Cette version utilise le même code frontend basé sur Svelte (mais il a été grandement modifié depuis le départ de NW.js), mais le backend est une implémentation de [Wails 2](https://wails.io/). En utilisant cette implémentation, je n'utilise plus de commandes en ligne de commande `rm`, `cp`, etc. Il est entièrement codé en utilisant Go et fonctionne beaucoup plus rapidement que les versions précédentes.
[Modal File Manager](https://github.com/raguay/ModalFileManager) est un gestionnaire de fichiers à double volet utilisant des technologies web. Mon design original était basé sur NW.js et peut être trouvé [ici](https://github.com/raguay/ModalFileManager-NWjs). Cette version utilise le même code frontend basé sur Svelte (mais il a été grandement modifié depuis le départ de NW.js), mais le backend est une implémentation de [Wails 2](https://wails.io/). By using this implementation, I no longer use command line `rm`, `cp`, etc. commands, but a git install has to be on the system to download themes and extensions. Il est entièrement codé en utilisant Go et fonctionne beaucoup plus rapidement que les versions précédentes.
Ce gestionnaire de fichiers est conçu autour du même principe que Vim: l'état est contrôlé par des actions via le clavier. Le nombre d'états n'est pas fixe, mais très programmable. Par conséquent, un nombre infini de configurations de clavier qui peuvent être créées et utilisées. C'est la principale différence par rapport aux autres gestionnaires de fichiers.
Ce gestionnaire de fichiers est conçu autour du même principe que Vim: l'état est contrôlé par des actions via le clavier. Le nombre d'états n'est pas fixe, mais très programmable. Par conséquent, un nombre infini de configurations de clavier qui peuvent être créées et utilisées. C'est la principale différence par rapport aux autres gestionnaires de fichiers. There are themes and extensions available to download from GitHub.
@@ -7,4 +7,4 @@
</p>
```
[Barre de scripts](https://GitHub.com/raguay/ScriptBarApp) est un programme pour afficher la sortie du serveur [Node-Red](https://nodered.org) intégré dans l'application [EmailIt](https://GitHub.com/raguay/EmailIt). Il affiche également la sortie des scripts sur votre système. ScriptBar ne les met pas dans la barre de menus, mais les a tous dans une fenêtre convenable pour une visualisation facile. Vous pouvez avoir plusieurs onglets pour voir plusieurs choses différentes. Vous pouvez également conserver les liens vers vos sites Web les plus visités.
[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. Il affiche également la sortie des scripts sur votre système. ScriptBar ne les met pas dans la barre de menus, mais les a tous dans une fenêtre convenable pour une visualisation facile. Vous pouvez avoir plusieurs onglets pour voir plusieurs choses différentes. Vous pouvez également conserver les liens vers vos sites Web les plus visités.
@@ -0,0 +1,19 @@
# Minecraft launcher for WarMine
```mdx-code-block
<p style={{ "text-align": "center" }}>
<img
src={require("@site/static/img/showcase/warmine1.png").default}
/>
<img
src={require("@site/static/img/showcase/warmine2.png").default}
/>
<br />
</p>
```
[Minecraft launcher for WarMine](https://warmine.ru/) is a Wails application, that allows you to easily join modded game servers and manage your game accounts.
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.
@@ -27,6 +27,7 @@ Si vous n'êtes pas sûr d'un modèle, inspectez `package.json` et `wails.json`
- [wails-vite-vue-the-works](https://github.com/codydbentley/wails-vite-vue-the-works) - Vue 3 TypeScript avec Vite, Vuex, Vue Router, Sass, et ESLint + Prettier
- [wails-template-quasar-js](https://github.com/sgosiaco/wails-template-quasar-js) - Un modèle utilisant JavaScript + Quasar V2 (Vue 3, Vite, Sass, Pinia, ESLint, Prettier)
- [wails-template-quasar-ts](https://github.com/sgosiaco/wails-template-quasar-ts) - Un modèle utilisant TypeScript + Quasar V2 (Vue 3, Vite, Sass, Pinia, ESLint, Prettier, Composition API avec &lt;script setup&gt;)
- [wails-template-naive](https://github.com/tk103331/wails-template-naive) - Modèle Wails basé sur Naive UI (Librairie de composants Vue 3)
## Angular
@@ -57,7 +57,7 @@ import TabItem from "@theme/TabItem";
Wails a besoin que <a href="https://developer.microsoft.com/en-us/microsoft-edge/webview2/">WebView2</a> runtime soit installé. Certaines installations de Windows auront déjà installé cette fonctionnalité. Vous pouvez vérifier en utilisant la commande <code>wails doctor</code>.
</TabItem>
<TabItem value={"Linux"}>
Linux a besoin de <code>gcc</code> build tools plus <code>libgtk3</code> et <code>libwebkit</code>. Plutôt que de lister une tonne de commandes pour différentes distributions, Wails peut essayer de déterminer ce que sont les commandes d'installation pour votre distribution spécifique. Exécutez <code>wails doctor</code> après l'installation pour voir de quelles dépendances vous avez besoin. Si votre gestionnaire de distribution/paquet n'est pas pris en charge, veuillez consulter le guide <a href={"/docs/guides/linux-distro-support"}>Ajouter une distribution Linux</a>.
Linux requires the standard <code>gcc</code> build tools plus <code>libgtk3</code> and <code>libwebkit</code>. Plutôt que de lister une tonne de commandes pour différentes distributions, Wails peut essayer de déterminer ce que sont les commandes d'installation pour votre distribution spécifique. Exécutez <code>wails doctor</code> après l'installation pour voir de quelles dépendances vous avez besoin. Si votre gestionnaire de distribution/paquet n'est pas pris en charge, veuillez consulter le guide <a href={"/docs/guides/linux-distro-support"}>Ajouter une distribution Linux</a>.
</TabItem>
</Tabs>
```
@@ -4,9 +4,9 @@ Il n'y a pas de règles gravées dans le marbre pour le développement d'applica
## Configuration de l'application
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.
Le modèle utilisé par défaut défini que `main.go` est utilisé pour configurer et démarrer l'application, tandis que `app.go` est utilisé pour définir la logique de l'application.
The `app.go` file will define a struct that has 2 methods which act as hooks into the main application:
Le fichier `app.go` va définir une structure qui a 2 méthodes qui agissent comme crochets dans l'application principale:
```go title="app.go"
type App struct {
@@ -25,11 +25,11 @@ func (a *App) shutdown(ctx context.Context) {
}
```
- The startup method is called as soon as Wails allocates the resources it needs and is a good place for creating resources, setting up event listeners and anything else the application needs at startup. It is given a `context.Context` which is usually saved in a struct field. This context is needed for calling the [runtime](../reference/runtime/intro.mdx). If this method returns an error, the application will terminate. In dev mode, the error will be output to the console.
- La méthode startup est appelée d-s que Wails a donné les ressources nécessaires et qu'il est dans un bon état pour créer les ressources, mettre en place les event listeners et tout ce dont l'application peut avoir besoin pour démarrer. Il est donné un `context.Context` qui est généralement sauvegardé dans un champ struct. Ce contexte est nécessaire pour appeler le [runtime](../reference/runtime/intro.mdx). Si cette méthode renvoie une erreur, l'application se fermera. En mode développement, l'erreur sera affichée dans la 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.
- La méthode d'arrêt sera appelée par Wails à la fin du processus d'arrêt. C'est un bon endroit pour vider la mémoire et effectuer toutes les tâches d'arrêt.
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:
Le fichier `main.go` consiste généralement en un seul appel à `wails.Run()`, qui accepte la configuration de l'application. Le modèle utilisé par les templates fait qu'avant l'appel à `wails.Run()`, une instance du struct que l'on a définie dans `app.go` est créée et instanciée dans une variable appelée `app`. Cette configuration est l'endroit où nous ajoutons nos callbacks :
```go {3,9,10} title="main.go"
func main() {
@@ -50,11 +50,11 @@ func main() {
```
More information on application lifecycle hooks can be found [here](../howdoesitwork.mdx#application-lifecycle-callbacks).
Plus d'informations sur les crochets du cycle de vie des applications peuvent être trouvées [ici](../howdoesitwork.mdx#application-lifecycle-callbacks).
## Binding Methods
## Méthodes de liaison
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`:
Il est probable que vous vouliez appeler les méthodes Go depuis le frontend. Cela se fait normalement en ajoutant des méthodes publiques à le struct déjà défini dans `app.go`:
```go {16-18} title="app.go"
type App struct {
@@ -77,7 +77,7 @@ func (a *App) Greet(name string) string {
}
```
In the main application configuration, the `Bind` key is where we can tell Wails what we want to bind:
Dans la configuration principale de l'application, le paramètre `Bind` est l'endroit où nous pouvons dire à Wails ce que nous voulons lier :
```go {11-13} title="main.go"
func main() {
@@ -101,11 +101,11 @@ func main() {
```
This will bind all public methods in our `App` struct (it will never bind the startup and shutdown methods).
Cela liera toutes les méthodes publiques de notre structure `App` (cela ne liera jamais les méthodes de démarrage et d'arrêt du système).
### Dealing with context when binding multiple structs
### Traiter avec le contexte lors de la liaison de plusieurs structures
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 :
Si vous voulez lier des méthodes pour des structures multiples, mais que vous voulez que chaque struct conserve une référence au contexte pour que vous puissiez utiliser les fonctions d'exécution... Un bon choix est de passer le contexte de la méthode `OnStartup` à vos instances struct :
```go
func main() {
@@ -133,11 +133,11 @@ func main() {
}
```
More information on Binding can be found [here](../howdoesitwork.mdx#method-binding).
Plus d'informations à sur Binding peuvent être trouvées [ici](../howdoesitwork.mdx#method-binding).
## Application Menu
## Menu de lapplication
Wails supports adding a menu to your application. This is done by passing a [Menu](../reference/menus.mdx#menu) struct to application config. It's common to use a method that returns a Menu, and even more common for that to be a method on the `App` struct used for the lifecycle hooks.
Wails prend en charge l'ajout d'un menu à votre application. Ceci est fait en passant un [Menu](../reference/menus.mdx#menu) structuré à la configuration de l'application. Il est courant d'utiliser une méthode qui renvoie un Menu, et encore plus courant pour que cela soit une méthode sur la struct de l'`app` qui soit utilisée pour les hooks du cycle de vie.
```go {11} title="main.go"
func main() {
@@ -162,33 +162,33 @@ func main() {
```
## Assets
## Ressources
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.
La grande chose à propos de la façon dont Wails v2 gère les ressources pour le frontend, est que ce n'est pas le cas! La seule chose que vous devez donner à Wails est un `embed.FS`. C'est à vous de décider comment vous y arrivez. Vous pouvez utiliser les fichiers html/css/js vanilla comme dans le modèle vanilla. Vous pourriez avoir un système de compilation compliqué, peu importe.
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:
Quand la commande `wails dev` est exécutée, elle vérifiera le fichier de projet `wails.json` à la racine du projet. Il y a 2 clés dans le fichier du projet qui sont lues :
- "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.
Le premier, si fourni, sera exécuté dans le répertoire `frontend` pour installer les modules. Le second, si fourni, sera exécuté dans le répertoire `frontend` pour construire le projet frontend.
If these 2 keys aren't given, then Wails does absolutely nothing with the frontend. It is only expecting that `embed.FS`.
Si ces 2 clés ne sont pas fournies, alors Wails ne fait absolument rien avec le frontend. Il n'attend que `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.
Une application Wails v2 peut éventuellement définir un `http.Handler` dans `options.app`, qui permet de se connecter à l'AssetServer pour créer des fichiers à la volée ou traiter les requêtes POST/PUT. Les requêtes GET sont toujours traitées d'abord par le `assets` FS. Si le FS ne trouve pas le fichier demandé, la requête sera transmise au `http.Handler`. Toute requête autre que GET sera traitée directement par le `AssetsHandler` si spécifié. Il est également possible d'utiliser le `AssetsHandler` uniquement en spécifiant `nil` dans l'option `Assets`.
## Built in Dev Server
## Serveur de développement embarqué
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.
Exécuter `wails dev` démarrera le serveur de développement intégré qui démarrera un observateur de fichiers dans votre répertoire de projet. Par par défaut, si un fichier change, wails vérifie s'il s'agit d'un fichier d'application (par défaut: `.go`, configurable avec l'option `-e`). Si c'est le cas, il reconstruira votre application et la relancera. Si le fichier modifié se trouvait dans les actifs, il lancera un rechargement après un court laps de temps.
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.
Le serveur de développement utilise une technique appelée "debouncing", ce qui signifie qu'il ne se recharge pas tout de suite, comme il peut y avoir plusieurs fichiers modifiés en un court laps de temps. Lorsqu'un déclencheur se produit, il attend un temps défini avant d'émettre un rechargement. Si un autre déclencheur se produit, le temps d'attente se réinitialise avant un prochain rechargement. Par défaut, cette période est définie à `100ms`. Si cette valeur ne fonctionne pas pour votre projet, elle peut être configurée en utilisant l'option `-debounce`. Si elle est utilisée, cette valeur sera enregistrée dans la configuration de votre projet et deviendra la valeur par défaut.
## External Dev Server
## Serveur de développement externe
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/). For [create-react-app](https://create-react-app.dev/), it's possible to use [this script](https://gist.github.com/int128/e0cdec598c5b3db728ff35758abdbafd) to achieve a similar result.
Certains frameworks sont fournis avec leur propre serveur de rechargement en direct, cependant ils ne seront pas en mesure de tirer parti des liaisons Wails Go. Dans ce scénario, il est préférable d'exécuter un script qui va surveiller le projet dans dossier build, dossier que Wails surveille aussi. Pour un exemple, voir le modèle svelte par défaut qui utilise [rollup](https://rollupjs.org/guide/en/). Pour [create-react-app](https://create-react-app.dev/), il est possible d'utiliser [ce script](https://gist.github.com/int128/e0cdec598c5b3db728ff35758abdbafd) pour obtenir un résultat similaire.
## Go Module
## Module Go
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.
Les modèles Wails par défaut génèrent un fichier `go.mod` qui contient le nom de module "changeme". Vous devriez changer ceci pour quelque chose de plus approprié après la génération du projet.
@@ -1,14 +1,14 @@
# Dynamic Assets
# Ressources dynamiques
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.
Si vous voulez charger ou générer des ressources pour votre frontend de manière dynamique, vous pouvez y parvenir en utilisant l'option [AssetsHandler](../reference/options#assetshandler). Le AssetsHandler est un générique`http.Handler` qui sera appelé pour toute requête non GET sur le serveur d'assets et pour les requêtes GET qui ne peuvent pas être servies car l'asset n'est pas trouvé.
By installing a custom AssetsHandler, you can serve your own assets using a custom asset server.
En installant un AssetsHandler personnalisé, vous pouvez servir vos propres ressources en utilisant un serveur de ressources personnalisé.
## Example
## Exemple
In our example project, we will create a simple assets handler which will load files off disk:
Dans notre exemple de projet, nous allons créer un gestionnaire de ressources simple qui chargera les fichiers à partir du disque:
```go title=main.go {16-35,49}
```go title=main.go {17-36,49}
package main
import (
@@ -72,7 +72,7 @@ func main() {
}
```
When we run the application in dev mode using `wails dev`, we will see the following output:
Lorsque nous exécutons l'application en mode dev en utilisant `wails dev`, nous verrons la sortie suivante :
```
DEB | [ExternalAssetHandler] Loading 'http://localhost:3001/favicon.ico'
@@ -80,15 +80,15 @@ DEB | [ExternalAssetHandler] Loading 'http://localhost:3001/favicon.ico' failed,
Requesting file: favicon.ico
```
As you can see, the assets handler is called when the default assets server is unable to serve the `favicon.ico` file.
Comme vous pouvez le voir, le gestionnaire d'actifs est appelé lorsque le serveur d'assets par défaut est incapable de servir le fichier `favicon.ico`.
If you right click the main application and select "inspect" to bring up the devtools, you can test this feature out by typing the following into the console:
Si vous faites un clic droit sur l'application principale et sélectionnez "inspecter" pour afficher les devtools, vous pouvez tester cette fonctionnalité en tapant ce qui suit dans la 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:
Cela générera une erreur dans les devtools. Nous pouvons voir que l'erreur est ce que nous attendons est retourné par notre gestionnaire de ressources personnalisées :
```mdx-code-block
<p className="text--center">
@@ -98,7 +98,7 @@ This will generate an error in the devtools. We can see that the error is what w
</p>
```
However, if we request `go.mod`, we will see the following output:
Cependant, si nous demandons `go.mod`, nous verrons la sortie suivante :
```mdx-code-block
<p className="text--center">
@@ -106,19 +106,19 @@ However, if we request `go.mod`, we will see the following output:
</p>
```
This technique can be used to load images directly into the page. If we updated our default vanilla template and replaced the logo image:
Cette technique peut être utilisée pour charger des images directement dans la page. Si nous avons mis à jour notre modèle vanilla par défaut et a remplacé l'image du logo :
```html
<img id="logo" class="logo" />
```
with:
avec :
```html
<img src="build/appicon.png" style="width: 300px" />
```
Then we would see the following:
Nous verrions ensuite ce qui suit:
```mdx-code-block
<p className="text--center">
@@ -131,6 +131,6 @@ Then we would see the following:
:::warning
Exposing your filesystem in this way is a security risk. It is recommended that you properly manage access to your filesystem.
Exposer votre système de fichiers de cette manière est un risque de sécurité. Il est recommandé de gérer correctement l'accès à votre système de fichiers.
:::
@@ -1,8 +1,8 @@
# Frameless Applications
# Applications sans cadre
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 prend en charge la création d'applications qui n'ont pas de cadres. Ceci peut être réalisé en utilisant le champ [frameless](../reference/options.mdx#frameless) dans [Application Options](../reference/options.mdx#application-options).
Wails offers a simple solution for dragging the window: Any HTML element that has the CSS style `--wails-draggable:drag` will act as a "drag handle". This property applies to all child elements. If you need to indicate that a nested element should not drag, then use the attribute '--wails-draggable:no-drag' on that element.
Wails offre une solution simple pour faire glisser la fenêtre: N'importe quel élément HTML qui a le style CSS `--wails-draggable:drag` agira comme une "poignée de glisser". Cette propriété s'applique à tous les éléments enfants. Si vous devez indiquer qu'un élément imbriqué ne doit pas glisser, alors utilisez l'attribut '--wails-draggable:no-drag' sur cet élément.
```html
<html>
@@ -23,7 +23,7 @@ Wails offers a simple solution for dragging the window: Any HTML element that ha
</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:
Pour certains projets, l'utilisation d'une variable CSS peut ne pas être possible en raison du style dynamique. Dans ce cas, vous pouvez utiliser les options `CSSDragProperty` et `CSSDragValue` pour définir une propriété et une valeur qui seront utilisées pour indiquer régions glissables :
```go title=main.go
package main
@@ -80,8 +80,8 @@ func main() {
</html>
```
:::info Fullscreen
:::info Plein écran
If you allow your application to go fullscreen, this drag functionality will be disabled.
Si vous autorisez votre application à être en plein écran, cette fonctionnalité de glissement sera désactivée.
:::
@@ -1,10 +1,10 @@
# Frontend
## Script Injection
## Injection de script
When Wails serves your `index.html`, by default, it will inject 2 script entries into the `<body>` tag to load `/wails/ipc.js` and `/wails/runtime.js`. These files install the bindings and runtime respectively.
Quand Wails sert votre fichier `index.html`, par défaut, il injectera 2 entrées de script dans la balise `<body>` pour charger `/wails/ipc.js` et `/wails/runtime.js`. Ces fichiers installent respectivement les bindings et les runtime.
The code below shows where these are injected by default:
Le code ci-dessous montre où ils sont injectés par défaut :
```html
<html>
@@ -28,25 +28,25 @@ The code below shows where these are injected by default:
</html>
```
### Overriding Default Script Injection
### Remplacer l'injection de script par défaut
To provide more flexibility to developers, there is a meta tag that may be used to customise this behaviour:
Pour fournir plus de flexibilité aux développeurs, il y a une balise meta qui peut être utilisée pour personnaliser ce comportement:
```html
<meta name="wails-options" content="[options]" />
```
The options are as follows:
Les options sont les suivantes :
| Value | Description |
| ------------------- | ------------------------------------------------ |
| noautoinjectruntime | Disable the autoinjection of `/wails/runtime.js` |
| noautoinjectipc | Disable the autoinjection of `/wails/ipc.js` |
| noautoinject | Disable all autoinjection of scripts |
| Valeur | Description |
| ------------------- | -------------------------------------------------------------- |
| noautoinjectruntime | Pour désactiver l'injection automatique de `/wails/runtime.js` |
| noautoinjectipc | Pour désactiver l'injection automatique de `/wails/ipc.js` |
| noautoinject | Pour désactiver l'injection automatique de tous les scripts |
Multiple options may be used provided they are comma seperated.
Plusieurs options peuvent être utilisées à condition qu'elles soient séparées par des virgules.
This code is perfectly valid and operates the same as the autoinjection version:
Ce code est parfaitement valide et fonctionne de la même manière que la version avec l'auto-injection :
```html
<html>
@@ -1,8 +1,8 @@
# IDEs
Wails aims to provide a great development experience. To that aim, we now support generating IDE specific configuration to provide smoother project setup.
Wails vise à fournir une grande expérience de développement. À cet effet, nous supportons maintenant la génération d'une configuration spécifique IDE pour fournir une configuration plus souple du projet.
Currently, we support [Visual Studio Code](https://code.visualstudio.com/) but aim to support other IDEs such as Goland.
Actuellement, nous prenons en charge [Visual Studio Code](https://code.visualstudio.com/) mais nous visons à prendre en charge d'autres IDE comme Goland.
## Visual Studio Code
@@ -15,9 +15,9 @@ Currently, we support [Visual Studio Code](https://code.visualstudio.com/) but a
</p>
```
When generating a project using the `-ide vscode` flags, IDE files will be created alongside the other project files. These files are placed into the `.vscode` directory and provide the correct configuration for debugging your application.
Lors de la génération d'un projet en utilisant l'option `-ide vscode` , les fichiers IDE seront créés à côté des autres fichiers du projet. Ces fichiers sont placés dans le répertoire `.vscode` et fournissent la configuration correcte pour déboguer votre application.
The 2 files generated are `tasks.json` and `launch.json`. Below are the files generated for the default vanilla project:
Les 2 fichiers générés sont `tasks.json` et `launch.json`. Ci-dessous se trouvent les fichiers générés par défaut :
```json title="tasks.json"
{
@@ -62,9 +62,9 @@ The 2 files generated are `tasks.json` and `launch.json`. Below are the files ge
}
```
### Configuring the install and build steps
### Configuration des étapes d'installation et de construction
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:
Le fichier `tasks.json` est simple pour le projet par défaut car il n'y a pas d'étapes `npm install` ou `npm build` nécessaire. Pour les projets qui ont une étape de construction en frontend comme avec Svelte, nous devrions modifier `tasks.json` pour ajouter les étapes d'installation et de construction suivantes :
```json title="tasks.json"
{
@@ -120,8 +120,8 @@ The `tasks.json` file is simple for the default project as there is no `npm inst
}
```
:::info Future Enhancement
:::info Améliorations futures
In the future, we hope to generate a `tasks.json` that includes the install and build steps automatically.
Dans le futur, nous espérons générer un `tasks.json` qui inclut les étapes d'installation et de construction automatiquement.
:::

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