← Tous les cours
UI · Cours gratuit

Localisation dans Wisej.NET

Une application qui ne parle qu’une seule langue finit toujours par rencontrer un utilisateur qui en parle une autre. Ce cours pour débutants vous apprend à localiser une application Wisej.NET à la manière de .NET : sortir chaque texte visible du code, le ranger dans des ressources, mettre en forme dates, nombres et devises selon la culture active, et laisser chaque session choisir sa propre langue — le tout autour du projet GlobalDesk, un petit service desk multilingue avec un tableau de bord, un éditeur client, une grille de contacts et un sélecteur de langue. Sept modules partent des fondamentaux — noms de culture, fichiers .resx, ResourceManager, repli de culture et clés sémantiques stables — puis passent à la localisation dans le designer Visual Studio avec Localizable et le sélecteur Language, aux ressources d’application partagées et aux libellés système de Wisej.NET, à la détection de la culture du navigateur et au changement de langue à l’exécution. Vous traiterez ensuite les langues de droite à gauche et les mises en page qui survivent à un texte qui s’allonge, organiserez le travail de traduction avec ResX Resource Manager, et terminerez par une architecture de localisation prête pour la production, une matrice de tests et un projet de synthèse. Il s’adresse aux développeurs qui connaissent les bases de C# et les contrôles Wisej.NET et doivent maintenant livrer leur application dans plusieurs langues.

Créez des applications multilingues avec des ressources .resx, une mise en forme adaptée à la culture, le changement de langue à l’exécution et des mises en page de droite à gauche.

Commencer ce cours gratuit

Également disponible en: EnglishDeutschItalianoEspañol

Programme

Module 1: Fondamentaux de la localisation : culture, langue et ressources

Module 1 de Localisation dans Wisej.NET — créez des applications multilingues avec des ressources .resx, une mise en forme adaptée à la culture, le changement de langue à l’exécution et des mises en page de droite à gauche. Lisez le guide de la leçon et le guide du lab / de l’examen, regardez la vidéo pas à pas sur les fondamentaux de la localisation, réussissez la vérification des connaissances, puis réalisez le lab pratique dans GlobalDesk.

  1. LectureGuide de la leçon · 14 min

    Ce que recouvre vraiment la localisation au-delà de la traduction : les noms de culture comme en, de-DE et fr-CA, les fichiers de ressources .resx lus via ResourceManager, le repli de culture .NET vers la ressource neutre, des clés sémantiques stables plutôt que des phrases anglaises dans le code, et la mise en forme des dates, des nombres et des montants selon la culture. Ce que cela signifie pour un développeur qui connaît les bases de C# et les contrôles Wisej.NET et doit maintenant livrer son application dans plusieurs langues — et comment aborder ce module.

    Lire le guide de la leçon (PDF)

  2. LectureGuide du lab / de l’examen · 10 min

    Ce que vous allez construire dans le lab pratique, l’approche suggérée et les livrables attendus.

    Lire le guide de la leçon (PDF)

  3. Leçon vidéoCulture, ressources et le texte qu’il ne faut jamais coder en dur · 14 min

    Culture, ressources et le texte qu’il ne faut jamais coder en dur — une vidéo pas à pas guidée du Module 1, construite étape par étape dans GlobalDesk. Elle se lance directement ici, dans le lecteur.

    Transcription de la narration

    Localisation dans Wisej.NET, module un. GlobalDesk est un service d’assistance écrit pour un seul bureau, et le transformer en une application que plusieurs bureaux peuvent utiliser commence par deux travaux distincts.

    L’anglais codé en dur n’est que la moitié du problème. Composer un montant en plaçant un signe dollar devant un nombre fige la convention d’un seul pays dans le code, et aucun fichier de traduction ne défera jamais cela. Wisej.NET utilise ici le modèle .NET standard : les fichiers de ressources, CultureInfo et ResourceManager.

    Un nom de culture associe une langue et une région. L’anglais seul ne porte que la langue, tandis qu’anglais États-Unis, allemand Allemagne et français Canada ajoutent chacun des conventions régionales. La langue décide des mots que vous affichez ; la culture décide de la façon dont les dates, les nombres et les montants s’écrivent.

    Les fichiers de ressources s’empilent. Une recherche essaie d’abord le fichier le plus spécifique, puis le fichier de langue seule, et enfin le fichier neutre. Comme le fichier neutre est le dernier arrêt, il doit être complet : ce qui y manque n’a plus rien vers quoi se replier.

    Dans le code, cela signifie douze clés sémantiques dans le fichier de ressources neutre et un seul ResourceManager construit à partir du nom de base et de l’assembly. Un assistant renvoie la clé entre crochets quand rien n’est trouvé, si bien qu’un manque devient lisible à l’écran plutôt qu’une étiquette vide que personne ne remarque.

    Vient la réécriture. Une méthode place les mots à l’écran en cherchant chaque libellé par sa clé. Une seconde formate une date, un nombre et un montant avec la culture en cours au moment de l’affichage, ce qui laisse les valeurs stockées elles-mêmes intactes et neutres.

    À l’exécution, chaque libellé se résout sauf un, et celui-là s’affiche sous la forme de sa clé entre crochets. Le manque est visible au lieu d’être silencieux. Ajoutez la clé manquante, et les trois valeurs d’aperçu sont formatées selon la culture sous laquelle cette session s’exécute.

    Deux navigateurs sur un même processus serveur, l’un en anglais et l’autre en allemand, montrent le même code, les mêmes clés et le même décimal stocké rendus de deux façons. Cela fonctionne parce que la culture appartient à la session, et jamais à un champ statique partagé par tout le monde.

    Atelier un : construisez le tableau de bord GlobalDesk sur un fichier de ressources neutre, ajoutez l’assistant de texte qui signale une clé manquante, ajoutez le panneau d’aperçu de la culture, et rédigez la note qui sépare les données de la présentation.

  4. LectureExercice de code avec l’IA · 20 min

    Construisez l’exemple GlobalDesk de ce module avec ChatGPT ou Claude à partir d’un prompt prêt à l’emploi qui oriente le modèle vers la spécification du module, puis relisez, exécutez et étendez ce qu’il vous renvoie.

    Lire le guide de la leçon (PDF)

  5. Quiz de connaissancesVérification des connaissances — Module 1 · 10 min · Note de réussite 80%
  6. Lab pratiqueLab — Clés de ressources et mise en forme adaptée à la culture · 45 min

    Objectif: Créez la page tableau de bord de GlobalDesk avec un titre de bienvenue, un bouton de navigation Customers et un petit panneau d’aperçu de la culture. Ajoutez Resources/Strings.resx comme ressource neutre avec au moins douze clés sémantiques stables telles que Navigation.Customers et CustomerEditor.Save, écrivez une classe utilitaire statique Texts au-dessus de Wisej.Resources.ResourceManager qui renvoie la clé entre crochets quand elle est absente, et remplacez chaque libellé codé en dur de la page par un appel à Texts.Get. Remplissez ensuite le panneau d’aperçu à partir de vraies valeurs : mettez en forme la date du jour, une quantité et un montant avec Application.CurrentCulture au lieu de composer les chaînes à la main, et terminez par une courte note de lab qui distingue la valeur stockée de sa présentation dépendante de la culture. Livrables : Page tableau de bord de GlobalDesk dont tous les libellés viennent de clés de ressources, sans aucun texte visible codé en dur ; Fichier neutre Resources/Strings.resx contenant au moins douze clés sémantiques stables ; Classe utilitaire Texts au-dessus de Wisej.Resources.ResourceManager qui signale une clé manquante au lieu de renvoyer une chaîne vide ; Panneau d’aperçu de la culture qui met en forme une date, un nombre et un montant avec Application.CurrentCulture ; Note de lab expliquant quelles valeurs sont des données et lesquelles relèvent d’une présentation dépendante de la culture.

