コンテンツから特別な置換文字列を選択してローカライズするために使用したこれの実装を次に示します。
protected string FindAndTranslateIn(string content)
{
return Regex.Replace(content, @"\{\^(.+?);(.+?)?}", new MatchEvaluator(TranslateHandler), RegexOptions.IgnoreCase);
}
public string TranslateHandler(Match m)
{
if (m.Success)
{
string key = m.Groups[1].Value;
key = FindAndTranslateIn(key);
string def = string.Empty;
if (m.Groups.Count > 2)
{
def = m.Groups[2].Value;
if(def.Length > 1)
{
def = FindAndTranslateIn(def);
}
}
if (group == null)
{
return Translate(key, def);
}
else
{
return Translate(key, group, def);
}
}
return string.Empty;
}
マッチ エバリュエーター デリゲートからは、置き換えたいものすべてを返すので、私が返す場所には太字のタグとエンコード呼び出しがあり、私のものは再帰もサポートしているため、必要に応じて少し複雑ですが、例を単純化することができますあなたの要望。
これは、一致のコレクションに対して反復を実行し、メソッドの置換ジョブの一部を実行することと同じです。いくつかのコードを節約するだけで、派手な shmancy デリゲートを使用できるようになります。