我目前正在开发一个网站,该网站在我加入该项目时就已创建。我注意到他们使用服务器上的MySQL数据库来执行网页翻译。 HTML 页面非常简单(带有可选数据、标题、复选框等的框)。该站点是特定设备的控制面板;没有什么花哨。 HTML 中到处都有这种类型的代码来进行翻译:
<?php translate("string to translate"); ?>
MySQL 查询中的 translate() 函数和 PHP session 包含用户语言信息。
目前,该站点可容纳大约 400 个用户(绝不会同时)。恐怕这不是一个可扩展的解决方案,一旦网站有了相当大的流量,它就会运行得很糟糕。
我的假设不好吗?我应该为每种语言使用不同的 HTML 文件(就像大多数网站,IMO)吗?
谢谢!
最佳答案
您的解决方案似乎难以扩展,并且从某种意义上说不是最佳的,因为您获得的查询数量的增长速度明显快于用户数量的增长速度。
“我应该为每种语言使用不同的 HTML 文件(就像大多数网站,IMO)”,不,不要为每种语言编写 HTML,这是一种老式的方法,现在所有网站的用户模板 -一个带有可翻译变量而不是文本的 HTML。
我的建议是使用现有的框架之一,例如 Zend 或 Symfony,它们具有开箱即用的高效翻译机制。您的所有翻译都将保存在单一语言文件中,例如 en_US.po 或 lt_LT.po,您可以使用 Poedit 软件对其进行编辑。
如果您不想使用框架并想要一个更简单的解决方案 - 为每种语言创建一个包含文本变量的 php 文件,例如
en_US.php
$translation['page_title'] = 'My cool company title';
$translation['menu_title'] = 'Navigation';
lt_LT.php
$translation['page_title'] = 'Mano kompanija'; // Lithuanian translation
$translation['menu_title'] = 'Navigacija'; // Lithuanian translation
然后在加载 HTML 之前包含必要的文件并在模板中使用这些变量:
index.php
<?php
// Very simple approach to insert the necessary translation file, could be optimized/tuned
if ($_GET['language'] == 'en_US'){
require 'en_us.php'
}
else if ($_GET['language'] == 'lt_LT'){
require 'lt_LT.php'
}
?>
<html>
<title><?= $translation['page_title']; ?></title>
<body>
<menu><?= $translation['menu_title']; ?></menu>
</body>
</html>
希望这有帮助。如果您有任何疑问,请告诉我。
关于php - MySQL 通过 PHP 查询将 HTML 页面翻译成不同的语言。是好是坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23315444/