Angular应用程序以及国际化和本地化

Angular app and internationalization and localization

本文关键字:本地化 国际化 应用程序 Angular      更新时间:2023-12-11

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

我们想用angular js和html5重写这个应用程序。

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

我是这个领域的新手,有很多基本问题。

  1. 现有的数据库是否需要重新设计以支持相同的功能?我的意思是确定需要具有区域设置特定数据的列(product_name/customer_name等),然后存储每个区域设置的数据,并修改sprocs和webapi以接受语言参数,然后基于此获取内容?我认为我们需要为这样的列使用nvarchar。

  2. 数据库中的货币和日期时间列会发生什么变化?假设有数量列,那么数据库中该列的数据类型应该是什么?如果当前区域设置为葡萄牙语,则数量将存储在葡萄牙语数字中。

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

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

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

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

请分享一些有用的链接。

简而言之,从javascript到.net webapi再到数据库(sql),我们应该如何处理与区域设置相关的逻辑和字段

谢谢。

很多问题,让我们看看我是否能回答。

  1. 如果您现有的应用程序已正确国际化,我认为不需要修改数据库。只需确保它能够处理国际字符(MS SQL中的NCHARNVARCHARNTEXT,其他字符中的有效字符编码)
    至于数据库设计,尽可能地保持区域设置的独立性是很好的。例如,最好将密钥存储在数据库中,并在运行时解析它们。然而,如果您的数据是动态的(即,您的产品名称及其描述经常更改),那么唯一的方法就是使用翻译表并使用有效的区域设置查找数据。在关系世界(即联接)中,这是相当复杂的,但它是可以做到的

2,3.所有的数字列都应保持与区域设置无关,并在UI端进行格式化。更麻烦的是价格和销售订单——您需要一个额外的列来存储货币代码(即12.34|USD)。在UI端,您需要将代码传递给Angular货币过滤器。这里唯一的问题是,Angular不支持简单的区域设置上下文切换,因此您需要使用像Angular Dynamic locale这样的破解库来为您加载格式。

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

  2. 我想我不明白你到底在问什么。我想问题是关于用户输入的验证,而不是API。注意使用正则表达式,因为JavaScript不能很好地处理Unicode(至少在这方面)。你需要问一个更精确的问题。

  3. 假设您有Number和Date对象(即typeof o == 'number'),它很简单(如obj1 === obj2
    就字符串而言。。。如果你想准确的话,str1 === str2会给你一个有效的答案。如果你想对它们进行排序,现代网络浏览器(Chrome 14+、Firefox 29+、IE11+)实现了EcmaScript 402国际化API,这样你就可以做str1.localeCompare(str2, locale)之类的事情,请参阅本文
    当您想要比较两个不区分大小写和不区分重音的字符串以获得相等性时(与排序相反),就会出现真正的问题。基本上,没有办法(即使在Java或C#这样的"大型"编程语言中也是如此)。