2014-01-24 52 views
15

是否有更好的方法來存儲大量文本以便在laravel進行本地化?如果我的整個頁面僅僅是純文本,但是我的幾個頁面的佈局複雜,並且我需要添加多個字符串以圍繞內容(如圖像/鏈接/媒體)包裝文本,這很容易。Laravel大型網站本地化

這是一個痛苦,如果我需要斜體/大膽或爲文本做任何形式的HTML以及我需要將它們分成幾部分才能做到這一點。

我使用的是什麼樣的一個例子:

return array(
    'exchange_rate' => array(
     'title' => 'Exchange Rate', 
     'p1' => 'Disclaimer', 
     'p2' => 'Currency rate displayed is subject to change.', 
     'p3' => 'View All Rates to Date' 
    ), 

第一個數組是網頁,二是網頁的內容。我經常需要爲更復雜的佈局深入多個陣列,例如:

return array(
'exchange_rate' => array(
    'title' => 'Exchange Rate', 
    'p1' => 'Disclaimer', 
    'p2' => 'Currency rate displayed is subject to change.', 
    'p3' => 'View All Rates to Date', 
    'table1' => array(
     'title' => 'Currency Table', 
     'row1' => array(
      'l1' => 'Current Rate' 
     ), 
     'row2' => array('etc') 
    ) 
); 

我正在做對嗎?有沒有更好的方法來格式化我的語言文件,以便我可以在視圖中解決佈局問題?我只是好奇大型網站如何管理本地化。

任何幫助非常感謝,謝謝!

編輯:我也知道,你可以如你的本地化陣列裏面添加佔位符:

'title' => ':title' 

但在一個頁面上添加佔位我所有的鏈接,圖像和媒體可以得到亂。 Laravel也不支持語言數組中的HTML,所以我不能僅僅在語言文件內部播放內容。 - 是的它確實

現在看來有兩種不同的方式可以到這裏。

  1. 繼續將它們分成小段以不同的方式格式化文本。
  2. 將頁面文本粘貼到每個頁面的「內容」數組中,使用Waavi將它們傳輸到數據庫,然後使用網站上的WYSIWYG編輯器正確格式化它們以格式化數據庫條目。 (雖然這樣也有問題,以及因爲你不能使用刀片模板郎:: get()返回唯一安全的文本)

EDIT(2015年2月10日):

大量搜索後,我已經創建了一個適合我需求的包裝。它完全消除了對laravel中任何文本數組的需求。它會自動將文本添加到數據庫並將其轉換爲您設置的區域設置。另外,您不需要管理和解密帶點標記的翻譯路徑。

https://github.com/stevebauman/translation

+1

我也有興趣看到這個答案。 – snollygolly

回答

2

您可以隨時使用了一個叫做 Waavi translation

保持項目的翻譯正確更新很麻煩。 通常翻譯人員無權訪問代碼庫,並且即使在 他們確實很難跟蹤每種語言的 每種語言缺少哪些翻譯,或者原始文本的更新需要修改 翻譯時。

這個軟件包允許開發者利用其數據庫和緩存,以 管理多語言網站,同時還開發過程中的語言文件 工作,並從所有功能Laravel的 翻譯捆綁有,像多元化或更換受益。

+0

我已經使用這個軟件包,但它所做的只是將您的翻譯添加到數據庫中,這太棒了不要誤解我的意思,但問題仍然存在,那就是我必須添加許多語言字符串才能使每頁添加自己的佈局 –

1

好,

大型網站可能使用某種形式的CMS允許編輯文本的不同語言。

我不確定Laravel的具體情況,但您希望用戶能夠編輯文本。有沒有爲這麼多的解決方案,你要麼需要:

  1. 在線接口在您的網站
  2. 或腳本來導出/導入翻譯離線

最常見的格式,這是的.po文件,有些軟件甚至允許你直接導入包含PHP數組/導出文件。這不會與你的格式,雖然,因爲你的文件是多維數組。

如果你這樣走,this PHP PoParser class其中既可以讀寫.po文件。

+0

是的我已經建立了一個在線後端,以便能夠編輯翻譯,但翻譯文件的重點是在每個數組中都有純文本的頁面。 儘管在數組內部支持HTML,但用HTML添加語言數組內的整個頁面內容看起來是錯誤的方式,在這種情況下,我可能對每種語言都有兩種不同的視圖,並且遠離使用laravel的本地化工具。 –

+1

雅,使整個視圖可編輯使用Markdown或基本Wysiwyg,你完全得到一個CMS。 – Savageman

+0

我可以做到這一點,這是一個可以肯定的選擇,但是當所見即所得編輯了兩個不同的視圖時,頁面在英文和法文方面可能會有所不同。我只是堅持走這條路。 –

2

我不認爲這裏有一個理想的解決方案,它取決於項目的大小。或許只是對每種語言不同的看法,然後調用查看::使動態 - 這樣的事情:

$view = 'pages.'.Lang::getLocale().'.mypage'; 
if (View::exists($view)) return View::make($page); 
else App::abort(404); 
+4

不是最好的答案。如果您在版面中更改某些內容並且擁有該頁面的15個翻譯,該怎麼辦?你需要改變它15次,增加打破某些東西的機會。除此之外,翻譯者必須知道HTML。 – trizz

+0

我完全同意trizz,這正是我不想爲不同語言提供多種視圖的原因。它打破了拉拉維爾的方法。我寧願有一個佈局文件,並用純文本管理翻譯。 –

+0

@trizz我仍然認爲將大塊文本作爲獨立語言*部分*可以*合成*到最終頁面渲染的機制對於OP來說是一種有用的策略。 – bishop

10

我寫了一個程序包生成郎文件給你。寫下你的模板,控制器,......而不用無聊翻譯。當您完成代碼時,只需執行php artisan localisation:missing,它將在您的lang/*/目錄中生成所有需要的文件。

將同步翻譯:

  • 保留目前使用的translatations
  • 創造新translatations
  • 刪除或底部陳舊譯本移動

的包,請訪問:https://github.com/potsky/laravel-localization-helpers

在日常使用中,它與po文件的工作流程相同。讓我知道,如果你的生活在Laravel真棒框架中翻譯起來更容易!

+0

我要檢查一下,謝謝! –

2

雖然筆者創建了自己的包進行翻譯,我想補充另一個問題: laravel-gettext

從CakePHP的世界裏,翻譯與處理的到來。po文件在我laravel項目,我會用上面的擴展,這是因爲:

  1. 我以前用的是語法,對我來說它是自然地用它的排序(我有創造它的代碼段)
  2. GNU Gettext的是一個翻譯標準,也有對翻譯的文件(PoEdit軟件)
  3. 更容易維護遠景規劃和增加新的標籤到文件

擴展編輯是不是我的,我沒有到目前爲止使用它,但我會在第一次出現。