转自:https://blog.csdn.net/qinghua0706/article/details/8243858

最近开始做智能机,用的是展讯6820平台,第一个需求就是改默认语言,一般碰到不会的东西首先想到的就是上网找下了。网络确实是个好东西,给我们的工作和学习带来了极大的方便,但享受到网络的方便的同时也体会到了庞大的信息带给我们的困惑和迷茫,就一个字,晕!

首先说下在网上能找到的答案吧

1. 进入android 源代码build/target/product目录,在languages_full.mk或languages_small.mk文件中,修改PRODUCT_LOCALES的值,在PRODUCT_LOCALES字段里,将要选择的语言放在第一位。

  1.  
    假如当前 PRODUCT_LOCALES := en_US zh_CN ... ... (English 简体中文)
  2.  
    可以修改为:PRODUCT_LOCALES := zh_CN en_US ... ... (简体中文 English )

修改完后重新编译,生成img文件fastboot到手机。

2. 进入adb shell,直接使用setprop 命令设置 persist.sys.language 和 persist.sys.country这两个属性值。
例如:

  1.  
    setprop persist.sys.language zh
  2.  
    setprop persist.sys.country CN

完成配置后重启就能够达到你预期的结果的。

3.   进入build/target/product目录,修改文件core.mk的PRODUCT_PROPERTY_OVERRIDES 值,例如,欲修改为默认中文,则增加 
“\ persist.sys.language=zh \ persist.sys.country=CN”,增加后的语句如

  1.  
    <span style="font-size:18px;"> PRODUCT_PROPERTY_OVERRIDES :=
  2.  
     
  3.  
     ro.config.notification_sound=OnTheHunt.ogg \
  4.  
     
  5.  
     ro.config.alarm_alert=Alarm_Classic.ogg \
  6.  
     
  7.  
    persist.sys.language=zh \
  8.  
     
  9.  
    persist.sys.country=CN </span>

4.   如果是自己编译源码 编译的时候,通过指明编译参数为简体中文,这样编译传统就会编译出来的系统属性文件,在

系统初始化的时候将会把上面的属性给进行正确的初始化,例如:

  make PRODUCT-machineID-eng-zh_CN

或者修改build/tools/buildinfo.sh添加

  1. <code class="language-html"><span style="font-size:18px;"> echo "persist.sys.language=zh"
  2. echo "persist.sys.country=CN"
  3. echo "persist.sys.localevar="
  4. echo "persist.sys.timezone=Asia/Shanghai"
  5. echo "ro.product.locale.language=zh"
  6. echo "ro.product.locale.region=CN"</span></code>

5、在init.rc或者在其他的开机初始化文件如:default.prop中加入如下设置系统属性的代码:
 

  1.  
     [persist.sys.language]: [zh]
  2.  
     
  3.  
      [persist.sys.country]: [CN]
  4.  
     
  5.  
      [persist.sys.localevar]: []
  6.  
     
  7.  
      [persist.sys.timezone]: [Asia/Shanghai]
  8.  
     
  9.  
      [ro.product.locale.language]: [zh]
  10.  
     
  11.  
      [ro.product.locale.region]: [CN]

6.   修改system\build.prop

      ro.product.locale.language=zh
 ro.product.locale.region=CN
persist.sys.timezone=Asia/Shanghai

看完了是不是觉得很晕,这几个方法都被转载了N遍,真的有这么多种方法吗?这么多地方可以修改,那到底执行的顺序是怎么样的,比如说在一个地方设置为中文,另外一个地方设置为英文,肯定有一个地方要被覆盖了。

首先要说的是上面的答案从某种程度来讲确实都可以修改默认语言,要不然也不会有人分享出来,而且都被转载了N遍,但估计都是觉得改好了就算了,也不想到底合不合理。看到答案,首先就没有考虑第2条和第6条,这样子改完了重新编译工程烧到手机里面不又还原了吗,system\build.prop 这个文件时编译完了之后才生成的。第1条也不适合我,打开代码中的languages_full.mk和languages_small.mk文件,中文都不是在第一位的,但实际上手机的语言是中文的。第5条答案没试,不知道init.rc文件在哪里,搜索了一下发现很多地方都有这个文件,打开来看由于知识有限也看不懂。

