Não é possível definir o idioma padrão no Android Studio


8

Estou recebendo avisos no Android Studio sobre cadeias de caracteres não traduzidas - está me dizendo que elas não foram traduzidas para o inglês. Parece ser porque eu tenho uma pasta de recursos "en-rGB". Mas tentei seguir as instruções no lint para especificar o idioma padrão, mas isso não funcionou.

Eu tenho os seguintes arquivos 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: não deve haver avisos, as duas strings são traduzidas para inglês e francês

Resultado real: o Lint avisa sobre string2, dizendo que não está traduzido para o inglês.

Note que incluí o fr-rCA para mostrar que não é uma coisa regional. É uma satisfação que, desde que seja traduzido para o francês "não-regulamentado", ele também não precise ser traduzido para o francês-canadense. Nesse caso, ele não avisará sobre string1, mesmo que não tenha sido traduzido para o francês canadense, porque já foi traduzido para o francês.

Não consigo alterar a pasta principal de recursos para inglês ( values-en), pois isso resultará em erros que não existem recursos padrão. Que é verdade.

Não quero suprimir o aviso em geral, porque pretendo adicionar outros idiomas e quero que o aviso apareça para strings que não são traduzidas para outros idiomas que eu incluí.

O que estou procurando é a maneira correta de informar o fiapo do idioma padrão. Fiz isso de acordo com as instruções do aviso "Tradução incompleta":

Você pode informar ao lint (e outras ferramentas) qual idioma é o idioma padrão em sua pasta res / values ​​/, especificando ferramentas: locale = "languageCode" para o elemento raiz no seu arquivo de recursos. (O prefixo das ferramentas refere-se à declaração de namespace http://schemas.android.com/tools .)

Mas isso não parece funcionar. Estou fazendo errado ou isso é um problema do fiapo?


É estranho que você tenha 2 seqüências padrão, mas apenas uma de cada sequência é traduzida para outro idioma da região. Eu acho que o erro é gerado por não ter string2 nos seus valores en-rGB adicionados.
C.Schone

1
Eu segundo o que o @ C. Schone disse. Basta copiar a string2 padrão para en-rGB, pois eles acabam iguais, o que deve fazer o seu aviso. A melhor maneira que eu iria sobre as traduções é que todos os strings.xmlarquivos devem ter todas as entradas como padrão values/strings.xml, independentemente se o valor faz tradução necessidade ou não.
ahasbini

1
@ahasbini Basta copiar o string2 padrão para o en-rGB, pois eles acabam iguais, o que é fácil aqui, porque é apenas 1 string e apenas 1 outro idioma que precisa. Imagine 100 strings e 20 idiomas
Tim

imho, eu ainda faria isso usando uma ferramenta diff. Como, eventualmente, todas as entradas precisam existir em todos os arquivos de sequência, eu classificaria as entradas por nome (não valor) em todos os arquivos e, em seguida, com uma ferramenta diff, tenho o arquivo padrão e o arquivo específico do idioma abra para encontrar entradas ausentes e copie-as com os valores padrão. Pode-se também escrever um pequeno pedaço de código para fazer isso, mas eu consideraria isso apenas uma vez e, portanto, faria isso usando uma ferramenta de diferenciação disponível como o WinMerge ou outros
ahasbini

todas as entradas precisam ser existente em todos os arquivos de corda só as necessidades de arquivo padrão para conter todas as cordas
Tim

Respostas:


6

É um bug: https://issuetracker.google.com/issues/142590628

Eu tenho um hotfix para você: Copiar automaticamente values/strings.xmlna values-enpasta

1. Crie uma values-enpasta

2. Cole-o emapp/build.gradle

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

preBuild.dependsOn copyEnResource

Demo:

Problemas com o estúdio de tradução do Android


Obrigado, vou tentar. É um pouco estranho, mas enquanto ele é automatizado Eu acho que não deve ser demasiado de um problema de manutenção
richjhart

Finalmente comecei a tentar isso - funciona muito bem
richjhart
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.