54 messaggi dal 07 aprile 2005
l'oggetto a db dispone di due campi:

[testo_it] per il testo in italiano
[testo_en] per il testo in inglese

ho provato sia con Globalresources che con Localresources ma non mi riesce d passare ad un semplice

<%#Eval("testo")%>

la stringa che indirizzi Eval a recuperare a database un campo piuttosto dell'altro

la sqlstring SELECT a monte li recupera entrambi ma vorrei mostrarne uno o l'altro a seconda della localizzazione della pagina

semplicemente (si fa per dire dato che questo è il problema contingente) passando all'interno di #Eval una funzione che restituisca "testo_it" o "testo_en" prima che Eval valuti la stringa

ho provato in diversi modi ad "incastrare" all'interno di Eval sia
<asp:Literal ID="Literal3" runat="server" meta:resourcekey="testo" />
sia
<asp:literal ID="Literal1" Text="<%$ Resources:LocalizedText, testo %>" runat="server" />

ma mi si incrociano gli occhi sulle virgolette e, più semplicemente, non ne vengo a capo

idee in proposito?
luc_asp wrote:
ho provato sia con Globalresources che con Localresources ma non mi riesce d passare ad un semplice

<%#Eval("testo")%>

dovrebbe bastare un semplice <%# Eval("campo_" + locale)%>
dove
string locale = Thread.CurrentThread.CurrentCulture.Name
con visibilità su tutta la classe.

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP
54 messaggi dal 07 aprile 2005
dato che il quesito non trova migliore soluzione mi.. rispondo un possibile workaround sperando che possa risultare utile ad altri

ho inserito entrambi i campi in due label

<p>
<asp:label runat="server" ID="testo_it" Text='<%# Replace(Eval("prog_testo_it").ToString(), VbCrLf, "<br />") %>' Visible="false" />
<asp:label runat="server" ID="testo_en" Text='<%# Replace(Eval("prog_testo_en").ToString(), VbCrLf, "<br />") %>' Visible="false" /></p>

e ne rendo alternativamente visibile uno in funzione della localizzazione così:

Dim CurrentContext As HttpContext = HttpContext.Current
Dim UserCulture As String = CurrentContext.Profile.GetPropertyValue("PreferredCulture").ToString()
If UserCulture = "it-IT" Then
subtitle_it.Visible = True
testo_it.Visible = True
Else
subtitle_en.Visible = True
testo_en.Visible = True
End If

assolutamente "inelegante"

però funziona
54 messaggi dal 07 aprile 2005
oops, sembra che abbiamo risposto contemporaneamente

grazie, verifico la soluzione proposta
Modificato da luc_asp il 25 luglio 2006 14.36 -
54 messaggi dal 07 aprile 2005
Daniele,
l'idea è molto buona

nel mio caso però non funziona: temo abbia a che vedere con la mia gestione della localizzazione dell'intera applicazione con l'utilizzo dei profili su db sql

ogni mia classe eredita da una pagina localizePage che eredita a sua volta da System.Web.UI.Page

è molto breve e faccio prima a postarla:

Public Class localizePage
Inherits System.Web.UI.Page
Protected Overrides Sub InitializeCulture()
Dim CurrentContext As HttpContext = HttpContext.Current
Dim UserCulture As String = CurrentContext.Profile.GetPropertyValue("PreferredCulture").ToString()
If UserCulture <> "" Then
Thread.CurrentThread.CurrentUICulture = New CultureInfo(UserCulture)
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(UserCulture)
End If
End Sub
End Class

ora, modificando la lingua (nella master.page) vado a variare il valore nel profilo, e ricarico la pagina per visualizzare il nuovo contenuto localizzato

Sub Flag_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs)
Dim SelectedLanguage As String = sender.CommandArgument.ToString()
Profile.SetPropertyValue("PreferredCulture", SelectedLanguage)
Response.Redirect(Request.Url.LocalPath)
End Sub

al finale della storia.. se nella mia pagina inserisco

Public Shared locale As String = (Thread.CurrentThread.CurrentCulture.Name).Substring(0, 2)

il valore di locale resta comunque e sempre 'it', indipendentemente dalla lingua selezionata (e correttamente visualizzata)
luc_asp wrote:
al finale della storia.. se nella mia pagina inserisco
Public Shared locale As String =
(Thread.CurrentThread.CurrentCulture.Name).Substring(0, 2)

perchè sbagli a valorizzarla in quel modo, dovresti farlo dopo averlo applicato la lingua, cioè nel Page_Load, probabilmente.
abilita il trace e vedrai che è come ti dico io, mettendo quel codice ottieni il valore prima che la DropDownList o quello che è abbia cambiato la lingua stessa.

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP
luc_asp ha scritto:

assolutamente "inelegante"

però funziona

Inelegante è un eufemismo.

Ho i peli che fan la hola. Integrità referenziale, tabelle di codifica e il paradigma OOP.

E se aggiungi un'altra lingua che fai ? segui tutto il codice ?

Fabrizio Canevali
54 messaggi dal 07 aprile 2005
Daniele,
non mi quadra: public non è accettabile nella dichiarazione di variabile locale

come puoi quindi dichiarare 'locale' rendendola accessibile a tutta la classe (public) e al contempo inserirla in page_load?

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.