studio - Evite Android Lint se queja de cadena no traducida
que es android studio (10)
¿Es posible especificar que las cadenas en un archivo dentro de los directorios value-*
no se traducen intencionalmente a otros idiomas? Tengo un conjunto de cadenas que son comunes para todos los idiomas y no necesito traducción, así que he creado un archivo unlocalized-strings.xml
dentro del directorio de values
. Ejecutando Android Lint para verificar si hay problemas, sigue diciendo que faltan algunas traducciones. .. No quiero desactivar este control en todo el proyecto, me gustaría desactivarlo solo en algunos archivos XML ... ¿es posible?
"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.
¿Cómo se puede definir esta región de cadenas no localizadas ?
Agregar a build.gradle
:
android {
lintOptions {
disable ''MissingTranslation''
}
}
Cree un archivo de recursos con un nombre de archivo que comience con " donottranslate " (por ejemplo, donottranslate.xml , donottranslate_urls.xml , etc.), y lint ignorará por completo sus cadenas cuando compruebe si faltan traducciones.
Creo que lo que necesitas en lugar de deshabilitar la pelusa es marcarlos con un atributo
translatable="false"
Es el atributo de ignore
del espacio de nombres de las tools
en su archivo de cadenas, de la siguiente manera:
<?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>
Hay 3 formas que conozco:
Para aplicar el valor de modificación por valor: Establezca el atributo translatable="false"
en la definición de <string>
:
<string name="account_setup_imap" translatable="false">IMAP</string>
Si tiene muchos recursos que no deberían traducirse, puede colocarlos en un archivo llamado donottranslate.xml
y lint los considerará todos como recursos no traducibles.
Otra forma que descubrí mientras buscaba fuentes de proyectos de Hackers Keyboard :
Puede agregar el prefijo donottranslate-
a su archivo de recursos. Como en el ejemplo anterior, lint considerará todos ellos recursos no traducibles.
En su caso, puede reemplazar unlocalized-strings.xml
por donottranslate-strings.xml
. Parece que funciona, pero no he encontrado ninguna documentación para este consejo.
Ver: sitio de proyecto de Android Tools: cadenas no traducibles
No sé cómo ignorar todo el archivo, pero puedes hacerlo cadena por cadena usando:
<string name="hello" translatable="false">hello</string>
buena suerte
Otra forma de hacerlo es agregar su cadena al archivo gradle, usando resValue
o buildConfigField
. Algo como eso:
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"
}
}
Usos:
// buildConfigField
BuildConfig.APP_NAME1
// resValue
getString(R.string.app_name2)
Para evitar advertencias en Android Studio, abra Preferences ==> Inspections, desmarque "Incomplete translations". Pero no afectará la compilación de Gradle.
Si desea pasar la verificación de pelusas en la traducción que falta, puede ir
"Propiedades del proyecto -> Preferencias de Android Lint -> Seleccionar la traducción faltante -> Swtich para ignorar en gravedad",
Espero que esto ayude a los demás porque yo acabo de encontrar este problema :)
Y aquí hay una solución de Android Studio para deshabilitar este error fatal de Lint: