接著 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