剩下两个答案经过试验都是有效的,但到底加载默认语言的顺序是怎样的,然后在上网找了一下,也知道了为什么改languages_full.mk不行了。首先anguages_full.mk和languages_small.mk这两个文件第一个都是en_US。

PRODUCT_LOCALES := en_US fr_FR it_IT es_ES de_DE nl_NL cs_CZ <span style="font-size:18px;">...</span>

打开build/core/Makefile文件,里面有这样一段代码

  1.  
    define default-locale-language
  2.  
    $(word 2, 2, $(call default-locale, $(1)))
  3.  
    endef
  4.  
    define default-locale-region
  5.  
    $(word 3, 3, $(call default-locale, $(1)))
  6.  
    endef

下面有一段这样的代码

  1.  
    PRODUCT_DEFAULT_LANGUAGE="$(call default-locale-language,$(PRODUCT_LOCALES))" \
  2.  
    PRODUCT_DEFAULT_REGION="$(call default-locale-region,$(PRODUCT_LOCALES))" \

可以看出,默认语言确实取出的是PRODUCT_LOCALES字段的第一个,然而在这个之前有这样一段代码

<span style="font-size:18px;">BUILDINFO_SH := build/tools/buildinfo.sh</span>

说明Makefile会调用build/tools/buildinfo.sh执行脚本,并输出到build.prop。现在打开buildinfo.sh惊喜地发现我的代码中

  1.  
    #echo "ro.product.locale.language=$PRODUCT_DEFAULT_LANGUAGE"
  2.  
    #echo "ro.product.locale.region=$PRODUCT_DEFAULT_REGION"

原来这个被注释掉了,再下面

  1.  
    if [ $TARGET_PRODUCT_CARRIER = "GENERAL" ]; then
  2.  
    echo "ro.product.locale.language=en"
  3.  
    echo "ro.product.locale.region=US"
  4.  
    else
  5.  
    echo "ro.product.locale.language=zh"
  6.  
    echo "ro.product.locale.region=CN"
  7.  
    fi

原来是这样子来的。还没结束,接着Makefile中直接把$(TARGET_DEVICE_DIR)/system.prop的内容追加到build.prop中,还会收集ADDITIONAL_BUILD_PROPERTIES中的属性,追加到build.prop中。

  1.  
    ADDITIONAL_BUILD_PROPERTIES := \
  2.  
    $(call collapse-pairs, $(ADDITIONAL_BUILD_PROPERTIES))

也就是到了 build/target/product/core.mk中$(PRODUCT_PROPERTY_OVERRIDES)里面的值,也可以在这里面指定语言。
       每套android的代码都不完全相同,可以还有其他很多方法修改语言的。在吸收互联网中的知识的时候,希望不要仅仅想着得到答案,更要多想想原因,在传播知识出去的时候,也要把自己的思维传播出去。作为一个初学者而言,更期望的得到的是能力而不是知识。

