翻訳とメッセージにテキストファイルを使用する理由、.NETには翻訳用のオプションが組み込まれています。リソースを使用できます。リソースを使用する利点は、リソースがタイプセーフであり、コンパイル時にチェックされることです。テキストファイルが破損/欠落する可能性がある場所。
次のガイドは、Mvcプロジェクトでリソースを設定するのに役立ちます。
第一歩
デフォルトのアセンブリ言語を編集します。
- (C#)プロパティ>アセンブリ情報>ニュートラル言語
- (VB)私のプロジェクト>アセンブリ情報>中立言語
この言語をデフォルトの言語に設定します。(この例では、を使用しますEnglish (United States)
)
ステップ2
プロジェクトにリソースファイルを追加します。このファイルを呼び出しますResource.resx
。このファイルを開きます。アクセス修飾子をに変更し、Public
リソース文字列の追加を開始します。例えば:

ステップ3
別のリソースファイルをサポートする言語を互いに追加しますがResource.LANGUAGE.resx
、LANGUAGEが他のカルチャ名に置き換えられている場所に名前を付けます。カルチャ名については、次のURLを確認できます:http://msdn.microsoft.com/en-us/goglobal/bb896001.aspx
次に、新しいリソースファイルにローカライズされた文字列を入力します。例えば:
ステップ4
次に、モデルで属性のデフォルトのローカリゼーションサポートを使用できます。
例えば:
VB:
Imports System.ComponentModel.DataAnnotations
Public Class UserModel
<Display(Name:="UserNameField", ResourceType:=GetType(My.Resources.Resource))>
<Required(AllowEmptyStrings:=False, ErrorMessageResourceName:="RequiredUsername", ErrorMessageResourceType:=GetType(My.Resources.Resource))>
Public Property UserName As String
<Display(Name:="PasswordField", ResourceType:=GetType(My.Resources.Resource))>
<MinLength(6, ErrorMessageResourceName:="PasswordLengthError", ErrorMessageResourceType:=GetType(My.Resources.Resource))>
<Compare("PasswordAgain", ErrorMessageResourceName:="CompareError", ErrorMessageResourceType:=GetType(My.Resources.Resource))>
<Required(AllowEmptyStrings:=False, ErrorMessageResourceName:="RequiredPassword", ErrorMessageResourceType:=GetType(My.Resources.Resource))>
Public Property Password As String
<Display(Name:="PasswordAgainField", ResourceType:=GetType(My.Resources.Resource))>
<Required(AllowEmptyStrings:=False, ErrorMessageResourceName:="RequiredPasswordAgain", ErrorMessageResourceType:=GetType(My.Resources.Resource))>
Public Property PasswordAgain As String
End Class
C#
using System.ComponentModel.DataAnnotations;
public class UserModel
{
[Display(Name = "UserNameField", ResourceType = typeof(My.Resources.Resource))]
[Required(AllowEmptyStrings = False, ErrorMessageResourceName = "RequiredUsername", ErrorMessageResourceType = typeof(My.Resources.Resource))]
public string UserName;
[Display(Name = "PasswordField", ResourceType = typeof(My.Resources.Resource))]
[MinLength(6, ErrorMessageResourceName = "PasswordLengthError", ErrorMessageResourceType = typeof(My.Resources.Resource))]
[Compare("PasswordAgain", ErrorMessageResourceName = "CompareError", ErrorMessageResourceType = typeof(My.Resources.Resource))]
[Required(AllowEmptyStrings = False, ErrorMessageResourceName = "RequiredPassword", ErrorMessageResourceType = typeof(My.Resources.Resource))]
public string Password;
[Display(Name = "PasswordAgainField", ResourceType = typeof(My.Resources.Resource))]
[Required(AllowEmptyStrings = False, ErrorMessageResourceName = "RequiredPasswordAgain", ErrorMessageResourceType = typeof(My.Resources.Resource))]
public string PasswordAgain;
}
ローカリゼーションの場合、属性は静的プロパティの名前と、プロパティを取得する静的クラスのタイプを知っている必要があります(上記を参照)。
ステップ5
次に、ビューでを使用し@Html.ValidationSummary()
てすべてのエラーメッセージを取得するか、を使用します
- VB
@Html.ValidationMessageFor(Function(model) model.Property)
- C#
@Html.ValidationMessageFor(m => m.Property)
特定のエラーメッセージを取得します。
表示属性には、次のものを使用できます。
- VB
@Html.DisplayNameFor(Function(model) model.Property)
- C#
@Html.DisplayNameFor(m => m.Property)
言語の変更
最後になりましたが、ステップ1で定義した中立言語の代わりに、を編集しWeb.config
てグローバリゼーションタグを次のように変更することで、アプリの言語を変更できます。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<globalization uiCulture="nl" />
</system.web>
</configuration>
コードから言語を変更したい場合は、System.Threading.Thread.CurrentThread.CurrentUICulture
これに関する情報を編集する必要があります。グーグルまたは別のSOの質問をお勧めします。
サンプルプロジェクト
この質問に対して、私はすぐにサンプルプロジェクトを作成して、正確な答えを提供しました。プロジェクトはここで見つけることができます:
MvcVBTest.V1.zip
アップデート
リソースを使用せずに単一のテキストファイルを使用する場合は、リソースフレームワークが使用するのと同じ概念を使用できます。参照できる静的プロパティを持つクラスが必要です。
この目的のために、私は次のことをしました:
Resources
(Resources.vb) というクラスを作成しました。
- このクラスでは、というサブクラスを追加しました
Resource
- このクラスの静的コンストラクターで、次
resource.xml
の配列にマップしたものを開きます。Resource
- 次に、この配列はに変換されます
Dictionary(Of String, String)
- xml内のすべてのアイテムに対して静的なgetプロパティを作成しました。そして辞書から正しいアイテムを返しました
- クラスの
ResourceType
パラメータを変更しましたUserModel
そしてもちろん、少しクリーンアップします。古いリソースを削除したり、globalization
タグをから削除したりできますweb.config
。
resource.xml
これで、すべてのテキストがキーと値のペアとして見つかります。別の行を追加するには、それをXMLに追加し、Resource
クラス内にその行のプロパティを作成します。
サンプルプロジェクト
この更新では、サンプルプロジェクトを更新しました:
MvcVBTest.V2.zip