Vai al contenuto principale

Sintassi dei Messaggi

Traduzione Beta Non Ufficiale

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:

  • key indica 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:

  • short formatta le date nel modo più breve possibile

  • medium formatta le date con una rappresentazione testuale abbreviata del mese

  • long formatta le date con una rappresentazione testuale estesa del mese

  • full formatta 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:

  • short formatta l'orario con ore e minuti

  • medium formatta l'orario con ore, minuti e secondi

  • long formatta l'orario con ore, minuti, secondi e fuso orario

  • full equivalente 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:

SymbolMeaningNotes
GEra designator
yyear
Mmonth in year
Lstand-alone month in year
dday in month
Eday of week
elocal day of weeke..eee is not supported
cstand-alone local day of weekc..ccc is not supported
aAM/PM marker
hHour [1-12]
HHour [0-23]
KHour [0-11]
kHour [1-24]
mMinute
sSecond
zTime 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).

pericolo

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.

informazioni

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.

pericolo

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.

pericolo

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

Comportamento Personalizzato

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.