我已经用我的两个资源文件实现了以下内容:一个用于英语(LocalStrings),另一个用于德语(de-DE)。当我更改下拉列表时,它不会更改语言。没有错误,不是Visual Studio或Firebug。 任何建议?
<%@ Page Language="C#" AutoEventWireup="false" CodeFile="Default.aspx.cs" Inherits="_Default" uiculture="auto" Culture="auto:de-DE" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
<asp:Label ID="Label1" runat="server" meta:resourcekey="Label1" Text="<%$ Resources:LocalStrings, LastName %>"></asp:Label>
<br />
<br />
<asp:DropDownList ID="DropDownList1" runat="server">
<asp:ListItem Value="LocalStrings">English</asp:ListItem>
<asp:ListItem Value="de-DE">German</asp:ListItem>
</asp:DropDownList>
</form>
</body>
</html>
代码隐藏
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Globalization;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected override void InitializeCulture()
{
string cult = Request.Form["DropDownList1"];
if (cult != null)
{
String selectedLanguage = cult;
UICulture = selectedLanguage;
Culture = selectedLanguage;
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(selectedLanguage);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(selectedLanguage);
}
base.InitializeCulture();
}
}
答案 0 :(得分:0)
解决
资源文件的格式为ResourceName.culture.resx
在名为Main.resx的App_GlobalResources文件夹中创建资源文件。这是默认文化(即不变量)
然后创建一个资源文件Main.en-US.resx
这是恩美文化的所有资源都将存在的地方,等等。
Main.resx
Main.en.resx
Main.en-US-resx
Main.en-AU.resx
Main.fr.resx
Main.fr-FR.resx
etc.
要从网页访问此内容,请使用语法
<%$ Resources:Main, Email %>
不要担心文化,系统会解决这个问题。它将首先完全匹配(en-US),然后处理那些文化的父(en),父母的父(Invariant)。
更改“Main”的名称以满足您的需求