El LCID (Locale Identifier) es un identificador numérico utilizado por Windows (y por tanto por ASP Classic en VBScript y JScript) para definir las reglas culturales y lingüísticas aplicables a la ejecución de su código, cuando este debe tratar datos relacionados con:
El LCID no es ni un idioma ni un país. En efecto, un mismo idioma puede utilizarse en varios países con diferencias a veces notables o sutiles. Del mismo modo, la población de un mismo país puede hablar varios idiomas. Esta realidad justifica por tanto la definición de varios LCID para un mismo idioma. Los LCID de Windows se construyen sobre la base de un LANGID (idioma) + un SUBLANG (variante / script).
Existen varias maneras de especificar el LCID que utiliza su sitio, sesión o script ASP:
SetLocale(),Session.LCID en su script,Response.LCID en su script.Aunque Windows los reconoce, tenga en cuenta que no todos los LCID son utilizables inmediatamente: algunos requieren la instalación de paquetes lingüísticos adicionales en el sistema Windows Server correspondiente antes de poder implementarse. Para conocer la lista de los LCID disponibles haga clic aquí.
Puede verificar que el LCID que ha especificado se haya aplicado correctamente utilizando la función GetLocale() de la siguiente manera:
<%
'Aplicar el LCID 1034 '(Español)
SetLocale(1034)
'Si el LCID es conforme
if (GetLocale() = 1034) then
Response.Write "LCID válido"
'Si el LCID es diferente
else
Response.Write "LCID utilizado como reemplazo : " & GetLocale()
end if
%>Si el LCID es válido y reconocido, pero no está instalado en el sistema, el motor de ejecución ASP Classic falla silenciosamente al aplicar el LCID, pero no genera un error explícito: aplica entonces el LCID definido por defecto en IIS para su sitio (si es distinto de 0), o bien el LCID por defecto vigente en el sistema Windows Server si ha fallado.
Si especifica un LCID no admitido (líneas resaltadas en amarillo), el motor de ejecución ASP Classic generalmente genera un error explícito, como muestra el siguiente fragmento de código:
<%
'-------------------------
'Asignar un LCID no válido (mediante "SetLocale")
SetLocale(98765)
'Se produce el siguiente error:
' 0x800A01BF
' Object doesn't support current locale setting: 'SetLocale'
'-------------------------
'Asignar un LCID no válido (mediante "Session")
Session.LCID = 98765
'Se produce el siguiente error:
' 0x80004005 (ASP 0219)
' SessionID
' The specified LCID is not available.
'-------------------------
'Asignar un LCID no válido (mediante "Response")
Response.LCID = 98765
'Se produce el siguiente error:
' 0x80004005 (ASP 0219)
' Response object
' The specified LCID is not available.
%>El LCID no tiene el mismo alcance según el lugar donde lo especifique. Puede aprovechar estas diferencias para aplicar excepciones a reglas previamente definidas, con el fin de utilizar un LCID únicamente en ciertas partes de su código, de modo que solo se aplique a ciertos elementos u objetos.
| Modo de declaración | Alcance | Persistencia | Uso recomendado |
|---|---|---|---|
| IIS > ASP > LCID | 1. Aplicación | Permanente | Valor por defecto |
Session.LCID | 2. Sesión | Varias solicitudes | Cultura del usuario |
SetLocale() | 3. Thread | Solicitud | Ajuste puntual |
Response.LCID | 4. Respuesta | Solicitud | Salida específica |
Estos diferentes modos de declaración del LCID se detallan a continuación, clasificados por orden de alcance.
Session.LCID, Response.LCID y el thread1034 (Español)<%
'Configuración global del Locale ID a nivel de la sesión
Session.LCID = 1034 'Español
'Ejecutar ciertas acciones con el LCID 1034
Response.Write FormatDateTime(Now(), vbShortDate)
'Excepción local: Recuperar el Locale ID activo y luego reemplazarlo
' previousLocale recibe desde Session.LCID el Locale ID activo en ese momento preciso (1034)
' Nota: SetLocale() no modifica Session.LCID
Dim previousLocale : previousLocale = SetLocale(1033) 'Inglés
'Ejecutar un procesamiento en el Locale ID ahora activo (1033)
Response.Write FormatDateTime(Now(), vbLongDate)
'Restaurar el Locale ID anterior del hilo (1034)
SetLocale previousLocale
%><%
'Configuración global del Locale ID a nivel de sesión
Session.LCID = 1034 'Español
'Realizar determinadas acciones con el LCID 1034 (Español)
Response.Write FormatDateTime(Now(), vbShortDate)
'Reemplazar ahora el Locale ID a nivel de sesión por 1033
Session.LCID = 1033 'Anglais
'Realizar las siguientes acciones con el Locale ID ahora activo (1033)
Response.Write FormatDateTime(Now(), vbLongDate)
%><%
'Configuración global del Locale ID a nivel de la sesión
Session.LCID = 1034 'Español
'Ejecutar ciertas acciones con el LCID 1034
Response.Write FormatDateTime(Now(), vbShortDate)
'Excepción local: Recuperar el Locale ID activo y luego reemplazarlo
' previousLocale recibe desde Session.LCID el Locale ID activo en ese momento preciso (1034)
' Nota: Response.LCID() no modifica Session.LCID
Dim previousLocale : previousLocale = GetLocale() 'Español (1034)
Response.LCID = 1033 'Inglés
'Devolver una fecha en el Locale ID ahora activo (1033)
Response.Write FormatDateTime(Now(), vbLongDate)
%>El LCID es una convención Windows (32 bits), históricamente compuesta por un identificador de idioma y un identificador de región. Por tanto, influye en particular en funciones como CDate, FormatDateTime, FormatNumber, FormatCurrency, InStr, StrComp, LCase, etc. (lista no exhaustiva). En la práctica, el punto crítico en casos de desarrollo rara vez es la visualización, sino las etapas previas, es decir, la lectura, el parsing y los cálculos. La ausencia de normalización de los separadores de miles y decimales en los números es una trampa común que puede provocar errores durante inserciones en sus bases de datos.
La ejecución del mismo código ASP Classic en dos servidores diferentes con configuraciones regionales distintas puede generar resultados divergentes. Por ello, se recomienda, por una parte, fijar el LCID por defecto en las propiedades de IIS, y por otra parte, especificar este LCID en su código fuente ASP antes de cada operación de lectura, cálculo y renderizado de datos textuales, numéricos y de fecha/hora.
Puede definir y modificar el LCID en cualquier momento mediante SetLocale(), Session.LCID y Response.LCID dentro de un mismo script. De hecho, es una técnica utilizada con frecuencia para gestionar datos numéricos o fechas dentro de una página: utilizar un LCID inglés (1033) para efectuar los cálculos, y después utilizar un LCID localizado en otro idioma/región para devolver la información al internauta.
Una estrategia de LCID común respecto a las comparaciones y visualizaciones de cadenas de caracteres es:
Session.LCID al inicio de un script (o de una sesión en el global.asa)0=vbBinaryCompare)SetLocale() para un tratamiento puntualResponse.LCID en el momento de mostrar un datoAl programar, no debe contar con ningún parámetro predefinido: debe fijar usted mismo las reglas del juego y forzar el parámetro LCID desde el inicio de su script. Es la única manera de asegurarse de que su código pueda funcionar en cualquier tipo de servidor, sea cual sea su configuración regional y lingüística (ej. Windows Server en Inglés, Francés, Español, etc.).
Definir sistemáticamente el LCID antes de cada operación a un valor constante le garantizará un código fiable con un funcionamiento previsible en cualquier servidor Windows. La manipulación de fechas y datos numéricos en un sistema ASP Classic exige rigor y constancia. Puede recurrir a nosotros si necesita hacer más fiable su código en estos aspectos:
Las fechas y horas están muy fuertemente impactadas por el LCID vigente en su script ASP Classic. Algunos idiomas utilizan formatos de fecha muy diferentes, con barras, guiones y espacios para separar los días, años y horas. Si históricamente ha desarrollado en un sistema Windows en Inglés, Francés o Español, y luego mueve su código a otro servidor, generará muchísimos errores si el LCID por defecto en IIS no es exactamente el mismo.
Si su código no define ningún LCID y espera un valor particular que usted siempre ha conocido, proponemos gratuitamente definir en IIS el LCID por defecto de su elección en su alojamiento compartido ASP Classic. Esto le permitirá hacer funcionar su código fuente de la misma manera en que siempre lo ha hecho históricamente.
Las funciones relativas a las fechas que están impactadas por el LCID son las siguientes:
CDate: influye en el reconocimiento de los formatos de fecha (orden día/mes/año, separadores, meses escritos con letras según el idioma). Ejemplo: La fecha "03/04/2025" se interpretará como el 3 de Abril en fr-FR (LCID 1036), pero significará el 4 de Marzo con un LCID en-US (1033).IsDate, IsNumeric: influye en la validación de los datos antes de la conversión. Ejemplo: La fecha "13/04/2025" será aceptada porque se reconoce como el 13 de Abril en fr-FR (LCID 1036), pero se considerará inválida con un LCID en-US (1033), porque el mes n.º 13 no existe.FormatDateTime: influye en los formatos de fecha/hora (orden día/mes, separadores, nombres localizados, etc). WeekdayName: influye en el nombre del día y determina el idioma del texto devuelto.Declare explícitamente el LCID de manera idéntica antes de cada operación:
Se recomienda realizar el máximo de operaciones de comparación y modificación de fechas utilizando el LCID 1033, previsible y conocido por todos los desarrolladores, y disponible de serie en todos los sistemas Windows Server.
Es prudente "parsear" sistemáticamente la fecha para extraer sus diferentes componentes (Día, Mes, Año, Hora, Minuto, Segundo), y luego reconstruirla en una variable mediante las funciones DateSerial() o TimeSerial(). Así obtiene una variable VBScript de tipo date perfectamente fiable. Esto suele ser indispensable si algunas fechas proceden de un formulario web, y más raramente cuando se leen desde su base de datos.
Cuando compare y modifique fechas, utilice siempre dos fechas que hayan sido definidas con el mismo LCID.
Realice siempre sus cálculos, comparaciones y modificaciones de fechas con el mismo LCID, y conviértalas a otra zona horaria solo en el momento de su visualización. Puede utilizar el componente LJW ServerSuite para convertir nativamente sus fechas y horas desde ASP Classic en otras zonas horarias, desde y hacia UTC, así como en formato ISO.
Los números enteros y decimales están muy fuertemente impactados por el LCID vigente en su script ASP Classic. Algunos idiomas utilizan puntos, comas, espacios, etc. para separar los miles y los decimales. Si históricamente ha desarrollado en un sistema Windows en Inglés, Francés o Español, y luego mueve su código a otro servidor, generará muchísimos errores si el LCID por defecto en IIS no es exactamente el mismo.
Si su código no define ningún LCID y espera un valor particular que usted siempre ha conocido, proponemos gratuitamente definir en IIS el LCID por defecto de su elección en su alojamiento compartido ASP Classic. Esto le permitirá hacer funcionar su código fuente de la misma manera en que siempre lo ha hecho históricamente.
Las funciones relativas a los números que se ven impactadas por el LCID son las siguientes:
CLng, CInt, CSng, CDbl, CCur: influye en la interpretación de los separadores de miles y decimales. Ejemplo: "1,23" significará 1.23 en fr-FR (LCID 1036), pero podrá ser mal interpretado con un LCID en-US (1033). Tenga en cuenta a este respecto que CCur() convierte a Currency, el único tipo decimal exacto, mientras que CDbl() convierte a Double, que por su parte es un número flotante binario que puede potencialmente conducir a aproximaciones inaceptables cuando se trata de datos monetarios o financieros.FormatNumber, FormatPercent: influye en la interpretación de los separadores de miles y decimales, las agrupaciones y los porcentajes.FormatCurrency: influye en la interpretación de los símbolos monetarios, la ubicación del símbolo, los separadores, el número de decimales y los números negativos.Declare explícitamente el LCID de manera idéntica antes de cada operación:
Se recomienda realizar el máximo de operaciones de comparación y modificación de números decimales y monetarios utilizando el LCID 1033, previsible y conocido por todos los desarrolladores, y disponible de serie en todos los sistemas Windows Server.
No descuide los separadores de miles: algunos idiomas utilizan la coma o el punto (incluso el espacio) como separador de miles. Se expone a grandes problemas si no estandariza estos separadores antes de convertir su dato en variable numérica con CLng(), CCur(), etc.
No utilice ninguna variable numérica decimal con total confianza. El separador decimal varía según los idiomas (coma, punto). VBScript realiza todos sus cálculos con variables cuyo separador decimal es el punto.
Sea cual sea el origen de su variable numérica, asegúrese de que utiliza un punto como separador de decimales antes de convertirla con CLng(), CCur(), etc. Podría verse tentado a reemplazar las comas por puntos de esta manera:
<%
Dim myDecimalNumber
myDecimalNumber = rs("productPrice") 'Lectura desde la base de datos
myDecimalNumber = Replace(myDecimalNumber, ",", ".") 'Reemplazar las comas por puntos
myDecimalNumber = Trim(Replace(myDecimalNumber, " ", "")) 'SEliminar los espacios
myDecimalNumber = CCur(myDecimalNumber) 'Convertir en variable decimal (tipo Currency)
%>Sin embargo, en algunos idiomas y regiones, la coma no sirve como separador decimal, sino como separador de miles. Por tanto, esta técnica no funcionará. Por eso es importante que conozca de antemano el origen de los datos numéricos que utiliza su código.
Utilice más bien este código, que hace uso de funciones ASP encargadas de recuperar (en amarillo) y utilizar (en azul) los símbolos de separación realmente vigentes con el LCID actual. Esta técnica funciona incluso si no conoce con certeza el formato de origen del dato numérico que se dispone a tratar en su código:
<%
'Función: Devuelve el carácter separador utilizado para los miles
Function GetSystemThousandSep()
GetSystemThousandSep = Mid(FormatNumber(2000), 2, 1)
End Function 'GetSystemThousandSep
'Función: Devuelve el carácter separador utilizado para los decimales
Function GetSystemDecimSep()
GetSystemDecimSep = Mid(CStr(1/2), 2, 1)
End Function 'GetSystemDecimSep
'Forzar el LCID a Inglés para realizar los cálculos
Response.LCID = 1033
'Recuperar los separadores
Dim sepDecimal : sepDecimal = GetSystemDecimSep()
Dim sepThousand : sepThousand = GetSystemThousandSep()
Dim myDecimalNumber
myDecimalNumber = 1234.56
myDecimalNumber = Replace(myDecimalNumber, sepDecimal, ".") 'Forzar el separador decimal a "punto"
myDecimalNumber = Trim(Replace(myDecimalNumber, sepThousand, "")) 'Eliminar los separadores de miles
myDecimalNumber = CCur(myDecimalNumber) 'Convertir en variable decimal (tipo Currency)
Response.LCID = 1033 'Definir el Locale ID de visualización en Inglés
myDecimalNumber = myDecimalNumber + 0.01 'Agregar 1 céntimo (el LCID no tiene ninguna incidencia en este cálculo)
Response.Write "EN : " & FormatNumber(myDecimalNumber, 2) & "<hr>" 'Mostrar la variable => Devuelve 1,234.57
Response.LCID = 1036 'Definir el Locale ID de visualización en Francés
myDecimalNumber = myDecimalNumber + 0.01 'Agregar 1 céntimo (el LCID no tiene ninguna incidencia en este cálculo)
Response.Write "FR : " & FormatNumber(myDecimalNumber, 2) & "<hr>" 'Mostrar la variable => Devuelve 1 234,58
Response.LCID = 1034 'Definir el Locale ID de visualización en Español
myDecimalNumber = myDecimalNumber + 0.01 'Agregar 1 céntimo (el LCID no tiene ninguna incidencia en este cálculo)
Response.Write "ES : " & FormatNumber(myDecimalNumber, 2) & "<hr>" 'Mostrar la variable => Devuelve 1.234,59
%>Su código puede provocar un error en cualquier momento. Por ello, añada protecciones a lo largo de todo su código. Utilice para ello las mismas técnicas que nosotros: programe de manera ultradefensiva. Utilizamos para este fin funciones que hemos desarrollado especialmente, pero el código siguiente le da una idea general del tipo de verificaciones que deben implementarse: (contáctenos si necesita asistencia para reforzar sus defensas)
<%
'Recuperar los separadores (cf. funciones definidas en otra parte de esta página)
Dim sepDecimal : sepDecimal = GetSystemDecimSep()
Dim sepThousand : sepThousand = GetSystemThousandSep()
Dim myDecimalNumber
myDecimalNumber = rs("productPrice") 'Lectura desde la base de datos
if (NOT IsNull(myDecimalNumber)) then
if (myDecimalNumber <> "") then
myDecimalNumber = Replace(myDecimalNumber, sepDecimal, ".") 'Forzar el separador decimal a "punto"
myDecimalNumber = Trim(Replace(myDecimalNumber, sepThousand, "")) 'Eliminar los separadores de miles
Err.Clear
On Error Resume Next
myDecimalNumber = CCur(myDecimalNumber) 'Convertir en variable decimal (tipo Currency)
if (Err.Number <> 0) then
Response.Write "<br>Se produjo un error durante la conversión al tipo Currency"
Response.Write "<br>" & Err.Number & " - " & Err.Description
end if
On Error Goto 0
Err.Clear
end if
end if
%>El LCID influye en las reglas lingüísticas utilizadas por Windows y por tanto por el motor ASP para comparar y ordenar cadenas (collation y comparaciones Unicode). Esto impacta en particular las comparaciones textuales, ciertas operaciones relativas a la caja de los caracteres y a la manera en que se gestionan los acentos. Es uno de los puntos más frecuentemente olvidados entre los numerosos impactos de la elección del LCID.
El LCID afecta a las ordenaciones y comparaciones textuales, pero en cambio no afecta a las ordenaciones explícitas realizadas por la base de datos, ni a las comparaciones ASCII brutas.
Las funciones relativas a las cadenas de caracteres que se ven impactadas por el LCID son las siguientes:
= y <>: influyen en las comparaciones, que por tanto se efectúan en modo textual (1=vbTextCompare) y son sensibles al LCID. Estos operadores no distinguen mayúsculas de minúsculas, pero siguen siendo sensibles a los acentos en las locales latinas habituales (francés, inglés, etc.). La comparación textual VBScript es insensible a mayúsculas y minúsculas (e = E) y sensible a los acentos (e ≠ é), porque se apoya en la collation Windows asociada al LCID activo. VBScript nunca efectúa normalización Unicode (NFD / NFC) ni "desacentuación": nunca transforma é en e. A diferencia de VBA, Option Compare no está disponible en VBScript, y es una diferencia importante que constituye un riesgo. Por ello, las comparaciones realizadas por estos operadores están sistemáticamente influenciadas por el LCID y son comparaciones textuales. No utilice NUNCA = y <> si se requiere una comparación exacta.StrComp, InStr: influye en la comparación de la caja de los caracteres, pero NO influye en los caracteres acentuados: StrComp siempre es sensible a los acentos y el LCID no cambia esto. StrComp se vuelve sensible al LCID cuando la comparación se realiza en modo textual (1=vbTextCompare) y sobre cadenas que incluyen caracteres acentuados procedentes de ciertos idiomas no occidentales. Tenga en cuenta a este respecto que esta función utiliza una comparación textual simplificada, históricamente limitada en idiomas que utilizan mappings Unicode especiales (ejemplos en Turco con los caracteres İ y i, que serán sistemáticamente considerados diferentes, incluso con 1=vbTextCompare). Esta función también depende de la codificación de su archivo y del Codepage que define en su script (resaltado en azul). El código siguiente demuestra los efectos del LCID en las comparaciones de cadenas:<%@codepage=65001%>
<%
'Asegurarse de una codificación coherente en UTF-8
'Requiere evidentemente que su archivo ASP también haya sido guardado en formato UTF-8 desde el origen.
Session.CodePage = 65001
Response.CodePage = 65001
Response.CharSet = "utf-8"
Session.LCID = 1034 'Definir en Español
Dim sourceText : sourceText = "Aquí hay una hermosa frase escrita"
Dim searchedText : searchedText = "HERMOSA"
'Búsqueda técnica (por ejemplo: identificadores, rutas, correos electrónicos, etiquetas)
'Utilice 0 = vbBinaryCompare para que el LCID no tenga ninguna influencia
'=> searchedText NO se encuentra
Response.Write "<br>" & (InStr(1, sourceText, searchedText, vbBinaryCompare))
'Búsqueda de usuario (por ejemplo: texto mostrado, entrada del usuario)
'Utilice un LCID explícito y controlado
'=> searchedText se encuentra
Response.Write "<br>" & (InStr(1, sourceText, searchedText, vbTextCompare))
'Comparación binaria implícita (independiente del LCID)
'Devuelve "False": 0 = vbBinaryCompare, sensible a las mayúsculas y minúsculas.
Response.Write "<br>" & ("E" = "e")
'Comparación explícitamente binaria (independiente del LCID)
'Devuelve "False": 0 = vbBinaryCompare, sensible a las mayúsculas y minúsculas.
Response.Write "<br>" & (StrComp("E", "e", vbBinaryCompare) = 0)
'Comparación explícitamente textual (depende del LCID)
'Devuelve "True": 1 = vbTextCompare, no distingue entre mayúsculas y minúsculas.
Response.Write "<br>" & (StrComp("E", "e", vbTextCompare) = 0)
'Comparación explícitamente binaria (independiente del LCID)
'Devuelve "False": 0 = vbBinaryCompare, sensible a las mayúsculas y minúsculas, y a los acentos.
Response.Write "<br>" & (StrComp("É", "é", vbBinaryCompare) = 0)
'Comparación explícitamente textual (depende del LCID)
'Devuelve "True": 1 = vbTextCompare, no distingue entre mayúsculas y minúsculas. Sensible a los acentos.
'«É» y «é» son el mismo carácter acentuado.
' => Este es el comportamiento esperado.
' Ocurre si:
' - El archivo está guardado, por ejemplo, en UTF-8 o Windows-1252, y se ejecuta como tal
' - Existe coherencia entre @codepage + Session.CodePage + Response.CodePage + Response.CharSet
Response.Write "<br>" & (StrComp("É", "é", vbTextCompare) = 0)
'Comparación explícitamente textual (depende del LCID) (MISMO CÓDIGO QUE LA PRUEBA ANTERIOR => PERO RESULTADO INCORRECTO)
'Devuelve "False": 1 = vbTextCompare, no distingue entre mayúsculas y minúsculas, pero es sensible a los acentos.
'«É» y «é» no son el mismo carácter acentuado: los caracteres comparados están mal codificados.
' => Este es un comportamiento incoherente y no fiable.
' Ocurre si:
' - El archivo está guardado, por ejemplo, en UTF-8 pero se ejecuta en Windows-1252 (o viceversa)
' - Existen incoherencias entre @codepage + Session.CodePage + Response.CodePage + Response.CharSet
Response.Write "<br>" & (StrComp("É", "é", vbTextCompare) = 0)
'Esperado: 201 y 233. En caso contrario, el "False" se explica por las incoherencias de codificación mencionadas anteriormente.
Response.Write "<br>AscW(É)=" & AscW("É") & " / AscW(é)=" & AscW("é")
Response.Write "<hr>"
Session.LCID = 1055 'Turco
'Comparación binaria implícita (independiente del LCID)
'Devuelve "False": 0 = vbBinaryCompare, sensible a las mayúsculas y minúsculas.
Response.Write "<br>" & ("E" = "e")
'Comparación explícitamente binaria (independiente del LCID)
'Devuelve "False": 0 = vbBinaryCompare, sensible a las mayúsculas y minúsculas.
Response.Write "<br>" & (StrComp("E", "e", vbBinaryCompare) = 0)
'Comparación explícitamente textual (depende del LCID)
'Devuelve "True": 1 = vbTextCompare, no distingue entre mayúsculas y minúsculas.
Response.Write "<br>" & (StrComp("E", "e", vbTextCompare) = 0)
'Comparación explícitamente binaria (independiente del LCID)
'Devuelve "False": 0 = vbBinaryCompare, sensible a las mayúsculas y minúsculas, y a los acentos.
Response.Write "<br>" & (StrComp("İ", "i", vbBinaryCompare) = 0)
'Comparación explícitamente textual (depende del LCID)
'Debería devolver "True" porque: 1 = vbTextCompare no distingue entre mayúsculas y minúsculas, pero es sensible a los acentos.
'"İ" e "i" son el mismo carácter acentuado.
'Sin embargo, esta función de VBScript presenta una limitación histórica y realiza una comparación textual simplificada.
'Por lo tanto, esta función devuelve "False", lo cual es el comportamiento esperado en VBScript.
'En consecuencia, se recomienda utilizar una función de reemplazo de caracteres acentuados
'antes de cualquier comparación en idiomas no occidentales.
Response.Write "<br>" & (StrComp("İ", "i", vbTextCompare) = 0)
Response.Write "<hr>"
%>
UCase, LCase: influye en la conversión efectuada. Las reglas lingüísticas utilizadas se delegan/subcontratan a Windows y dependen del LCID. Las reglas lingüísticas utilizadas gestionan bien los idiomas no occidentales como el Turco, a diferencia de StrComp(). Ejemplo: UCase("i") devolverá İ en tr-TR (LCID 1055), pero devolverá I en en-US (LCID 1033).Scripting.Dictionary (con CompareMode: 1=vbTextCompare): influye en el orden en que los caracteres se comparan. Ejemplo:<%
'Según el LCID, las teclas "e", "é" y "è" no se considerarán equivalentes ni se ordenarán de la misma manera.
Set oDict = Server.CreateObject("Scripting.Dictionary")
oDict.CompareMode = 1 'vbTextCompare
%>Declare explícitamente el LCID de manera idéntica antes de cada operación:
Cuando compare o clasifique cadenas de caracteres, utilice siempre un modo 0=vbBinaryCompare para evitar falsos positivos. El riesgo es tanto mayor en ciertos tipos de datos (identificadores, códigos, emails, contraseñas): estos últimos no deben NUNCA compararse en 1=vbTextCompare, sino siempre en modo 0=vbBinaryCompare.
Existen numerosas fuentes que proporcionan listas de LCID. Aborde estas fuentes con gran precaución, ya que muchas son antiguas, parciales e incluso erróneas. Nosotros proporcionamos una lista actualizada y totalmente compatible.
ASP Classic no define por sí mismo ninguna lista de LCID disponibles: delega esta tarea en las API NLS (National Language Support) de Windows. La plataforma ASP Classic hereda por tanto íntegramente la lista de LCID (Locale ID) proporcionada por Windows.
Algunas listas se basan en fuentes fantasiosas o restrictivas (por ejemplo relativas a Microsoft Office o Exchange), o realizan extrapolaciones a partir de la norma BCP-47 para deducir artificialmente supuestos LCID de Windows imaginarios. Estas deducciones son erróneas, porque cada código lingüístico BCP-47 no posee obligatoriamente una correspondencia en la lista de LCID válidos oficialmente soportados e implementados por Microsoft: muchas entradas BCP-47 no están soportadas. Windows distingue estrictamente para cada idioma el par "script + región", mientras que la notación abreviada BCP-47 a menudo solo indica el código de idioma (de 2 o 3 caracteres).
Preste además especial atención al hecho de que algunas listas de LCID incluyen erróneamente todos los LCID soportados nativamente por Windows. Ahora bien, aunque estén definidos en Windows, eso no significa que todos sean utilizables por ASP Classic. Un LCID solo está realmente soportado por ASP Classic si corresponde a una "Locale Windows completa" (idioma + región) instalable mediante la configuración regional de Windows, y además no es únicamente "script-only", reservado, teórico o sin región. Asegúrese de no especificar un LCID que no exista.
Le proporcionamos la lista más fiable de los distintos LCID posibles en ASP Classic. Esta lista incluye únicamente los LCID que están realmente reconocidos y siguen siendo soportados por ASP Classic en Windows Server 2025, 2022 y 2019.
Algunas de estas entradas son históricas y se consideran "obsoletas" en el sentido de que la combinación "región + idioma" ha cambiado por razones geopolíticas o de nomenclatura normativa; sin embargo siguen siendo técnicamente viables y gestionadas por el motor de ejecución ASP Classic tal como lo eran en Windows Server 2016, 2012, 2008, 2003 y 2000. Se recomienda sustituir los códigos indicados en la columna "Tags Locale - históricas " por la versión vigente indicada en la columna "Tag Locale - IETF BCP 47 " para asegurar la perennidad de su código.
La lista proporcionada a continuación ha sido elaborada por nosotros de manera metódica y verificada, y puesta a prueba con el tiempo a través de los numerosos sitios, intranets, aplicaciones y sistemas ASP Classic en los que hemos trabajado. Todos estos LCID son plenamente funcionales: utilícelos con total confianza con SetLocale() o Session.LCID, por ejemplo.
| LCID Hexadecimal | LCID Decimal | Tag Locale IETF BCP 47 | Tags Locale históricas | Idioma | Región |
|---|---|---|---|---|---|
| 0x0401 | 1025 | ar-SA | Árabe | Arabia Saudí | |
| 0x0402 | 1026 | bg-BG | Búlgaro | Bulgaria | |
| 0x0403 | 1027 | ca-ES | Catalán | España | |
| 0x0404 | 1028 | zh-TW | zh-CHT | Chino | Taiwán |
| 0x0405 | 1029 | cs-CZ | Checo | Chequia | |
| 0x0406 | 1030 | da-DK | Danés | Dinamarca | |
| 0x0407 | 1031 | de-DE | Alemán | Alemania | |
| 0x0408 | 1032 | el-GR | Griego | Grecia | |
| 0x0409 | 1033 | en-US | Inglés | Estados Unidos | |
| 0x040A | 1034 | es-ES | Español | España | |
| 0x040B | 1035 | fi-FI | Finés | Finlandia | |
| 0x040C | 1036 | fr-FR | Francés | Francia | |
| 0x040D | 1037 | he-IL | iw-IL | Hebreo | Israel |
| 0x040E | 1038 | hu-HU | Húngaro | Hungría | |
| 0x040F | 1039 | is-IS | Islandés | Islandia | |
| 0x0410 | 1040 | it-IT | Italiano | Italia | |
| 0x0411 | 1041 | ja-JP | Japonés | Japón | |
| 0x0412 | 1042 | ko-KR | Coreano | Corea | |
| 0x0413 | 1043 | nl-NL | Neerlandés | Países Bajos | |
| 0x0414 | 1044 | nb-NO | no-BOK | Noruego bokmål | Noruega |
| 0x0415 | 1045 | pl-PL | Polaco | Polonia | |
| 0x0416 | 1046 | pt-BR | Portugués | Brasil | |
| 0x0417 | 1047 | rm-CH | Romanche | Suiza | |
| 0x0418 | 1048 | ro-RO | Rumano | Rumanía | |
| 0x0419 | 1049 | ru-RU | Ruso | Rusia | |
| 0x041A | 1050 | hr-HR | Croata | Croacia | |
| 0x041B | 1051 | sk-SK | Eslovaco | Eslovaquia | |
| 0x041C | 1052 | sq-AL | Albanés | Albania | |
| 0x041D | 1053 | sv-SE | Sueco | Suecia | |
| 0x041E | 1054 | th-TH | Tailandés | Tailandia | |
| 0x041F | 1055 | tr-TR | Turco | Turquía | |
| 0x0420 | 1056 | ur-PK | Urdu | Pakistán | |
| 0x0421 | 1057 | id-ID | in-ID | Indonesio | Indonesia |
| 0x0422 | 1058 | uk-UA | Ucraniano | Ucrania | |
| 0x0423 | 1059 | be-BY | Bielorruso | Bielorrusia | |
| 0x0424 | 1060 | sl-SI | Esloveno | Eslovenia | |
| 0x0425 | 1061 | et-EE | Estonio | Estonia | |
| 0x0426 | 1062 | lv-LV | Letón | Letonia | |
| 0x0427 | 1063 | lt-LT | Lituano | Lituana | |
| 0x0428 | 1064 | tg-Cyrl-TJ | Tayiko | Tayikistán | |
| 0x0429 | 1065 | fa-IR | Persa | Irán | |
| 0x042A | 1066 | vi-VN | Vietnamita | Vietnam | |
| 0x042B | 1067 | hy-AM | Armenio | Armenia | |
| 0x042C | 1068 | az-Latn-AZ | Azerbaiyán (latín) | Azerbaiyán | |
| 0x042D | 1069 | eu-ES | Vasca | España | |
| 0x042E | 1070 | hsb-DE | wen-DE | Alto sorabo | Alemania |
| 0x042F | 1071 | mk-MK | Macedonio | Macedonia del Norte | |
| 0x0430 | 1072 | st-ZA | Sotho | Sudáfrica | |
| 0x0431 | 1073 | ts-ZA | Tsonga | Sudáfrica | |
| 0x0432 | 1074 | tn-ZA | Tswana | Sudáfrica | |
| 0x0433 | 1075 | ve-ZA | Venda | Sudáfrica | |
| 0x0434 | 1076 | xh-ZA | Xhosa | Sudáfrica | |
| 0x0435 | 1077 | zu-ZA | Zulú | Sudáfrica | |
| 0x0436 | 1078 | af-ZA | Afrikaans | Sudáfrica | |
| 0x0437 | 1079 | ka-GE | Georgiano | Georgia | |
| 0x0438 | 1080 | fo-FO | Feroés | Islas Feroe | |
| 0x0439 | 1081 | hi-IN | Hindi | India | |
| 0x043A | 1082 | mt-MT | Maltés | Malta | |
| 0x043B | 1083 | se-NO | Sami septentrional | Noruega | |
| 0x043D | 1085 | yi-001 | ji-001 | Yidis | Mundo |
| 0x043E | 1086 | ms-MY | Malayo | Malasia | |
| 0x043F | 1087 | kk-KZ | Kazajo | Kazajistán | |
| 0x0440 | 1088 | ky-KG | Kirguís | Kirguistán | |
| 0x0441 | 1089 | sw-KE | Suajili | Kenia | |
| 0x0442 | 1090 | tk-TM | Turcomano | Turkmenistán | |
| 0x0443 | 1091 | uz-Latn-UZ | Uzbeko (Latín) | Uzbekistán | |
| 0x0444 | 1092 | tt-RU | Tártaro | Rusia | |
| 0x0445 | 1093 | bn-IN | Bengalí | India | |
| 0x0446 | 1094 | pa-IN | Panyabí | India | |
| 0x0447 | 1095 | gu-IN | Gujarati | India | |
| 0x0448 | 1096 | or-IN | Odia | India | |
| 0x0449 | 1097 | ta-IN | Tamil | India | |
| 0x044A | 1098 | te-IN | Telugu | India | |
| 0x044B | 1099 | kn-IN | Canarés | India | |
| 0x044C | 1100 | ml-IN | Malayalam | India | |
| 0x044D | 1101 | as-IN | Asamés | India | |
| 0x044E | 1102 | mr-IN | Maratí | India | |
| 0x044F | 1103 | sa-IN | Sánscrito | India | |
| 0x0450 | 1104 | mn-MN | Mongol (Cirílico) | Mongolia | |
| 0x0451 | 1105 | bo-CN | Tibetano | República Popular de China | |
| 0x0452 | 1106 | cy-GB | Galés | Reino Unido | |
| 0x0453 | 1107 | km-KH | Jemer | Camboya | |
| 0x0454 | 1108 | lo-LA | Lao | R.D.P. Lao | |
| 0x0455 | 1109 | my-MM | Birmano | Myanmar | |
| 0x0456 | 1110 | gl-ES | Gallego | España | |
| 0x0457 | 1111 | kok-IN | Konkani | India | |
| 0x045A | 1114 | syr-SY | Siríaco | Siria | |
| 0x045B | 1115 | si-LK | Cingalés | Sri Lanka | |
| 0x045C | 1116 | chr-Cher-US | Cheroqui | Estados Unidos | |
| 0x045d | 1117 | iu-Cans-CA | Inuktitut (Silábico) | Canadá | |
| 0x045E | 1118 | am-ET | Amárico | Etiopía | |
| 0x045F | 1119 | tzm-Arab-MA | Tamazight del Atlas Central (Árabe) | Marruecos | |
| 0x0460 | 1120 | ks-Arab | Cachemiro | Perso-árabe | |
| 0x0461 | 1121 | ne-NP | Nepalí | Nepal | |
| 0x0462 | 1122 | fy-NL | Frisón | Países Bajos | |
| 0x0463 | 1123 | ps-AF | Pastún | Afganistán | |
| 0x0464 | 1124 | fil-PH | ti-PH | Filipino | Filipinas |
| 0x0465 | 1125 | dv-MV | Dhivehi | Maldivas | |
| 0x0467 | 1127 | ff-NG | Fula | Nigeria | |
| 0x0467 | 1127 | ff-Latn-NG | Fula (Latín) | Nigeria | |
| 0x0468 | 1128 | ha-Latn-NG | Hausa (Latín) | Nigeria | |
| 0x046A | 1130 | yo-NG | Yoruba | Nigeria | |
| 0x046B | 1131 | quz-BO | Quechua | Bolivia | |
| 0x046C | 1132 | nso-ZA | Sesotho del Norte | Sudáfrica | |
| 0x046D | 1133 | ba-RU | Baskir | Rusia | |
| 0x046E | 1134 | lb-LU | Luxemburgués | Luxemburgo | |
| 0x046F | 1135 | kl-GL | Groenlandés | Groenlandia | |
| 0x0470 | 1136 | ig-NG | Igbo | Nigeria | |
| 0x0471 | 1137 | kr-Latn-NG | Kanuri (Latín) | Nigeria | |
| 0x0472 | 1138 | om-ET | Oromo | Etiopía | |
| 0x0473 | 1139 | ti-ET | Tigriña | Etiopía | |
| 0x0474 | 1140 | gn-PY | Guaraní | Paraguay | |
| 0x0475 | 1141 | haw-US | Hawaiano | Estados Unidos | |
| 0x0476 | 1142 | la-VA | Latín | Ciudad del Vaticano | |
| 0x0477 | 1143 | so-SO | Somalí | Somalia | |
| 0x0478 | 1144 | ii-CN | Yi | República Popular de China | |
| 0x047A | 1146 | arn-CL | Mapudungun | Chile | |
| 0x047C | 1148 | moh-CA | Mohawk | Canadá | |
| 0x047E | 1150 | br-FR | Bretón | Francia | |
| 0x0480 | 1152 | ug-CN | Uigur | República Popular de China | |
| 0x0481 | 1153 | mi-NZ | Maorí | Nueva Zelanda | |
| 0x0482 | 1154 | oc-FR | Occitano | Francia | |
| 0x0483 | 1155 | co-FR | Corso | Francia | |
| 0x0484 | 1156 | gsw-FR | Alsaciano | Francia | |
| 0x0485 | 1157 | sah-RU | Yakuto | Rusia | |
| 0x0486 | 1158 | quc-Latn-GT | K'iche' | Guatemala | |
| 0x0487 | 1159 | rw-RW | Kinyarwanda | Ruanda | |
| 0x0488 | 1160 | wo-SN | Wolof | Senegal | |
| 0x048C | 1164 | prs-AF | Darí | Afganistán | |
| 0x0491 | 1169 | gd-GB | Gaélico escocés | Reino Unido | |
| 0x0492 | 1170 | ku-Arab-IQ | Kurdo central | Irak | |
| 0x0801 | 2049 | ar-IQ | Árabe | Irak | |
| 0x0803 | 2051 | ca-ES-valencia | Valenciano | España | |
| 0x0804 | 2052 | zh-CN | zh-CHS | Chino (Simplificado) | República Popular de China |
| 0x0807 | 2055 | de-CH | Alemán | Suiza | |
| 0x0809 | 2057 | en-GB | Inglés | Reino Unido | |
| 0x080A | 2058 | es-MX | Español | México | |
| 0x080C | 2060 | fr-BE | Francés | Bélgica | |
| 0x0810 | 2064 | it-CH | Italiano | Suiza | |
| 0x0813 | 2067 | nl-BE | Neerlandés | Bélgica | |
| 0x0814 | 2068 | nn-NO | no-NYN | Noruego (Nynorsk) | Noruega |
| 0x0816 | 2070 | pt-PT | Portugués | Portugal | |
| 0x0818 | 2072 | ro-MD | ro-MO | Rumano | Moldavia |
| 0x0819 | 2073 | ru-MD | ru-MO | Ruso | Moldavia |
| 0x081A | 2074 | sr-Latn-CS | Serbio (Latín) | Serbia y Montenegro (Antiguo) | |
| 0x081D | 2077 | sv-FI | Sueco | Finlandia | |
| 0x0820 | 2080 | ur-IN | Urdu | India | |
| 0x082C | 2092 | az-Cyrl-AZ | Azerí (Cirílico) | Azerbaiyán | |
| 0x082E | 2094 | dsb-DE | Bajo sorabo | Alemania | |
| 0x0832 | 2098 | tn-BW | Tswana | Botsuana | |
| 0x083B | 2107 | se-SE | Sami septentrional | Suecia | |
| 0x083C | 2108 | ga-IE | Irlandés | Irlanda | |
| 0x083E | 2110 | ms-BN | Malayo | Brunei Darussalam | |
| 0x0843 | 2115 | uz-Cyrl-UZ | Uzbeko (Cirílico) | Uzbekistán | |
| 0x0845 | 2117 | bn-BD | Bengalí | Bangladés | |
| 0x0846 | 2118 | pa-Arab-PK | Panyabí | República Islámica de Pakistán | |
| 0x0849 | 2121 | ta-LK | Tamil | Sri Lanka | |
| 0x0850 | 2128 | mn-Mong-CN | Mongol (Mongol Tradicional) | República Popular de China | |
| 0x0859 | 2137 | sd-Arab-PK | Sindhi | República Islámica de Pakistán | |
| 0x085D | 2141 | iu-Latn-CA | Inuktitut (Latín) | Canadá | |
| 0x085F | 2143 | tzm-Latn-DZ | Tamazight (Latín) | Argelia | |
| 0x0860 | 2144 | ks-Deva-IN | Cachemiro (Devanagari) | India | |
| 0x0861 | 2145 | ne-IN | Nepalí | India | |
| 0x0867 | 2151 | ff-Latn-SN | Fula | Senegal | |
| 0x086B | 2155 | quz-EC | Quechua | Ecuador | |
| 0x0873 | 2163 | ti-ER | Tigriña | Eritrea | |
| 0x0c01 | 3073 | ar-EG | Árabe | Egipto | |
| 0x0C04 | 3076 | zh-HK | Chino (Tradicional) | Hong Kong | |
| 0x0C07 | 3079 | de-AT | Alemán | Austria | |
| 0x0C09 | 3081 | en-AU | Inglés | Australia | |
| 0x0c0A | 3082 | es-ES | Español | España | |
| 0x0c0C | 3084 | fr-CA | Francés | Canadá | |
| 0x0C1A | 3098 | sr-Cyrl-CS | Serbio (Cirílico) | Serbia y Montenegro (Antiguo) | |
| 0x0C3B | 3131 | se-FI | Sami septentrional | Finlandia | |
| 0x0C50 | 3152 | mn-Mong-MN | Mongol (Mongol Tradicional) | Mongolia | |
| 0x0C51 | 3153 | dz-BT | Dzongkha | Bután | |
| 0x0C6B | 3179 | quz-PE | Quechua | Perú | |
| 0x1001 | 4097 | ar-LY | Árabe | Libia | |
| 0x1004 | 4100 | zh-SG | Chino (Simplificado) | Singapur | |
| 0x1007 | 4103 | de-LU | Alemán | Luxemburgo | |
| 0x1009 | 4105 | en-CA | Inglés | Canadá | |
| 0x100A | 4106 | es-GT | Español | Guatemala | |
| 0x100C | 4108 | fr-CH | Francés | Suiza | |
| 0x101A | 4122 | hr-BA | Croata (Latín) | Bosnia y Herzegovina | |
| 0x103B | 4155 | smj-NO | Sami de Lule | Noruega | |
| 0x1401 | 5121 | ar-DZ | Árabe | Argelia | |
| 0x1404 | 5124 | zh-MO | Chino (Tradicional) | Macao | |
| 0x1407 | 5127 | de-LI | Alemán | Liechtenstein | |
| 0x1409 | 5129 | en-NZ | Inglés | Nueva Zelanda | |
| 0x140A | 5130 | es-CR | Español | Costa Rica | |
| 0x140C | 5132 | fr-LU | Francés | Luxemburgo | |
| 0x141A | 5146 | bs-Latn-BA | Bosnio (Latín) | Bosnia y Herzegovina | |
| 0x143B | 5179 | smj-SE | Sami de Lule | Suecia | |
| 0x1801 | 6145 | ar-MA | Árabe | Marruecos | |
| 0x1809 | 6153 | en-IE | Inglés | Irlanda | |
| 0x180A | 6154 | es-PA | Español | Panamá | |
| 0x180C | 6156 | fr-MC | Francés | Principado de Mónaco | |
| 0x181A | 6170 | sr-Latn-BA | Serbio (Latín) | Bosnia y Herzegovina | |
| 0x183B | 6203 | sma-NO | Sami meridional | Noruega | |
| 0x1C01 | 7169 | ar-TN | Árabe | Túnez | |
| 0x1C09 | 7177 | en-ZA | Inglés | Sudáfrica | |
| 0x1c0A | 7178 | es-DO | Español | República Dominicana | |
| 0x1C0C | 7180 | fr-029 | Francés | Caribe | |
| 0x1C1A | 7194 | sr-Cyrl-BA | Serbio (Cirílico) | Bosnia y Herzegovina | |
| 0x1C3B | 7227 | sma-SE | Sami meridional | Suecia | |
| 0x2001 | 8193 | ar-OM | Árabe | Omán | |
| 0x2009 | 8201 | en-JM | Inglés | Jamaica | |
| 0x200A | 8202 | es-VE | Español | República Bolivariana de Venezuela | |
| 0x200C | 8204 | fr-RE | Francés | Reunión | |
| 0x201A | 8218 | bs-Cyrl-BA | Bosnio (Cirílico) | Bosnia y Herzegovina | |
| 0x203B | 8251 | sms-FI | Sami skolt | Finlandia | |
| 0x2401 | 9217 | ar-YE | Árabe | Yemen | |
| 0x2409 | 9225 | en-029 | Inglés | Caribe | |
| 0x240A | 9226 | es-CO | Español | Colombia | |
| 0x240C | 9228 | fr-CD | Francés | República Democrática del Congo | |
| 0x241A | 9242 | sr-Latn-RS | Serbio (Latín) | Serbia | |
| 0x243B | 9275 | smn-FI | Sami de Inari | Finlandia | |
| 0x2801 | 10241 | ar-SY | Árabe | Siria | |
| 0x2809 | 10249 | en-BZ | Inglés | Belice | |
| 0x280A | 10250 | es-PE | Español | Perú | |
| 0x280C | 10252 | fr-SN | Francés | Senegal | |
| 0x281A | 10266 | sr-Cyrl-RS | Serbio (Cirílico) | Serbia | |
| 0x2C01 | 11265 | ar-JO | Árabe | Jordania | |
| 0x2c09 | 11273 | en-TT | Inglés | Trinidad y Tobago | |
| 0x2C0A | 11274 | es-AR | Español | Argentina | |
| 0x2c0C | 11276 | fr-CM | Francés | Camerún | |
| 0x2c1A | 11290 | sr-Latn-ME | Serbio (Latín) | Montenegro | |
| 0x3001 | 12289 | ar-LB | Árabe | Líbano | |
| 0x3009 | 12297 | en-ZW | Inglés | Zimbabue | |
| 0x300A | 12298 | es-EC | Español | Ecuador | |
| 0x300C | 12300 | fr-CI | Francés | Costa de Marfil | |
| 0x301A | 12314 | sr-Cyrl-ME | Serbio (Cirílico) | Montenegro | |
| 0x3401 | 13313 | ar-KW | Árabe | Kuwait | |
| 0x3409 | 13321 | en-PH | Inglés | República de Filipinas | |
| 0x340A | 13322 | es-CL | Español | Chile | |
| 0x340C | 13324 | fr-ML | Francés | Malí | |
| 0x3801 | 14337 | ar-AE | Árabe | Emiratos Árabes Unidos | |
| 0x380A | 14346 | es-UY | Español | Uruguay | |
| 0x380C | 14348 | fr-MA | Francés | Marruecos | |
| 0x3C01 | 15361 | ar-BH | Árabe | Bahrein | |
| 0x3C09 | 15369 | en-HK | Inglés | Hong Kong | |
| 0x3C0A | 15370 | es-PY | Español | Paraguay | |
| 0x3c0C | 15372 | fr-HT | Francés | Haití | |
| 0x4001 | 16385 | ar-QA | Árabe | Catar | |
| 0x4009 | 16393 | en-IN | Inglés | India | |
| 0x400A | 16394 | es-BO | Español | Bolivia | |
| 0x4409 | 17417 | en-MY | Inglés | Malasia | |
| 0x440A | 17418 | es-SV | Español | El Salvador | |
| 0x4809 | 18441 | en-SG | Inglés | Singapur | |
| 0x480A | 18442 | es-HN | Español | Honduras | |
| 0x4C09 | 19465 | en-AE | Inglés | Emiratos Árabes Unidos | |
| 0x4C0A | 19466 | es-NI | Español | Nicaragua | |
| 0x500A | 20490 | es-PR | Español | Puerto Rico | |
| 0x540A | 21514 | es-US | Español | Estados Unidos | |
| 0x580A | 22538 | es-419 | Español | América Latina | |
| 0x5c0A | 23562 | es-CU | Español | Cuba |
Le asistimos con IIS y su código ASP Classic.
Póngase en contacto con nuestro equipo.
NOTA : Sus cambios se aplicarán desde la página siguiente que visitará/cargará.
Al usar este sitio, usted acepta que usemos estadísticas anónimas para analizar nuestro tráfico y mejorar su experiencia de navegación en nuestro sitio, además de tecnologías y cookies para personalizar el contenido. Esta información anónima se puede compartir con nuestros socios de redes sociales y de análisis de confianza.