繁体   English   中英

Angular应用与国际化和本地化

[英]Angular app and internationalization and localization

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

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

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

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

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

  2. db中的货币和日期时间列将如何处理? 说有数量列,那么此列在db中的数据类型应该是什么? 如果当前语言环境是葡萄牙语,则数量将以葡萄牙语编号存储。

  3. 根据语言环境存储和检索货币列的最佳做法是什么?

  4. 根据语言环境存储和检索日期列的最佳做法是什么?

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

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

请分享指向一些可能会有所帮助的良好指针的链接。

因此,简而言之,从javascript到.net webapi到数据库(sql),我们应该如何照顾与语言环境相关的逻辑和字段

谢谢。

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

  1. 如果您现有的应用程序已适当地国际化,那么我认为不需要修改数据库。 只要确保它能够处理国际字符即可(MS SQL中的NCHARNVARCHARNTEXT ,其他有效的字符编码)。
    对于数据库设计,最好使内容与语言环境无关。 例如,最好将密钥存储在数据库中并在运行时解析它们。 但是,如果您的数据是动态的(即,您的产品名称及其描述经常更改),那么唯一的方法是拥有转换表并使用有效的语言环境查找数据。 在关系世界(即联接)中,它相当复杂,但是可以做到。

2,3。 所有数字列均应保持与语言环境无关,并在用户界面侧进行格式化。 更麻烦的是价格和销售订单-您将需要一个额外的列来存储货币代码(即12.34 | USD)。 在用户界面方面,您需要将代码传递给Angular货币过滤器。 这里唯一的问题是,Angular不支持轻松的语言环境上下文切换,因此您需要使用像Angular Dynamic Locale这样的hacky库来为您加载格式。

  1. 类似。 使其与语言环境无关。 DB内置类型应自动为您处理,并为您提供不错的DateTime / DateTimeOffset (在.Net环境中)。 唯一的陷阱是时区-使用DATETIMEOFFSET MS SQL类型可能很有意义,因为其他人不存储时区。
    还有另一种将日期和时间存储在数据库中的方法-您可以决定将其以自UTC 1970年1月1日以来的毫秒数存储-作为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#等“大型”编程语言中也是如此)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM