$ NON-NLS-1 $ หมายถึงอะไร


320

ในซอร์สโค้ด Eclipse ฉันพบ '$ NON-NLS-1 $' บางส่วนในความคิดเห็นที่ใช้เช่นนั้น:

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

นั่นหมายความว่าอย่างไร ?

คำตอบ:


370

พวกเขาปิดเสียงเตือนว่า Eclipse ปล่อยออกมาเมื่อพบสตริงตัวอักษร (และได้รับการกำหนดค่าให้บ่น)

แนวคิดคือไม่ควรฝังข้อความ UI เป็นตัวอักษรของสตริง แต่มีที่มาจากไฟล์ทรัพยากร (เพื่อให้สามารถแปลตรวจสอบและอื่น ๆ ) ดังนั้น Eclipse สามารถกำหนดค่าให้ตรวจจับตัวอักษรของสตริงเพื่อที่คุณจะไม่ได้ทิ้งสตริง UI ที่ไม่ได้ทำให้อยู่ภายนอกในโค้ด อย่างไรก็ตามมีสตริงที่ไม่ควรส่งออก (เช่น regexps) ดังนั้น // // NON-NLS-1 $ จะให้วิธีการสื่อสารความจริงนั้นกับคอมไพเลอร์


10
ดังนั้น NLS หมายถึงอะไร
MatrixFrog

39
@ MatrixFrog ดูเหมือนว่า "National Language Support" อย่างน้อยก็คือสิ่งที่มันอ้างถึงที่นี่: msdn.microsoft.com/en-us/library/ms906482.aspx
Daniel Dickison

23
เพื่อประเมินผลฉันคิดว่าตัวทำเครื่องหมายเฉพาะ IDE นั้นไม่ควรใช้หากมีการเปลี่ยนแปลงรหัสในสภาพแวดล้อมที่แตกต่างกัน ในขณะที่เครื่องหมายไม่ทำอันตรายมันจะตัดโค้ดและทำให้ยากต่อการดูแลเล็กน้อย
migu

4
ดังนั้นคุณจะกำหนดค่า Eclipse เพื่อตรวจจับตัวอักษรของสตริงดังนั้น // // NON-NLS-1 $ ที่หายไปจะทำให้เกิดคำเตือนหรือ smt ได้อย่างไร
rpr

3
แพลตฟอร์ม NetBeans ใช้คำหลักที่แสดงความคิดเห็น // NOI18N เพื่อจุดประสงค์เดียวกัน
แมตต์

57

สตริงไม่สามารถแปลได้ มันบอกบรรณาธิการ Eclipse ที่จะไม่ตั้งค่าสถานะสตริงเป็น unresourced สิ่งนี้สำคัญสำหรับแอปพลิเคชั่นหลายภาษา


8
คำอธิบายที่ดีว่าเหตุใดค่าสถานะจึงเรียกว่า NON NLS (ไม่มีการสนับสนุนภาษาประจำชาติ) ขอบคุณ
Kaadzia

28

NON-NLSหมายถึงองค์กรไม่แสวงหา - N ational L anguage S upport
WikipediaเสนอNon - N ative L anguage S upport (NLS) แต่อันสุดท้ายไม่ได้ใช้งานมากนัก

NLSเป็นเรื่องเกี่ยวกับการทำให้แอปพลิเคชันของคุณเป็นสากล Eclipse ช่วยในการค้นหาสตริงการเข้ารหัสในรหัสของคุณ ในการระบุว่าสตริงไม่ได้เป็นส่วนหนึ่งของการทำให้เป็นสากลให้ผนวกความคิดเห็น//$NON-NLS-x$โดยที่ x คือตำแหน่งของสตริง ในตัวอย่างต่อไปนี้ทั้งคู่"!"เป็นสตริงที่ฮาร์ดโค้ดไม่ใช่ส่วนหนึ่งของการทำให้เป็นสากล:

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

