11 messaggi dal 19 marzo 2004
Un saluto a tutti.
Il mio obiettivo è realizzare una serie di frontend Silverlight localizzabili a seconda della Cultura del browser.

La mia esperienza di ASP.NET mi ha sempre portato ad utilizzare file di risorse "resx" opportunamente creati per ogni possibile cultura (un default privo di culture-code più i vari "en-US", "fr-FR", etc. per ogni possibile cultura gestita). Nel markup ASP.NET posizionando opportunamente i tag server <% Resource ... %> si poteva gestire agevolmente la cosa.

In Silverlight lo stesso sistema non è applicabile, se non eseguendo un binding di una risorsa resx, collegata allo usercontrol e dichiarata come risorsa locale all'interno dello XAML.

Esempio:

*** In Page.Xaml ***
...
xmlns:Res="clr-namespace:LocalizzazioneSilverlight.Resources"
...
<UserControl.Resources>
<Res:Page_xaml x:Name="PageRisorse" />
</UserControl.Resources>
...
<TextBlock x:Name="tb" Text="{Binding RisorsaEtichetta, Source={StaticResource PageRisorse}}"
**********************

Con un file "Page.xaml.rex" contenente una risorsa di nome "RisorsaEtichetta".

Ho preventivamente scartato l'ipotesi di inserire una serie di StaticResource nel file comune App.xaml poichè l'obiettivo ultimo sarebbe quello di creare una serie di usercontrol Silverlight da utilizzare in progetti differenti.

La mia domanda è questa: esistono delle soluzioni migliori alla questione oppure è l'unica strada percorribile, almeno prima dell'arrivo di un nuovo aggiornamento per SL?

Grazie a tutti per le risposte.
Mauro
Modificato da maurosoft il 09 gennaio 2009 20.43 -
Bella domanda
Alcune vie, come quelle di WPF o MarkupExtension custom non ci sono, quindi cosa ne pensi del prevedere una tua sintassi, per esempio
<TextBlock Text="{Glob label1}" />...

Poi però occorre che lo UserControl contenitore non venga istanziato normalmente (il parser di SL non riconosce quella sintassi), ma piuttosto devi fare un UC generico padre (una normale classe) che carica il tuo markup con una HttpWebRequest o WebClient, che parserizzi il markup (magari con una Regex), prenda tutti i {Glob ..} e li sostituisca con il valore vero e proprio e poi con XamlReader.Load lo vai a caricare.
Ciò che ottieni sarà uno UserControl che aggiungerai alla proprietà Content dell'UC padre.

Così è comodo anche se bisogna valutare poi come poi gestisce gli eventi, è facile che gli handler non funzionano più così. Non ho mai provato...

In alternativa, seguendo la tua soluzione, puoi solo semplificare con classi basi magari il modo in cui aggiungi le risorse (invece di dichiararle in modo fisso nel markup), ma l'espressione di Binding resta

Ciao

Il mio blog
Homepage
11 messaggi dal 19 marzo 2004
Dopo qualche giorno ho trovato un attimo per implementare il tuo suggerimento.
Anche se la gestione globale delle risorse non è potente quanto quella di ASP.NET (con cui si riescono a realizzare cose ordinate e usabili), direi che è un buon compromesso...

Grazie per la dritta...
E alla prossima...
Ciao
Mauro

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.