8 messaggi dal 27 luglio 2013
Ciao a tutti,
sto creando un sito asp.net 4 e ho la necessità di renderlo multilingua (4 o 5 lingue diverse).

In linea di massima dovrei aver impostato tutto:
- ho creato una classe pagina dove faccio l'override di InitializeCulture()
- tra file resx e database gestisco i contenuto dinamici o meno
- nel global.asax ho attivato il PageRoute per fare indirizzare correttamente i link ai quali aggiungo una cartella virtuale con la sigla della CurrentCulture.

il dilemma è il seguente: per gestire al meglio l'indicizzazione voglio che anche al primo accesso appaia la cartella virtuale di fianco al dominio in modo da avere www.dominio.com/it-IT/, www.dominio.com/en-US/, ecc..

io l'avrei risolta così:
      
    protected void Page_Load(object sender, EventArgs e)
    {
        string dominio = ConfigurationManager.AppSettings["urlDominio"];
        string pagina = Request.Url.ToString().Replace(dominio, "");
        string lingua = Session["Culture"].ToString();

        if (pagina == string.Empty || pagina.ToLower() == "default.aspx")
            // Server.Transfer("~/" + lingua + "/Default.aspx");
            Response.Redirect(dominio + lingua + "/Default.aspx");
    }


praticamente al primo accesso, alla pagina default del sito, viene effettuato un redirect all'url modificato con it-IT, en, fr, ...
può andare o è un obbrobrio?
può dare problemi per l'indicizzazione?
avrei preferito usare server.transfer ma non riesco a passargli l'url in maniera che riesca a leggerlo correttamente

se volete vedere le due paginette che sto usando come test l'indirizzo è questo: http://test.wildsoup.com

grazie mille per eventuali dritte!
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,
direi che può andare. Effettui un semplice redirect e dunque non ci saranno problemi di indicizzazione.

Con il Server.Transfer invece potresti avere problemi. Faccio un esempio: se visito la pagina http://test.wildsoup.com/, con che criterio mi fornisci i testi in italiano (o mi reindirizzi verso /it-IT)? Se fai questa scelta in base al valore dell'intestazione Accept-Language o in base all'IP dell'utente, allora Google otterrà i testi in inglese per test.wildsoup.com, mentre tu probabilmente vuoi che quello sia solo un punto di passaggio verso i contenuti nelle varie lingue.

Altra cosa: valuta se spostare la logica di redirect nell'Application_BeginRequest del global.asax, oppure usare il modulo Url Rewrite di IIS.


In questo modo avresti due vantaggi:
  • Il reindirizzamento sarebbe molto veloce, perché avverrebbe proprio all'inizio della richiesta, ancor prima che una pagina aspx sia istanziata
  • Funzionerebbe per ogni richiesta gestita da ASP.NET. In questo momento, infatti, vengo reindirizzato solo se visito l'homepage. Invece, visitando la tua pagina http://test.wildsoup.com/test.aspx, non vengo reindirizzato a http://test.wildsoup.com/it-IT/test.aspx. E' normale che sia così?


ciao,
Moreno
Modificato da BrightSoul il 31 luglio 2013 17.51 -

Enjoy learning and just keep making
8 messaggi dal 27 luglio 2013
Grazie mille per la risposta! Già il fatto che mi dici "può andare", mi da grande soddisfazione!

Per impostare una cultura all'avvio dell'applicazione uso Thread.CurrentThread.CurrentCulture.Name che, se non ho capito male, prende il linguaggio di default del browser.

Per quando riguarda IIS, il dominio è in hosting da Aruba e quindi non so se posso mettere mano a impostazioni particolari.

Per posizionare la funzione di redirect nell'Application_BeginRequest del global.asax invece si può fare, adesso provo.

Per quanto riguarda invece la pagina di test, nel contorto ragionamento che mi sono fatto, quella pagina non esisterà mai con link privo di localizzazione, perchè tutti i link interni al sito vengono generati dinamicamente con la giusta "cartella lingua" inserita nell'url, quindi anche nei motori di ricerca non dovrebbero comparire risultati senza quella parte di indirizzo. Giusto?

In ogni caso se dovesse servire, ho già scritto una funzioncina che corregge gli url. Per ora la utilizzo solo nel caso si cambi lingua dai button link "italiano | inglese | ...", in questo modo la pagina viene ricaricata con l'url modificato correttamente per la lingua selezionata.

protected string CambiaLinguaUrl()
    {

        // aggiungere lingue nell'array se servono! ricordarselo!!

        string url = string.Empty;
        string lingua = Session["Culture"].ToString();
        string[] lingue = new string[] { "it-IT", "en-US", "fr-FR" };
        string dominio = ConfigurationManager.AppSettings["urlDominio"];

        string pagina = Request.Url.ToString().Replace(dominio, "");
        string linguaUrl = pagina.Substring(0, 5);

        if (lingue.Contains(linguaUrl))
            pagina = pagina.Replace(linguaUrl + "/", "");

        url = dominio + lingua + "/" + pagina;
        return url;
    }


Ancora grazie mille per i consigli, sono parecchi anni che lavoro con asp.net però il discorso multilingua non l'avevo mai affrontato in maniera seria.

ciao
Modificato da Sberegondo il 31 luglio 2013 18.25 -

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.