Co oznacza $ NON-NLS-1 $?

320

W kodzie źródłowym Eclipse znalazłem trochę „$ NON-NLS-1 $” w takich komentarzach:

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

Co to znaczy ?

paulgreg
źródło

Odpowiedzi:

370

Wyciszają ostrzeżenie, które emituje Eclipse, gdy napotka literały łańcuchowe (i zostało skonfigurowane do narzekań).

Chodzi o to, że komunikaty interfejsu użytkownika nie powinny być osadzane jako literały łańcuchowe, ale raczej pochodzą z pliku zasobów (aby można je było przetłumaczyć, sprawdzić itp.). W związku z tym można skonfigurować Eclipse do wykrywania literałów ciągów, aby przypadkowo nie pozostawić niezaktualizowanych ciągów interfejsu użytkownika w kodzie; istnieją jednak łańcuchy, których nie należy eksternalizować (np. wyrażenia regularne), a więc // $ NON-NLS-1 $ daje ci możliwość przekazania tego faktu kompilatorowi.

Aaron Maenpaa
źródło
10
Co oznacza skrót NLS?
MatrixFrog,
39
@MatrixFrog wydaje się, że jest to „obsługa języków narodowych”, przynajmniej tak się tutaj odnosi: msdn.microsoft.com/en-us/library/ms906482.aspx
Daniel Dickison
23
Aby być oceniającym, uważam, że takich znaczników specyficznych dla IDE nie należy używać, jeśli kod jest zmieniany w różnych środowiskach. Znacznik nie wyrządza szkody, ale zaśmieca kod i utrudnia jego utrzymanie.
migu,
4
Jak więc skonfigurować Eclipse do wykrywania literałów łańcuchowych, aby brakujące // $ NON-NLS-1 $ wywołało ostrzeżenie lub smt?
rpr
3
Platforma NetBeans używa słowa kluczowego komentarza // NOI18N w tym samym celu
Matt
57

Ciąg nie podlega tłumaczeniu. Mówi edytorowi Eclipse, aby nie oflagował łańcucha jako nieobsługiwanego. Jest to ważne w przypadku aplikacji wielojęzycznych.

McDowell
źródło
8
Dobre wyjaśnienie, dlaczego flaga nazywa się NON NLS (brak obsługi języków narodowych). Dzięki.
Kaadzia
28

NON-NLSśrodki dla - N arodowy L anguage S asystencja .
Wikipedia proponuje dla - N nio L anguage S asystencja (NLS), lecz ten ostatni nie jest przyzwyczajony.

NLS dotyczy internacjonalizacji Twojej aplikacji. Eclipse pomaga zlokalizować zakodowane ciągi w kodzie. Aby wskazać, że łańcuch nie jest częścią internacjonalizacji, dołącz komentarz, //$NON-NLS-x$gdzie x jest pozycją łańcucha. W poniższym przykładzie oba "!"są ciągami zakodowanymi na stałe, które nie są częścią internacjonalizacji:

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

Uwagi:

  • prowadzenie //jest konieczne za każdym razem
  • brak globalnego $NON-NLS$dla wielu ciągów w tej samej linii
    (np. jeśli twoja linia ma sześć łańcuchów, musisz napisać sześć razy //$NON-NLS-x$)

Książka EMF: Eclipse Modeling Framework na stronie 250 mówi:

Znaczniki inne niż NLS - Kompilator Java Eclipse ma możliwość oflagowania nie eksternalizowanych ciągów jako ostrzeżenia lub błędu, w celu ułatwienia włączenia obsługi języka narodowego (NLS). Kod generowany przez EMF nie używa ciągów zakodowanych na stałe w komunikatach, które zobaczy użytkownik; literały ciągów pojawiają się jednak często, na przykład jako klucze do wyszukiwania eksternalizowanych ciągów w pliku właściwości. Ta właściwość kontroluje, czy dołączać komentarze oznaczające te literały jako nieprzekładalne, aby kompilator ich nie oznaczał.

Aby uzyskać więcej informacji, zobacz także strony Graficzny interfejs użytkownika generatora i sposób internacjonalizacji wtyczki Eclipse .

Możesz włączyć / wyłączyć tę funkcję. W Eclipse Neon przejdź do
Project > Properties > Java Compiler > Errors/Warnings
i wybierz pole
Non-externalized strings (missing/unused $NON-NLS$ tag)

Okno właściwości projektu w środowisku Eclipse

olibre
źródło
14

Jeśli jesteś programistą Androida. Wszystkie ciągi, które użytkownik może zobaczyć, powinny znajdować się w pliku zasobów /res/values/strings.xml, aby odczytać plik strings.xml w kodzie, którego używasz R.string. Dodając tag // $ NON-NLS- $ jesteś zauważając, że ciąg nie będzie widoczny dla użytkowników.

Ostrzeżenie w Eclipse Helios może być włączone o godz Window -> preferences -> java -> Compiler -> code style -> "Non-externalized Strings (missing/unused &NON-NLS$ tag).

Jeśli planujesz zaprogramować swoją aktywność jako wielojęzyczną, zaleca się włączenie tego. A następnie dodając tag & NON-NLS $ do ciągów, które są wewnętrzne dla twojej aktywności. Eclipse doda tag & NON-NLS $ do szybkiej poprawki, jeśli klikniesz ostrzeżenie lub błąd prawym przyciskiem myszy.

fishjd
źródło
9

Jest używany przez Eclipse do wskazania, że ​​ciąg nie musi być tłumaczony, prawdopodobnie dlatego, że nie będzie widoczny dla użytkowników aplikacji.

Kees de Kooter
źródło
Niektóre ciągi nie działają poprawnie podczas tłumaczenia. Jeśli ciąg reprezentuje zestaw znaków, znacznik HTML / XML, wyrażenie regularne itp., Mogą one zmienić zachowanie programu.
Yingted
5

Mówi kompilatorowi, aby nie narzekał na nie eksternalizowany ciąg i że nie wymaga lokalizacji.

Björn
źródło
4
Nie sądzę, że to kompilator, myślę, że to Eclipse narzeka.
Paul Tomblin
6
Eclipse ma własny kompilator jako część JDT, którego używa do tego typu rzeczy. Tak, to jest kompilator (kompilator Eclipse i tak).
Aaron Maenpaa