问候,
我正在编写一个具有多语言支持的Flash应用程序。我最初选择的字体是Tahoma,因为它支持Unicode。客户更喜欢Lucida手写等非标准字体。 Lucida手写与Tahoma没有相同的西里尔支持,这提出了一些问题,有几种方法可以解决,我想问你的建议哪个更好:
根据我的理解,我可以:
你有什么建议?哪些是合理的解决方案,哪些完全在那里?有没有一种我没想到的方式?
非常感谢! 阿列克谢
编辑:关于这个主题的好文章:http://www.itworld.com/print/58558
答案 0 :(得分:2)
嗯,最终你只有两个真正的选择:要么在SWF中嵌入字体,要么保证你的字体是什么样的,要么你没有,并使用设备字体。 (或两者的混合,使用嵌入式或设备字体,具体取决于地区。)
如果您没有嵌入任何字体,那么您为文本定义的任何字体最终都只是一个建议 - 用户将看到的是设备字体,由他们自己的机器渲染(使用该机器上的字体)。因此,您可以“建议”Tahoma,但用户看到的将取决于他们是否具有该字体(并且可能因Mac版本的字体与PC版本而异)。当然这也取决于支持;如果他们没有亚洲字体,那么他们就不会看到任何中文。 (注意:你也可以选择像“_sans”这样的字体,它只是告诉客户使用它的标准sans-serif字体。我的猜测是,实际上这将是你所选择的相同字体。 d定义了“Tahoma”,但是YMMV。)
如果您嵌入了字体,那么用户将看到您期望的字体,因为字体是由Flash而不是操作系统呈现的。但如果你完全嵌入所有地区,包括中文所需的字形,那么我认为你会发现它增加了超过500K ..更像是我的经验2-5MB。但也许有一些我遗漏的细节。无论如何,对于通过网络传送的内容,我通常会认为亚洲字体至少应该是设备字体。
要添加一个关于混合解决方案的词,我已经完成了这个并且它是可行的。也就是说,假设您可以将逻辑添加到SWF中,您可以(例如)创建两个文本字段,一个使用嵌入式“Lucida whatever”,另一个使用非嵌入式“_sans”,然后在运行时创建一个它们是不可见的,并将文本放在另一个中,具体取决于您显示的区域。 (我通过创建一个LocalizedTextfield组件,并在初始化时从静态属性中读取区域设置来完成此操作。)然后,您只需为每个区域设置决定文件大小是否值得显示该特定组字形。
最后一句话是,您不一定会认为您的字体所引起的文件大小只会被加载一次。如果您使用简单的方法制作内容并在文本字段中嵌入字体,那么字体信息将成为SWF的一部分,因此无论何时加载,都会加载。要将其外部化,您可以将Label组件设置为单独的文件,然后决定是否加载它取决于浏览器的缓存设置。您还可以外部化字体资源本身并将其用作共享资源,但在AS2中,这有点毛茸茸。我听说AS3更容易,但我自己也没做过。