使用键“KeyName”的资源对象未找到。

4
我正在开发一个多语言的ASP.NET网站,使用App_GlobalResources。在App_GlobalResources文件夹中,我添加了两个资源文件:Resource.language.en-US.resx和Resource.language.fr-FR.resx。
我还添加了一个名为About.aspx的Web表单。在这个页面中,我添加了这个span标记:
<span>
    <asp:Literal ID="Literal1" runat="server" Text="<%$Resources:Resource.language, aboutFoundation%>" />
</span>

在代码后台:

public partial class About : BasePage
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Session["lang"] = "en";
    }
}

最后,是BasePage页面:
public class BasePage : System.Web.UI.Page
{
    protected override void InitializeCulture()
    {
        if (!string.IsNullOrEmpty(Request["lang"]))
        {
            Session["lang"] = Request["lang"];
        }
        string lang = Convert.ToString(Session["lang"]);
        string culture = string.Empty;
        if (lang.ToLower().CompareTo("en") == 0 || string.IsNullOrEmpty(culture))
        {
            culture = "en-US";
        }
        if (lang.ToLower().CompareTo("fr") == 0)
        {
            culture = "fr-FR";
        }
        Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(culture);
        Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture);

        base.InitializeCulture();
    }
}

现在当我运行这个项目时,我遇到了以下错误:

描述:在为服务此请求所需的资源解析期间发生错误。请查看以下特定的解析错误详细信息并相应地修改您的源文件。解析器错误消息:未找到键为'aboutFoundation'的资源对象。

可能出现什么问题呢? 提前感谢。

1个回答

4

您没有名为Resource.language的文件。您有一个Resource.language.en-US.resx和一个Resource.language.fr-FR.resx。因此,您可以在App_GlobalResources文件夹中添加一个名为Resource.language.resx的文件,并且其内容应与Resource.language.en-US.resx完全相同,或者您可以将Resource.language.en-US.resx重命名为Resource.language.resx,这样您将只有一个必需的Resource.language.resx


谢谢!现在它可以工作了。如果我将Resource.language.en-US.resx重命名为Resource.language.resx,当我使用英语语言时,它会从同一文件夹中获取值吗? - Hanady
@Hanady...我个人在创建多语言站点时更喜欢有三个资源文件。 - Salah Akbari
没错,这就是我所做的。谢谢! - Hanady

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接