Module 2: Localiser l’interface Wisej.NET dans le designer Visual Studio

Module 2 de Localisation dans Wisej.NET — créez des applications multilingues avec des ressources .resx, une mise en forme adaptée à la culture, le changement de langue à l’exécution et des mises en page de droite à gauche. Lisez le guide de la leçon et le guide du lab / de l’examen, regardez la vidéo pas à pas sur la localisation dans le designer, réussissez la vérification des connaissances, puis réalisez le lab pratique dans GlobalDesk.

  1. LectureGuide de la leçon · 14 min

    La localisation dans le designer sur un conteneur Wisej.NET de premier niveau : la propriété Localizable, le sélecteur Language du designer, les propriétés qui peuvent légitimement varier d’une langue à l’autre comme Text, Size, Location, les couleurs et les images, les fichiers de ressources que le designer génère, et la règle selon laquelle les ressources du designer sont appliquées au moment de la création des contrôles. Ce que cela signifie pour un développeur qui connaît les bases de C# et les contrôles Wisej.NET et doit maintenant livrer son application dans plusieurs langues — et comment aborder ce module.

    Lire le guide de la leçon (PDF)

  2. LectureGuide du lab / de l’examen · 10 min

    Ce que vous allez construire dans le lab pratique, l’approche suggérée et les livrables attendus.

    Lire le guide de la leçon (PDF)

  3. Leçon vidéoLocalizable, le sélecteur Language et ce que le designer écrit · 14 min

    Localizable, le sélecteur Language et ce que le designer écrit — une vidéo pas à pas guidée du Module 2, construite étape par étape dans GlobalDesk. Elle se lance directement ici, dans le lecteur.

    Transcription de la narration

    Module deux, localiser un écran qui a été dessiné plutôt qu’écrit. L’éditeur de clients de GlobalDesk a été agencé dans le designer de Visual Studio, et l’allemand demande des mots différents et, il s’avère, une géométrie différente.

    Les libellés qui ne vivent que dans le designer sont hors de portée d’un traducteur. Un libellé allemand n’entrera pas dans un bouton dimensionné pour l’anglais. Et élargir chaque bouton pour la langue la plus longue que vous pourriez un jour livrer gâche la disposition pour la langue que vos utilisateurs lisent réellement.

    Six étapes. Terminez d’abord la disposition neutre. Rendez le formulaire localizable. Choisissez la langue. Ne changez que ce qui diffère. Exécutez l’application sous cette culture. Puis ramenez le designer au neutre avant toute modification structurelle, car les changements de structure appartiennent à la seule disposition neutre.

    Le code généré par le designer ne garde que les valeurs neutres, le dimensionnement automatique, l’ancrage et l’amarrage faisant le travail de disposition. Le texte, la taille et la position allemands sont écrits dans des fichiers de ressources générés, et c’est pourquoi on peut remettre des fichiers à un traducteur plutôt qu’un environnement de développement.

    La culture en cours appartient à la session, jamais à un champ statique. Et comme les ressources du designer sont lues à la création d’un contrôle, changer la culture ne repeint pas un écran qui existe déjà. L’éditeur doit être retiré, libéré et reconstruit avant de relire ses ressources.

    Décidez de la couche avant d’ajouter la chaîne. Le texte, la taille, la position, les couleurs et les images qui appartiennent à un écran dessiné vont dans les ressources du designer de cet écran. Tout ce que le code génère, et tout ce que plusieurs écrans partagent, va plutôt dans le fichier de ressources partagé.

    Sous l’allemand, les libellés sont tronqués dans une largeur de bouton mesurée sur l’anglais, jusqu’à ce que la taille soit redéfinie pour l’allemand seul. C’est le navigateur qui le prouve, pas la surface de conception, car la surface de conception vous montre la disposition neutre.

    Changer la culture de la session pendant que l’application tourne laisse l’éditeur ouvert en anglais. Il le reste jusqu’à ce que l’action de recréation le libère et en construise un nouveau, qui lit alors ses ressources sous la nouvelle culture. C’est la règle de la création, vue directement.

    Atelier deux : rendez l’éditeur de clients localizable, ajoutez une variante allemande avec une redéfinition de taille et une de position, empêchez les libellés d’être tronqués, et démontrez la règle de la création.

  4. LectureExercice de code avec l’IA · 20 min

    Construisez l’exemple GlobalDesk de ce module avec ChatGPT ou Claude à partir d’un prompt prêt à l’emploi qui oriente le modèle vers la spécification du module, puis relisez, exécutez et étendez ce qu’il vous renvoie.

    Lire le guide de la leçon (PDF)

  5. Quiz de connaissancesVérification des connaissances — Module 2 · 10 min · Note de réussite 80%
  6. Lab pratiqueLab — Localizable, le sélecteur Language et un éditeur reconstruit · 45 min

    Objectif: Localisez l’éditeur client de GlobalDesk depuis le designer Visual Studio. Terminez d’abord la mise en page neutre en anglais du contrôle utilisateur CustomerEditor, puis passez Localizable à true et utilisez le sélecteur Language du designer pour ajouter une variante allemande, en ne changeant que ce qui doit différer : les libellés, la largeur des deux boutons les plus longs et la propriété Location d’un libellé. Exécutez l’application en de-DE et comparez le rendu réel du navigateur avec la vue du designer, puis ajoutez un bouton Recreate editor qui libère et reconstruit le contrôle pour constater par vous-même pourquoi les ressources du designer ne suivent pas un changement de culture à l’exécution. Terminez par une note de lab qui liste les propriétés que vous avez redéfinies et celles que vous avez délibérément laissées à la mise en page neutre. Livrables : Contrôle utilisateur CustomerEditor avec Localizable à true sur une mise en page neutre en anglais complète ; Variante de langue allemande dans le designer qui redéfinit les libellés ainsi qu’au moins une propriété Size et une propriété Location ; Ancrage, docking ou AutoSize appliqués pour que les libellés allemands ne puissent pas être tronqués ; Bouton Recreate editor qui libère et reconstruit le conteneur après un changement de culture ; Note de lab listant les propriétés redéfinies et celles laissées à la mise en page neutre.

