Internationalization 企业应用程序的日期/时间和国际化--开发指南

Internationalization 企业应用程序的日期/时间和国际化--开发指南,internationalization,Internationalization,我与另一位开发人员一起开始了创建托管的“CRM风格”应用程序的旅程,该应用程序将满足企业级业务的需要。这些企业将远程访问我们的应用程序,因此应用程序的托管性质需要某些功能。例如,要保证专业服务水平,必须做到以下几点: 国际化需要多种语言,并针对不同的时区和地区显示日期/时间 用于批处理任务的事务性功能和回滚功能 确保数据安全和远程调用不受攻击的安全问题 诸如此类,名单上还有很多 由于这些问题以及我作为负责服务器端开发的开发人员的角色,我对我早期所做的选择非常感兴趣。例如,关于时区和语言,是否

我与另一位开发人员一起开始了创建托管的“CRM风格”应用程序的旅程,该应用程序将满足企业级业务的需要。这些企业将远程访问我们的应用程序,因此应用程序的托管性质需要某些功能。例如,要保证专业服务水平,必须做到以下几点:

  • 国际化需要多种语言,并针对不同的时区和地区显示日期/时间
  • 用于批处理任务的事务性功能和回滚功能
  • 确保数据安全和远程调用不受攻击的安全问题
  • 诸如此类,名单上还有很多
由于这些问题以及我作为负责服务器端开发的开发人员的角色,我对我早期所做的选择非常感兴趣。例如,关于时区和语言,是否存在与我选择数据库或数据字段有关的问题?我是否选择在整个应用程序中使用UTC时间戳或日期字段?如果选择,是否有标准格式?另外,关于不同的语言,我是否应该确保数据以UTF-8或unicode的形式存储在数据库中

我真的很想避免制定系统的结构,但后来才发现一个基本决策是错误的,或者不够大、不够宽、不够聪明等等。有人能为我指出关于这些基本“早期”决策的正确方向吗


编辑uuo好的,我很感谢大家的广泛回答,现在我发现我的问题有点太不具体了。我想重点讨论问题中更具体的元素,例如如何选择存储UTC日期/时间的适当格式,或者如何保存文本数据(我是否指定UTF格式?)

如果您的目标是企业CRM,然后,您将需要非常高级别的可定制性和与各种系统的集成。你会在设计上犯错误。您唯一的希望是隔离代码的每一小段,以便以后有机会修复它


简而言之,基本的软件工程原理是你最好的选择。

因为你没有提到你对这个问题的看法,你可能会发现我的答案或其中的一部分相当基本

  • 如果你不需要,不要使用低级语言。我通常会在CRM应用程序的第一个版本中使用python(希望它在下一个版本中足够好),但是这个决定也取决于域社区
  • 尝试自己编写最少的代码,而不是依赖第三方库。人们可能不同意这一点,但我会自己编写代码作为最后的选择。但下一点很重要
  • 选择要使用的库/框架时,请确保支持它的一方将持续使用,库是稳定的,并且软件许可证适合您的需要
  • 其他一般规则适用:关注客户,使用持续集成/测试等,使用良好的软件实践,如日志记录等

  • 任何东西都不会存储为“unicode”,因为这是一个抽象概念。Unicode总是以某种Unicode转换格式(UTF)存储(或者说是UCS,但我从来没有在什么地方见过这种格式)。最常用的UTF是UTF-8,但我建议使用平台的本机/默认值

    您正在讨论的被称为多租户应用程序,在该应用程序中,多个客户(租户)使用相同的代码库,并对数据进行逻辑或物理分离。记住开发的基本规则:灵活性与复杂性有关。系统越灵活,就越复杂

    回复:UTC

    对于存储通话时间和会议时间等信息的CRM应用程序,我肯定会将所有这些信息存储在UTC中,并让用户设置其本地时区。然而,您可能会遇到时区不可知的日期,对于这些日期,我将存储输入的任何日期

    回复:Unicode


    是的,我会对所有用户输入的数据使用Unicode。但是,这不会让您实现本地化。例如,对于一个单一的公司,你有一个用户在香港输入中文文本,阿姆斯特丹的用户在Dutch输入文本,你不会得到自动翻译。日期和数字格式之类的东西可以本地化,但下拉列表中使用的名称之类的原始文本可能是本地化的麻烦事。

    。这是一个很好的说话方式,不用回答我的任何问题。@Matt1776-他确实回答了你的(相当广泛的)问题(+1)。你想避免犯错误吗?你不能在一个不平凡的项目上。您唯一的选择是设计项目,使其在出现问题时(而不是在出现问题时)尽可能易于修复。您打算使用第三方库吗?如果是的话,你考虑的选择空间是什么?我删除了评论——我还不明白为什么人们不需要展示自己就可以反对某些东西——如果这是一个表达想法的论坛,那么应该有一定程度的责任。我只是想激起任何有如此强烈意见的人的反应。谢谢你的支持。我认为这个问题是正确的——否则我就不会问了。谢谢你,托马斯——你是唯一一个明白我只是想要一个直截了当的答案的人,而不是一篇关于你个人对我最终目标的想法和感受的社论。干杯-我会好好利用这个信息use@Matt1776如果你用了一个更具体的标题,你可能会得到其他有用的答案。我同意——有时我不知道我的问题的确切性质,直到有人问我,但这是一个坏习惯,我可以很容易地使用“编辑”按钮