《深入理解OSGi:Equinox原理、应用与最佳实践》一2.7 本地化

2.7 本地化

前面提到过,Bundle的元数据信息中包含一些供人工阅读的信息,如Bundle-Name、Bundle-Vendor等。这些信息可能需要根据用户的语言、国家和其他指定的参数(一般是指定“区域”的参数)翻译成不同的语言。OSGi规范定义了Bundle应该如何自动根据系统语言、国家等参数自动翻译这些信息,即Bundle的本地化能力。
Bundle的本地化信息必须遵循特定的命名规则,存放在Bundle的指定目录下,如果没有通过Bundle-Localization特别指定,那么这个目录默认为“OSGI-INFO/l10n”。为了方便实现框架查找存在的本地化信息,OSGi规范规定了这些信息必是以“bundle”开头,以语言、国家、其他参数为内容,以下划线(‘_’,\u005F)分隔,以“.properties”为扩展名来命名的文本文件,即遵循以下格式命名:
OSGI-INF/l10n/bundle_[语言]_[国家]_[其他参数].properties
文件名中所使用到的语言、国家等会从java.util.Locale获取。例如,以下文件提供了英语、荷兰语(比利时和荷兰)和瑞典语的本地化信息:

OSGI-INF/l10n/bundle_en.properties
OSGI-INF/l10n/bundle_nl_BE.properties
OSGI-INF/l10n/bundle_nl_NL.properties
OSGI-INF/l10n/bundle_sv.properties

实现框架不是通过精确匹配文件名来搜索本地化信息,而是采用一种渐进式的搜索方式。如果最佳匹配的文件没有找到,会先删除参数,然后是国家,最后是语言,直到找到一个包含有效信息的本地化文件。比如,参数为welsh、国家是GB、语言是en的本地化文件将通过以下顺序查找:

OSGI-INF/l10n/bundle_en_GB_welsh.properties
OSGI-INF/l10n/bundle_en_GB.properties
OSGI-INF/l10n/bundle_en.properties
OSGI-INF/l10n/bundle.properties

另外,查找过程也并不是找到某个可用的本地化文件就停止,而是会一直进行下去,这种策略允许在拥有更具体区域、语言信息的本地化文件时覆盖更少信息的本地化文件。
本地化文件中包含了以Key-Value值对表示的本地化信息。Bundle的元数据信息文件中所有信息都可以进行本地化。但是,对于带有程序语义而非人工阅读的信息,OSGi实现框架必须使用非本地化版本,也就是只以MANIFEST.MF文件中的内容为准。
我们可以通过两种方式来使用本地化文件中的信息,第一种是直接覆盖元数据标记,例如:

Bundle-Name : The ACME Bundle
Bundle-Vendor : The ACME Corporation
Bundle-Description : The ACME Bundle provides all of the ACME

第二种是在MANIFEST.MF中使用本地化变量,然后在本地化文件中定义这些变量的值,例如:

#在MANIFEST.MF文件中:
Bundle-Name : %acme_bundle
Bundle-Vendor : %acme_corporation
Bundle-Description : %acme_description
Acme-Defined-Header : %acme_special_header

#在OSGI-INF/l10n/bundle.properties文件中:
acme_bundle=The ACME Bundle
acme_corporation=The ACME Corporation
acme_description=The ACME Bundle provides all of the ACME services
acme_special_header=user-defined Acme Data

本地化文件中定义的变量中间允许空格存在,把上面例子中的“_”替换成空格也是允许的。另外,在MANIFEST.MF文件中由用户自定义的非OSGi的标记也可以被本地化,例如上面的“Acme-Defined-Header”。

时间: 2024-09-26 18:24:16

《深入理解OSGi:Equinox原理、应用与最佳实践》一2.7 本地化的相关文章

《深入理解Android:Telephony原理剖析与最佳实践》一1.3 Android Telephony框架结构

1.3 Android Telephony框架结构 前面对Android手机操作系统整体框架结构及每一层进行了简单的分析和说明,相信大家对Android智能手机操作系统有了一些基本的了解和认识.结合前面Android的系统整体框架,我们接着学习Android Telephony涉及的框架结构,如图1-3所示. 通过图1-3所示不难发现Android Telephony框架结构的一些规律,总结如下. Android Telephony的业务应用跨越了AP和BP.AP与BP相互通信,符合前面介绍的智

《深入理解Android:Telephony原理剖析与最佳实践》一2.1 Ubuntu Linux操作系统及工具安装

2.1 Ubuntu Linux操作系统及工具安装 要搭建Android的编译环境,首先要选择好使用什么操作系统.本书选择Ubuntu 10.10桌面版64位Linux操作系统作为编译Android源码的操作系统. 注意 为什么选择使用64位Ubuntu 10.10桌面版的操作系统呢?在搭建Android源代码编译环境的过程中通过对比Ubuntu 10版本和11版本,发现Ubuntu 10更加简单,比如在Ubuntu 11.10采用的GCC和G++ 4.6版本,需要回退到4.4版本,否则会出现编

《深入理解Android:Telephony原理剖析与最佳实践》一3.5 本章小结

