3

我需要创建一个全局应用程序。这意味着它应该在世界任何地方、任何国家(或大多数国家)都可以正常工作。这是一个 PHP 网站,将在某些时候处理金钱和时间。

我希望我能知道国家、相关时区、货币格式、符号和代码的好资源,这类东西......

如果有人对这些数据有提示以及我如何以适当的方式使用它们,我将非常感激:)

提前致谢!

4

4 回答 4

3

Zend Locale是 Zend Framework 的一部分,可帮助您解决与货币、时区、翻译等相关的问题...

逐个采用 Zend Framework 很容易,因此您可以只使用您需要的那些部分(没有膨胀或减速)。

于 2010-07-23T13:26:22.317 回答
2

看看国际(http://www.php.net/manual/en/book.intl.php)。

它是 ICU(Unicode 的国际组件,http://site.icu-project.org/)的包装器,包含您需要的大部分内容。

于 2009-11-12T07:34:37.510 回答
1

我开发了一个全球化的应用程序,我发现最棘手的元素之一是时区以及如何存储日期时间。有时日期需要存储在本地时间(例如世界上某个地方的事件时间),有时它们需要存储在一个公共时区中(例如将创建的日期存储为所有的 UTC)并转换为用户需要时的当地时间。我会建议您的数据库列/变量的命名约定,以明确它是什么。

永远不要尝试手动处理时区转换(它比您想象的要复杂得多),使用某种库/框架 - 我不知道在 PHP 中使用什么,在 .Net 中我们可以依赖 .Net BCL这种事情。

于 2010-07-23T13:30:33.023 回答
1

看看Mantis BugTracking 软件如何处理国际化。他们使用的方法相当不错。

附加信息: 我使用它已经有好几年了,但是快速浏览源代码表明这部分代码并没有显着变化。他们使用许多产品使用的通用消息目录和获取消息方法。他们的语言 API 非常简单 - phpxref 输出可用,这并不奇怪。消息目录被实现为一个简单的include'd 的 PHP 脚本。例如,英语目录包含以下条目:

$s_new_bug = 'New Issue';
$s_bugnote_added = 'Note Added';

它包含大约 1,600 条左右的声明。有趣的魔法发生在里面lang_load。加载语言时,会包含目录文件,因此它定义的所有变量都在本地范围内定义。 Lang_load迭代本地定义的变量并根据变量名称构建消息映射,以便它可以按名称查找消息。例如,在加载上一个代码段后,就好像执行了以下语句:

$g_lang_strings['en']['new_bug'] = 'New Issue';
$g_lang_strings['en']['bugnote_added'] = 'Note Added';

当 UI 需要访问“硬编码”字符串时,它会使用如下调用lang_get('new_bug')

  1. 在当前用户的设置中查找首选语言
  2. 确保通过调用加载语言映射lang_load()
  3. 从相应的语言映射中返回值

有趣的是,所有的机器都是懒加载的。在您需要访问其中一种之前,您无需为他们定义了大约 50 种语言这一事实​​付费。总的来说,这可能是我多年来研究过的最令人印象深刻的 PHP 应用程序之一。

于 2009-11-11T19:51:20.063 回答