$ NON-NLS-1 $ ne anlama geliyor?


320

Eclipse kaynak kodunda, şöyle kullanılan yorumlarda bazı '$ NON-NLS-1 $' buldum:

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

Bu ne anlama geliyor ?

Yanıtlar:


370

Eclipse'ın dizgi değişmezleriyle karşılaştığında (ve şikayet edecek şekilde yapılandırılmış) bir uyarıyı sustururlar.

Fikir, UI mesajlarının dize değişmezleri olarak gömülmemesi, daha ziyade bir kaynak dosyasından (çevrilmesi, prova edilmesi, vb.) Kaynaklanması gerektiğidir. Sonuç olarak, Eclipse, dizgi değişmezlerini algılayacak şekilde yapılandırılabilir, böylece yanlışlıkla kodda dışa aktarılmamış UI dizeleri bırakmazsınız; ancak, haricilaştırılmaması gereken dizeler (regexps gibi) vardır ve bu nedenle, // $ NON-NLS-1 $ size bu gerçeği derleyiciye iletmenin bir yolunu sunar.


10
Peki, NLS ne anlama geliyor?
MatrixFrog

39
@MatrixFrog "Ulusal Dil Desteği" gibi görünüyor, en azından burada bahsediliyor: msdn.microsoft.com/en-us/library/ms906482.aspx
Daniel Dickison

23
Değerlendirici olmak gerekirse, kod farklı ortamlarda değiştirilirse IDE'ye özgü belirteçlerin kullanılmaması gerektiğini düşünüyorum. İşaretçi hiçbir zarar vermezken, kodu temizler ve bakımını biraz daha zorlaştırır.
migu

4
Peki, Eclipse'i dize değişmezlerini algılayacak şekilde nasıl yapılandırabilirsiniz, böylece // $ NON-NLS-1 $ eksik bir uyarı veya smt oluşturacak mı?
rpr

3
NetBeans Platform aynı amaç için // NOI18N comment anahtar sözcüğünü kullanıyor
Matt

57

Dize çevrilemez. Eclipse düzenleyicisine dizeyi kaynaksız olarak işaretlememesini söyler. Bu, çok dilli uygulamalar için önemlidir.


8
Bayrağa NON NLS (Ulusal Dil Desteği Yok) adı verildiğine ilişkin iyi açıklama. Teşekkürler.
Kaadzia

28

NON-NLSaracı olmayan - N illi L anguage S upport .
Vikipedi ayrıca önermektedir Olmayan - N ative L anguage S upport (NLS) ama bu sonuncusu çok kullanılmaz.

NLS başvurunuzu uluslararasılaştırmakla ilgilidir. Tutulma kodunuzdaki sabit kodlu dizeleri bulmak için yardımcı olur. Bir dizenin uluslararasılaştırmanın bir parçası olmadığını belirtmek için, yorumu ekleyin; //$NON-NLS-x$burada x, dizenin konumudur. Aşağıdaki örnekte her ikisi "!"de uluslararasılaştırmanın parçası olmayan sabit kodlu dizelerdir:

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

Notlar:

  • lider //her seferinde gereklidir
  • $NON-NLS$aynı satırdaki birden çok dize için global değil
    (örneğin, çizginizde altı dize varsa, altı kez yazmanız gerekir //$NON-NLS-x$)

EMF: Eclipse Modeling Framework'un 250. sayfasındaki kitabı şöyle diyor:

NLS Olmayan İşaretleyiciler - Eclipse'nin Java derleyicisi, Ulusal Dil Desteği'nin (NLS) etkinleştirilmesini kolaylaştırmak için harici olmayan dizeleri uyarı veya hata olarak işaretleme yeteneğine sahiptir. EMF tarafından oluşturulan kod, kullanıcının göreceği iletiler için sabit kodlu dizeler kullanmaz; ancak dize değişmezleri, örneğin, bir özellik dosyasında harici dizelerin aranması için anahtarlar olarak sık sık görünür. Bu özellik, bu değişmezleri çevrilemez olarak işaretleyen yorumların eklenip eklenmeyeceğini denetler, böylece derleyici bunları işaretlemez.

Daha fazla ayrıntı için ayrıca Jeneratör GUI ve Eclipse Eklentinizi Uluslararasılaştırma sayfalarına bakın .

Bu özelliği etkinleştirebilir / devre dışı bırakabilirsiniz. Eclipse Neon'da
Project > Properties > Java Compiler > Errors/Warnings
alana gidin ve seçin
Non-externalized strings (missing/unused $NON-NLS$ tag)

Tutulmadaki Proje Özellikleri Penceresi


14

Android geliştiricisiyseniz. Kullanıcının görebileceği tüm dizeler, R.string kullandığınız koddaki strings.xml dosyasını okumak için /res/values/strings.xml kaynak dosyasında olmalıdır. // $ NON-NLS- $ etiketini ekleyerek dizenin kullanıcılar tarafından görülmeyeceğine dikkat edin.

Eclipse Helios'taki uyarı adresinden açılabilir Window -> preferences -> java -> Compiler -> code style -> "Non-externalized Strings (missing/unused &NON-NLS$ tag).

Etkinliğinizi çok dilli olacak şekilde programlamayı planlıyorsanız, bunu açmanız önerilir. Ardından, etkinliğinizin içindeki dizelere & NON-NLS $ etiketini ekleyin. Uyarı veya hataya sağ tıklarsanız Eclipse hızlı düzeltmeye & NON-NLS $ etiketi ekleyecektir.


9

Eclipse tarafından, muhtemelen uygulamanın kullanıcıları tarafından görülmeyeceği için bir dizenin çevrilmesi gerekmediğini belirtmek için kullanılır.


Bazı dizeler çevrildiklerinde düzgün çalışmazlar. Bir dize bir karakter kümesini, HTML / XML etiketini, normal ifadeyi vb. Temsil ediyorsa, programın davranışını değiştirebilir.
Mart'ta

5

Derleyiciye, harici olmayan bir dizeden şikayet etmemesini ve yerelleştirme gerektirmediğini söyler.


4
Derleyici olduğunu sanmıyorum, şikayetçi Eclipse olduğunu düşünüyorum.
Paul Tomblin

6
Eclipse, JDT'nin bir parçası olarak bu tür bir şey için kullandığı kendi derleyicisine sahiptir. Yani evet derleyici (yine de Eclipse'ın derleyicisi).
Aaron Maenpaa
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.