2014-07-10 52 views
4

我正在設計一個英文和中文兩個Android應用程序。我想知道用戶是否輸入英文文本或中文文本?有沒有什麼辦法可以在android中檢查?如何在android中檢查給定的文本是英文還是中文?

+0

使用TextWatcher您的EditText – Ameer

+2

從輸入每次取焦,看看unicode的點的範圍相匹配對於中文字符(http://stackoverflow.com/questions/1366068/whats-the-complete-range-for-chinese-characters-in-unicode) –

回答

7

如果要檢測輸入字符串是否包含中國一樣的特性(S)(CJK)時,以下可能會對您有所幫助:

public static boolean isCJK(String str){ 
     int length = str.length(); 
     for (int i = 0; i < length; i++){ 
      char ch = str.charAt(i); 
      Character.UnicodeBlock block = Character.UnicodeBlock.of(ch); 
      if (Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS.equals(block)|| 
       Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS.equals(block)|| 
       Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A.equals(block)){ 
       return true; 
      } 
     } 
     return false; 
    } 
2

如果你想獲得設備的默認語言Locale.getDisplayLanguage()應該給你用戶的語言。

否則,this可能會幫助你。

編輯:

我不知道,但谷歌翻譯做到這一點。當用戶鍵入內容時,它會自動檢測語言。所以,Google Translate API應該能夠爲你做到這一點。

EDIT2

是的,它用一個簡單的HTTPGET呢,here是鏈接。

+0

其實我公司有它自己的英文和中文鍵盤。即使設備語言被更改,用戶也可以使用這兩種語言。所以這不會爲我工作 –

+0

如果您使用自己的鍵盤,您是否應該很容易檢測到哪個鍵盤被選中? –

+0

實際上檢測鍵盤不是問題。我創建了一個用戶存儲10條消息的問候應用程序。有些是英文的,有些是中文的。取決於中文信息是按下的還是英文的,我想顯示不同的輸出。那爲什麼我要識別語言 –

1
String language = Locale.getDefault().getDisplayLanguage(); will give your default language of your device 
System.out.println("My locale::"+Locale.getDefault().getDisplayLanguage()); 
it will print like My locale:: english; 

現在你必須檢查

if(language.equalignorecase("engish")){ 
    // do your stuff for english 
}else{ 
// do your stuff for chienese 
} 

也可以使用Language Detection Library for android

+0

這是爲了檢測android中使用的語言。我想知道我的活動中的特定語言類型。例如:Text1.IsThisEnglishOrChinese()..就像這樣 –

2

接受的答案是不完整或過時的d。以下是一些可用於測試角色是否爲CJK表意文字的方法。我的更完整的答案是here

由於許多中文字符位於較高的代碼層面,因此最好使用代碼點而不是charAt(如在接受的答案中)。使用charAt只會給你一個代理對,而不是實際的中文字符。因此,通過一個String循環更好的辦法是像this

final int length = myString.length(); 
for (int offset = 0; offset < length;) { 
    final int codepoint = Character.codePointAt(myString, offset); 

    // use codepoint here 

    offset += Character.charCount(codepoint); 
} 

和測試碼點可以通過以下方式之一來完成。

private boolean isCJK(int codepoint) { 
    Character.UnicodeBlock block = Character.UnicodeBlock.of(codepoint); 
    return (Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS.equals(block)|| 
      Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A.equals(block) || 
      Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B.equals(block) || 
      Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C.equals(block) || // api 19, remove these if supporting lower versions 
      Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D.equals(block) || // api 19 
      Character.UnicodeBlock.CJK_COMPATIBILITY.equals(block) || 
      Character.UnicodeBlock.CJK_COMPATIBILITY_FORMS.equals(block) || 
      Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS.equals(block) || 
      Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT.equals(block) || 
      Character.UnicodeBlock.CJK_RADICALS_SUPPLEMENT.equals(block) || 
      Character.UnicodeBlock.CJK_STROKES.equals(block) ||      // api 19 
      Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION.equals(block) || 
      Character.UnicodeBlock.ENCLOSED_CJK_LETTERS_AND_MONTHS.equals(block) || 
      Character.UnicodeBlock.ENCLOSED_IDEOGRAPHIC_SUPPLEMENT.equals(block) || // api 19 
      Character.UnicodeBlock.KANGXI_RADICALS.equals(block) || 
      Character.UnicodeBlock.IDEOGRAPHIC_DESCRIPTION_CHARACTERS.equals(block)); 
} 

或爲API 19

private boolean isCJK(int codepoint) { 
    return Character.isIdeographic(codepoint); 
} 

或爲API 24

private boolean isCJK(int codepoint) { 
    return (Character.UnicodeScript.of(codepoint) == Character.UnicodeScript.HAN); 
} 
相關問題