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

Posted

技术标签:

【中文标题】通过数据库或平面文件进行本地化?【英文标题】:Localization via database or flat file? 【发布时间】:2011-08-02 05:50:13 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

从文件加载数据比从数据库加载要快方式。您只需在数据和应用程序之间削减许多抽象层。如果您分析应用程序的性能,您会发现数据库访问通常是最慢的操作之一。

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

也就是说,与任何有关性能的事情一样,不要相信我的话,而是自己衡量一下。也许在您的特定环境中,使用您的特定应用程序,数据库就可以了。

【讨论】:

【参考方案2】:

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

每次要更改翻译时,您都需要将数据插入/更新到数据库中——这比使用平面文件更难。 你需要大量的选择来构建一个完全翻译的页面——这对性能不太好(意味着你必须设置一些缓存机制)

出于好奇,为什么不看看其他的东西——目标是翻译的东西?

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

【讨论】:

加载平面文件的方法非常简单,我没有看到任何第三方解决方案的好处。 关于gettext,我认为现有工具是一个优势(从未使用过,但我知道有一些)

以上是关于通过数据库或平面文件进行本地化?的主要内容,如果未能解决你的问题,请参考以下文章

使用 D3.js 加载本地数据以进行可视化

使用 PySpark 在本地模式下读取文件时出现 OutOfMemoryError

如何通过CMake查找特定/本地文件

如何为mongodb数据库创建一个平面文件,以及如何在弹性搜索和kibana中使用该平面文件来查询数据?

使用 WAMP 或 XAMPP 进行 Wordpress 本地安装

使用 sqlite 进行 iPhone 本地化?