value-*
ディレクトリ内のファイル内の文字列が意図的に他の言語に翻訳されないことを指定することは可能ですか?すべての言語に共通の文字列がたくさんあり、翻訳する必要がないので、values
ディレクトリ内にunlocalized-strings.xml
ファイルを作成しました。Android Lintを実行して問題をチェックします一部の翻訳が欠落していると言われ続けます。プロジェクト全体でこのチェックを無効にしたくありません。一部の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.
これをどのように定義できますか領域 of 非ローカライズ文字列?
すべてのファイルを無視する方法はわかりませんが、次を使用して文字列ごとに行うことができます:
<string name="hello" translatable="false">hello</string>
次のように、文字列ファイルのignore
名前空間のtools
属性です。
<?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>
build.gradle
に追加:
Android {
lintOptions {
disable 'MissingTranslation'
}
}
私が知っている3つの方法があります:
値ごとに変更値を適用するには:translatable="false"
定義に<string>
属性を設定します。
<string name="account_setup_imap" translatable="false">IMAP</string>
翻訳すべきでないリソースがたくさんある場合は、それらをdonottranslate.xml
という名前のファイルに配置すると、lintはそれらすべてを翻訳不可能なリソースと見なします。
ブラウジング中に発見した別の方法 Hackers Keyboard project sources :
プレフィックスdonottranslate-
をリソースファイルに追加できます。前の例のように、lintはそれらすべてを翻訳不可能なリソースと見なします。
あなたの場合、unlocalized-strings.xml
をdonottranslate-strings.xml
に置き換えることができます。動作しているようですが、このヒントのドキュメントは見つかりませんでした。
そして、この致命的なLintエラーを無効にするためのAndroid Studioソリューションがあります。
「donottranslate」で始まるファイル名でリソースファイルを作成します(例donottranslate.xml、donottranslate_urls.xmlなど)、lintは欠落している翻訳をチェックするとき、その文字列を完全に無視します。
Lintを無効にする代わりに必要なのは、属性でマークすることだと思います
translatable="false"
もう1つの方法は、resValue
またはbuildConfigField
を使用して、文字列をgradleファイルに追加することです。そんな感じ:
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)
欠落している翻訳のリントチェックをオフにしたい場合は、
「プロジェクトのプロパティ-> Android Lint設定-> MissingTranslationを選択->重大度を無視するSwtich」、
これが他の人に私がこの問題に遭遇するのを助けることを願っています:)
「翻訳エディター」もあります(string.xmlを右クリックして「翻訳エディターを開く」)。
次に、文字列の[翻訳不可]ボックスをオンにします。
https://developer.Android.com/studio/write/translations-editor
Android Studioで警告が表示されないようにするには、[設定] ==> [検査]を開き、[不完全な翻訳]のチェックを外します。ただし、Gradleビルドには影響しません。