角度应用程序和国际化和本地化

时间:2015-02-17 17:45:01

标签: javascript angularjs localization internationalization asp.net-web-api2

我们有一个现有的silverlight应用程序,它可以在浏览器+硬件上运行。

我们希望使用angular js和html5重写此应用程序。

新系统的关键要求之一是支持国际化和本地化。目标国家目前是美国,巴西,意大利。

对这个领域很陌生并且有很多基本问题。

  1. 是否需要重新设计现有数据库以支持相同的数据?我的意思是识别需要具有特定于语言环境的数据的列(product_name / customer_name等),然后存储每个语言环境的数据,并修改sprocs和webapi以接受语言参数,然后根据该参数获取内容。 ? 我相信我们需要为这些列使用nvarchar。

  2. db中的货币和日期时间列会发生什么?说数量列那么数据库中该列的数据类型应该是什么?如果当前区域设置是葡萄牙语,则将以葡萄牙语编号存储数量。

  3. 存储和检索货币列的最佳做法是什么 基于区域设置。

  4. 存储和检索日期列的最佳做法是什么 基于区域设置。

  5. 如何处理字符串检查,webapi方法中的数字检查?

  6. 如何在javascript中进行比较和检查字符串,数字,日期时间

  7. 请分享一些可能有用的好指示链接。

    所以简而言之,从javascript到.net webapi到数据库(sql)我们应该如何处理依赖于语言环境的逻辑和字段

    感谢。

1 个答案:

答案 0 :(得分:1)

很多问题,让我们看看我是否可以回答这些问题。

  1. 如果您的现有应用程序已正确国际化,我认为无需修改数据库。只需确保它能够处理MS SQL中的国际字符{NCHARNVARCHARNTEXT,其他字符编码有效。
    至于数据库设计,只要你可以保持与语言环境无关的东西是很好的。例如,最好将密钥存储在数据库中并在运行时解析它们。但是,如果您的数据是动态的(即您的产品名称及其描述经常更改),唯一的方法是使用转换表并使用有效的区域设置查看数据。它在关系世界(即连接)中相当复杂,但它可以完成。
  2. 2,3。所有数字列都应保持与语言环境无关,并在UI端进行格式化。更有问题的是价格和销售订单 - 您需要一个额外的列来存储货币代码(即12.34 | USD)。在UI端,您需要将代码传递给Angular货币过滤器。这里唯一的问题是,Angular不支持简单的区域设置上下文切换,因此您需要使用像Angular Dynamic Locale这样的hacky库来为您加载格式。

    1. 类似。保持与语言环境无关。数据库内置类型应该自动为您处理,并为您提供良好的DateTime / DateTimeOffset(在.Net世界中)。唯一的问题是时区 - 使用DATETIMEOFFSET MS SQL类型可能是有意义的,因为其他人不存储时区。
      有一种在数据库中存储日期和时间的替代方法 - 您可以决定将自1970年1月1日以来的数毫秒存储为BIGINT类型。特别是如果你要直接将它读到JS,你将能够在一个有效的时区内轻松地重新创建JS Date对象(如果你需要这个用于计算或其他东西)(它也可以反过来工作)。您要格式化日期的所有工作就是使用此数字(不是日期,即AFAIR)和Angular的日期过滤器,将UTC作为参数。

    2. 我不认为我明白你的确切要求。我想问题是关于用户输入的验证,而不是API。好吧,要注意使用正则表达式,因为JavaScript不能很好地处理Unicode(至少在这方面)。您需要提出更准确的问题。

    3. 假设您有数字和日期对象(即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#中也是如此。)