2011-10-05 3 views
3

J'ai un client qui m'a appelé ce matin pour rénover un site pour un support multilingue. Le site est une application ASP classique, et le client n'a aucun désir/budget pour réécrire est comme ASP.NET (ou toute autre chose ...).Support multilingue pour ASP classique

Nous avons parlé des difficultés avec cela, mais une grande partie du texte se trouve être des chaînes courtes qui sont lues à partir d'une base de données et il serait heureux de simplement pouvoir traduire ce texte.

Si ce n'était pas ASP classique, j'utiliserais une solution GNU gettext(). Cependant, je n'ai pas réussi à trouver un équivalent pour ASP classique. Je pourrais ajouter une table à sa base de données pour stocker les traductions de chaîne, et juste interroger cela, mais cela signifierait aussi faire une interface d'administration pour pouvoir éditer les chaînes (plutôt que de simplement éditer un fichier texte).

Je pourrais également créer ma propre solution de fichier plat, probablement basée autour de Scripting.Dictionary, mais je préférerais vraiment ne pas rouler mon propre ici.

Y a-t-il des solutions alternatives ici? Merci.

Répondre

6

Nous utilisons une solution basée sur XML, nous avons des fichiers XML avec la structure suivante:

<?xml version="1.0" encoding="Windows-1252"?> 
<resource> 
    <language LCID="1043" name="nederlands"> 
     <label id="pageheader"><![CDATA[Over deze applicatie]]></label> 
     <label id="warning"><![CDATA[]]></label> 
    </language> 
    <language LCID="2067" name="vlaams"> 
     <label id="pageheader">Over deze applicatie</label> 
     <label id="warning"><![CDATA[]]></label> 
    </language> 
    <language LCID="2057" name="english (uk)"> 
     <label id="pageheader"><![CDATA[About this software]]></label> 
     <label id="warning"><![CDATA[]]></label> 
     <label id=""><![CDATA[]]></label> 
    </language> 
</resource> 

Nous avons choisi d'avoir tous les répertoires d'avoir son propre Fichier XML, mais s'il n'y a pas beaucoup de traductions sur votre site, vous pourriez avoir un gros XML à la racine. Cela aura cependant un impact sur vos performances. Nous avons écrit un WSC pour gérer les traductions afin que nous puissions simplement ouvrir une WSC de traduction en haut de chaque page ASP, et utiliser une méthode de traduction comme:

Au début de chaque page:

dim translate 
set translate = GetObject("script:"&Server.MapPath("/~components/DLL/Translation.wsc")) 
call translate.OpenWithLCID(session.LCID) 

Dans le HTML:

<%= translate.label("systemerror") %> 

A la fin de la page:

call translate.close() 
set translate = nothing 

L'impact sur la performance est minime; assurez-vous simplement que dans votre fonction pour récupérer une traduction, pour quitter la boucle et renvoyer la valeur dès que vous trouvez le nœud XML correspondant. Nous avons fait cette erreur au début, ce qui a entraîné le traitement du fichier XML complet lorsque nous avons appelé Translate.label().

Ma solution signifie probablement que vous devrez vous renseigner sur l'utilisation de WSC dans ASP, mais une fois que vous commencez à les utiliser, vous ne voudrez plus jamais revenir en arrière. Il résout complètement le code spaghetti dans ASp et permet la séparation des préoccupations et la réutilisation du code.

HTH, Erik Hope this helps

+0

Merci. Je pense que cette approche fonctionnera bien. – mpdonadio

+0

Un avantage de cette approche est que le client peut éditer lui-même ses traductions avec n'importe quel éditeur XML et accès FTP. –