2011-06-02 63 views
2

這與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()調用後發生了什麼。字符正在註冊,即音譯引擎能夠檢測輸入的字符並處理它們,但它們只是不顯示在屏幕上。

解決方法

如果我讓文本字段的方向是因爲它是定期左至右的語言,我可以看到的英文原文。但是,這對於使用烏爾都語的用戶來說是不可接受的。

有人能指出我正確的方向嗎?

+0

您可能會看到,如果這[示例](HTTP://計算器。com/questions/2010098/jspinner-date-editor-in-buddhist-calendar/2010819#2010819)與設置爲烏爾都語的區域設置一起使用。 – trashgod 2011-06-02 16:55:16

+0

這可能是一個長鏡頭,但對我來說,它似乎像[字體後備](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

+0

@trashgod - 感謝這個例子。我將locale設置爲ur_IN和組件方向,但現在數字不可見。 – Rex 2011-06-09 05:21:13

回答

2

我將語言環境設置爲ur_IN

不幸的是,ur_IN不在supported locales之間;我只看到en_INhi_IN。在列舉了example,我用下面的代碼來獲取下面的圖片:

spinner.setLocale(new Locale("hi", "IN")); 

JSpinnerTest Hindi

+0

對不起,這不是一個答案,但我認爲信息可能是apropos。 – trashgod 2011-06-09 10:41:13

+0

謝謝。我發現烏爾都語被認爲是一種左翼語言的權利。通過使用JTextPane,並對自定義輸入方法(光標定位等)進行一些調整,我們現在可以獲得正確的行爲。 – Rex 2011-06-10 04:56:42