3.5 本章小结 本章主要对Android Telephony相关模块使用到的一些关键技术进行了分析和实例讲解,包括Handler.Broadcast两种异步通信的机制和AIDL跨应用的服务调用.Handler主要有几种消息处理方式?Handler对象的创建在主线程和子线程有什么区别?AIDL如何定义接口?AIDL接口定义完成后,对应的代码是如何生成的?Broadcast接收方的过滤器有几种设置方式?通过本章的学习,相信大家都对这些知识点会有较深入的认识和理解. 对Android中的Handle

《深入理解Android:Telephony原理剖析与最佳实践》一3.3 AIDL跨应用服务

3.3 AIDL跨应用服务 Android Telephony框架层提供了一些AIDL系统服务以及第三方应用,通过这些系统服务可方便地获取手机当前状态,如待机状态.通话中.来电等,这些状态在Android手机应用开发中非常重要.如果我们开发一款Android平台的手机音乐播放器,在使用音乐播放器的过程中需要知道手机当前是什么状态,如果是通话中或来电,这时就必须暂停播放音乐. 3.3.1 AIDL概念分析 什么是AIDL呢?AIDL的Android官方定义如下: AIDL (Android Int

《深入理解Android:Telephony原理剖析与最佳实践》一导读

前 言 随着ICT技术的推广和发展,在三网融合.智慧的地球(物联网)等概念风行的形势下,手机终端技术的发展和进步可谓日新月异:Android经受住了市场的考验,并占据了较大的市场份额,从手机芯片厂家.手机生产厂家到各种应用开发公司.互联网公司等,逐步形成了以Android系统平台为核心的上下游产业链.正是由于Android源代码的开源,各大手机厂商才能通过深度定制Android系统平台,在降低研发成本的同时,快速推出具有自身特色的Android智能手机产品.因此,各大手机厂家在推出新版本Andr

《深入理解Android:Telephony原理剖析与最佳实践》一1.2 Android系统架构

1.2 Android系统架构 前面学习了智能手机的基本硬件结构,可以通过功能手机与智能手机的特点和区别从本质上认识它们.Android智能手机操作系统作为运行在AP上的开源智能手机操作系统,其系统架构是什么样的呢?我们先看看图1-2. 通过图1-2不难发现,Android手机操作系统是一个基于Linux Kernel的分层智能手机操作系统,其共分为4层,从上到下分别是Java Applications(应用层).Java Frameworks(应用框架层).User Libraries(系统运

《深入理解Android:Telephony原理剖析与最佳实践》一2.2 Android源代码下载及编译过程

2.2 Android源代码下载及编译过程 前面完成了Ubuntu.JDK.Android SDK的安装和配置,接着开始下载和编译Android 4.0源代码,这个过程简单但花费的时间比较长,请读者先有个心理准备. Android 4.0的代号为Ice Cream Sandwich,简称ICS,中文名称冰淇淋三明治. 2.2.1 工作目录设置 本书采用ICS名称的文件夹作为Android 4.0源代码的根目录,在用户根目录下新建代码根目录ICS文件夹,并设置此目录为工作目录,在.bashrc中增

《深入理解Android:Telephony原理剖析与最佳实践》一2.5 使用Source Insight方便阅读C/C++代码

2.5 使用Source Insight方便阅读C/C++代码 Android源码中有非常多的C/C++代码,Source Insight是当前比较流行和方便使用的C/C++代码阅读编辑工具,我们选择它来建立Android C/C++代码相关的工程. Source Insight是基于Windows平台的C/C++代码编辑工具,要在Ubuntu平台上使用它,需要Wine工具的支持. 2.5.1 安装Wine 首先安装Wine.依次单击Applications→Ubuntu SoftWare Ce

《深入理解Android:Telephony原理剖析与最佳实践》一3.4 广播

3.4 广播 广播(Broadcast),看字面意思可以联想到车站.商场等都有广播,对于广播来说,发送方并不需要知道广播接收方的数量及接收到广播如何反应,这些都是接收方的事.那么,在Android 平台中的广播是否与生活中的广播相似呢?答案是肯定的,发送方仅需要将广播内容完成发送,而接收方过滤自己需要的广播信息和内容,然后进行处理,接收方信息是发送方不知道的. 3.4.1 Android 系统中的广播 Android 系统中有非常多的广播,当系统启动或应用运行时便会向 Android 注册各种广

《深入理解Android:Telephony原理剖析与最佳实践》一1.1 智能手机的系统结构

1.1 智能手机的系统结构 Android手机的基本硬件结构是符合智能手机的基本硬件结构,我们要学习Android移动开发,首先需要了解智能手机的硬件系统基本结构. 随着通信领域的快速发展,移动终端发展和变化也非常巨大,已经由原来单一的通话.短信功能向彩信.数据上网.图像处理.音乐和多媒体方向综合演变.目前,市面上的移动手机基本上可以分成两大类:一类是功能手机(Feature Phone),另一类是智能手机(Smart Phone). 这两类手机是如何区分的呢?智能手机具有传统手机的基本功能,如