gpt4 book ai didi

php - 在 php 网站中放置翻译系统的最佳方法是什么?

转载 作者:可可西里 更新时间:2023-11-01 12:41:55 26 4
gpt4 key购买 nike

我正在用 PHP 开发一个网站,我想让用户轻松地从德语切换到英语。

因此,必须考虑翻译策略:

我是否应该将数据及其翻译存储在数据库表中((1, "Hello", "hallo"), (2, "Good morning", "Guten Tag")等......?

还是应该用“.mo”文件来存储?
哪种方式最好?
有什么优点和缺点?

最佳答案

最近我自己在一个生产系统上解决了这个问题(12 种语言并且还在增加),并且在此过程中遇到了一些主要的性能问题,我建议使用混合系统。

1) 将语言字符串和翻译存储在数据库中——这将使与/更新/删除项目的交互变得容易,而且将成为您正常备份例程的一部分。

2) 将语言缓存到服务器上的平面文件中,并根据需要将它们提取出来以显示在页面上。

这样做的好处有很多——主要是速度快!我不处理 MySQL 的连接开销或传输期间的任何流量减慢。 (如果您的数据库服务器不是本地主机,则尤其重要)。

这也将使它非常易于使用。将数据库中的数据作为 php 序列化数组存储在文件中,并对文件内容进行 GZIP 压缩以减少存储开销(这也使我的基准测试速度更快)。

示例:

$lang = array(
'hello' => 'Hallo',
'good_morning' => 'Guten Tag',
'logout_message' = > 'We are sorry to see you go, come again!'
);

$storage_lang = gzcompress( serialize( $lang ) );

// WRITE THIS INTO A FILE SUCH AS 'my_page.de'

当用户第一次加载您的系统时执行file_exists('/files/languages/my_page.de')。如果文件存在,则加载内容、解压缩和解序列化,然后就可以开始了。

示例

$file_contents = get_contents( 'my_page.de' );
$lang = unserialize( gzuncompress( $file_contents ) );

如您所见,您可以针对系统中的每个页面进行特定的缓存,从而使开销更小,并使用文件扩展名来表示语言...(my_page.en、my_page.de、my_page.fr)

如果文件不存在,则查询数据库、构建数组、序列化、gzip 压缩并写入丢失的文件——与此同时,您刚刚构建了页面所需的数组,因此继续显示页面和每个人都很高兴。

最后,这允许您构建非程序员可以访问的更新页面,但您还可以通过决定何时删除缓存文件来控制何时出现更改,以便系统可以重建它们。

警告和陷阱

当我将所有内容直接保存在数据库中时,当我们的流量激增时,我们会遇到一些严重的减速问题。

尝试将它们仅保存在平面文件数组中非常麻烦,因为更新很痛苦并且容易出错。

非 GZIP 压缩缓存文件的内容使语言系统在我的基准测试中慢了大约 20%。

确保所有包含语言的数据库字段都设置为 UTF8-general-ci(或至少 UTF8 选项之一,我发现 general-ci 最适合我使用)。否则,您将无法在数据库中存储非 unicode 字符集(如中文、日文等)

扩展名:为了回应下面的评论,请务必在设置数据库表时考虑到页面级语言字符串。

id      string              page        global
1 hello NULL 1
2 good_morning my_page.php 0

出现在页眉或页脚中的任何内容都可以有一个全局标志,该标志将在创建的每个缓存文件中查询,否则按页面查询它们以保持系统响应。

关于php - 在 php 网站中放置翻译系统的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2344383/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com