2017-07-27 4 views
3

私はここで何かを紛失しているはずです。WPFアプリケーションのローカライズは機能しませんか?

私はVS2015で新しいWPFアプリケーションを作成します。私はリソース 'String1'を作成し、値を 'fksdlfdskfs'に設定します。

コンストラクタを持つように私は、デフォルトのMainWindow.xaml.csを更新:

public MainWindow() 
    { 
     InitializeComponent(); 
     this.Title = Properties.Resources.String1; 
    } 

し、アプリケーションを実行し、そしてそれは私のウィンドウのタイトルがfksdlfdskfsで、正常に動作します。

//In order to begin building localizable applications, set 
//<UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file 
//inside a <PropertyGroup>. For example, if you are using US english 
//in your source files, set the <UICulture> to en-US. Then uncomment 
//the NeutralResourceLanguage attribute below. Update the "en-US" in 
//the line below to match the UICulture setting in the project file. 

//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] 

だから私は私のWpfApplication5.csprojファイルに以下を追加して、VSでプロジェクトを再読み込み:

<UICulture>en-US</UICulture>

AssemblyInfo.csで

は、私は以下のコメントを参照してくださいファイルAssemblyInfo.csで次の行のコメントを外します。

[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] 

私は今、アプリケーションはもはや実行、アプリケーションを実行するために行くと私はリソースを読み込む行に次の例外を取得した場合:

System.Resources.MissingManifestResourceExceptionのを:適切な任意の リソースが見つかりませんでした指定された培養または中性のために 培養物。 「WpfApplication5.Properties.Resources.en-US.resources」を確認してください必要なすべてのサテライトアセンブリが署名したロード可能な、完全に であることを正しく コンパイル時に埋め込まれたまたはアセンブリ「WpfApplication5」にリンク、または ました。

私はAssemblyInfo.csファイルにUltimateResourceFallbackLocation.MainAssemblyUltimateResourceFallbackLocation.Satelliteを変更した場合、私の代わりに、次の例外を取得:

System.IO.IOException:リソース 'mainwindow.xaml' を見つけることができません

私は何が間違っているのですか、何が欠けていますか?

答えて

3
あなたはローカライズのための背後にあるコードを使用するように強制していない

、あなたは単に静的フィールドにバインドするx:Staticマークアップ拡張機能を使用することができます。

<Window 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:properties="clr-namespace:SandBox.Properties" 
    Title="{x:Static properties:Resources.TitleSandbox}"> 

</Window> 

はちょうどあなたのリソースファイルへのアクセス修飾子が公立

に設定されていることを確認してください

Screen resource file

あなたは通常、取得エラーメッセージが[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]は、EN EN-USリソースを使用するようにアプリを伝えるためにここにいるので、あなたがResource.en-US.resxファイルを持っていないことを意味ファイルをデフォルトのソースとして使用します。それはResource.resxを意味し、あると私はAssemblyInfo.csを残す

  • : は、あなたがエラーを取り除きたい場合は、私は個人的にWPFアプリケーションをローカライズするために何簡単な方法

    があるResources.en-US.resxという名前のファイルを追加します。ファイルが(EN-US一般的である)デフォルト

  • 私はこのようなデフォルトに次の追加Resource.{id}.resxファイルを作成するになります(言語IDなし): sample

// language is typically "en", "fr" and so on 
var culture = new CultureInfo(language); 
CultureInfo.DefaultThreadCurrentCulture = culture; 
CultureInfo.DefaultThreadCurrentUICulture = culture; 
// You'll need to restart the app if you do this after application init 

これは、ユーザがアプリケーション言語を変更することができるので、私は、ユーザー設定可能な言語IDと(典型的にはApp.xaml.csで)起動時に培養を強制通常Resource.resxと同じであるが、一致する言語

  • で翻訳され
  • +1

    これは最も簡単で最も基本的なアプローチですが、最大の注意点は、アプリを再起動する必要があることです。これに対処するための代替アプローチがいくつかありますが、それらの方法ではインターフェイス文字列が開発ウィンドウに表示されません(動的なので)。私は物事をより簡単にしたwpflocalizationextensionと呼ばれるライブラリがあったと思う。 – mcy

    +1

    大丈夫、ガイダンスのおかげで。それでは、Visual Studioの外で各言語のリソースを作成/編集することができますか、それともこのように各言語をコンパイルする必要がありますか?私たちが20カ国以上の言語を持っていて、それぞれの国が異なる時間に翻訳を送っていると、それは痛みになります。 – GoldieLocks

    +0

    私は自分自身でResXResourceManager(https://github.com/tom-englert/ResXResourceManager)を使用しています。これは、Visual Studio(すべてのファイルとすべての言語を1つのテーブルにリストするなど)で優れたエディション能力を提供するためです。 VSを使わずにresxファイルを編集するための専用のクライアントがあります。また、Excelファイルをエクスポート/インポートすることもできます – Uwy

    関連する問題