Hindari Android Lint mengeluh tentang string yang tidak diterjemahkan

119

apakah mungkin untuk menentukan bahwa string dalam file di dalam value-* direktori dengan sengaja tidak diterjemahkan ke dalam bahasa lain? Saya memiliki banyak string yang umum untuk semua bahasa dan tidak memerlukan terjemahan, jadi saya telah membuat unlocalized-strings.xmlfile di dalam valuesdirektori .. Menjalankan Android Lint untuk memeriksa masalah, terus mengatakan bahwa beberapa terjemahan hilang .. Saya tidak mau untuk menonaktifkan pemeriksaan ini di seluruh proyek, saya ingin menonaktifkannya hanya di beberapa file XML .. mungkinkah?

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

Bagaimana bisa didefinisikan ini wilayah dari unlocalized string?

Gianni Costanzi
sumber

Jawaban:

159

Saya tidak tahu cara mengabaikan semua file, tetapi Anda dapat melakukannya string demi string menggunakan:

<string name="hello" translatable="false">hello</string>
Luis
sumber
1
ini memberikan 'sumber daya yang tidak dapat diterjemahkan seharusnya hanya ditentukan dalam nilai dasar / folder.
anon58192932
2
Dan itu benar. Jika Anda tidak ingin string diterjemahkan, Anda harus menetapkannya di "nilai dasar / folder", yang berarti jangan masukkan string di folder / nilai yang diterjemahkan.
Luis
1
Jawaban @CyrilLeroux lebih komprehensif dan harus ditandai sebagai jawaban yang benar karena menunjukkan opsi untuk meletakkan semua string yang tidak dapat diterjemahkan dalam satu file.
Yoel Gluschnaider
Ini berfungsi tetapi menurut saya bukan cara terbaik untuk memecahkan masalah dengan menandai string yang sebenarnya dapat diterjemahkan "tidak dapat diterjemahkan" hanya untuk menekan pesan kesalahan. Kami hanya memilih untuk tidak menerjemahkan beberapa string untuk saat ini. Tapi itu tidak berarti mereka tidak bisa diterjemahkan.
Zili FENG
Saya ingin meletakkan string hanya dalam satu bahasa dan itu bahasa Jerman (de) (bukan bahasa Inggris default). Saya menaruhnya di sana dan ketika saya mencoba merilis build itu memberi saya kesalahan. Apa yang harus dilakukan dalam kasus ini?
Aanal Mehta
228

Ini adalah ignoreatribut toolsnamespace di file string Anda, sebagai berikut:

<?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>
Adil Hussain
sumber
<resources tools: ignore = "MissingTranslation"> memberi saya Error Parsing XML: awalan tak terikat
anon58192932
5
Ini berfungsi dengan baik tetapi saya harus pergi ke Project->Cleanuntuk menghapus kesalahan secara definitif.
xonya
Setidaknya gerhana tidak memaksa kami menerjemahkan semuanya, termasuk folder string aneh seperti ids.xml dan analytics.xml.
Androidcoder
2
Ini harus menjadi jawaban yang diterima untuk menyelesaikan semua masalah hanya dalam 2 baris kode.
nhoxbypass
153

Tambahkan ke build.gradle:

android {
     lintOptions {
        disable 'MissingTranslation'
    }
}
Singa Jerapah
sumber
7
Satu-satunya solusi yang bisa diterapkan untuk menangani sumber daya string yang dibuat secara otomatis.
SqueezyMo
6
tidak seharusnya, berdasarkan pertanyaan: "Saya tidak ingin menonaktifkan pemeriksaan ini di seluruh proyek"
Yoel Gluschnaider
@Giraffe Lion Anda harus memposting ini sebagai pertanyaan yang berbeda dan menjawabnya sendiri, Terima kasih atas solusinya, sebelumnya saya harus menonaktifkannya secara manual.
Diljeet
1
Ini menonaktifkan seluruh pemeriksaan yang harus dihindari jika memungkinkan. Saya tidak mengerti mengapa ada banyak suara.
tasomaniac
23

Ada 3 cara yang saya ketahui:

Untuk menerapkan nilai modifikasi berdasarkan nilai: Atur atribut translatable="false"pada <string>definisi:

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

Jika Anda memiliki banyak sumber daya yang tidak boleh diterjemahkan, Anda dapat menempatkannya dalam sebuah file bernama donottranslate.xmldan lint akan menganggap semua itu sumber daya yang tidak dapat diterjemahkan .

Cara lain yang saya temukan saat menelusuri sumber proyek Keyboard Peretas :
Anda dapat menambahkan awalan donottranslate-ke file sumber daya Anda. Seperti pada contoh sebelumnya, lint akan mempertimbangkan semuanya sebagai sumber daya yang tidak dapat diterjemahkan.
Dalam kasus Anda, Anda dapat mengganti unlocalized-strings.xmldengan donottranslate-strings.xml. Tampaknya berfungsi, tetapi saya belum menemukan dokumentasi apa pun untuk tip ini.

Lihat: Situs Proyek Alat Android: String yang Tidak Dapat Diterjemahkan

Cyril Leroux
sumber
Benarkah jika kita memasukkan string kita ke dalam file donottranlate.xml, kita tidak perlu menambahkan translatable="false"tag lagi?
Yuchen Zhong
Ya. Saya menggunakan file donottranslate-strings.xml di semua proyek saya. Bekerja dengan baik. Cobalah, ini sangat berguna!
Cyril Leroux
12

Dan berikut adalah solusi Android Studio untuk menonaktifkan kesalahan Lint yang fatal ini:

masukkan deskripsi gambar di sini

Dzhuneyt
sumber
2
Ini mungkin kesalahan yang mengganggu, tetapi bisa menyelamatkan Anda ketika Anda secara tidak sengaja lupa menerjemahkan string baru ke salah satu bahasa aplikasi Anda.
Elad Nava
2

Saya pikir yang Anda butuhkan daripada menonaktifkan lint adalah menandainya dengan atribut

translatable="false"
Diego Torres Milano
sumber
2

Buat file sumber daya dengan nama file yang diawali dengan " donottranslate " (mis. Donottranslate.xml , donottranslate_urls.xml , dll), dan lint akan mengabaikan stringnya sama sekali saat memeriksa terjemahan yang hilang.

Kai
sumber
1

Jika Anda ingin menonaktifkan pemeriksaan lint pada terjemahan yang hilang, Anda dapat pergi

"Properti Proyek -> Preferensi Lint Android -> Pilih MissingTranslation -> Swtich Untuk Diabaikan Dalam Tingkat Keparahan",

berharap ini membantu orang lain karena saya baru saja mengalami masalah ini :)

hctang.dll
sumber
2
Apakah ada cara untuk melakukannya di Android Studio? Saya tidak dapat menemukan setelan yang terkait dengan lint
adrian_88
1

Cara lain untuk melakukannya adalah menambahkan string Anda ke file gradle, menggunakan resValueatau buildConfigField. Sesuatu seperti itu:

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

Penggunaan:

// buildConfigField
BuildConfig.APP_NAME1

// resValue
getString(R.string.app_name2)
heloisasim
sumber
0

Untuk menghindari peringatan di Android Studio, buka Preferences ==> Inspections, hapus centang "Terjemahan tidak lengkap". Tapi itu tidak akan memengaruhi build Gradle.

Kof
sumber