2013-04-25 23 views
5

Ho un app tradotto in 3 lingue: inglese, tedesco, polaccoCome evitare arresti anomali dovuti a voci di stringa mancanti?

Così ho queste tre cartelle per le lingue del progetto:

values 
strings.xml 

values-en 
strings.xml 

values-de 
strings.xml 

values-pl 
strings.xml 

ho capito che se ho messo tutte le stringhe in cartella valori e alcune stringhe mancanti nella versione polacca che l'app si arresta in modo anomalo quando accede alle stringhe mancanti nella versione polacca.

Mi sarei aspettato che il sistema recuperi la stringa dalla cartella dei valori predefiniti se non la trova nella cartella values-pl.

C'è un modo per intercettare questi potenziali arresti anomali delle stringhe mancanti? Anche se potessi ottenere un avvertimento nel compilatore che la stringa in qualsiasi lingua manchi sarebbe OK?

EDIT e l'aggiunta

Infatti un'altra stringa mancava nel predefinito troppo .... così, grazie per la risposta/commenti!

Ma ora ho anche testato il caso in cui manca una stringa semplicemente nel file strings.xml predefinito MA PRESENTE in tutti gli altri file. Non ricevo alcun avvertimento o altro.

Quindi in questo caso se TUTTE le stringhe sono presenti in de, en, pl, ma manca una di default, ad esempio l'app si arresta in modo anomalo in Cina (capisco ovviamente perché manca l'impostazione predefinita).

MA ciò che mi dà fastidio è che non trovo alcun modo per verificare la completezza di tutte le stringhe di riferimento nel codice. Questo è il modo accedo la stringa mancante:

context.getString(R.string.MYTRING_abc), 
+0

Dalle mie expiriens se ci sono stringhe manca il progetto non compila. Sto usando eclipse juno. – NickF

+0

Se testate la vostra app, in tutte le lingue disponibili, non dovreste fare questa domanda. Per me non ha senso, perché non ci si assicura, che le stringhe siano disponibili prima di pubblicare la tua app. Non tutte le eccezioni dovrebbero essere catturate, dovrebbero essere affrontate prima che possano accadere. – Darwind

+1

"Ho un'app tradotta in 3 lingue: inglese, tedesco, polacco" - no, hai la tua app tradotta in quattro lingue: inglese, tedesco, polacco e qualsiasi altra lingua si trovi nella tua directory 'res/values ​​/'. Se hai veramente la tua app tradotta in tre lingue, allora una di quelle lingue deve spostarsi in 'res/values ​​/'. Vuoi 'res/values ​​/' per avere il valore di default per ogni risorsa stringa, in qualunque cosa tu voglia considerare come lingua predefinita. – CommonsWare

risposta

3

Nel menu di Eclipse Window --> Properties --> Android --> Lint Error Checking nella sezione Correctness:Messages impostato MissingTranslation per errore nella casella Severity. Quando si compila nei valori predefiniti, string.xml, ogni stringa non tradotta viene contrassegnata. Per la maggior parte del tempo dopo la compilazione è necessario fare clic sunella finestra Link Warnings (accanto a Outline window) per visualizzare questi errori.
Se c'è un errore dopo averli risolti, è necessario pulire il progetto, altrimenti Eclipse non verrà compilato e mostrerà ancora questi errori.

+0

grazie Ho verificato che - il mio è impostato su fatale – user387184

2

Mi sarei aspettato che il sistema recuperi la stringa dalla cartella dei valori predefiniti se non la trova nella cartella values-pl.

Funziona in questo modo per <string> s, ma non per gli elementi di <string-array> s. Se una delle traduzioni ha un <string-array> senza il numero corretto di elementi, si verificherà un arresto anomalo se l'app tenta di accedere a un elemento mancante. La mia soluzione negli ultimi due anni è stata quella di memorizzare ogni array di stringhe in un file XML non tradotto, facendo riferimento a stringhe traducibili.

res/Valori/misc.xml:

<?xml version="1.0" encoding="utf-8"?> 
<!-- Resources that are neither styles nor strings to be translated. --> 
<resources> 
    <string-array name="notification_line_content_entries"> 
    <item>@string/time_remaining</item> 
    <item>@string/time_since_status_change</item> 
    <item>@string/vital_signs</item> 
    </string-array> 
</resources> 

questo modo, se una delle stringhe indipendenti non è tradotto, la matrice è ancora valido e ripiegare alla traduzione di default per quel particolare valore.

Naturalmente l'altra possibilità è che, come suggerito nei commenti, non si dispone di una traduzione predefinita per ogni stringa in res/values/.

+0

grazie, è solo una stringa normale e manca nella directory dei valori, ma non c'è nessun avviso o altro! – user387184

0

In Android Studio:

Settings -> Editor -> Inspections -> (search for or find) Incomplete translation 

Imposta per info o warning. Error impedisce la creazione dell'app quando si preme create signed APK.

Nella mia esperienza personale, ottengo questo errore solo quando creo una build (non-debug tramite debug USB, ovvero quando è una build firmata), ma cambiando la traduzione incompleta in warning (così ottengo una notifica che non è 'finito, ma non è ignorato nel caso che ho appena dimenticato) (o info per quello) consente l'applicazione per essere costruito e funziona proprio come in debug in cui le traduzioni incomplete vanno al valore predefinito.

Ma se si verifica l'errore di debug così, questo dovrebbe ancora funzionare e prevenire crash nella creazione APK

Problemi correlati