ADROID 2.1 架构解析 1 语言定制

2024-01-02 18:58

本文主要是介绍ADROID 2.1 架构解析 1 语言定制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 语言定制

1.1 ICU4C

1.1.1 ICU4C简介

ICU4C(ICU for C,http://site.icu-project.org/)是ICU在C/C++平台下的版本, ICU(International Component for Unicode)是基于"IBM公共许可证"的,与开源组织合作研究的, 用于支持软件国际化的开源项目。ICU4C提供了C/C++平台强大的国际化开发能力,软件开发者几乎可以使用ICU4C解决任何国际化的问题,根据各地的风俗和语言习惯,实现对数字、货币、时间、日期、和消息的格式化、解析,对字符串进行大小写转换、整理、搜索和排序等功能,必须一提的是,ICU4C提供了强大的BIDI算法,对阿拉伯语等BIDI语言提供了完善的支持。

  ICU首先是由Taligent公司开发的,Taligent公司现在被合并为IBM?公司全球化认证中心的Unicode研究组,然后ICU由IBM和开源组织合作继续开发,开源组织给与了ICU极大的帮助。

  开始ICU只有Java平台的版本,后来这个平台下的ICU类被吸纳入SUN公司开发的JDK1.1,并在JDK以后的版本中不断改进。C++和C平台下的ICU是由JAVA平台下的ICU移植过来的,移植过的版本被称为ICU4C,来支持这C/C++两个平台下的国际化应用。

ICU4C和ICU4C区别不大,但由于ICU4C是开源的,并且紧密跟进Unicode标准,ICU4C支持的Unicode标准总是最新的;同时,因为JAVA平台的ICU4J的发布需要和JDK绑定,ICU4C支持Unicode标准改变的速度要比ICU4J快的多。

1.1.2 ANDROID语言包

Android 使用的语言包就是ICU4C,位置:external/icu4c。Android支持的语言有:

Locale  CANADA                           Locale constant for en_CA.

Locale    CANADA_FRENCH            Locale constant for fr_CA.

Locale    CHINA                               Locale constant for zh_CN.

Locale    CHINESE                           Locale constant for zh.

Locale    ENGLISH                           Locale constant for en.

Locale    FRANCE                            Locale constant for fr_FR.

Locale    FRENCH                            Locale constant for fr.

Locale    GERMAN                           Locale constant for de.

Locale    GERMANY                         Locale constant for de_DE.

Locale    ITALIAN                            Locale constant for it.

Locale    ITALY                                Locale constant for it_IT.

Locale    JAPAN                               Locale constant for ja_JP.

Locale    JAPANESE                         Locale constant for ja.

Locale    KOREA                             Locale constant for ko_KR.

Locale    KOREAN                            Locale constant for ko.

Locale    PRC                                   Locale constant for zh_CN.

Locale    SIMPLIFIED_CHINESE      Locale constant for zh_CN.

Locale    TAIWAN                            Locale constant for zh_TW.

Locale    TRADITIONAL_CHINESE Locale constant for zh_TW.

Locale    UK                                    Locale constant for en_GB.

Locale    US                                    Locale constant for en_US.

1.2 定制语言

在PRODUCT_LOCALES字段里添加需要语言,如:

PRODUCT_LOCALES := en_US zh_CN

则系统里只有英语和汉语两种语言。

然后语言的选择处理是在external/icu4c/stubdata/Android.mk里进行的,如下:

config := $(word 1, /

$(if $(findstring ar,$(PRODUCT_LOCALES)),large) /

$(if $(findstring da,$(PRODUCT_LOCALES)),large) /

$(if $(findstring el,$(PRODUCT_LOCALES)),large) /

$(if $(findstring fi,$(PRODUCT_LOCALES)),large) /

$(if $(findstring he,$(PRODUCT_LOCALES)),large) /

$(if $(findstring hr,$(PRODUCT_LOCALES)),large) /

      $(if $(findstring hu,$(PRODUCT_LOCALES)),large) /

$(if $(findstring id,$(PRODUCT_LOCALES)),large) /

$(if $(findstring ko,$(PRODUCT_LOCALES)),large) /

$(if $(findstring nb,$(PRODUCT_LOCALES)),large) /

$(if $(findstring pt,$(PRODUCT_LOCALES)),large) /

$(if $(findstring ro,$(PRODUCT_LOCALES)),large) /

$(if $(findstring ru,$(PRODUCT_LOCALES)),large) /

$(if $(findstring sk,$(PRODUCT_LOCALES)),large) /

$(if $(findstring sr,$(PRODUCT_LOCALES)),large) /

$(if $(findstring sv,$(PRODUCT_LOCALES)),large) /

$(if $(findstring th,$(PRODUCT_LOCALES)),large) /

$(if $(findstring tr,$(PRODUCT_LOCALES)),large) /

$(if $(findstring uk,$(PRODUCT_LOCALES)),large) /

$(if $(findstring zh,$(PRODUCT_LOCALES)),large) /

$(if $(findstring ja,$(PRODUCT_LOCALES)),us-japan) /

$(if $(findstring it,$(PRODUCT_LOCALES)),us-euro) /

$(if $(findstring pl,$(PRODUCT_LOCALES)),us-euro) /

$(if $(findstring cs,$(PRODUCT_LOCALES)),default) /

$(if $(findstring de,$(PRODUCT_LOCALES)),default) /

$(if $(findstring fr,$(PRODUCT_LOCALES)),default) /

$(if $(findstring nl,$(PRODUCT_LOCALES)),default) /

us)

1.3 默认语言

默认语言的选择实现是在build/core/Makefile里,从PRODUCT_LOCALES里选择第一个语言作为默认语言,如下:

define default-locale

$(subst _, , $(firstword $(1)))

endef

# Selects the first locale in the list given as the argument

# and returns the language (or the region)

define default-locale-language

$(word 2, 2, $(call default-locale, $(1)))

endef

define default-locale-region

$(word 3, 3, $(call default-locale, $(1)))

Endef

...

PRODUCT_DEFAULT_LANGUAGE="$(call default-locale-language,$(PRODUCT_LOCALES))" /

PRODUCT_DEFAULT_REGION="$(call default-locale-region,$(PRODUCT_LOCALES))" /

然后通过build/tool/buildinfo.sh文件将如下段写到文件build.prop,如下:

echo "ro.product.locale.language=$PRODUCT_DEFAULT_LANGUAGE"

echo "ro.product.locale.region=$PRODUCT_DEFAULT_REGION"

所以,要改变默认语言用下面两种方法中的一种就行了:

1 在PRODUCT_LOCALES字段里,将要选择的语言放在第一位,如:

PRODUCT_LOCALES := en_US zh_CN

默认语言是英语

2

persist.sys.languagepersist.sys.country 里指定语言,如下:

PRODUCT_PROPERTY_OVERRIDES := / 

persist.sys.language=zh /

persist.sys.country=CN

build.prop文件的处理是在system/core/init/property_service.c。

这篇关于ADROID 2.1 架构解析 1 语言定制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/563353

相关文章

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3

Java MCP 的鉴权深度解析

《JavaMCP的鉴权深度解析》文章介绍JavaMCP鉴权的实现方式,指出客户端可通过queryString、header或env传递鉴权信息,服务器端支持工具单独鉴权、过滤器集中鉴权及启动时鉴权... 目录一、MCP Client 侧(负责传递,比较简单)(1)常见的 mcpServers json 配置

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

Maven中生命周期深度解析与实战指南

《Maven中生命周期深度解析与实战指南》这篇文章主要为大家详细介绍了Maven生命周期实战指南,包含核心概念、阶段详解、SpringBoot特化场景及企业级实践建议,希望对大家有一定的帮助... 目录一、Maven 生命周期哲学二、default生命周期核心阶段详解(高频使用)三、clean生命周期核心阶

GO语言短变量声明的实现示例

《GO语言短变量声明的实现示例》在Go语言中,短变量声明是一种简洁的变量声明方式,使用:=运算符,可以自动推断变量类型,下面就来具体介绍一下如何使用,感兴趣的可以了解一下... 目录基本语法功能特点与var的区别适用场景注意事项基本语法variableName := value功能特点1、自动类型推

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

深入解析C++ 中std::map内存管理

《深入解析C++中std::map内存管理》文章详解C++std::map内存管理,指出clear()仅删除元素可能不释放底层内存,建议用swap()与空map交换以彻底释放,针对指针类型需手动de... 目录1️、基本清空std::map2️、使用 swap 彻底释放内存3️、map 中存储指针类型的对象

Java Scanner类解析与实战教程

《JavaScanner类解析与实战教程》JavaScanner类(java.util包)是文本输入解析工具,支持基本类型和字符串读取,基于Readable接口与正则分隔符实现,适用于控制台、文件输... 目录一、核心设计与工作原理1.底层依赖2.解析机制A.核心逻辑基于分隔符(delimiter)和模式匹