2014-09-17 5 views
1

Я хочу создать многоязычную веб-форму ASP.NET с некоторыми элементами dropdownlist (DDL). DDL необходимо заполнять из легко поддерживаемого источника (например, в web.config или еще лучше, в .resx-файлах). Элементы списка DDL должны использовать пару имя/значение.Локализация asp.net dropdownlist

Конечный результат должен быть что-то вроде этого ...

Когда культура пользовательского интерфейса EN-GB ...

<select id="MyDDL"> 
     <option value="1">Dog</option> 
     <option value="2">Cat</option> 
    </select> 

Когда культура пользовательского интерфейса FR-FR ...

<select id="MyDDL"> 
     <option value="1">Chien</option> 
     <option value="2">Chat</option> 
    </select> 

Что является самым элегантным способом достижения желаемого результата?

ответ

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 и переводы, обновлять и не использовать базу данных.

Thanks @Saminda & @Sam - вы были на правильном пути к этому неуловимому элегантному решению.

0

Для каждого языка (включая английский) необходимо указать файл ресурсов (resx) с именем культуры в имени файла.

E.g.

Site.resx (по умолчанию) Site.fr-FR.resx (для французского)

В этих файлах ресурсов сопоставить английские слова на французском языке (или любой другой язык, который вы хотите). Затем установите культуру на главной странице или в базовом классе.

Here's полный пример того, как вы глобализируете свое приложение.

2

Создайте два файла ресурсов в папке App_GlobalResources. Назовите их как

Main.fr-FR.resx

Main.resx

Затем в установленное значение пользовательского интерфейса, используя файл ресурсов, как:

<select id="MyDDL"> 
    <option value="1"><%=Resources.Main.value1 %></option> 
    <option value="2"><%=Resources.Main.Value2 %></option> 
</select> 

Наконец установить культуру пользовательского интерфейса в конфигурации и тест.

+0

Это полезно, но это больше того, что я искал ... http://www.devtrends.co.uk/blog/programmatically-retrieving-items-from-resource-files-in-.net My собственная ошибка - я должен быть более явным при допросе. – cymorg

Смежные вопросы