Module 3: Ressources d’application, ResourceManager et textes système de Wisej

Module 3 de Localisation dans Wisej.NET — créez des applications multilingues avec des ressources .resx, une mise en forme adaptée à la culture, le changement de langue à l’exécution et des mises en page de droite à gauche. Lisez le guide de la leçon et le guide du lab / de l’examen, regardez la vidéo pas à pas sur les ressources partagées, réussissez la vérification des connaissances, puis réalisez le lab pratique dans GlobalDesk.

  1. LectureGuide de la leçon · 14 min

    La couche de ressources partagées : des fichiers .resx neutres et spécifiques à une culture qui portent des clés identiques, la recherche par Wisej.Resources.ResourceManager à partir du nom de base et de l’assembly, des espaces réservés mis en forme avec string.Format et la culture active, des services qui renvoient des clés plutôt que des phrases anglaises, et Resources-[LANG].resx pour les libellés système de Wisej. Ce que cela signifie pour un développeur qui connaît les bases de C# et les contrôles Wisej.NET et doit maintenant livrer son application dans plusieurs langues — et comment aborder ce module.

    Lire le guide de la leçon (PDF)

  2. LectureGuide du lab / de l’examen · 10 min

    Ce que vous allez construire dans le lab pratique, l’approche suggérée et les livrables attendus.

    Lire le guide de la leçon (PDF)

  3. Leçon vidéoUne clé, deux fichiers de ressources et les libellés propres à Wisej · 14 min

    Une clé, deux fichiers de ressources et les libellés propres à Wisej — une vidéo pas à pas guidée du Module 3, construite étape par étape dans GlobalDesk. Elle se lance directement ici, dans le lecteur.

    Transcription de la narration

    Localisation dans Wisej.NET, module trois, la couche de ressources partagée. C’est le texte qu’aucun contrôle dessiné ne possède, avec les libellés que Wisej.NET dessine pour lui-même, à l’intérieur de GlobalDesk.

    Le module deux a traduit les libellés de l’écran. La confirmation d’enregistrement, les messages de validation, la ligne d’état et le résultat renvoyé par un service sont encore des littéraux anglais posés dans le code, et la localisation par le designer n’en atteint aucun, car aucun contrôle ne les possède.

    Le fichier de ressources neutre contient toutes les clés. Le fichier allemand se place à côté avec exactement les mêmes clés et uniquement des valeurs traduites. Une recherche va de la culture la plus spécifique au fichier de langue seule, puis au fichier neutre, et prend la première correspondance trouvée, ce qui rend une traduction partielle sans danger.

    Un seul ResourceManager, construit à partir du nom de base et de l’assembly, se tient derrière un petit assistant qui renvoie la clé entre crochets plutôt qu’une chaîne vide quand une valeur manque.

    Gardez chaque phrase entière. Stockez la phrase complète avec un espace réservé, puis formatez-la pour la culture en cours, au lieu de concaténer des fragments traduits dans le code.

    Trois couches, trois propriétaires. Les ressources du designer portent le texte propre à un écran. Le fichier de chaînes partagé porte le texte produit utilisé partout. Et un fichier de ressources séparé redéfinit les libellés que Wisej.NET fournit lui-même, comme les boutons d’une boîte de dialogue standard.

    Le service d’enregistrement renvoie une clé plutôt qu’une phrase anglaise, et l’éditeur est le seul endroit qui transforme un résultat en mots. La ligne de journal reste délibérément dans une seule langue, car un développeur qui lit un journal à trois heures du matin n’est pas aidé par un message traduit.

    Exécutez-le en anglais, puis en allemand, puis ouvrez une boîte de message dont le bouton de confirmation vient de votre redéfinition de libellé système et non de la valeur par défaut du framework. Supprimez une clé du fichier allemand et la recherche se replie sur la valeur neutre au lieu d’afficher un blanc.

    Ce que vous rendez, c’est le fichier allemand avec des clés identiques, une phrase formatée à partir d’un espace réservé, un service qui renvoie une clé plutôt que de la prose, un libellé système Wisej redéfini, et la note qui explique les trois sortes de texte.

    Atelier trois : ajoutez le fichier de chaînes allemand, formatez la phrase à espace réservé pour la culture active, renvoyez une clé de résultat depuis le service d’enregistrement, et redéfinissez un libellé système.

  4. LectureExercice de code avec l’IA · 20 min

    Construisez l’exemple GlobalDesk de ce module avec ChatGPT ou Claude à partir d’un prompt prêt à l’emploi qui oriente le modèle vers la spécification du module, puis relisez, exécutez et étendez ce qu’il vous renvoie.

    Lire le guide de la leçon (PDF)

  5. Quiz de connaissancesVérification des connaissances — Module 3 · 10 min · Note de réussite 80%
  6. Lab pratiqueLab — Strings.de.resx, espaces réservés et un libellé système · 45 min

    Objectif: Enrichissez les ressources partagées de GlobalDesk. Ajoutez Strings.de.resx à côté de Resources/Strings.resx avec exactement les mêmes clés et des valeurs traduites, ajoutez une entrée Customer.LastOrder qui contient deux espaces réservés, et composez la phrase avec string.Format et Application.CurrentCulture au lieu de concaténer des fragments. Faites passer par la classe utilitaire Texts chaque message affiché par l’éditeur client, y compris la confirmation d’enregistrement et les deux messages de validation, et faites en sorte que le service d’enregistrement renvoie une clé de résultat stable comme CustomerEditor.Saved plutôt qu’une phrase anglaise que l’interface affiche telle quelle. Ajoutez ensuite un fichier Resources-de.resx qui redéfinit un libellé système de Wisej, démontrez-le dans une MessageBox, et rédigez une courte note sur la différence entre le texte de votre produit et le texte système de Wisej. Livrables : Strings.de.resx portant les mêmes clés que le fichier neutre, avec uniquement des valeurs traduites ; Ressource Customer.LastOrder composée avec string.Format et la culture active, jamais par concaténation ; Service d’enregistrement qui renvoie une clé de ressource ou un code de résultat au lieu d’une phrase anglaise ; Resources-de.resx qui redéfinit au moins un libellé système de Wisej, montré dans une MessageBox ; Note de lab distinguant le texte du produit, le texte système de Wisej et le texte de diagnostic.

