Що означає $ NON-NLS-1 $?


320

У вихідному коді Eclipse я знайшов кілька '$ NON-NLS-1 $' в таких коментарях:

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

Що це означає ?

Відповіді:


370

Вони замовчують попередження, яке Eclipse видає, коли він стикається з рядковими літералами (і налаштовано на скарга).

Ідея полягає в тому, що повідомлення інтерфейсу не повинні вбудовуватися як рядкові літерали, а надходити з файлу ресурсів (щоб вони могли бути перекладені, перевірені і т.д.). Отже, Eclipse може бути налаштований на виявлення літеральних рядків, щоб ви випадково не залишили в коді невідокремлені рядки інтерфейсу; однак є рядки, які не слід екстерналізувати (наприклад, регулярні вирази) і так, // $ NON-NLS-1 $ дає вам спосіб повідомити цей факт компілятору.


10
Отже, що означає НЛС?
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
Метт

57

Рядок не перекладається. Він повідомляє редактору Eclipse не позначати рядок як нересурсовий. Це важливо для багатомовних програм.


8
Гарне пояснення того, чому прапор називається NON NLS (Без підтримки національної мови). Дякую.
Каадзія

28

NON-NLSзасіб Номер - N Національні L anguage S оддержка .
Вікіпедія пропонує також Non - N чеських L anguage S оддержкі (NLS) , але цей останній не дуже використовуються.

NLS - це інтернаціоналізація вашої заявки. Eclipse допоможе знайти жорстко закодовані рядки у вашому коді. Щоб рядок не входив до інтернаціоналізації, додайте коментар, //$NON-NLS-x$де x - це рядок. На наступному прикладі обидва "!"є жорстко закодованими рядками, які не є частиною інтернаціоналізації:

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

Примітки:

  • провідна //необхідна щоразу
  • немає глобальних $NON-NLS$для декількох рядків в одному рядку
    (наприклад, якщо у вашій рядку шість рядків, ви повинні написати шість разів //$NON-NLS-x$)

У книзі EMF: Рамка моделювання затемнення на сторінці 250 сказано:

Не-NLS маркери - компілятор Java Eclipse має можливість позначити неекстерналізовані рядки як попередження або помилку, щоб полегшити підтримку національної мови (NLS). Створений EMF код не використовує жорстко кодовані рядки для повідомлень, які бачить користувач; проте рядкові літерали часто з’являються, наприклад, як ключі для пошуку зовнішніх рядків у файлі властивостей. Це властивість контролює, чи слід включати коментарі, які позначають ці літерали як неперекладаються, щоб компілятор не позначив їх.

Докладніше див. Також на сторінці GUI генератора та як інтернаціоналізувати плагін Eclipse .

Ви можете ввімкнути / вимкнути цю функцію. На Eclipse Neon перейдіть до
Project > Properties > Java Compiler > Errors/Warnings
та виберіть поле
Non-externalized strings (missing/unused $NON-NLS$ tag)

Вікно властивостей проекту на Eclipse


14

Якщо ви розробник Android. Усі рядки, які може бачити користувач, повинні знаходитись у файлі ресурсу /res/values/strings.xml, щоб прочитати файл strings.xml у коді, який ви використовуєте R.string .. Додавши тег // $ 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, регулярний вираз тощо, вони можуть змінити поведінку програми.
проголосив

5

Він повідомляє компілятору не скаржитися на не екстерналізований рядок і що він не потребує локалізації.


4
Я не думаю, що це компілятор, я думаю, що скарги Eclipse.
Пол Томблін

6
У Eclipse є власний компілятор як частина JDT, який він використовує для подібних речей. Так так, це компілятор (у будь-якому випадку компілятор Eclipse).
Аарон Маенпаа
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.