上下文相关帮助本地化方案
上下文相关帮助(Context Sensitive Help)可以根据用户选择显示相应的帮助,用于解决在操作过程中所遇到的疑难问题。在实际当中,某个应用的使用者可能来自不同的国家和地区,使用着不同的语言文字,有着不同的习惯。如果我们希望自己开发的应用获得最大的用户群,则必须在用户界面(UI)的设计上考虑到这一可能的事实。为不同国家和地区的潜在用户设计适合其使用的界面便成了开发者们必然的选择,这在Symbian /C++开发中被称之为“本地化”(Localization)。
本地化应用不同于平时所用的电脑中的那些不同语言版本的同一软件,(例如英文版、简体中文版、繁体中文版)。也并非真的为每个语种设计单独的用户界面或单独应用,而是针对同一用户界面在不同语种环境中的不同要求而做一些变化。其基本原理就是,根据设备的语言设置调用其相应的经过编译的资源文件,以合成适合该语种的用户界面,使得应用象专门为使用该语言的人群而设计的一样。最典型的应用是对用户界面组件中显示字串的本地化,也就是%EPOCROOT%\Examples\toolsandutilities\localize\和%EPOCROOT%\Series60Ex\language\这两个例程中所做的那样。
不过在应用中不仅是字串有本地化的要求,同样被要求的还有帮助、图标、图片,甚至是动画、音频、视频。当然,动画、音频、视频的本地化在现今的硬件条件下我个人不主张,因为那样做会使应用占据过多的存储空间,这对在资源受限设备上的开发来说是不利的。图标、图片倒还可以接受,但即便是本地化图标和图片,它们也应该尽量小和少。
可是帮助不同于以上所说的资源,它基本上只是些文本,只要语言精练就占不了多大空间,所以帮助本地化和字串本地化是很类似的,特别是当用简单的弹出对话框显示帮助则几乎完全是一回事,也就是字串长度长一些。但如果涉及到上下文相关帮助的本地化,其和单纯的字串本地化相比,虽然基本原理相同,但所采用的具体方法就有所区别了。
用过上下文相关帮助的开发者都知道,首先应该为应用建立帮助源文件(.rtf),以及帮助项目文件(.cshlp)和可选的样式自定义文件(custom.xml),通过cshlpcmp编译后会生成相应的帮助文件(.hlp)和帮助标志头文件(.hlp.hrh)。在应用中程序会根据用户选择调用CCoeAppUi::AppHelpContextL, 之后系统会利用帮助标志作为参数调用被覆盖的CCoeAppUI::HelpContextL或CCoeControl::GetHelpContext方法从帮助文件中获取该标志所标识的帮助内容,再通过HlpLauncher::LaunchHelpApplicationL显示相应的帮助。
那怎样本地化帮助呢?根据本地化的一般方法,开发者必须为不同的语种建立不同的帮助,也就是为同一帮助项建立不同语种的内容。众所周知,系统必须通过帮助标志才能在帮助文件中找到相应的帮助内容。而帮助标志是什么?从帮助标志头文件中可以获知,它们其实是上下文的字串描述符,也就是一些字串。基于以上情况,我们完全可以舍弃帮助标志头文件,而直接在资源文件中建立相应的帮助标志字串资源,模仿%EPOCROOT%\Series60Ex\language\这个例程,通过本地化帮助标志字串,来实现上下文相关帮助的本地化。
下面就以Series 60 2nd Edition SDK for Symbian OS Supporting Feature Pack 3 for C++中大家所熟知的例程Help Example为基础(之所以选择这个SDK是因为其支持简体中文),对其进行中文简体本地化,籍此来谈谈上下文相关帮助的本地化。
首先,为不同语种建立不同的帮助源文件,即.rtf文件,用不同的帮助标志作为区别。将 %EPOCROOT%\Series60Ex \helpexample\help\下的 helpexample.rtf更名为 helpexample01.rtf,内容作如下修改(主要是帮助标志):
然后将
helpexample01.rtf另存为
helpexample31.rtf,内容修改为简体中文的帮助:
相应的帮助项目文件
helpexample.cshlp修改为:
可选的样式自定义文件
custom.xml在此无须修改。
接着修改 %EPOCROOT%\Series60Ex \helpexample\Group\helpexample.mmp
本地化应用不同于平时所用的电脑中的那些不同语言版本的同一软件,(例如英文版、简体中文版、繁体中文版)。也并非真的为每个语种设计单独的用户界面或单独应用,而是针对同一用户界面在不同语种环境中的不同要求而做一些变化。其基本原理就是,根据设备的语言设置调用其相应的经过编译的资源文件,以合成适合该语种的用户界面,使得应用象专门为使用该语言的人群而设计的一样。最典型的应用是对用户界面组件中显示字串的本地化,也就是%EPOCROOT%\Examples\toolsandutilities\localize\和%EPOCROOT%\Series60Ex\language\这两个例程中所做的那样。
不过在应用中不仅是字串有本地化的要求,同样被要求的还有帮助、图标、图片,甚至是动画、音频、视频。当然,动画、音频、视频的本地化在现今的硬件条件下我个人不主张,因为那样做会使应用占据过多的存储空间,这对在资源受限设备上的开发来说是不利的。图标、图片倒还可以接受,但即便是本地化图标和图片,它们也应该尽量小和少。
可是帮助不同于以上所说的资源,它基本上只是些文本,只要语言精练就占不了多大空间,所以帮助本地化和字串本地化是很类似的,特别是当用简单的弹出对话框显示帮助则几乎完全是一回事,也就是字串长度长一些。但如果涉及到上下文相关帮助的本地化,其和单纯的字串本地化相比,虽然基本原理相同,但所采用的具体方法就有所区别了。
用过上下文相关帮助的开发者都知道,首先应该为应用建立帮助源文件(.rtf),以及帮助项目文件(.cshlp)和可选的样式自定义文件(custom.xml),通过cshlpcmp编译后会生成相应的帮助文件(.hlp)和帮助标志头文件(.hlp.hrh)。在应用中程序会根据用户选择调用CCoeAppUi::AppHelpContextL, 之后系统会利用帮助标志作为参数调用被覆盖的CCoeAppUI::HelpContextL或CCoeControl::GetHelpContext方法从帮助文件中获取该标志所标识的帮助内容,再通过HlpLauncher::LaunchHelpApplicationL显示相应的帮助。
那怎样本地化帮助呢?根据本地化的一般方法,开发者必须为不同的语种建立不同的帮助,也就是为同一帮助项建立不同语种的内容。众所周知,系统必须通过帮助标志才能在帮助文件中找到相应的帮助内容。而帮助标志是什么?从帮助标志头文件中可以获知,它们其实是上下文的字串描述符,也就是一些字串。基于以上情况,我们完全可以舍弃帮助标志头文件,而直接在资源文件中建立相应的帮助标志字串资源,模仿%EPOCROOT%\Series60Ex\language\这个例程,通过本地化帮助标志字串,来实现上下文相关帮助的本地化。
下面就以Series 60 2nd Edition SDK for Symbian OS Supporting Feature Pack 3 for C++中大家所熟知的例程Help Example为基础(之所以选择这个SDK是因为其支持简体中文),对其进行中文简体本地化,籍此来谈谈上下文相关帮助的本地化。
首先,为不同语种建立不同的帮助源文件,即.rtf文件,用不同的帮助标志作为区别。将 %EPOCROOT%\Series60Ex \helpexample\help\下的 helpexample.rtf更名为 helpexample01.rtf,内容作如下修改(主要是帮助标志):
Code:
Author: Nokia
Date: 23 July 2002
Version: 1
HelpExample
0x10005B93
Application Help
¢ ContextApplication01 The Application
i HelpExample Application
When there are no controls in focus with help available, this message is shown.
Helpful Form
¢ ContextHelpfulForm01 The form
i HelpExample Form
This is a form implementing context-sensitive help. Special help is available when the first two controls have focus. This message is shown otherwise.
Edwin 1
¢ ContextEdwin101 Control 1 on form
i HelpExample Edwin 1
This is help for the first control on the form.
Edwin 2
¢ ContextEdwin201 Control 2 on form
i HelpExample Edwin 2
This is help for the second control on the form.
Code:
Author: Nokia
Date: 23 July 2002
Version: 1
HelpExample
0x10005B93
应用帮助
¢ ContextApplication31 The Application
i 帮助示例应用
当获得焦点的控制没有可用帮助时显示此信息。
帮助表格
¢ ContextHelpfulForm31 The form
i 帮助示例表格
这是一个执行上下文相关帮助的表格。当前两个控制获得焦点时会有相应的帮助。此信息在例外的情况下显示。
编辑框一
¢ ContextEdwin131 Control 1 on form
i 帮助示例编辑框一
这是表格中控制一的帮助。
编辑框二
¢ ContextEdwin231 Control 2 on form
i 帮助示例编辑框二
这是表格中控制二的帮助。
Code:
<?xml version="1.0" encoding="UTF-8"?>
<?xml:stylesheet href="..\..\..\epoc32\tools\cshlpcmp\xsl\CSHproj.xsl" title="CS-Help project" type="text/xsl"?>
<!DOCTYPE cshproj SYSTEM "..\..\..\epoc32\tools\cshlpcmp\dtd\cshproj.dtd">
<cshproj>
<helpfileUID>0x10005B94</helpfileUID>
<directories>
<input></input>
<output></output>
<graphics>pictures/</graphics>
<working></working>
</directories>
<files>
<source>
<file>HelpExample01.rtf</file>
<file>HelpExample31.rtf</file>
</source>
<destination>HelpExample.hlp</destination>
<customization>custom.xml</customization>
</files>
</cshproj>
接着修改 %EPOCROOT%\Series60Ex \helpexample\Group\helpexample.mmp
Code:
/* Copyright (c) 2004, Nokia. All rights reserved */
TARGET HelpExample.app
TARGETTYPE app
UID 0x100039CE 0x10005B93
TARGETPATH \system\apps\helpexample
.
.
.
SOURCEPATH ..\help
DOCUMENT HelpExample01.rtf
DOCUMENT HelpExample31.rtf
DOCUMENT HelpExample.cshlp
DOCUMENT Custom.xml
.
.
.
LIBRARY euser.lib
LIBRARY apparc.lib
LIBRARY cone.lib
LIBRARY eikcore.lib
LIBRARY avkon.lib
LIBRARY eikdlg.lib
LIBRARY eikcoctl.lib
LIBRARY hlplch.lib
LANG 01 31
AIF HelpExample.aif ..\aif HelpExampleAif.rss c12 qgn_help_demo_cxt.bmp qgn_help_demo_cxt_mask.bmp qgn_help_demo_lst.bmp qgn_help_demo_lst_mask.bmp
上下文相关帮助本地化方案
因为不再使用帮助标志头文件
HelpExample.hlp.hrh,所以
%EPOCROOT%\Series60Ex \helpexample\data\中的
helpexample.rss必须加入新的帮助标志字串资源,
%EPOCROOT%\Series60Ex \helpexample\data\helpexample.rss
Code:
/* Copyright (c) 2004, Nokia. All rights reserved */
之后通过同一目录的字串文件实现帮助标志字串的本地化,将 helpexample.loc另存为 helpexample.l01并修改为:
Code:
/* Copyright (c) 2004, Nokia. All rights reserved */
Code:
/* Copyright (c) 2004, Nokia. All rights reserved */
Code:
/* Copyright (c) 2004, Nokia. All rights reserved */
%EPOCROOT%\Series60Ex \helpexample\src\helpexampleappui.cpp
Code:
/* Copyright (c) 2004, Nokia. All rights reserved */
Code:
/* Copyright (c) 2004, Nokia. All rights reserved */
Code:
;/* Copyright (c) 2004, Nokia. All rights reserved */
S60平台本身支持上下文相关帮助的本地化,所以最简的步骤是:
1. 做好英文版的HLP文件 2. 拷贝RTF文件并翻译成其它语种(帮助标识不变),并生成HLP文件 3. 将帮助文件的后缀按其语种改为h01和h31等 4. 打包 |