android平台修改默认语言的那点事的更多相关文章

  1. 在android平台打印C语言日志

    在android平台打印C语言日志 1.操作平台:AS2.0 2.步骤如下: 在C代码中添加如下代码: #define LOG_TAG "我的C语言日志:" #define LOG ...

  2. Sublime Text 修改默认语言为Python

    Sublime Text 3 修改默认语言为Python 步骤如下 英文:Tools - Developer - New Plugin 中文:工具 - 插件开发 - 新建插件 清空原来内容,用下面的代 ...

  3. Android 如何修改默认输入法

    前言          欢迎大家我分享和推荐好用的代码段~~ 声明          欢迎转载,但请保留文章原始出处:          CSDN:http://www.csdn.net        ...

  4. Android 如何设置默认语言

    前言          欢迎大家我分享和推荐好用的代码段~~ 声明          欢迎转载,但请保留文章原始出处:          CSDN:http://www.csdn.net        ...

  5. Android 如何修改默认的searchable items。

    前言          欢迎大家我分享和推荐好用的代码段~~ 声明          欢迎转载,但请保留文章原始出处:          CSDN:http://www.csdn.net        ...

  6. kotlin, 一种新的android平台一级开发语言

    最近看到一则科技新闻, 大致内容是google将kotlin语言作为android应用开发的一级语言, 与java并驾齐驱, 这是一个开发界的大事件大新闻, 连google的亲儿子go语言也没有这种待 ...

  7. Android Studio修改默认Activity继承AppCompatActivity

    在Android Studio中新建Activity默认继承AppCompatActivity,感觉这点十分不爽,找了很久,终于发现在android Studio安装目录下有个模板文件,修改其中的参数 ...

  8. Android Studio修改默认Activity继承AppCompatActivity(转)

    在Android Studio中新建Activity默认继承AppCompatActivity,感觉这点十分不爽,找了很久,终于发现在Android Studio安装目录下有个模板文件,修改其中的参数 ...

  9. Android Studio修改默认字体大小

    安装Android Studio后,默认的字体很小,看着很不舒服,如下图 因此,我们需要改变字体大小,步骤如下: 一.打开设置 二.找到Font,这里系统的主题不能修改,我们点击Save As... ...

随机推荐

  1. appstore跳转

    二维码跳转 https://itunes.apple.com/cn/app/id123123123 应用内跳转 this.alertCtrl.create({ title: '更新', message ...

  2. awk命令的用法实战

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAn8AAADvCAIAAAAM1SXGAAAgAElEQVR4nO2dz8s125XXHx9oTXMHUZ

  3. Codeforces 982E Billiard exgcd

    Billiard 枚举终点, 对于每一个终点一共有四种周期的相遇方式, 枚举一下取最小的时间. #include<bits/stdc++.h> #define LL long long # ...

  4. Collection接口的常用方法

    [添加功能] boolean add(Object obj); //添加一个元素. boolean addAll(Collection c); //添加一个集合的元素(在后面追加). [删除功能] v ...

  5. Linux安装Tomcat-Nginx-FastDFS-Redis-Solr-集群——【第十二集之FastDFS的使用】

    (自己的项目路径)相关项目在web部分中priv.lirenhe.fastdfs 官方提供一个fastdfs开发项目,下载下来maven install 以下内容是借鉴网上的一篇文章,但是不知道网址了 ...

  6. day 48-css-part1

    CSS(Cascading Style Sheet,层叠样式表 css是前端的优化器,如果说我们的html是把前端的大体骨架搭起来的话,那么我们的css就是在这个骨架的基础上进行修饰,使之更有立体感, ...

  7. 我今天遇到的条件语句Integer类型的

    两个Integer类型的值进行比较时,应该用equals进行判断,用"=="判断是错误的,后来想了一下就明白了,Integer毕竟是对象, 而不是int基本数据类型,可以直接比较, ...

  8. 队列queue的一些操作

    1. q = queue.Queue(5) 实例化,5为队列长度 2. q.put("haha") 将数据加入队列,计数器+1 3. q.get() 取出数据,计数器不变 4. q ...

  9. POJ 3275 Ranking the Cows(传递闭包)【bitset优化Floyd】+【领接表优化Floyd】

    <题目链接> 题目大意:FJ想按照奶牛产奶的能力给她们排序.现在已知有N头奶牛$(1 ≤ N ≤ 1,000)$.FJ通过比较,已经知道了M$1 ≤ M ≤ 10,000$对相对关系.每一 ...

  10. Codeforces 920F - SUM and REPLACE 【线段树】

    <题目链接> 题目大意: 给你一个序列,有两个操作,一个是求区间 l - r 的和,另一个是对区间l-r的元素修改值,x=d(x),d(x)为x的因子个数. 解题分析: 因为可能有多次修改 ...