Apa arti $ NON-NLS-1 $?

320

Dalam kode sumber Eclipse, saya telah menemukan beberapa '$ NON-NLS-1 $' dalam komentar yang digunakan seperti itu:

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

Apa artinya ?

paulgreg
sumber

Jawaban:

370

Mereka membungkam peringatan yang dikeluarkan Eclipse ketika bertemu string literal (dan telah dikonfigurasi untuk mengeluh).

Idenya adalah bahwa pesan UI tidak boleh disematkan sebagai string literal, melainkan bersumber dari file sumber daya (sehingga mereka dapat diterjemahkan, dibuktikan, dll). Konsekuensinya, Eclipse dapat dikonfigurasi untuk mendeteksi string literal, sehingga Anda tidak sengaja meninggalkan string UI yang tidak tereksternalisasi dalam kode; Namun, ada string yang tidak boleh dieksternalisasi (seperti regexps) dan, // $ NON-NLS-1 $ memberi Anda cara untuk mengomunikasikan fakta itu ke kompiler.

Aaron Maenpaa
sumber
10
Jadi, apa kepanjangan dari NLS?
MatrixFrog
39
@MatrixFrog tampaknya "Dukungan Bahasa Nasional", setidaknya itulah yang dimaksud di sini: msdn.microsoft.com/en-us/library/ms906482.aspx
Daniel Dickison
23
Agar evaluatif, saya pikir spidol khusus IDE semacam itu tidak boleh digunakan jika kode diubah di lingkungan yang berbeda. Meskipun marker tidak membahayakan, ia mengacaukan kode dan membuatnya sedikit lebih sulit untuk dipelihara.
migu
4
Jadi, bagaimana Anda mengkonfigurasi Eclipse untuk mendeteksi string literal, sehingga kehilangan // $ NON-NLS-1 $ akan memunculkan peringatan atau smt?
rpr
3
Platform NetBeans menggunakan // NOI18N kata kunci komentar untuk tujuan yang sama
Matt
57

String tidak dapat diterjemahkan. Ia memberi tahu editor Eclipse untuk tidak menandai string sebagai tidak bersumber daya. Ini penting untuk aplikasi multibahasa.

McDowell
sumber
8
Penjelasan yang baik untuk mengapa bendera disebut NON NLS (Tidak Ada Dukungan Bahasa Nasional). Terima kasih.
Kaadzia
28

NON-NLSsarana Non - N ational L anguage S upport .
Wikipedia mengusulkan juga Non - N ative L anguage S upport (NLS) tapi yang terakhir ini tidak sangat digunakan.

NLS adalah tentang internasionalisasi aplikasi Anda. Eclipse membantu menemukan string yang dikodekan dalam kode Anda. Untuk menunjukkan string bukan bagian dari internasionalisasi, tambahkan komentar di //$NON-NLS-x$mana x adalah posisi string. Pada contoh berikut ini, keduanya "!"adalah string yang dikode-keras bukan bagian dari internasionalisasi:

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

Catatan:

  • yang memimpin //diperlukan setiap kali
  • tidak ada global $NON-NLS$untuk banyak string dalam baris yang sama
    (mis. jika baris Anda memiliki enam string, Anda harus menulis enam kali //$NON-NLS-x$)

Buku EMF: Eclipse Modeling Framework di halaman 250 mengatakan:

Non-NLS Markers— Compiler Java Eclipse memiliki kemampuan untuk menandai string yang tidak dieksternalisasi sebagai peringatan atau kesalahan, untuk memfasilitasi pemberdayaan Dukungan Bahasa Nasional (NLS). Kode yang dihasilkan EMF tidak menggunakan string kode keras untuk pesan yang akan dilihat pengguna; Namun, string literal sering muncul, misalnya, sebagai kunci untuk pencarian string eksternal dalam file properti. Properti ini mengontrol apakah akan memasukkan komentar yang menandai literal-literal itu sebagai tidak dapat diterjemahkan, sehingga kompiler tidak akan menandai mereka.

Untuk lebih jelasnya lihat juga halaman GUI Generator dan Cara Menginternasionalkan Eclipse Plug-In Anda .

Anda dapat mengaktifkan / menonaktifkan fitur ini. Pada Eclipse Neon pergi ke
Project > Properties > Java Compiler > Errors/Warnings
dan pilih bidang
Non-externalized strings (missing/unused $NON-NLS$ tag)

Jendela Properti Proyek pada Eclipse

olibre
sumber
14

Jika Anda seorang pengembang Android. Semua string yang mungkin dilihat pengguna harus di file sumber /res/values/strings.xml untuk membaca file strings.xml dalam kode yang Anda gunakan R.string .. Dengan menambahkan tag // $ NON-NLS- $ Anda mencatat bahwa string tidak akan terlihat oleh pengguna.

Peringatan di Eclipse Helios dapat dihidupkan pada Window -> preferences -> java -> Compiler -> code style -> "Non-externalized Strings (missing/unused &NON-NLS$ tag).

Jika Anda berencana memprogram aktivitas Anda menjadi multi-bahasa, disarankan untuk mengaktifkannya. Dan kemudian menambahkan tag & NON-NLS $ ke string yang internal untuk aktivitas Anda. Eclipse akan menambahkan & NON-NLS $ tag dalam perbaikan cepat jika Anda mengklik kanan pada peringatan atau kesalahan.

fishjd
sumber
9

Ini digunakan oleh Eclipse untuk menunjukkan bahwa string tidak perlu diterjemahkan, mungkin karena itu tidak akan dilihat oleh pengguna aplikasi.

Kees de Kooter
sumber
Beberapa string tidak berfungsi dengan baik saat diterjemahkan. Jika sebuah string mewakili charset, tag HTML / XML, regex, dll., Mereka dapat mengubah perilaku program.
yingted
5

Ia memberi tahu kompiler untuk tidak mengeluh tentang string yang tidak dieksternalisasi, dan bahwa ia tidak memerlukan pelokalan.

Björn
sumber
4
Saya tidak berpikir itu adalah kompiler, saya pikir itu Eclipse yang mengeluh.
Paul Tomblin
6
Eclipse memiliki kompiler sendiri sebagai bagian dari JDT yang digunakan untuk hal semacam ini. Jadi ya itu adalah kompiler (Eclipse's compiler anyway).
Aaron Maenpaa