$ NON-NLS-1 $ का क्या अर्थ है?


320

ग्रहण स्रोत कोड में, मैंने कुछ '$ NON-NLS-1 $' इस तरह की टिप्पणियों में पाया है:

private String toolTip = ""; //$NON-NLS-1$

इसका क्या मतलब है ?

जवाबों:


370

वे एक चेतावनी पर चुप्पी साधते हैं कि ग्रहण तब निकलता है जब यह स्ट्रिंग शाब्दिक सामना करता है (और शिकायत करने के लिए कॉन्फ़िगर किया गया है)।

विचार यह है कि यूआई संदेशों को स्ट्रिंग शाब्दिक के रूप में एम्बेड नहीं किया जाना चाहिए, बल्कि एक संसाधन फ़ाइल से सॉर्ट किया जाना चाहिए (ताकि उन्हें अनुवादित, प्रूफ किया जा सके, आदि)। नतीजतन, ग्रहण को स्ट्रिंग शाब्दिक का पता लगाने के लिए कॉन्फ़िगर किया जा सकता है, ताकि आप गलती से कोड में अनएक्सटर्नेटेड यूआई तार न छोड़ें; हालाँकि, ऐसे तार हैं, जिन्हें बाह्यीकृत नहीं किया जाना चाहिए (जैसे रेगेक्स) और इसलिए, // $ NON-NLS-1 $ आपको संकलक को उस तथ्य को संप्रेषित करने का एक तरीका देता है।


10
तो, एनएलएस किस लिए खड़ा है?
मेट्रिक्सफ्रॉग

39
@ मेट्रिक्सफ्रॉग "नेशनल लैंग्वेज सपोर्ट" प्रतीत होता है, कम से कम इसे यहाँ संदर्भित करने के लिए: msdn.microsoft.com/en-us/library/ms906482.aspx
डैनियल डिकिसन

23
मूल्यांकन करने के लिए, मुझे लगता है कि ऐसे आईडीई-विशिष्ट मार्करों का उपयोग नहीं किया जाना चाहिए, अगर कोड को अलग-अलग वातावरण में बदल दिया जाए। जबकि मार्कर कोई नुकसान नहीं पहुंचाता है, लेकिन यह कोड को बंद कर देता है और इसे बनाए रखना थोड़ा मुश्किल हो जाता है।
मिग

4
तो, आप स्ट्रिंग लिटरल्स का पता लगाने के लिए एक्लिप्स को कैसे कॉन्फ़िगर करते हैं, ताकि लापता // $ NON-NLS-1 $ एक चेतावनी या एसएमएस बढ़ाए?
rpr

3
नेटबियंस प्लेटफ़ॉर्म उसी उद्देश्य के लिए // NOI18N टिप्पणी कीवर्ड का उपयोग करता है
मैट

57

स्ट्रिंग अनुवाद योग्य नहीं है। यह ग्रहण संपादक को स्ट्रिंग को ध्वजांकित न करने के लिए कहता है। यह बहुभाषी अनुप्रयोगों के लिए महत्वपूर्ण है।


8
झंडा एनओएन एनएलएस (कोई राष्ट्रीय भाषा समर्थन) क्यों कहा जाता है, इसकी अच्छी व्याख्या। धन्यवाद।
कादज़िया

28

NON-NLSइसका मतलब है गैर - एन एटियल एल एनगेज एस यूपोर्ट
विकिपीडिया भी गैर - एन एटिव एल एनगेज एस यूटेक (एनएलएस) का प्रस्ताव करता है, लेकिन यह अंतिम उपयोग नहीं किया जाता है।

एनएलएस आपके आवेदन का अंतर्राष्ट्रीयकरण करने के बारे में है। ग्रहण आपके कोड में हार्ड-कोडिंग स्ट्रिंग्स का पता लगाने में मदद करता है। इंगित करने के लिए एक स्ट्रिंग अंतर्राष्ट्रीयकरण का हिस्सा नहीं है, टिप्पणी को जोड़ दें //$NON-NLS-x$जहां x स्ट्रिंग की स्थिति है। निम्नलिखित उदाहरण पर दोनों "!"कठिन-कोडित तार हैं जो अंतर्राष्ट्रीयकरण का हिस्सा नहीं हैं:

 public String foo(String key) { 
   return "!" + key + "!"; //$NON-NLS-1$ //$NON-NLS-2$ 
 } 

