我在構建網站時多次遇到此問題。 我會解釋一下使用PHP和Laravel作爲例子,但這個問題是一個常見的多平臺。 這已經解決了幾個問題(post1,post2,post3,post4和其他一些),但帖子並沒有真正得到一個很好的答案。構建網站翻譯文件
現在的問題是:在語言文件中構建翻譯內容的最佳方式是什麼?
我目前使用Laravel(我不是提版本,因爲這兩個Laravel 4和Laravel 5有類似的定位功能,至少是相似的足以讓這個話題的效果影響不大)。
本地化結構的內容跨越語言文件(en,es,de,fr ...),其中可能有多個.php文件包含返回多級字典結構的返回語句。
/lang
/en
messages.php
/es
messages.php
和文件包含的東西是這樣的:
//Laravel 5
trans('messages.example1'); //outputs 'example message for value exaple-key'
trans('messages.example2.sub-example'); //outputs 'example message for example1.sub.example'
//Laravel 4
Lang::get('messages.example1'); //outputs 'example message for value exaple-key'
Lang::get('messages.example2.sub-example'); //outputs 'example message for example1.sub.example'
的分組浮現在腦海中的幾種方法:
<?php
return [
'example1' => 'example message for value exaple-key',
'example2' => [
'sub-example' => 'example message for example1.sub.example',
],
];
並在此呼叫是通過做這樣的事情做:
通過網站內容
例如:
homepage.php, page1.php, page2.php...
通過邏輯域:
例如:
auth.php, validation.php, pagination.php...
通過HTML:
例如:
buttons.php, popup_messages.php, form_data.php...
-
例如:
simple_words.php, phrases.php...
,比包含前
所有這些都有一些明顯的優點和缺點,我喜歡'password-to-short' => 'your password is to long'
提到的那些的一些混合/組合的內容通過直接翻譯中將不會嘗試去int,但5th選項最有可能是最好的解決方案,但仍然存在着在哪裏畫線以獲得最小重複的短語和內容的問題。
另一個問題是如何解決在某些情況下大寫第一個字符和其他情況下小寫以及末尾標點符號的問題。
我對此問題做了研究,但沒有明確的指導方針和/或可用的示例。
歡迎您提出意見。
您是否認爲您提到的問題沒有提供明確答案,可能是因爲沒有包含項目中所有可能用例的權威解決方案?你已經列出了5種可能的解決方案,所有這些解決方案都是可行的。所以只要選擇一個最適合你的項目。至於你的問題的第二部分,它可以像使用['ucfirst'](http://php.net/manual/en/function.ucfirst.php)或['lcfirst'](http:/ /php.net/manual/en/function.lcfirst.php),如果需要,或者需要複雜的話,因爲再次沒有通用的解決方案。 – Bogdan
我知道沒有確定的解決方案。儘管如此,即使如此,對於更復雜的用例,也應該存在一些指導方針和示例,或者至少應該有一個普遍認同的做法。 – Traveller
這正是我所強調的,沒有「普遍認同的做事方式」_。這裏的地面工作由[Laravel的本地化](http://laravel.com/docs/5.1/localization)提供,就結構而言,這取決於您,以及最適合您項目的東西。因爲不同的應用程序有不同的內容,建議一個適合所有人的通用結構非常困難,並且通常你只會得到每個人的意見,這是[off-topic](http://stackoverflow.com/help/on-主題)在這裏堆棧溢出。 – Bogdan