Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 24
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    297

    Consiglio per portale multilingua

    Ciao a tutti e Buon Anno.
    Io devo chiedere un consiglio; spiego la problematica.
    A fine 2006 ho terminato e pubblicato un portale per la realizzazione online di preventivi di viaggio nella regione umbria. Il portale è veramente ricchissimo di informazioni come il catalogo elettronico con tutte le ospitalità, gli eventi, le attività che poi, tramite il sistema di creazione preventivo, l'utente può prenotare.

    Premetto che il tutto è realizzato in linguaggio ASP e la piattaforma dati è SQL SERVER.

    Il problema è questo: dovendo essere il portale tradotto in più lingue in modo dinamico ho un problema riguardante le diciture [per diciture intendo tutte quelle parole tipo catalogo, stampa, apri, cerca, prenota, le voci del menu, ecc...].
    Ho creato una tabella che raccolga tutte le diciture standard in italiano [e per ora siamo 704 diciture presenti] e poi ho creato una tabella per le diciture in lingua in cui praticamente vengono duplicate per ogni lingua impostata le 704 diciture standard opportunamente tradotte.

    Quando sono in index.asp io creo un array di tutte le diciture standard ed un array con le relative tradotte nella lingua in cui l'utente vuole visualizzare il portale [quindi devo creare 2 array da 704 'indici'] e poi in ogni files del portale vado ad inserire la programmazione [es: <%=Dicitura(531)%>] che corrisponde alla dicitura correttamente tradotta in quella posizione.

    E un pò difficile da spiegare: il problema che la creazione dei 2 array ogni volta che passo per l'index rallenta in modo impressionate tutto il caricamento.

    Avete da consigliarmi un altro modo di procedere?
    Magari senza andare a cambiare sistema di tabelle?

    Rimango a disposizione per chiarimenti.
    Grazie fin da ora

    Franz

  2. #2
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    Il modo migliore secondo me è utilizzare un file xml per ogni lingua.
    In questo modo da script fai caricare il file corrispondente in base alla lingua selezionata dall'utente.
    La pagina asp scriverà sempre <%=Dicitura(531)%> ad esempio ma il valore lo recupera dal file corretto di volta in volta. Ed è velocissimo.

    Roby

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    297
    Il tuo suggerimento mi sembra veramente molto interessante.
    Il problema è che non ho ben capito come realizzarlo.
    Io faccio un file xml per ogni lingua? -> ma come faccio se le lingue sono dinamiche?
    Nel file xml [che ho anche qualche difficoltà nel fare] devo sempre implementarlo con 2 array? Le diciture standard hanno un numero di rifarimento che tira su quelle in lingua.

    Scusa ma proprio devo entrare nell'ottica.

  4. #4
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    La lingua devi metterla in un cookie ed in base al suo valore recuperare il corrispondente elemento del file xml.

    Roby

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    297
    La lingua l'ho già dentro ad una variabile di sessione quindi non ho problema di recupero.
    Però proprio non capisco come devo costruire il file xml.

    Come metto i dati delle diciture standard e quelli rispettivi delle diciture in lingua?

    In ogni caso al cambio lingua da tendina devo andare a riscrivere tutte le volte il file xml?

    Scusa, ma proprio non riesco a capire ...

  6. #6
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    Esempio:
    codice:
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <mioxml>
    	<lang name="italiano">
    		
    		<translation name="desc_01">Conferma</translation>
    ...
    ....
    codice:
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <mioxml>
    	<lang name="inglese">
    		
    		<translation name="desc_01">Confirm</translation>
    ...
    ....
    Roby

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    297
    Ma se ho impostato 5 lingue, devo fare 5 xml diversi?
    E se l'utente aggiunge una lingua autonomamente cosa succede?


    E poi, dentro ad index.asp, oltre ad includere il file xml che lo so fare, come faccio a fare in modo che se la dicitura 1 e conferma mi venga scritto conferma con il codice
    <%=Dicitura(531)%>

    Sono veramente incasinata!

  8. #8
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    Puoi fare un xml per ogni lingua oppure, come nel mio esempio, un solo xml con tag separati per ogni lingua.
    Questa funzione ti recupera il nodo corretto nell'xml.
    codice:
    ' Questa procedura consente di gestire il supporto multilingua sfruttando la connessione a dei files 
    ' XML tramite l'oggetto XMLDOM.
    '
    '	Questa funzione server a caricare il file XML di sistema per la lingua passata come
    '	parametro	
    Function streamXML(selectLing)
    	Dim oDom
    	'Istanzio l'oggetto XMLDOM
    	Set oDom = Server.CreateObject("Microsoft.XMLDOM")
    	oDom.async = False
    		'Se il file viene trovato lo carico altrimenti mostro il messaggio di errore
    		If oDom.Load(Server.MapPath("/lingua/" & selectLing & ".xml")) Then
    			Set streamXML = oDom.documentElement
    		Else
    			Response.Write "Errore : File XML mancante!"
    		End If
    
    	Set oDom = Nothing
    End Function	
    
    '	Questa funzione serve a caricare il file XML per il modulo che si sta cercando di visualizzare
    '	il quale viene recuperato dalla stringa degli indirizzi, e viene cercato nella cartella della
    '	lingua passata come parametro	
    Function traduzione(ling, modulo)
    	Dim oDom
    	Set oDom = Server.CreateObject("Microsoft.XMLDOM")
    	oDom.async = False
    		'Controllo se è presemte il file che si è richiesto di tradurre per la lingua attualmente selezionta
    		If oDom.Load(Server.MapPath("/lingua/" & ling & "/" & modulo & ".xml")) Then
    			Set traduzione = oDom.documentElement
    		'Se non esiste eseguo il file nella lingua di default
    		ElseIf oDom.Load(Server.MapPath("/lingua/" & lingdef & "/" & modulo & ".xml")) Then
    			Set traduzione = oDom.documentElement
    		End If
    
    	Set oDom = Nothing
    End Function		
    
    'Questa funzione riceve come parametro il nome del nodo XML da andare a cercare nel file di lingua del modulo visualizzato
    'e restituisce il suo corrispettivo valore
    'Function traduci(sTranslationKey)
    '	Dim sTranslationValue, oTranslation
    '	sTranslationValue = sTranslationKey
    	'Se l'oggetto XML è stato correttamente istanziato passo alla treaduzione del nodo	
    	'If Not multilingua Is Nothing Then
    '		Set oTranslation = multilingua.selectSingleNode("lang/translation[@name=""" & sTranslationKey & """]")
    '		If Not oTranslation Is Nothing Then
    '			sTranslationValue = oTranslation.text
    '		End If
    	'End If
    '	traduci = sTranslationValue
    
    'End Function
    
    'Questa funzione riceve come parametro il nome del nodo XML da andare a cercare nel file di lingua e 
    'restituisce il suo valore
    Function traduciSys(sTranslationKey)
    	Dim sTranslationValue, oTranslation
    	sTranslationValue = sTranslationKey
    	'Se l'oggetto XML è stato correttamente istanziato passo alla traduzione del nodo	
    	If Not oLangXML Is Nothing Then
    		Set oTranslation = oLangXML.selectSingleNode("lang/translation[@name=""" & sTranslationKey & """]")
    		If Not oTranslation Is Nothing Then
    			sTranslationValue = oTranslation.text
    		End If
    	End If
    	traduciSys = Server.HTMLEncode(sTranslationValue)
    	traduciSys = replace(traduciSys, "", "")
    	traduciSys = replace(traduciSys, "", "")
    	traduciSys = replace(traduciSys, "[a]", "<a href=""")
    	traduciSys = replace(traduciSys, "[a1]", """ target=""_blank""")
    	traduciSys = replace(traduciSys, "[a2]", ">")
    	traduciSys = replace(traduciSys, "[/a]", "</a>")
    	
    End Function
    E questo ti spampa il valore del nodo:
    codice:
    <%=traduciSys("desc_01")%>
    Roby

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    297
    Allora, facciamo passetto per passetto ???
    Dunque, io creo un file che chiamo diciture.xml così fatto:

    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <mioxml>
    <idLingua id="1">

    <Dicitura name="1">Conferma</translation>
    <Dicitura name="2">Invio</translation>
    <Dicitura name="3">Cerca</translation>
    ecc
    </idLingua>

    <idLingua id="2">

    <Dicitura name="1">Confirm</translation>
    <Dicitura name="2">Send</translation>
    <Dicitura name="3">Search</translation>
    ecc
    </idLingua>
    </mioxml>

    Dove l'attributo id del tag lingua è lo stesso che passo in variabile di sessione
    Dove l'attributo name è il numero di dicitura -> 531 dell'esempio che ho sempre fatto <%=Dicitura(531)%>

    Poi in index.asp vado recupero in session idLingua=1 [per esempio abbiamo appena aperto il portale]
    Poi utilizzo una funzione che mi hai postato tu?
    Poi i ogni file vado ad impostare le diciture?

    Dai che quasi ci sono ... per favore non abbandonarmi ora ...

  10. #10
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    Si ma i tag li devi aprire e chiudere eh...

    Roby

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 © 2026 vBulletin Solutions, Inc. All rights reserved.