2013-01-22 101 views
3

可能重複:
Translate application如何國際化Delphi應用程序

什麼是國際化我在Delphi編寫應用XE2最好的方式?

我見過stringtable資源,但我很擔心,因爲我有這樣的感覺,即實施可能很耗時且費力。

有沒有其他同樣有效的方法來做到這一點?

+3

將應用程序國際化總是很費力。 :( – balazs

回答

3

也許不是翻譯的最佳工具,但我使用GNU Gettext多年。 的過程非常簡單:

  • 您運行dxgettext提取字符串
  • 您翻譯或給翻譯的文件
  • 我個人喜歡poEdit工具,翻譯和管理翻譯倉庫
  • 可選:合併你的翻譯文件到最後的EXE
  • 或者你把翻譯文件放在子目錄中,就是這樣!

http://dxgettext.po.dk/

更新:

1/GNU Gettext的包括在JCL/JVCL庫,你只需要啓動在啓動該選項。

2/Gnu Gettext可以翻譯庫中的所有內容,如VCL,JCL/JVCL也可以!它不僅限於你的代碼!

0

我不知道這是國際化應用程序的最佳方式,但對我來說它工作。這是一種自制的

我創建了一個xml文件,它是包含翻譯的字典,但是您可以使用任何其他格式,從json到xls(也許這是最好的)。比實現了一個從這個文件中讀取翻譯的類,以及在語言更改運行時的情況下注冊過程的方式,這是我認爲的一個很好的特性。

TDictionary = class 
private 
    fOnChanged: TSignal; 
    fLanguage: String; 
    procedure setLanguage(const Value: String); 
public 
    procedure loadFromFile(filename: string); 
    function getTranslation(id: string; lang: string = ''): string; 

    property language: String read fLanguage write setLanguage; 
    property onChanged: TSignal read fonChanged; 
end; 

... 

function TDictionary.getTranslation(id: string; lang: string = ''): string; 
begin 
    if lang = '' then 
    lang := Language; // use the default lang. 
    // read the translation from the file. 
end; 

procedure TDictionary.setLanguage(const Value: String); 
begin  
    fLanguage := Value; 
    onChanged.Execute; 
end; 

TSignal是註冊方法的類,如果你叫Execute執行所有的註冊方法,也許在XE2你都內置了這個東西,在Delphi7的我不得不創建該類自己,但它的樂趣執行。

在窗體的的CreateForm:

procedure TMyClass.doTranslate(dictionary: TObject); 
begin 
    with dictionary as TDictionary do 
    begin 
    caption := dictionary.getTranslation('myclass.caption'); 
    button.caption := dictionary.getTranslation('some id'); 
    end; 
    // or you can go through Controls array, and automate the assignment. 
end; 

procedure TMyClass.FormCreate(Sender: TObject); 
begin 
    Dictionary.onChanged.register(doTranslate); 
    doTranslate(dictionary); 
end; 

procedure TMyClass.FormDestroy(Sender: TObject); 
begin 
    Dictionary.onChanged.deregister(doTranslate); 
end; 

正如你可以看到,這是不一個工作例如,您可以複製的內容粘貼,我只是想後面給你看的想法。如果有什麼不清楚的地方,請發表評論,我可以延長我的回答。

一些注意事項:

  • 我認爲有UTF8格式的轉換是非常重要的。
  • 使用xls可以讓本地化者更輕鬆地生活,如果他們破壞了你的xml文件(如果翻譯者不是專業人士,它可能發生你以microsoft word格式取回你的xml文件)
  • 你可以把你的字典文件放入資源中,並從那裏加載。

優點

  • 這樣,如果你需要另一種語言可以改變語言運行庫
  • ,您只需編輯字典文件。

缺點

  • 如果你有很多形式,這是一個噩夢來連接所有的標籤,按鈕等,但你可以在智能方面,它自動化。
  • 它會減慢你的應用程序的速度,但不是太多,如果改變你的應用程序語言不經常發生。
0

有一個叫Sisulizer的產品,它的工作原理後,你必須建立可執行的外商投資企業,我認爲。還沒有嘗試過,但我讀了很多。

Have a look at this