我的网站有英语和葡萄牙语支持。 在localhost中,一切正常,内容基于名为“lang”的查询字符串参数进行翻译。
这一段代码在每一页都有诀窍:
protected override void InitializeCulture()
{
SetCulture();
}
private void SetCulture()
{
var logger = Util.GetLogger();
string lang = Request.QueryString["lang"];
if (string.IsNullOrEmpty(lang)) { lang = "pt-br"; }
string sessionLang = (string)Session["lang"];
if (sessionLang != lang)
{
Session["lang"] = lang;
}
logger.Log(string.Format("Culture {0} found",lang));
UICulture = lang;
Culture = lang;
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(lang);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(lang);
logger.Log(string.Format("Cultura {0} set", lang));
base.InitializeCulture();
}
感谢记录器,我可以确定在两种情况下都会调用此方法(生产和本地主机)。
我在App_GlobalResources文件夹中有两个资源文件: -WebSitemapGlobal.en-us.resx; -WebSitemapGlobal.resx;
有任何线索吗?
提前致谢。
答案 0 :(得分:0)
我可以看到你对.NET中的本地化感到困惑。
首先,如果WebSiteMapGlobal.resx
是巴西葡萄牙语,则无需将pt-br
指定为文化,因为文化中立
问题可能是由于在设置语言后调用base.InitializeCulture()
。您还应该发布一些关于页面执行的日志。
此外,还有一个软件工程提示:您应该在base.InitializeCulture()
之后从空InitializeCulture()
致电SetCulture()
。结果是相同的(我只是要求您删除该调用)但是从其覆盖中调用基本方法是一种非常好的做法。