2011-07-06 14 views
5

C#は、オンザフライや類似の文字列を翻訳する方法を提供していますか?C#文字列変換

私は今、このようないくつかの部分があり、いくつかのレガシーコード、に取り組んでいます

section.AddParagraph(String.Format("Premise: {0}", currentReport.Tenant.Code)); 
section.AddParagraph(String.Format("Description: {0}", currentReport.Tenant.Name)); 

section.AddParagraph(); 

section.AddParagraph(String.Format("Issued: #{0:D5}", currentReport.Id)); 
section.AddParagraph(String.Format("Date: {0}", currentReport.Timestamp.ToString(
        "dd MMM yyyy", CultureInfo.InvariantCulture))); 
section.AddParagraph(String.Format("Time: {0:HH:mm}", currentReport.Timestamp)); 

ので、私はベースのオンザフライこれらの文字列の翻訳を実装したいですいくつかの置換表(例えば、Qtのように)。

  • これが可能である(多分、持ってすでに何C#ものを使用したり、いくつかの後処理を使用して - PostSharpで可能かもしれませんか)?
  • C#(ゼロから)で構築されたアプリケーションのいくつかの一般的な内部化アプローチはありますか?

答えて

6

(最初から)のC#で構築されたアプリケーションのためのいくつかの一般的な内部化アプローチが存在しますか?

はい、resource filesを使用します。そしてここにMSDNのanother articleがあります。私は現在の仕事C#プロジェクトで

1

、私たちはこのように動作しますヘルパー関数を書いた:ビルド時に

section.AddParagraph(I18n.Translate("Premise: {0}", currentReport.Tenant.Code)); 
section.AddParagraph(I18n.Translate("That's all"); 

を、スクリプトは、すべてのI18n.Translate呼び出しだけでなく、すべてのUIコントロールを検索すべての英語のフレーズで表を作成します。これは翻訳されます。

実行時に、英語のテキストが辞書で検索され、翻訳されたテキストに置き換えられます。 winforms Dialogリソースに似たようなことが起こります。それらは英語で構築され、同じ辞書を使用して翻訳されます。

このスキームの最大の強みは、最大の弱点です。同じ文字列を2か所で使用すると、同じように変換されます。これにより、トランスレータに送信するファイルが短くなり、コストを削減できます。同じ英語の言葉の別の翻訳を強制する必要がある場合は、そのことを回避する必要があります。私たちがシステムを持っている限り(4年以上)、私たちはそれを必要としませんでした。メリット:英語のUIテキストをインラインで読み込み(名前を付ける必要がある識別子の背後に隠れないように)、コードを削除すると翻訳されたリソースから自動的に削除されます。

+0

ああ、i18nはi-nternationalizio-nを表します。 –