No se puede establecer el idioma predeterminado en Android Studio

8

Recibo advertencias en Android Studio sobre cadenas no traducidas; me dice que no se han traducido al inglés. Esto parece ser porque tengo una carpeta de recursos "en-rGB". Pero he tratado de seguir las instrucciones en pelusa para especificar el idioma predeterminado, pero esto no ha funcionado.

Tengo los siguientes archivos strings.xml:

values/strings.xml:

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

    <string name="string1">Howdy</string>
    <string name="string2">Howdy</string>
</resources>

values-en-rGB/strings.xml:

<resources>

    <string name="string1">Hello</string>
</resources>

values-fr/strings.xml:

<resources>

    <string name="string1">Bonjour</string>
    <string name="string2">Bonjour</string>
</resources>

values-fr-rCA/strings.xml:

<resources>

    <string name="string2">Bonjour</string>
</resources>

Resultado esperado: no debe haber advertencias, ambas cadenas están traducidas al inglés y al francés

Resultado real: Lint advertirá sobre string2, diciendo que no está traducido al inglés.

Tenga en cuenta que he incluido fr-rCA para mostrar que no es algo regional. Es feliz que, mientras se traduzca al francés "no mencionado", no sea necesario traducirlo al francés canadiense. En este caso, no advertirá sobre string1, aunque no se haya traducido al francés canadiense, porque ya se ha traducido al francés.

No puedo cambiar la carpeta de recursos principal a inglés ( values-en), ya que eso generará errores de que no hay recursos predeterminados. Cual es verdad.

No quiero suprimir la advertencia en general, porque estoy planeando agregar otros idiomas y SÍ quiero que aparezca la advertencia para cadenas que no están traducidas a otros idiomas que he incluido.

Lo que busco es la forma correcta de informar a pelusa del idioma predeterminado. Lo he hecho según las instrucciones de la advertencia "Traducción incompleta":

Puede decirle a lint (y otras herramientas) qué idioma es el idioma predeterminado en su carpeta res / values ​​/ mediante la especificación de herramientas: locale = "languageCode" para el elemento raíz en su archivo de recursos. (El prefijo de herramientas se refiere a la declaración del espacio de nombres http://schemas.android.com/tools ).

Pero esto no parece funcionar. ¿Lo estoy haciendo mal o es un problema con la pelusa?

richjhart
fuente
Es extraño que tenga 2 cadenas predeterminadas, pero solo una de cada cadena se traduce a otro idioma de región. Supongo que el error se produce al no tener cadena2 en sus valores en-rGB agregados.
C.Schone
1
Secundo lo que dijo @ C.Schone. Simplemente copie el string2 predeterminado en en-rGB ya que terminarán igual, esto debería hacer que su advertencia desaparezca. La mejor manera de hacer las traducciones es que todos los strings.xmlarchivos deben tener todas las entradas como predeterminadas values/strings.xml, independientemente de si el valor necesita traducción o no.
ahasbini
1
@ahasbini Simplemente copie el string2 predeterminado en en-rGB ya que terminarán siendo lo mismo, eso solo es fácil aquí porque solo es 1 string y solo 1 otro idioma que lo necesita. Imagine 100 cadenas y 20 idiomas
Tim
En mi humilde opinión, todavía lo haría usando una herramienta diff. Como eventualmente todas las entradas deben existir en todos los archivos de cadena, ordenaría las entradas por nombre (no valor) en todos los archivos y luego, con una herramienta diff, tendré tanto el archivo predeterminado como el archivo específico del idioma ábralo para encontrar entradas faltantes y cópielas con los valores predeterminados. También se podría escribir un pequeño fragmento de código para hacerlo, pero lo consideraría solo una vez y, por lo tanto, lo haría utilizando una herramienta de diferencia comercial como WinMerge u otros
ahasbini,
todas las entradas deben existir en todos los archivos de cadena, solo el archivo predeterminado debe contener todas las cadenas
Tim

Respuestas:

6

Es un error: https://issuetracker.google.com/issues/142590628

Tengo una revisión para ti: copia automática values/strings.xmlen la values-encarpeta

1. Crear values-encarpeta

2. Péguelo enapp/build.gradle

task copyEnResource {
    copy {
        from ('src/main/res/values/strings.xml')
        into ('src/main/res/values-en/')
    }
}

preBuild.dependsOn copyEnResource

Manifestación:

Problemas de traducción de Android Studio

duongdt3
fuente
Gracias, lo intentaré. Es un poco torpe pero siempre y cuando se automatiza supongo que no debería ser demasiado de un problema de mantenimiento
richjhart
Finalmente pude probar esto - funciona genial
richjhart