2011-03-02 9 views
30

मैं ओपन-सोर्स जावा प्रोजेक्ट पर काम करता हूं, और हमारे पास बहुत सारी संसाधन संपत्ति फाइलें हैं जिनमें स्थानीयकरण योग्य संदेश संसाधन हैं। उन फ़ाइलों का अनुवाद स्वयंसेवकों द्वारा 20+ भाषाओं में किया जाता है, और मैं एक डेवलपर हूं जो मुख्य रूप से कोड संपादित करता है।गुड जावा प्रॉपर्टी फाइल एडिटर

जावा में, विभिन्न लोकेशंस के लिए संसाधन फ़ाइलों को एक नामकरण सम्मेलन द्वारा एक साथ समूहीकृत किया जाता है। उदाहरण के लिए, यदि डिफ़ॉल्ट (सामान्यतः अंग्रेज़ी) संसाधन "foo.properties" है, तो जापानी संसाधन "foo_ja.properties" में है, फ़्रेंच एक "foo_fr.properties" है, आदि। इस प्रश्न के लिए, चलो इस समूह को कॉल करें एक "संसाधन समूह।"

अब, हर बार, मुझे उन संसाधन फ़ाइलों को दोबारा करने की आवश्यकता होती है। इसके अलावा, मुझे संपत्ति फ़ाइलों की मूल बातें का समर्थन करने के लिए टूल की आवश्यकता है। कुल मिलाकर, आवश्यकताओं की सूची को कुछ की तरह हैं:

  1. संपत्ति कुंजी नाम का नाम बदल रहा है, और मैं एक उपकरण के बिना मुझे व्यक्तिगत रूप से उन के माध्यम से जा रहा है, एक ही समूह में सभी फाइलों में सभी चाबियाँ नाम बदलना चाहते हैं।
  2. एक संसाधन समूह से दूसरे में एक संपत्ति ले जाएं, और मैं समूह में प्रत्येक संसाधन फ़ाइल के लिए ऐसा करने के लिए एक उपकरण चाहता हूं।
  3. जावा में, संसाधन फ़ाइलें आईएसओ -885 9 -1 एन्कोडिंग में हैं और प्लेटफ़ॉर्म डिफ़ॉल्ट एन्कोडिंग में नहीं हैं।
  4. मैं संपत्ति फ़ाइलों को संपादित/ब्राउज़ करते समय \ uXXXX नहीं देखना चाहता, लेकिन मुझे उम्मीद है कि उपकरण उन्हें संरक्षित करेगा।
  5. मैं नहीं चाहता कि उपकरण संसाधन फ़ाइल में गुणों के क्रम को पुनर्व्यवस्थित करें, न ही टिप्पणियों के साथ गड़बड़ करें। मैं उपकरण को संरक्षित करने की अपेक्षा करता हूं।
  6. मैं टूल को संसाधन फ़ाइलों के अन्य सिंटैक्स विवरणों को संभालने के लिए चाहता हूं, जैसे मल्टीलाइन टेक्स्ट।

दुर्भाग्यवश, मुझे इन मानदंडों को फिट करने वाला कोई भी अच्छा टूल नहीं मिल रहा है। मैं मुख्य रूप से एक इंटेलिजे आईडीईए उपयोगकर्ता हूं, लेकिन यह # 2 और # 3 नहीं करता है। ग्रहण अंतर्निहित संपत्ति फ़ाइल संपादक भी बदतर है, और AFAICT यह # 1, # 2, # 4 नहीं करता है। वास्तव में इस दृष्टिकोण में कमी है कि एक ही समूह में संसाधन फ़ाइलों में कटौती। NetBeans समान रूप से आदिम है। नेटबीन के लिए भी यही है, हालांकि यह # 4 है।

क्या कोई भी बिल को फिट करने वाले अच्छे टूल के बारे में जानता है?

+1

+1 महान प्रश्न के लिए और कोहसुक होने के लिए +1 (मुझे यह जगह पसंद है, हर जगह रॉक सितारों!) –

+0

(जैसा कि आप शायद जानते हैं) जावा 6 में आप अन्य एन्कोडिंग में गुण फ़ाइलों का उपयोग कर सकते हैं। आगामी ग्रहण भी इसका समर्थन करता है। तो आप यूटीएफ -8 में अपनी संपत्तियां प्राप्त कर सकते हैं और उन्हें ग्रहण में अच्छी तरह से प्रदर्शित किया है। –

+0

शॉन: धन्यवाद! पीटर: क्या आपका मतलब Properties.load (Reader) है? लेकिन लोगों को लोकेल-विशिष्ट संसाधनों को लोड करने के लिए संसाधन बंडल का उपयोग करना चाहिए, और मुझे एन्कोडिंग निर्दिष्ट करने के लिए कुछ भी नहीं दिख रहा है (न ही मुझे इसकी आवश्यकता दिखाई दे रही है।) –