Module 4: Culture du navigateur, culture de session et changement de langue à l’exécution

Module 4 de Localisation dans Wisej.NET — créez des applications multilingues avec des ressources .resx, une mise en forme adaptée à la culture, le changement de langue à l’exécution et des mises en page de droite à gauche. Lisez le guide de la leçon et le guide du lab / de l’examen, regardez la vidéo pas à pas sur la culture à l’exécution, réussissez la vérification des connaissances, puis réalisez le lab pratique dans GlobalDesk.

  1. LectureGuide de la leçon · 14 min

    D’où vient la culture d’une session et ce qui doit se produire quand elle change : le paramètre culture de Default.json, la détection automatique de la langue du navigateur, le paramètre d’URL lang, Application.CurrentCulture comme état propre à la session, l’événement Application.CultureChanged, et la réapplication des textes issus des ressources pour qu’aucun écran à moitié traduit ne survive au changement. Ce que cela signifie pour un développeur qui connaît les bases de C# et les contrôles Wisej.NET et doit maintenant livrer son application dans plusieurs langues — et comment aborder ce module.

    Lire le guide de la leçon (PDF)

  2. LectureGuide du lab / de l’examen · 10 min

    Ce que vous allez construire dans le lab pratique, l’approche suggérée et les livrables attendus.

    Lire le guide de la leçon (PDF)

  3. Leçon vidéoDétectez-la, changez-la, puis redessinez ce que le changement a laissé derrière lui · 14 min

    Détectez-la, changez-la, puis redessinez ce que le changement a laissé derrière lui — une vidéo pas à pas guidée du Module 4, construite étape par étape dans GlobalDesk. Elle se lance directement ici, dans le lecteur.

    Transcription de la narration

    Module quatre. GlobalDesk dispose maintenant de ressources allemandes, d’une variante de designer allemande et d’un libellé système allemand. Ce à quoi il n’a toujours aucune réponse, c’est la langue dans laquelle cette session-ci doit s’exécuter.

    La culture d’une session peut venir de la préférence du navigateur, d’une valeur fixe dans la configuration de l’application, d’un paramètre placé sur l’adresse, ou d’un sélecteur que l’utilisateur manipule. Quelle que soit la source qui l’emporte, décidez-en une seule fois au début de la session plutôt que de la redériver sur chaque écran.

    La propriété de culture en cours est la culture de la session en cours. Un champ statique contenant une culture serait au contraire la culture de tout le processus serveur, et donc de tous les autres utilisateurs qui y sont connectés, ce qui est l’erreur la plus coûteuse du sujet.

    Régler la culture sur automatique fait démarrer chaque session depuis la préférence du navigateur. Fixer un nom épingle une seule locale, ce qui convient à une campagne de tests ou à un produit vendu sur un seul marché. Le sélecteur affecte une culture obtenue par son nom.

    Abonnez-vous une seule fois à l’événement de changement de culture, et laissez un seul gestionnaire faire tout le travail de réparation. Il réapplique les libellés adossés aux ressources, reformate la date, le nombre et le montant, et reconstruit l’éditeur localisé dans le designer, si bien que chaque sorte de texte finit cohérente.

    Quatre sortes de texte, quatre destins différents. Les contrôles créés après le changement suivent d’eux-mêmes. Les libellés déjà à l’écran doivent être réappliqués. Les valeurs formatées doivent être recalculées. Les écrans localisés dans le designer doivent être recréés, car leurs ressources ont été lues au moment de leur construction.

    L’allemand est choisi, et le titre, la navigation et les trois aperçus formatés changent tous. L’éditeur reste en anglais jusqu’à l’exécution de l’appel de recréation. Cet écart, entre les parties qui suivent immédiatement et celles qui ne suivent pas, est le défaut que ce module existe pour éviter.

    Un paramètre de langue sur l’adresse ouvre une session en allemand tandis que le navigateur suivant reste en anglais. Deux cultures vivantes dans un même processus au même moment, c’est exactement le comportement qu’un champ de culture statique détruirait pour les deux.

    Atelier quatre : réglez la culture sur automatique, ajoutez le sélecteur de langue, écrivez le gestionnaire de changement de culture qui réapplique les libellés et reformate les valeurs, et recréez l’éditeur.

  4. LectureExercice de code avec l’IA · 20 min

    Construisez l’exemple GlobalDesk de ce module avec ChatGPT ou Claude à partir d’un prompt prêt à l’emploi qui oriente le modèle vers la spécification du module, puis relisez, exécutez et étendez ce qu’il vous renvoie.

    Lire le guide de la leçon (PDF)

  5. Quiz de connaissancesVérification des connaissances — Module 4 · 10 min · Note de réussite 80%
  6. Lab pratiqueLab — Détection automatique, sélecteur de langue et CultureChanged · 45 min

    Objectif: Donnez à GlobalDesk un changement de langue qui va jusqu’au bout. Mettez culture sur auto dans Default.json pour que la session démarre sur la langue du navigateur, ajoutez une ComboBox de langue proposant l’anglais, l’allemand et une culture langue-région, et définissez Application.CurrentCulture à partir de CultureInfo.GetCultureInfo dans son gestionnaire SelectedIndexChanged, sans jamais stocker le choix dans un champ statique. Gérez Application.CultureChanged pour appeler une méthode ApplyTextResources qui rafraîchit tous les libellés issus des ressources et une méthode UpdateCulturePreview qui remet en forme les exemples de date, de nombre et de montant, et recréez dans le même gestionnaire l’éditeur client localisé dans le designer. Vérifiez la même page via le paramètre d’URL lang, puis rédigez une note de lab décrivant ce qu’un champ de culture statique ferait subir à un deuxième utilisateur connecté au même moment. Livrables : Default.json avec culture sur auto, accompagné d’une note sur les cas où une culture fixe est le bon choix ; Gestionnaire de la ComboBox de langue qui définit Application.CurrentCulture à partir de CultureInfo.GetCultureInfo ; Gestionnaire Application.CultureChanged qui appelle ApplyTextResources et UpdateCulturePreview ; Éditeur localisé dans le designer recréé après le changement pour qu’aucun libellé ne reste dans l’ancienne langue ; Vérification via le paramètre d’URL lang et note expliquant pourquoi la culture ne doit pas vivre dans un champ statique.

