2012-11-23 80 views
19

因爲我有針對性的Android新版的SDK,我已經在這行代碼得到一個警告:toUpperCaseLocale()與toUpperCase() - 現在瞄準的Android 4.2

return getString(R.string.usertab1).toUpperCase() 

當我在它懸停,它說:

隱式使用默認語言環境是一個常見的錯誤來源:使用toUpperCase(Locale)來代替。

有誰知道如何清除這個錯誤?爲什麼現在是使用這種方法的首選方式?

我得到這個答案,使用toUpperCase(Locale),但實施它有困難。 Locale對象來自哪裏?

回答

32

你可以明確使用默認的語言環境:

return getString(R.string.usertab1).toUpperCase(Locale.getDefault()); 

基本上,你不想隱含允許設備使用默認值,因爲這可能意味着你根本無視事實,這可能是一個問題。對於機器可讀內容,您可能希望指定特定的語言環境(如Locale.ENGLISH),以確保始終獲得數據中想要的可重用性。爲了顯示用戶,明確指定默認語言環境應該沒問題。

更完整的讀出:

常見的錯誤是產生意味着是機器可讀的輸出時,隱式地使用默認語言環境。這往往適用於開發人員的測試設備(特別是因爲許多開發人員使用en_US),但在用戶處於更復雜的區域設置的設備上運行時會失敗。

例如,如果格式化整數,某些語言環境將使用非ASCII十進制數字。作爲另一個例子,如果你正在格式化浮點數,一些語言環境將使用','作爲小數點,而'.'用於數字分組。這對於人類可讀的輸出是正確的,但是如果呈現給另一臺計算機可能會導致問題(例如,parseDouble(String)無法解析這樣的數字)。您還應該警惕toLowerCase()toUpperCase()超負荷,不要採用區域設置:例如,在土耳其,'i''I'的字符將不會被轉換爲'I''i'。這是土耳其文本的正確行爲(如用戶輸入),但不適用於HTTP標頭。

- Locale developer documentation

+1

一個更好的地方獲得,這是從配置對象,你可以從任何'Context'使用'getResources獲得()getConfiguration()':HTTP://開發商。 android.com/reference/android/content/res/Configuration.html#locale – adamp

+0

我有同樣的問題。我的字符是土耳其語,但我不能看到像這樣的「Locale.TURKISH」我該如何處理? –

+1

@GünayGültekin你可以使用新的Locale(「tr_TR」)':[**點擊這裏查看示例**](http://ideone.com/IavMuX) – Eric