通过数据库或平面文件进行本地化?

时间:2011-04-09 20:48:21

标签: php database localization internationalization application-design

对于多语言PHP应用程序,假设标签/短语将被翻译成多种语言。这些标签可以放在特定语言的文件中(例如,每种语言一个文件),也可以加载到数据库中,以便应用程序在需要时可以访问它们。

问题是,从绩效的角度来看,更好的方法是什么?

对我看来,如果标签在数据库中,则加载的数据较少(我只能请求单个页面所需的标签),并且可以更轻松地构建用于翻译的管理工具。但是,似乎很多应用程序和框架都使用平面文件(例如phpMyAdmin,CakePHP等)

2 个答案:

答案 0 :(得分:4)

从文件加载数据方式比从数据库加载更快。您只需在数据和应用程序之间划分多层抽象。如果您对应用程序的性能进行概要分析,您将看到数据库访问通常是最慢的操作之一。

如果您不想在每次显示内容时加载所有本地化字符串,则始终可以选择将它们放在不同的文件中。例如,到处显示字符串的“全局”文件,以及特定于您的页面/部分的本地化文件。

那就是说,就像有关表演的任何事情一样,不要相信我的话,而是自己来表达。也许在您特定的背景下,通过您的特定应用程序,数据库就可以了。

答案 1 :(得分:1)

数据库允许您只选择您感兴趣的记录...
但是:

  • 每次要更改翻译时,都需要将数据插入/更新到数据库 - 这比使用平面文件更难。
  • 你需要很多选择,建立一个完全翻译的页面 - 这对于表演来说并不是很好(并且意味着你必须将一些缓存机制放在​​适当位置)


出于好奇,为什么不看看别的东西 - 目标是翻译?

在这里,我正在考虑广泛使用的Gettext - 并且PHP 有一个Gettext扩展名(我应该添加其他可用的类 - 在Zend中例如,框架)