Informe Intl de CreepJS: campos y valores ausentes
Relaciona los campos Intl de CreepJS con sus entradas, locales y errores, sin convertir diferencias de formato en identidad ni en un veredicto de modificación.
BotBrowser Team
Quieres la documentación estructurada de Huella digital?
Este artículo forma parte de la biblioteca editorial. Para pasos de configuración, material de referencia y actualizaciones continuas, entra en la sección de docs.
Un informe Intl de CreepJS combina muestras formateadas, una lista condensada de locales y una evaluación heredada. Esos valores tienen orígenes diferentes: una línea ausente no implica necesariamente una API no disponible, y una frase distinta no constituye por sí sola un hallazgo de modificación. BotBrowser permite configurar zona horaria, locale e idiomas; no garantiza una clasificación concreta de CreepJS ni resultados idénticos de datos regionales entre compilaciones. La interpretación empieza por la llamada que produjo cada campo, incluidas sus opciones y su ruta de error.
TL;DR
- El colector Intl fijado devuelve seis muestras de formato y una cadena de locales. No ejecuta siete copias de la misma prueba regional.
- La recogida de locales usa constructores sin argumentos, omite excepciones y elimina duplicados. La cadena pierde la relación entre constructores y locales.
DisplayNamesnecesita opciones. Su intento sin argumentos puede omitirse aunque funcione la muestra de nombre configurada por separado.- Los errores de cada callback se convierten en
undefined; un fallo exterior del colector y la condiciónhtmlElementVersiondel renderizador siguen rutas distintas. liedconsume reservas existentes sobreresolvedOptions. No se calcula comparando las seis cadenas con un dispositivo de referencia.
Contents
- Siete valores y seis llamadas de formato
- Locales de constructores y procedencia perdida
- Muestras ausentes y condición del renderizador
- Reservas heredadas y texto formateado
- Matriz de decisiones para comparar informes
- Un registro mínimo ligado al código fuente
- Preguntas frecuentes sobre el informe Intl
- Conclusión práctica
Siete valores y seis llamadas de formato
La revisión 10aa6724cd33a1015db1574211890518cd04f0cc de CreepJS define el colector pertinente en src/intl/index.ts. El objeto devuelto contiene dateTimeFormat, displayNames, listFormat, numberFormat, pluralRules, relativeTimeFormat, locale y lied. Los primeros seis son resultados formateados. El séptimo valor visible, locale, procede de otro bucle de constructores. La evaluación es una propiedad adicional, no una octava frase formateada. Mantener estas categorías impide confundir una etiqueta del informe con la propia llamada de API. La comparación de campos de zona horaria de CreepJS separa el identificador resuelto de la reducción histórica de candidatos y de dos rutas de desfase de la fecha actual; esos productores de zona horaria son distintos de estas muestras formateadas de Intl.
La muestra de fecha formatea la marca temporal numérica fija 963644400000, solicitando mes largo y nombre largo de zona horaria. No especifica locale ni zona explícitos. La marca es una entrada elegida por el código, no la hora en que el visitante abrió el detector. MDN documenta que DateTimeFormat.format() acepta una fecha o una marca temporal y que el formato puede variar entre implementaciones. Por eso, una etiqueta de mes o zona necesita su contexto de formateador antes de sustentar una comparación.
La muestra de nombre usa new Intl.DisplayNames(undefined, { type: 'language' }).of('en-US'). Aquí en-US es la etiqueta del idioma cuyo nombre se solicita; no es el locale solicitado explícitamente para el idioma de salida. El primer argumento es undefined, por lo que se mantiene la resolución predeterminada. Un nombre traducido del inglés no debe convertirse en el idioma preferido declarado por el visitante. El idioma de entrada y el de salida ocupan posiciones diferentes en esta llamada.
La muestra de lista formatea las dos cadenas ['0', '1'] con style: 'long' y type: 'disjunction'. La muestra numérica formatea 21000000 con notación compacta y presentación compacta larga. Esas opciones seleccionan deliberadamente expresiones dependientes del idioma. Un cambio de conjunción, abreviatura o espaciado puede proceder de los datos de formato, sin cambiar la entrada numérica. La tabla distingue las opciones y tipos de entrada que generan la puntuación de listas y las expresiones numéricas compactas.
| Campo devuelto | Llamada o entrada fija del código | Información conservada |
|---|---|---|
dateTimeFormat | 963644400000; mes y nombre de zona largos | Muestra de fecha con locale y zona predeterminados |
displayNames | type: 'language'; .of('en-US') | Nombre localizado de esa etiqueta de idioma |
listFormat | ['0', '1']; disyunción larga | Lista de dos elementos formateada |
numberFormat | 21000000; notación compacta, presentación larga | Muestra de número compacto |
pluralRules | .select(1) con opciones predeterminadas | Etiqueta de categoría plural, no un número formateado |
relativeTimeFormat | 1, 'year'; best-fit, expresión numérica automática, estilo largo | Frase de tiempo relativo |
locale | Lecturas satisfactorias de resolvedOptions().locale de constructores | Cadena deduplicada sin etiquetas de constructor |
PluralRules().select(1) devuelve una categoría asociada al número proporcionado, mientras que RelativeTimeFormat(...).format(1, 'year') produce una expresión relativa dependiente del idioma. Ninguna lee el año actual de un reloj. La opción explícita numeric: 'auto' permite una frase léxica cuando el locale dispone de ella; no exige expresar el resultado con un dígito en todos los locales. La guía de formato Intl cubre la selección regional y los mecanismos alternativos de las aplicaciones, una tarea distinta de rastrear estos campos del detector.
Locales de constructores y procedencia perdida
La función getLocale intenta siete constructores en orden: Collator, DateTimeFormat, DisplayNames, ListFormat, NumberFormat, PluralRules y RelativeTimeFormat. Cada intento llama al constructor sin argumentos, lee resolvedOptions().locale y añade el valor si completa la secuencia. Un try/catch rodea cada intento. Una excepción devuelve la lista acumulada sin cambios; no añade un marcador de fallo identificado. Después, el colector elimina duplicados mediante Set.
Esta operación no genera una tabla de diagnóstico por constructor. Como caso hipotético, varios constructores satisfactorios pueden resolver al mismo locale. El resultado deduplicado contiene ese locale una vez, con independencia del número de constructores que lo produjeron. Si dos resuelven de manera diferente, mantiene los valores distintos en orden de inserción, pero no la asociación entre un constructor concreto y su valor. Después '' + locale convierte el array en cadena. Son transformaciones definidas por el código, no una captura observada del navegador.
DisplayNames muestra una diferencia concreta entre requisitos del constructor y capacidad. MDN especifica un argumento options obligatorio con un type. La construcción sin argumentos puede lanzar una excepción incluso en una implementación que admita Intl.DisplayNames correctamente configurado. La función omite ese intento. En cambio, la muestra displayNames independiente proporciona type: 'language'. Que esa muestra funcione es compatible con que la función de locales omita el constructor: las llamadas no plantean la misma pregunta.
Collator presenta la asimetría inversa. Participa en el bucle de locales, pero las seis muestras no incluyen ninguna comparación de ordenación. Su presencia en la descripción emergente del renderizador no significa que el módulo haya ordenado o comparado dos cadenas. El código permite establecer que solicitó su locale resuelto; evaluar la precisión o el orden de colación exigiría otra operación. Esta distinción evita convertir la descripción emergente en un inventario de pruebas inexistentes.
La cadena agregada de locales también difiere de navigator.languages y del encabezado HTTP Accept-Language. Ninguno aparece como entrada del bucle de locales de este colector. Pueden importar en una investigación más amplia, pero sus valores no se recuperan desglosando la línea de locales de CreepJS separada por comas. El análisis de zona horaria, locale e idiomas separa esos ajustes y puntos de observación; no convierte sus representaciones diferentes en una regla de igualdad universal.
Muestras ausentes y condición del renderizador
Cada callback de formato está envuelto en la función compartida caniuse. En el src/errors/index.ts inspeccionado, una excepción del callback devuelve undefined. Las llamadas Intl usan ese formato de callback sin recorrer después una cadena de propiedades. Un constructor no disponible, una opción rechazada o una excepción de formato pueden desembocar en el mismo valor de muestra ausente. La función no adjunta la categoría de excepción a ese valor. Su ausencia no distingue por sí sola esas posibles causas.
La función exterior getIntl() tiene su propio try/catch. Si un error alcanza ese ámbito exterior, el módulo registra una prueba no satisfactoria, llama a la función de captura de errores y no devuelve resultado del módulo. Es distinto de que falle una sola muestra mientras existe el resto del objeto. A la inversa, alcanzar el registro passed: true no afirma que todas las muestras tengan valor: los errores de callbacks pueden haberse convertido ya en undefined dentro de una ruta exterior satisfactoria.
El renderizado añade otra capa. En la revisión fijada, intlHTML(fp) comprueba !fp.htmlElementVersion antes de la ruta normal de visualización Intl. La condición nombra el informe de elementos HTML, no fp.intl. Si se cumple, devuelve la tarjeta Intl con anotaciones de bloqueo. Es una propiedad del código inspeccionado, no una afirmación de fallo Intl en un navegador real. Una tarjeta bloqueada con apariencia Intl no demuestra, solo por su etiqueta, que falte un constructor concreto de internacionalización.
Si la condición permite la ruta normal, el renderizador desestructura fp.intl || {} y une locale y muestras mediante <br>. Un valor individual ausente puede ocupar una posición vacía en esa cadena. El orden visual es locale, fecha, nombre, número, tiempo relativo, lista y categoría plural; no coincide con el orden de propiedades del objeto devuelto. Contar líneas visibles sin comprobar el orden del código puede asignar una frase al formateador equivocado.
| Estado del código | Resultado en esa capa | Explicación no sustentada que debe evitarse |
|---|---|---|
| Un callback de muestra lanza una excepción | La muestra se convierte en undefined | Identificar una excepción concreta a partir del vacío |
| Falla un constructor sin argumentos | La acumulación de locales omite ese intento | Declarar que el constructor entero no está disponible |
| El colector exterior captura un error | No se devuelve informe del módulo | Dar por probado que todas las muestras se ejecutaron y fallaron |
htmlElementVersion está ausente o es falso en contexto booleano | El renderizador elige la tarjeta bloqueada | Atribuir directamente la condición a la capacidad Intl |
| El renderizado normal recibe una muestra ausente | La presentación unida puede contener un hueco | Sustituirlo por una frase localizada inventada |
Estos casos sustentan una secuencia concreta de diagnóstico: localizar la rama del renderizador, determinar si existe un objeto Intl e identificar el callback si falta solo un valor. Ese orden evita diagnosticar una API a partir de una alternativa de presentación. También distingue en los registros de soporte «campo ausente», «módulo ausente» y «rama de tarjeta bloqueada»: representan pruebas diferentes aunque la interfaz los haga parecer similares. No se afirma ninguna ejecución de navegador para estos casos derivados del código.
Reservas heredadas y texto formateado
El colector Intl inicializa lied leyendo siete claves de lieProps terminadas en .resolvedOptions, una por constructor mencionado. El operador JavaScript || conserva el primer operando verdadero en contexto booleano; la expresión cae en false si ninguno lo es. No es un bucle que formatea seis cadenas y las compara con frases de referencia almacenadas. El código que produce las muestras no convierte después un mes, una expresión compacta o una categoría plural distintos en un hallazgo local lied.
Esto importa al comparar una insignia o advertencia visible con el texto mostrado. Como caso hipotético, dos informes podrían contener cadenas distintas sin ninguna reserva heredada verdadera. Otro caso podría conservar las mismas frases pero heredar una reserva sobre un método resolvedOptions. Ninguno es un resultado medido aquí. Ilustran por qué los datos formateados y la evaluación de integridad deben seguir siendo campos separados, en lugar de inferirse mutuamente.
La cobertura de productores debe comprobarse al margen de los nombres del consumidor. El src/lies/index.ts inspeccionado registra explícitamente Intl.DateTimeFormat con objetivos que incluyen format, formatRange, formatToParts y resolvedOptions. También registra explícitamente Intl.RelativeTimeFormat con resolvedOptions. Esos dos registros no convierten la lista de siete claves del consumidor en prueba de siete verificaciones equivalentes del productor. La afirmación se limita a los registros inspeccionados; no audita toda posible modificación en otras partes del proyecto.
| Capa del código | Prueba concreta | Límite interpretativo |
|---|---|---|
| Consumidor Intl | Siete claves .resolvedOptions unidas mediante OR | Nombres que pueden influir en lied, no cantidad de pruebas |
| Registro DateTimeFormat | Cuatro objetivos nombrados, incluido resolvedOptions | Solicitud explícita de búsqueda en esta revisión |
| Registro RelativeTimeFormat | Objetivo resolvedOptions | Otra solicitud explícita de búsqueda |
| Callbacks de formato | Entradas y opciones fijas | Valores formateados sin veredicto local por cadena de referencia |
| Renderizador | El valor booleano decide el estilo de rechazo | Presentación de una reserva registrada, no una probabilidad |
El renderizador vuelve a usar el valor booleano para la clase de rechazo y el estilo de la insignia. Una condición separada LowerEntropy.TIME_ZONE puede afectar al estilo cuando no se selecciona la reserva heredada. Una insignia coloreada necesita, por tanto, la condición que la origina. No es un porcentaje documentado de confianza ni un diagnóstico del ajuste que deba cambiar. Revisión, clave de reserva y capa del informe aportan más información que el color.
Matriz de decisiones para comparar informes
La primera comparación debe identificar qué cambió. Una frase de fecha distinta, otro agregado regional, un callback ausente y una reserva heredada verdadera son cuatro hallazgos diferentes. Una captura puede ocultar esas diferencias, especialmente si el bucle ya eliminó duplicados. Antes de atribuir un cambio a un ajuste del navegador, conservar el nombre del campo y la revisión exacta que define sus entradas y transformaciones.
| Diferencia investigada | Contexto necesario | Acción siguiente acotada |
|---|---|---|
| Cambia la frase de fecha | Marca fija, opciones de mes/zona, locale y zona predeterminados | Comparar configuración antes de inferir una ubicación |
| Cambia la expresión numérica compacta | 21000000, notación compacta, presentación larga y datos regionales | Comprobar opciones y revisión de ejecución equivalentes |
| El agregado tiene menos valores distintos | Rutas satisfactorias y deduplicación de constructores | Inspeccionar resultados individuales, sin adivinar una API omitida |
| Solo falta el nombre localizado | Llamada configurada type: 'language' | Distinguir fallo del callback e intento regional sin argumentos |
| Coinciden las muestras pero difiere el estilo de reserva | Clave heredada real y condición visual | Inspeccionar la reserva registrada, no el texto |
| Toda la tarjeta muestra bloqueo | Condición htmlElementVersion y presencia del objeto Intl | Identificar primero la rama visual seleccionada |
Para comparar fechas, cambiar solo la zona del navegador no equivale a cambiar la marca temporal numérica. El código fija esta última y deja la primera como predeterminada. El registro no debe denominar a la frase resultante valor capturado del reloj. Si una revisión posterior proporciona zona explícita, cambia el contrato de comparación aunque la interfaz siga llamando fecha a esa línea.
Al comparar listas y números, conservar las cadenas en su nivel correcto. La lista contiene las cadenas 0 y 1; la muestra numérica contiene el número 21000000. Sustituir ambas por un campo genérico de «formato numérico» borra la diferencia entre puntuación de lista y notación numérica. Las diferencias exactas pueden justificar revisar datos regionales, pero una presentación normalizada para una aplicación no demuestra que coincidiera la salida original del detector.
En el agregado regional, una cadena más corta no constituye automáticamente una regresión. La deduplicación puede reducir varias resoluciones satisfactorias a una entrada, mientras las excepciones pueden excluir intentos de constructores. Cada ruta necesita pruebas posteriores diferentes. Si no se conservó la procedencia individual, el agregado final no puede reconstruirla. Adivinar la asociación entre un locale y uno de los siete constructores añadiría información que el informe ya no contiene.
Un registro mínimo ligado al código fuente
Un registro de soporte puede conservar la utilidad de la comparación sin exportar el resultado completo ni un resumen estable de identidad. Los campos propuestos incluyen sourceRevision, reportField, constructor, fixedInput, options, collectionState y displayBranch. Si se investiga una reserva heredada, conservar su clave y la capa que la proporcionó. Son campos de diagnóstico propuestos, no una afirmación de que CreepJS devuelva un objeto con ese esquema.
Las opciones de fecha deben distinguir zona omitida y zona elegida explícitamente. La muestra de nombre debe conservar type: 'language', no solo el constructor. Un registro del bucle regional debe identificar un intento omitido, en vez de inventar un locale para él. Estas diferencias son entradas concretas de la matriz; no requieren recoger encabezados ajenos al problema, texto de página ni el historial geográfico de una persona.
La documentación de BotBrowser describe --bot-timezone, --bot-locale y --bot-languages como controles separados, con valores automáticos y sustituciones explícitas. La documentación del producto sustenta esas afirmaciones; CreepJS y MDN no documentan el comportamiento de BotBrowser. Un ajuste puede definir la configuración deseada sin demostrar datos idénticos entre versiones, una ubicación real ni aceptación por un servicio externo. El color de una advertencia no basta para recomendar cambiarlo.
Cuando un registro observado carece del campo pertinente, la conclusión restante debe ser limitada. Sin relación de constructores no hay conclusión regional individual; una muestra vacía no identifica su excepción; una reserva sin clave no localiza el método afectado. La solución práctica es obtener la entrada mínima que falta en la comparación. Reemplazar esos desconocidos por una etiqueta de dispositivo haría el informe más categórico y su explicación menos precisa.
Preguntas frecuentes sobre el informe Intl
¿La línea de fecha muestra cuándo se ejecutó el detector?
El código proporciona la marca temporal fija 963644400000. El instante de recogida es otro registro. Las opciones de mes y zona largos formatean esa entrada histórica según el contexto; una frase localizada no convierte el número fijo en una medición del reloj actual.
¿Por qué puede faltar un DisplayNames compatible en la recogida regional?
La función regional no proporciona opciones, mientras que la muestra del nombre añade type: 'language'. Los requisitos documentados por MDN explican las rutas distintas. La función captura la excepción del constructor y omite ese intento en su acumulación.
¿Una entrada regional significa que solo funcionó un constructor?
No. Set elimina valores regionales satisfactorios repetidos antes de convertirlos en cadena. Varios constructores pueden aportar el mismo valor. El agregado no conserva una cantidad de constructores satisfactorios ni una tabla que asigne cada uno a su locale.
¿lied significa que el texto falló una comparación de referencia?
El colector fijado consume reservas existentes mediante siete claves. Sus callbacks producen valores sin comparar localmente con una frase esperada. Interpretar una reserva exige conocer su procedencia; el texto mostrado por sí solo no recupera el hallazgo de integridad original.
¿Una tarjeta Intl bloqueada demuestra que Intl está desactivado?
La rama inspeccionada comprueba htmlElementVersion. La anotación de bloqueo no basta para identificar un fallo de internacionalización. Objeto Intl, estados individuales de callbacks y rama elegida deben inspeccionarse por separado antes de asignar una explicación de API.
¿Un resultado regional establece el país físico del visitante?
Un locale resuelto describe la selección del servicio de internacionalización, no una medición de ubicación. No sustituye preferencias, ciudadanía ni país actual. La cadena no contiene una posición obtenida con consentimiento ni el contexto necesario para esa inferencia.
Fuentes
- CreepJS: colector y renderizador Intl fijados
- CreepJS: funciones de error fijadas
- CreepJS: registros de integridad fijados
- ECMA-402: servicios de internacionalización
- MDN: constructor Intl.DisplayNames
- MDN: DateTimeFormat.format
- MDN: ListFormat.format
- MDN: NumberFormat.format
- MDN: PluralRules.select
- MDN: RelativeTimeFormat.format
- BotBrowser: zona horaria, locale e idiomas
Conclusión práctica
Un informe Intl se puede interpretar cuando cada valor permanece ligado a su constructor, entrada fija, opciones y ruta de error. Separar el agregado regional deduplicado de las seis muestras; rastrear las claves heredadas y la condición real del renderizador antes de interpretar huecos o estilos. Si falta ese contexto, obtener el campo ausente en vez de asignar una identidad de dispositivo o cambiar la configuración por una etiqueta.
Este artículo forma parte de la guía: ¿Qué es la huella digital del navegador?
Artículos Relacionados
Señales Math de CreepJS: leer los campos
Huella digitalCreepJS: informe de zona horaria y desfases
Huella digitalInformes de audio CreepJS: renderizado y valores ausentes
Huella digitalInforme WebGL de CreepJS: contextos y señales
PlataformaDatos de región de Intl y formato web portátil
IdentidadZona horaria, locale e idioma en las API del navegador
Lleva BotBrowser de la investigación a producción
Usa estas guías para entender el modelo y después avanzar hacia validación multiplataforma, contextos aislados y despliegue de navegador preparado para escalar.