2013-03-11 82 views
5

哪個更好:Gettext的或數據庫翻譯

  1. gettext的
  2. 定製的MySQL +緩存基於功能

的Gettext是一種內置的功能,所以我想它調整了性能。使用poedit是一種痛苦,不可能向任何客戶展示。

自定義功能允許簡單的翻譯界面。但可能會對php/db的使用造成很大影響。

我想,你會用哪一個?

回答

14

本地化是困難的。這真的很困難。這不僅僅是"pairs of words" => "Wortpaare",它比這更復雜。大多數人在看gettext時會忘記「呃,醜陋」是本地化進程比實現的技術細節重要得多。這是因爲實際的翻譯人員通常不是程序員,甚至可能不是內部人員。這會比您想象的更令人頭疼。 gettext真的很老了,經過測試,並且有一個巨大的工具鏈,可以支持這個過程。如果你想要正確地完成i18n和l10n,你需要一個強大的系統。 gettext就是這樣,並得到各種工具的支持。你的自制翻譯系統™沒有。

首先,你需要一個健壯的系統來提取提供的可翻譯的字符串。如果不能自動和可重複地從源代碼中提取可翻譯的字符串,那麼對於要翻譯的每個新字符串您都有一段工作量。在gettext中,xgettext這樣做。

接下來,您需要一種工具來將提取的字符串與已有的翻譯同步,從而不會丟失任何翻譯,並且如果可能的話只保留稍有更改的翻譯。在gettext中,msgmerge這樣做。

接下來,您需要一種方法爲字符串添加額外信息。您希望能夠按類別,「域」和上下文對它們進行分組,您可能希望爲翻譯人員添加註釋以獲得源代碼,並且您可能希望翻譯人員能夠爲翻譯添加註釋。 gettext支持所有這一切。

接下來,您需要一種文件格式,它具有各種工具的良好支持,因爲您可能正在將文件發送到中國以便在那裏進行翻譯。您可能將它們發送給外部翻譯人員的原因也是您需要一個良好的同步工具來合併更改的原因,因爲這可能是一個非常異步的過程。 PO文件得到很好的支持,因爲gettext很老。有許多開源和商業工具可以在多個層面上支持本地化過程,具體取決於您的特定需求。

不要低估本地化的任務,選擇一個非常適合該過程並學習它的工具。 gettext是一個偉大的工具,如果不是最初級的友好的話。

值得一提的是,這裏的my gettext extension for Twig,這使PHP的gettext更好。

+2

很好的答案 - 感謝您指出一些本土解決方案出現的小問題。雖然自定義解決方案最初可以起作用,但隨着項目的複雜性/支持的語言數量的增長,聽起來像定製解決方案最終將被放棄,以支持完整的gettext實現。 – rinogo 2015-07-08 20:02:20

2

也許你應該看看Memcached,你可以將它與MySQL結合使用。 這對於獲取不經常更改的數據非常有用,如翻譯。