Gianni Costanzi
Gianni Costanzi

Reputation: 6104

How do I stop Android Lint complaining about not-translated strings?

Is it possible to specify that the strings in a file within the values directoriy are purposely not translated into other languages?

I have a bunch of strings that are common for all the languages and need no translation. I've created an unlocalized-strings.xml file within the values directory. When I run Android Lint to check for problems, it keeps saying that some translations are missing.

I do not want to disable this check on the whole project. I'd like to disable it only in some XML files. Is this possible?

This is the error that I am encountering:

"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.

Upvotes: 130

Views: 69999

Answers (11)

Adil Hussain
Adil Hussain

Reputation: 32103

Add the tools:ignore attribute with a MissingTranslation value in your unlocalized-strings.xml file, as follows:

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

Upvotes: 239

user1010160
user1010160

Reputation: 465

There is also the "Translation editor" (right click on string.xml "Open Translation Editor").

Then check the 'Untranslatable' box on a string.

https://developer.android.com/studio/write/translations-editor

Upvotes: 0

Luis
Luis

Reputation: 12048

I don't know how to ignore all the file, but you can do it string by string using:

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

Upvotes: 165

Giraffe Lion
Giraffe Lion

Reputation: 1649

Add to build.gradle:

android {
     lintOptions {
        disable 'MissingTranslation'
    }
}

Upvotes: 154

heloisasim
heloisasim

Reputation: 5016

Another way to do that is add your string to gradle file, using resValue or buildConfigField. Something like that:

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"
    }
}

Usages:

// buildConfigField
BuildConfig.APP_NAME1

// resValue
getString(R.string.app_name2)

Upvotes: 1

Kai
Kai

Reputation: 15476

Create a resource file with a file name starting with "donottranslate" (e.g. donottranslate.xml, donottranslate_urls.xml, etc), and lint will ignore its strings altogether when checking for missing translations.

Upvotes: 2

Kof
Kof

Reputation: 25253

To avoid warnings in Android Studio, open Preferences ==> Inspections, uncheck "Incomplete translations". But it won't affect Gradle build.

Upvotes: 0

Dzhuneyt
Dzhuneyt

Reputation: 8691

And here is a Android Studio solution for disabling this fatal Lint error:

enter image description here

Upvotes: 13

Cyril Leroux
Cyril Leroux

Reputation: 2629

There are 3 ways that I know of :

To apply the modification value by value : Set the attribute translatable="false" on the <string> definition:

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

If you have a lot of resources that should not be translated, you can place them in a file named donottranslate.xml and lint will consider all of them non-translatable resources.

Another way I discovered while browsing Hackers Keyboard project sources:
You can add the prefix donottranslate- to your resource file. As in the previous example, lint will consider all of them non-translatable resources.
In your case, you can replace unlocalized-strings.xml by donottranslate-strings.xml. It seems to work, but I haven't found any documentation for this tip.

See: Android Tools Project Site: Non-translatable Strings

Upvotes: 23

hctang
hctang

Reputation: 41

If you want to turn of the lint checking on missing translation, you may go

"Project Properties -> Android Lint Preferences -> Select MissingTranslation -> Swtich To Ignore In Severity",

hopes this helps others cause i just encounter this problem :)

Upvotes: 1

Diego Torres Milano
Diego Torres Milano

Reputation: 69188

I think that what you need instead of disabling lint is to mark them with attribute

translatable="false"

Upvotes: 2

Related Questions