Çevrilmemiş dizeyle ilgili Android Lint şikayetlerinden kaçının


119

value-* Dizinlerdeki bir dosyadaki dizelerin kasıtlı olarak başka dillere çevrilmediğini belirtmek mümkün müdür? Tüm diller için ortak olan ve çeviriye ihtiyaç duymayan bir dizi dizem var, bu yüzden dizin unlocalized-strings.xmliçinde bir dosya oluşturdum values.. Sorunları kontrol etmek için Android Lint çalıştırarak bazı çevirilerin eksik olduğunu söyleyip duruyor .. İstemiyorum bu denetimi tüm proje üzerinde devre dışı bırakmak için, bunu sadece bazı XML dosyalarında devre dışı bırakmak istiyorum .. mümkün mü?

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

Yerelleştirilmemiş dizelerden oluşan bu bölge nasıl tanımlanabilir ?


Yanıtlar:


159

Tüm dosyayı nasıl göz ardı edeceğimi bilmiyorum, ancak bunu kullanarak dizgeye göre yapabilirsiniz:

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

1
bu, 'çevrilebilir olmayan kaynaklar sadece temel değerler / klasörde tanımlanmalıdır.
anon58192932

2
Ve bu doğru. Bir dizenin çevrilmesini istemiyorsanız, onu yalnızca "temel değerler / klasör" içinde tanımlamalısınız, yani dizeyi çevrilen değerler / klasöre girmeyin.
Luis

1
@CyrilLeroux yanıtı daha kapsamlıdır ve doğru yanıt olarak işaretlenmelidir çünkü çevrilemeyen tüm dizeleri tek bir dosyaya koyma seçeneğini gösterir.
Yoel Gluschnaider

Bu işe yarıyor, ancak hata mesajını bastırmak için gerçekten çevrilebilir bir dizeyi "çevrilebilir değil" olarak işaretleyerek sorunu çözmenin en iyi yolu olduğunu sanmıyorum. Sadece şimdilik bazı dizeleri tercüme etmemeyi seçiyoruz. Ancak bu, tercüme edilmedikleri anlamına gelmez.
Zili FENG

Dizeyi yalnızca bir dilde koymak istiyorum ve bu Almanca (de) dili (varsayılan İngilizce değil). Oraya koydum ve derlemeyi yayınlamaya çalıştığımda bana hata verdi. Bu durumda ne yapmalı?
Aanal Mehta

228

Aşağıdaki gibi, dizeler dosyanızdaki ad alanının ignoreözniteliğidir 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>

<resource tools: ignore = "MissingTranslation"> bana XML Ayrıştırma Hatası veriyor: ilişkisiz önek
anon58192932

5
Bu iyi çalışıyor ancak Project->Cleanhataları kesin olarak gidermek için gitmem gerekiyordu .
xonya

En azından eclipse bizi ids.xml ve analytics.xml gibi tek dizeli klasörler dahil olmak üzere her şeyi çevirmeye zorlamadı.
Androidcoder

2
Bu, tüm sorunları sadece 2 satır kodla çözmek için kabul edilmelidir.
nhoxbypass

153

Ekle build.gradle:

android {
     lintOptions {
        disable 'MissingTranslation'
    }
}

7
Otomatik oluşturulan dize kaynakları ile uğraşmak için uygulanabilir tek çözüm.
SqueezyMo

6
hayır, şu soruya dayanarak: "Bu kontrolü tüm projede devre dışı bırakmak istemiyorum"
Yoel Gluschnaider

@Giraffe Lion bunu farklı bir soru olarak göndermeli ve kendiniz cevaplamalısınız, Çözüm için teşekkürler, daha önce manuel olarak devre dışı bırakmak zorunda kaldım.
Diljeet

1
Bu, mümkünse kaçınılması gereken tüm kontrolü devre dışı bıraktı. Neden bu kadar çok oy aldığını anlayamıyorum.
tasomaniac

23

Bildiğim 3 yol var:

Değeriyle modifikasyon değerini uygulamak için: niteliğini ayarlayın translatable="false"üzerine <string>tanımı:

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

Çevrilmemesi gereken çok sayıda kaynağınız varsa, bunları adlandırılmış bir dosyaya yerleştirebilirsiniz donottranslate.xmlve lint tüm çevrilemeyen kaynakları dikkate alacaktır.

Hackers Keyboard proje kaynaklarına göz atarken keşfettiğim başka bir yol :
Öneki donottranslate-kaynak dosyanıza ekleyebilirsiniz . Önceki örnekte olduğu gibi, lint bunların hepsini çevrilemeyen kaynakları dikkate alacaktır.
Senin durumda, yerine unlocalized-strings.xmlgöre donottranslate-strings.xml. İşe yarıyor gibi görünüyor, ancak bu ipucu için herhangi bir belge bulamadım.

Bakınız: Android Araçları Proje Sitesi: Çevrilemeyen Dizeler


Dizimizi dosyaya donottranlate.xmlkoyarsak, translatable="false"etiketi eklememize gerek kalmayacağı doğru mu?
Yuchen Zhong

Evet. Tüm projemde donottranslate-strings.xml dosyalarını kullanıyorum. İyi çalışıyor. Deneyin, çok faydalı!
Cyril Leroux

12

Ve işte bu önemli Lint hatasını devre dışı bırakmak için bir Android Studio çözümü:

görüntü açıklamasını buraya girin


2
Can sıkıcı bir hata olabilir, ancak yanlışlıkla yeni bir dizeyi uygulama dillerinizden birine çevirmeyi unuttuğunuzda sizi kurtarabilir.
Elad Nava

2

Lint'i devre dışı bırakmak yerine ihtiyacınız olan şeyin onları nitelik ile işaretlemek olduğunu düşünüyorum.

translatable="false"

2

" Donottranslate " ile başlayan bir dosya adı olan bir kaynak dosyası oluşturun (ör. Donottranslate.xml , donottranslate_urls.xml , vb.) Ve lint, eksik çevirileri kontrol ederken dizelerini tamamen yok sayacaktır.


1

Eksik çeviri ile ilgili tiftik kontrolünü kapatmak istiyorsanız, gidebilirsiniz

"Proje Özellikleri -> Android Lint Tercihleri ​​-> Eksik Çeviriyi Seçin -> Önem Derecesinde Yoksaymak İçin Swtich",

umarım bu başkalarına yardımcı olur çünkü sadece bu problemle karşılaşıyorum :)


2
Bunu Android Studio'da yapmanın bir yolu var mı? Lint ile ilgili ayarları bulamadım
Adrian L

1

Bunu yapmanın başka bir yolu resValueda veya kullanarak dizenizi gradle dosyasına eklemektir buildConfigField. Bunun gibi bir şey:

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)

0

Android Studio'da uyarılardan kaçınmak için Tercihler ==> Denetimler'i açın, "Eksik çeviriler" in işaretini kaldırın. Ancak Gradle yapısını etkilemeyecektir.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.