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.