考慮編寫一個PHP庫,該庫將通過Packagist或Pear發佈。它針對的是在任意設置中使用它的對等開發人員。如何國際化PHP第三方庫
該庫將包含爲客戶端確定的一些狀態消息。我該如何國際化此代碼,以便使用該庫的開發人員可以自由地插入自己的本地化方法?我不想承擔任何事情,特別是不要強迫開發者使用gettext。
要在一個例子工作,讓我們這個類:
class Example {
protected $message = "I'd like to be translated in your client's language.";
public function callMe() {
return $this->message;
}
public function callMeToo($user) {
return sprintf('Hi %s, nice to meet you!', $user);
}
}
這裏有兩個問題:我要怎樣私人$message
翻譯,以及如何允許開發本地化字符串裏面callMeToo()
?
一(非常不方便),選擇是,要請一些國際化的方法在構造函數中,像這樣:
public function __construct($i18n) {
$this->i18n = $i18n;
$this->message = $this->i18n($this->message);
}
public function callMeToo($user) {
return sprintf($this->i18n('Hi %s, nice to meet you!'), $user);
}
,但我特別希望有一個更好的解決方案。
編輯1:除了簡單的字符串替換外,i18n的字段是一個寬字符。前提是,我不想在我的庫中包含任何i18n解決方案,或者強制用戶選擇一個專門用於我的代碼的解決方案。
那麼,如何構建我的代碼,以便爲不同方面提供最佳和最靈活的本地化:字符串翻譯,數字和貨幣格式,日期和時間......?假設其中一個或另一個顯示爲我的庫的輸出。消費開發人員可以在哪個位置或界面插入本地化解決方案?
謝謝,有趣。基本上,建議的'loadStrings'似乎與我的需求很匹配。你知道野外的任何項目,他們如何處理它? (雖然Zend被豁免,但他們有自己的i18n庫) – Boldewyn
@Boldewyn我知道一些處理它的閉源項目,但我必須認真思考一個開源項目。大多數都沒有本地化,如果他們是,他們使用gettext ... – ckruse
是的,這正是我的問題,不幸的是... – Boldewyn