Specifica¶
Puoi usare questa libreria senza leggere questa pagina — il
tutorial e la guida coprono l'uso quotidiano.
Questa pagina è per gli autori di strumenti: la convenzione che la libreria
implementa è messa per iscritto come un contratto piccolo e stabile, così che
un'altra implementazione — un estrattore, un IDE, un type checker o un futuro
pygettext — possa prenderla di mira e interoperare. Per le stesse regole
spiegate con le loro ragioni, e per come l'implementazione di riferimento le
mette in pratica, leggi prima Come funziona.
Le regole in una schermata¶
Un msgid è la concatenazione, in ordine di sorgente, dei segmenti
letterali e di un token {name} per interpolazione. Le graffe letterali sono
escapate ({ diventa {{). Un nome deve essere un semplice nome di
segnaposto — str.isidentifier() è vero e non è una parola chiave Python. Le
conversioni e le specifiche di formato non fanno parte del msgid; restano
sotto il controllo dell'applicazione.
| t-string | msgid |
|---|---|
t"Hello {name}" |
Hello {name} |
t"Total: {amount:,.2f}" |
Total: {amount} |
t"Config {{raw}} is {value}" |
Config {{raw}} is {value} |
t"Hello {user.name}" |
rifiutata — non è un nome semplice |
Una traduzione è valida quando contiene soltanto segnaposto {name}
semplici, ogni nome richiesto compare almeno una volta e nessun nome fuori
dall'insieme consentito compare. Riordino e ripetizione sono deliberatamente
senza vincoli: entrambi possono essere grammaticalmente necessari in una
lingua di destinazione.
Per i plurali, consentito è l'unione dei nomi dei rami e richiesto la
loro intersezione — così t"One file" contro t"{n} files" lascia n
disponibile a chi traduce l'una o l'altra forma ma richiesto in nessuna, e le
regole di plurale di una lingua di destinazione possono differire da quelle
della sorgente.
Un msgid vuoto non viene mai cercato, perché gettext lo riserva all'intestazione di metadati di un catalogo.
Conformità¶
conformance/v1.json
è lo stesso documento in forma leggibile dalle macchine: casi che mappano la
struttura statica di una t-string in un msgid, e un msgid più un pattern di
catalogo in una stringa resa o in un rifiuto.
Un'implementazione è conforme alla spec v1 quando riproduce ogni caso. I casi nominano solo ciò che la specifica definisce — msgid derivati, pattern accettati e rifiutati, output reso — e mai un messaggio di errore o un tipo di eccezione, così che un'implementazione in un altro linguaggio possa eseguirli immutati.
Le interpolazioni sono descritte strutturalmente, mai come sorgente Python:
{
"spec": "2.2",
"name": "format spec stays out of the msgid",
"source": [
"Total: ",
{"expression": "amount", "value": 1234.5, "format_spec": ",.2f"}
],
"msgid": "Total: {amount}"
}
Il campo "spec" non è una versione della specifica: ogni caso in
v1.json appartiene alla spec v1. Nomina la sezione di SPEC.md che il caso
mette alla prova, quindi "2.2" si legge come §2.2, la regola per derivare il
token di un segnaposto.
L'implementazione di riferimento esegue la suite come parte della propria suite di test, così la prosa e il codice non possono allontanarsi in silenzio.
Versionamento¶
Questa è la spec v1. Una modifica incompatibile all'indietro alla derivazione
dei msgid o alla validazione delle traduzioni incrementa la versione e
distribuisce un nuovo conformance/vN.json accanto a quello esistente. I
chiarimenti additivi che non cambiano né i msgid derivati né i pattern
accettati non lo fanno.