我想创建一个带有一些下拉列表(DDL)项的多语言ASP.NET Web表单。需要从易于维护的源(例如,在web.config中或更好的,在.resx文件中)填充DDL。 DDL列表项必须使用名称/值对。
最终结果应该是这样的......
当UI文化是en-GB时......
<select id="MyDDL">
<option value="1">Dog</option>
<option value="2">Cat</option>
</select>
当UI文化是fr-FR ...
时 <select id="MyDDL">
<option value="1">Chien</option>
<option value="2">Chat</option>
</select>
达到预期效果的最佳方式是什么?
答案 0 :(得分:4)
在App_GlobalResources文件夹中创建两个资源文件。将它们命名为
Main.fr-FR.resx
Main.resx
然后在UI设置值中使用资源文件,如:
<select id="MyDDL">
<option value="1"><%=Resources.Main.value1 %></option>
<option value="2"><%=Resources.Main.Value2 %></option>
</select>
最后在配置和测试中设置UI文化。
答案 1 :(得分:0)
您需要为文件名中包含文化名称的每种语言(包括英语)提供资源文件(。 resx )。
E.g。
Site.resx
(默认)
Site.fr-FR.resx
(法语)
在这些资源文件中,将您的英语单词映射到法语(或您想要的任何其他语言)。然后在您的母版页或基类中设置文化。
Here's您如何全球化应用程序的完整示例。
答案 2 :(得分:0)
出于安全考虑,我最终使用外部.csv文件来保存下拉列表的语言。
我的.csv文件看起来像这样......
ID,Col1_english,Col1_irish
0,-- Select an option --,-- Roghnaigh --
64,Suggestion,Moladh a dhéanamh
59,Complaint,Gearán
61,Praise,Moladh a thabhairt
我用它填充DropDownList1就像这样...
DropDownList1.DataSource = new DataSet().GetDataFromCSV("Sentiments",Server.MapPath(my_CSV_path));
DropDownList1.DataValueField = "ID";
DropDownList1.DataTextField = "Col1_english";
GetDataFromCSV扩展方法......
public static DataSet GetDataFromCSV(this DataSet ds, string data_table_name,string csv_file_path)
{
string strLine;
string[] strArray;
char[] charArray = new char[] {','};
DataTable dt = ds.Tables.Add(data_table_name);
FileStream aFile = new FileStream(csv_file_path,FileMode.Open);
StreamReader sr = new StreamReader(aFile);
strLine = sr.ReadLine();
strArray = strLine.Split(charArray);
for(int x=0;x<=strArray.GetUpperBound(0);x++)
{
dt.Columns.Add(strArray[x].Trim());
}
strLine = sr.ReadLine();
while(strLine != null) {
strArray = strLine.Split(charArray);
DataRow dr = dt.NewRow();
for(int i=0;i<=strArray.GetUpperBound(0);i++)
{
dr[i] = strArray[i].Trim();
}
dt.Rows.Add(dr);
strLine = sr.ReadLine();
}
sr.Close();
return ds;
}
在Page_Load
期间,我从CurrentCulture
读取并相应地切换DropDownList1.DataTextField
值。
它并不优雅,但效果很好,因为我需要非技术人员来保持DropDownList文本和翻译的最新状态,并且无法使用数据库。
谢谢@Saminda&amp; @Sam - 你们都在寻找那种难以捉摸的优雅解决方案。