本地化asp.net下拉列表

时间:2014-09-17 23:35:07

标签: c# asp.net localization

我想创建一个带有一些下拉列表(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>

达到预期效果的最佳方式是什么?

3 个答案:

答案 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 - 你们都在寻找那种难以捉摸的优雅解决方案。