Le LCID (Locale Identifier) est un identifiant numérique utilisé par Windows (et donc par ASP Classic en VBScript et JScript) pour définir les règles culturelles et linguistiques applicables à l'exécution de votre code, lorsque celui-ci doit traiter des données en lien avec :
Le LCID n'est ni une langue ni un pays. En effet, une même langue peut être utilisée dans plusieurs pays avec parfois des différences notables ou subtiles. De la même manière, la population d'un même pays peut parler plusieurs langues. Cette réalité justifie donc la définition de plusieurs LCID pour une même langue. Les LCID de Windows sont construits sur la base d'un LANGID (langue) + d'un SUBLANG (variante / script).
Il existe plusieurs manières de spécifier le LCID que votre site, session ou script ASP utilise :
SetLocale(),Session.LCID dans votre script,Response.LCID dans votre script.Bien que reconnus par Windows, notez que tous les LCID ne sont pas immédiatemment utilisables : certains nécessitent l'installation de packages linguistiques supplémentaires sur le système Windows Server concerné avant de pouvoir être mis en œuvre. Pour connaître la liste des LCID disponibles cliquez ici.
Vous pouvez vérifier que le LCID que vous avez spécifié a bien été appliqué en utilisant la fonction GetLocale() de la manière suivante :
<%
'Appliquer le LCID 1036 '(Français)
SetLocale(1036)
'Si le LCID est conforme
if (GetLocale() = 1036) then
Response.Write "LCID Valide"
'Si le LCID est différent
else
Response.Write "LCID utilisé en remplacement : " & GetLocale()
end if
%>Si le LCID est valide et reconnu, mais non installé sur le système, le moteur d'exécution ASP Classic échoue silencieusement à appliquer le LCID mais ne lève pas d'erreur explicite : il applique alors soit le LCID défini par défaut dans IIS pour votre site (si différent de 0), soit le LCID par défaut en vigueur sur le système Windows Server s'il y a échoué.
Si vous spécifiez un LCID non-supporté (lignes surlignées en jaune), le moteur d'exécution ASP Classic lève généralement une erreur explicite, comme le montre l'extrait de code suivant :
<%
'-------------------------
'Assigner un LCID invalide (via "SetLocale")
SetLocale(98765)
'L'erreur suivante se produit :
' 0x800A01BF
' Object doesn't support current locale setting: 'SetLocale'
'-------------------------
'Assigner un LCID invalide (via "Session")
Session.LCID = 98765
'L'erreur suivante se produit :
' 0x80004005 (ASP 0219)
' SessionID
' The specified LCID is not available.
'-------------------------
'Assigner un LCID invalide (via "Response")
Response.LCID = 98765
'L'erreur suivante se produit :
' 0x80004005 (ASP 0219)
' Response object
' The specified LCID is not available.
%>Le LCID n'a pas la même portée selon l'emplacement où vous le spécifiez. Vous pouvez jouer de ces différences à votre avantage afin d'appliquer des exceptions à des règles précédemment définies, afin d'utiliser un LCID dans certaines portions de votre code uniquement, de sorte qu'il ne s'applique qu'à certains éléments ou objets.
| Mode de déclaration | Portée | Persistance | Usage recommandé |
|---|---|---|---|
| IIS > ASP > LCID | 1. Application | Permanente | Valeur par défaut |
Session.LCID | 2. Session | Multi-requêtes | Culture utilisateur |
SetLocale() | 3. Thread | Requête | Ajustement ponctuel |
Response.LCID | 4. Réponse | Requête | Sortie spécifique |
Ces différents modes de déclaration du LCID sont détaillés ci-dessous, classés par ordre de portée.
Session.LCID, Response.LCID et le thread1036 (Français)<%
'Configuration globale de la locale ID au niveau de la session
Session.LCID = 1036 'Français
'Effectuer certaines actions avec le LCID 1036
Response.Write FormatDateTime(Now(), vbShortDate)
'Exception locale : Récupérer la locale ID active puis la remplacer
' previousLocale reçoit depuis Session.LCID la locale ID active à ce moment précis (1036)
' Note : SetLocale() ne modifie pas Session.LCID
Dim previousLocale : previousLocale = SetLocale(1033) 'Anglais
'Effectuer un traitement dans la locale ID désormais active (1033)
Response.Write FormatDateTime(Now(), vbLongDate)
'Restaurer la locale ID précédente du thread (1036)
SetLocale previousLocale
%><%
'Configuration globale de la locale ID au niveau de la session
Session.LCID = 1036 'Français
'Effectuer certaines actions avec le LCID 1036 (Français)
Response.Write FormatDateTime(Now(), vbShortDate)
'Remplacer désormais la locale ID au niveau de la session par 1033
Session.LCID = 1033 'Anglais
'Effectuer les actions suivantes dans la locale ID désormais active (1033)
Response.Write FormatDateTime(Now(), vbLongDate)
%><%
'Configuration globale de la locale ID au niveau de la session
Session.LCID = 1036 'Français
'Effectuer certaines actions avec le LCID 1036
Response.Write FormatDateTime(Now(), vbShortDate)
'Exception locale : Récupérer la locale ID active puis la remplacer
' previousLocale reçoit depuis Session.LCID la locale ID active à ce moment précis (1036)
' Note : Response.LCID() ne modifie pas Session.LCID
Dim previousLocale : previousLocale = GetLocale() 'Français (1036)
Response.LCID = 1033 'Anglais
'Renvoyer une date dans la locale ID désormais active (1033)
Response.Write FormatDateTime(Now(), vbLongDate)
%>Le LCID est une convention Windows (32 bits), historiquement composée d'un identifiant de langue et d'un identifiant de région. Il influence donc notamment des fonctions comme CDate, FormatDateTime, FormatNumber, FormatCurrency, InStr, StrComp, LCase, etc (liste non exhaustive). En pratique, le point critique dans des cas de développement est rarement l'affichage, mais bien les étapes en amont, à savoir la lecture, le parsing, et les calculs. L'absence de normalisation des séparateurs de milliers et de décimales dans les nombres est un piège courant qui peut provoquer des erreurs lors d'insertions dans vos bases de données.
L'exécution du même code ASP Classic sur deux serveurs différents avec des paramètres régionaux différents peut donc générer des résultats divergents. C'est pourquoi il est recommandé d'une part de fixer le LCID par défaut dans les propriétés de IIS, et d'autre part de spécifier ce LCID dans votre code source ASP avant chaque opération de lecture, calcul, et rendu de données textuelles, numériques, et de date/heure.
Vous pouvez à tout moment définir et modifier le LCID via SetLocale(), Session.LCID et Response.LCID au sein d'un même script. C'est d'ailleurs une technique fréquemment utilisée pour gérer des données numériques ou des dates au sein d'une page : utiliser un LCID anglais (1033) pour effectuer les calculs, puis utiliser un LCID localisé dans une autre langue/région pour renvoyer les informations à l'internaute.
Une stratégie de LCID courante concernant les comparaisons et affichages de chaînes de caractères est :
Session.LCID au début ou d'un script (ou d'une session dans le global.asa)0=vbBinaryCompare)SetLocale() pour un traitement ponctuelResponse.LCID au moment de l'affichage d'une donnéeLors du codage, vous ne devez compter sur aucun paramètre prédéfini : vous devez vous-même fixer les règles du jeu et forcer le paramètre LCID dès le début de votre script. Il s'agit de la seule manière de vous assurer que votre code puisse fonctionner sur tout type de serveur, quelle que soit sa configuration régionale et linguistique (ex. Windows Server en Anglais, Français, Espagnol, etc).
Définir de manière systématique le LCID avant chaque opération à une valeur constante vous assurera un code fiable au fonctionnement prévisible sur tout serveur Windows. La manipulation de dates et données numériques sur un système ASP Classic demande de la rigueur et de la constance. Vous pouvez faire appel à nous si vous avez besoin de fiabiliser votre code sur ces aspects :
Les dates et heures sont très fortement impactées par le LCID en vigueur dans votre script ASP Classic. Certaines langues utilisent des formats de date très différents, avec des slash, tirets, et espaces pour séparer les jours, années et heures. Si vous avez historiquement développé sur un système Windows en Anglais, Français ou Espagnol, puis que vous déplacez votre code sur un autre serveur, il générera de très nombreuses erreurs si le LCID par défaut sur IIS n'est pas exactement le même.
Si votre code ne définit aucun LCID, et s'attend à une valeur particulière que vous avez toujours connu, nous proposons gracieusement de définir dans IIS le LCID par défaut de votre choix sur votre hébergement mutualisé ASP Classic. Ceci vous permettra de faire fonctionner votre code source de la même manière qu'il l'a toujours historiquement fait.
Les fonctions relatives aux dates qui sont impactées par le LCID sont les suivantes :
CDate : influe sur la reconnaissance des formats de date (ordre jour/mois/année, séparateurs, mois en toutes lettres selon la langue). Exemple : La date "03/04/2025" sera interprétée comme le 3 Avril en fr-FR (LCID 1036), mais signifiera le 4 Mars avec un LCID en-US (1033).IsDate, IsNumeric : influe sur la validation des données avant conversion. Exemple : La date "13/04/2025" sera acceptée car reconnue comme le 13 Avril en fr-FR (LCID 1036), mais sera considérée comme invalide avec un LCID en-US (1033), car le mois n°13 n'existe pas.FormatDateTime : influe sur les formats de date/heure (ordre jour/mois, séparateurs, noms localisés, etc). WeekdayName : influe sur le nom du jour et détermine la langue du texte retourné.Déclarez explicitement le LCID de manière identique avant chaque opération :
Il est recommandé d'effectuer un maximum d'opérations de comparaison et modification de dates en utilisant le LCID 1033, prévisible et connu par tous les développeurs, et disponible en standard sur tous les systèmes Windows Server.
Il est prudent de systématiqument "parser" la date pour en extraire les différentes composantes (Jour, Mois, Année, Heure, Minute, Seconde), puis de la reconstruire dans une variable à l'aide des fonctions DateSerial() ou TimeSerial(). Vous obtenez ainsi une variable VBScript de type date parfaitement fiable. Cela est souvent indispensable si certaines dates proviennent d'un formulaire web, et plus rarement lorsque lues depuis votre base de données.
Lorsque vous comparez et modifiez des dates, utilisez toujours deux dates ayant été définies avec le même LCID.
Les nombres entiers et décimaux sont très fortement impactés par le LCID en vigueur dans votre script ASP Classic. Certaines langues utilisent des points, des virgules, des espaces, etc pour séparer les milliers et les décimales. Si vous avez historiquement développé sur un système Windows en Anglais, Français ou Espagnol, puis que vous déplacez votre code sur un autre serveur, il générera de très nombreuses erreurs si le LCID par défaut sur IIS n'est pas exactement le même.
Si votre code ne définit aucun LCID, et s'attend à une valeur particulière que vous avez toujours connu, nous proposons gracieusement de définir dans IIS le LCID par défaut de votre choix sur votre hébergement mutualisé ASP Classic. Ceci vous permettra de faire fonctionner votre code source de la même manière qu'il l'a toujours historiquement fait.
Les fonctions relatives aux nombres qui sont impactées par le LCID sont les suivantes :
CLng, CInt, CSng, CDbl, CCur : influe sur l'interprétation des séparateurs de milliers et de décimales. Exemple : "1,23" signifiera 1.23 en fr-FR (LCID 1036), mais pourra être mal interprété avec un LCID en-US (1033). Notez à ce titre que CCur() convertit en Currency, seul type décimal exact, là où CDbl() convertir en Double, qui est pour sa part un nombre flottant binaire pouvant potentiellement conduire à des approximations inacceptables lorsqu'il s'agit de données monétaires ou financières.FormatNumber, FormatPercent : influe sur l'interprétation des séparateurs de milliers et de décimales, les regroupements et les pourcentages.FormatCurrency : influe sur l'interprétation des symboles monétaires, les placement du symbole, les séparateurs, le nombre de décimales, les nombres négatifs.Déclarez explicitement le LCID de manière identique avant chaque opération :
Il est recommandé d'effectuer un maximum d'opérations de comparaison et modification de nombres décimaux et monétaires en utilisant le LCID 1033, prévisible et connu par tous les développeurs, et disponible en standard sur tous les systèmes Windows Server.
Ne négligez pas les séparateurs de milliers : certaines langues utilisent la virgule ou le point (voir l'espace) comme séparateur de milliers. Vous courez au-devant de gros problèmes si vous ne standardisez par ces séparateurs avant de convertir votre donnée en variable numérique avec CLng(), CCur(), etc.
N'utilisez aucune variable numérique décimale en toute confiance. Le séparateur décimal varie selon les langues (virgule, point). VBScript effectue tous ses calculs avec des variables dont le séparateur décimal est le point.
Quelle que soit l'origine de votre variable numérique, assurez-vous qu'elle utilise un point comme séparateur de décimales avant de la convertir avec CLng(), CCur(), etc. Vous pourriez être tenté de remplacer les virgules par des points comme ceci :
<%
Dim myDecimalNumber
myDecimalNumber = rs("productPrice") 'Lecture depuis base de données
myDecimalNumber = Replace(myDecimalNumber, ",", ".") 'Remplacer les virgules par des points
myDecimalNumber = Trim(Replace(myDecimalNumber, " ", "")) 'Supprimer les espaces
myDecimalNumber = CCur(myDecimalNumber) 'Convertir en variable décimale (type Currency)
%>Pourtant, dans certaines langues et régions, la virgule ne sert pas de séparateur décimal, mais de séparateur de milliers. Cette technique ne fonctionnera donc pas. C'est pourquoi il est important que vous connaissiez à l'avance l'origine des données numériques que votre code utilise.
Utilisez plutôt ce code, qui fait usage de fonctions ASP chargées de récupérer (en jaune) et d'utiliser (en bleu) les symboles de séparation réellement en vigueur avec le LCID courant. Cette technique fonctionne même si vous ne connaissez pas avec certitude le format d'origine de la donnée numérique que vous vous apprêtez à traiter dans votre code :
<%
'Fonction : Retourne le caractère séparateur utilisé pour les milliers
Function GetSystemThousandSep()
GetSystemThousandSep = Mid(FormatNumber(2000), 2, 1)
End Function 'GetSystemThousandSep
'Fonction : Retourne le caractère séparateur utilisé pour les décimales
Function GetSystemDecimSep()
GetSystemDecimSep = Mid(CStr(1/2), 2, 1)
End Function 'GetSystemDecimSep
'Forcer le LCID en Anglais pour effectuer les calculs
Response.LCID = 1033
'Récupérer les séparateurs
Dim sepDecimal : sepDecimal = GetSystemDecimSep()
Dim sepThousand : sepThousand = GetSystemThousandSep()
Dim myDecimalNumber
myDecimalNumber = 1234.56
myDecimalNumber = Replace(myDecimalNumber, sepDecimal, ".") 'Forcer le séparateur de décimales à "point"
myDecimalNumber = Trim(Replace(myDecimalNumber, sepThousand, "")) 'Supprimer les séparateurs de milliers
myDecimalNumber = CCur(myDecimalNumber) 'Convertir en variable décimale (type Currency)
Response.LCID = 1033 'Définir le Locale ID d'affichage en Anglais
myDecimalNumber = myDecimalNumber + 0.01 'Ajouter 1 centime (le LCID n'a aucune incidence sur ce calcul)
Response.Write "EN : " & FormatNumber(myDecimalNumber, 2) & "<hr>" 'Afficher la variable => Renvoie 1,234.57
Response.LCID = 1036 'Définir le Locale ID d'affichage en Français
myDecimalNumber = myDecimalNumber + 0.01 'Ajouter 1 centime (le LCID n'a aucune incidence sur ce calcul)
Response.Write "FR : " & FormatNumber(myDecimalNumber, 2) & "<hr>" 'Afficher la variable => Renvoie 1 234,58
Response.LCID = 1034 'Définir le Locale ID d'affichage en Espagnol
myDecimalNumber = myDecimalNumber + 0.01 'Ajouter 1 centime (le LCID n'a aucune incidence sur ce calcul)
Response.Write "ES : " & FormatNumber(myDecimalNumber, 2) & "<hr>" 'Afficher la variable => Renvoie 1.234,59
%>Votre code peut à tout moment provoquer une erreur. Aussi, ajoutez des sécurités tout au long de votre code. Utilisez pour cela les mêmes techniques que nous : programmez de manière ultra-défensive. Nous utilisons à cet effet des fonctions que nous avons spécialement développées, mais le code ci-dessous vous donne une idée générale du type de vérifications qui doivent être mises en oeuvre : (contactez-nous si vous avez besoin d'assistance pour renforcer vos défenses)
<%
'Récupérer les séparateurs (cf. fonctions définies ailleurs sur cette page)
Dim sepDecimal : sepDecimal = GetSystemDecimSep()
Dim sepThousand : sepThousand = GetSystemThousandSep()
Dim myDecimalNumber
myDecimalNumber = rs("productPrice") 'Lecture depuis base de données
if (NOT IsNull(myDecimalNumber)) then
if (myDecimalNumber <> "") then
myDecimalNumber = Replace(myDecimalNumber, sepDecimal, ".") 'Forcer le séparateur de décimales à "point"
myDecimalNumber = Trim(Replace(myDecimalNumber, sepThousand, "")) 'Supprimer les séparateurs de milliers
Err.Clear
On Error Resume Next
myDecimalNumber = CCur(myDecimalNumber) 'Convertir en variable décimale (type Currency)
if (Err.Number <> 0) then
Response.Write "<br>Une erreur s'est produite lors de la conversion en type Currency"
Response.Write "<br>" & Err.Number & " - " & Err.Description
end if
On Error Goto 0
end if
end if
%>Le LCID influence les règles linguistiques utilisées par Windows et donc le moteur ASP pour comparer et trier des chaînes (collation et comparaisons Unicode). Cela impacte en particulier les comparaisons textuelles, certaines opérations relatives à la casse des caractères et à la manières dont gérés les accents. C'est l'un des points les plus souvent oubliés des nombreux impacts du choix du LCID.
Le LCID affecte les tris et comparaisons textuelles, mais n'affecte en revanche pas les les tris explicites faits par la base de données, ou les comparaisons ASCII brutes.
Les fonctions relatives aux chaînes de caractères qui sont impactées par le LCID sont les suivantes :
= et <> : influe sur les comparaisons, qui sont donc effectuées en mode textuel (1=vbTextCompare), et sont donc sensibles au LCID. Ces opérateurs sont insensibles à la casse mais restent toutefois sensibles aux accents dans les locales latines usuelles (français, anglais, etc.). La comparaison textuelle VBScript est insensible à la casse (e = E) et sensible aux accents (e ≠ é), car elle s'appuie sur la collation Windows associée au LCID actif. VBScript n'effectue jamais de normalisation Unicode (NFD / NFC) ni de "déaccentuation" : il ne transforme jamais é en e. À la différence de VBA, Option Compare n'est pas disponible en VBScript, et c'est une différence majeure qui constitue un risque. De ce fait, les comparaisons effectuées par ces opérateurs sont systématiquement influencées par le LCID et sont des comparaisons textuelles. N'utilisez JAMAIS = et <> si une comparaison exacte est requise.StrComp, InStr : influe sur la comparaison de la casse des caractères, mais n'influe PAS sur les caractères accentués : StrComp est toujours sensible aux accents et le LCID ne change pas cela. StrComp devient sensible au LCID dès lors que la comparaison est effectuée en mode textuel (1=vbTextCompare) et sur des chaînes incluant des caractères accentués provenant de certaines langues non-occidentales. Notez à ce titre que cette fonction utilise une comparaison textuelle simplifiée, historiquement limitée sur les langues utilisant des mappings Unicode spéciaux (exemples en Turc avec les caractères İ et i, qui seront systématiquement considérés comme différents, même avec 1=vbTextCompare). Cette fonction dépend également de l'encodage de votre fichier et du Codepage que vous définissez dans votre script (surligné en bleu). Le code suivant démontre les effets du LCID sur les comparaisons de chaînes :<%@codepage=65001%>
<%
'S'assurer d'un encodage cohérent en UTF-8
'Nécessite évidemment que votre fichier ASP ait lui aussi été enregistré au format UTF-8 à la source.
Session.CodePage = 65001
Response.CodePage = 65001
Response.CharSet = "utf-8"
Session.LCID = 1036 'Définir sur Français
Dim sourceText : sourceText = "Voici une belle phrase écrite"
Dim searchedText : searchedText = "BELLE"
'Recherche technique (ex. identifiants, chemins, emails, balises)
'Utilisez 0=vbBinaryCompare pour que le LCID n'ait aucune influence
'=> searchedText n'est PAS trouvé
Response.Write "<br>" & (InStr(1, sourceText, searchedText, vbBinaryCompare))
'Recherche utilisateur (ex. texte affiché, saisie utilisateur)
'Utilisez un LCID explicite et maîtrisé
'=> searchedText est trouvé
Response.Write "<br>" & (InStr(1, sourceText, searchedText, vbTextCompare))
'Comparaison binaire implicite (indépendant du LCID)
'Renvoie "False" : 0=vbBinaryCompare Sensible à la casse
Response.Write "<br>" & ("E" = "e")
'Comparaison explicitement binaire (indépendant du LCID)
'Renvoie "False" : 0=vbBinaryCompare Sensible à la casse
Response.Write "<br>" & (StrComp("E", "e", vbBinaryCompare) = 0)
'Comparaison explicitement textuelle (dépend du LCID)
'Renvoie "True" : 1=vbTextCompare Insensible à la casse
Response.Write "<br>" & (StrComp("E", "e", vbTextCompare) = 0)
'Comparaison explicitement binaire (indépendant du LCID)
'Renvoie "False" : 0=vbBinaryCompare Sensible à la casse et aux accents
Response.Write "<br>" & (StrComp("É", "é", vbBinaryCompare) = 0)
'Comparaison explicitement textuelle (dépend du LCID)
'Renvoie "True" : 1=vbTextCompare Insensible à la casse, sensible aux accents.
'"É" et "é" sont le même caractère accentué.
' => Ceci est le comportement attendu.
' Se produit si :
' - Fichier enregistré par exemple en UTF-8 ou Windows-1252, et exécuté comme tel
' - Cohérence du @codepage + Session.CodePage + Response.CodePage + Response.CharSet
Response.Write "<br>" & (StrComp("É", "é", vbTextCompare) = 0)
'Comparaison explicitement textuelle (dépend du LCID) (MÊME CODE QUE LE TEST CI-DESSUS => MAIS RÉSULTAT INCORRECT)
'Renvoie "False" : 1=vbTextCompare Insensible à la casse, sensible aux accents.
'"É" et "é" ne sont pas le même caractère accentué : les caractères comparés sont mal encodés.
' => Ceci est un comportement incohérent et non-fiable.
' Se produit si :
' - Fichier enregistré par exemple en UTF-8 mais exécuté en Windows-1252 (ou inversement)
' - Incohérences entre @codepage + Session.CodePage + Response.CodePage + Response.CharSet
Response.Write "<br>" & (StrComp("É", "é", vbTextCompare) = 0)
'Attendu : 201 et 233. Dans le cas contraire, le "False" s'explique par les incohérences d'encodage précitées.
Response.Write "<br>AscW(É)=" & AscW("É") & " / AscW(é)=" & AscW("é")
Response.Write "<hr>"
Session.LCID = 1055 'Turc
'Comparaison binaire implicite (indépendant du LCID)
'Renvoie "False" : 0=vbBinaryCompare Sensible à la casse
Response.Write "<br>" & ("E" = "e")
'Comparaison explicitement binaire (indépendant du LCID)
'Renvoie "False" : 0=vbBinaryCompare Sensible à la casse
Response.Write "<br>" & (StrComp("E", "e", vbBinaryCompare) = 0)
'Comparaison explicitement textuelle (dépend du LCID)
'Renvoie "True" : 1=vbTextCompare Insensible à la casse
Response.Write "<br>" & (StrComp("E", "e", vbTextCompare) = 0)
'Comparaison explicitement binaire (indépendant du LCID)
'Renvoie "False" : 0=vbBinaryCompare Sensible à la casse et aux accents
Response.Write "<br>" & (StrComp("İ", "i", vbBinaryCompare) = 0)
'Comparaison explicitement textuelle (dépend du LCID)
'Devrait renvoyer "True" car : 1=vbTextCompare Insensible à la casse, sensible aux accents.
'"İ" et "i" sont le même caractère accentué.
'Mais cette fonction VBScript souffre d'une limitation historique et effectue une comparaison textuelle simplifiée.
'Cette fonction renvoie donc "False", ce qui est attendu en VBScript.
'Par conséquent il est conseillé d'utiliser une fonction de remplacement des caractères accentués
'avant toute comparaison dans des langues non-occidentales.
Response.Write "<br>" & (StrComp("İ", "i", vbTextCompare) = 0)
Response.Write "<hr>"
%>
UCase, LCase : influe sur la conversion effectuée. Les règles linguistiques utilisées sont déléguées/sous-traitées à Windows et dépendent du LCID. Les règles linguistiques utilisées gèrent bien les langues non occidentales comme le Turc, à la différence de StrComp(). Exemple : UCase("i") renverra İ en tr-TR (LCID 1055), mais renverra I en en-US (LCID 1033).Scripting.Dictionary (avec CompareMode : 1=vbTextCompare) : influe sur l'ordre dans lequel les caractères sont comparés. Exemple :<%
'Selon le LCID, les clés "e", "é", "è" ne seront pas considérées comme équivalentes, ou ordonnées de la même manière.
Set oDict = Server.CreateObject("Scripting.Dictionary")
oDict.CompareMode = 1 'vbTextCompare
%>Déclarez explicitement le LCID de manière identique avant chaque opération :
Lorsque vous comparez ou classez des chaînes de caractères, utilisez toujours un mode 0=vbBinaryCompare pour éviter les faux-positifs. Le risque est d'autant plus grand sur certains types de données (identifiants, codes, emails, mots de passe) : ces derniers ne doivent JAMAIS être comparés en 1=vbTextCompare, mais toujours en mode 0=vbBinaryCompare.
Il existe de nombreuses sources fournissant des listes de LCID. Abordez ces sources avec une grande précaution, du fait que beaucoup d'entre-elles sont datées, parcellaires, voire erronnées. Nous fournissons une liste à jour et totalement compatilble.
ASP Classic ne définit en lui-même aucune liste des LCID disponibles : il délègue cette tâche aux API NLS (National Language Support) de Windows. La plateforme ASP Classic hérite donc intégralement de la liste de LCID (Locale ID) fournie par Windows.
Certaines listes se basent sur des sources fantaisistes ou restrictives (concernant par exemple Microsoft Office ou Exchange), ou effectuent des extrapolations depuis la norme BCP-47 pour en déduire artificiellement des LCID Windows imaginaires. Ces déductions sont erronnées, car chaque code linguistique BCP-47 ne possède pas obligatoirement une correspondance dans la liste des LCID Windows valides officiellement supportés et implémentés par Microsoft : bon nombre d'entrées BCP-47 ne sont en effet pas supportées. Windows distingue strictement pour chaque langue le couple "script + région", là où la notation BCP-47 abrégée n'indique souvent que le code langue seul (sur 2 ou 3 caractères).
Soyez enfin également particulièrement attentif au fait que certaines listes de LCID intègrent à tort tous les LCID nativement pris en charge par Windows. Or, bien que définis dans Windows, cela ne signifie pas que tous sont utilisables par ASP Classic. Un LCID n'est en réalité supporté par ASP Classic que s'il correspond à une "Locale Windows complète" (language + region) installable via les paramètres régionaux de Windows d'une part, mais aussi s'il n'est pas uniquement "script-only", réservé, théorique ou sans région, d'autre part. Assurez-vous de ne pas spécifier un LCID qui n'existe pas.
Nous vous fournissons la liste la plus fiable des différents LCID possibles en ASP Classic. Cette liste inclut uniquement les LCID qui sont réellement reconnus et toujours pris en charge par ASP Classic sur Windows Server 2025, 2022 et 2019.
Quelques-unes de ces entrées sont historiques et considérées comme "dépréciées" dans le sens où la combinaison "région + langue" a changé pour des raisons géopolitiques ou de nommage normatif; elles restent toutefois techniquement viables et gérées par le moteur d'exécution ASP Classic comme elles l'étaient sur Windows Server 2016, 2012, 2008, 2003 et 2000. Il est recommandé de substituer les codes indiqués dans la colonne "Tags Locale - historiques" par la version en vigueur indiquée dans la colonne "Tag Locale - IETF BCP 47" afin d'assurer la pérennité de votre code.
La liste fournie ci-dessous a été élaborée par nos soins de manière méthodique et vérifiée, et éprouvée avec le temps au fil des nombreux sites, intranets, applications et systèmes ASP Classic sur lesquels nous avons travaillé. Ces LCID sont tous pleinement fonctionnels : utilisez-les en toute confiance avec SetLocale() ou Session.LCID par exemple.
| LCID Hexa | LCID Decimal | Tag Locale IETF BCP 47 | Tags Locale historiques | Langue | Région |
|---|---|---|---|---|---|
| 0x0401 | 1025 | ar-SA | Arabe | Arabie saoudite | |
| 0x0402 | 1026 | bg-BG | Bulgare | Bulgarie | |
| 0x0403 | 1027 | ca-ES | Catalan | Espagne | |
| 0x0404 | 1028 | zh-TW | zh-CHT | Chinois | Taïwan |
| 0x0405 | 1029 | cs-CZ | Tchèque | Tchéquie | |
| 0x0406 | 1030 | da-DK | Danois | Danemark | |
| 0x0407 | 1031 | de-DE | Allemand | Allemagne | |
| 0x0408 | 1032 | el-GR | Grec | Grèce | |
| 0x0409 | 1033 | en-US | Anglais | États-Unis | |
| 0x040A | 1034 | es-ES | Espagnol | Espagne | |
| 0x040B | 1035 | fi-FI | Finnois | Finlande | |
| 0x040C | 1036 | fr-FR | Français | France | |
| 0x040D | 1037 | he-IL | iw-IL | Hébreu | Israël |
| 0x040E | 1038 | hu-HU | Hongrois | Hongrie | |
| 0x040F | 1039 | is-IS | Islandais | Islande | |
| 0x0410 | 1040 | it-IT | Italien | Italie | |
| 0x0411 | 1041 | ja-JP | Japonais | Japon | |
| 0x0412 | 1042 | ko-KR | Coréen | Corée | |
| 0x0413 | 1043 | nl-NL | Néerlandais | Pays-Bas | |
| 0x0414 | 1044 | nb-NO | no-BOK | Norvégien bokmål | Norvège |
| 0x0415 | 1045 | pl-PL | Polonais | Pologne | |
| 0x0416 | 1046 | pt-BR | Portugais | Brésil | |
| 0x0417 | 1047 | rm-CH | Romanche | Suisse | |
| 0x0418 | 1048 | ro-RO | Roumain | Roumanie | |
| 0x0419 | 1049 | ru-RU | Russe | Russie | |
| 0x041A | 1050 | hr-HR | Croate | Croatie | |
| 0x041B | 1051 | sk-SK | Slovaque | Slovaquie | |
| 0x041C | 1052 | sq-AL | Albanais | Albanie | |
| 0x041D | 1053 | sv-SE | Suédois | Suède | |
| 0x041E | 1054 | th-TH | Thaï | Thaïlande | |
| 0x041F | 1055 | tr-TR | Turc | Turquie | |
| 0x0420 | 1056 | ur-PK | Ourdou | Pakistan | |
| 0x0421 | 1057 | id-ID | in-ID | Indonésien | Indonésie |
| 0x0422 | 1058 | uk-UA | Ukrainien | Ukraine | |
| 0x0423 | 1059 | be-BY | Biélorusse | Biélorussie | |
| 0x0424 | 1060 | sl-SI | Slovène | Slovénie | |
| 0x0425 | 1061 | et-EE | Estonien | Estonie | |
| 0x0426 | 1062 | lv-LV | Letton | Lettonie | |
| 0x0427 | 1063 | lt-LT | Lituanien | Lituanie | |
| 0x0428 | 1064 | tg-Cyrl-TJ | Tadjik | Tadjikistan | |
| 0x0429 | 1065 | fa-IR | Persan | Iran | |
| 0x042A | 1066 | vi-VN | Vietnamien | Viêt Nam | |
| 0x042B | 1067 | hy-AM | Arménien | Arménie | |
| 0x042C | 1068 | az-Latn-AZ | Azerbaïdjanais (Latin) | Azerbaïdjan | |
| 0x042D | 1069 | eu-ES | Basque | Espagne | |
| 0x042E | 1070 | hsb-DE | wen-DE | Haut-sorabe | Allemagne |
| 0x042F | 1071 | mk-MK | Macédonien | Macédoine du Nord | |
| 0x0430 | 1072 | st-ZA | Sotho | Afrique du Sud | |
| 0x0431 | 1073 | ts-ZA | Tsonga | Afrique du Sud | |
| 0x0432 | 1074 | tn-ZA | Tswana | Afrique du Sud | |
| 0x0433 | 1075 | ve-ZA | Venda | Afrique du Sud | |
| 0x0434 | 1076 | xh-ZA | Xhosa | Afrique du Sud | |
| 0x0435 | 1077 | zu-ZA | Zoulou | Afrique du Sud | |
| 0x0436 | 1078 | af-ZA | Afrikaans | Afrique du Sud | |
| 0x0437 | 1079 | ka-GE | Géorgien | Géorgie | |
| 0x0438 | 1080 | fo-FO | Féroïen | Îles Féroé | |
| 0x0439 | 1081 | hi-IN | Hindi | Inde | |
| 0x043A | 1082 | mt-MT | Maltais | Malte | |
| 0x043B | 1083 | se-NO | Sami du Nord | Norvège | |
| 0x043D | 1085 | yi-001 | ji-001 | Yiddish | Monde |
| 0x043E | 1086 | ms-MY | Malais | Malaisie | |
| 0x043F | 1087 | kk-KZ | Kazakh | Kazakhstan | |
| 0x0440 | 1088 | ky-KG | Kirghiz | Kirghizistan | |
| 0x0441 | 1089 | sw-KE | Swahili | Kenya | |
| 0x0442 | 1090 | tk-TM | Turkmène | Turkménistan | |
| 0x0443 | 1091 | uz-Latn-UZ | Ouzbek (Latin) | Ouzbékistan | |
| 0x0444 | 1092 | tt-RU | Tatar | Russie | |
| 0x0445 | 1093 | bn-IN | Bengali | Inde | |
| 0x0446 | 1094 | pa-IN | Pendjabi | Inde | |
| 0x0447 | 1095 | gu-IN | Gujarâtî | Inde | |
| 0x0448 | 1096 | or-IN | Odia | Inde | |
| 0x0449 | 1097 | ta-IN | Tamoul | Inde | |
| 0x044A | 1098 | te-IN | Télougou | Inde | |
| 0x044B | 1099 | kn-IN | Kannada | Inde | |
| 0x044C | 1100 | ml-IN | Malayalam | Inde | |
| 0x044D | 1101 | as-IN | Assamais | Inde | |
| 0x044E | 1102 | mr-IN | Marathi | Inde | |
| 0x044F | 1103 | sa-IN | Sanskrit | Inde | |
| 0x0450 | 1104 | mn-MN | Mongol (Cyrillique) | Mongolie | |
| 0x0451 | 1105 | bo-CN | Tibétain | République populaire de Chine | |
| 0x0452 | 1106 | cy-GB | Gallois | Royaume-Uni | |
| 0x0453 | 1107 | km-KH | Khmer | Cambodge | |
| 0x0454 | 1108 | lo-LA | Lao | R.D.P. Lao | |
| 0x0455 | 1109 | my-MM | Birman | Myanmar | |
| 0x0456 | 1110 | gl-ES | Galicien | Espagne | |
| 0x0457 | 1111 | kok-IN | Konkani | Inde | |
| 0x045A | 1114 | syr-SY | Syriaque | Syrie | |
| 0x045B | 1115 | si-LK | Singhalais | Sri Lanka | |
| 0x045C | 1116 | chr-Cher-US | Cherokee | États-Unis | |
| 0x045d | 1117 | iu-Cans-CA | Inuktitut (Syllabique) | Canada | |
| 0x045E | 1118 | am-ET | Amharique | Éthiopie | |
| 0x045F | 1119 | tzm-Arab-MA | Tamazight du Moyen Atlas (Arabe) | Maroc | |
| 0x0460 | 1120 | ks-Arab | Kashmiri | Perso-arabe | |
| 0x0461 | 1121 | ne-NP | Népalais | Népal | |
| 0x0462 | 1122 | fy-NL | Frison | Pays-Bas | |
| 0x0463 | 1123 | ps-AF | Pachto | Afghanistan | |
| 0x0464 | 1124 | fil-PH | ti-PH | Filipino | Philippines |
| 0x0465 | 1125 | dv-MV | Divehi | Maldives | |
| 0x0467 | 1127 | ff-NG | Peul | Nigeria | |
| 0x0467 | 1127 | ff-Latn-NG | Peul (Latin) | Nigeria | |
| 0x0468 | 1128 | ha-Latn-NG | Haoussa (Latin) | Nigeria | |
| 0x046A | 1130 | yo-NG | Yoruba | Nigeria | |
| 0x046B | 1131 | quz-BO | Quechua | Bolivie | |
| 0x046C | 1132 | nso-ZA | Sotho du Nord | Afrique du Sud | |
| 0x046D | 1133 | ba-RU | Bachkir | Russie | |
| 0x046E | 1134 | lb-LU | Luxembourgeois | Luxembourg | |
| 0x046F | 1135 | kl-GL | Groenlandais | Groenland | |
| 0x0470 | 1136 | ig-NG | Igbo | Nigeria | |
| 0x0471 | 1137 | kr-Latn-NG | Kanouri (Latin) | Nigeria | |
| 0x0472 | 1138 | om-ET | Oromo | Éthiopie | |
| 0x0473 | 1139 | ti-ET | Tigrinya | Éthiopie | |
| 0x0474 | 1140 | gn-PY | Guarani | Paraguay | |
| 0x0475 | 1141 | haw-US | Hawaïen | États-Unis | |
| 0x0476 | 1142 | la-VA | Latin | Cité du Vatican | |
| 0x0477 | 1143 | so-SO | Somali | Somalie | |
| 0x0478 | 1144 | ii-CN | Yi | République populaire de Chine | |
| 0x047A | 1146 | arn-CL | Mapudungun | Chili | |
| 0x047C | 1148 | moh-CA | Mohawk | Canada | |
| 0x047E | 1150 | br-FR | Breton | France | |
| 0x0480 | 1152 | ug-CN | Ouïghour | République populaire de Chine | |
| 0x0481 | 1153 | mi-NZ | Maori | Nouvelle-Zélande | |
| 0x0482 | 1154 | oc-FR | Occitan | France | |
| 0x0483 | 1155 | co-FR | Corse | France | |
| 0x0484 | 1156 | gsw-FR | Alsacien | France | |
| 0x0485 | 1157 | sah-RU | Iakoute | Russie | |
| 0x0486 | 1158 | quc-Latn-GT | K'iche' | Guatemala | |
| 0x0487 | 1159 | rw-RW | Kinyarwanda | Rwanda | |
| 0x0488 | 1160 | wo-SN | Wolof | Sénégal | |
| 0x048C | 1164 | prs-AF | Dari | Afghanistan | |
| 0x0491 | 1169 | gd-GB | Gaélique écossais | Royaume-Uni | |
| 0x0492 | 1170 | ku-Arab-IQ | Kurde central | Irak | |
| 0x0801 | 2049 | ar-IQ | Arabe | Irak | |
| 0x0803 | 2051 | ca-ES-valencia | Valencien | Espagne | |
| 0x0804 | 2052 | zh-CN | zh-CHS | Chinois (Simplifié) | République populaire de Chine |
| 0x0807 | 2055 | de-CH | Allemand | Suisse | |
| 0x0809 | 2057 | en-GB | Anglais | Royaume-Uni | |
| 0x080A | 2058 | es-MX | Espagnol | Mexique | |
| 0x080C | 2060 | fr-BE | Français | Belgique | |
| 0x0810 | 2064 | it-CH | Italien | Suisse | |
| 0x0813 | 2067 | nl-BE | Néerlandais | Belgique | |
| 0x0814 | 2068 | nn-NO | no-NYN | Norvégien (Nynorsk) | Norvège |
| 0x0816 | 2070 | pt-PT | Portugais | Portugal | |
| 0x0818 | 2072 | ro-MD | ro-MO | Roumain | Moldavie |
| 0x0819 | 2073 | ru-MD | ru-MO | Russe | Moldavie |
| 0x081A | 2074 | sr-Latn-CS | Serbe (Latin) | Serbie-et-Monténégro (Ancien) | |
| 0x081D | 2077 | sv-FI | Suédois | Finlande | |
| 0x0820 | 2080 | ur-IN | Ourdou | Inde | |
| 0x082C | 2092 | az-Cyrl-AZ | Azéri (Cyrillique) | Azerbaïdjan | |
| 0x082E | 2094 | dsb-DE | Bas-sorabe | Allemagne | |
| 0x0832 | 2098 | tn-BW | Tswana | Botswana | |
| 0x083B | 2107 | se-SE | Same du Nord | Suède | |
| 0x083C | 2108 | ga-IE | Irlandais | Irlande | |
| 0x083E | 2110 | ms-BN | Malais | Brunei Darussalam | |
| 0x0843 | 2115 | uz-Cyrl-UZ | Ouzbek (Cyrillique) | Ouzbékistan | |
| 0x0845 | 2117 | bn-BD | Bengali | Bangladesh | |
| 0x0846 | 2118 | pa-Arab-PK | Pendjabi | République islamique du Pakistan | |
| 0x0849 | 2121 | ta-LK | Tamoul | Sri Lanka | |
| 0x0850 | 2128 | mn-Mong-CN | Mongol (Traditionnel Mongol) | République populaire de Chine | |
| 0x0859 | 2137 | sd-Arab-PK | Sindhi | République islamique du Pakistan | |
| 0x085D | 2141 | iu-Latn-CA | Inuktitut (Latin) | Canada | |
| 0x085F | 2143 | tzm-Latn-DZ | Tamazight (Latin) | Algérie | |
| 0x0860 | 2144 | ks-Deva-IN | Cachemiri (Devanagari) | Inde | |
| 0x0861 | 2145 | ne-IN | Népalais | Inde | |
| 0x0867 | 2151 | ff-Latn-SN | Peul | Sénégal | |
| 0x086B | 2155 | quz-EC | Quechua | Équateur | |
| 0x0873 | 2163 | ti-ER | Tigrinya | Érythrée | |
| 0x0c01 | 3073 | ar-EG | Arabe | Égypte | |
| 0x0C04 | 3076 | zh-HK | Chinois (Traditionnel) | Hong Kong | |
| 0x0C07 | 3079 | de-AT | Allemand | Autriche | |
| 0x0C09 | 3081 | en-AU | Anglais | Australie | |
| 0x0c0A | 3082 | es-ES | Espagnol | Espagne | |
| 0x0c0C | 3084 | fr-CA | Français | Canada | |
| 0x0C1A | 3098 | sr-Cyrl-CS | Serbe (Cyrillique) | Serbie-et-Monténégro (Ancien) | |
| 0x0C3B | 3131 | se-FI | Same du Nord | Finlande | |
| 0x0C50 | 3152 | mn-Mong-MN | Mongol (Traditionnel Mongol) | Mongolie | |
| 0x0C51 | 3153 | dz-BT | Dzongkha | Bhoutan | |
| 0x0C6B | 3179 | quz-PE | Quechua | Pérou | |
| 0x1001 | 4097 | ar-LY | Arabe | Libye | |
| 0x1004 | 4100 | zh-SG | Chinois (Simplifié) | Singapour | |
| 0x1007 | 4103 | de-LU | Allemand | Luxembourg | |
| 0x1009 | 4105 | en-CA | Anglais | Canada | |
| 0x100A | 4106 | es-GT | Espagnol | Guatemala | |
| 0x100C | 4108 | fr-CH | Français | Suisse | |
| 0x101A | 4122 | hr-BA | Croate (Latin) | Bosnie-Herzégovine | |
| 0x103B | 4155 | smj-NO | Same de Lule | Norvège | |
| 0x1401 | 5121 | ar-DZ | Arabe | Algérie | |
| 0x1404 | 5124 | zh-MO | Chinois (Traditionnel) | Macao | |
| 0x1407 | 5127 | de-LI | Allemand | Liechtenstein | |
| 0x1409 | 5129 | en-NZ | Anglais | Nouvelle-Zélande | |
| 0x140A | 5130 | es-CR | Espagnol | Costa Rica | |
| 0x140C | 5132 | fr-LU | Français | Luxembourg | |
| 0x141A | 5146 | bs-Latn-BA | Bosniaque (Latin) | Bosnie-Herzégovine | |
| 0x143B | 5179 | smj-SE | Same de Lule | Suède | |
| 0x1801 | 6145 | ar-MA | Arabe | Maroc | |
| 0x1809 | 6153 | en-IE | Anglais | Irlande | |
| 0x180A | 6154 | es-PA | Espagnol | Panama | |
| 0x180C | 6156 | fr-MC | Français | Principauté de Monaco | |
| 0x181A | 6170 | sr-Latn-BA | Serbe (Latin) | Bosnie-Herzégovine | |
| 0x183B | 6203 | sma-NO | Same du Sud | Norvège | |
| 0x1C01 | 7169 | ar-TN | Arabe | Tunisie | |
| 0x1C09 | 7177 | en-ZA | Anglais | Afrique du Sud | |
| 0x1c0A | 7178 | es-DO | Espagnol | République dominicaine | |
| 0x1C0C | 7180 | fr-029 | Français | Caraïbes | |
| 0x1C1A | 7194 | sr-Cyrl-BA | Serbe (Cyrillique) | Bosnie-Herzégovine | |
| 0x1C3B | 7227 | sma-SE | Same du Sud | Suède | |
| 0x2001 | 8193 | ar-OM | Arabe | Oman | |
| 0x2009 | 8201 | en-JM | Anglais | Jamaïque | |
| 0x200A | 8202 | es-VE | Espagnol | République bolivarienne du Venezuela | |
| 0x200C | 8204 | fr-RE | Français | La Réunion | |
| 0x201A | 8218 | bs-Cyrl-BA | Bosniaque (Cyrillique) | Bosnie-Herzégovine | |
| 0x203B | 8251 | sms-FI | Same skolt | Finlande | |
| 0x2401 | 9217 | ar-YE | Arabe | Yémen | |
| 0x2409 | 9225 | en-029 | Anglais | Caraïbes | |
| 0x240A | 9226 | es-CO | Espagnol | Colombie | |
| 0x240C | 9228 | fr-CD | Français | République démocratique du Congo | |
| 0x241A | 9242 | sr-Latn-RS | Serbe (Latin) | Serbie | |
| 0x243B | 9275 | smn-FI | Same d’Inari | Finlande | |
| 0x2801 | 10241 | ar-SY | Arabe | Syrie | |
| 0x2809 | 10249 | en-BZ | Anglais | Belize | |
| 0x280A | 10250 | es-PE | Espagnol | Pérou | |
| 0x280C | 10252 | fr-SN | Français | Sénégal | |
| 0x281A | 10266 | sr-Cyrl-RS | Serbe (Cyrillique) | Serbie | |
| 0x2C01 | 11265 | ar-JO | Arabe | Jordanie | |
| 0x2c09 | 11273 | en-TT | Anglais | Trinité-et-Tobago | |
| 0x2C0A | 11274 | es-AR | Espagnol | Argentine | |
| 0x2c0C | 11276 | fr-CM | Français | Cameroun | |
| 0x2c1A | 11290 | sr-Latn-ME | Serbe (Latin) | Monténégro | |
| 0x3001 | 12289 | ar-LB | Arabe | Liban | |
| 0x3009 | 12297 | en-ZW | Anglais | Zimbabwe | |
| 0x300A | 12298 | es-EC | Espagnol | Équateur | |
| 0x300C | 12300 | fr-CI | Français | Côte d’Ivoire | |
| 0x301A | 12314 | sr-Cyrl-ME | Serbe (Cyrillique) | Monténégro | |
| 0x3401 | 13313 | ar-KW | Arabe | Koweït | |
| 0x3409 | 13321 | en-PH | Anglais | République des Philippines | |
| 0x340A | 13322 | es-CL | Espagnol | Chili | |
| 0x340C | 13324 | fr-ML | Français | Mali | |
| 0x3801 | 14337 | ar-AE | Arabe | Émirats arabes unis | |
| 0x380A | 14346 | es-UY | Espagnol | Uruguay | |
| 0x380C | 14348 | fr-MA | Français | Maroc | |
| 0x3C01 | 15361 | ar-BH | Arabe | Bahreïn | |
| 0x3C09 | 15369 | en-HK | Anglais | Hong Kong | |
| 0x3C0A | 15370 | es-PY | Espagnol | Paraguay | |
| 0x3c0C | 15372 | fr-HT | Français | Haïti | |
| 0x4001 | 16385 | ar-QA | Arabe | Qatar | |
| 0x4009 | 16393 | en-IN | Anglais | Inde | |
| 0x400A | 16394 | es-BO | Espagnol | Bolivie | |
| 0x4409 | 17417 | en-MY | Anglais | Malaisie | |
| 0x440A | 17418 | es-SV | Espagnol | Salvador | |
| 0x4809 | 18441 | en-SG | Anglais | Singapour | |
| 0x480A | 18442 | es-HN | Espagnol | Honduras | |
| 0x4C09 | 19465 | en-AE | Anglais | Émirats arabes unis | |
| 0x4C0A | 19466 | es-NI | Espagnol | Nicaragua | |
| 0x500A | 20490 | es-PR | Espagnol | Porto Rico | |
| 0x540A | 21514 | es-US | Espagnol | États-Unis | |
| 0x580A | 22538 | es-419 | Espagnol | Amérique latine | |
| 0x5c0A | 23562 | es-CU | Espagnol | Cuba |
Nous vous assistons avec IIS et votre code ASP Classic.
Prenez contact avec notre équipe.
NOTE : Vos changements seront appliqués dès la prochaine page que vous visiterez/chargerez.
En utilisant ce site, vous acceptez que nous utilisions des statistiques anonymes pour analyser notre trafic et améliorer votre expérience de navigation sur notre site, ainsi que des technologies et cookies pour personnaliser le contenu. Ces informations anonymes peuvent être partagées avec nos partenaires de médias sociaux et d'analyse de confiance.