एंड्रॉइड लिंट से बचें शिकायत नहीं-अनुवादित स्ट्रिंग के बारे में


119

क्या यह निर्दिष्ट करना संभव है कि value-* निर्देशिका के भीतर किसी फ़ाइल में तार जानबूझकर अन्य भाषाओं में अनुवादित नहीं किए गए हैं? मेरे पास स्ट्रिंग्स का एक गुच्छा है जो सभी भाषाओं के लिए सामान्य है और अनुवाद की आवश्यकता नहीं है, इसलिए मैंने निर्देशिका के unlocalized-strings.xmlभीतर एक फ़ाइल बनाई है values। समस्याओं के लिए जाँच करने के लिए एंड्रॉइड लिंट चलाना यह कहता है कि कुछ अनुवाद गायब हैं .. मैं नहीं चाहता इस जाँच को पूरी परियोजना पर निष्क्रिय करने के लिए, मैं इसे केवल कुछ 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
यह देता है 'गैर अनुवाद योग्य संसाधनों को केवल आधार मान / फ़ोल्डर में परिभाषित किया जाना चाहिए।
अनोन

2
और यह सही है। यदि आप एक स्ट्रिंग का अनुवाद नहीं करना चाहते हैं, तो आपको इसे केवल "आधार मान / फ़ोल्डर" में परिभाषित करना चाहिए, जिसका अर्थ है कि अनुवादित मूल्यों / फ़ोल्डर में स्ट्रिंग दर्ज न करें।
लुइस

1
@CyrilLeroux उत्तर अधिक व्यापक है और इसे सही के रूप में चिह्नित किया जाना चाहिए क्योंकि यह एक फाइल में सभी गैर अनुवाद योग्य तार लगाने का विकल्प दिखाता है।
योएल ग्लूश्चैनेडर

यह काम करता है लेकिन मुझे नहीं लगता कि वास्तव में अनुवाद योग्य स्ट्रिंग को चिह्नित करके समस्या को हल करने का सबसे अच्छा तरीका है "बस अनुवाद करने योग्य नहीं" त्रुटि संदेश को दबाने के लिए। हम फिलहाल कुछ स्ट्रिंग्स का अनुवाद नहीं करना चाहते हैं। लेकिन इसका मतलब यह नहीं है कि वे अनुवाद करने योग्य नहीं हैं।
ज़िली फ़ेंग

मैं केवल एक भाषा में स्ट्रिंग करना चाहता हूं और वह है जर्मन (डी) भाषा (डिफ़ॉल्ट अंग्रेजी नहीं) एक। मैंने इसे वहां रखा और जब मैंने रिलीज करने की कोशिश की तो इसने मुझे त्रुटि दी। इस मामले में क्या करना है?
आनल मेहता

228

यह आपकी स्ट्रिंग फ़ाइल में नाम स्थान की 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>

<संसाधन उपकरण: अनदेखा करें = "MissingTranslation"> मुझे त्रुटि पार्सिंग XML दे रहा है: अनबाउंड उपसर्ग
anon58192932

5
यह अच्छा काम करता है लेकिन मुझे Project->Cleanत्रुटियों को निश्चित रूप से दूर करने के लिए जाना था ।
xonya

कम से कम ग्रहण ने हमें सब कुछ अनुवाद करने के लिए मजबूर नहीं किया, जिसमें आईडीएसएक्सएमएल और एनालिटिक्स.एक्सएमएल जैसे अजीब स्ट्रिंग फ़ोल्डर शामिल हैं।
Androidcoder

2
कोड की सिर्फ 2 लाइनों में सभी मुद्दों को हल करने के लिए यह स्वीकार किया जाना चाहिए।
nhoxbypass

153

इसमें जोड़ें build.gradle:

android {
     lintOptions {
        disable 'MissingTranslation'
    }
}

7
ऑटो-जनरेटेड स्ट्रिंग रिसोर्सेज से निपटने के लिए एकमात्र व्यावहारिक समाधान। थैंक्स।
स्क्वीज़ीमो

6
नहीं, यह सवाल पर आधारित नहीं होना चाहिए: "मैं इस परियोजना को पूरी परियोजना पर निष्क्रिय नहीं करना चाहता"
योएल ग्लूशिनैडर