Module 5: Langues de droite à gauche et mises en page compatibles avec la localisation

Module 5 de Localisation dans Wisej.NET — créez des applications multilingues avec des ressources .resx, une mise en forme adaptée à la culture, le changement de langue à l’exécution et des mises en page de droite à gauche. Lisez le guide de la leçon et le guide du lab / de l’examen, regardez la vidéo pas à pas sur les langues de droite à gauche, réussissez la vérification des connaissances, puis réalisez le lab pratique dans GlobalDesk.

  1. LectureGuide de la leçon · 14 min

    La prise en charge du droite à gauche dans Wisej.NET : RightToLeft avec Inherit, No et Yes, RightToLeftLayout qui met en miroir les enfants d’un conteneur, le paramètre d’application rightToLeft, des mises en page qui survivent à l’allongement du texte, l’état rightToLeft du thème, et les limites documentées sur DataGridView, ListView et PropertyGrid. Ce que cela signifie pour un développeur qui connaît les bases de C# et les contrôles Wisej.NET et doit maintenant livrer son application dans plusieurs langues — et comment aborder ce module.

    Lire le guide de la leçon (PDF)

  2. LectureGuide du lab / de l’examen · 10 min

    Ce que vous allez construire dans le lab pratique, l’approche suggérée et les livrables attendus.

    Lire le guide de la leçon (PDF)

  3. Leçon vidéoMettez la mise en page en miroir, pas seulement le texte · 14 min

    Mettez la mise en page en miroir, pas seulement le texte — une vidéo pas à pas guidée du Module 5, construite étape par étape dans GlobalDesk. Elle se lance directement ici, dans le lecteur.

    Transcription de la narration

    Localisation dans Wisej.NET, module cinq. GlobalDesk parle déjà arabe. Ce module vise à le faire se lire comme de l’arabe, ce qui est un problème de disposition plutôt que de traduction.

    Le module quatre a terminé les mots. Une session arabe commence encore au mauvais bord de l’écran, si bien que l’œil se pose sur la dernière chose au lieu de la première. Et les libellés allemands sont déjà tronqués dans un panneau mesuré sur l’anglais.

    Deux propriétés, deux rôles différents. La propriété RightToLeft change la direction à l’intérieur d’un contrôle, c’est ainsi que le texte et son alignement basculent. La propriété RightToLeftLayout met en miroir les enfants directs d’un conteneur, c’est ainsi que l’agencement lui-même bascule.

    Un seul paramètre décide pour toute l’application. Configurer la direction sur automatique la dérive de la culture de la session, si bien qu’aucun écran n’a besoin de tester lui-même un nom de culture. Un test pareil dans un écran est un test que quelqu’un oubliera d’ajouter au suivant.

    La mise en miroir n’est correcte que si la disposition est libre de bouger. L’amarrage, l’ancrage, le dimensionnement automatique, une disposition de conteneur et des tailles minimales raisonnables remplacent tous les positions en pixels figées. Et une exception délibérée de gauche à droite garde lisible quelque chose comme un code client, car un identifiant n’est pas de la prose.

    Ensuite, testez correctement : un texte court, une traduction nettement plus longue, une fenêtre étroite, une culture de droite à gauche, et du contenu mixte comme une étiquette arabe posée à côté d’un code produit en caractères latins. Chacun de ces cas casse une hypothèse différente.

    Dans le navigateur, le sélecteur choisit l’arabe, la direction de l’application suit la culture de la session, et une seule propriété de conteneur met le tableau de bord en miroir. Rien ici n’est un état global : la direction, comme la culture, appartient à cette seule session.

    La passe pseudo-localisée révèle ce que l’anglais cachait, et la disposition reconstruite ne tronque plus. La grille de contacts est vérifiée et son comportement écrit plutôt que supposé, car une grille a ses propres règles de colonnes et d’alignement à contrôler.

    Atelier cinq : ajoutez l’arabe avec la direction automatique, mettez les deux écrans en miroir avec des enfants qui héritent, ajoutez une exception de gauche à droite commentée, rendez la disposition à l’épreuve des troncatures, et rédigez la liste de tests en cinq cas.

  4. LectureExercice de code avec l’IA · 20 min

    Construisez l’exemple GlobalDesk de ce module avec ChatGPT ou Claude à partir d’un prompt prêt à l’emploi qui oriente le modèle vers la spécification du module, puis relisez, exécutez et étendez ce qu’il vous renvoie.

    Lire le guide de la leçon (PDF)

  5. Quiz de connaissancesVérification des connaissances — Module 5 · 10 min · Note de réussite 80%
  6. Lab pratiqueLab — RightToLeftLayout, mise en miroir et une mise en page à l’épreuve des coupures · 45 min

    Objectif: Faites en sorte que GlobalDesk survive à une culture de droite à gauche. Ajoutez l’arabe au sélecteur de langue et mettez rightToLeft sur auto dans Default.json, laissez les contrôles enfants sur RightToLeft.Inherit, et activez RightToLeftLayout sur le tableau de bord et l’éditeur client pour que leurs enfants soient mis en miroir. Gardez exactement un contrôle de gauche à droite, le champ du code client, et expliquez dans un commentaire pourquoi cet identifiant ne doit pas être inversé. Reconstruisez avec du docking, de l’ancrage et un conteneur de mise en page la partie de l’écran placée à des positions fixes, pour qu’une traduction longue ne puisse pas être tronquée, ajoutez un fichier de ressources pseudo-localisé dont les valeurs sont allongées et encadrées de crochets, et notez ce que fait réellement la DataGridView des contacts en RTL au lieu de supposer qu’elle se met en miroir. Terminez par une liste de tests de mise en page en cinq cas que vous pourrez rejouer sur n’importe quel écran. Livrables : Entrée arabe dans le sélecteur de langue avec rightToLeft sur auto dans Default.json ; Tableau de bord et éditeur client utilisant RightToLeftLayout, leurs enfants restant sur Inherit ; Un contrôle délibérément laissé de gauche à droite, avec un commentaire expliquant l’exception ; Mise en page reconstruite avec docking, ancrage et un conteneur de mise en page pour qu’une traduction longue ne soit jamais tronquée ; Liste de tests RTL couvrant un texte court, un texte long, une fenêtre étroite, une culture RTL et la limitation de la DataGridView.

Module 6: Flux de traduction : ResX Resource Manager et autres outils

Module 6 de Localisation dans Wisej.NET — créez des applications multilingues avec des ressources .resx, une mise en forme adaptée à la culture, le changement de langue à l’exécution et des mises en page de droite à gauche. Lisez le guide de la leçon et le guide du lab / de l’examen, regardez la vidéo pas à pas sur le flux de traduction, réussissez la vérification des connaissances, puis réalisez le lab pratique dans GlobalDesk.

  1. LectureGuide de la leçon · 14 min

    Traiter la traduction comme un travail d’équipe : la matrice de ResX Resource Manager sur tous les .resx de la solution, l’ajout d’une colonne de langue et le filtre sur les entrées non traduites, les commentaires de ressource qui donnent du contexte aux traducteurs, les chaînes invariantes, la traduction automatique comme simple brouillon, l’export et l’import avec une plateforme capable de lire le RESX, et la relecture des diffs de ressources comme on relit du code. Ce que cela signifie pour un développeur qui connaît les bases de C# et les contrôles Wisej.NET et doit maintenant livrer son application dans plusieurs langues — et comment aborder ce module.

    Lire le guide de la leçon (PDF)

  2. LectureGuide du lab / de l’examen · 10 min

    Ce que vous allez construire dans le lab pratique, l’approche suggérée et les livrables attendus.

    Lire le guide de la leçon (PDF)

  3. Leçon vidéoUne grille de toutes les clés, de toutes les langues et de tous les manques · 14 min

    Une grille de toutes les clés, de toutes les langues et de tous les manques — une vidéo pas à pas guidée du Module 6, construite étape par étape dans GlobalDesk. Elle se lance directement ici, dans le lecteur.

    Transcription de la narration

    Module six. GlobalDesk possède déjà quatre fichiers de ressources. Ajouter l’italien avec deux onglets d’éditeur revient à comparer des listes de clés à l’œil, et la personne qui parle italien ne peut pas ouvrir la solution.

    Trois choses se cassent à ce stade : comparer des fichiers à l’œil, répondre à la question de savoir combien de traduction il reste, et remettre les chaînes à quelqu’un qui n’a jamais ouvert un fichier de ressources et ne devrait pas avoir à le faire.

    Un outil de gestion des ressources place les clés en lignes et chaque langue en colonnes, si bien qu’un manque est une cellule vide plutôt que quelque chose qu’il faut remarquer. Wisej.NET stocke son texte dans des fichiers de ressources .NET standard, aucune prise en charge particulière n’est donc nécessaire.

    Ce que l’outil écrit est un fichier de ressources italien ordinaire : exactement les clés du fichier neutre, les valeurs traduites, un commentaire sur celles qui étaient ambiguës, et une entrée délibérément laissée vide pour pouvoir démontrer le repli.

    Le cycle lui-même a une forme. Ajoutez la langue, filtrez pour ne voir que les entrées non traduites, rédigez les valeurs, marquez le nom du produit comme invariant pour que personne ne le traduise, puis relisez. Dans ce cycle, la relecture gagne sa place : le brouillon avait inversé deux espaces réservés.

    La traduction automatique produit un brouillon, pas un résultat. Revoyez la terminologie, les espaces réservés, la ponctuation, les touches d’accès et les noms de produits, puis lisez la différence dans le contrôle de version avant de valider le cycle, comme pour toute autre modification de l’application.

    Faites confiance au filtre, puis prouvez-le indépendamment. Ignorez les clés invariantes, comparez chaque recherche italienne à la valeur neutre, et listez chaque clé qui se replie encore sur l’anglais au lieu de supposer que la colonne est complète.

    Sous l’italien, les libellés viennent du fichier de ressources traduit, tandis que la date, la quantité et le montant sont formatés pour la culture active au moment où ils sont affichés. Ce sont deux mécanismes distincts qui font deux travaux distincts.

    Un développeur et deux langues peuvent vivre dans l’éditeur. Une équipe avec plusieurs langues veut l’outil de gestion des ressources. Les traducteurs qui ne sont pas développeurs ont besoin d’un cycle d’export et d’import, ou d’une plateforme de gestion des traductions.

    Atelier six : complétez une colonne italienne sans aucune clé non traduite, commentez trois clés ambiguës, marquez les invariants, relisez la différence du fichier de ressources, et rédigez la note de méthode.

  4. LectureExercice de code avec l’IA · 20 min

    Construisez l’exemple GlobalDesk de ce module avec ChatGPT ou Claude à partir d’un prompt prêt à l’emploi qui oriente le modèle vers la spécification du module, puis relisez, exécutez et étendez ce qu’il vous renvoie.

    Lire le guide de la leçon (PDF)

  5. Quiz de connaissancesVérification des connaissances — Module 6 · 10 min · Note de réussite 80%
  6. Lab pratiqueLab — Une colonne de langue, des commentaires et un diff relu · 45 min

    Objectif: Menez un vrai cycle de traduction sur GlobalDesk. Ouvrez la solution dans ResX Resource Manager, ajoutez l’italien comme nouvelle colonne de langue, et servez-vous du filtre des entrées non traduites pour lister toutes les clés encore sans valeur. Ajoutez un commentaire aux trois clés dont le sens est ambigu hors contexte, en commençant par le libellé d’un seul mot Open, puis traduisez ou faites pré-traduire automatiquement les valeurs italiennes et marquez le nom du produit et les deux identifiants techniques comme invariants pour que personne ne les traduise. Exportez la colonne neutre et la colonne italienne, réimportez-les, et relisez le diff .resx obtenu avant de le valider comme une seule modification relisible. Terminez par une note d’une page comparant l’éditeur de Visual Studio, ResX Resource Manager et une plateforme cloud pour une équipe dont les traducteurs ne sont pas développeurs. Livrables : Strings.it.resx produit avec ResX Resource Manager, sans aucune clé non traduite ; Commentaires de ressource sur au moins trois clés ambiguës pour donner le contexte au traducteur ; Marqueurs d’invariance sur le nom du produit et sur les identifiants qui ne doivent pas être traduits ; Export, réimport et diff .resx relu, validés comme une seule modification ; Note de flux de travail comparant l’éditeur de Visual Studio, ResX Resource Manager et un TMS cloud.