उत्तर

2

इस बिंदु पर, मुझे लगता है कि उत्तर यह है कि जावा में कोई अच्छी संपत्ति फाइल संपादक नहीं है जो सूचीबद्ध मानदंडों से मेल खाता है। प्रबडिटर ने वादा किया लेकिन यह चला गया, इंटेलिजे आईडीईए कागज पर अच्छा दिखता है लेकिन एक महत्वपूर्ण बग पीड़ित है, और फिर ग्रहण प्लगइन्स कुछ हद तक आदिम हैं।

+0

आईडीईए सबसे अच्छा एटीएम है। हालांकि, एक अच्छा स्टैंडअलोन नहीं मिल रहा है। क्या आपको एक मिला है? – Delfic

5

मैंने ग्रहण के लिए प्लगइन का उपयोग किया। मुझे लगता है कि यह एक: http://sourceforge.net/projects/eclipse-rbe/

यह ठीक है जोड़ने और गुण का नाम बदलने की अनुमति देता है, अगर संपत्ति सभी समर्थित भाषाओं आदि के लिए अनुवाद नहीं हुआ है चेतावनी से पता चलता

इसका नुकसान यह है कि यह हमेशा के लिए `\ uXXXX 'संकेतन का उपयोग करता है यूनिकोड अक्षर। इसलिए, आपको बनाई गई फ़ाइलों को पढ़ने के लिए इस प्लगइन का उपयोग करना होगा। यह खोज बहुत कठिन बनाता है। और मुझे नहीं पता कि यूटीएफ -8 एन्कोडेड बंडलों को बनाने के लिए इसे कॉन्फ़िगर करना संभव है या नहीं।

+0

पॉइंटर के लिए धन्यवाद। मुझे इसे आजमाने की ज़रूरत है। स्क्रीन शॉट इंगित करता है कि यह सही दिशा में है, लेकिन यह स्पष्ट नहीं है कि यह स्पष्ट नहीं है यह किसी भी रिफैक्टरिंग का समर्थन करता है। –

+1

आप ग्रहण-आरबी प्लगइन को कॉन्फ़िगर कर सकते हैं, यूनिकोड मानों को परिवर्तित करने के लिए नहीं। इन्हें देखें: "विंडोज/प्राथमिकता/संसाधन बंडल संपादक/यूनिकोड मानों को \ uXXXX पर रूपांतरित/परिवर्तित करें।" यह भी ध्यान दें कि प्लगइन अब जिथब पर है और इसकी एक नई साइट है: http://essiembre.github.io/eclipse-rbe/ –

2

Properties Editor (ग्रहण प्लगइन) निश्चित रूप से # 4 करता है। किसी और चीज के लिए इसकी आवश्यकता नहीं है।

+0

धन्यवाद, लेकिन यह किसी भी रिफैक्टरिंग का समर्थन नहीं करता है जो सभी फाई में कटौती करता है एक संसाधन समूह में लेस। या यह करता है? यह अभी भी IntelliJ से काफी खराब लगता है। –

2

इंटेलिजे को # 3 करने में सक्षम होना चाहिए (सिवाय इसके कि यह वर्तमान रिलीज due to a bug में काम नहीं करता है।) तो यह मुझे केवल # 2 के साथ छोड़ देता है।

समय के लिए (और हाथ में समस्या के लिए) मैंने तय कर लिया है कि डाल एक साथ एक ग्रूवी स्क्रिप्ट उन उपकरणों को आजमाने की तुलना में तेजी है:

#!/usr/bin/env groovy 
// base name of the resource group to move a property from 
File base = new File(args[0]) 
// key name of the property to move 
String from = args[1] 
// base name of the resource group to move the property to 
File dst = new File(args[2]) 
// name of the new property after move 
String to = args[3] 

/* 
TODO: 
    support multi-line 
    insert the text in a better place, in the sort order 
*/ 

base.parentFile.eachFileMatch(~"${base.name}(_.*)?\\.properties") { f -> 
    def l = f.name.substring(base.name.length()) 
    println "${f}" 

    def tmp = new File(f.path+".tmp") 

    // delete this property from the source, and remember it 
    def dropped = null; 
    tmp.withWriter("iso-8859-1") { w -> 
    f.filterLine(w,"iso-8859-1") { line -> 
     if (line.startsWith(from)) { 
     dropped = line; 
     return false; 
     } else { 
     return true; 
     } 
    } 
    } 
    tmp.renameTo(f) 

    if (dropped==null) return; // nothing to copy to 

    // append 
    f = new File(dst.path+l) 
    tmp = new File(f.path+".tmp") 
    println "-> ${f}" 

    existing = f.bytes 
    needsLF = (existing[existing.length-1]!='\n') 

    f.withWriterAppend("iso-8859-1") { w -> 
    if (needsLF) w.write('\n') 
    w.write(to+dropped.substring(from.length())) 
    w.write('\n') 
    } 
} 

यह स्क्रिप्ट एक हैक है और नहीं समझती संपत्ति फ़ाइल वाक्यविन्यास, तो यह बहुत विश्वसनीय नहीं है। लेकिन वीसीएस आपको उस नकारात्मकता को क्षतिपूर्ति कर सकता है जिससे आपको यह देखने में मदद मिल सके कि स्क्रिप्ट क्या करती है।

मुझे अभी भी एक अच्छा टूल खोजने की उम्मीद है ताकि मैं लंबे समय तक अधिक उत्पादक हूं। तो कृपया जवाब आते रहो!

+0

अच्छी तरह से हाँ, मैं अभी उस # 3 को जोड़ना चाहता था ... –

2

मैं कुछ समय के लिए prbeditor अब का उपयोग कर दिया गया है और मुझे लगता है कि आवश्यकताओं को आप संभाल कर सकते हैं:

  1. तालिका दृश्य में प्रमुख स्तंभ बदलकर किया जा सकता है।
  2. कुंजी कॉलम की प्रतिलिपि बनाकर किया जा सकता है जो वास्तव में विभिन्न भाषाओं में कुंजी और सभी मानों की प्रतिलिपि बनायेगा और फिर इसे एक अलग तालिका दृश्य में चिपकाएगा, जो तालिका दृश्य के विभिन्न कॉलम में कुंजी और मान डालेगा ।
  3. अक्षर \ uXXXX का उपयोग करके बच निकले जा सकते हैं, यह सुनिश्चित नहीं है कि यह केवल गैर आईएसओ -85 9 1-1 वर्णों के लिए या यहां तक ​​कि सभी गैर यूएस-एएससीआईआई अक्षरों के लिए भी करता है।
  4. \ uXXXX संपादक के लिए डीकोड किया गया है और फ़ाइल को \ uXXXX के रूप में वापस लिखा गया है।
  5. गुणों का क्रम नहीं बदला गया है, यह सुनिश्चित नहीं है कि यह टिप्पणियों को कैसे प्रबंधित करता है।
  6. आप मल्टीलाइन टेक्स्ट दर्ज कर सकते हैं और यह गुण फ़ाइल को सही ढंग से लिख देगा।
+0

धन्यवाद। आपके विवरण से, ऐसा लगता है कि यह सही टूल है। मुझे java.net परिवर्तनों के बारे में कुछ पता है, और मुझे डर है कि परियोजना हटा दी गई है। Java.net ने कुछ सुंदर डरावनी माइग्रेशन दृष्टिकोण पर निर्णय लिया जहां परियोजनाओं को ऑप्ट-इन करना था, या फिर उनकी सभी कड़ी मेहनत स्थायी रूप से हटा दी गई थी। मुझे संदेह है कि प्रबन्धक ने ऑप्ट-इन नहीं किया था। –

0

बाहर की जांच j18n http://j18n.nomagicsoftware.com यह आप क्या चाहते हैं करता है और संसाधन विरासत का परिचय है और यह भी सभी संपादन के लिए संस्करण प्रदान करता है

3

बाहर चेक Multiproperties, आप अभी भी इस तरह के एक प्लगइन के लिए देख रहे हैं: see here

केवल # 6 आवश्यकता गायब है।

+0

अच्छा एक, और अभी भी सक्रिय रूप से विकसित हुआ। केवल इच्छा है कि संपत्ति से स्रोत तक बेहतर नेविगेशन सुविधाएं हों, लेकिन मैंने अभी तक इसे पूरी तरह से आजमाया नहीं है। – Gregor

1

यह पुराना है लेकिन यह एक अच्छा उपकरण है।

जेआरसी-संपादक: http://zaval.org/products/jrc-editor/ यह सब कुछ छोड़कर आप कुंजी को दोबारा क्रमबद्ध करते हैं (उन्हें सॉर्ट करें) जो आप चाहते हैं कि हो सकता है। (यह सुविधा बंद हो सकती है)

हालांकि कुंजी को दोबारा ऑर्डर करने के लिए अच्छा नहीं हो सकता है, लेकिन मुझे बहुत उपयोगी लगता है जब बहुत से लोग एक संसाधन बंडल पर काम करते हैं। स्रोत नियंत्रण उपकरण, जैसे एसवीएन, सॉर्ट किए गए संसाधन बंडलों को मर्ज करने का एक बेहतर मौका है।

संबंधित मुद्दे