Sintassi dei Messaggi
Questa pagina è stata tradotta da PageTurner AI (beta). Non ufficialmente approvata dal progetto. Hai trovato un errore? Segnala problema →
Quando si traduce un testo, è necessario fornire ai traduttori un modo per esprimere le sfumature di ortografia, grammatica e coniugazione proprie di ciascuna lingua. Utilizziamo la sintassi dei messaggi ICU, adottata anche in Java e PHP.
La libreria intl-messageformat prende il messaggio e i dati di input per generare una stringa formattata correttamente. Questa funzionalità è inclusa in tutte le integrazioni che forniamo.
Le sezioni seguenti descrivono la sintassi dei messaggi ICU e mostrano come utilizzare queste funzionalità tramite le librerie FormatJS:
Principi Fondamentali
La trasformazione più semplice per un messaggio è una stringa letterale.
Hello everyone
Tutte le altre trasformazioni avvengono tramite sostituzioni dette "argomenti". Sono racchiusi tra parentesi graffe ({ e }) e fanno riferimento a un valore nei dati di input.
Argomento Semplice
È possibile utilizzare un argomento {key} per inserire un valore nel messaggio. La chiave viene cercata nei dati di input e la stringa viene interpolata con il suo valore.
Argomento Formattato
I valori possono anche essere formattati in base al loro tipo. A questo scopo si utilizza un argomento {key, type, format}.
Gli elementi dell'argomento sono:
-
keyindica dove trovare il dato nei dati di input -
typeè opzionale e definisce come interpretare il valore (vedi sotto) -
formatè opzionale e rappresenta un ulteriore raffinamento per la visualizzazione di quel tipo di dato
Tipo number
Questo tipo formatta i numeri in modo sensibile alla localizzazione. Comprende i seguenti valori per l'elemento opzionale format dell'argomento:
Internamente utilizza l'API Intl.NumberFormat. È possibile definire valori personalizzati per l'elemento format, che vengono passati al costruttore di Intl.NumberFormat.
A volte includere la formattazione del numero fornisce un ottimo contesto ai traduttori. Supportiamo anche gli schemi numerici ICU con la stessa sintassi:
Maggiori informazioni sono disponibili qui.
Per un controllo preciso sulla precisione decimale, è possibile utilizzare i simboli di precisione frazionaria # e 0, che specificano il numero di decimali da visualizzare:
Nota: il simbolo # non visualizza gli zeri finali, come mostrato in questo esempio:
Per visualizzare gli zeri finali, utilizzare il simbolo 0:
Per maggiori dettagli, consultare Precisione Frazionaria.
Tipo date
Questo tipo formatta le date in modo sensibile alla localizzazione. Comprende i seguenti valori per l'elemento opzionale format dell'argomento:
-
shortformatta le date nel modo più breve possibile -
mediumformatta le date con una rappresentazione testuale abbreviata del mese -
longformatta le date con una rappresentazione testuale estesa del mese -
fullformatta le date con il massimo livello di dettaglio
Internamente utilizza l'API Intl.DateTimeFormat. È possibile definire valori personalizzati per l'elemento format, che vengono passati al costruttore di Intl.DateTimeFormat.
Tipo time
Questo tipo formatta gli orari in modo sensibile alla localizzazione. Comprende i seguenti valori per l'elemento opzionale format dell'argomento:
-
shortformatta l'orario con ore e minuti -
mediumformatta l'orario con ore, minuti e secondi -
longformatta l'orario con ore, minuti, secondi e fuso orario -
fullequivalente a long
Internamente utilizza l'API Intl.DateTimeFormat. È possibile definire valori personalizzati per l'elemento format, che vengono passati al costruttore di Intl.DateTimeFormat.
Scheletri DateTime supportati
Analogamente al tipo number, supportiamo anche gli scheletri ICU per DateTime. ICU offre un'ampia gamma di pattern per personalizzare il formato data-ora. Tuttavia, non tutti sono disponibili tramite l'API Intl di ECMA402. Pertanto, supportiamo solo i seguenti pattern:
| Symbol | Meaning | Notes |
|---|---|---|
| G | Era designator | |
| y | year | |
| M | month in year | |
| L | stand-alone month in year | |
| d | day in month | |
| E | day of week | |
| e | local day of week | e..eee is not supported |
| c | stand-alone local day of week | c..ccc is not supported |
| a | AM/PM marker | |
| h | Hour [1-12] | |
| H | Hour [0-23] | |
| K | Hour [0-11] | |
| k | Hour [1-24] | |
| m | Minute | |
| s | Second | |
| z | Time Zone |
Formattazione {select}
{key, select, matches} viene utilizzato per selezionare l'output corrispondente a un valore tra più opzioni (simile all'istruzione switch in alcuni linguaggi di programmazione). La chiave viene cercata nei dati di input. Il valore corrispondente viene confrontato con uno dei match e viene restituito l'output associato. L'argomento key deve seguire la Pattern_Syntax Unicode. matches è un elenco separato da spazi di matches.
La struttura di un match è match {output} (analogo al case dello switch). match è un valore letterale. Se corrisponde al valore di key, verrà utilizzato il relativo output.
output è a sua volta un messaggio, quindi può essere una stringa letterale o contenere argomenti annidati.
Il match other è speciale e viene utilizzato quando nessun altro match corrisponde (analogo al case default dello switch).
other è obbligatorio secondo l'implementazione di icu4j. Genereremo un errore se select viene utilizzato senza other.
Ecco un esempio con argomenti annidati:
Formattazione {plural}
{key, plural, matches} viene utilizzato per selezionare l'output in base alle regole di pluralizzazione della lingua corrente. È molto simile a {select} tranne per il fatto che il valore deve essere un numero mappato a una categoria di plurali.
La corrispondenza è un valore letterale associato a una di queste categorie plurali. Non tutte le lingue utilizzano tutte le categorie plurali.
-
zero: Questa categoria è utilizzata per lingue con grammatica specifica per zero elementi (es. arabo e lettone). -
one: Per lingue con grammatica specifica per un elemento singolare (non presente in lingue asiatiche come cinese e giapponese) -
two: Per lingue con grammatica specifica per due elementi duali (es. arabo, gallese) -
few: Per piccole quantità di elementi (paucale): regole variano (2-4, 3-10 elementi) -
many: Categoria per lingue con grammatica specializzata per quantità maggiori (es. arabo, polacco e russo). -
other: Categoria utilizzata quando il valore non corrisponde ad altre categorie. Rappresenta il "plurale" in lingue con dicotomia semplice singolare/plurale come l'inglese. -
=value: Utilizzato per corrispondere a un valore specifico indipendentemente dalle categorie plurali della lingua.
Non utilizzare =1 al posto di one. one non significa sempre 1 ma piuttosto singular, che può corrispondere a numeri diversi da 1 in determinate lingue.
Alcune lingue considerano tutti i numeri che terminano con 1 (come 1, 11, 111) come singular.
other è obbligatorio secondo l'implementazione di icu4j. Verrà generato un errore se plural viene utilizzato senza other.
Nell'output della corrispondenza, puoi utilizzare il token speciale # come segnaposto per il valore numerico, che verrà formattato come se fosse {key, number}. Questo è lo stile che preferiamo utilizzare.
Formato {selectordinal}
Il formato {key, selectordinal, matches} viene utilizzato per scegliere l'output in base alle regole di pluralizzazione ordinale (1°, 2°, 3°, ecc.) della lingua corrente. È molto simile al formato {plural} sopra descritto, con la differenza che il valore viene mappato a una categoria di plurale ordinale.
La corrispondenza è un valore letterale associato a una di queste categorie plurali. Non tutte le lingue utilizzano tutte le categorie plurali.
-
zero: Questa categoria è utilizzata per lingue con grammatica specifica per zero elementi (es. arabo e lettone). -
one: Categoria per lingue con grammatica specializzata per un singolo elemento. Molte lingue ma non tutte la utilizzano (lingue asiatiche come cinese e giapponese generalmente no). -
two: Categoria per lingue con grammatica specializzata per due elementi (es. arabo e gallese). -
few: Categoria per lingue con grammatica specializzata per piccole quantità. In alcune lingue copre 2-4 elementi, in altre 3-10, con regole complesse. -
many: Categoria per lingue con grammatica specializzata per quantità maggiori (es. arabo, polacco e russo). -
other: Categoria utilizzata quando il valore non corrisponde ad altre categorie. Rappresenta il "plurale" in lingue con dicotomia semplice singolare/plurale come l'inglese. -
=value: Utilizzato per corrispondere a un valore specifico indipendentemente dalle categorie plurali della lingua.
other è obbligatorio secondo l'implementazione di icu4j. Verrà generato un errore se selectordinal viene utilizzato senza other.
Nell'output della corrispondenza, il token speciale # può essere utilizzato come segnaposto per il valore numerico e verrà formattato come se fosse {key, number}.
Formattazione Rich Text
Supportiamo anche la formattazione rich text incorporata nei messaggi tramite tag, consentendo agli sviluppatori di inserire testi complessi senza frammentare le frasi. NOTA: Questi non sono tag XML/HTML
I sistemi che utilizzano la formattazione rich text devono gestire esternamente questi segnaposto. I tag nell'output possono essere post-elaborati da strumenti personalizzati o utilizzare la configurazione defaultRichTextElements.
Virgolette / Escape
L'apostrofo ASCII ' (U+0027) può essere utilizzato per eseguire l'escape di caratteri sintattici nella parte testuale del messaggio, replicando il comportamento di quoting/escaping di ICU.
Due apostrofi ASCII consecutivi rappresentano un singolo apostrofo ASCII, in modo simile a come %% in printf rappresenta un singolo %. Tuttavia, raccomandiamo di utilizzare l'apostrofo riccio ’ (U+2019) per le stringhe leggibili dall'uomo e di usare esclusivamente l'apostrofo ASCII ' (U+0027) nella sintassi dei messaggi ICU.