【问题标题】:Recommended way to store strings for a multi-language PHP application为多语言 PHP 应用程序存储字符串的推荐方法
【发布时间】:2011-10-01 20:29:17
【问题描述】:

通常我将字符串与描述它们的关键字相关联,然后将它们存储在结构为id int, id varchar(16), language char(2), string varchar 的数据库表中。然后我创建了一个 PHP 包装函数来根据访问者的当前语言获取每个字符串。

有人告诉我(并且在我认为的某个地方读过)使用 PHP 的内置方法来处理国际化。但是我没有找到任何真正“令人信服”的信息来说明为什么它应该比我的数据库方式更合适。

处理国际化网站字符串最合适的方法是什么?为什么?有没有我应该总是更喜欢它的更好性能?如果有更好的性能,我会转用它。

【问题讨论】:

    标签: php internationalization multilingual recommendation-engine


    【解决方案1】:

    这取决于您的目标是什么。如果您需要网站用户在线更新您的翻译,那么您的数据库方法是可以的。但是,如果要由专业翻译人员提供翻译,那么最好将翻译与网站脱钩。在这种情况下,使用 gettext 之类的东西是一个更好的主意 - 您将能够发送 .po 文件进行翻译,然后将其重新集成到您的网站中。

    考虑整个过程,管理翻译人员,管理变更等。

    【讨论】:

    • +1 Gettext 非常棒,它快速高效,并且比不断访问数据库获取翻译字符串所需的开销更少。如果你可以在某处缓存你的翻译,这样你就不必一直访问数据库,那也很好,如果你有一个更有效的缓存系统,你也可以缓存 gettext 翻译。
    • @drew010 请给我命名几个缓存系统。
    • 我在很多项目中都使用memcached。它将数据缓存在内存中以便非常快速地访问。 PHP 具有直接与 memcached 服务器交互的扩展。如果操作正确,您甚至可以将翻译缓存为文件中的序列化数组或对象。根据您的站点的繁忙程度,您需要密切关注更新翻译,因为您可能有两个进程想要使用不同的翻译更新缓存,一个最终覆盖另一个。因此,memcached 可能是更好的选择。 APC 和 xcache 是其他值得一看的。
    【解决方案2】:

    给猫剥皮的方法有很多种。我认为您已收到此建议,因为 PHP 使用客户端设置来获取默认语言(尽管您可能使用了类似的方法)。无论哪种方式,都必须存储多个字符串。如果您更喜欢 db 保存这些字符串,那么可以。如果您没有看到任何性能问题,请继续使用它。无需更改您喜欢的内容。

    【讨论】:

    • 那我补充一下这个问题……会有更好的表现吗?
    【解决方案3】:

    Gettext 似乎通常取决于每个进程的区域设置,它们也取决于系统安装的区域设置。对于 Web 应用程序,请考虑使用您自己的数据库实现以及已经指出的一些缓存方法。

    【讨论】:

    • 感谢您的建议。我想问一下,你今天早上是否支持我的回答和问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    • 1970-01-01
    相关资源
    最近更新 更多