考虑编写一个PHP库,它将通过Packagist或Pear发布.它适用于在任意设置中使用它的同行开发人员.
该库将包含为客户端确定的一些状态消息.如何使此代码国际化,以便使用该库的开发人员可以尽可能自由地插入自己的本地化方法?我不想假设任何东西,特别是不强迫开发人员使用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); } }
这里有两个问题:如何将private标记$message
为翻译,以及如何允许开发人员在内部对字符串进行本地化callMeToo()
?
一个(非常不方便)选项是,在构造函数中要求一些i18n方法,如下所示:
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解决方案,或强迫用户专门选择一个以满足我的代码.
然后,我如何构建我的代码,以便为不同方面提供最佳和最灵活的本地化:字符串翻译,数字和货币格式,日期和时间,......?假设一个或另一个显示为我的库的输出.消费者可以在哪个位置或界面插入她的本地化解决方案?