gpt4 book ai didi

PHP/MySQL Web 应用程序使用枚举数据库字段进行国际化

转载 作者:行者123 更新时间:2023-11-29 09:00:03 25 4
gpt4 key购买 nike

我最近加入了一个项目,现在正在致力于其国际化改进。使用的技术有PHP/MySQL/Zend Framework/Dojo。 I18n 是使用 gettext 实现的,几乎如此处所述 link to SO question在第二个答案中。

但是我遇到了一个问题。特定于某些数据库表的某些信息存储在这些表中的枚举类型列中。例如,表“user”中有一个字段 usr_online_status,它可以是“在线”或“离线”之一。有许多这样的表,其中包含枚举字段,其中包含 ('yes' ,'no') ,('download', 'upload') 等信息。当然,无论用户当前选择的语言如何,此信息都会以英语显示。

我想解决这个不便。但不知道在性能和易于实现方面做到这一点的最佳方法是什么。我看到两种可能的选择:
1) 为每个使用此类枚举的表创建特定于语言的字典表。
2)从枚举下载所有信息。翻译它。制作一个脚本,可以根据需要更改每个表并用所需的翻译替换这些枚举。

但是这个问题可能有更简单或更好的解决方案。

你会做什么?

感谢您的回答。

UPD1重要评论。枚举中的信息不仅显示在 GUI 上,而且还用于搜索。例如 - 网页上有一个网格,其中包含有关用户的信息。您可以在搜索字段中输入“line”,结果将仅是信息中包含“%line%”一词的用户,例如“在线”状态。

最佳答案

您肯定需要字典表:只有有了这些表,应用程序的 2 个不同用户才能同时使用不同的语言。

我建议将其中一些字典表放入 PHP 中,因为这已被证明是一种非常无干扰且高性能的方法 - 例如

$translation=array('yes'=>'Ja','no'=>'Nein', ..)

//...

$row=mysql_fetch_row($qry);
//$row[1] has yes/no
$row[1]=$translation[$row[1]];

//...

$translation 可以根据当前用户的语言首选项、URL 或其他内容进行 require_once() 编辑

基本上,您可以用一些 RAM 来换取速度和易用性。

更新:

随着 Gior312 添加有关搜索的信息,这是我的解决方案:在数据库表中进行反向翻译(您甚至可以使用它为每个脚本创建 $translation):

CREATE TABLE translations (
id INT PRIMARY KEY AUTO_INCREMENT,
languageid INT NOT NULL,
enumword VARCHAR(m) NOT NULL,
langword VARCHAR(n) NOT NULL,
-- n and m to your needs
INDEX(languageid)
-- other indices to your needs
)

现在当到目前为止的搜索是

$line=... //Maybe coming from $_POST['line'] via mysql_real_escape_string()
$sql="SELECT * FROM sometable WHERE somefield LIKE '%$line%'";

你现在要做的是

$line=... //Maybe coming from $_POST['line'] via mysql_real_escape_string()
$sql="SELECT enumword FROM translations WHERE languageid=$currentlanguageid AND langword LIKE '%$line%'";
//fetch resulting enumwords into array $enumwords
$enumlist=implode("','",$enumwords);
//This assumes, that the field enumwords contains nothing, that needs to be escaped
$sql="SELECT * FROM sometable WHERE somefield IN ('$enumlist')";

以不同方式对待前向和反向翻译的基本原理是:

  • 您显示的代码行数比您搜索的代码行数要多,因此正向翻译的非侵入性更为重要
  • 正向翻译必须按行(使用连接)完成,反向翻译只能按每个查询完成,因此正向翻译的性能比反向翻译的性能更重要

关于PHP/MySQL Web 应用程序使用枚举数据库字段进行国际化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8926064/

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