@ जिराफ शेर आपको इसे एक अलग प्रश्न के रूप में पोस्ट करना चाहिए और इसे स्वयं जवाब देना चाहिए, समाधान के लिए धन्यवाद, पहले मुझे इसे मैन्युअल रूप से अक्षम करना था।
दिलजीत

1
इसने पूरे चेक को निष्क्रिय कर दिया जिसे संभव हो तो टाला जाना चाहिए। मैं समझ नहीं पा रहा हूं कि इसके कई वोट क्यों हैं।
तस्मानी

23

वहाँ 3 तरीके हैं जो मुझे पता है:

मूल्य द्वारा संशोधन मूल्य लागू करने के लिए: परिभाषा translatable="false"पर विशेषता सेट करें <string>:

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

यदि आपके पास बहुत सारे संसाधन हैं, जिनका अनुवाद नहीं किया जाना चाहिए, तो आप उन्हें नामित फ़ाइल में रख सकते हैं donottranslate.xmlऔर लिंट उन सभी को गैर-अनुवाद योग्य संसाधनों पर विचार करेगा।

हैकर्स कीबोर्ड प्रोजेक्ट स्रोतों को ब्राउज़ करते समय मैंने एक और तरीका खोजा :
आप donottranslate-अपने संसाधन फ़ाइल में उपसर्ग जोड़ सकते हैं । पिछले उदाहरण की तरह, लिंट उन सभी को गैर-अनुवाद योग्य संसाधनों पर विचार करेगा।
आपके मामले में, आप unlocalized-strings.xmlद्वारा प्रतिस्थापित कर सकते हैं donottranslate-strings.xml। यह काम करने लगता है, लेकिन मुझे इस टिप के लिए कोई दस्तावेज नहीं मिला है।

देखें: एंड्रॉइड टूल्स प्रोजेक्ट साइट: गैर-अनुवाद योग्य स्ट्रिंग्स


क्या यह सच है कि अगर हम फ़ाइल में अपना स्ट्रिंग डालते हैं donottranlate.xml, तो हमें translatable="false"टैग को और जोड़ने की आवश्यकता नहीं है ?
युकेन झोंग

हां। मैं अपने सभी प्रोजेक्ट में donottranslate-strings.xml फ़ाइलों का उपयोग करता हूं। ठीक काम करता है। यह कोशिश करो, यह बहुत उपयोगी है!
सिरिल लेरॉक्स

12

और यहाँ इस घातक लिंट त्रुटि को अक्षम करने के लिए एक Android स्टूडियो समाधान है:

यहां छवि विवरण दर्ज करें


2
यह एक कष्टप्रद त्रुटि हो सकती है, लेकिन यह आपको तब बचा सकता है जब आप गलती से अपनी एक ऐप भाषा में एक नया स्ट्रिंग का अनुवाद करना भूल जाते हैं।
एलाड नवा

2

मुझे लगता है कि लिंट को अक्षम करने के बजाय आपको जो चाहिए, उन्हें विशेषता के साथ चिह्नित करना है

translatable="false"

2

" Donottranslate " (जैसे donottranslate.xml , donottranslate_urls.xml , आदि) के साथ शुरू होने वाले फ़ाइल नाम के साथ एक संसाधन फ़ाइल बनाएँ , और लापता अनुवादों की जाँच करते समय लिंट इसके तारों को पूरी तरह से अनदेखा कर देगा।


1

यदि आप लापता अनुवाद पर लिंट चेकिंग को चालू करना चाहते हैं, तो आप जा सकते हैं

"प्रोजेक्ट गुण -> एंड्रॉइड लिंट वरीयताएँ -> मिसिंगट्रांसलेशन का चयन करें -> स्वेटीच इन सीवियरिटी को अनदेखा करने के लिए"

उम्मीद है कि यह दूसरों को इस समस्या का सामना करने में मदद करता है :)


2
क्या एंड्रॉइड स्टूडियो में ऐसा करने का कोई तरीका है? मैं
lint

1

ऐसा करने का एक और तरीका है कि आप अपने स्ट्रिंग को ग्रेड फ़ाइल में जोड़ सकते हैं, का उपयोग कर resValueया 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

एंड्रॉइड स्टूडियो में चेतावनी से बचने के लिए, प्राथमिकताएं ==> निरीक्षण खोलें, "अपूर्ण अनुवाद" को अनचेक करें। लेकिन यह ग्रैड बिल्ड को प्रभावित नहीं करेगा।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.