2013-08-14 11 views
22

È possibile tradurre alcune stringhe, ma non tutte, in un file di risorse separato senza Lint che si lamenta di MancaTransazione?Android Lint: come ignorare gli avvisi di traduzione mancanti in un file specifico

Ad esempio: le stringhe della mia app sono tutte in res/values ​​/ strings.xml. Una delle corde è

<string name="postal_code">Postal Code</string>

Dal "codice postale" viene di solito chiamato "codice postale" negli Stati Uniti, voglio aggiungere un'altra risorsa res/valori-en-Rus/strings.xml con contenuto:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string name="postal_code">Zip Code</string> 
</resources> 

Tuttavia, Lint lamenta altre stringhe in valori/strings.xml ma non in valori-en-Rus/strings.xml

Mi rendo conto che è possibile sopprimere gli avvisi specificando tools:ignore in valori/stringhe.xml. Ma questo non è auspicabile perché l'avviso Lint è effettivamente utile quando si traduce in un'altra lingua.

Invece, è possibile eliminare l'avviso in-en-valori Rus file di /strings.xml, come in, dicendo Lint non utilizzare quel file come criteri quando alla ricerca di traduzioni manca?

+0

correlati/quasi un dupe: [Ignorando Android Lint "MissingTranslation" controllare le traduzioni parziali] (http://stackoverflow.com/questions/ 12019282/ignorando-android-lint-missingtranslation-check-per-parzialmente autonome traduzioni) – blahdiblah

risposta

0

Se si utilizza Eclipse, consultare i pulsanti della barra degli strumenti della visualizzazione avvisi di Lint. Uno di questi è chiamato "Ignora nel file". Questo dovrebbe aiutare, ma solo se Lint assegna l'errore al tuo file "US". Quel pulsante modifica semplicemente il file lint.xml nel tuo progetto, quindi puoi investigare (e annullare) facilmente.

Maggiori informazioni su che la soppressione specifica del file sono al http://tools.android.com/tips/lint/suppressing-lint-warnings

26

ho trovato una soluzione migliore in base a questa risposta: https://stackoverflow.com/a/13797364/190309

Basta aggiungere ignore="MissingTranslation" al vostro string.xml, ad esempio:

<?xml version="1.0" encoding="utf-8"?> 
<resources 
    xmlns:tools="http://schemas.android.com/tools" 
    tools:ignore="MissingTranslation" > 

    <!-- your strings here; no need now for the translatable attribute --> 

</resources> 
+3

L'OP ha chiesto specificamente una soluzione che ignora solo * alcune * traduzioni mancanti. Questa soluzione si applica a tutto in un determinato file. – String

6

Lint supporta le traduzioni regionali parziali, ma deve sapere quale lingua sono le stringhe predefinite. In questo modo, è in grado di distinguere una traduzione regionale parziale da traduzioni mancanti in una diversa localizzazione.

Per specificare il locale in values/strings.xml:

<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="en"> 

Da lint:

Per impostazione predefinita questo rilevatore permette regioni di un linguaggio per fornire solo un sottoinsieme delle stringhe e ricadere al stringhe di linguaggio standard. [...]

Si può dire lint (e altri strumenti), che la lingua è la lingua predefinita nella tua res/valori/cartella specificando strumenti: locale = "languageCode" per l'elemento principale nel file di risorse .(Il prefisso di strumenti si riferisce alla dichiarazione del namespace http://schemas.android.com/tools.)

Aggiungere la specifica locale al file lingua di default, e non si dovrebbe ottenere quell'errore per en-rUS, ma sarà ancora essere informato su eventuali altre traduzioni mancanti .

+2

Grazie, questa dovrebbe essere la risposta corretta. –

40

Un bel modo per disattivare il controllo MissingTranslations consiste nell'aggiungere l'opzione nel file build.gradle specifico del modulo.

android { 

lintOptions{ 
     disable 'MissingTranslation' 
    } 
//other build tags 
} 

Se le stringhe non sono presenti nel locale di file stringhe specifiche, ci vorranno le stringhe dal file di default, che in genere è strings.xml.

+0

Si noti che questo disabiliterà tutti gli avvisi/errori * all * MissingTranslation, quindi non si otterranno falsi positivi per 'en-rUS' che sovrascrive intenzionalmente parzialmente' en', ma non si otterranno dei veri positivi quando alcune altre impostazioni locali sono manca una traduzione – blahdiblah

7

Questo sembra non ancora risposto, quindi vi mostro una soluzione:

Nel file XML predefinito, è possibile definire le stringhe, che non necessitano di traduzioni come segue:

<string name="developer" translatable="false">Developer Name</string> 

Questo stringa non ha bisogno di essere tradotta e lint non si lamenterà di esso sia ...

+0

Questo commuterà il problema agli avvertimenti sulla traduzione di stringhe non trasferibili nelle localizzazioni che dovrebbero fornire una risorsa diversa. – blahdiblah