2012-10-22 14 views
12

मैं अपने तुर्की तारों को अंग्रेजी और तुर्की दोनों लोकेल में लोअरकेस में अनुवाद करना चाहता हूं। मैं यह कर रहा हूँ:तुर्की और अंग्रेजी लोकेल सेट करना: तुर्की वर्णों को लैटिन समकक्षों का अनुवाद करें

String myString="YAŞAT BAYRI"; 
Locale trlocale= new Locale("tr-TR"); 
Locale enLocale = new Locale("en_US"); 

Log.v("mainlist", "en source: " +myString.toLowerCase(enLocale)); 
Log.v("mainlist", "tr source: " +myString.toLowerCase(trlocale)); 

उत्पादन होता है:

en source: yaşar bayri 

tr source: yaşar bayri 

लेकिन मैं इस तरह एक निर्गम करना चाहते हैं:

en source: yasar bayri 

tr source: yaşar bayrı 

जावा में यह संभव है?

उत्तर

26

आप Locale निर्माता का उपयोग कर रहे हैं, तो आप और भाषा, देश और संस्करण अलग तर्क के रूप में स्थापित करना चाहिए कर सकते हैं:

new Locale(language) 
new Locale(language, country) 
new Locale(language, country, variant) 

इसलिए, अपने परीक्षण कार्यक्रम स्थलों भाषा "tr-TR" के साथ बनाता है और "en_US"। अपने परीक्षण कार्यक्रम के लिए, आप new Locale("tr", "TR") और new Locale("en", "US") का उपयोग कर सकते हैं।

आप जावा 1.7+ का उपयोग कर रहे हैं, तो आप भी Locale.forLanguageTag का उपयोग कर एक भाषा टैग पार्स कर सकते हैं:

String myString="YASAT BAYRI"; 
Locale trlocale= Locale.forLanguageTag("tr-TR"); 
Locale enLocale = Locale.forLanguageTag("en_US"); 

तार भाषा के लिए उपयुक्त छोटे अक्षर है कि बनाता है।

3

यदि आप केवल एसीसीआईआई में स्ट्रिंग चाहते हैं, बिना उच्चारण के, तो निम्नलिखित हो सकता है। पहले एक उच्चारण वाले चरित्र को ASCII char में विभाजित किया जा सकता है और एक संयोजन डायक्रिटिकल मार्क (शून्य-चौड़ाई उच्चारण)। फिर केवल उन उच्चारणों को नियमित अभिव्यक्ति प्रतिस्थापित करके हटाया जा सकता है।

public static String withoutDiacritics(String s) { 
    // Decompose any ş into s and combining-,. 
    String s2 = Normalizer.normalize(s, Normalizer.Form.NFD); 
    return s2.replaceAll("(?s)\\p{InCombiningDiacriticalMarks}", ""); 
} 
6

मुझे लगता है कि इस समस्या है:

Locale trlocale= new Locale("tr-TR"); 

बजाय इस प्रयास करें:

Locale trlocale= new Locale("tr", "TR"); 

निर्माता देश और भाषा निर्दिष्ट करने के लिए उपयोग करने के लिए है।

+0

नया लोकेल ("tr") वास्तव में पर्याप्त होगा, क्योंकि तुर्की भाषा के लिए पूंजीकरण नियम देश से स्वतंत्र हैं। – jarnbjo

1

अक्षरों ş और s अलग-अलग वर्ण हैं। लोकेल बदलना आपको एक दूसरे को अनुवाद करने में मदद नहीं कर सकता है। आपको तुर्की-से-अंग्रेज़ी वर्ण तालिका बनाना है और इसे स्वयं करना है। मैंने एक बार वियतनाम भाषा के लिए ऐसा किया जिसमें बहुत सारे पात्र हैं। आपको 5 में से 4 से निपटना होगा, है ना? इतनी अच्छी किस्मत! जबकि अन्य एक अपने देश है

Locale trlocale= new Locale("tr","TR"); 

पहले पैरामीटर अपनी भाषा है,:

1

आप ऐसा कर सकते हैं।

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