# Usare &kbabel;

## Introduzione

Di solito i messaggi dei programmi e la documentazione sono scritti in inglese. Usando un'infrastruttura costituita da una serie di strumenti e librerie, è possibile far sì che l'applicazione preferita usi la tua lingua nativa, diversa dall'inglese. Questo processo di adattamento di un'applicazione in una specifica lingua è chiamato localizzazione. Il processo di localizzazione include la traduzione delle interfacce e della documentazione del programma nelle varie lingue richieste dagli utenti e, in alcuni paesi o regioni particolari, rendere l'inserimento e la visualizzazione dei dati conforme a particolari convenzioni.&kbabel; è uno strumento che ti assiste nel processo di internazionalizzazione per far sì che l'interfaccia di un'applicazione si adatti a molte lingue.

Ogni programma adatto all'internazionalizzazione rende disponibili per la traduzione uno o più cataloghi. L'estensione di questi file è `.pot`. POT è un acronimo che sta per Portable Object Template.

Ogni traduttore prende il copia di un file POT e inizia a tradurre i messaggi. Questo file diventerà un file PO (Portable Object) e rappresenta solo una lingua.

Ogni traduttore prende una copia di uno di questi modelli POT e inizia a riempire gli spazi vuoti: ogni messaggio è tradotto nella lingua desiderata. Il file che contiene il testo tradotto viene chiamato file PO (Portable Object).

Una volta che tutti i messaggi sono stati tradotti, il file PO è compilato in un formato binario leggibile solo dal computer, conosciuto come file MO (Machine Object). Questi file, che saranno memorizzati con un'estensione `.mo`, rappresentano dei database per diminuire il tempo richiesto dall'applicazione per cercare ogni messaggio tradotto.

Ciò suggerisce una domanda: ho bisogno di conoscere cosa c'è dentro un file PO anche se ho &kbabel;? La risposta è, senza dubbio, sì. Ci sono situazioni in cui un catalogo di messaggi può corrompersi ed aver così bisogno di essere manualmente sistemato. La maggior parte di questi problemi sono gli odiati conflitti CVS che si verificano quando un processo di traduzione è coordinato da un sistema di versione concorrente (consulta la documentazione di CVS). &kbabel; non può aiutarti se sorge un problema di questo genere così sono richiesti un editor di testo e la conoscenza dei file PO. Vediamo come è fatto un file PO.

I file PO sono costituiti da coppie di messaggi — un msgid e un msgstr. Il msgid è il testo in inglese e il msgstr è il testo tradotto nella lingua giusta. Il testo che accompagna ogni msgid e ogni msgstr è racchiuso dentro virgolette doppie stile C. Un esempio, preso da uno dei file PO per &noatun;, è `msgid "Open a Playlist"`

Le linee vuote e quelle che iniziano con `#` sono ignorate. Le linee che iniziano con # rappresentano commenti e sono utili mezzi per fornire note che indicano in quale file sarà usato questo messaggio e, nel caso dell'autore di un'applicazione, per fornire commenti che aiutano nella traduzione. &kbabel; visualizza queste linee di commento di ogni messaggio.

In molti casi la prima coppia msgid-msgstr in un file PO è una voce falsa (che funge da intestazione del file PO) che contiene varie informazioni sul file PO tradotto, come il nome dell'applicazione, la data di traduzione, il nome del traduttore e così via.

Le versioni recenti di &GNU; gettext hanno aggiunto un'altra utile funzionalità dell'internazionalizzazione chiamata forme di plurale. L'inglese usa solo una forma di singolare e una di plurale dei nomi, ⪚ 1 file e 10 files. Ciò porta molti sviluppatori all'idea che il mondo è semplice e possono quindi usare messaggi come Do you want to delete %1 file(s)?, dove `%1` rappresenta il numero di file da eliminare. Ma ciò è fondamentalmente sbagliato. Per tradurre in slovacco sono necessarie 3 forme diverse del messaggio. Questo numero cambia da lingua a lingua e anche quando è lo stesso, ⪚ anche il ceco usa 3 forme, la regola per decidere quale forma usare può essere molto differente.

Le forme di plurale nei file PO sono qui per aiutare. Sfortunatamente, agli sviluppatori di &kde; non piace l'implementazione delle forme di plurale in &GNU; gettext e hanno introdotto un proprio formato e una gestione per quest'ultimo.

## Editor

Qui vi è un'immagine di &kbabel;. Per convenienza &kbabel; ha barre degli strumenti per velocizzare molte operazioni e, per utenti che usano molto la tastiera, ci sono molte scorciatoie da tastiera. La finestra principale è divisa in quattro parti.

La casella di testo in alto a sinistra, il cui contenuto non può essere modificato, contiene l'attuale msgid dal file PO aperto e il suo testo inglese.

La casella di testo in basso a sinistra contiene il msgstr relativo al msgid mostrato e qui puoi modificare il testo tradotto.

La parte della finestra in alto a destra è un pannello dei commenti dove puoi vedere i commenti aggiunti per la voce che stai modificando.

Può essere usata:

- per sapere come l'attuale messaggio è usato dall'applicazione (testo semplice o formattato nello stile del linguaggio C)

- in alcuni casi, per leggere commenti di aiuto aggiunti dallo sviluppatore dell'applicazione per assistere i traduttori nel loro lavoro; per esempio ci possono essere suggerimenti tecnici (usati con grande profitto nel progetto LyX)

- quando hai bisogno di sapere da quale file viene il messaggio poiché vuoi segnalare un errore ortografico nella stringa inglese originale.

Immagine di &kbabel; Immagine di &kbabel;

La finestra dell'editor (in basso a destra) è la parte più sofisticata della finestra principale di &kbabel;. La sua dimensione può essere regolata usando linea divisoria tra esso e il pannello dei commenti (il pannello in alto a destra). La finestra dell'editor ha due pannelli a schede — uno che memorizza le informazioni di ricerca, l'altro le informazioni contestuali. La scheda delle informazioni contestuali contiene una vista a scorrimento che mostra le precedenti 4 voci e le successive 4 associate alla voce corrente — essenzialmente è una piccola 'istantanea' del file PO. Durante la traduzione, è molto comune per le stringhe dei messaggi essere correlate al messaggio successivo e a quello precedente, così il pannello del contesto è utile per dare un'occhiata ai messaggi attigui per avere un aiuto su come tradurre al meglio l'attuale messaggio. La traduzione dell'interfaccia delle finestre di dialogo è un buon esempio, o gli elementi grafici con il testo ad essi associato e con il messaggio "che cos'è".

### Altre caratteristiche di &kbabel;

Ogni voce msgid può trovarsi in uno fra tre stati:

da tradurre

- non c'è alcun testo tradotto attualmente associato con il msgstr

fuzzy

- `msgmerge` ha provato a far corrispondere una stringa tradotta cercando nelle voci rimanenti del file PO. Ciò non funziona perfettamente e devi modificare il testo tradotto affinché sia la traduzione corretta dell'attuale testo inglese.

tradotto

- il msgid è la forma completamente tradotta del msgstr

Lo stato dell'attuale voce è indicato da due LED. A secondo della configurazione questi possono trovarsi o nella barra di stato o sopra la casella di testo della stringa tradotta. Entrambi hanno un colore personalizzabile (per assecondare le tue richieste visive o il tuo gusto). Leggi la sezione delle Preferenze per vedere come modificare queste impostazioni.

## Traduzione avanzata

Adesso hai un'idea di come tradurre un file PO. In questa sezione seguiremo il modo standard di tradurre un nuovo file PO usando le caratteristiche avanzate di &kbabel;. Assumiamo che tu abbia già aperto un file modello POT e salvato come file PO.

### Navigazione nel file PO

&kbabel; ti permette di sportarti facilmente nel file secondo lo stato della traduzione dei messaggi È già stato introdotto il concetto di stato fuzzy/da tradurre. Un messaggio può essere segnato come errato a seguito del controllo di validità o della validazione fatta da `msgfmt`. E, ovviamente, &kbabel; supporta la navigazione della cronologia dei messaggi visitati con i Successivo/Precedente, come in &konqueror;.

Tutti i comandi per la navigazione sono nel menu Vai.

PaginaSu | Va al precedente messaggio
PaginaGiù | Va al messaggio successivo
&Ctrl;PaginaSu | Va al precedente messaggio fuzzy
&Ctrl;PaginaGiù | Va al successivo messaggio fuzzy
&Alt;PaginaSu | Va al precedente messaggio da tradurre
&Alt;PaginaGiù | Va al precedente messaggio da tradurre
&Shift;PaginaSu | Va al precedente messaggio con errore
&Shift;PaginaGiù | Va al successivo messaggio con errore
&Ctrl;&Shift;PaginaSu | Va al precedente messaggio fuzzy o da tradurre
&Ctrl;&Shift;PaginaGiù | Va al successivo messaggio fuzzy o da tradurre

### Modifica intelligente

Modifica intelligente significa che l'editor ti aiuterà facilitando la modifica della traduzione tenendo conto di particolari regole del formato PO. Essa farà l'escape corretto ove necessario.

Supporta anche più di una modalità per l'inserimento del file linea. Ciò è molto utile per il modo in cui gettext gestisce la fine delle linee. Semplicemente le ignora. (Puoi immaginare che tutto il testo nel msgstr è un'unica linea.) Se vuoi inserire una vera fine della linea, devi inserire `\n`. Ma la maggior parte traduttori non comprendono che una nuova linea nel msgstr non aggiunge alcuno spazio vuoto tra le linee. Ciò può essere facilmente risolto aggiungendo uno spazio alla fine di ogni linea. Ma te ne puoi facilmente dimenticare, così la modifica intelligente fa ciò automaticamente per te.

La tabella sottostante riassume le caratteristiche della modifica intelligente.

Tab | Inserisce \t
" | Inserisce \"
Invio | Se l'ultimo carattere prima del cursore non è uno spazio, ne inserisce uno. Quindi inizia una nuova linea.
&Ctrl;Invio | Inizia una nuova linea senza alcuna logica aggiuntiva
&Shift;Invio | Inserisce \n e inizia una nuova linea

Se vuoi vedere dove sono gli spazi, attiva l'opzione Sfondo evidenziato e/o l'opzione Segna con punti gli spazi bianchi nella finestra di dialogo delle preferenze nella scheda Modifica Aspetto.

### Traduzione automatica

Come primo passo nell'iniziare una nuova traduzione, &kbabel; fornisce una funzione per riempire automaticamente le traduzioni dei messaggi con traduzioni più vecchie. Scegli Strumenti Traduzione approssimativa e &kbabel; presenterà la seguente finestra di dialogo:

Finestra di dialogo della traduzione approssimativa

Nella finestra di dialogo, devi specificare cosa tradurre e scegliere l'origine delle vecchie traduzioni.

In alto nella cornice Cosa tradurre vi sono tre caselle da marcare (Voci da tradurre, Voci fuzzy, Voci tradotte) per specificare il tipo di messaggi che vuoi tradurre. Le voci da tradurre e fuzzy sono le naturali scelte per la traduzione automatica, ma puoi cambiare anche i messaggi già tradotti.

Per la traduzione approssimativa sarà sempre usata l'esatta corrispondenza per i msgid. Tuttavia, puoi aggiungere altre modalità, &ie; Traduzione fuzzy (lento) e Traduzione delle singole parole. Entrambe queste due modalità devono essere supportate dalle sorgenti utilizzate (vedi sotto). Non c'è alcuna spiegazione su ciò che significa traduzione fuzzy, ma lo scopo è abbastanza ovvio. Traduzione delle singole parole è adatto solo per alcune lingue. &kbabel; proverà a tradurre separatamente ciascuna parola nel msgid e inserirà quindi le parole (o frasi) tradotte nel msgstr nello stesso ordine.

Può essere usato, come sorgente per la traduzione approssimativa, qualsiasi modulo di dizionario disponibile. C'è una lista dei moduli Non usare e di quelli Usa. I moduli sono usati nello stesso ordine in cui sono specificati nella lista Usa. Viene cercata la traduzione nel primo modulo. Se non è stata trovata, sarà cercata nel successivo modulo nella lista e così via. Puoi usare i pulsanti con le frecce per muovere i moduli tra le liste. Non ti dimenticare di cambiare l'ordine a seconda delle necessità usando i pulsanti Sposta in alto e Sposta in basso.

Di solito &kbabel; segna come fuzzy qualsiasi messaggio tradotto approssimativamente, dato che assume che qualsiasi traduzione automatica debba essere riveduta da un traduttore. Se sei sicuro al 100% che la traduzione automatica sarà corretta, o vuoi rivedere in ogni caso tutta la traduzione, Marca come fuzzy le voci modificate ti permette di disattivare l'impostazione automatica dello stato fuzzy, ma è necessario confermarlo.

Se hai impostato tutte le opzioni affinché siano adatte alle tue necessità premi Avvia per tradurre automaticamente i messaggi. Puoi seguire la barra di progresso e, nel caso, c'è sempre il pulsante Interrompi.

### Valida la traduzione

Ognuno fa errori. Così &kbabel; supporta vari controlli per i problemi tipici nelle traduzioni. Questi controlli (non il controllo della sintassi) possono essere in pratica eseguiti in due modi.

I controlli possono essere eseguiti ad ogni modifica del testo tradotto. Questi sono chiamati controlli automatici e possono essere attivati nella finestra di dialogo di configurazione di &kbabel;. Il controllo automatico della sintassi è possibile ad ogni salvataggio del file.

I controlli automatici possono rallentare &kbabel;. Se hai un computer più lento, puoi disattivare i controlli automatici e usare solo la seconda possibilità. Puoi invocare ciascun tipo di controllo dal menu Strumenti Validazione. Quindi il controllo è eseguito per tutti i messaggi nel file e quelli che non passano un controllo sono segnati come errori.

Controlla sintassi

- Ciò invoca `msgfmt` per controllare la validità del file PO come visto dal pacchetto gettext. Mostrerà i risultati del comando e segnerà i msgstr con errori.

Controlla argomenti

- Le traduzioni non corrette posso mandare in crash un'applicazione. Le più pericolose parti della traduzione sono gli argomenti, ⪚ per funzioni simili a printf. Questo controllo compara il numero e il tipo degli argomenti in msgid e msgstr. Essi devono corrispondere.

Controlla acceleratori

- Il testo delle &GUI; di solito contiene acceleratori, &ie; lettere che possono essere usate per accedere velocemente da tastiera agli elementi della &GUI;. Essi sono indicati da un carattere speciale, ⪚ & in &kde;. Una richiesta tipica delle traduzioni è anche che il testo tradotto dovrebbe contenere acceleratori. Questo controllo si accorgerà di questo problema per te. Il carattere per gli acceleratori può essere specificato nelle Preferenze nella scheda Varie.

Cerca per informazioni di contesto tradotte

- Probabilmente avrai bisogno di ciò solo per le traduzioni di &kde;. Alcuni testi sono molto comuni e devono essere tradotti in maniera diversa a seconda del contesto. In &kde; il contesto è descritto all'inizio del msgid dopo la speciale sequenza `_:`. Ma alcuni traduttori non conoscono questa convenzione e provano a tradurre lo stesso le informazioni contestuali. Questo controllo proverà a cercar ciò. Se il controllo trova informazioni di contesto tradotte, dovresti rimuoverle.

Controlla forme di plurale

- Se il msgid è specificato come una forma di plurale, la traduzione deve contenere il numero corretto di traduzioni separate da `\n`. Il numero corretto dipende dalla lingua della traduzione ed è specificato nella scheda Identità nella finestra di dialogo delle Preferenze. Ciò è implementato solo per &kde; al momento.

Controlla equazioni

- Le equazioni sono un speciale formato di msgid usato tipicamente nei file .desktop. E poiché la traduzione sarà inserita in questi file, anche il msgstr deve usare questo formato speciale. Ciò significa che la traduzione deve iniziare (fino alla prima occorrenza di `=`) con lo stesso testo del messaggio originale, ⪚ `Name=`.

### Controllo ortografico della traduzione

Come sempre, è molto importante controllare l'ortografia delle traduzioni prima di usare il risultato. In questo modo puoi trovare errori di battitura e altri problemi nella traduzione. &kbabel; usa la libreria standard di &kde; per il controllo ortografico e le sue impostazioni possono essere trovate nella finestra di dialogo di configurazione di &kbabel;. Il correttore ortografico può essere trovato nel sottomenu Strumenti Controllo ortografico . Puoi usare varie modalità del correttore ortografico:

Controllo ortografico...

- Questa è un'invocazione generica di una finestra di dialogo dove puoi scegliere la modalità del correttore ortografico ed impostare quella predefinita. Questa à invocata premendo &Ctrl;I .

Controlla tutto...

- Esegue il controllo ortografico in tutti i messaggi del file.

Controlla dalla posizione del cursore...

- Avvia il correttore ortografico dalla posizione del messaggio corrente e fino alla fine del file.

Controlla attuale...

- Esegue il controllo ortografico solo del messaggio corrente.

Controlla testo selezionato...

- Questa opzione è disponibile se c'è del testo selezionato nell'editor di msgstr e controllerà l'ortografia solo di questo testo.

### Tradurre &XML;, HTML, ...

I linguaggi a marcatori sono sempre più usati nelle &GUI;. Il progetto &kde; usa i file PO per tradurre anche i file DocBook (che è anche un linguaggio a marcatori) della documentazione. &kbabel; contiene molte funzioni per supportare questa tendenza.

Qui, descriveremo solo le funzioni relative alle tag usate per i marcatori. L'altro problema introdotto usando un linguaggio a marcatori è la traduzione di testi più lunghi. A questo problema si rivolge la funzionalità di diff descritta nella sezione seguente.

L'attuale versione di &kbabel; può vedere quali tag sono usate nel msgid e fornire un accesso semplificato ad esse usando le azioni seguenti dal menu Modifica:

Inserisci tag successiva

- Ciò inserisce nella traduzione la successiva tag trovata nel msgid. &kbabel; trova la tag da inserire contando il numero di tag dall'inizio della traduzione.

Modifica Inserisci tag

- Questo sottomenu contiene tutte le diverse tag trovate nella stringa del testo originale in inglese. Selezionando una tag puoi inserirla alla posizione corrente del cursore nel testo tradotto.

### Mostrare la differenza

Come già spiegato, le attuali applicazioni, provando ad essere facili da usare, contengono molti lunghi testi descrittivi che includono tag. Se uno sviluppatore cambia una parte del testo, il sistema &GNU; gettext, nei casi migliori, manterrà la vecchia traduzione e la segnerà come fuzzy. (Nel peggiore dei casi perderai tutta la traduzione, a seconda della lunghezza del testo). Ciò funziona correttamente se un msgid è breve, poiché puoi trovare le modifiche velocemente. Ma se il testo è abbastanza lungo, dovrai "lottare" per trovare ciò che è stato cambiato (per esempio, può essere solo un articolo cambiato dal team di correzione delle bozze.)

Come aiuto, puoi chiedere a &kbabel; di cercare il msgid originale e mostrare la differenza. Le modifiche sono visualizzate graficamente nella finestra Stringa originale. Il metodo esatto può essere impostato nella finestra di dialogo di configurazione di &kbabel;. Strumenti Confronto Mostra confronto mostrerà le differenze trovate. Per vedere il testo corrente senza mescolarlo con il testo originale, usa Strumenti Confronto Mostra testo originale .

Puoi attivare e disattivare la ricerca delle differenze scegliendo Strumenti Confronto Modalità di confronto . Quando è attiva la modalità di confronto, la ricerca delle differenze inizia ogni volta che passi ad un altro messaggio.

Come sempre, puoi usare diverse sorgenti per trovare la vecchia versione del testo, tutte impostate nella finestra di dialogo di configurazione di &kbabel;:

Database delle traduzioni

- Puoi usare il database delle traduzioni per la ricerca delle differenze. Raccomandiamo vivamente di attivare nella finestra di dialogo di configurazione del database delle traduzioni la memorizzazione automatica dei nuovi messaggi tradotti nel database delle traduzioni. Questa modalità può essere attivata usando l'opzione Utilizza messaggi dal database delle traduzioni.

Albero di vecchi file

- Ciò sarà usato solo se è disattivata la ricerca nel database delle traduzioni. Impostando Cartella base per i file di confronto puoi dire a &kbabel; quale file usare per la differenza. Ricava il percorso relativo del file aperto e usa questo percorso relativo nella cartella specificata qui. Se c'è un file corrispondente, sarà usato. Per usare questa modalità , dovresti fare una copia dei vecchi file prima di ogni aggiornamento.

File scelto manualmente

- Se la possibilità precedente non funziona correttamente, puoi sempre impostare manualmente il file di differenza scegliendo Strumenti Confronto Apri file per confronto.

La ricerca non è sempre accurata, poiché il file PO non contiene alcun riferimento al messaggio originale.

## Forme di plurale

Dato che le forme di plurale rappresentano un argomento complesso, dedichiamo una speciale sezione al loro supporto in &kbabel;.

&kbabel; può solo leggere le forme di plurali &GNU;, ma non può modificarle. Al momento supporta solo la versione delle forme di plurale di &kde;.

Ogni lingua in cui &kde; è tradotto deve avere impostato il numero corretto di forme di plurale. Ciò è fatto traducendo una voce in `kdelibs.po`. Il numero è impostato selezionando il nome di una lingua, che usa lo stesso numero e le stesse regole per trovare la corretta forma di plurale. La lista aggiornata dei possibili valori può essere trovata nel codice sorgente di kdelibs, nel file `kdecore/klocale.cpp`.

Le forme di plurale di &kde; sono caratterizzate dal commento `_:` che contiene l'argomento `%n`. Questo argomento è quindi usato nel messaggio stesso e indica quale forma di plurale della tua lingua debba essere usata a seconda delle regole della tua lingua.

La traduzione di un messaggio con una forma di plurale deve avere un formato speciale. Deve contenere il numero corretto di traduzioni(una per ogni forma di plurale) separate da un carattere di fine linea `\n`. Per esempio, Selected %n files tradotto in slovacco sarà:

    Vybraný %n súbor\n
    Vybrané %n súbory\n
    Vybraných %n súborov

Per controllare se la tua traduzione contiene il numero corretto di forme di plurale, usa menu Strumenti Validazione Controlla forme plurali .