首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在PHP中保留依赖于语言环境的字符串资源的最佳方法是什么?

在PHP中保留依赖于语言环境的字符串资源的最佳方法是什么?
EN

Stack Overflow用户
提问于 2010-10-31 02:49:53
回答 4查看 1.7K关注 0票数 3

假设您正在构建一个多语言web应用程序,其中所有的界面文本都应该移动到与语言相关的资源中,并在需要时加载。字符串资源可能是巨大的:假设您有数千个字符串被翻译。在窗口环境中(Windows,OS,X11),你通常有一个由操作系统或一些应用程序接口提供的机制来做这件事,它们通常被称为字符串资源。那么PHP呢?

但是请记住,在这里必须认真考虑性能,因为PHP会根据每个用户请求编译并执行所有模块。

我可以想出几种可能的方法来做这件事。但首先,我将有一个全局变量$LANGUAGE,它可以设置为'en','de','fr‘等。

代码语言:javascript
运行
复制
require_once "lang-$LANGUAGE.inc.php"

因此,一些可能的解决方案包括:

(1)在每个语言模块中将所有字符串定义为全局变量,例如

代码语言:javascript
运行
复制
$str_signin = 'Sign in';
$str_welcome_user = 'Welcome, %s'!;
...

非常简单,易于阅读,对于非技术人员(即翻译人员)来说也相对容易。但是,有一些全局空间污染,这将减慢您的全局变量查找速度。

(2)相同但定义为一个巨大的数组,例如

代码语言:javascript
运行
复制
$str['signin'] = 'Sign in';
$str['welcome_user'] = 'Welcome, %s'!;
...

在你的主代码中可读性更差,可用性更差(涉及更多的类型)也会使你的代码变得更加混乱。这将是较慢的,因为这些不是简单的赋值,而是assoc。数组分配:与(1)相比,这里将有更多的指令要为VM执行。

(3) PHP 5.3+:定义为常量,可能在类或命名空间中

代码语言:javascript
运行
复制
class str {
    const signin = 'Sign in';
    const welcome_user = 'Welcome, %s'!;
    const signin_to_a = self::signin . ' to area A'; // can't do this!
    ...
}

..。很好,我最喜欢这个,尽管也有一些小缺点: PHP 5.3+;不能使用表达式,只能使用单个值(这在你的例子中可能很好,也可能不好);不能在双引号的字符串中使用$-扩展(或者你可以吗?)。

(4)数据库:将所有内容放入表中,按某个ID进行检索,如str_get(STR_SIGNIN)。丑陋,缓慢,需要在代码中同步您的ID与数据库ID的,但是没有必要加载所有的东西,当您的页面只需要几个字符串。老实说,我不知道这是不是一个好的解决方案。

还有其他建议吗?另外,对这些问题有什么看法?

请牢记简约、优雅和性能!

EN

Stack Overflow用户

发布于 2010-10-31 03:07:01

那gettext呢?或者,Zend Framework提供了一个非常可靠的接口来处理翻译。

票数 1
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4060162

复制
相关文章

相似问题

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