Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it L'avatar di pishta
    Registrato dal
    May 2006
    Messaggi
    138

    Consentire all'utente di scegliere una lingua

    Salve ho il seguente problema: sto sviluppando un sito con Visual Studio 2008 e vorrei consentire all'utente di scegliere tra due lingue, italiano e inglese.
    Ho un file dentro App_GlobalResources chiamato Language.resx per l'italiano e ne ho creato un altro chiamato Language.en.resx per l'inglese con le chiavi identiche. Come faccio ad associare il file della lingua in base ad una scelta dell'utente?

    grazie a tutti.

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    559
    CIAO! non ne sono sicurissimo, ma prova con questa istruzione:

    System.Threading.Thread.CurrentThread.CurrentUICul ture= new CultureInfo("en-us");

    (naturalmente, al posto di "en-us" ci metti il valore della query string)

    Spero di averti aiutato!
    se nella vita avro avuto la possiblita di aiutare qualcuno non avro vissuto invano (E. Dikinson)

  3. #3
    Utente di HTML.it L'avatar di pishta
    Registrato dal
    May 2006
    Messaggi
    138
    grazie! ma dove la dovrei mettere questa istruzione?

  4. #4
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    L'ho fatto per una sola pagina (di entrata) in un applicativo più grande, e funzionava.

    C'erano 4 file .resx:

    - stringhe.en.resx
    - stringhe.en-US.resx
    - stringhe.it.resx
    - stringhe.it-IT.resx

    (Cioè file risorse per l'inglese generico, per l'inglese che si parla negli US, per l'italiano generico, per l'italiano che si parla in Italia)

    La pagina era così:

    ASPX
    codice:
    <%@ Page Language="vb" etc %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    	<HEAD>
    		<title>Seleziona una lingua</title>
    	</HEAD>
    	<body bgcolor="#E8F404">
    		<form id="Form1" method="post" runat="server">
    			<asp: DropDownList AutoPostBack=True id="DropDownCulture" runat="server"></asp: DropDownList>
    			
    
    </p>
    			<hr>
    			
    
    </p>
    			<h1 id="h1" runat=server></h1>
    			<h2 id="h2" runat=server></h2>
    			<input id="btn" type=button runat=server onserverclick="btVai_Click">
    			<hr>
    			Lingua iniziale:<asp:Label id="linguaUtente" Runat=server></asp:Label>		
    		</form>
    	</body>
    </HTML>
    VB
    codice:
    Imports System.Globalization
    Imports System.Threading
    Imports System.Resources
    
    Public Class NOMEPAGINA
        Inherits System.Web.UI.Page
    
        Protected GestoreRisorse As New ResourceManager("NOMESOLUZIONE.stringhe", GetType(NOMECLASSEPAGINA).Assembly)
    
        Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            'Inserire qui il codice utente necessario per inizializzare la pagina
            If Not IsPostBack Then
                linguaUtente.Text = Request.UserLanguages(0)
    
                For Each cultura As CultureInfo In CultureInfo.GetCultures(CultureTypes.SpecificCultures)
                    DropDownCulture.Items.Add(New ListItem(cultura.EnglishName, cultura.Name))
                    If cultura.Name = Thread.CurrentThread.CurrentCulture.Name Then
                        DropDownCulture.SelectedIndex = DropDownCulture.Items.Count - 1
                    End If
                Next
            End If
        End Sub
    
        Private Sub Page_PreRender(ByVal sender As Object, _
            ByVal e As System.EventArgs) Handles MyBase.PreRender
            Response.Write("LINGUA CORRENTE:<font color=red>" & UCase(Thread.CurrentThread.CurrentCulture.NativeName) & "</font>
    ")
            Response.Write("LE DATE SARANNO:<font color=red>" & DateTime.Now.ToString("F") & "</font>
    ")
            Response.Write("GLI IMPORTI SARANNO (C):<font color=red>" & 1234567890.ToString("C") & "</font>
    ")
            Response.Write("GLI IMPORTI SARANNO (N):<font color=red>" & 1234567890.ToString("N") & "</font>
    ")
    
            h1.InnerHtml = GestoreRisorse.GetString("NOMECLASSEPAGINA.h1")
            h2.InnerHtml = GestoreRisorse.GetString("NOMECLASSEPAGINA.h2")
            btn.Value = GestoreRisorse.GetString("NOMECLASSEPAGINA.btn")
        End Sub
    
        Private Sub DropDownCulture_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DropDownCulture.SelectedIndexChanged
            ' Cambia lingua per il thread corrente
            Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(DropDownCulture.SelectedItem.Value)
            Thread.CurrentThread.CurrentUICulture = New CultureInfo(DropDownCulture.SelectedItem.Value)
        End Sub
    
        Public Sub btVai_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btVai.Click
            Response.Redirect("paginaMain.aspx")
        End Sub
    Nei .resx c'erano gli ID:

    NOMECLASSEPAGINA.h1
    NOMECLASSEPAGINA.h2
    NOMECLASSEPAGINA.btn

    Ognuno con le stringhe in linguaggio diverso per il titolo (h1), il sottotitolo (h2) ed il testo del bottone (btn).

    Ovviamente NOMECLASSEPAGINA e NOMESOLUZIONE li ho inseriti come nome generico.

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    559
    Originariamente inviato da pishta
    grazie! ma dove la dovrei mettere questa istruzione?
    Come segnalato da djciko,
    devi metterlo in un evento in cui intercetti la scelta dell' utente!

    tipo, se e' una combo, nell' onchange!
    se nella vita avro avuto la possiblita di aiutare qualcuno non avro vissuto invano (E. Dikinson)

  6. #6
    Utente di HTML.it L'avatar di pishta
    Registrato dal
    May 2006
    Messaggi
    138
    grazie mille per le risposte vi farò sapere ;D

  7. #7
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,582
    il problema principale è come fare per far modificare le scritte direttamente dall'utente
    in effetti non puoi fare una maschera che va a scrivere nel file di risorse

    oppure come si fa?
    altrimenti mi chiameranno ogni 2 minuti per chiedere di modificare le scritte
    grazie
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

  8. #8
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Originariamente inviato da Kahm
    il problema principale è come fare per far modificare le scritte direttamente dall'utente
    in effetti non puoi fare una maschera che va a scrivere nel file di risorse

    oppure come si fa?
    altrimenti mi chiameranno ogni 2 minuti per chiedere di modificare le scritte
    grazie
    Credo che sia un po OT. Comunque nel DB, no ? Con un link che apre una popup per la modifica.

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    559
    Effetivamente è un po contorto :-(
    per modificare via codice un fle .resx, cioe un file di risorse, il procedimento è questo:

    XmlDocument loResource = new XmlDocument();
    loResource.Load(Server.MapPath("/App_GlobalResources/tuaRisorsa.resx"));

    XmlNode loRoot = loResource.SelectSingleNode("root/data[@name='RequiredFields']/value");

    if (loRoot != null)
    {
    loRoot.InnerText = "test";
    loResource.Save(Server.MapPath("/App_GlobalResources/TDLResources.de-DE.resx"));
    }

    Questo perche' i .resx sono in realtà degli xml.
    se nella vita avro avuto la possiblita di aiutare qualcuno non avro vissuto invano (E. Dikinson)

  10. #10
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,582
    grazie sei stato gentilissimo

    ora ho appena una difficolta qui
    codice:
     Protected GestoreRisorse As New ResourceManager("NOMESOLUZIONE.stringhe", GetType(NOMECLASSEPAGINA).Assembly)
    nomesoluzione.stringe : sarebbe il nome della soluzione.nome progetto vero?
    nomeclassepagina: sarebbe la classe con cui ho creato l apagina? nel tuo esempio è NOMEPAGINA,mentre qui hai scritto NOMECLASSEPAGINA


    grazie dei chiarimenti
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.