Module 7: Architecture de localisation en production, tests et projet de synthèse

Module 7 de Localisation dans Wisej.NET — créez des applications multilingues avec des ressources .resx, une mise en forme adaptée à la culture, le changement de langue à l’exécution et des mises en page de droite à gauche. Lisez le guide de la leçon et le guide du lab / de l’examen, regardez la vidéo pas à pas sur le LocalizationService du projet de synthèse, réussissez la vérification des connaissances, puis réalisez le lab pratique dans GlobalDesk.

  1. LectureGuide de la leçon · 14 min

    Une localisation qui tient en production : un LocalizationService léger au-dessus de ResourceManager, du code métier qui renvoie des valeurs plutôt que des phrases, une politique observable pour les clés manquantes, une matrice de tests de localisation, la pseudo-localisation qui révèle les chaînes codées en dur, le déploiement des assemblys satellites, et le projet de synthèse GlobalDesk. Ce que cela signifie pour un développeur qui connaît les bases de C# et les contrôles Wisej.NET et doit maintenant livrer son application dans plusieurs langues — et comment aborder ce module.

    Lire le guide de la leçon (PDF)

  2. LectureGuide du lab / de l’examen · 10 min

    Ce que vous allez construire dans le lab pratique, l’approche suggérée et les livrables attendus.

    Lire le guide de la leçon (PDF)

  3. Leçon vidéoUn service, une matrice de tests, un projet de synthèse achevé · 14 min

    Un service, une matrice de tests, un projet de synthèse achevé — une vidéo pas à pas guidée du Module 7, construite étape par étape dans GlobalDesk. Elle se lance directement ici, dans le lecteur.

    Transcription de la narration

    Localisation dans Wisej.NET, module sept, le projet de synthèse. GlobalDesk parle déjà deux langues. Ce que la production demande est une autre question : se comporte-t-il de façon prévisible pendant qu’il le fait.

    Quatre questions auxquelles l’application doit répondre de la même façon à chaque fois. D’où vient une chaîne donnée. Quelle culture est active en ce moment. Ce qui se passe quand une clé manque. Et ce qu’un changement de langue fait aux écrans déjà ouverts.

    Séparez d’abord le texte par propriétaire. Vos propres chaînes produit. Les libellés système que Wisej.NET fournit, redéfinis dans leur propre fichier de ressources. Et le texte de diagnostic, qui reste dans une seule langue pour les développeurs, car un journal est lu par l’équipe et non par le client.

    Un service de localisation centralise ces choix sans remplacer ce que .NET fait déjà. Un seul ResourceManager. Une recherche qui renvoie la clé entre crochets plutôt que rien. Et un formatage qui lit la culture en cours à chaque appel au lieu de la capturer une fois et de la garder.

    Ensuite, sortez la langue de l’écran et du modèle. Gardez la date comme une date et le montant comme un décimal, renvoyez un état sous forme de valeur d’énumération plutôt que de mot traduit, et laissez le service transformer tout cela en le libellé que l’utilisateur finit par lire.

    Tester ici, c’est une matrice écrite, pas un coup d’œil à un écran. Le neutre, le traduit, une région qui se replie sur sa langue, une clé manquante, des valeurs formatées, un changement en cours d’exécution, des chaînes délibérément longues, la direction de droite à gauche, et les libellés système du framework lui-même.

    La passe pseudo-localisée allonge chaque valeur et l’encadre de crochets. Tout ce qui affiche encore de l’anglais brut n’a jamais atteint un fichier de ressources, et tout ce qui est tronqué sous le texte plus long le sera aussi en allemand. Les deux constats viennent gratuitement de la même exécution.

    La démonstration tient en quatre preuves : des libellés allemands à côté de valeurs formatées par la culture, une boîte de dialogue système Wisej dans la même langue, une clé manquante qui se replie visiblement sur sa clé, et enfin la disposition de droite à gauche mise en miroir.

    Atelier sept : construisez le service de localisation, renvoyez des valeurs plutôt que des mots depuis le domaine, produisez le jeu pseudo-localisé, complétez la matrice de tests, et publiez en conservant les dossiers de culture.

  4. LectureExercice de code avec l’IA · 20 min

    Construisez l’exemple GlobalDesk de ce module avec ChatGPT ou Claude à partir d’un prompt prêt à l’emploi qui oriente le modèle vers la spécification du module, puis relisez, exécutez et étendez ce qu’il vous renvoie.

    Lire le guide de la leçon (PDF)

  5. Quiz de connaissancesVérification des connaissances — Module 7 · 10 min · Note de réussite 80%
  6. Lab pratiqueLab — Projet de synthèse : LocalizationService et la matrice QA · 45 min

    Objectif: Terminez le projet de synthèse GlobalDesk. Encapsulez toute recherche de ressource dans un LocalizationService doté de méthodes Text, Date, Number et Currency, donnez-lui une politique de clé manquante qui affiche la clé entre crochets en développement et la journalise en production, et faites de ce service le seul endroit où l’interface touche à ResourceManager. Gardez le métier en dehors de tout cela : le modèle de ticket expose une valeur TicketStatus et l’interface la convertit en libellé localisé. Déroulez ensuite la matrice de tests de localisation sur l’application terminée, en couvrant la culture neutre, l’allemand, une culture langue-région qui retombe sur le repli, une clé volontairement absente, les dates et les montants mis en forme, un changement à l’exécution, une passe sur les chaînes longues et la culture RTL, en vous servant d’un jeu de ressources pseudo-localisé pour révéler tout ce qui reste codé en dur. Vérifiez que les dossiers de culture survivent à une publication, et rendez la checklist QA comme livrable du projet de synthèse. Livrables : LocalizationService avec des méthodes Text, Date, Number et Currency et une politique documentée pour les clés manquantes ; Code métier qui renvoie une valeur TicketStatus que l’interface convertit en libellé localisé ; Jeu de ressources pseudo-localisé utilisé pour trouver toutes les chaînes encore codées en dur ; Matrice de tests de localisation complétée, couvrant le repli, la mise en forme, le changement à l’exécution et le RTL ; Sortie publiée vérifiée quant à ses dossiers de culture, plus la checklist QA de localisation de GlobalDesk.