首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP自定义Webapp翻译系统-优化建议

PHP自定义Webapp翻译系统-优化建议
EN

Stack Overflow用户
提问于 2011-03-05 19:57:55
回答 4查看 506关注 0票数 1

我是一个webapp (任务管理器)的开发者。

这个应用程序必须有多种语言版本。因此,用户有常用的语言下拉菜单来切换到不同的语言。

我不得不构建一个以MySQL作为后端的自定义翻译系统,因为我有特定的约束。

系统上的主表(包括一些记录作为示例)是translation表:

代码语言:javascript
复制
id | language_id | string_id | message  
1  |     en      | WELCOME   | welcome  
2  |     it      | WELCOME   | benvenuto  

我可以编写一个函数getTranslatedMessage,它将获得string_id作为输入,并将_检测当前语言_进行数据库查询并检索一行_返回翻译后的消息

这样的系统的问题是会给数据库带来很大的压力。如果我在一个页面上有20个字符串要翻译,那么每个页面加载将有20个对数据库的查询。

您是否认为我应该走这条路,因为它是最干净和最简单的,使用memcache保存每个getTranslatedMessage输出的结果,并使用language_idstring_id作为memcache条目的键?

你会用一种不同的方式来做吗?

我在想,也许可以在启动时将一种语言的所有消息加载到全局数组$lang中。

任何建议都将是非常受欢迎的,因为这个组件将是我的应用程序中的关键。

谢谢,

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-03-05 20:15:00

这不是应用程序数据。它不属于数据库。(请看osCommerce作为一个很好的例子来说明不要遵循这条道路)。因为您已经计划一下子读取它,所以您可以很好地将应用程序UI文本存储在文件中。

冗长的getTranslatedMessage()函数名和助记符消息ids也不是一个好主意。使用原始的英语句子,而不是大写的缩写。并使翻译函数调用变得不那么麻烦。否则,一旦超出了预期的20个字符串,就会使您的应用程序更加不便。(OTOH如果您想从心理上限制翻译的数量,msgid和长函数名是合适的。)

这是一个无聊的建议。但是你应该考虑使用原生PHP gettext functions。它们有很多缺点,但不适用于此目的。

票数 3
EN

Stack Overflow用户

发布于 2011-03-05 20:13:20

您的表中有多少条记录?如果没有太多(<10000),当然必须将其加载到一个数组中,然后从该数组中获取变量。

代码语言:javascript
复制
$LANG = array();

$result = mysql_query("SELECT string_id, message FROM translation");
while ($row = mysql_fetch_row($result))
  $LANG[$row[0]] = $row[1];


function __($id) {
  global $LANG;
  return (isset($LANG[$id])) ? $LANG[$id] : $id;
}

使用名称__()而不是getTranslatedMessage。这要简单得多。

票数 3
EN

Stack Overflow用户

发布于 2011-03-05 20:14:18

对于多语言网站,我使用全局字典,散列表放在不同的文件中。例如:

-带有英文翻译的文件

代码语言:javascript
复制
$lang['hello'] = 'Hello';

-带有德语翻译的文件

代码语言:javascript
复制
$lang['hello'] = 'Hallo';

我只是包含了所需的文件。我认为这是相当便宜的资源和快速。添加另一种语言文件(即使是web表单)并使用它也很容易。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5203664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档