Android develop 國際化

轉自別人的一片文章,出處以找不到了,覺得寫得不錯,記錄一下

一、概念

  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

?

轉載于:https://www.cnblogs.com/wanjintun/p/5003828.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/272695.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/272695.shtml
英文地址,請注明出處:http://en.pswp.cn/news/272695.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

php留言板記錄ip,如何用php程序記錄來訪IP

如何用php程序記錄來訪IP關注:226 答案:4 手機版解決時間 2021-02-16 00:05提問者失夜久伴你2021-02-15 01:22如何用php程序獲取來訪IP&#xff0c;然后保存在txt文件中,并且只保留最新的30個數據.最佳答案二級知識專家追尋☆①秒方向2021-02-15 02:19有一個全局的變量&#…

【基礎】jquery全選、反選、全不選代碼

1、JS代碼function ($) {//全選 反選 全不選$("#selAll").click(function () {$(".lists :checkbox").not(:disabled).prop("checked", true);});$("#unSelAll").click(function () {$(".lists :checkbox").not(:disabled).…

oracle 11g重新安裝配置,Oracle 11g數據庫安裝和卸載教程

Oracle11g的安裝教程同時解壓縮兩個zip文件&#xff0c;生成一個database文件夾&#xff0c;進入到database文件夾&#xff0c;點擊setup去掉安全更新的選項&#xff0c;直接下一步選擇創建和配置數據庫&#xff0c;點擊下一步選擇服務器類&#xff0c;點擊下一步選擇單例數據庫…

C語言中strdup函數使用方法

頭文件&#xff1a;#include <string.h> 定義函數&#xff1a;char * strdup(const char *s); 函數說明&#xff1a;strdup()會先用malloc()配置與參數s 字符串相同的空間大小&#xff0c;然后將參數s 字符串的內容復制到該內存地址&#xff0c;然后把該地址返回。該地址…

高級程序員和低級程序員的區別

低級程序員認為自己與高級程序員的區別, 主要是高級程序員任何功能都能編碼實現, 編碼速度快, 代碼無 bug. 正如一慣的那樣, 低級程序員之所以低級, 正是因為他們勉強能看到(或者根本看不到)事物的表象而看不到本質. 所以, 低級程序員總結出的一切東西, 你都可以大膽的忽略。所…

oracle中的tx鎖影響查詢嗎,如何找到TM鎖對應的TX鎖?

我昨天也這樣試過&#xff0c;但出來的結果和預料相差很遠。wyqORCL>update emp set ename ename;12 rows updated.wyqORCL>get lockline 16 truncated.1 /* showalllock.sql */2 column username format a63 column object_name format a134 column o_name format …

IISExpress Log 文件路徑

問題 用VS做開發時經常用IISExpress測試web程序&#xff0c;那么在測試過程中生成的Log文件放在哪里了&#xff1f; 答案 情況1 默認情況下 applicationhost.config 文中定義了連個日志文件路徑&#xff1a;IIS_USER_HOME&#xff08;即%userprofile%\documents\IISExpress\&am…

程序員職業路線圖

今天分享一張程序員職業路線圖&#xff1a;歡迎關注我的公眾號&#xff08;同步更新文章&#xff09;&#xff1a;DoNet技術分享平臺閱讀原文

jqgrid編輯php,php – 實現jqgrid單元格編輯datepicker

我知道使用datepicker進行單元格編輯是可能的,因為引用了here和here.但是,當我單擊單元格時,沒有出現日期選擇器.下面是相關列的colModel條目.我有datepicker UI可用.在其他示例中,dataInit不包含引號.它在我的代碼中,因為整個colModel是在AJAX請求期間由PHP動態創建的.我將它構…

C#編程規范整理

小編整理了一些C#編程的一些規范&#xff0c;希望對大家有點用處&#xff01;1、命名方式Pascal命名法&#xff1a;每個單詞首字母均大寫。Camel命名法&#xff1a;第一個單詞首字母小寫&#xff0c;其余單詞首字母大寫。2、有關類的規范1、使用 Pascal 大小寫。2、用名詞或名詞…

利用協議代理實現導航控制器UINavigationController視圖之間的正向傳值和反向傳值...

實驗說明 &#xff08;1&#xff09;正向傳值&#xff1a;比如A類里地值要傳給B類用&#xff0c;就是我們先在A類中聲明一個B類對象&#xff08;當然B類頭文件要import過來&#xff09;&#xff0c;然后把A類中得某個 值傳遞給B類中得某個值&#xff08;所以需要在B類中先準備一…

oracle索引自增函數,oracle生成動態前綴且自增號碼的函數分享

create or replaceFunction GetInvitationNO(prev varchar2, num1 varchar2, num2 varchar2, sessionSetting varchar2)Return Varchar2Authid Current_User Is PRAGMA AUTONOMOUS_TRANSACTION;-- 需要使用“Current_User”的權限防止無法運行“Execute Immediate”命令 & …

JS字符串轉換為JSON的四種方法筆記

1、jQuery插件支持的轉換方式&#xff1a;示例&#xff1a;$.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以將json字符串轉換成json對象2、瀏覽器支持的轉換方式(Firefox&#xff0c;chrome&#xff0c;opera&#xff0c;safari&#xff0c;ie)等瀏覽器&#xff1a;…

iOS Block全面分析

http://my.oschina.net/leejan97/blog/268536 http://blog.csdn.net/enuola/article/details/8674063 注意事項1.內聯的block中內部定義的變量 自己本身有讀寫權限2.block內部要修改外部變量 需要將外部變量聲明__block3.Block retain是無效的&#xff0c;要想保留block生命周期…

win7 php redis 擴展,Windows中安裝Redis及php redis擴展

Windows10環境安裝Redis:1、下載Redis安裝包&#xff1b;2、解壓到自定義目錄&#xff1b;3、windows鍵R&#xff0c;輸入cmd 進入命令行&#xff0c;進入Redis的解壓目錄&#xff1b;4、運行&#xff1a;redis-server.exe redis.windows.conf 顯示如下&#xff0c;說明啟動成功…

【原創】MVC+ZTree實現權限樹的功能

2、html代碼權限樹&#xff1a;3、JS代碼var setting {async: {enable: true,url: /RoleToPerssion/GetPerssionTree,//異步加載時的請求地址autoParam: ["roleid"],//提交參數type: get,dataType: json},check: {enable: true, //true / false 分別表示 顯示 / 不…

集合習題之列出有限集合所有子集

1、題目&#xff08;《離散數學及其應用》第6版P75 20 題&#xff09; 給出可以列出有限集合所有子集的步驟。 2、 解題思路 假設有集合A {a1, a2 … an}&#xff0c;列出其所有子集。 先列出含有1個元素的所有子集&#xff1a;{a1},{a2} … {an}然后列出含有2個元素的所有子…

C# partial 關鍵字的使用

C# 2.0 引入了局部類型的概念。局部類型允許我們將一個類、結構或接口分成幾個部分&#xff0c;分別實現在幾個不同的.cs文件中。局部類型適用于以下情況&#xff1a;(1) 類型特別大&#xff0c;不宜放在一個文件中實現。(2) 一個類型中的一部分代碼為自動化工具生成的代碼&…

oracle中的輸入 amp,Oracle之SQL學習

1.Oracle 更改會話(更改oracle中顯示日期的方式)SQL> alter session set NLS_date_formatYYYY-MM-DD;2.使用綁定變量來輸入記錄(可以重復執行&#xff0c;輸入記錄)&#xff1a;SQL> insert into test1(id,name)2 values(&id, &name);輸入 id 的值: 5輸入 name…

線段的平移和旋轉

//github不會用&#xff0c;試了很久不知道怎么上傳代碼 #include <iostream> using namespace std;#include <stdlib.h> #include <Eigen/Dense> #include <math.h> using namespace std; using Eigen::MatrixXd; int main() { int option; struct p…