ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

react-day-picker 的 Hijri 阿拉伯语区域设置:arSA 本地化变量源码解析与实战

react-day-picker 的 Hijri 阿拉伯语区域设置:arSA 本地化变量源码解析与实战 UI组件前端【免费下载链接】react-day-pickerDayPicker is a customizable date picker component for React. Add date pickers, calendars, and date inputs to your web applications.项目地址https://gitcode.com/gh_mirrors/re/react-day-picker点击查看免费下载导读arSA是 react-day-picker 项目中为**阿拉伯语沙特阿拉伯**定制的区域设置locale变量它把 date-fns 的阿拉伯语环境与 DayPicker 特有的交互标签如上一个月选择年份周几等翻译合并为一份完整的DayPickerLocale对象。本文以 arSA 的 API 文档 为骨架结合 ar-SA.ts 源码、DateLib 类型定义 以及 Hijri 日历文档 与 HijriEn 示例为你讲清它的定义位置、字段结构、动态标签逻辑以及如何在 Umm al-Qura 回历日历中实际使用它含阿拉伯语 RTL 界面与拉丁数字两种场景。arSA 是什么一份扩展自 date-fns的 DayPicker 区域设置官方定义API 文档对arSA的正式定义为constarSA:DayPickerLocale并注明其定义位置为 packages/react-day-picker/src/locale/ar-SA.ts:8说明它是一个编译期常量类型为DayPickerLocale——即Arabic (Saudi Arabia) locale extended with DayPicker-specific translations阿拉伯语沙特阿拉伯区域设置扩展了 DayPicker 专属翻译。在 Hijri 包中的再导出在回历专属包daypicker/hijri中arSA通过 packages/hijri/src/locale/ar-SA.ts 一行代码再导出export { arSA } from daypicker/react/locale;因此无论是daypicker/react还是daypicker/hijri都可以按需引入这份阿拉伯语区域设置daypicker/hijri的 API 索引文档 apps/website/docs/api/hijri/index.md 中与enUS一并列出的arSA变量正是该再导出的结果。DayPickerLocale 的类型结构DayPickerLocale定义于 DateLib.ts它继承自 date-fns 的DateFnsLocale并追加了labels可选字段export type DayPickerLocaleLabels { /* ... */ }; export interface DayPickerLocale extends DateFnsLocale { labels?: DayPickerLocaleLabels; }这正是arSA源码中...dateFnsArSA展开操作的依据date-fns 提供的arSA负责月份/星期名称、数字格式等基础本地化而 DayPicker 专属的labels负责日历组件的无障碍ARIA标签翻译。源码逐字段拆解arSA 的完整结构arSA的完整实现位于 packages/react-day-picker/src/locale/ar-SA.ts其结构为import { arSA as dateFnsArSA } from date-fns/locale; // ... export const arSA: DayPickerLocale { ...dateFnsArSA, // ① 继承 date-fns 阿拉伯语环境 labels: { // ② DayPicker 专属标签 labelDayButton: (...) { ... }, labelMonthDropdown: اختر الشهر, labelNext: اذهب إلى الشهر التالي, labelPrevious: اذهب إلى الشهر السابق, labelWeekNumber: (weekNumber) الأسبوع ${weekNumber}, labelYearDropdown: اختر السنة, labelGrid: (date, options, dateLib) ..., labelGridcell: (date, modifiers, options, dateLib) { ... }, labelNav: شريط التنقل, labelWeekNumberHeader: رقم الأسبوع, labelWeekday: (date, options, dateLib) ..., }, };逐项说明如下①...dateFnsArSA复用 date-fns 的阿拉伯语环境首行import { arSA as dateFnsArSA } from date-fns/locale引入 date-fns 的阿拉伯语沙特阿拉伯区域数据再通过展开运算符合并进 DayPicker 的 locale 对象使其自动获得月份、星期的本地化名称阿拉伯数字如 ١٢٣٤٥等 date-fns 约定date-fns 各格式化函数所需的 locale 元数据。DayPicker 内部所有日期格式化均通过 DateLib 类 完成而DateLib的构造参数中就有locale字段见 DateLib.ts 第 93 行附近所以合并后的arSA会直接影响format、formatMonthYear等方法的输出。②labelsDayPicker 专属翻译标签字段值类型含义阿拉伯语文本音译labelMonthDropdown字符串月份下拉框的无障碍标签选择月份اختر الشهرlabelYearDropdown字符串年份下拉框的无障碍标签选择年份اختر السنةlabelNext字符串下一个月导航按钮标签前往下个月اذهب إلى الشهر التاليlabelPrevious字符串上一个月导航按钮标签前往上个月اذهب إلى الشهر السابقlabelNav字符串导航区域的无障碍标签导航栏شريط التنقلlabelWeekNumberHeader字符串周数列表头标签周数رقم الأسبوعlabelWeekNumber函数(weekNumber) string周数单元标签第 N 周الأسبوع NlabelWeekday函数(date, options?, dateLib?) string星期表头标签用cccc格式化输出星期全称labelDayButton函数(date, modifiers, options?, dateLib?) string日期按钮的无障碍标签完整日期 今天、选中态前缀labelGridcell函数(date, modifiers?, options?, dateLib?) string日期格标签ARIA gridcell完整日期 今天前缀labelGrid函数(date, options?, dateLib?) string月份网格标签formatMonthYear输出年月注意静态字符串标签月份/年份下拉、导航按钮、导航区、周数表头在组件渲染时原样用作aria-label而labelDayButton、labelGridcell、labelWeekday、labelGrid等为函数标签其行为取决于传入的参数下面详析。动态标签的运行时逻辑labelDayButton与labelGridcell按修饰器拼接语义labelDayButton是日期按钮day button的无障碍标签逻辑如下labelDayButton: (date, modifiers, options?, dateLib?) { const lib dateLib ?? new DateLib(options); // 优先复用外部注入的 DateLib let label lib.format(date, PPPP); // 完整日期如 السبت، ١٥ ربيع الآخر ١٤٤٧ if (modifiers.today) label اليوم، ${label}; // 今天 → 前缀اليوم،今天 if (modifiers.selected) label ${label}، محدد; // 选中 → 后缀محدد已选择 return label; };关键点dateLib ?? new DateLib(options)允许调用方传入已配置好的DateLib实例避免重复构造否则基于options现场构造options即 DateLibOptions可携带locale、weekStartsOn、firstWeekContainsDate、useAdditionalDayOfYearTokens等配置。lib.format(date, PPPP)使用 date-fns 的PPPPtoken 输出完整长格式日期。modifiers.today/modifiers.selected当该日期命中了今天或选中修饰器时标签分别加上اليوم今天前缀与محدد已选择后缀——这样读屏软件用户无需进入格子即可知道今天是哪天、哪天已被选中。labelGridcell与之类似但只处理today前缀不处理selected且modifiers为可选参数。labelGrid与labelWeekday日期格式化复用labelGrid: (date, options?, dateLib?) (dateLib ?? new DateLib(options)).formatMonthYear(date),labelGrid直接调用 DateLib.formatMonthYear 生成年月组合标签作为整个月份网格的aria-label。labelWeekday: (date, options?, dateLib?) (dateLib ?? new DateLib(options)).format(date, cccc),labelWeekday用cccctoken 输出星期全称如 السبت/الأحد…作为星期表头的标签。labelWeekNumber周数模板labelWeekNumber: (weekNumber: number) الأسبوع ${weekNumber},输入阿拉伯数字或拉丁数字的周数输出الأسبوع N第 N 周。该标签在开启showWeekNumber时供周数列使用。在 daypicker/hijri 中实战使用 arSA环境准备arSA通常与回历Hijri / Umm al-Qura日历搭配使用。按 Hijri 日历文档 安装依赖npm install daypicker/react daypicker/hijri从daypicker/hijri引入DayPicker与arSAenUS同样可用import { DayPicker, arSA } from daypicker/hijri;场景一阿拉伯语标签、RTL 布局、阿拉伯-印度数字不显式传locale时daypicker/hijri的DayPicker默认即使用arSA界面呈现阿拉伯语标签、从右到左RTL布局与阿拉伯-印度数字١٢٣。参考 examples/Hijri.tsximport { DayPicker } from daypicker/hijri; import React from react; export function Hijri() { return DayPicker modesingle /; }场景二英文标签、LTR 布局、拉丁数字若想保留回历换算但改用英文标签与拉丁数字可显式传入enUS并设置dirltr与numeralslatn。参考 examples/HijriEn.tsximport { DayPicker, enUS } from daypicker/hijri; import React from react; export function HijriEn() { return ( DayPicker showWeekNumber showOutsideDays locale{enUS} numeralslatn / ); }与之等价地daypicker/hijri文档中的简写为DayPicker locale{enUS} dirltr numeralslatn /;参数说明locale传入arSA或enUS二者均为DayPickerLocale决定标签语言dirltr显式覆盖默认的 RTL 方向适合与英文标签搭配numeralslatn将数字输出为拉丁数字0-9避免阿拉伯-印度数字showWeekNumber开启周数列此时arSA中的labelWeekNumber/labelWeekNumberHeader即被使用showOutsideDays显示相邻月份的补白日期。回历换算范围限制需注意 Hijri 日历文档 中的说明Hijri 构建基于 Umm al-Qura 换算表支持的公历范围约为1924-08-01至2077-11-16超出范围的日期属性会被钳制到该区间内。这也是使用arSA时日期格式化结果存在边界约束的原因。相关资源索引API 定义文档apps/website/docs/api/hijri/variables/arSA.md、apps/website/docs/api/hijri/variables/enUS.md回历包 API 总览apps/website/docs/api/hijri/index.md区域设置类型定义packages/react-day-picker/src/classes/DateLib.ts含DayPickerLocale、DateLibOptions、formatMonthYear源码实现packages/react-day-picker/src/locale/ar-SA.ts、packages/hijri/src/locale/ar-SA.ts使用示例examples/Hijri.tsx、examples/HijriEn.tsx回历指南apps/website/docs/localization/hijri.mdx赞分享UI组件前端【免费下载链接】react-day-pickerDayPicker is a customizable date picker component for React. Add date pickers, calendars, and date inputs to your web applications.项目地址https://gitcode.com/gh_mirrors/re/react-day-picker点击查看免费下载相关推荐10分钟跑通AzerothCore-Wotlk魔兽世界私服Docker Compose部署指南10分钟跑通AzerothCore Wotlk魔兽世界私服Docker Compose部署指南 AzerothCore Wotlk 是开源的《魔兽世界》3.3UI组件前端react-day-picker 波斯语区域设置指南深入理解 daypicker/persian 的 faIR 常量react day picker 波斯语区域设置指南深入理解 daypicker/persian 的 faIR 常量 faIR 是 daypicker/pUI组件前端tldr 速查页中的 cd 命令用法全解与阿拉伯语本地化实战tldr 速查页中的 cd 命令用法全解与阿拉伯语本地化实战 本文以 tldr 仓库中阿拉伯语版 cd 速查页 pages.ar/common/cd.md h文档教程知识库上一篇Next.js-tailwindcss-blog-template安全最佳实践保护你的博客免受攻击下一篇彻底解决字符串兼容难题RAPIDJSON_HAS_STDSTRING宏配置指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表