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 ?

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.


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.


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


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.


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.


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.