2011-04-07 9 views
8

मुझे इस तरह iso2 भाषा कोड मिल रहा है:लोकेल के लिए iso2 भाषा कोड कैसे प्राप्त करें?

public String getLang(Locale language) 
    return language.toString().substring(0,2).toLowerCase() 
} 

क्या ऐसा करने का कोई बेहतर तरीका है?

संपादित करें: जब मैं getLanguage का उपयोग करता हूं, मुझे एक खाली स्ट्रिंग मिलती है।

+3

आपकी विधि सुरक्षित नहीं है। जैसे अर्गोनी के लिए आईएसओ 3 कोड 'arg' है जबकि आईएसओ 2 कोड 'an' है। –

उत्तर

11

क्या

के बारे में
public String getLang(Locale language) 
    return language.getLanguage(); 
} 

बेशक, यह केवल एक ISO 639-1 2-lettercode हो सकता है अगर वहाँ एक इस भाषा के लिए परिभाषित किया गया है, अन्यथा यह 3-अक्षर कोड (या यहां तक ​​कि लंबा) वापस कर सकता है।


आपका कोड मूर्खतापूर्ण परिणाम देगा यदि आप भाषा कोड के बिना एक स्थान है (जैसे _DE) (मेरा तो खाली स्ट्रिंग है, जो थोड़ा बेहतर है, IMHO वापस आ जाएगी)। यदि लोकेल में एक भाषा कोड होता है, तो यह इसे वापस कर देगा, लेकिन फिर आपको toLowerCase() कॉल की आवश्यकता नहीं है।

+0

मेरे लिए यह अपेक्षित "nl" की बजाय "nl_be" देता है। यह कैसे संभव है? मुझे locale.getLanguage() विभाजित करना था ("_") [0] इसे प्राप्त करने के लिए :( – Wouter

2

मेरे पास एक ही प्रश्न थे और यही मुझे मिला।

आप के रूप में निर्माता के साथ Locale बनाते हैं:

Locale locale = new Locale("en_US"); 

और फिर आप फोन getLanguage:

String language = locale.getLanguage(); 

language का मान "en_us" हो जाएगा;

आप निर्माता के साथ Locale बनाते हैं:

Locale locale = new Locale.Builder().setLanguage("en").setRegion("US").build() 

तो मूल्य locale.getLanguage() वापस आ जाएगी हो जाएगा "एन"।

यह मेरे लिए अजीब बात है लेकिन यह जिस तरह से लागू किया गया था।

तो यह समझने का लंबा जवाब था कि यदि आप दो अक्षर वाली आईएसओ भाषा वापस करने के लिए भाषा कोड चाहते हैं तो आपको जावा Locale निर्माता का उपयोग करने की आवश्यकता है या कुछ स्ट्रिंग मैनिपुलेशन करें।

आपका substring काम करता है के साथ विधि, लेकिन मैं कुछ प्रयोग करेंगे जैसे मैं उदाहरणों को कवर करने के लिए नीचे दिए गए लिखा था जहां सीमांकक हो सकता है "-" या "_"।

public String getLang(Locale language) 
    String[] localeStrings = (language.split("[-_]+")); 
    return localeStrings[0]; 
} 
संबंधित मुद्दे