- あなたは、リソースの中にHTMLを混ぜることができます。リソース:
"This is {0}my{1} test"
、使用:string.Format(Resources.TestString, "<span class=\"x\">", "</span">)
"This is <span class="x">my</span> test"
- をあなたは
string.Format
を使用することができます。
- いくつかのカスタム書式設定スキームを使用することができます。たとえば、リソース:
"This is --my-- test"
を入力し、文字列を受け入れる拡張メソッドを書いて、すべて--
を正しいタグに置き換えます。
UPDATE
4.カスタムformatメソッドを使用することができます。以下のコードを参照してください。あなたが見ることができるように
Resources.Bla.Bla.FormatWith(new { Firstname = SomeVariable, AMOUNT = 4, currency = "USD" });
が、それは大文字小文字を区別しないで、あなたは定数と変数に混在させることができます:
あなたのリソースを使用すると、以下の方法でこのリソースを「消費」でしょうHello {firstname}, you still have {amount} {currency} in your bankaccount.
ようになります。私は翻訳者がオリジナルの英語の文字列にあるすべての "変数"を使用しているかどうかをチェックするカスタム翻訳Webアプリケーションを作った。それは私にとって非常に重要な点検です。
私は、反射を使用しているので、この方法はちょっと議論の余地があると付け加えておきますが、賛否両論の長所が重視されています。
public static string FormatWith(this string format, object source)
{
StringBuilder sbResult = new StringBuilder(format.Length);
StringBuilder sbCurrentTerm = new StringBuilder();
char[] formatChars = format.ToCharArray();
bool inTerm = false;
object currentPropValue = source;
var sourceProps = source.GetType().GetProperties();
for (int i = 0; i < format.Length; i++)
{
if (formatChars[i] == '{')
inTerm = true;
else if (formatChars[i] == '}')
{
PropertyInfo pi = sourceProps.First(sp=>sp.Name.Equals(sbCurrentTerm.ToString(), StringComparison.InvariantCultureIgnoreCase));
sbResult.Append((string)(pi.PropertyType.GetMethod("ToString", new Type[] { }).Invoke(pi.GetValue(currentPropValue, null) ?? string.Empty, null)));
sbCurrentTerm.Clear();
inTerm = false;
currentPropValue = source;
}
else if (inTerm)
{
if (formatChars[i] == '.')
{
PropertyInfo pi = currentPropValue.GetType().GetProperty(sbCurrentTerm.ToString());
currentPropValue = pi.GetValue(source, null);
sbCurrentTerm.Clear();
}
else
sbCurrentTerm.Append(formatChars[i]);
}
else
sbResult.Append(formatChars[i]);
}
return sbResult.ToString();
}
ウェイ1は非常に良いようです。しかし、私は自分自身で特別な文字をエスケープする必要があります:-(これらの3つの方法のうちの1つは、ほぼすべての人がこの問題を解決していますか? – Chris
私は4番目の方法でそれを行います – Gidon
基本的に私の方法はnr2のように見えますが、 "This is {italics} my {enditalics} test"という名前の要素があります。私はオブジェクトを取得するカスタムFormat関数を使い、オブジェクトのプロパティを入力文字列。私にとっては、膨大な量のリソースとそれに取り組んでいる多くの人々がいるため、最良の方法でした。名前付きアイテムを持つことで、理解しやすくなり、混乱を避けることができます。カスタムフォーマット拡張メソッド。私は誰かから取ってきて、少し微調整しました。 – Gidon