2014-03-25 108 views
0

我使用gettext來翻譯我的網頁。我已經將我的網頁幾乎翻譯成四種語言(西班牙文,英文,法文和葡萄牙文)。我只在我的php文件中翻譯了這些東西。將數據庫翻譯成不同的語言

我想要的是也翻譯我的數據庫中的東西,例如,我存儲在那裏的一些文本。我該怎麼做?
我想用echo _($var);代替從db中獲得值的變量,但我認爲這不是一個真正的選擇。

那麼,你會推薦我另一種方法來做到這一點,或者我必須使用gettext來翻譯它嗎?
謝謝!

+0

我寫了一篇關於這段時間的博客文章(http://rwec.co.uk/q/atom-i18n-1)。我的解決方案是特定於postgres的(或者實現是,無論如何),但是我列出了其他我遇到的其他解決方案。 – IMSoP

+0

@IMSoP好的,謝謝!我會看看它! :D – peregraum

回答

0

我不知道數據庫的結構,但是一種解決方案是將db值轉換爲適當的語言並使用語言鍵創建表以便表得到規範化,並根據語言選擇可以引用該表。

+0

是的,我想過這個!如果我找不到更好的東西,我會這樣做! – peregraum

0

對我來說很好的一個實現是將所有UI代碼保留在UI端。這意味着將項目轉換爲JavaScript文件,以便Grunt任務將其從JavaScript文件中提取出來。 Ruben Vermeersch在他的文章a Marking strings in JavaScript code as translatable中談到了這一點。以下是我在測試項目中用於演示此想法的代碼示例。

angular.module('Test') 
    .controller(['gettext', function(gettext) { 
     // Arrays Required for Translation Grunt Task (Do Not Remove) 
     var productNames = [ 
      gettext("Access"), 
      gettext("Database Compare"), 
      gettext("Excel"), 
      gettext("Lync"), 
      gettext("OneNote"), 
      gettext("Outlook"), 
      gettext("PowerPoint"), 
      gettext("Publisher"), 
      gettext("Visio"), 
      gettext("Word") 
     ]; 
    }]); 

你註釋以這樣的方式你的JavaScript後,再次運行「咕嚕提取物」的任務,你應該在你的* .POT文件中看到這些值。

現在,您已準備好進行翻譯並將其編譯回您的翻譯JavaScript文件。當UI現在從後端獲得「Access」時,例如,如果選擇西班牙語,它將知道如何將其轉換爲「Acceso」。

我在我的博客文章a Localization With Angular-GetText中更深入地討論了這一點。如果您仍然有疑問,請參閱並告訴我。

0

我處於類似的情況,我們決定用angular-gettext做前端的所有翻譯。

基本上我們從我的數據庫中提取了所有我們需要的字符串,並將它們放到一個html文件中。然後創建一個運行在內插值上的postTranslate過濾器。

欲瞭解更多詳情請看我的回答here