Τοπικη προσαρμογη σε C# δηλαδη Localization!
Οσοι εχουν δουλεψει σε πολυεθνικες θα γνωριζουν ποσο σημαντικο κομματι για ενα website ειναι να μπορει να διαβαζεται στη γλωσσα της καθε χωρας της οποιας η εταιρεια δραστηριοποιειται. Για παραδειγμα ενα ξενο eshop το οποιο εχει 4-5 βασικες γλωσσες οχι μονο το κανει ευρυ σε μεγαλυτερο κοινο αλλα αποδιδει και ενα κυρος. Στην εταιρεια που εργαζομαι το website μας εχει 14 διαφορετικες γλωσσες και πιστεψτε με, το να συντηρεις μια τετοια ιστοσελιδα δεν ειναι καθολου ευκολο πραγμα. Ομως, υπαρχουν μερικα εργαλεια της microsoft που βοηθανε. Ενα απο αυτα ειναι το namespace System.Globalization . Μεσω αυτου μπορουμε πχ αυτοματα να αλλαζει το format της ημερομηνιας αναλογα την χωρα για την ευκολια του χρηστη, ή ακομα να μεταφραζονται αυτοματα καποιες λεξεις οπως πχ τα ονοματα των ημερων. Στο παρακατω μικρο κομματι κωδικα το οποιο μεσω ενος dropdownlist εμφανιζει την ημερομηνια μεταφρασμενη στην culture που επιλεγουμε, “εμπλεξα” διαφορα και αυτο γιατι ετσι πιστευω οτι ηταν πιο αποδοτικο.
Σε ενα aspx αρχειο βαζουμε την html μας καθως και ενα dropdownlist και ενα label.
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Dropdownlist with Cultures</title> </head> <body> <form id="form1" runat="server"> <div> <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True"></asp:DropDownList> <asp:Label ID="Label1" runat="server" Text=""></asp:Label> </div> </form> </body> </html>
Kαι ο c# κωδικας
using System; using System.Collections.Generic; using System.Linq; 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) { if (!IsPostBack) { Dictionary<string, string=""> list = new Dictionary<string, string="">(); foreach (CultureInfo cult in CultureInfo.GetCultures(CultureTypes.NeutralCultures).OrderBy(x => x.EnglishName)) { list.Add(cult.Name , cult.EnglishName); } DropDownList1.DataSource = list; DropDownList1.DataTextField = "Value"; DropDownList1.DataValueField = "Key"; DropDownList1.DataBind(); } DateTime date1 = DateTime.Now; string selection = DropDownList1.SelectedValue; Label1.Text = date1.ToString("dddd d MMMM yyyy" , CultureInfo.CreateSpecificCulture(selection)); } }
Εφτιαξα λοιπον ενα Dictionary που εχει δυο string και στο οποιο παιρναω ολες τις cultures που μου δινει η CultureTypes.NeutralCultures. Επισης μεσω Linq τις κανω sort με αλφαβητικη σειρα. Μετα τις περναω σαν επιλογες στο dropdownlist και αναλογα την επιλογη του χρηστη ανανεωνεται η label. Αν θελετε ολο τον κωδικα, βρισκεται στο παρακατω αρχειο.