如何修改Angular挪威语(nb)区域设置的货币符号位置?
解决挪威语(nb)货币符号显示在右侧的方案(无需自定义管道)
我完全懂你的痛点:必须用nb locale,但想要nn那种货币符号在右侧的格式,又不想写自定义管道。这里有几个靠谱的方案,都是基于修改Angular内置locale配置来实现的:
方案1:修改并重新注册nb的Locale数据
Angular允许我们通过registerLocaleData覆盖内置的locale配置,不用搞麻烦的猴子补丁,步骤很清晰:
- 先导入
nb的原始locale数据和registerLocaleData工具函数 - 深拷贝原始数据(避免直接修改内置的只读对象)
- 把复制后的数据里的货币格式模式改成
nn的样式(把货币符号移到数字右侧) - 重新注册修改后的
nblocale,覆盖原来的配置
具体代码可以这么写:
import { registerLocaleData } from '@angular/common'; import nbLocale from '@angular/common/locales/nb'; // 深拷贝原始nb locale数据,避免污染内置对象 const customNbLocale = JSON.parse(JSON.stringify(nbLocale)); // 参考nn的货币格式,修改nb的货币pattern // nn默认是"#,##0.00¤"(符号在右侧),nb默认是"¤#,##0.00" customNbLocale.numberFormats.currency.patterns[0].pattern = "#,##0.00¤"; // 如果需要处理无小数的场景,同步修改patterns[1] customNbLocale.numberFormats.currency.patterns[1].pattern = "#,##0¤"; // 注册修改后的locale数据,覆盖内置的nb配置 registerLocaleData(customNbLocale, 'nb');
把这段代码放在根模块(比如app.module.ts)的导入逻辑之后,整个应用里用nb locale的currency管道就会自动把货币符号显示在右侧了。
方案2:依赖注入覆盖Locale服务(进阶)
如果上面的方案不够灵活,你还可以通过依赖注入替换Angular内部的LocaleData服务,适合需要精细控制locale加载的大型应用:
import { LOCALE_DATA } from '@angular/common'; import nbLocale from '@angular/common/locales/nb'; const customNbLocale = JSON.parse(JSON.stringify(nbLocale)); customNbLocale.numberFormats.currency.patterns[0].pattern = "#,##0.00¤"; @NgModule({ providers: [ { provide: LOCALE_DATA, useValue: { ...LOCALE_DATA, 'nb': customNbLocale } } ] }) export class AppModule {}
为什么之前的猴子补丁不行?
Angular内置的locale数据是被冻结(frozen)的只读对象,直接修改会抛出错误,所以必须先复制一份数据,修改后再重新注册,这才是合规的操作方式。
内容的提问来源于stack exchange,提问作者João Dias
相关产品推荐
相关产品推荐

