2009-08-27 8 views
2

J'ai une question sur la création d'une application multilingue et l'utilisation de fichiers de ressources. Je vais vous expliquer ce que j'ai fait et ce que j'aimerais que le produit final soit.Fichiers multilingues et ressources

Je fais cela en VB.Net et en utilisant Visual Studio 2008

Après avoir créé un nouveau projet, j'ai ajouté un fichier de ressources au projet (Ajouter -> Nouvel élément, fichier de ressources sélectionné, a nommé Resource1. resx). J'ai ensuite double-cliqué sur le fichier de ressources et j'ai pu ajouter des noms et des valeurs. Par exemple,

Nom - lblFirstName, valeur - John Nom - lblLastName, valeur - Smith

Sur ma forme, j'ai 2 étiquettes: FirstName, et LastName

Dans le code, j'ai ajouté

FirstName.Text = My.Resources.Resource1.lblFirstName 
LastName.Text = My.Resources.Resource1.lblLastName 

Si je cours ce code, cela fonctionne très bien. John et Smith sont affichés sur les étiquettes.

Maintenant pour ma question. Dites à la place du prénom et du nom les étiquettes (boutons, éléments de menu, etc.) étaient en fait des mots qui seraient différents dans différentes langues. Ce que je voudrais est d'avoir quelque chose comme

EnglishText.resx SpanishText.resx GermanText.resx

Chaque fichier de ressources contiendrait les mêmes noms, seulement des valeurs différentes. En fonction de la langue sélectionnée, décidée par l'utilisateur (à partir d'un menu), comment puis-je obtenir le fichier de ressources correspondant à utiliser.

Au fond ce que je veux serait

FirstName.Text = My.Resources.<Language Specific Resource File>.lblFirstName 

Est-ce quelque chose comme cela possible? Est-ce une approche acceptable? Existe-t-il une meilleure façon de le faire?

Des conseils ou astuces seraient grandement appréciés. J'essaie de vérifier souvent s'il y a des questions de suivi ou si d'autres informations doivent être fournies.

Répondre

0

Disons que, vous avez 3 langues que vous pourriez faire quelque chose comme ceci:

If LanguageChanger<change this to the way you let people change languages> = "English" Then 
Language = My.Resources.EnglishText 
else if LanguageChanger = "Spanish" Then 
Language = My.Resources.SpanishText 
else if LanguageChanger = "German" Then 
Language = My.Resources.GermanText 
End if 

Vous pourriez alors utilisez-le par:

FirstName.Text = Language.lblFirstName 

Je viens de le faire depuis ce formulaire , Ce n'est pas testé désolé si cela ne fonctionne pas

2
Imports System.Globalization 
Imports System.Resources 

Public Class Form1 
    Public rm As Resources.ResourceManager 

    Private Property CultureInfo As CultureInfo 
    Public Function getRMValue(ByVal strValue As String) 
     Dim strLanguage As String 

     If IsNothing(rm) Then 
      strLanguage = CultureInfo.CurrentCulture.ToString.ToUpper.Substring(0, 2) 
      If strLanguage = "EN" Then 
       rm = My.Resources.English.ResourceManager 
      Else 
       rm = My.Resources.Turkce.ResourceManager 
      End If 
     End If 
     getRMValue = rm.GetString(strValue) 
    End Function 
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 
    End Sub 
    Private Sub btnBye_Click(sender As Object, e As EventArgs) Handles btnBye.Click 
     MessageBox.Show(getRMValue("messagebox")) 

    End Sub 
End Class 

Resource screenshot

+0

Bienvenue sur Stack Overflow! Généralement, les réponses seront mieux reçues si vous incluez une brève description, même pour des réponses simples. – JoelC

Questions connexes