$ 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 GUIEclipse 플러그인 국제화 방법 페이지를 참조하십시오 .

이 기능을 활성화 / 비활성화 할 수 있습니다. 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.