Android Lintが翻訳されていない文字列について文句を言うのを避ける


119

value-* ディレクトリ内のファイルの文字列が意図的に他の言語に翻訳されないように指定することは可能ですか?すべての言語に共通で翻訳が不要な文字列がたくさんあるので、unlocalized-strings.xmlディレクトリ内にファイルを作成しましたvalues。AndroidLintを実行して問題をチェックすると、一部の翻訳が欠落していると表示され続けます。プロジェクト全体でこのチェックを無効にするには、一部のXMLファイルでのみ無効にしたいのですが、可能ですか?

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

ローカライズされていない文字列のこの領域をどのように定義できますか?


回答:


159

すべてのファイルを無視する方法はわかりませんが、次のように文字列ごとに実行できます。

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

1
これにより、「翻訳不可能なリソースはベース値/フォルダーでのみ定義する必要があります。
anon58192932 2013年

2
そして、それは正しいです。文字列を翻訳したくない場合は、「基本値/フォルダー」でのみ定義する必要があります。つまり、翻訳された値/フォルダーに文字列を入力しないでください。
Luis

1
@CyrilLerouxの回答はより包括的であり、翻訳できないすべての文字列を1つのファイルに入れるオプションを示しているため、正しい回答としてマークする必要があります。
Yoel Gluschnaider、2016年

これは機能しますが、実際に翻訳可能な文字列を「翻訳不可」とマークしてエラーメッセージを抑制するだけで問題を解決する最良の方法はないと思います。しばらくの間、一部の文字列を翻訳しないことを選択します。しかし、それは翻訳できないという意味ではありません。
Zili FENG

文字列を1つの言語だけにしたいのですが、それはドイツ語(de)言語(デフォルトの英語ではありません)です。私はそれをそこに置き、ビルドをリリースしようとするとエラーが発生しました。この場合はどうしますか?
Aanal Mehta

227

これignoreは、tools次のように、stringsファイルの名前空間の属性です。

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

<resources tools:ignore = "MissingTranslation">がエラー解析XMLを提供しています:バインドされていないプレフィックス
anon58192932

5
これはうまく機能しますがProject->Clean、間違いなくエラーを削除するために行かなければなりませんでした。
xonya 2013

少なくともeclipseでは、ids.xmlやanalytics.xmlなどの奇妙な文字列フォルダーを含むすべてを翻訳するように強制されませんでした。
Androidcoder 2015年

2
これは、たった2行のコードですべての問題を解決するための受け入れられる答えです。
nhoxbypass 2017

153

追加build.gradle

android {
     lintOptions {
        disable 'MissingTranslation'
    }
}

7
自動生成された文字列リソースを処理するための唯一の実行可能なソリューション。ありがとう。
SqueezyMo 2015年

6
いいえ、「プロジェクト全体でこのチェックを無効にしたくない」という質問に基づいて、そうすべきではありません
Yoel Gluschnaider

@Giraffe Lionこれを別の質問として投稿し、自分で回答する必要があります。解決策をありがとう、以前は手動で無効にする必要がありました。
Diljeet 2017年

1
これにより、可能であれば回避する必要のあるチェック全体が無効になりました。なぜこれほど票が多いのか理解できません。
tasomaniac

23

私が知っている方法は3つあります。

値ごとに変更値を適用するには:定義に属性translatable="false"を設定します<string>

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

翻訳してはいけないリソースがたくさんある場合は、名前を付けたファイルにそれらを配置するdonottranslate.xmlと、lintはそれらすべてを翻訳不可能なリソースと見なします。

ハッカーキーボードプロジェクトのソースを閲覧しているときに発見した別の方法:リソースファイルに
プレフィックスdonottranslate-を追加できます。前の例と同様に、lintはそれらすべてを翻訳不可能なリソースと見なします。
あなたのケースでは、あなたは置き換えることができますunlocalized-strings.xmlによってdonottranslate-strings.xml。動作するようですが、このヒントのドキュメントは見つかりませんでした。

参照:Android Tools Project Site:Non-translateable Strings


文字列をファイルdonottranlate.xmlに配置すると、translatable="false"タグを追加する必要がなくなるのは本当ですか?
Yuchen Zhong

うん。私はすべてのプロジェクトでdonottranslate-strings.xmlファイルを使用しています。正常に動作します。それを試してください、それは非常に便利です!
Cyril Leroux、2016年

12

そして、これがこの致命的なLintエラーを無効にするためのAndroid Studioソリューションです。

ここに画像の説明を入力してください


2
煩わしいエラーになる可能性がありますが、誤って新しい文字列をアプリの言語の1つに翻訳するのを忘れた場合に、それを節約できます。
Elad Nava、2015年


2

donottranslate」で始まるファイル名でリソースファイルを作成します(たとえば、donottranslate.xmldonottranslate_urls.xmlなど)。lintは、欠落している翻訳をチェックするときにその文字列を完全に無視します。


1

欠けている翻訳の糸くずチェックをオフにしたい場合は、

"プロジェクトのプロパティ-> Android Lint設定-> MissingTranslationを選択->重大度で無視するSwtich"、

これが他の人に私がこの問題に遭遇する原因となることを願っています:)


2
Android Studioでそれを行う方法はありますか?lintに関連する設定が見つかりません
でした

1

これを行う別の方法は、resValueまたはを使用して、gradleファイルに文字列を追加することですbuildConfigField。そんな感じ:

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

使用法:

// buildConfigField
BuildConfig.APP_NAME1

// resValue
getString(R.string.app_name2)

0

Android Studioでの警告を回避するには、[設定] ==> [検査]を開き、[翻訳が不完全]をオフにします。ただし、Gradleのビルドには影響しません。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.