Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

.Resx αρχεία και DropDownList

Îåêßíçóå áðü ôï ìÝëïò epp1123. Τελευταία δημοσίευση από το μέλος epp1123 στις 06-10-2008, 16:26. Υπάρχουν 5 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  06-10-2008, 13:08 45179

    .Resx αρχεία και DropDownList

    Καλημέρα καλημέρα, τι κάνετε πως είστε; Λοιπόν το ζήτημα έχει ως εξής:


    Έχω ένα drop downlist, και τρία .resx αρχεία εκ των οποίο το ένα είναι το fallback. Το Dropdonwlist έχει τα ονόματα των γλωσσών. Απλά δεν έχω βρει ακόμη πως όταν διαλέγει ο χρήστης μία γλώσσα από το ddl να φορτώνει και το ανάλογο .resx. Τις τιμές στα controls τις περνάω από το expression property. Ευχαριστώ
  •  06-10-2008, 13:45 45180 σε απάντηση της 45179

    Απ: .Resx αρχεία και DropDownList

    http://www.dotnetzone.gr/cs/forums/thread/43991.aspx

  •  06-10-2008, 14:53 45184 σε απάντηση της 45179

    Απ: .Resx αρχεία και DropDownList

    Οι τιμές φορτώνονται αυτόματα από το ίδιο το .NET ανάλογα με τη γλώσσα του χρήστη (για την ακρίβεια, τη γλώσσα του λειτουργικού). Μπορείς να αλλάξεις τη γλώσσα που χρησιμοποιείται αν αλλάξεις το CurrentUICulture του thread της εφαρμογής σου. Για παράδειγμα, το παρακάτω αλλάζει τη γλώσσα στα γερμανικά:

    Thread.CurrentThread.CurrentUICulture = new CultureInfo("de");

    Μπορείς να βάλεις τα ονόματα των διαφόρων cultures ως values στο dropdown και να αλλάζεις το culture όταν ο χρήστης αλλάζει την επίλογή του. Δεν θυμάμαι μόνο αν μετά χρειάζεται και ένα Refresh για να φορτωθούν τα νέα strings ... και δεν προλαβαίνω τώρα να το δοκιμάσω Sad


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  06-10-2008, 15:17 45185 σε απάντηση της 45184

    Απ: .Resx αρχεία και DropDownList

    Έτσι το έχω κάνει αλλά τα κείμενα δεν αλλάζουν. Συγκεκριμένα το ddl το έχω στη masterpage και περνάω την γλώσσα σαν querystring σε κάθε σελίδα. Συγκεκριμένα, όταν ο χρήστης διαλέγει γλώσσα τρέχει ο εξής κώδικας:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        Protected Sub LanguageDDL_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs)
    Select Case LanguageDDL.SelectedItem.Value
    Case 1
    Response.Redirect(Request.Path & "?LangID=" & 1)
    Case 2
    Response.Redirect(Request.Path & "?LangID=" & 2)
    Case 3
    Response.Redirect(Request.Path & "?LangID=" & 3)
    End Select
    End Sub

    Όταν η εκάστοτε σελίδα παίρνει το query string, μέσα στη Page_Init τρέχει ο εξής κώδικας

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
             
    Select Case Request.QueryString("LangID")
    Case 1
    Thread.CurrentThread.CurrentCulture = New CultureInfo("el-GR")
    Thread.CurrentThread.CurrentUICulture = New CultureInfo("el")

    Case 2
    Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US")
    Thread.CurrentThread.CurrentUICulture = New CultureInfo("en")

    Case 3
    Thread.CurrentThread.CurrentCulture = New CultureInfo("de-DE")
    Thread.CurrentThread.CurrentUICulture = New CultureInfo("de")

    End Select

    Τα ονόμα των .resx αρχείων έχουν ως εξής

    1. LanguageResource.resx (ελληνικά , fallback)
    2. LanguageResource.en.resx (αγγλικά)
    3. LanguareResource.de.resx (γερμανικά)

    Και μία ερώτηση κ Καναβέ. Όταν λέτε ότι φορτώνει με τη γλώσσα του λειτουργικού φαντάζομαι ότι εννοείται την γλώσσα του λειτουργικού που χρησιμοποιείται ως web server υπολογιστή, γιατί αλλιώς διαβάζει τη γλώσσα του browser από τον τελικό χρήστη.


  •  06-10-2008, 16:17 45186 σε απάντηση της 45185

    Απ: .Resx αρχεία και DropDownList

    Ουπς, έκανα λάθος και νόμιζα ότι μίλαγες για WinForms. Σε Webforms πρέπει να πειράξεις και τα Page.Culture, Page.UICulture. Επίσης, δεν υπάρχει λόγος να φτιάξεις αυτό το Select Case. Απλά βάλε στο dropdown ως Value τα culture strings.

    Ρίξε μία ματιά στο sample που έχει το MSDN και κάνει ακριβώς αυτό που θέλεις. Το αντιγράφω κιόλας για να δεις πόσο απλό είναι:

    <%@ Page Language="VB" uiculture="auto" %>
    <%@ Import Namespace="System.Threading" %>
    <%@ Import Namespace="System.Globalization" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML
    1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

    <script runat="server">
    Protected Overrides Sub InitializeCulture()
       If Request.Form("ListBox1") IsNot Nothing Then
          Dim selectedLanguage As String = Request.Form("ListBox1")
          UICulture = Request.Form("ListBox1")
          Culture = Request.Form("ListBox1")
          Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(selectedLanguage)
          Thread.CurrentThread.CurrentUICulture = New CultureInfo(selectedLanguage)
       End If
       MyBase.InitializeCulture()
    End Sub
    </script>
    <html>
       <body>
          <form id="form1" runat="server">
             <div>
                <asp:ListBox ID="ListBox1" runat="server">
                   <asp:ListItem Value="en-US" Selected="True">English</asp:ListItem>
                   <asp:ListItem Value="es-MX">Español</asp:ListItem>
                   <asp:ListItem Value="de-DE">Deutsch</asp:ListItem>
                </asp:ListBox>

                <br />
                <asp:Button ID="Button1" runat="server" Text="Set Language" meta:resourcekey="Button1" />
                <br />
                <asp:Label ID="Label1" runat="server" Text="" meta:resourcekey="Label1" />
             </div>
          </form>
       </body>
    </html>


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  06-10-2008, 16:26 45189 σε απάντηση της 45186

    Απ: .Resx αρχεία και DropDownList

    Ερώτηση κρίσεως 1 : Ποια η διαφορά των Page.(UI)Culture και των Thread.CurrentThread.Current(UI)Culture????

    Ερώτηση κρίσεως 2 : Εάν βάλουμε τον κώδικα μέσα στην Page_Init πχ ή στην Page_Prerender δε θα τρέξει;;; Πρέπει αναγκαστικά να πάει μέσα στην InitializeCulture??
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems