我在 asp.net 应用程序上使用资源,需要在客户端上提供键/值对。我已经能够通过使用HttpHandler将它们用于特定的 资源文件 ,但标准的继承不能与我正在使用的代码一起使用。
Base PM.resx 文件包含以下内容
key: a value: AAAAAA
key: b value: BBBBBB
key: c value: CCCCCC
PM.pt.resx 文件包含以下内容
key: a value: ptptpt
当我在浏览器上有pt
文化或编码时,我希望得到以下内容,因为pt
文件中只有一个条目,而基本文件包含剩下的键/值对。
key: a value: ptptpt
key: b value: BBBBBB
key: c value: CCCCCC
但我只是得到以下内容。
key: a value: ptptpt
我用来生成JavaScript的c#代码如下。
public void ProcessRequest(HttpContext context)
{
ResourceManager rm = new ResourceManager("Resources.PM", System.Reflection.Assembly.Load("App_GlobalResources"));
Thread.CurrentThread.CurrentCulture = new CultureInfo("pt-BR");//for testing culture change
//ResourceSet resourceSet = rm.GetResourceSet(CultureInfo.CurrentUICulture, true, true);
ResourceSet resourceSet = rm.GetResourceSet(Thread.CurrentThread.CurrentCulture, true, true);
string r = string.Empty;
if (resourceSet != null)
{
foreach (DictionaryEntry entry in resourceSet)
{
string resourceKey = entry.Key.ToString();
object resource = entry.Value.ToString();
r += "\"" + entry.Key.ToString() + "\": \"" + entry.Value.ToString() + "\", ";
}
}
r = "var q = {" + r + " culture: \"" + Thread.CurrentThread.CurrentCulture.ToString() + "\"};";
r += "console.log(q);$.each(q, function(k, v){console.log(k + \": \" + v)});";
context.Response.Write(r);
}
如何在代码中使用继承?
答案 0 :(得分:0)
我已经找到了解决问题的方法。我创建了两个ResourceSets
;一个用于默认语言(用于默认资源),另一个用于当前语言(用于特定于语言的资源)。然后我创建了dictionary
个字符串,首先添加了特定于语言的键/值对,然后是默认的键/值对。如果已存在特定于语言的键,则不会添加默认语言。
public void ProcessRequest(HttpContext context)
{
string responseString = string.Empty;
CultureInfo currentCulture = CultureInfo.CurrentUICulture;
ResourceManager rm = new ResourceManager("Resources.PM", System.Reflection.Assembly.Load("App_GlobalResources"));
CultureInfo defaultCulture = new CultureInfo("en-US");
ResourceSet currentRS = rm.GetResourceSet(currentCulture, true, true);
ResourceSet defaultRS = null;
if (defaultCulture != currentCulture)
{
defaultRS = rm.GetResourceSet(defaultCulture, true, true);
}
Dictionary<string, string> translations = new Dictionary<string, string>();
if (currentRS != null)
{
foreach (DictionaryEntry entry in currentRS)
{
try {
translations.Add(entry.Key.ToString(), entry.Value.ToString());
}
catch (Exception e) { }
}
}
if (defaultRS != null)
{
foreach (DictionaryEntry entry in defaultRS)
{
try {
translations.Add(entry.Key.ToString(), entry.Value.ToString());
}
catch (Exception e){}
}
}
foreach (KeyValuePair<String, String> entry in translations)
{
responseString += "\"" + entry.Key.ToString() + "\": \"" + entry.Value.ToString() + "\", ";
}
responseString = "var translations = {" + responseString + " culture: \"" + currentCulture.ToString() + "\"};";
context.Response.Write(responseString);
Compress(context);
//SetHeadersAndCache(absolutePath, context);
}
注意:我没有说明在这里转义我的键和值对。这是我必须在我的代码中跟进的内容。
我希望这有助于其他人下线!