Evita che Android Lint si lamenti di stringhe non tradotte


119

è possibile specificare che le stringhe in un file all'interno delle value-* directory non sono volutamente tradotte in altre lingue? Ho un sacco di stringhe comuni a tutte le lingue e non ho bisogno di traduzione, quindi ho creato un unlocalized-strings.xmlfile nella valuesdirectory .. Eseguendo Android Lint per verificare la presenza di problemi continua a dire che mancano alcune traduzioni .. Non voglio per disabilitare questo controllo su tutto il progetto, vorrei disabilitarlo solo in alcuni file XML .. è possibile?

"title_widget_updater_service" is not translated in de, en, en-rUS, it

Issue: Checks for incomplete translations where not all strings are translated
Id: MissingTranslation

If an application has more than one locale, then all the strings declared in one language     
should also be translated in all other languages.

By default this detector allows regions of a language to just provide a subset of the 
strings and fall back to the standard language strings. You can require all regions to 
provide a full translation by setting the environment variable 
ANDROID_LINT_COMPLETE_REGIONS.

Come si può definire questa regione di stringhe non localizzate ?


Risposte:


159

Non so come ignorare tutto il file, ma puoi farlo stringa per stringa usando:

<string name="hello" translatable="false">hello</string>

1
questo dà 'risorse non traducibili dovrebbero essere definite solo nella cartella dei valori di base /.
anon58192932

2
Ed è corretto. Se non si desidera che una stringa venga tradotta, è necessario definirla solo nella "cartella / valori di base", il che significa che non immettere la stringa nella cartella / valori tradotti.
Luis

1
La risposta di @CyrilLeroux è più completa e dovrebbe essere contrassegnata come corretta perché mostra l'opzione di mettere tutte le stringhe non traducibili in un file.
Yoel Gluschnaider

Funziona ma non credo sia il modo migliore per risolvere il problema contrassegnando una stringa effettivamente traducibile "non traducibile" solo per sopprimere il messaggio di errore. Scegliamo solo di non tradurre alcune stringhe per il momento. Ma ciò non significa che non siano traducibili.
Zili FENG

Voglio mettere la stringa in una sola lingua e quella è la lingua tedesca (de) (non quella inglese predefinita). L'ho messo lì e quando provo a rilasciare build mi ha dato un errore. Cosa fare in questo caso?
Aanal Mehta

228

È l' ignoreattributo dello toolsspazio dei nomi nel file di stringhe, come segue:

<?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>

<resources tools: ignore = "MissingTranslation"> mi sta restituendo Error Parsing XML: prefisso non
associato

5
Funziona bene ma dovevo andare a Project->Cleanper rimuovere definitivamente gli errori.
xonya

Almeno eclipse non ci ha costretti a tradurre tutto, comprese le cartelle di stringhe dispari come ids.xml e analytics.xml.
Androidcoder

2
Questa dovrebbe essere una risposta accettata per la risoluzione di tutti i problemi in sole 2 righe di codice.
nhoxbypass

153

Aggiungi a build.gradle:

android {
     lintOptions {
        disable 'MissingTranslation'
    }
}

7
L'unica soluzione praticabile per gestire le risorse di stringa generate automaticamente. Grazie.
SqueezyMo

6
no non dovrebbe, in base alla domanda: "Non voglio disabilitare questo controllo sull'intero progetto"
Yoel Gluschnaider

@ Giraffe Lion dovresti pubblicare questa domanda come una domanda diversa e rispondere tu stesso, grazie per la soluzione, in precedenza dovevo disabilitarla manualmente.
Diljeet

1
Ciò ha disabilitato l'intero controllo che dovrebbe essere evitato se possibile. Non riesco a capire perché abbia così tanti voti.
tasomaniac

23

Ci sono 3 modi che conosco:

Per applicare il valore di modifica in base al valore: impostare l'attributo translatable="false"sulla <string>definizione:

<string name="account_setup_imap" translatable="false">IMAP</string>

Se hai molte risorse che non dovrebbero essere tradotte, puoi inserirle in un file denominato donottranslate.xmle lint considererà tutte risorse non traducibili.

Un altro modo che ho scoperto durante la navigazione nelle fonti del progetto Hackers Keyboard :
puoi aggiungere il prefisso donottranslate-al tuo file di risorse. Come nell'esempio precedente, lint considererà tutte queste risorse non traducibili.
Nel tuo caso, puoi sostituire unlocalized-strings.xmlcon donottranslate-strings.xml. Sembra funzionare, ma non ho trovato alcuna documentazione per questo suggerimento.

Vedere: Sito del progetto Strumenti Android: stringhe non traducibili


È vero che se mettiamo la nostra stringa nel file donottranlate.xml, non abbiamo più bisogno di aggiungere il translatable="false"tag?
Yuchen Zhong

Sì. Uso i file donottranslate-strings.xml in tutto il mio progetto. Funziona bene. Provalo, è molto utile!
Cyril Leroux

12

Ed ecco una soluzione Android Studio per disabilitare questo errore fatale Lint:

inserisci qui la descrizione dell'immagine


2
Potrebbe essere un errore fastidioso, ma potrebbe salvarti quando dimentichi accidentalmente di tradurre una nuova stringa in una delle lingue dell'app.
Elad Nava

2

Penso che ciò di cui hai bisogno invece di disabilitare lint sia contrassegnarli con attributo

translatable="false"

2

Crea un file di risorse con un nome di file che inizia con " donottranslate " (es. Donottranslate.xml , donottranslate_urls.xml , ecc.), E lint ignorerà del tutto le sue stringhe durante il controllo delle traduzioni mancanti.


1

Se vuoi disattivare il controllo della lanugine sulla traduzione mancante, puoi andare

"Proprietà progetto -> Preferenze Android Lint -> Seleziona traduzione mancante -> Swtich da ignorare in gravità",

spera che questo aiuti gli altri perché ho appena incontrato questo problema :)


2
C'è un modo per farlo in Android Studio? Non sono
riuscito

1

Un altro modo per farlo è aggiungere la tua stringa al file gradle, usando resValueo buildConfigField. Qualcosa del genere:

buildTypes {
    debug {
        buildConfigField "string", "app_name1", "App Name"
        resValue "string", "app_name2", "App Name"
    }
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        buildConfigField "string", "app_name1", "App Name"
        resValue "string", "app_name2", "App Name"
    }
}

usi:

// buildConfigField
BuildConfig.APP_NAME1

// resValue
getString(R.string.app_name2)

0

Per evitare avvisi in Android Studio, apri Preferenze ==> Ispezioni, deseleziona "Traduzioni incomplete". Ma non influenzerà la build di Gradle.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.