使用或不使用 PHP 原生 gettext 与自构建的原因是什么?
为了使我的应用程序成为多语言的,我想知道 GNU 的 gettext 是否有很大的优点,或者构建自己的“库”是否有很大的缺点。
此外,如果更建议“构建自己的”,那么最佳实践是什么?显然它们必须存储在数据库中,我怀疑我想使用平面文件,所以在某些时候我最好缓存它们,我应该如何处理呢?
To make my application multilingual I'm wondering if there are big advantages to GNU's gettext or if there are big disadvantages of building your own 'library'.
Also if 'build your own' is more advised, what are the best practices? Obviously they have to be stored in the database, I doubt I wanna work with flat files, so at some point I'm better off caching them, how should I go about this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
gettext 扩展有一些怪癖。
使用手工解决方案几乎总是会减少麻烦。但话虽如此,gettext API 的简洁性是无与伦比的。
_("orig text")
或多或少是翻译文本的最佳界面。如果您想自己编写一些代码,我建议您集中精力。
__()
来代替_()
。不要采用任何使实际使用翻译字符串变得麻烦的库。 (例如,如果使用 Zend Framework,请始终编写包装函数。)BTN_SUBMT
)您通常可以使用仅包含
$text["orig english"] = "dutch here"; 的 PHP 数组脚本
,无论您使用什么访问方法,都可以轻松使用它们。lang/nl.php
。还要避免将所有内容压入该系统。有时,对于较长的文本,不可避免地采用第二种机制。例如,我使用
template/mail.EN.txt
来处理更大的 blob。The gettext extension has some quirks.
You will almost always have less trouble with a handicrafted solution. But that being said, the gettext API is unbeatable in conciseness.
_("orig text")
is more or less the optimal interface for translating text.If you want to code something up yourself, I recommend you concentrate on that.
_()
a few php apps use the double underscore__()
. Don't adopt any library that makes it cumbersome to actually use translated strings. (E.g. if using Zend Framework, always write a wrapper function.)BTN_SUBMT
)You can often get away with PHP array scripts
lang/nl.php
containing nothing but$text["orig english"] = "dutch here";
, which are easy to utilize from whatever access method you use.Also avoid pressing everything into that system. Sometimes it's unavoidable to adopt a second mechanism for longer texts. I for example used
template/mail.EN.txt
for bigger blobs.Gettext 不是线程安全的。
在决定实现您自己的之前,我建议您查看一下 Zend_Translate。它原生支持 gettext 适配器以及 TMX、CSV、INI、Array 和更多格式。如果不支持您的首选格式(例如数据库存储),那么编写您自己的适配器也应该很容易。
Gettext is not thread-safe.
Before deciding to implement your own I suggest you take a look at Zend_Translate. It has native support for a gettext adapter, as well as TMX, CSV, INI, Array and more formats. It should also be easy enough to write your own adapter if your preferred format isn't supported, such as database storage.