- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发和国际化单页应用程序,其中包含两种本地化文本:
我遇到问题的是类型 2。假设我的应用程序正式支持英语、法语和德语,我从数据库中获取一个对象,例如:
{
description: {
'en': "It's an awesome product.",
'en_UK': "This product is ace.",
'fr': "C'est un excellent produit."
// German's missing
}
}
现在的挑战是根据用户的区域设置以及该特定对象中可用的区域设置,动态选择应选择哪种区域设置进行显示。
我假设大多数 i18n JavaScript 库都有自己的内置“区域设置解析”逻辑,但我还没有找到一个公开此逻辑供客户端使用的库。
有人知道解决这个问题的 JS 库,或者解决这个问题的好方法吗?(如果它与 AngularJs 兼容,那就更好了)。(如果它与 AngularJs 兼容,那就更好了)。 p>
提前致谢!
最佳答案
Disclaimer: I'm a co-author of L20n and one of the developers of l10n.js used in Firefox OS.
通常用来描述这种逻辑的术语是“语言协商”。
大多数本地化库都应该包含某种语言协商算法。它可以像尝试将 navigator.language
的值与可用语言列表相匹配一样简单。更复杂的方法将同时查看语言标记(en-US
中的 en
)和区域标记(en- 中的
)尝试找到最佳匹配。US
)。 US
有一个proposal to expose a language negotiation method在 ECMAScript 的 Intl
对象上,但目前还无法将其内部逻辑用于此目的。
获取用户首选的语言列表并不像应有的那么容易。大多数浏览器中都有 navigator.language
(这是用户在 Firefox 和 language of the browser UI in Chrome 中的首选语言),Internet Explorer 中有 navigator.userLanguage
以及新的 navigator.languages
这是用户首选语言的有序列表。
服务器端的替代方案是使用 HTTP 请求的 Accept-Language
header ,这是目前了解用户首选项的最可靠方法。
获得用户首选语言列表后,您就可以执行语言协商。
以下是执行语言协商的库的一些示例:
Intl.prioritizeLocales
的 ECMA-402 Intl
对象。对于您的特定用例,您可以选择执行以下两项操作之一:
使用navigator.language || 在客户端执行语言协商navigator.userLanguage
并向数据库发送请求,指定您感兴趣的语言,或者
使用用户的 Accept-Language
header 发送请求,并在服务器端执行语言协商,然后查询数据库以获取正确的翻译。
这两种解决方案的优点是,当最终只使用一个翻译时,不会将整套翻译发送给客户端。
对于解决方案 #1,鉴于您使用的是 Angular,我建议使用 L20n 1.0.x它通过 ng-l20n module 与 Angular 集成。您应该能够使用supportedLocales
property获取协商的语言列表并使用该列表的第一个元素来查询数据库。
对于解决方案 #2,这完全取决于您的服务器端设置,但如果您使用的是 Node.js,则可以尝试使用以下模块之一:
关于javascript - 国际化 : Access locale resolution logic in JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28483144/
Closed. This question is opinion-based。它当前不接受答案。 想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。 上个月关闭。
我正在 VHDL 中实现正交解码器,并提出了两种解决方案。 在方法 1 中,所有逻辑都放在一个对时钟和复位敏感的进程中。 在 Spartan-3A 上,这使用四个切片、七个 FF 和四个输入 LUT。
我现在在我的项目中使用 Logic-Apps。我认为这很好而且很容易!但是,在逻辑编码过程中很难调试。因为我无法在代码的中间点确认变量或状态。通常,开发人员可以在 Visual Studio 上执行程
我试图让一个方法仅在 unicode 字符的 char 值是数字、大写字母或小写字母时才采取操作。 if ((48=57)||(65=90)||(97=122) // only if numeral
所以我得到了我编写的代码示例。我的目标是打印存储在 ptr char 变量中的句子中的数字。所以代码的第一部分完成了这项工作。 #include #include void preg(char *
我有很多 JavaScript 遗留代码,我想重写所有松散的等式以使用严格的等式,即。 == 与 ===。但我常常不知道比较变量存储的是什么值。 在不知道这些值是什么的情况下,有没有办法重写这样的东西
我在尝试附加包 tidyselect 和尝试调用 tidyselect::any_function 时遇到此错误。 错误发生在 Rstudio 或类似的命令行中,在 RStudio 中它会在我输入时立
有什么方法可以在调用子逻辑应用时动态更新工作流: 正常工作流程配置如下: 我想要实现的目标如下,使用属性、变量任何更新运行时的工作流程,我尝试使用如下: 当我尝试按上述方式保存时,结果为错误:保存失败
有什么方法可以在调用子逻辑应用时动态更新工作流: 正常工作流程配置如下: 我想要实现的目标如下,使用属性、变量任何更新运行时的工作流程,我尝试使用如下: 当我尝试按上述方式保存时,结果为错误:保存失败
例如,考虑逻辑“用户只能编辑或删除该用户发表的评论”。 My Controller Actions会重复检查当前登录用户是否可以影响评论的逻辑。示例 [Authorize] public Action
在基于规则的专家系统中,知识库包含大量“if (template) then (action)”形式的规则。推理引擎选择与输入事实相匹配的规则。即那些条件部分与输入数据相匹配的规则被列入候选名单,并选
谁能解释一下这个分离逻辑的例子? 第一行和第二行有什么区别? 最佳答案 第一行说堆只包含一个小堆,因此存储中的引用 x 指向它,并且它包含值 4,4。 在 A 中为假,因为它忘记了 y 指向的小堆(它
我尝试了几天编写 NLTK 语法来将简单的法语句子转换为逻辑公式。我的问题可能与英语句子相似。我的目标是这个语法接受多个订单(家庭自动化)并将它们转换为逻辑公式。一些订单示例: 开灯: exists
我正在大学/学院学习自然演绎,作为我正式规范和验证计算机科学类(class)的一部分。 我觉得这很有趣,但是当我找到实际用途时,我会学得更好。 谁能向我解释除了用于正式验证代码位之外是否以及如何使用自
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想改善这个问题吗?更新问题,以便将其作为on-topic
物理量子位和逻辑量子位有什么区别? 我希望有人能帮助我解决这个问题,我无法弄清楚到底有什么区别。 最好的,迪尔玛 最佳答案 逻辑量子位是可以用于编程的,它保存了 |0> 和 |1> 状态的叠加。它可以
我正在尝试学习如何使用 C++ 修改内存位置,并且在使用 MineSweeper 时,我注意到当内存中的时钟值为 1101004800 时,游戏进入了 20 秒。数字 1101529088 对应于游戏
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 11 年前。 Improve thi
首先介绍一些术语(取自here,第14页): 正程序是有错误的程序。 否定程序是没有错误的程序。 因此,程序有四种类型: 积极计划,分析为积极->真正积极(TP)。 积极计划,分析为否定->假否定(F
任何人都可以推荐可用于评估逻辑表达式的软件(最好是mac)或基于网络的工具吗? 例如,我希望能够快速测试两个表达式是否如下: $a = 'foo'; $b = 'bar'; $c = 'foo'; (
我是一名优秀的程序员,十分优秀!