本地化适用于localhost,但不适用于生产环境

时间:2011-01-20 12:49:12

标签: asp.net localization

我的网站有英语和葡萄牙语支持。 在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;

有任何线索吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

我可以看到你对.NET中的本地化感到困惑。

首先,如果WebSiteMapGlobal.resx是巴西葡萄牙语,则无需将pt-br指定为文化,因为文化中立

问题可能是由于在设置语言后调用base.InitializeCulture()。您还应该发布一些关于页面执行的日志。

此外,还有一个软件工程提示:您应该在base.InitializeCulture()之后从空InitializeCulture()致电SetCulture()。结果是相同的(我只是要求您删除该调用)但是从其覆盖中调用基本方法是一种非常好的做法。