$ NON-NLS-1 $ có nghĩa là gì?


320

Trong mã nguồn Eclipse, tôi đã tìm thấy một số '$ NON-NLS-1 $' trong các nhận xét được sử dụng như thế:

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

Điều đó nghĩa là gì ?

Câu trả lời:


370

Họ im lặng cảnh báo rằng Eclipse phát ra khi nó gặp chuỗi ký tự (và đã được cấu hình để khiếu nại).

Ý tưởng là các thông điệp UI không nên được nhúng dưới dạng chuỗi ký tự, mà là nguồn gốc từ một tệp tài nguyên (để chúng có thể được dịch, chứng minh, v.v.). Do đó, Eclipse có thể được cấu hình để phát hiện các chuỗi ký tự, do đó bạn không vô tình để lại các chuỗi UI không tồn tại trong mã; tuy nhiên, có các chuỗi không nên được bên ngoài (chẳng hạn như regexps) và vì vậy, // $ NON-NLS-1 $ cung cấp cho bạn một cách để truyền đạt thực tế đó đến trình biên dịch.


10
Vậy, NLS có nghĩa là gì?
MatrixFrog

39
@MatrixFrog có vẻ như là "Hỗ trợ ngôn ngữ quốc gia", ít nhất đó là những gì nó được đề cập ở đây: msdn.microsoft.com/en-us/l Library / ms906482.aspx
Daniel Dickison

23
Để được đánh giá, tôi nghĩ rằng các dấu hiệu dành riêng cho IDE như vậy không nên được sử dụng nếu mã bị thay đổi trong các môi trường khác nhau. Trong khi điểm đánh dấu không gây hại, nó làm tắc mã và làm cho việc bảo trì khó khăn hơn một chút.
Migu

4
Vì vậy, làm thế nào để bạn định cấu hình Eclipse để phát hiện các chuỗi ký tự, để thiếu // $ NON-NLS-1 $ sẽ đưa ra cảnh báo hoặc smt?
RPR

3
Nền tảng NetBeans sử dụng // NOI18N từ khóa nhận xét cho cùng một mục đích
Matt

57

Chuỗi không thể dịch. Nó nói với trình soạn thảo Eclipse không gắn cờ chuỗi là không giới hạn. Điều này rất quan trọng đối với các ứng dụng đa ngôn ngữ.


8
Giải thích tốt về lý do tại sao cờ được gọi là NON NLS (Không hỗ trợ ngôn ngữ quốc gia). Cảm ơn.
Kaadzia

28

NON-NLScó nghĩa là Non - N ational L anguage S upport .
Wikipedia cũng đề xuất Non - N ative L anguage S upport (NLS) nhưng cái cuối cùng này không được sử dụng nhiều.

NLS là về quốc tế hóa ứng dụng của bạn. Eclipse giúp định vị các chuỗi mã hóa cứng trong mã của bạn. Để chỉ ra một chuỗi không phải là một phần của quốc tế hóa, hãy thêm nhận xét //$NON-NLS-x$trong đó x là vị trí của chuỗi. Trong ví dụ sau, cả hai đều "!"là các chuỗi được mã hóa cứng không phải là một phần của quá trình quốc tế hóa:

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

Ghi chú:

  • hàng đầu //là cần thiết mỗi lần
  • không có toàn cầu $NON-NLS$cho nhiều chuỗi trong cùng một dòng
    (ví dụ: nếu dòng của bạn có sáu chuỗi, bạn phải viết sáu lần //$NON-NLS-x$)

Cuốn sách EMF: Khung mô hình hóa Eclipse ở trang 250 nói:

Các trình đánh dấu không phải NLS Trình biên dịch Java của Eclipse có khả năng gắn cờ các chuỗi không được ngoại hóa thành một cảnh báo hoặc lỗi, để tạo điều kiện hỗ trợ cho Hỗ trợ ngôn ngữ quốc gia (NLS). Mã do EMF tạo không sử dụng các chuỗi được mã hóa cứng cho các tin nhắn mà người dùng sẽ thấy; tuy nhiên, ví dụ, chuỗi ký tự xuất hiện thường xuyên, như các khóa để tra cứu các chuỗi bên ngoài trong tệp thuộc tính. Thuộc tính này kiểm soát xem có bao gồm các nhận xét đánh dấu các chữ đó là không thể dịch được không, do đó trình biên dịch sẽ không gắn cờ chúng.

Để biết thêm chi tiết, xem thêm các trang GUI GUICách quốc tế hóa Trình cắm Eclipse của bạn .

Bạn có thể bật / tắt tính năng này. Trên Eclipse neon đi đến
Project > Properties > Java Compiler > Errors/Warnings
và chọn trường
Non-externalized strings (missing/unused $NON-NLS$ tag)

Cửa sổ thuộc tính dự án trên Eclipse


14

Nếu bạn là một nhà phát triển Android. Tất cả các chuỗi mà người dùng có thể thấy phải có trong tệp tài nguyên /res/values/strings.xml để đọc tệp String.xml trong mã bạn sử dụng R. Chuỗi .. Bằng cách thêm thẻ // $ NON-NLS- $ bạn đang lưu ý rằng chuỗi sẽ không được nhìn thấy bởi người dùng.

Cảnh báo trong Helios Eclipse có thể được bật tại Window -> preferences -> java -> Compiler -> code style -> "Non-externalized Strings (missing/unused &NON-NLS$ tag).

Nếu bạn đang có kế hoạch lập trình hoạt động của mình thành đa ngôn ngữ, bạn nên bật nó lên. Và sau đó thêm thẻ & NON-NLS $ vào các chuỗi nội bộ cho hoạt động của bạn. Eclipse sẽ thêm thẻ & NON-NLS $ trong bản sửa lỗi nhanh nếu bạn nhấp chuột phải vào cảnh báo hoặc lỗi.


9

Nó được sử dụng bởi Eclipse để chỉ ra rằng một chuỗi không cần phải dịch, có lẽ bởi vì nó sẽ không được người dùng ứng dụng nhìn thấy.


Một số chuỗi không hoạt động đúng khi chúng được dịch. Nếu một chuỗi đại diện cho bộ ký tự, thẻ HTML / XML, regex, v.v., chúng có thể thay đổi hành vi của chương trình.
kéo dài

5

Nó yêu cầu trình biên dịch không phàn nàn về một chuỗi không được ngoại hóa và nó không yêu cầu nội địa hóa.


4
Tôi không nghĩ đó là trình biên dịch, tôi nghĩ đó là Eclipse phàn nàn.
Paul Tomblin 17/03/2016

6
Eclipse có trình biên dịch riêng của nó như là một phần của JDT mà nó sử dụng cho loại điều này. Vì vậy, có nó là trình biên dịch (trình biên dịch của Eclipse nào).
Aaron Maenpaa 17/03/2016
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.