i18n nei file js e nelle sezioni di RKWard.

Contrariamente ai file .xml, rendere traducibili i file .js di un'estensione richiede più lavoro personalizzato. La differenza chiave, qui, è che non esiste un modo automatico decente per dire se una stringa deve essere visualizzata come una stringa facilmente leggibile o come un pezzo di codice. Quindi dovrete essere voi a contrassegnarlo. Abbiamo già mostrato esempi del genere, da sempre. Ecco una descrizione più completa delle funzioni i18n disponibili nel codice js e alcuni suggerimenti per casi più complessi:

i18n (msgid, [...])

La funzione più importante. Contrassegna la stringa per la traduzione. La stringa (tradotta o meno) viene restituita tra virgolette ('"'). Nella stringa è possibile utilizzare un numero arbitrario di segnaposto come mostrato di seguito. L'uso di tali segnaposto anziché concatenare piccole sotto-stringhe è molto più semplice per i traduttori:

i18n ("Confronta gli oggetti %1 e %2", getString ('x'), getString ('y'));
                
i18nc (msgctxt, msgid, [...])

Come i18n(), ma fornisce in aggiunta un messaggio di contesto:

i18nc ("nome proprio, non stato mentale", "test di Mood");
                
i18np (msgid_singular, msgid_plural, n, [...])

Come i18n(), ma per i messaggi che possono essere diversi in forma singolare o plurale (e alcune lingue hanno forme più numeriche differenti). Notare che proprio come con i18n(), è possibile utilizzare un numero arbitrario di sostituzioni, ma è necessario il primo ('%1') e deve essere un numero intero.

i18np ("Confronto di una singola coppia", "Confronto di %1 coppie distinte", n_pairs);
                
i18ncp (msgctxt, msgid_singular, msgid_plural, n, [...])

i18np() con messaggio di contesto aggiunto.

comment (commento, [indentazione])

Visualizza un commento del codice, contrassegnato per la traduzione. Contrariamente alle altre funzioni i18n(), questo non è citato, ma un '#' viene aggiunto a ciascuna riga del commento.

comment ("Trasponi la matrice");
                        echo ('x <- t (x)\n');
                

Per aggiungere commenti ai traduttori (vedere sopra per una discussione sulle differenze tra commento e contesto), aggiungere un commento che inizia con «i18n:» o «translators:» direttamente sopra la chiamata i18n() per commentare. Ad esempio:

// i18n: l'ortografia è corretta: Scree plot.
                echo ('rk.header (' + i18n ("Scree plot") + ')\n');
        

i18n e virgolette

Nella maggior parte dei casi non dovrete preoccuparvi del comportamento di i18n() rispetto alle virgolette. Dato che, in genere, le stringhe traducibili sono stringhe letterali, citarle è proprio la cosa giusta da fare e vi fa risparmiare un po' di digitazione. Inoltre, in funzioni come makeHeaderCode()/Header() che solitamente citano i loro argomenti, le stringhe i18n() sono protette dalle virgolette duplicate. Essenzialmente, funziona, inviando la stringa tradotta prima tramite quote() (per renderla tra virgolette), quindi tramite noquote() (per proteggerla da ulteriori virgolette). Se avete bisogno di una stringa traducibile che non sia quotata, usare i18n(noquote ("Il mio messaggio")). Se avete bisogno che una stringa traducibile venga citata, una seconda volta, inviatela tramite quote(), due volte.

Detto questo, in genere non è una buona idea rendere traducibili oggetti come nomi di funzioni o nomi di variabili. Per prima cosa, il linguaggio di programmazione è intrinsecamente in inglese e non c'è internazionalizzazione del linguaggio stesso. I commenti in codice sono una cosa diversa, ma si dovrebbe utilizzare la funzione comment() per quelli. In secondo luogo, rendere traducibili parti sintatticamente rilevanti del codice generato significa che le traduzioni potrebbero effettivamente creare problemi all'estensione. Ad esempio, se un traduttore ignaro traduce una stringa intesa come nome variabile in due parole distinte con uno spazio in mezzo.