Vai al contenuto principale

Distribuzione 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 →

Ora che hai dichiarato i tuoi messaggi, li hai estratti, inviati al fornitore di traduzioni e hai ricevuto in cambio il JSON tradotto nello stesso formato, è il momento di spiegare come distribuire e utilizzare il JSON tradotto.

Compilazione dei Messaggi

Prendiamo l'esempio da Estrazione dei Messaggi, supponendo di lavorare sulla versione francese con il file denominato lang/fr.json:

{
"hak27d": {
"defaultMessage": "Panneau de configuration",
"description": "title of control panel section"
},
"haqsd": {
"defaultMessage": "Supprimer l'utilisateur {name}",
"description": "delete button"
},
"19hjs": {
"defaultMessage": "nouveau mot de passe",
"description": "placeholder text"
},
"explicit-id": {
"defaultMessage": "Confirmez le mot de passe",
"description": "placeholder text"
}
}

Possiamo utilizzare @formatjs/cli per compilarlo in un file JSON compatibile con react-intl:

Aggiungi il seguente comando agli scripts del tuo package.json:

{
"scripts": {
"compile": "formatjs compile"
}
}

ed esegui con npm:

npm run compile -- lang/fr.json --ast --out-file compiled-lang/fr.json
Analisi dei messaggi in AST

Raccomandiamo di compilare i messaggi in AST (Abstract Syntax Tree) per evitare l'analisi durante l'esecuzione, migliorando così le prestazioni dell'applicazione.

Integrazione con sistemi di gestione traduzioni (TMS)

Se il tuo TMS/fornitore utilizza un formato JSON diverso, puoi specificare un formattatore personalizzato con --format <formatFile> che converte i dati in Record<string,string> per la comprensione di @formatjs/cli. Esempio:

Se il tuo fornitore accetta un formato come

{
"[id]": {
"string": "[message]",
"comment": "[description]"
}
}

puoi eseguire

npm run compile -- lang/fr.json --ast --out-file compiled-lang/fr.json --format formatter.js

dove formatter.js è:

exports.compile = function (msgs) {
const results = {}
for (const [id, msg] of Object.entries(msgs)) {
results[id] = msg.string
}
return results
}

In futuro forniremo formattatori predefiniti compatibili con i TMS più diffusi.

Distribuzione

Sebbene ogni applicazione abbia una propria pipeline di distribuzione, l'elemento comune è la capacità di associare una lingua al relativo file di traduzione. In questo esempio supponiamo che la tua pipeline supporti l'import dinamico:

import * as React from 'react'
import * as ReactDOM from 'react-dom'
import {IntlProvider} from 'react-intl'

function loadLocaleData(locale: string) {
switch (locale) {
case 'fr':
return import('compiled-lang/fr.json')
default:
return import('compiled-lang/en.json')
}
}

function App(props) {
return (
<IntlProvider
locale={props.locale}
defaultLocale="en"
messages={props.messages}
>
<MainApp />
</IntlProvider>
)
}

async function bootstrapApplication(locale, mainDiv) {
const messages = await loadLocaleData(locale)
ReactDOM.render(<App locale={locale} messages={messages} />, mainDiv)
}