我们有一个现有的silverlight应用程序,它可以在浏览器+硬件上运行。
我们希望使用angular js和html5重写此应用程序。
新系统的关键要求之一是支持国际化和本地化。目标国家目前是美国,巴西,意大利。
对这个领域很陌生并且有很多基本问题。
是否需要重新设计现有数据库以支持相同的数据?我的意思是识别需要具有特定于语言环境的数据的列(product_name / customer_name等),然后存储每个语言环境的数据,并修改sprocs和webapi以接受语言参数,然后根据该参数获取内容。 ? 我相信我们需要为这些列使用nvarchar。
db中的货币和日期时间列会发生什么?说数量列那么数据库中该列的数据类型应该是什么?如果当前区域设置是葡萄牙语,则将以葡萄牙语编号存储数量。
存储和检索货币列的最佳做法是什么 基于区域设置。
存储和检索日期列的最佳做法是什么 基于区域设置。
如何处理字符串检查,webapi方法中的数字检查?
如何在javascript中进行比较和检查字符串,数字,日期时间
请分享一些可能有用的好指示链接。
所以简而言之,从javascript到.net webapi到数据库(sql)我们应该如何处理依赖于语言环境的逻辑和字段
感谢。
答案 0 :(得分:1)
很多问题,让我们看看我是否可以回答这些问题。
NCHAR
,NVARCHAR
,NTEXT
,其他字符编码有效。2,3。所有数字列都应保持与语言环境无关,并在UI端进行格式化。更有问题的是价格和销售订单 - 您需要一个额外的列来存储货币代码(即12.34 | USD)。在UI端,您需要将代码传递给Angular货币过滤器。这里唯一的问题是,Angular不支持简单的区域设置上下文切换,因此您需要使用像Angular Dynamic Locale这样的hacky库来为您加载格式。
类似。保持与语言环境无关。数据库内置类型应该自动为您处理,并为您提供良好的DateTime
/ DateTimeOffset
(在.Net世界中)。唯一的问题是时区 - 使用DATETIMEOFFSET
MS SQL类型可能是有意义的,因为其他人不存储时区。
有一种在数据库中存储日期和时间的替代方法 - 您可以决定将自1970年1月1日以来的数毫秒存储为BIGINT
类型。特别是如果你要直接将它读到JS,你将能够在一个有效的时区内轻松地重新创建JS Date对象(如果你需要这个用于计算或其他东西)(它也可以反过来工作)。您要格式化日期的所有工作就是使用此数字(不是日期,即AFAIR)和Angular的日期过滤器,将UTC作为参数。
我不认为我明白你的确切要求。我想问题是关于用户输入的验证,而不是API。好吧,要注意使用正则表达式,因为JavaScript不能很好地处理Unicode(至少在这方面)。您需要提出更准确的问题。
假设您有数字和日期对象(即typeof o == 'number'
),它很简单(如obj1 === obj2
)。
就字符串而言......如果你想要准确的话,str1 === str2
会给你有效的答案。如果您想对它们进行排序,现代网络浏览器(Chrome 14 +,Firefox 29 +,IE11 +)会实施EcmaScript 402 Internationalization API,因此您可以执行str1.localeCompare(str2, locale)
,see this article之类的操作。
当你想要比较两个字符串不区分大小写和不区分对于相等不敏感时(如在排序的情况下反对排序),会出现真正的问题。基本上,没有办法(即使在#34;大型和#34;编程语言如Java或C#中也是如此。)