使用或不使用PHP的本机gettext而不是自构建的原因是什么?

Ger*_*obs 6 php multilingual localization gettext

为了使我的应用程序多语言,我想知道GNU的gettext是否有很大的优势,或者构建自己的"库"有很大的缺点.

另外,如果建议"建立自己的",最佳做法是什么?显然他们必须存储在数据库中,我怀疑我想使用平面文件,所以在某些时候我最好缓存它们,我应该怎么做呢?

mar*_*rio 5

gettext扩展有一些怪癖.

  • 它将转换字符串保留在内存中,因此在更新目录时可能需要重新启动(在mod_php运行时下).
  • gettext API并非真正适用于Web应用程序.(它查找环境变量和系统设置.您必须使用Accept-Language标头填充.)
  • 许多人在设置问题时遇到了问题.
  • 另一方面,gettext有更多的工具支持.

使用手工制作的解决方案几乎总能减少麻烦.但话虽如此,gettext API在简洁性方面是无与伦比的._("orig text")或多或少是翻译文本的最佳界面.

如果您想自己编写代码,我建议您专注于此.

  • 使用简单的函数名称.代替_()一些php应用程序使用双下划线__().不要采用任何使实际使用翻译字符串变得麻烦的库.(例如,如果使用Zend Framework,请始终编写包装函数.)
  • 接受原始英文文本作为输入.避免使用助记符翻译键(例如BTN_SUBMT)
  • 在任何情况下都不要将数据库用于翻译目录.这些文本是运行时数据,而不是应用程序数据 (有关一个不好的例子,请参阅osCommerce.)

您可以经常使用PHP数组脚本lang/nl.php,但$text["orig english"] = "dutch here";这些脚本只包含您使用的任何访问方法都可以轻松使用.

还要避免将所有内容都压入该系统.有时,对于较长的文本采用第二种机制是不可避免的.例如template/mail.EN.txt,我用于更大的blob.