5

से स्ट्रिंग स्थिरांक जेनरेट करें मैं संदेश अंतर्राष्ट्रीयकरण के लिए .properties फ़ाइलों का उपयोग कर रहा हूँ।गुण फ़ाइल कुंजी

HELLO_WORLD = Hello World 
HELLO_UNIVERSE = Hello Universe 

और फिर जावा कोड में: उदाहरण के लिए, क्योंकि वे त्रुटि प्रवण रहे हैं और स्वतः पूर्ण नहीं किया जा सकता

"HELLO_WORLD" तरह
String foo = resourceBundle.getString("HELLO_WORLD"); 

स्ट्रिंग शाब्दिक समस्याग्रस्त हैं। तो

public interface Messages { // Or abstract class with private constructor 
    public static final String HELLO_WORLD = "HELLO_WORLD"; 
    public static final String HELLO_UNIVERSE = "HELLO_UNIVERSE"; 
} 

और इस तरह इसका इस्तेमाल:

String foo = resourceBundle.getString(Messages.HELLO_WORLD); 

वहाँ यह करने के लिए एक मानक तरीका है मैं गुण की कुंजियों का उपयोग इस तरह फाइल कोड जेनरेट करना चाहते हैं? मैं एक मैवेन प्लगइन पसंद करता हूं, लेकिन मैन्युअल रूप से चलाए जा सकने वाले किसी भी स्टैंड-अलोन टूल की ज़रूरतों के लिए पर्याप्त होगा।

+0

यह एक बहुत लग रहा है एंड्रॉइड विकास में संसाधन प्रणाली की तरह ... मुझे आश्चर्य है कि इसका उपयोग गैर-एंड्रॉइड परियोजनाओं के लिए किया जा सकता है? – Adam

+0

क्या आप इस http://owner.aeonbits.org/docs/welcome/ का उपयोग करना चाहते हैं?अन्य उपयोगी विशेषताएं हैं जो आपको प्रदान करती हैं जिनमें आप शायद रीलोड और हॉट रीलोड सामान जैसे रुचि रखते हैं। – Aarjav

उत्तर

2

निम्नलिखित कोड परियोजना की आपकी रूट निर्देशिका में इंटरफ़ेस MyProperties उत्पन्न करेगा, उसके बाद आप कहीं भी उस इंटरफ़ेस का उपयोग कर सकते हैं।

public class PropertiesToInterfaceGenerator { 

    public static void main(String[] args) throws IOException { 

     Properties properties = new Properties(); 
     InputStream inputStream =PropertiesToInterfaceGenerator.class.getClassLoader().getResourceAsStream("xyz.properties"); 
     if(null != inputStream){ 
      properties.load(inputStream); 
     } 
     generate(properties); 
    } 


    public static void generate(Properties properties) { 
     Enumeration e = properties.propertyNames(); 
     try { 
      FileWriter aWriter = new FileWriter("MyProperties.java", true); 
      aWriter.write("public interface MyProperties{\n"); 
      while (e.hasMoreElements()) { 
       String key = (String) e.nextElement(); 
       String val = properties.getProperty(key); 
       aWriter.write("\tpublic static String "+key+" = \""+val+"\";\n"); 
      } 
      aWriter.write(" }\n"); 
      aWriter.flush();  
      aWriter.close(); 
     }catch(Exception ex){ 
      ex.printStackTrace(); 
     } 
    } 
} 
+0

आप फ़ाइल में क्यों शामिल हैं? –

3

बेस्ट दूसरे के चारों ओर जिस तरह से:

public enum Message { 
    HELLO_WORLD, 
    HELLO_UNIVERSE; 

    public String xlat(Locale locale) { 
     resourceBundle.getString(toString(), locale); 
    } 
} 

कि enum एक गुण टेम्पलेट से उत्पन्न करें। यदि आपकी बेस भाषा अलग ..._en.properties में रहती है तो इसे नए संदेशों के लिए दोहराया जा सकता है।

पीढ़ी बिना मूल्यों() - पीढ़ियों के उपयोग करके किया जा सकता है। यद्यपि आप गुणों की टिप्पणियों या इस तरह के लिए कुछ एनोटेशन शुरू करना चाहते हैं।

1

नहीं, कोई भी कभी प्लगइन सभी क्षमताओं आप expexted किया है कि इस तरह के प्रकार, लिखा है क्योंकि:

  • अंतर्राष्ट्रीयकरण प्रविष्टियों की एक बहुत हो सकता है, और आप अंत में एक विशाल वर्ग मिल जाएगा, इंटरफ़ेस, enum या अंत में जो भी, जो बुरा है।
  • एक मेवेन/ग्रेडल प्लगइन आपके लिए कक्षाएं उत्पन्न करता है, लेकिन केवल संकलन समय पर। मैंने देखा है कि आपने ऑटो-पूर्णता का उल्लेख किया है, जिसका अर्थ है कि आपको एक आईडीई प्लगइन की भी आवश्यकता होगी, जिसका मतलब है कि एक बिल्डिंग टूल (ग्रेडल/चींटी/...) के लिए प्लगइन पर्याप्त नहीं है। बातचीत इन betinseen त्रुटि-प्रवण हो सकता है।
  • बाद में प्रोजेक्ट में, यदि आप, या आपके सहयोगी, एक नई अनुवाद प्रविष्टि चाहते हैं, और आपको कक्षाओं को पुन: उत्पन्न करना होगा। यह थोड़ा थकाऊ है।

अंतर्राष्ट्रीयकरण से निपटने पर, i18n जैसे कुछ की अनुशंसा की जाती है। आप एक नए पुस्तकालय नहीं चाहते हैं या अपनी परियोजना छोटा है, तो आप का उपयोग करने के चुनते हैं, ग्रहण के तार समारोह बाह्यरूप, उस के लिए कर सकते हैं

Andriod: Externalize strings for Android project

अन्य: help.eclipse.org - Java development user guide > Reference > Wizards and Dialogs > Externalize Strings Wizard

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