9

जावा ट्यूटोरियल गुण फ़ाइलों पर प्राथमिकता API का उपयोग करने की अनुशंसा करते हैं। गुण फ़ाइलें और संसाधन बंडल अनुप्रयोगों में आंतरिककरण आवश्यकताओं को संभालने के लिए अनुशंसित तरीका हैं।जावा प्राथमिकताएं और अंतर्राष्ट्रीयकरण (i18n)

मैं दोनों है कि एक स्थान विशिष्ट तरीके से वरीयताओं को प्रदर्शित करेगा एक डेस्कटॉप अनुप्रयोग के लिए उपयोग कर पर विचार कर रहा हूँ।

किसी को भी इस दृष्टिकोण के साथ समस्या के कर सकते हैं?

हो सकता है कि मैं सिर्फ गुण फ़ाइलें अवधि इस्तेमाल करना चाहिए?

उत्तर

2

मैं डेस्कटॉप एप्लिकेशन के लिए दोनों का उपयोग करने पर विचार कर रहा हूं जो लोकेल विशिष्ट तरीके से वरीयताओं को प्रदर्शित करेगा।

ठीक है, तो आप क्या चाहते हैं के रूप में विन्यास फाइल अनुवाद किया है:

some_translated_key=some_value 

ठीक है, जब तक आप कुछ बिंदु पर MUI समर्थन करने के लिए यह एक बड़ी बात नहीं होना चाहिए चाहते हैं। हालांकि, यदि आप ऐसा करते हैं, तो एक ही कंप्यूटर पर अलग-अलग उपयोगकर्ता अलग-अलग भाषाओं का उपयोग कर सकते हैं, या उपयोगकर्ता भाषा स्विच करने में सक्षम हो सकता है, तो आपको किसी संपत्ति के मिलान की कुंजी में परेशानी होगी। कुंजी पढ़ने के दौरान आपको सभी अनुवाद स्कैन करना होगा, और आप निश्चित रूप से एक ही कुंजी के लिए कई प्रविष्टियों के साथ समाप्त हो जाएंगे। इसे कैसे हल करें? खैर, यह एक अच्छा सवाल है।

मेरे अनुभव से, कॉन्फ़िगरेशन फ़ाइलों को भाषा-स्वतंत्र (तटस्थ संस्कृति) होना चाहिए और कभी हाथ से संपादित नहीं किया जाना चाहिए (जो कि कुंजी का अनुवाद करना वास्तव में कोई फर्क नहीं पड़ता)।

public class Main { 
    private static final String FILE_NAME = "i18ned.properties"; 
    private File propertiesFile; 
    private Properties properties; 

    public Main() { 
     properties = new Properties(); 
     propertiesFile = new File(FILE_NAME); 
     if (propertiesFile.exists()) { 
      try { 
       properties.load(new BufferedReader(new FileReader(
         propertiesFile))); 
      } catch (FileNotFoundException e) { 
       // not likely, but should be logged either way 
      } catch (IOException e) { 
       // logger should be used instead 
       e.printStackTrace(); 
      } 
     } 
    } 

    public void saveProperties() { 
     try { 
      properties 
        .store(new BufferedWriter(new FileWriter(propertiesFile)), ""); 
     } catch (IOException e) { 
      // oops, use logger instead 
      e.printStackTrace(); 
     } 
    } 

    public static void main(String[] args) { 
     Main main = new Main(); 
     main.storeSome(); 
     main.readSome(); 
    } 

    private void readSome() { 
     String highAsciiKey = "żółć"; 
     String value = properties.getProperty(highAsciiKey); 
     System.out.println(value); 
    } 

    private void storeSome() { 
     String highAsciiKey = "żółć"; 
     String highAsciiValue = "łąkę"; 
     properties.setProperty(highAsciiKey, highAsciiValue); 
     saveProperties(); 
    } 

} 
+0

खैर चलो कहते हैं कि मैं एक विंडो का आकार प्राथमिकता है करते हैं:

मैंने सोचा था कि वर्ण एन्कोडिंग के साथ एक समस्या हो सकती है, लेकिन निम्नलिखित कोड का टुकड़ा एक मुद्दा बिना काम करता है (फ़ाइलें UTF-8 एन्कोडेड हैं)। – user697750

+0

विंडो आकार वरीयता के लिए आपके पास प्राथमिकता API या गुणों के बीच एक विकल्प है।इसका स्थानीयकरण के साथ कुछ लेना देना नहीं है ... –

+0

क्षमा करें मेरी टिप्पणी बंद हो गई है, – user697750

2

अनुप्रयोगों स्थानीयकृत के लिए संसाधन बंडल का उपयोग जावा में मानक तरीका है। इस तरह की समस्याएं हैं:

  1. संसाधन द्वारा आवश्यक संख्याओं और पैरामीटर के प्रकार की कोई संकलन समय जांच नहीं है।
  2. फ़ाइलों को साफ रखना मुश्किल है, उदा। वहाँ कोई तंत्र अप्रयुक्त तार
  3. यह सब ग्रंथों सभी समर्थित भाषाओं में अनुवाद किया बनाने के लिए कठिन है को दूर करने में मदद करता है।

आदि ....

शायद बेहतर अंतर्राष्ट्रीयकरण तंत्र उनके GWT में गूगल द्वारा सुझाव दिया है। वे प्रति स्ट्रिंग विधि के साथ कक्षा उत्पन्न करते हैं। उदाहरण के लिए आप पाठ Hello, {0} अगर वे उत्पन्न विधि String hello(String name);

तो, आप इस विधि को न 0 और न ही 2 तर्कों पारित नहीं कर सकते हैं। केवल एक।

यह आंशिक रूप से भी दूसरी समस्या का हल। यह देखना आसान है कि पूरे प्रोजेक्ट में विधि का उपयोग नहीं किया जाता है या नहीं। यह वैसे भी तीसरी समस्या का समाधान नहीं करता है।

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