web-dev-qa-db-ja.com

Android Lint:一部のデフォルト翻訳のみを意図的にオーバーライドする地域ロケール文字列ファイルで欠落している翻訳警告を無視する方法は?

LintがMissingTranslationについて文句を言うことなく、別のリソースファイルですべてではなく一部の文字列を翻訳することは可能ですか?

たとえば、アプリの文字列はすべてres/values/strings.xmlにあります。文字列の1つは

<string name="postal_code">Postal Code</string>

「郵便番号」は通常、米国では「郵便番号」と呼ばれるため、別のリソースres/values-en-rUS/strings.xmlをコンテンツとともに追加します。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="postal_code">Zip Code</string>
</resources>

ただし、Lintはvalues/strings.xmlにある他の文字列について文句を言いますが、values-en-rUS/strings.xmlにはありません。

values/strings.xmltools:ignoreを指定することで、警告を抑制できることを理解しています。しかし、これは望ましくありません。別の言語に翻訳するとき、Lint警告は実際に役立つからです。

代わりに、values-en-rUS/strings.xmlファイルの警告を抑制して、欠落している翻訳を探すときにそのファイルを基準として使用しないようにリントに指示することは可能ですか?

35
Steveo

MissingTranslationsチェックを無効にする良い方法は、モジュール固有のbuild.gradle fileにオプションを追加することです。

Android {

    lintOptions{
        disable 'MissingTranslation'
    }

    //other build tags
}

ロケール固有の文字列ファイルに文字列が存在しない場合、通常はstrings.xmlであるデフォルトファイルから文字列を取得します。

60
Nicks

私はこの答えに従ってより良い解決策を見つけました: https://stackoverflow.com/a/13797364/190309

ignore="MissingTranslation"string.xmlに追加するだけです。例えば:

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

Lintは部分的な地域翻訳をサポートしていますが、デフォルトの文字列がどの言語であるかを知る必要があります。そのようにして、異なるロケールで部分的な地域の翻訳と欠落している翻訳を区別できます。

values/strings.xmlでロケールを指定するには:

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

リントから:

デフォルトでは、このディテクタは言語の領域が文字列のサブセットを提供し、標準言語文字列にフォールバックすることを許可します。 [...]

リソースファイルのルート要素にtools:locale = "languageCode"を指定すると、lint(およびその他のツール)がres/values /フォルダーのデフォルト言語であるかどうかを確認できます。 (ツールのプレフィックスは名前空間宣言を指します http://schemas.Android.com/tools 。)

ロケール仕様をデフォルトの言語ファイルに追加すると、en-rUSのエラーは表示されないはずですが、それ以外の翻訳がない場合は通知されます。

17
blahdiblah

これはまだ回答されていないようですので、1つの解決策を示します。

DEFAULT xmlファイルでは、次のような翻訳を必要としない文字列を定義できます。

<string name="developer" translatable="false">Developer Name</string>

この文字列を翻訳する必要はなく、lintも文句を言うことはありません...

14
prom85

これはスイスのナイフの答えですので、あなたがいる状況に応じて、欠落している翻訳メッセージを無視できます:

  • すべてのMissingTranslationメッセージを無視します。

    build.gradleファイルを編集します。

    Android {
        lintOptions{
            disable 'MissingTranslation'
        }
    }
    
  • 具体的なresources.xmlファイル内のすべてのMissingTranslationメッセージを無視します。

    <?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>
    
  • 1つの文字列のみのMissingTranslationメッセージを無視します。

    <string name="developer" translatable="false">Developer Name</string>
    
5
xarlymg89

Eclipseを使用している場合は、Lint警告ビューのツールバーボタンをご覧ください。それらの1つは「ファイル内で無視」と呼ばれます。これは役立つはずですが、Lintがエラーを「US」ファイルに割り当てた場合のみです。このボタンはプロジェクトのlint.xmlファイルを変更するだけなので、簡単に調査(および元に戻す)できます。

そのファイル固有の抑制の詳細は http://tools.Android.com/tips/lint/suppressing-lint-warnings にあります。

0
Bananeweizen