หมายเหตุ:

  • ผู้นำ//เป็นสิ่งจำเป็นในแต่ละครั้ง
  • ไม่มีโกลบอล$NON-NLS$สำหรับสตริงจำนวนมากภายในบรรทัดเดียวกัน
    (เช่นถ้าบรรทัดของคุณมีหกสตริงคุณต้องเขียนหกครั้ง//$NON-NLS-x$)

หนังสือEMF: กรอบการสร้างแบบจำลอง Eclipse ที่หน้า 250พูดว่า:

ตัวทำเครื่องหมาย Non-NLS—คอมไพลเลอร์ Java ของ Eclipse มีความสามารถในการตั้งค่าสถานะสตริงที่ไม่ได้ส่งออกภายนอกเป็นคำเตือนหรือข้อผิดพลาดเพื่ออำนวยความสะดวกในการเปิดใช้งาน National Language Support (NLS) รหัสที่สร้างโดย EMF ไม่ได้ใช้สตริงที่เข้ารหัสยากสำหรับข้อความที่ผู้ใช้จะเห็น อย่างไรก็ตามสตริงตัวอักษรปรากฏขึ้นบ่อยครั้งเช่นเป็นคีย์สำหรับการค้นหาสตริงภายนอกในไฟล์คุณสมบัติ คุณสมบัตินี้ควบคุมว่าจะรวมข้อคิดเห็นที่ทำเครื่องหมายตัวอักษรเหล่านั้นว่าแปลไม่ได้หรือไม่ดังนั้นคอมไพเลอร์จะไม่ตั้งค่าสถานะเหล่านั้น

สำหรับรายละเอียดเพิ่มเติมโปรดดูที่หน้าตัวสร้าง GUIและวิธีทำให้ปลั๊กอิน Eclipse เป็นสากล

คุณสามารถเปิด / ปิดการใช้งานคุณสมบัตินี้ บน Eclipse Neon ไปที่
Project > Properties > Java Compiler > Errors/Warnings
และเลือกฟิลด์
Non-externalized strings (missing/unused $NON-NLS$ tag)

หน้าต่างของคุณสมบัติโครงการบน Eclipse


14

หากคุณเป็นนักพัฒนา Android สตริงทั้งหมดที่ผู้ใช้อาจเห็นควรอยู่ในไฟล์ทรัพยากร /res/values/strings.xml เพื่ออ่านไฟล์ strings.xml ในรหัสที่คุณใช้ R.string .. โดยการเพิ่มแท็ก // $ NON-NLS- $ คุณเป็น สังเกตว่าผู้ใช้จะไม่เห็นสตริง

คำเตือนใน Eclipse Helios Window -> preferences -> java -> Compiler -> code style -> "Non-externalized Strings (missing/unused &NON-NLS$ tag)อาจจะเปิดอยู่

หากคุณวางแผนที่จะเขียนโปรแกรมกิจกรรมของคุณเป็นหลายภาษาแนะนำให้เปิดใช้งาน จากนั้นเพิ่มแท็ก & NON-NLS $ ลงในสตริงที่อยู่ภายในกิจกรรมของคุณ Eclipse จะเพิ่มแท็ก & NON-NLS $ ในการแก้ไขด่วนหากคุณคลิกขวาที่คำเตือนหรือข้อผิดพลาด


9

Eclipse ใช้เพื่อระบุว่าไม่จำเป็นต้องแปลสตริงอาจเป็นเพราะผู้ใช้แอปพลิเคชันจะไม่เห็น


สตริงบางตัวทำงานไม่ถูกต้องเมื่อแปลแล้ว หากสตริงแสดงชุดอักขระ, แท็ก HTML / XML, regex ฯลฯ พวกเขาสามารถเปลี่ยนลักษณะการทำงานของโปรแกรม
yingted

5

มันบอกคอมไพเลอร์ที่จะไม่บ่นเกี่ยวกับสตริงที่ไม่ใช่ externalized และมันไม่จำเป็นต้องมีการแปล


4
ฉันไม่คิดว่ามันเป็นคอมไพเลอร์ฉันคิดว่ามันเป็น Eclipse ที่บ่น
พอลทอมบลิน

6
Eclipse มีคอมไพเลอร์เป็นของตัวเองเป็นส่วนหนึ่งของ JDT ซึ่งใช้สำหรับสิ่งนี้ ใช่แล้วมันเป็นคอมไพเลอร์ (คอมไพเลอร์ของ Eclipse อยู่แล้ว)
Aaron Maenpaa
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.