2012-01-05 53 views
0

我有一個大型應用程序,我想遷移到阿拉伯語。我已經在resourcestring關鍵字下定義了我們向用戶顯示的字符串。使用已翻譯的表單資源創建資源唯一的DLL

我使用的是Delphi 6提供的外部翻譯管理器。但是,使用這個工具我不太舒服。我想創建一個只包含所有翻譯後字符串的資源,比如Delphi ETM的功能,然後在運行時單擊按鈕在語言之間切換。

我能夠將資源串連接到Dll,但表單的標題和提示以及組件屬性如何?我在運行時根據語言加載Dll,但表單屬性並未反映,因爲它們在Dll中不可用。

任何指針在正確的方向?

感謝 拉胡爾·w^

+0

你使用的是Delphi 6嗎?如果是的話,阿拉伯語不需要Unicode嗎?如果你還沒有看到它的另一種選擇是[德爾福的gnugexttext](http://dxgettext.po.dk/) – 2012-01-05 18:58:31

+1

@Mike:阿拉伯語不需要Unicode,只要你在系統上運行設置爲阿拉伯語ANSI代碼頁和適當的字體支持可用。 Unicode允許的是在同一個應用程序中混合使用幾種不同的語言。早在Unicode設計之前,非西方語言就被計算機所支持。 – 2012-01-05 19:35:28

回答

1

什麼德爾福本地化工具和運行時支持做的是重定向資源加載 - 包括形式 - 從可執行的DLL。表單及其組件和控件(非默認屬性)作爲資源存儲到可執行文件中(只要不在運行時完全創建它們,但是必須逐個設置它們的屬性)。

因此,如果你想像標準翻譯工具一樣工作,你必須以相同的方式工作。 DLL資源嚮導所做的是將所有項目.dfm(以及手動添加的項目)和資源字符串提取到可以本地化的副本。當應用程序啓動時,表單加載代碼檢查應該從哪裏加載.dfm。您應該重寫此代碼以加載您的資源。

請注意,在運行時更改語言可能需要不同的方法,因爲從資源加載整個表單可能會將其重置爲創建狀態。另一方面,與gettext等方法相比,它允許本地化遠遠超過表單文本(包括圖像,顏色),並輕鬆地將控件大小適配到新字符串。恕我直言gettext適合簡單的需求,但是當本地化變成一項複雜的任務,並且您可能需要本地化爲一種非常不同的「文化」時,需要更強大的工具。

+0

+1。文本內容只是本地化的一部分。即使只是文本,由於語言的詳細程度可能差異很大,您通常需要調整設計以適應它(甚至不會根據文本方向進入佈局) – 2012-01-05 20:43:25

+0

@Idsandon我試圖從類中的delphi代碼中找出問題,System.pas文件,但我無法找到從資源加載表單的例程。我試着在代碼中加入斷點,但是沒有啓用幾個斷點。如果你知道任何會從資源中加載組件的例行程序,那麼它對我來說是非常有幫助的... – 2012-01-06 08:23:52

+0

此外,還有一件令我驚訝的事情是能夠在運行時添加翻譯,編譯exes。我已經檢查過gnugexttext的源代碼,這個想法是使用嵌入在exe文件中的語言文件,或者可以保存在文件系統中,但是這不會降低應用程序的性能,比如每次檢查組件是否有翻譯或不?糾正我,如果我錯了...我想開發一個框架。 – 2012-01-06 09:51:01