यह उत्तर थोड़ा देर से हो सकता है, लेकिन यह पता चला है कि स्ट्रिंग को पार्स करना उतना बदसूरत नहीं है जितना ओपी ने माना था। मैंने इसे काफी सरल और संक्षिप्त पाया:
public static Locale fromString(String locale) {
String parts[] = locale.split("_", -1);
if (parts.length == 1) return new Locale(parts[0]);
else if (parts.length == 2
|| (parts.length == 3 && parts[2].startsWith("#")))
return new Locale(parts[0], parts[1]);
else return new Locale(parts[0], parts[1], parts[2]);
}
मैंने इसको (जावा 7 पर) लोकेल.टोस्ट्रिंग () प्रलेखन: "en", "de_DE", "_GB", "en_US_WIN", "de__POSIX", "zh_CN_ # हंस", "zh_TW__" में दिए गए सभी उदाहरणों के साथ परीक्षण किया। # हंट-एक्स-जावा ", और" th_TH_TH_ # u-nu-थाई "।
महत्वपूर्ण अद्यतन : यह प्रलेखन के अनुसार जावा 7+ में उपयोग के लिए अनुशंसित नहीं है :
विशेष रूप से, क्लाइंट जो भाषा, देश, और वैरिएंट फ़ील्ड में आउटपुट को पार्स करते हैं (हालांकि यह दृढ़ता से हतोत्साहित किया जाता है ), हालांकि स्क्रिप्ट या एक्सटेंशन मौजूद होने पर वेरिएंट फ़ील्ड में अतिरिक्त जानकारी होगी।
इसके बजाय Locale.forLanguageTag और Locale.toLanguageTag का उपयोग करें, या यदि आप अवश्य करें, तो Locale.Blilder।