2015年3月17日 星期二

Laravel 多國語系網站 (使用 Laravel 4.2)

我在家偶爾有空的時候有試了一下多國語系,不知道是我沒認真學還是怎樣,但是前前後後也花了兩週啊... QQ,總之,自己做多國語系要串 routes,但是其實不會很難,可是畢竟很多事情要控制,自己寫很容易漏掉,像是語系是否要預設語系 (舉例: 不論 user 身在何地都顯示英文) 還是以瀏覽器的預設語系為主 (舉例: 在台灣就幫你預設顯示繁體中文),當下我是覺得我對多國語系需要的架構太不熟了...,所以我裝了 package 解決,文章後面會提到用哪些 package。


接著 Routes 就算能夠完成,Table 的規劃也要注意,主要就是幾乎每張表都會有一張附表,像是 XXX_translation 之類的命名,假如我要存 news 的資料,那就是除了有 news 這張表之外,還要有一張 new_translations 的表,new_translations 要有 new_id 用來關聯的欄位,以及 locale 或是 lang 的欄位。

假設 news_translations 的表如下:

不知道大家都是怎麼規劃多國語系的 table 的規劃....,我只記得以前學 Joomla 的時候,那個 table 真是多到噁心... XD

但是後台要做寫入資料時就要注意,因為編輯的時候會選擇,是編輯某篇 news 的英文還是中文還是其他文的內容,寫入資料就要知道他當下要存的語系是什麼,這一段應該是可以在 Model 做掉。

總之自己規劃的話,就是要把 route 跟 model 的部分處理好。


結論是我放棄了自己規劃的路,後來選擇搭配 package,研究出來還不錯的搭配是 :

dimsav/laravel-translatable
mcamara/laravel-localization


dimsav/laravel-translatable
處理 table 的 migration 跟資料的寫入讀出。 做基本的功能ok,複雜一點的 table 或是有些關聯什麼的,我還沒有遇到過是不是會有什麼不適合的地方。


mcamara/laravel-localization
處理語系的設定跟 routes。尤其有很多現成的 Helper 蠻好用的,還有像是產出選擇語系的下拉選單也是有提供。我上面提到的那些設定,這個 package 也有做,例如是否依照使用者的瀏覽器判斷語系等等。

另外如果你有搭配 generator (像是 wdollar/Laravel-4-Generators-Bootstrap-3 或是 JeffreyWay/Laravel-4-Generators)  去做 scaffolding,產出來的 view 的所有的 routes  都要改掉哦,  舉例:
{{ link_to_route(LaravelLocalization::getCurrentLocale().'.admin.news.create', 'Add New News', null, array('class' => 'btn btn-lg btn-success')) }}


現在很多 Package 都有符合 Laravel 5.0 的版本了,所以在看這些 package 的 github 的時候,要注意版本的問題,小心在 composer update 時噴出錯誤哦。

一些其他的 package:
barryvdh/laravel-translation-manager  這個我還在考慮會不會需要用到。


大概就這些,有什麼做法歡迎分享,我也是第一次研究多國語系.... 

沒有留言:

張貼留言

若你看的文章,時間太久遠的問題就別問了,因為我應該也忘了... XD

Vue multiselect set autofocus and tinymce set autofocus

要在畫面一進來 focus multiselect 的方式: 參考: https://jsfiddle.net/shentao/mnphdt2g/ 主要就是在 multiselect 的 tag 加上 ref (例如: my_multiselect), 另外在 mounted...