Co oznacza $NON-NLS-1$?

W kodzie źródłowym Eclipse znalazłem w komentarzach '$NON-NLS-1$' tak użyte:

private String toolTip = ""; //$NON-NLS-1$
Co to znaczy ?
Author: paulgreg, 2009-03-17

6 answers

Wyciszają Ostrzeżenie, które Eclipse emituje, gdy napotka literały łańcuchów (i zostało skonfigurowane do narzekania).

Chodzi o to, że wiadomości UI nie powinny być osadzane jako literały łańcuchowe, ale raczej pochodzą z pliku zasobów (aby mogły być tłumaczone, sprawdzane itp.). W związku z tym, Eclipse może być skonfigurowany tak, aby wykrywać literały znaków, tak, że nie przypadkowo pozostawić niezauważone ciągi UI w kodzie; jednak istnieją ciągi, które nie powinny być externalized (np. regexps) i tak, / / $ NON-NLS-1 $ daje sposób na przekazanie tego faktu kompilatorowi.

 350
Author: Aaron Maenpaa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-17 12:40:34

Łańcuch nie można przetłumaczyć. Mówi on edytorowi Eclipse, aby nie oznaczał łańcucha jako bez źródeł. Jest to ważne w przypadku aplikacji wielojęzycznych.

 53
Author: McDowell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-17 12:37:14

NON-NLS środki Non-Nat L anguage S
Wikipedia proponuje także Non-Native L anguage S upport (NLS), ale ten ostatni nie jest zbyt używany.

NLS {[13] } polega na umiędzynarodowieniu Twojej aplikacji. Eclipse pomaga zlokalizować zakodowane ciągi w kodzie. Aby wskazać, że ciąg znaków nie jest częścią internacjonalizacji, dodaj komentarz //$NON-NLS-x$ gdzie x jest pozycją łańcucha. W poniższym przykładzie oba "!" są kodowanymi ciągami nie będącymi 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 łańcuchów w tej samej linii
    (np. jeśli Twoja linia ma sześć ciągów, musisz napisać sześć razy //$NON-NLS-x$)
W książce EMF: Eclipse Modeling Framework na stronie 250 napisano:

Non-NLS Znaczniki - kompilator Javy Eclipse ma możliwość oznaczania Nie-zewnętrznych ciągów jako ostrzeżenia lub błędu, w celu ułatwienia obsługi języków narodowych (NLS). Kod generowany przez EMF nie używa zakodowanych ciągów do wiadomości, które użytkownik zobaczy; jednak literały łańcuchów często pojawiają się, na przykład, jako klucze do wyszukiwania zewnętrznych ciągów w pliku właściwości. Właściwość ta kontroluje, czy dodawać komentarze oznaczające te literały jako nieprzetłumaczalne, tak aby kompilator ich nie oznaczy.

Po Więcej szczegółów zobacz także strony GUI generatora i jak umiędzynarodowić wtyczkę Eclipse.

Możesz włączyć/wyłączyć tę funkcję. Na 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 na Eclipse

 19
Author: olibre,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-26 15:47:33

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

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

Jeśli planujesz programowanie aktywności w wielu językach, zaleca się włączenie tej opcji. A następnie dodanie & NON-nls$ tag do ciągów, które są wewnętrzne dla Twojej aktywności. Eclipse doda & NON-nls$ tag w quick-fix jeśli klikniesz prawym przyciskiem myszy na ostrzeżenie lub błąd.

 14
Author: fishjd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-25 19:46:32

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

 9
Author: Kees de Kooter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-17 12:38:35

Mówi kompilatorowi, aby nie narzekał na niezarządzalny ciąg znaków i że nie wymaga lokalizacji.

 5
Author: Björn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-16 21:10:35