当前位置: 首页 > news >正文

国际化(货币单位、时间、数字)

国际化相关参数

  • region 国家
    • “ID” 印尼
  • timezone 时区 “Asia/Shanghai”
    • 是为解决地球自转导致的不同地区时间差异而设定的标准化时间体系,核心是让同一时刻不同经度的地区,根据当地日出日落规律使用 “相对统一” 的时间。
    • 时区的关键基准:UTC(协调世界时)
      • 时区表示为 “UTC±X”:如东 8 区 = UTC+8,西 5 区 = UTC-5
  • langCode 语言代码 (language code,更准确地说是 locale 标识符)用于指定本地化规则
    • 例如: “de-DE”
      • “de” 是 语言代码,代表 “德语”(German);
      • “DE” 是 地区代码,代表 “德国”(Germany);
      • 组合起来 “de-DE” 表示 “德国地区使用的德语” 对应的本地化规则。
  • currencyName 货币单位名称 还会有一个货币代码
  • areaCode ‘ID#62’ 国家代码+国际电话区号 组成,#无实际意义,仅用于分割

货币单位相关问题

  • 公共hooks函数里应该有返回当前的currencyName
    • 对所有的货币数字都要使用函数进行格式化处理
    • 例如
      	const number = 123456.789;// 要求货币格式console.log(new Intl.NumberFormat("de-DE", { style: "currency", currency: "EUR" }).format(number,),);// 123.456,79 €
      

时间相关问题

  • 处理时间时,使用第三方库moment/dayjs 都要添加 date.tz(timezone)处理
  • 时间组件使用时,要传入timezone或utc偏移时间
  • 显示时间时要处理成对应国家的时间
  1. 时间戳是没有时区的,需要根据用户的时区来展示时间.
    • 一般有一个format函数对当前时区时间,通过当前国家currentLocaleConfig.formats配置进行格式化
  2. 不同时区同一时间获得的本地时间转到 utc0 是不同的
  3. moment 修改同一个时间对象的时区,会改变时间对象的时间,所以需要 clone 一个新的对象来操作
  4. 时间改为默认开始和结束时间,需要提前确定是根据用户时区来修改还是统一使用utc 0标准时区
    const [newStartTime, newEndTime] = (value as number[]) || [];const startTimeMoment = moment(newStartTime * 1000).startOf('day').unix();const endTimeMoment = moment(newEndTime * 1000).endOf('day').unix();console.log('handleDateChange: ',// 比如平台在utc-7 tiemzone时区的 默认组件上午8点value,// 不加时区处理,就是变成本地时区 utc+8 代码执行本地时区的00:00:00-23:59:59[startTimeMoment, endTimeMoment],// 成功处理// utc-7 时区的 00:00:00-23:59:59moment(newStartTime * 1000).tz(timezone).startOf('day').unix(),moment(newEndTime * 1000).tz(timezone).endOf('day').unix(),);

数字相关问题

  • 千分位符号 小数点符号不一样
    • 在数字格式化中,两个符号的作用完全不同,需先区分:
      • 千分位分隔符:用于分隔整数部分的 “每三位数字”,方便阅读大数值(如 1000 → 1.000);
      • 小数点分隔符:用于分隔整数部分和小数部分(如 1000.5 → 1.000,5)。
    • 例如 (德国(de-DE)的数字格式:“.” 千分位,“,” 小数点; 印尼(id-ID)的数字格式:同样 “.” 千分位,“,” 小数点)
      • 千位分隔符(德国用 . 作为千位分隔符:1.000 表示 1000);
      • 小数点符号(德国用 , 作为小数点:100,50 表示 100.5)。
	/*** 格式化数字,根据当前语言环境,返回格式化后的字符串* 例子:ID 2222-> 2.222* @param number 数字* @param formatOptions 格式化选项* @returns 格式化后的字符串*/const formatNumberWithSeparator = (number: number | string,formatOptions: any = {},) => {if (number === undefined || number === null) {return number;}// 在mdn 自行搜索Intl.NumberFormat api// Intl.NumberFormat 对象能使数字在特定的语言环境下格式化。//langCode 为语言代码const numberFormat = new Intl.NumberFormat(langCode, {...formatOptions,});return numberFormat.format(Number(number));};/*** 解析格式化整数字符串,移除千分位分隔符,返回原始数字* 例子:ID 2.222-> 2222* @param price 格式化后的数字字符串* @returns 原始数字*/const formatNumberWithParser = (price: string) => {if (price === undefined || price === null) {return '';}// 把所有特殊的符号全部干掉,也就只能处理有千分位的整数字符串,小数自行写函数处理const parsedValue = parseInt(price.toString().replace(/[^\d]/g, ''), 10);return isNaN(parsedValue) ? '' : parsedValue;};
http://www.dtcms.com/a/462452.html

相关文章:

  • next项目如何实现不同页面使用不同的布局结构,比如login不使用全局的layout
  • dnf游戏币交易网站建设网站app简单做
  • 服务器操作手册(四)nacos搭建+redis搭建+nexus搭建
  • LoadRunner2022 社区版下载及安装教程 + 中文版教程,内附安装包
  • CC防护的实时监控与响应机制
  • 长沙网站柯林建站程序
  • 唐山网站搭建wordpress 分页按钮 显示文章数
  • html怎么做网站地图卓越职业院校建设专题网站
  • Debezium日常分享系列之:使用 Debezium 添加新表:最佳实践和陷阱
  • flash个人网站源码西安是哪个省属于哪个市
  • 东莞h5网站开发网站内部链接是怎么做的
  • 做网站每年包多少流量网站开发专业简历
  • 台州市临海建设局网站四川集团网站建设
  • 第十八篇:变量作用域(Local, Enclosing, Global, Built-in)与global、nonlocal关键字
  • 寻梦数据空间 | 内核篇:新一代数据空间的四大核心能力解析
  • 企业网站定制开发流程wordpress淘宝客 瀑布流
  • 一款简单易用的机器人流程自动化桌面软件
  • 视频网站开发者工具长春网页设计培训
  • 网站建设优化seowordpress设置专题页
  • LRU缓存科普与实现(Kotlin 与 Swift)
  • LRU缓存——双向链表+哈希表
  • 新生培训之 前缀和与差分 ----差分篇
  • 班级网站主页怎么做wordpress上传插件卡死
  • Microsoft Agent Framework深度解析:重新定义企业级AI智能体开发的游戏规则
  • 在 K8s 上可靠运行 PD 分离推理:RBG 的设计与实现
  • 自己的网站服务器网站平台建设缴纳什么税
  • 我的C++学习初体验与心得
  • 网站建设框架模板东营有做网站的公司
  • 学校网站建设项目需求报告小程序代理加盟条仿
  • Linux网络编程(上)