Utilizzo dell'attributo HTML translate

Domanda

A cosa serve l'attributo translate e come dovrei usarlo?

Risposta rapida

L'attributo translate in HTML5 indica che il contenuto dell'elemento dovrebbe o non dovrebbe essere tradotto. Non c'è alcun effetto sulla pagina renderizzata (anche se si potrebbe, naturalmente, stilizzarla se si trova una buona ragione per farlo). Per esempio,

<h1>Utilizzo dell'attributo HTML <span class="kw" translate="no">translate</span></h1>

L'attributo può apparire su qualsiasi elemento e richiede solo due valori: yes o no. Se il valore è no, gli strumenti di traduzione dovrebbero proteggere il testo dell'elemento dalla traduzione. Lo strumento di traduzione in questione potrebbe essere un motore di traduzione automatica, come quelli utilizzati nei servizi online offerti da Google, Microsoft e Yandex. Oppure potrebbe essere lo strumento "workbench" di un traduttore umano, che impedirebbe al traduttore di cambiare inavvertitamente il testo.

L'impostazione di questo flag di traduzione su un elemento applica il valore a tutto il contenuto dell'elemento contenuto. HTML5 ha una lista di attributi che devono essere tradotti di default, ma questi attributi non dovrebbero essere tradotti se si trovano su un elemento in cui translate è impostato su no. Altrimenti gli attributi non dovrebbero essere tradotti.

Se una pagina non ha attributo translate, un sistema di traduzione o un traduttore dovrebbe presumere che tutto il testo debba essere tradotto. Il valore yes è quindi probabilmente poco utile, anche se potrebbe essere molto utile se si avesse bisogno di sovrascrivere un flag di traduzione su un elemento padre e indicare alcuni bit di testo da tradurre. Si potrebbe voler tradurre il testo in lingua naturale in esempi di codice sorgente, per esempio, ma lasciare il codice non tradotto.

Dettagli

Perché è necessario?

L'aggiunta dell'attributo translate alla tua pagina può aiutare i lettori a comprendere meglio il tuo contenuto quando lo fanno funzionare attraverso sistemi di traduzione automatica, e può far risparmiare una quantità significativa di denaro e problemi per i fornitori di traduzioni con un'elevata produttività in molte lingue.

Ci si imbatte spesso in un bisogno di questo tipo. C'è un esempio nelle specifiche HTML5 di Bee Game. Ecco un esempio simile, ma reale, in cui la documentazione tradotta si riferisce ad una macchina con testo in inglese sul pannello hardware che non è stata tradotta.

<p>Click the Resume button on the Status Display or the <span class="panelmsg" translate="no">CONTINUE</span> button on the printer panel.</p>

In una traduzione tedesca questo diventerà:

<p>Drücken Sie Fortsetzen in der Statusanzeige oder die Taste <span class="panelmsg" translate="no">CONTINUE</span> an Ihrem Drucker.</p>

Qui ci sono un paio di esempi di contenuti reali che potrebbero beneficiare dell'attributo translate. Il primo è tratto da un libro, citando il titolo di un'opera che dovrebbe rimanere nella lingua originale.

<p>The question in the title <cite translate="no">How Far Can You Go?</cite> applies to both the undermining of traditional religious belief by radical theology and the undermining of literary convention by the device of "breaking frame"...</p>

L'esempio successivo è tratto direttamente da una pagina in inglese sul pane francese - il francese per il pane è pain - e il codice non contiene alcun attributo translate. L'originale è in inglese, il che significa che una traduzione automatica tradurrà la parola inglese pain come una sensazione fisica molto sgradevole, piuttosto che una cosa che si mangia.

<p>Welcome to <strong>french pain</strong> on Facebook. Join now to write reviews and connect with <strong>french pain</strong>. Help your friends discover great places to visit by recommending <strong>french pain</strong>.</p>

Sarebbe meglio aggiungere translate="no" agli elementi strong. (E, tra l'altro, sarebbe utile anche per cose come i browser vocali che contengono la parola pain con <span lang="fr">...</span>.)

Puoi anche usarlo per proteggere parole chiave, campioni o esempi di codice dall'essere tradotti. Nel primo paragrafo dell'esempio che segue, il markup che assomiglia alle normali parole inglesi è protetto dalla traduzione. Il codice sorgente del secondo paragrafo assicura che l'intero paragrafo rimanga in inglese.

<p>Here is an example of the <span class="kw" translate="no">label<span> element using the <span class="kw" translate="no">for</span> attribute:</p>

<code translate="no">&lt;label for="postcode"&gt;Enter your postcode to find the nearest store:&lt;/label&gt; &lt;input id="postcode" type="text"&gt;</code>

Quando utilizzare translate="yes"

Il valore yes dell'attributo translate è usato principalmente per sovrascrivere l'effetto dell'impostazione translate impostata su no. Ad esempio, potremmo voler permettere la traduzione del testo in lingua naturale del codice sorgente di cui sopra, proteggendo al tempo stesso il codice stesso (ad esempio, le parole chiave come label, for, postcode, input, ecc.) Potremmo farlo circondando il testo in lingua naturale con elementi che hanno l'attributo translate.

<p>Here is an example of the <span class="kw" translate="no">label<span> element using the <span class="kw" translate="no">for</span> attribute:</p>

<code translate="no">&lt;label for="postcode"&gt;<span translate="yes">Enter your postcode to find the nearest store</span>:&lt;/label&gt; &lt;input id="postcode" type="text"&gt;</code>

Lavorare con gli attributi

Può essere problematico trattare i valori degli attributi nella traduzione. In generale, i valori degli attributi fanno parte della sintassi della pagina e non dovrebbero quindi essere tradotti. Se lo sono, la pagina si romperà. In alcuni casi, tuttavia, i valori contengono testo leggibile dall'uomo (es. title, alt e valori degli attributi segnaposto in HTML), anche se questo non è raccomandato.*

Ad esempio, è impossibile utilizzare la marcatura per i valori degli attributi per gestire il testo bidirezionale in lingue come l'arabo e l'ebraico, o per marcare cose come i cambiamenti di lingua. E, naturalmente, può essere difficile determinare quali valori degli attributi dovrebbero essere tradotti e quali no. È anche difficile identificare una parte di un valore di un attributo che non dovrebbe essere tradotto, o un valore di un attributo che dovrebbe essere lasciato non tradotto anche se il contenuto dell'elemento è tradotto.

La specifica HTML elenca gli attributi che devono essere trattati come traducibili. I valori degli attributi non presenti in questa lista non devono essere tradotti.

Se un valore di un attributo 'traducibile' appare su un elemento che ha translate impostato a no, allora l'aspettativa è che anche il valore dell'attributo rimarrà non tradotto.

Questo può, naturalmente, causare problemi nei casi in cui si desidera che i valori degli attributi siano tradotti ma non il contenuto dell'elemento, o viceversa. In alcuni casi queste situazioni possono essere mitigate annidando il markup in questione. Per esempio, si potrebbe avere un elemento span esterno con translate impostato sul valore yes che porta l'attributo title che si vuole tradurre. All'interno di quel tag span si potrebbe mettere un altro span con translate impostato sul valore no e contenente il contenuto dell'elemento. Questo è il modo in cui articoli come quello che state leggendo gestiscono i link alle versioni tradotte di una pagina - l'attributo title dell'elemento esterno porta il nome della lingua a cui si punta, e l'elemento interno porta il nome di quella lingua nella lingua stessa (che non dovrebbe essere cambiato). Questo aiuta anche quando si etichetta la lingua utilizzando l'attributo lang.

L'esempio seguente mostra come si può proteggere la parola "English", quando si tratta di un link alla versione inglese del documento, quando si traduce una pagina che è in tedesco in un'altra lingua. L'attributo informativo title sarebbe stato tradotto. Senza il flag di traduzione, i servizi online tendono attualmente a tradurre la parola 'English' nell'equivalente nella lingua di destinazione o in 'Deutsch'.

<span title="Englisch"><a href="article.en.html" translate="no" lang="en">English</a></span>

Poiché si tratta di valori di attributo, tuttavia, è ancora impossibile indicare se parti del testo nel valore dell'attributo debbano essere protette dalla traduzione.

(Si tenga presente che la specifica HTML5, al momento della scrittura, non è ancora stabile e le implementazioni potrebbero non seguire la specifica.)

Questo approccio è diverso dall'approccio generale raccomandato dalla specifica ITS per i linguaggi basati su XML. ITS (vedi sotto) raccomanda che i valori degli attributi vengano lasciato non tradotti per impostazione predefinita, ma fornisce anche un modo per indicare attributi specifici da tradurre, indipendentemente dal loro contesto.

Aggiunta di flag di traduzione a una pagina

L'attributo translate può, naturalmente, essere aggiunto a una pagina da un autore di contenuti che è consapevole di come vuole che la pagina appaia dopo la traduzione. Questo è particolarmente utile per proteggere i contenuti quando un lettore esegue una pagina attraverso un servizio di traduzione automatica, come quelli offerti da Google, Microsoft e Yandex.

Negli scenari di traduzione industriale, i localizzatori possono aggiungere attributi durante la fase di preparazione della traduzione, in modo da evitare gli effetti moltiplicativi derivanti dalla gestione di traduzioni errate in un gran numero di lingue. Questo può essere fatto attraverso processi automatizzati, come gli strumenti di riconoscimento delle entità, che riconoscono automaticamente i nomi appropriati.

E' anche possibile utilizzare file esterni per (tra le altre cose) puntare ad un markup che non dovrebbe essere tradotto. Per esempio, si potrebbe voler indicare che tutti gli elementi span con un dato nome di classe non dovrebbero essere tradotti. Un modo per farlo è descritto dalla specificazione Set di tag per l'internazionalizzazione (ITS). Un insieme di queste regole può essere valido per una o più pagine contemporaneamente. Gli sviluppatori di contenuti e i localizzatori possono lavorare a stretto contatto nella definizione di queste regole per ottenere un processo di localizzazione più veloce e migliore.

Supporto all'implementazione del flag di traduzione

Il codice translate="no" è supportato dai servizi di traduzione online di Google, Microsoft e Yandex al momento della scrittura. L'uso di translate="yes" per consentire la traduzione all'interno di una parte del documento in cui la traduzione non è consentita non è supportato da Microsoft, ma è supportato dagli altri due servizi.

Guarda gli ultimi risultati dei test.

Il gruppo di lavoro MultilingualWeb-LT, che ha lavorato sulle specifiche dell' Internationalization Tag Set , ha compilato un documento, Metadati per il Web multilingue - Scenari di utilizzo e implementazioni che descrive altre applicazioni e scenari di utilizzo in cui viene riconosciuto il flag di traduzione.

Approcci tradizionali per i servizi di traduzione online

Prima che l'attributo translate fosse definito, sia Google che i servizi di traduzione online di Microsoft hanno supportato una serie di altri modi non standard per esprimere idee simili.

Sia Google che Microsoft supportano class="notranslate", ma sostituire il valore di un attributo di una classe con un attributo che è parte formale del linguaggio rende questa caratteristica molto più affidabile, specialmente in contesti più ampi. Per esempio, uno strumento di preparazione alla traduzione sarebbe in grado di fare affidamento sul significato dell'attributo HTML5 translate, che è sempre quello che ci si aspetta. Inoltre diventa più facile portare il concetto ad altri scenari, come altre API di traduzione o standard di localizzazione come XLIFF.

A quanto pare Microsoft supporta style="notranslate". Questa non è una delle opzioni che Google elenca per il loro servizio online, ma d'altra parte hanno cose che non sono disponibili tramite il servizio di Microsoft.

Per esempio, se si ha una pagina intera che non dovrebbe essere tradotta, si può aggiungere <meta name="google" value="notranslate"> all'interno dell'elemento head della tua pagina e Google non tradurrà nessuno dei contenuti di quella pagina. (Tuttavia supportano anche <meta name="google" content="notranslate"> .) Questo non dovrebbe essere specifico di Google, e un singolo modo per farlo, cioè translate="no" nel tag html, è molto più pulito.

Anche i motori di traduzione di Microsoft e Google non traducono i contenuti all'interno degli elementi code. Si noti, tuttavia, che non sembra si abbia alcuna scelta in merito - non sembrano esserci istruzioni su come sovrascrivere questo aspetto se si vuole che il contenuto del proprio elemento code sia tradotto.

Come già accennato, il nuovo attributo HTML5 translate fornisce una caratteristica semplice e standard dell'HTML che può sostituire e semplificare tutti questi diversi approcci, e aiuterà gli autori a sviluppare contenuti che funzioneranno anche con altri sistemi.