Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Web applications 创建全局应用程序的痛苦_Web Applications_Internationalization_Global_Localization_Globalization - Fatal编程技术网

Web applications 创建全局应用程序的痛苦

Web applications 创建全局应用程序的痛苦,web-applications,internationalization,global,localization,globalization,Web Applications,Internationalization,Global,Localization,Globalization,我需要创建一个全局应用程序。这意味着它在世界任何地方、任何国家(或大多数国家)都可以正常工作。这是一个PHP网站,将在某些时候处理金钱和时间问题 我希望我能为国家、相关时区、货币格式、符号和代码,这类东西知道一个好的资源 如果有人对这类数据有什么建议,以及我如何以支持的方式使用它们,我将不胜感激:) 提前谢谢 请看一看如何处理国际化。他们使用的方法很好 其他信息: 我已经多年没有使用它了,但是快速浏览一下源代码,就会发现这部分代码并没有明显的变化。他们使用许多产品使用的通用消息目录和获取消息的方

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

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

如果有人对这类数据有什么建议,以及我如何以支持的方式使用它们,我将不胜感激:)

提前谢谢

请看一看如何处理国际化。他们使用的方法很好

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

$s_new_bug = 'New Issue';
$s_bugnote_added = 'Note Added';
它包含大约1600个声明。有趣的魔法发生在
lang\u load
内部。加载语言时,将包含目录文件,以便在本地范围中定义它定义的所有变量
Lang_load
迭代本地定义的变量,并基于变量名构建消息映射,以便它可以按名称查找消息。例如,加载上一个代码段后,将好像执行了以下语句:

$g_lang_strings['en']['new_bug'] = 'New Issue';
$g_lang_strings['en']['bugnote_added'] = 'Note Added';
当用户界面需要访问一个“硬编码”字符串时,它会使用一个调用,如
lang\u-get('new\u-bug')
,该调用将:

  • 在当前用户的设置中查找首选语言
  • 通过调用
    lang\u load()
  • 从相应的语言映射返回值
  • 有趣的是,所有的机器都是缓慢加载的。在您需要访问其中一种语言之前,您不必为它们定义了50种左右的语言而付费。总的来说,这可能是我多年来深入研究的最具影响力的PHP应用程序之一。

    看看intl()

    它是围绕ICU(Unicode的国际组件)的包装,包含您需要的大部分内容。

    ,Zend框架的一部分,帮助您解决与货币、时区、翻译等相关的问题


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

    我开发了一款全球化应用程序,我发现其中最棘手的元素是时区和如何存储日期时间。有时,日期需要存储在本地时间(如世界各地的事件时间),有时,日期需要存储在公共时区(例如,将创建的日期存储为UTC)中,并在需要时转换为用户本地时间。我建议对db列/变量使用命名约定,以明确它是哪一个


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

    你能补充进一步的澄清吗?我很好奇,但是我现在没有时间检查代码。对不起,有更好的方法来处理多语言应用程序-gettext。我决不会像你描述的那样。Gettext是一个事实上的标准,您不必自己构建它。JonoW,为什么不将所有日期/时间存储为UTC,并动态转换它们?这对我来说似乎更可靠,因为您知道日期/时间,转换函数将相应地工作。如果你只储存时间而不储存日期,我就知道会遇到麻烦。是的,你当然可以,但有些日期你可能不想转换。例如,如果伦敦的用户说伦敦的活动在晚上7点开始,您可能不希望德国的用户将其视为晚上8点(取决于上下文),因此需要某种方式来记录这一点-在我们的案例中,我们选择命名约定。如果该事件是一个全球性事件(例如,通过web广播的演讲),则将其存储在UTC中是有意义的。