$ NON-NLS-1 $의 의미는 무엇입니까?


320

이클립스 소스 코드에서 다음과 같은 주석에서 '$ NON-NLS-1 $'을 찾았습니다.

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

그게 무슨 뜻이야?

답변:


370

그들은 문자열 리터럴을 만날 때 (그리고 불평하도록 구성된) Eclipse가 경고한다는 경고를 침묵시킵니다.

UI 메시지는 문자열 리터럴로 포함되어서는 안되며 대신 리소스 파일에서 소스 화되어 번역, 교정 등의 작업을 수행해야합니다. 결과적으로 문자열 리터럴을 감지하도록 Eclipse를 구성 할 수 있으므로 실수로 코드에 외부화되지 않은 UI 문자열이 남지 않도록 할 수 있습니다. 그러나 정규화와 같이 외부화해서는 안되는 문자열이 있으므로 // $ NON-NLS-1 $를 사용하면 해당 사실을 컴파일러에 전달할 수 있습니다.


10
그렇다면 NLS는 무엇을 의미합니까?
— MatrixFrog

39
@MatrixFrog "국가 언어 지원"인 것 같습니다. 적어도 여기에서 언급 한 것입니다. msdn.microsoft.com/en-us/library/ms906482.aspx
— Daniel Dickison

23
평가하기 위해, 다른 환경에서 코드가 변경되면 그러한 IDE 관련 마커를 사용해서는 안된다고 생각합니다. 마커는 해를 끼치 지 않지만 코드를 복잡하게 만들고 유지하기가 약간 더 어려워집니다.
— migu

4
따라서 문자열 리터럴을 감지하도록 Eclipse를 구성하여 // $ NON-NLS-1 $가 누락되면 경고 또는 smt가 발생합니까?
— rpr

3
NetBeans 플랫폼은 동일한 목적으로 // NOI18N 주석 키워드를 사용합니다
— Matt

57

문자열을 번역 할 수 없습니다. 문자열을 자원이없는 것으로 플래그하지 않도록 Eclipse 편집기에 지시합니다. 다국어 응용 프로그램에 중요합니다.


8
왜 NON NLS (국어 지원 안 함)라고하는 플래그에 대한 좋은 설명입니다. 감사.
— Kaadzia

28

NON-NLS수단 비 - N ational L anguage S upport를 .
위키 백과는 또한 제안 비 - N 의안의 운동성, 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$같은 줄에 여러 문자열에 대해 전역 이 없습니다
    (예 : 줄에 6 개의 문자열이있는 경우 6 번 작성해야합니다 //$NON-NLS-x$)

250 페이지의 EMF : Eclipse Modeling Framework 책 은 다음과 같이 말합니다.

NLS가 아닌 마커 -Eclipse의 Java 컴파일러는 NLS (National Language Support)를 활성화하기 위해 외부화되지 않은 문자열을 경고 또는 오류로 플래그 지정할 수 있습니다. EMF 생성 코드는 사용자에게 표시되는 메시지에 하드 코딩 된 문자열을 사용하지 않습니다. 그러나 문자열 리터럴은 속성 파일에서 외부화 된 문자열을 검색하기위한 키처럼 자주 나타납니다. 이 속성은 해당 리터럴을 번역 할 수없는 것으로 표시하는 주석을 포함할지 여부를 제어하므로 컴파일러는 해당 플래그를 표시하지 않습니다.

자세한 내용은 Generator GUI 및 Eclipse 플러그인 국제화 방법 페이지를 참조하십시오 .

이 기능을 활성화 / 비활성화 할 수 있습니다. Eclipse Neon으로 이동
Project > Properties > Java Compiler > Errors/Warnings
하여 필드를 선택하십시오.
Non-externalized strings (missing/unused $NON-NLS$ tag)

Eclipse의 프로젝트 속성 창


14

당신이 안드로이드 개발자라면. 사용자가 볼 수있는 모든 문자열은 리소스 파일 /res/values/strings.xml에 있어야 R.string을 사용하는 코드에서 strings.xml 파일을 읽을 수 있습니다. // $ 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 태그, 정규식 등을 나타내는 경우 프로그램의 동작을 변경할 수 있습니다.
— yingted

5

컴파일러는 외부화되지 않은 문자열에 대해 불평하지 말고 현지화가 필요하지 않습니다.


4
나는 그것이 컴파일러라고 생각하지 않고 불평하는 이클립스라고 생각합니다.
— Paul Tomblin

6
이클립스는 JDT의 일부로 자체 컴파일러를 가지고 있으며 이런 종류의 일에 사용합니다. 예, 그것은 컴파일러입니다 (어쨌든 Eclipse의 컴파일러).
— Aaron Maenpaa
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.