Flash Player中的flash.globalization包(part9):转化文本

flash.globalization包为基于包含有大写概念(根本上,亚美尼亚语、拉丁语、古代斯拉夫语字母和希腊字符)的书写系统提供了将字母转换为minuscules(小写字母)或majuscules(大写字母)的方法。使用StringTools类使您的应用程序可以使用的具体语言相关的规则来执行这些转换。

文化敏感的转化

拉丁字母被用来写许多语言。从它派生而来的大部分国家的字母都加入了新的字母(如字符W或者德语的ß)和变音符号(如点(title)抑扬音符号(circumflex accent)或者是日尔曼语系元音变音(Germanic umlaut))。毫不奇怪,任何文本必须被从一种形式转化另一种形式的时候,这也导致语言相关的规则;例如,通过大写。

一个典型的例子是字母I。考虑到提高可读性,点(title)(上面的那个点(dot))是加到字母i的小写形式上的一个相关地现代的附加物。然而,少数语言(使用拉丁字母书写土耳其语、阿塞拜疆语,还有哈萨克斯坦语时)将带点和不带点的字母视为不同的字母,每个都具有小写(ıi)和大写(Iİ)形式。
图4显示了对于意大利语的文本,带点的大写I应该怎样被转化为带点的小写i,但是对于土耳其语的文本如何转化为不带点的形式ı。反过来,在意大利语中带点的小写i被转化成不带点的大写I,但是在土耳其语中转化为带点的形式İ

图4:带点与不带点的I的转化

由于StringTools类允许您指定区域,它通常会产生正确的结果。

但是,使用这种转变时要谨慎,因为它们经常遵循额外的规则,而操作系统可能无法实现这些规则。在希腊语中,当被转化成小写时,大写字母Σ一般会成为σ,除了在单词的末尾时它被写成ς。在德语中,小品词von在姓氏中表示贵族时不大写,除非它起始一个句子;故意地大写姓氏(如“von Goethe”)可能因此产生错误的结果。在荷兰语中,荷兰语单词het't)的缩写形式是永远不大写的;如果它出现在句子的开头,则它的下一个单词被大写:'t Kofschip (ook wel 't fokschaap) is een bekend ezelsbruggetje.

注意:在许多语言中,文本完全地用大写书写(ALL CAPS或small caps)被认为是不好的形式。

简而言之,尽量避免自动文本转化。最好经常信任您的用户的输入,并不改变它。

使用StringTools

和使用格式化器一样,您通过创建一个StringTools类的实例开始,它提供了适合于您想要的文字的区域标识符,或用户首选的区域标识符:
import flash.globalization; var textToolset:StringTools = new  StringTools(selectedLocale);

与往常一样,一个备用的区域可能被选中。有关此更多的内容,请参考在“Selecting a Locale(选择一个区域)”一节中讨论的NumberFormatter类。

现在转化文本是简单的:只需调用方法toLowerCase()或toUpperCase():
var minuscules:String = textToolset.toLowerCase("MAJUSCULES"); var majuscules:String =  textToolset.toUpperCase("minuscules");

建议对可能发生的错误测试。如果发生一个严重错误时,该变换方法可能返回一个空的文本字符串。然后,您可能简单地放弃该转换,并使用原始的文本字符串,尽管这显然是依赖于您的应用程序而定的。

比如:

  1. var originalText:String = &quot;Sample text&quot;; var capitalizedText:String; capitalizedText = textToolset.toUpperCase(originalText); if(textToolset.lastOperationStatus != LastOperationStatus.NO_ERROR) {<br />
  2. capitalizedText = originalText; } //继续使用存储在'capitalizedText'中的值。

从这里走向何方

flash.globalization包使您的应用程序可以利用底层平台提供的文化支持,向每个用户提供更好的体验。有关详细信息请参阅flash.globalization包的API文档(API documentation)

一个根据阿拉伯区域格式化的日期可能包含阿拉伯语文本(月份或星期几的名称)。要正确地在用户界面上显示结果,考虑使用新的文本布局框架(Text Layout Framework),它妥善地处理双向文本(bi-directional text)。想更多地了解这个新文本引擎,请访问文本布局框架技术中心(Text Layout Framework Technology Center)

要了解更多关于文化习俗和区域标识符的信息,请阅读关于CLDR的内容,并了解ICU是如何使之实用的:

  1. Unicode Common Locale Data Repository (CLDR),它收集适合像ICU这样的全球化框架使用的文化数据(cultural data)
  2. Unicode Technical Standard #35: Unicode Locale Data Markup Language (LDML),特别是第3节关于区域标识符
  3. International Components for Unicode (ICU),它使用来自CLDR的数据,其在线演示页面,比如区域浏览器(Locale Explorer)可以让您快速地看到相关文化的格式

最后,由于flash.globalization包依赖底层操作系统,您会发现参考平台文档非常有用:

Microsoft Windowss

  1. Go Global developer center是一个开始学习Microsoft Windows国际化主题的好地方。
  2. Microsoft Windows中的国家语言支持(NLS)提供关于函数提供的基础文化服务的参考信息。

Apple Mac OS X

  1. 国际化编程主题是对国际化软件开发的介绍
  2. 区域编程指南 解释了区域的概念以及如何使用在Cocoa或Core Foundation中使用它们。
  3. Cocoa数据格式化编程指南 涵盖了数字和日期格式化
  4. Cocoa字符串编程指南 包括字符串类和相关的任务,如,搜索、比较或匹配字符串

上一页(Par8)

riadevID: 
您给予的分值: None 平均分: 7 (1 vote)

发表新评论

  • 网页地址和电子邮件地址将会被自动转换为链接。
  • 行和段被自动切分。
  • 您可以使用下面的标签来高亮显示您的评论内容: <code>, <blockcode>. 可以使用"[foo]".旁边显示标签样式 "<foo>" PHP代码可以用这样的区块来包含<?php ... ?> or <% ... %>

更多格式化选项信息

验证区域
系统验证:请回答下面的问题