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.mzph.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…