2012-08-17 10 views
5

मैं समझता हूं कि जावा प्रोग्राम को अंतर्राष्ट्रीय कैसे बनाया जाए, लेकिन मुझे कोई समस्या है। मेरे कार्यक्रम में भाषा किसी भी समय स्विच की जा सकती है, लेकिन मेरा प्रोग्राम कई राज्यों में मौजूद हो सकता है, जिसका अर्थ है कि इसमें कई जेएलएबल्स, जेपीनेल, जेएफआरम्स, आदि खुले हो सकते हैं या नहीं। क्या कोई कक्षा या कोई तरीका है जो मौजूदा जीयूआई को स्विच की गई भाषा में अपडेट करेगा, या इसे मैन्युअल रूप से किया जाना है?जावा स्विंग - रनटाइम पर गतिशील रूप से स्विच करें

तो कुछ भी नहीं है और कुछ काम करता है, मैं सिर्फ भाषा स्विच करने के लिए कार्यक्रम को पुनः आरंभ करने उपयोगकर्ता की आवश्यकता होगी, लेकिन क्रम परिवर्तन अच्छा होगा ...

+0

क्या आपके पास प्रत्येक संभावित भाषा के लिए स्थानीय तार हैं? आप वर्तमान में उन तारों को कैसे ला रहे हैं? या वर्तमान में प्रत्येक तत्व में स्ट्रिंग्स स्ट्रिंग हैं? –

+0

मैंने अभी तक इस समस्या से बचने के लिए, केवल कुछ पंक्तियों को प्रोग्राम को नहीं लिखा है। मैं सब कुछ के लिए खुला हूँ! – Karlovsky120

+0

आप किस प्रकार का जावा प्रोग्राम लिखेंगे? जावाईई/जेएसएफ/आदि या किसी और चीज का उपयोग कर एक वेब ऐप? – jahroy

उत्तर

1

समाधान आम तौर पर इस्तेमाल उपयोगकर्ता की ओर मुख के हैश है एक केंद्रीय प्रबंधक वर्ग में तार। आप उस वर्ग में एक फोन करना है जब भी आप डेटा के साथ एक क्षेत्र को भरने के लिए चाहते हैं: इनसाइड

JLabel label = new JLabel(); 
label.setText(LocalizationManager.get("MY_LABEL_TEXT")); 

LocalizationManager आप इस कार्यक्रम की वर्तमान भाषा लाने के लिए है, तो होगा उचित में MY_LABEL_TEXT के लिए उपयुक्त स्ट्रिंग को देखने भाषा। तब प्रबंधक अब 'लोकलाइज्ड' स्ट्रिंग देता है, या कुछ डिफ़ॉल्ट अगर भाषा या स्ट्रिंग उपलब्ध नहीं है।

प्रबंधक को थोड़ा और जटिल मानचित्र के रूप में सोचें; यह एक कुंजी (यानी 'MY_LABEL_TEXT') से मैपिंग कर रहा है जिसे आप प्रदर्शित करना चाहते हैं ("शुभ दिन!" या "बिएनवेनिडो!") इस आधार पर कि आप किस भाषा में हैं। इसे लागू करने के कई तरीके हैं, लेकिन आप मेमोरी/प्रदर्शन कारणों के लिए प्रबंधक स्थिर या सिंगलटन (एक बार लोड) होना चाहते हैं।

उदाहरण के लिए: (1)

public class LocalizationManager { 
    private SupportedLanguage currentLanguage = SupportedLanguage.ENGLISH;//defaults to english 
    private Map<SupportedLanguage, Map<String, String>> translations; 

    public LocalizationManager() { 
    //Initialize the strings. 
    //This is NOT a good way; don't hardcode it. But it shows how they're set up. 

    Map<String, String> english = new HashMap<String, String>(); 
    Map<String, String> french = new HashMap<String, String>(); 

    english.set("MY_LABEL_TEXT", "Good day!"); 
    french.set("MY_LABEL_TEXT", "Beinvenido!");//is that actually french? 

    translations.set(SupportedLanguage.ENGLISH, english); 
    translations.set(SupportedLanguage.FRENCH, french); 
    } 

    public get(String key) { 
    return this.translations.get(this.currentLanguage).get(key); 
    } 

    public setLanguage(SupportedLanguage language) { 
    this.currentLanguage = language; 
    } 

    public enum SupportedLanguage { 
    ENGLISH, CHINESE, FRENCH, KLINGON, RUSSIAN; 
    } 
} 

(1) मैं इस परीक्षण किया है, न ही यह एक सिंगलटन है, लेकिन यह कफ उदाहरण बंद एक है।

+0

को आजमा सकते हैं, इसलिए मैं भाषा स्विच पर प्रबंधक को आमंत्रित करता हूं और यह अपडेट किए जाने वाले सभी तारों को अपडेट करेगा (जो हैं अपने अधिकार क्षेत्र के तहत)? – Karlovsky120

+0

क्या आप संभवतः मुझे स्थानीयकरण प्रबंधक के बारे में और बता सकते हैं, मुझे Google के साथ कुछ भी नहीं मिल रहा है? – Karlovsky120

+1

@ कार्लोव्स्की 120 मैंने कोशिश करने और उदाहरण प्रदान करने के लिए अपनी प्रतिक्रिया अपडेट की है। एक भाषा स्विच करने पर सभी तारों को अद्यतन न करें; इसे एक बार करो बेहतर अभी तक, आलसी करो, लेकिन यह अगला कदम है। यदि आपके पास एक इंटरफ़ेस है जैसा मैंने दिखाया है, तो आप कार्यान्वयन पर सुधार कर सकते हैं। –

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