轉自別人的一片文章,出處以找不到了,覺得寫得不錯,記錄一下
一、概念
1.Internationalization(I18N)
國際化
使得App在不改的源碼、資源文件的情況下,能夠適應各國、各文化、各語言
是L10N的基礎
2.Localization(L10N)
本地化
為App提供本地化的語言,圖片,媒體資源等
二、Strings
1.永遠不要在任何地方Hard-code字符串
layouts, xmls, menus, codes
使用Lint查找所有hardcoded字符串
2.永遠不要拼接字符串
錯誤的做法:
<string name=“total”>共計</string>
<string name=“apps”>個應用</string>
String result = getString(R.string.total) + Integer.toString(appCount) + getString(R.string.apps)
正確的做法:
<string name=“total_apps”>共計%1$d個應用</string>
String result = getString(R.string.total_apps, appCount)
三、Layouts
1.Flexible layouts
避免hard code margin, padding, width, height
多使用minWidth, minHeight, maxWidth, maxHeight等屬性
需要定義精確尺寸的時候,請注意: 為外語留出足夠的空間(例如中文長度*2,或者英文長度*1.5)
為特定語言提供定制的Layouts
2.RTL
中東語言為主
Android 4.2+支持 layoutDirection, textDirection, textAlignment, etc
http://android-developers.blogspot.fr/2013/03/native-rtl-support-in-android-42.html
?
四、Plurals
1.量詞
一個應用,兩個應用,三個應用
One app, two apps, three apps
中文非常簡單,但是其他語言可能有更多變化
至少需要定義one, other, 但是也可以定義zero, two, few, many
2.R.plurals
使用專用的<plurals></plurals>在資源中定義
http://developer.android.com/guide/topics/resources/string-resource.html#Plurals
五、Date, time, numbers, currencies
1.利用現有API
不要重復制造輪子
不如Android系統對語言的支持廣泛
2.需要深入理解以下類:
DateUtils, DateFormat, DecimalFormat
六、Resource Management
1.為不同locale定義不同的resources
values values-es values-jp values-zh-rCN values-zh-rTW
2.資源匹配
MCC, MNC, configuration(landscape, portrait), language, region
Android會嘗試按照精確度尋找匹配,如果無法找到匹配,則使用默認資源
對于國際化產品,默認資源建議為英文,中文資源請放在-zh-rCN中
默認資源必須為全集
3.資源命名
Module_Name
其中Module為縮寫,全部小寫,不超過3個字符
Name為具體資源的英文名稱,首字母大寫
4.刪除不需要的資源
在多語言環境下,多出一個資源會導致apk文件體積大幅增加
避免使用 Resources.getIdentifier(可能被compressed)
5.禁止使用反射等方式獲取資源id
6.不要使用可被本地化的資源作為索引或進行持久化
例如hashmap的key,或者使用button.text判斷是否是特定button,這些資源可能會在運行時改變,導致程序工作異常
七、Help translators
1.提供string的上下文信息
<!-- The action for submitting a form. This text is on a button that can fit 30 chars -->
<string name="login_submit_button">Sign in</string>
2.標出無法翻譯的部分
<string name="countdown"><xliff:g id="time" example="5 days>%1$s</xliff:g>until holiday</string>
3.在翻譯團隊提出問題時,請盡快給出反饋
八、Testing
1.I18N testing
提供中文與英文版本,測試人員測試不同環境下UI語言是否正確(hardcode) 未來可制作pseudo translation版本,測試I18N
在運行時切換系統語言設定,App需要能夠正確改變語言(configuration change)
2.L10N testing
眾測機制(用戶,當地運營團隊,etc)
九、References
1.Localizing with Resources
http://developer.android.com/guide/topics/resources/localization.html
2.Localization Checklist
http://developer.android.com/distribute/tools/localization-checklist.html
3.String resources
http://developer.android.com/guide/topics/resources/string-resource.html
4.RTL
http://android-developers.blogspot.fr/2013/03/native-rtl-support-in-android-42.html
5.Support Different Languages
http://developer.android.com/training/basics/supporting-devices/languages.html
?