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

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

我们有一个现有的 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,其他中的有效字符编码)。
    至于数据库设计,最好尽可能保持区域独立。例如,最好将 key 存储在数据库中并在运行时解析它们。但是,如果您的数据是动态的(即您的产品名称及其描述经常变化),则唯一的方法是使用翻译表并使用有效的区域设置查找数据。在关系世界中它相当复杂(即连接),但它是可以做到的。

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

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

  • 我想我不明白你到底在问什么。我想问题是关于用户输入的验证,而不是 API。嗯,要小心使用正则表达式,因为 JavaScript 不能很好地处理 Unicode(至少在这个领域)。您需要提出更精确的问题。

  • 假设您有 Number 和 Date 对象(即 typeof o == 'number'),这很简单(如 obj1 === obj2) .
    就字符串而言...好吧,如果您想准确的话,str1 === str2将为您提供有效的答案。如果你想对它们进行排序,现代网络浏览器(Chrome 14+、Firefox 29+、IE11+)实现 EcmaScript 402 Internationalization API所以你可以做类似 str1.localeCompare(str2, locale), see this article 的事情.
    当您想要比较两个不区分大小写和不区分重音的字符串是否相等时,真正的问题就会出现(与排序相反)。基本上,没有办法(即使在 Java 或 C# 等“大”编程语言中也是如此)。

  • 关于javascript - Angular 应用程序以及国际化和本地化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28567692/

    相关文章:

    javascript - 如何在 Angular 5 中发布 XML 主体?

    javascript - 我的过滤器错误

    c# - 发布网站时出现 Angular 未知提供商错误

    javascript - 可变变量可以从 Angular 服务内的闭包访问

    ios - iOS本地化仅部分起作用

    javascript - 当复选框被选中时,如何使用jquery在传单上显示饼图?

    javascript - 多重选择在 IE 中不起作用

    Django 不为我的项目创建语言环境 po 文件

    javascript - document.querySelector() 可以根据 SRC 文件名(而不是完整的 URL)找到 IMG 元素吗?

    ios - 在不重启应用程序的情况下更改 iOS 中的应用程序语言