टिप्पणियाँ:

  • //हर बार अग्रणी आवश्यक है
  • $NON-NLS$एक ही पंक्ति में कई स्ट्रिंग्स के लिए कोई वैश्विक नहीं
    (जैसे यदि आपकी लाइन में छह तार हैं, तो आपको छह बार लिखना होगा //$NON-NLS-x$)

पुस्तक EMF: एक्लिप्स मॉडलिंग फ्रेमवर्क 250 पृष्ठ पर कहती है:

नॉन-एनएलएस मार्कर- एक्लिप्स के जावा कंपाइलर में नेशनल लैंग्वेज सपोर्ट (एनएलएस) को सक्षम बनाने के लिए गैर-बाहरी तारों को एक चेतावनी या त्रुटि के रूप में चिह्नित करने की क्षमता है। ईएमएफ-जनरेट कोड उन संदेशों के लिए कठोर कोडिंग स्ट्रिंग्स का उपयोग नहीं करता है जो उपयोगकर्ता देखेंगे; हालाँकि, स्ट्रिंग शाब्दिक अक्सर दिखाई देते हैं, उदाहरण के लिए, एक संपत्ति फ़ाइल में बाहरी स्ट्रिंग्स की तलाश के लिए कुंजी। यह गुण नियंत्रित करता है कि क्या उन टिप्पणियों को शामिल करना है जो उन शाब्दिकों को गैर-अनुवाद योग्य के रूप में चिह्नित करते हैं, ताकि संकलक उन्हें ध्वजांकित न करें।

अधिक जानकारी के लिए , जेनरेटर जीयूआई और अपने ग्रहण प्लग-इन का अंतर्राष्ट्रीयकरण कैसे करें , यह भी देखें ।

आप इस सुविधा को सक्षम / अक्षम कर सकते हैं। ग्रहण नियॉन पर जाएं
Project > Properties > Java Compiler > Errors/Warnings
और क्षेत्र का चयन करें
Non-externalized strings (missing/unused $NON-NLS$ tag)

ग्रहण पर परियोजना के गुणों की खिड़की


14

अगर आप Android डेवलपर हैं। आपके द्वारा देखे जा सकने वाले सभी स्ट्रिंग को संसाधन फ़ाइल /res/values/strings.xml में होना चाहिए ताकि आप R.string उपयोग करने वाले कोड में strings.xml फ़ाइल पढ़ सकें .. टैग जोड़कर // $ NON-NLS- $ आप हैं यह देखते हुए कि स्ट्रिंग उपयोगकर्ताओं द्वारा नहीं देखी जाएगी।

ग्रहण हेलियोस में चेतावनी को चालू किया जा सकता है Window -> preferences -> java -> Compiler -> code style -> "Non-externalized Strings (missing/unused &NON-NLS$ tag)

यदि आप अपनी गतिविधि को बहु-भाषा बनाने की योजना बना रहे हैं, तो इसे चालू करने की सिफारिश की जाएगी। और फिर उन स्ट्रिंग को & NON-NLS $ टैग को जोड़ना जो आपके लिए आंतरिक हैं। यदि आप चेतावनी या त्रुटि पर राइट क्लिक करते हैं, तो एक्लिप्स में एक्लिप्स $ NON- एनएलएस $ टैग जोड़ देगा।


9

इसका उपयोग ग्रहण द्वारा यह इंगित करने के लिए किया जाता है कि किसी स्ट्रिंग का अनुवाद करने की आवश्यकता नहीं है, शायद इसलिए कि यह एप्लिकेशन के उपयोगकर्ताओं द्वारा नहीं देखा जाएगा।


अनुवाद किए जाने पर कुछ तार ठीक से काम नहीं करते हैं। यदि स्ट्रिंग स्ट्रिंग, HTML / XML टैग, रेगेक्स आदि का प्रतिनिधित्व करती है, तो वे प्रोग्राम के व्यवहार को बदल सकते हैं।
यिंगटेड

5

यह संकलक को गैर-बाहरी स्ट्रिंग के बारे में शिकायत नहीं करने के लिए कहता है, और इसे स्थानीयकरण की आवश्यकता नहीं है।


4
मुझे नहीं लगता कि यह संकलक है, मुझे लगता है कि यह ग्रहण है जो शिकायत करता है।
पॉल टॉम्बलिन

6
ग्रहण का JDT के हिस्से के रूप में इसका अपना कंपाइलर है जो इस तरह की चीजों के लिए इसका उपयोग करता है। तो हाँ यह संकलक (वैसे भी ग्रहण का संकलक) है।
आरोन मेंपा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.