這與my own previous question類似,但該解決方案在此處不起作用。 正如前一個問題中提到的,我正在開發一個跨平臺(Windows/Ubuntu)應用程序,該應用程序必須將英語音譯爲多種印度官方語言之一。該應用程序具有自定義輸入法,並且輸入英文和按空格鍵可將輸入的文本轉換爲特定的本地語言。烏爾都語不同於其他人,如阿拉伯語/希伯來語。 我設法找到an open licensed Urdu font既有英文也有烏爾都語字形,但是當我用英文輸入字符時,什麼也沒有顯示出來。在Swing中輸入烏爾都語字體的文字時不顯示英文字符
我不明白這是字體繪畫問題,還是與輸入法有關。到目前爲止,如果我禁用此語言的自定義輸入法(InputMethod.dispatchEvent()
),我可以看到英文文本(但當然不會發生音譯)。
我的發現:
- 將字體更改Windows內置的阿拉伯字體之一 - 同樣的結果。
- 代替使用
ComponentOrientation
來排列文本字段中的文本,我在區域設置爲Urdu時使用setHorizontalAlignment
。同樣的結果。 - 在Windows上反編譯JDK的默認輸入法提供程序(
sun.awt.windows.WInputMethod
)。在這裏,我看到dispatchEvent()
向操作系統發出本地調用以處理IME。我在這裏不能這樣做。 - 找到a custom IM for Hebrew - 我的版本
dispatchEvent()
基本上是一樣的。 - 在Eclipse中穿過代碼
JTextField
- 無法在AbstractDocument
和子類中找到任何內容。AbstractDocument.insertUpdate()
方法檢查並更新雙向文本輸入,但沒有任何其他意義。
我無法理解dispatchEvent()
調用後發生了什麼。字符正在註冊,即音譯引擎能夠檢測輸入的字符並處理它們,但它們只是不顯示在屏幕上。
解決方法
如果我讓文本字段的方向是因爲它是定期左至右的語言,我可以看到的英文原文。但是,這對於使用烏爾都語的用戶來說是不可接受的。
有人能指出我正確的方向嗎?
您可能會看到,如果這[示例](HTTP://計算器。com/questions/2010098/jspinner-date-editor-in-buddhist-calendar/2010819#2010819)與設置爲烏爾都語的區域設置一起使用。 – trashgod 2011-06-02 16:55:16
這可能是一個長鏡頭,但對我來說,它似乎像[字體後備](http://msdn.microsoft.com/en-us/library/dd374105%28v=vs.85%29.aspx)問題。問題是你正在開發跨平臺應用程序...對於Windows,你可能會設置[註冊表中的字體後備規則](http://publib.boulder.ibm.com/infocenter/cbi/v10r1m0/index.jsp?topic= /com.ibm.swg.im.cognos.inst_cr_winux.10.1.0.doc/inst_cr_winux_id21400UpdateFontLinkRegistryEntries.html)(添加您的字體,而不是Simsun)並查看它是否可用,但對於Linux,此解決方案不起作用:/ – 2011-06-02 17:23:24
@trashgod - 感謝這個例子。我將locale設置爲ur_IN和組件方向,但現在數字不可見。 – Rex 2011-06-09 05:21:13