2009-08-27 10 views
2

多言語アプリケーションの作成とリソースファイルの使用に関する質問があります。私は何をしたのか、最終製品をどのようにしたいのかを説明します。 >リソース1と命名新しい項目、選択したリソースファイルを、 -複数言語とリソースファイル

私はVB.Netでこれをやって、新しいプロジェクトを作成した後のVisual Studio 2008の

を使用しています、私は追加(プロジェクトにリソースファイルを追加しました。 resx)。

次に、リソースファイルをダブルクリックしていくつかの名前と値を追加できました。例えば、

名 - lblFirstName、値 - ジョン 名 - - lblLastName、値スミス

私のフォームで、私は2つのラベルがあります:コードでのFirstName、およびLastName

を、私は

を追加しました
FirstName.Text = My.Resources.Resource1.lblFirstName 
LastName.Text = My.Resources.Resource1.lblLastName 

このコードを実行すると正常に動作します。 JohnとSmithがラベルに表示されます。

今質問します。姓と名字の代わりに、ラベル(ボタン、メニュー項目など)は実際には異なる言語で異なる単語でした。私が希望すると、同じ名前、ちょうど別の値が含まれます

EnglishText.resx SpanishText.resx GermanText.resx

各リソースファイルのようなものを持っていることです。ユーザーが(メニューから)選択した言語に応じて、使用する一致するリソースファイルを取得する方法を教えてください。

基本的に私が欲しいもの

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

だろうが、この可能性のようなものですか?これは容認できるアプローチですか?これを行うより良い方法はありますか?

アドバイスやアドバイスをいただければ幸いです。私は、フォローアップの質問があるかどうか、またはより多くの情報を提供する必要があるかどうかを頻繁に確認しようとします。

答えて

2

.NETプラットフォームは、ローカリゼーションを念頭に置いて構築されています。現在の文化に基づいてアセンブリとリソースをローカライズするための先天性のメカニズムが既に存在します。ここでは、独自のロールしようとする前に読むべきいくつかのスターターリンクは以下のとおりです。

http://msdn.microsoft.com/en-us/library/bb398937.aspx
http://msdn.microsoft.com/en-us/goglobal/bb688096.aspx

0

あなたはこのような何かを行うことができます3つの言語を持っている、のは、言ってみましょう:

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 

あなたは可能性があり

FirstName.Text = Language.lblFirstName 

このフォームからこれを実行しました。それはスタックオーバーフローに

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

へようこそ動作しない場合、それはとても残念にテストされていません!単純な回答の場合でも簡単な説明を含めると、通常、回答がよりよく受信されます。 – JoelC