[VB.NET] Problème changement de langue d'une application

SyriusMarx - 22 août 2012 à 18:00
 SyriusMarx - 23 août 2012 à 16:43
Bonjour à tous,

Je développe un launcher en VB.NET pour un jeu. Je me suis récemment attaqué à la question du multilingue. Si tout marche parfaitement lorsque le launcher est exécuté dans le répertoire du projet, lorsqu'il est exécuté n'importe où ailleurs, seule la langue par défaut s'affiche même si le jeu est installé dans une autre langue (actuellement 2 : français-anglais).
Voilà comment je procède :
- au démarrage je vais chercher dans le registre la langue du jeu installé
- en fonction de celle-ci je change la culture
- je lance la fenêtre principale du launcher

Dans le dossier du projet, l'exécutable se lance bien en français ou en anglais suivant la valeur dans le registre tandis qu'à un autre endroit c'est toujours toujours la langue par défaut (à savoir le français). J'ai essayé de copier tous les fichiers générés avec (.xml, .pdb, .exe.config, .exe.manifest) mais rien n'y fait.

Voici mon code :

Public Class Init

    Private Sub Init_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim Language As String = ""
        Dim Registry As Microsoft.Win32.RegistryKey = Nothing
        Registry = Microsoft.Win32.Registry.LocalMachine

        Me.Hide()
        Me.Opacity = 0.0

        Try
            Language = Registry.OpenSubKey("SOFTWARE\Syton Entertainment\CnC Stargate Universe").GetValue("Language")
        Catch
            Language = "NULL"
        End Try

        Form_Debug.Show()
        Form_Debug.TXT_Debug01.Text = Language

        If Language = "french" Then
            Threading.Thread.CurrentThread.CurrentUICulture = New System.Globalization.CultureInfo("fr")
        Else
            Threading.Thread.CurrentThread.CurrentUICulture = New System.Globalization.CultureInfo("en")
        End If

        Launcher.Show()
        Me.Close()

    End Sub

End Class



C'est développé avec Visual Basic Express 2010 pour le framework.NET 2.0

- La fenêtre Launcher est en français par défaut et elle est intégralement traduite en anglais.
- Le paramètre localizable est activé.
- Le problème est identique si le launcher est lancé en admin.
- Rien ne se passe non plus si je mets la ligne "Threading.Thread.CurrentThread.CurrentUICulture = New System.Globalization.CultureInfo("en")" quoiqu'il arrive.
- Les fichiers de ressources (défaut comme anglais) ont "ressource incorporée" comme paramètre pour "action de génération".


Un grand merci à celui qui aurait une piste ou carrément la solution car de mon côté je bloque.

1 réponse

En fait il y a un fichier dll créer dans un autre dossier que je n'avais pas remarqué. En le déplaçant avec l’exécutable la traduction refonctionne.
Toutefois je ne trouve pas très pratique d'avoir des sous-dossiers et des dll au nom à rallonge ce qui m'amène à la question suivante :

Existe-t-il un moyen d'incorporer les ressources de langage dans l'exécutable au lieu d'avoir des dll séparés par langue. Ou pire peut-on modifier leurs emplacements et leurs noms ?
0
Rejoignez-nous