【问题标题】:String.toLocaleUpperCase(): Set locale on Node.jsString.toLocaleUpperCase():在 Node.js 上设置语言环境
【发布时间】:2023-04-04 04:40:02
【问题描述】:

JavaScript 字符串toLocaleUpperCase() 方法应该考虑不同语言环境的大小写映射,例如土耳其语(i 不是映射到无点 I,而是映射到土耳其语中的点 İ)。

但是,似乎仅从操作系统捕获了区域设置:我看不到设置区域设置的方法。因此,如果我使用的是 en-US 操作系统并想在“tr”中 toLocaleUpperCase() 一个土耳其语字符串,它将返回 en-US 版本(无点 I,而不是点 İ)。

假设我使用的是用 INTL (https://github.com/nodejs/node/wiki/Intl) 编译的 Node.js,我如何将语言环境定义为 toLocaleUpperCase()

【问题讨论】:

  • 请注意,每个进程可以有不同的语言环境,例如LOCALE=tr_TR.UTF-8。查看Intl 的文档,不清楚它是否是一个可以实例化并用作字符串操作上下文的对象……但这可能是您想要研究的方向。
  • 谢谢@david,我会检查的。但是,我希望能够根据客户请求切换语言环境。通过为每个进程设置一个语言环境,它将永久使用该语言环境运行。对于一个适当国际化的软件,有必要根据不同的用户要求使用toLocaleUpperCase()。我会看看这是否可以在运行时动态更改。

标签: javascript node.js internationalization ecmascript-intl


【解决方案1】:

目前这还不是一个完整的答案。但是 ECMA-402 现在指定(从规范的第 2 版开始)String.prototype.toLocaleUpperCase 的行为。 ECMA-402 将函数更改为采用 locale 参数(undefined、字符串或类似语言环境的数组)——类似于 Number.prototype.toLocaleString 和 ECMA-262 中的各种其他语言环境敏感函数,当由ECMA-402 -- 并且行为与该语言环境一致。一旦 Node 实现了 (it doesn't right now),你就可以简单地改变

var str = "bira";
str.toLocaleUpperCase(); // "BIRA"

var str = "bira";
str.toLocaleUpperCase("tr-TR"); // BİRA

继续前进。

(免责声明:我根本不懂土耳其语,我只是从土耳其语单词列表中挑选了一个包含“i”的单词,并且我假设区域设置敏感大写的工作方式与我一样出于上面示例的目的,期望它确实如此。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-14
    • 2010-09-09
    • 2011-09-20
    • 1970-01-01
    • 2011-01-24
    • 2021-06-27
    • 2012-06-26
    • 1970-01-01
    相关资源
    最近更新 更多