2008-12-08 70 views
4

Greetings,Flash中的多種字體/語言支持

我正在編寫一個支持多語言的Flash應用程序。我最初選擇的字體是Tahoma,因爲它支持Unicode。客戶更喜歡非標準字體,如Lucida手寫。 Lucida手寫與Tahoma不同,比如Tahoma提供西里爾語支持,這會產生一個問題,有幾種解決方法,並且我希望徵求您的意見,哪個更可取:

從什麼我明白了,我可以:

  • 給客戶端完全兼容Unicode(西里爾語,希伯來語,阿拉伯語,繁體中國,東亞等)字體可供選擇的列表。 (我不知道在哪裏可以得到這樣的列表;我對網絡的搜索只產生了部分符合Unicode的字體列表,請嘗試http://look.fo/list-of-unicode-compliant-fonts作爲查看我查看的位置的良好起點)。
  • 根據客戶的位置(我們已經擁有),在Lucida Handwriting中爲英語用戶渲染,在Tahoma爲國際用戶渲染。這可能有點頭痛;有沒有人有過這種方法的經驗?
  • 建立一個新的字體(IE,AlexeyMK Bold),它使用Lucida手寫英文和Tahoma其他的一切。這個廣告與Flash文件的重量相似,但是應該(如果我理解正確)僅在第一次加載時。

你有什麼建議?哪些是合理的解決方案,哪些完全在外?有沒有我沒有想到的方法?

非常感謝! 阿列克謝

編輯:關於這個問題的好文章:http://www.itworld.com/print/58558

回答

2

好了,最終你只有兩個真正的選擇:要麼你在你的SWF嵌入字體,確保您的字體將是什麼樣子,或者你不併且使用設備字體。 (或兩者混合使用,根據地區使用嵌入字體或設備字體。)

如果您沒有嵌入任何字體,那麼您爲文本定義的任何字體最終只是一個建議 - 用戶將看到是設備字體,由他們自己的機器渲染(使用該機器上的字體)。所以你可以「建議」Tahoma,但用戶看到的將取決於他們是否具有該字體(並且它可能會因字體與PC版本的Mac版本而異)。當然這也取決於支持;如果他們沒有亞洲字體,那麼他們就不會看到任何中國人。 (注意:你也可以選擇一個像「_sans」這樣的字體,它只是告訴客戶使用它的標準sans-serif字體。我的猜測是,實際上這將會變成與你選擇的字體相同的字體, d定義爲「Tahoma」,但是YMMV)。

如果您嵌入字體,用戶將看到您期望的字體,因爲字體是由Flash而不是OS渲染的。但是如果你完全嵌入到所有地區,包括漢字所需的字形,那麼我認爲你會發現它增加了大大超過500K ..更像2-5MB在我的經驗。但也許有一些細節我錯過了。無論如何,對於通過網絡傳送的內容,我通常會認爲至少亞洲字體應該是設備字體。

要添加一個關於混合解決方案的詞,我已經完成了這個,它是可行的。也就是說,假設您可以將邏輯添加到SWF中,則可以(例如)爲每個文本字段創建兩個文本字段,一個使用嵌入的「Lucida whatever」,另一個使用非嵌入的「_sans」,然後在運行時使一個他們看不見,並在另一個文本,取決於你顯示的區域。 (我通過創建一個LocalizedTextfield組件,並在初始化時從靜態屬性中讀取語言環境來完成此操作。)然後,您只需爲每個語言環境決定文件大小是否值得顯示該特定集合的字形。

最後一句話是,你不一定認爲你的字體引起的文件大小隻會被加載一次。如果您的內容是直接的方式,並將字體嵌入到文本字段中,那麼字體信息將成爲SWF的一部分,因此無論如何每次都會加載該字體。要將其外觀化,您可以將Label組件作爲單獨的文件,然後決定是否加載它,取決於瀏覽器的緩存設置。您也可以將字體資源本身外化並將其用作共享資源,但在AS2中,這有點多毛。我聽說在AS3中它更容易,但我自己並沒有做到。

+0

非常感謝! – AlexeyMK 2008-12-09 22:13:26