Analizzi Accept-Language e ordini le preferenze locali
Accept-Language sembra semplice, ma interpretarlo correttamente richiede più che dividere una stringa sulle virgole.
Esegui gratis nel browser
Ogni intervallo linguistico può avere un valore di qualità, gli elementi con lo stesso peso devono conservare l’ordine originario e le etichette malformate vanno rifiutate prima della negoziazione dei contenuti. Questo analizzatore trasforma un valore di intestazione in un elenco prevedibile di preferenze locali. Normalizza le maiuscole di lingua, scrittura e regione, mantiene i caratteri jolly, convalida la qualità e restituisce i risultati in ordine decrescente per instradamento, test, registri o selezione della lingua.
Trasformi l’intestazione in preferenze esplicite
Un’intestazione Accept-Language esprime più scelte in poco testo. Un browser può inviare prima una variante regionale, poi una lingua più generale e infine un carattere jolly come ultima alternativa. Leggere direttamente il valore nel codice di instradamento favorisce duplicazioni e comportamenti incoerenti nei casi limite. L’analizzatore produce un array di preferenze in cui ogni record contiene una località e un valore numerico di qualità. Le voci prive di qualità esplicita ricevono il valore standard 1. L’elenco viene ordinato dalla qualità più alta alla più bassa, mentre gli elementi con lo stesso peso mantengono la posizione indicata dal mittente. Questa stabilità è importante perché, a parità di peso, la posizione resta l’unico segnale di preferenza. Anche le maiuscole vengono normalizzate: lingue in minuscolo, regioni di due lettere in maiuscolo e scritture di quattro lettere con iniziale maiuscola. L’asterisco rimane invariato affinché l’applicazione riconosca un’alternativa generale senza scambiarla per una località specifica.
Rifiuti subito dati ambigui o malformati
L’intestazione proviene normalmente da un client e attraversa quindi un confine di fiducia. Una correzione silenziosa può trasformare un refuso in una lingua inattesa; l’analizzatore rifiuta perciò l’input invece di indovinarne il significato. Un intervallo deve iniziare con un subtag alfabetico e può continuare con subtag alfanumerici separati da trattini. Non sono validi trattini bassi, spazi interni, subtag vuoti e punteggiatura. L’unico carattere jolly ammesso è un asterisco usato come intervallo completo. Il parametro di qualità deve usare q e un valore da 0 a 1, con non più di tre cifre decimali; valori maggiori, negativi, parametri ignoti o punti e virgola ripetuti causano un errore. Sono respinte anche le voci vuote tra virgole. Il limite dichiarato mantiene finita l’elaborazione. In questo modo gli errori emergono al confine dell’API e un’intestazione letta solo in parte non seleziona contenuti mai richiesti dal client.
Applichi il risultato alla negoziazione locale
L’output ordinato è un ingresso pulito per la politica di corrispondenza dell’applicazione. Scorra le preferenze e confronti ogni località con le traduzioni disponibili. Può cercare prima la variante regionale esatta, poi ridurre fr-CA alla lingua di base e infine usare il carattere jolly o il valore predefinito del prodotto. L’analizzatore non impone tale politica: località supportate, regole di ripiego e gestione della qualità zero dipendono dall’applicazione. Separare analisi e selezione rende il comportamento facile da testare e riutilizzare in gateway, pagine renderizzate dal server, API e pipeline analitiche. Se una persona riceve la lingua sbagliata, i registri possono conservare l’elenco strutturato invece di un’intestazione opaca, agevolando la diagnosi. Per l’automazione ogni richiesta costa $0.002. La versione nel browser esegue localmente la stessa logica deterministica, così Lei può esaminare le intestazioni senza inviarne altrove il contenuto.
Casi d'uso
Scelga contenuti localizzati
Converta l’intestazione del browser in candidati ordinati prima di confrontarli con le località supportate dal sito.
Verifichi client e proxy
Controlli che browser, SDK o gateway invii gli intervalli linguistici e i pesi previsti.
Normalizzi i registri delle richieste
Conservi preferenze strutturate per cercare e confrontare in modo uniforme gli incidenti di instradamento linguistico.
Domande frequenti
Che cosa viene restituito?
Il risultato contiene un array di preferenze ordinato per qualità decrescente. Ogni voce include una località normalizzata e una qualità numerica.
Che cosa accade se q viene omesso?
La voce riceve qualità 1, cioè la preferenza massima standard.
Le voci con la stessa qualità vengono riordinate?
No. Conservano l’ordine relativo originario.
L’analizzatore sceglie una località supportata?
No. Analizza e ordina l’intestazione; l’applicazione decide corrispondenze esatte, ripieghi e località predefinita.
Quali valori malformati causano un errore?
Per esempio etichette con trattini bassi o subtag vuoti, voci bianche, parametri ignoti e qualità fuori dall’intervallo da 0 a 1 o con più di tre decimali.
Quanto costa una richiesta API?
Ogni richiesta API costa $0.002. Lo strumento deterministico può anche essere eseguito localmente in questa pagina.
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo stack
curl -X POST https://api.kit.forhosting.com/web/accept-language-parse \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"en-US,en;q=0.9,fr-CA;q=0.7,*;q=0.1"}'const res = await fetch("https://api.kit.forhosting.com/web/accept-language-parse", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "en-US,en;q=0.9,fr-CA;q=0.7,*;q=0.1"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/accept-language-parse",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "en-US,en;q=0.9,fr-CA;q=0.7,*;q=0.1"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/accept-language-parse", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"en-US,en;q=0.9,fr-CA;q=0.7,*;q=0.1"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"en-US,en;q=0.9,fr-CA;q=0.7,*;q=0.1"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/accept-language-parse", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Esempio di richiesta
{
"text": "en-US,en;q=0.9,fr-CA;q=0.7,*;q=0.1"
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.accept_language_parse",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Limiti
max_chars | 8192 |
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |