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.
A voir également:
[VB.NET] Problème changement de langue d'une application
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 ?