- 手风琴
- 提示
- 警告对话框
- 宽高比
- 头像
- 徽章
- 面包屑导航
- 按钮
- 按钮组
- 日历 Calendar
- 卡片
- Carousel
- 图表 Chart
- 复选框
- 折叠面板
- 组合框
- 命令
- 上下文菜单
- 数据表格 Data Table
- 日期选择器 Date Picker
- 对话框 Dialog
- 方向
- 抽屉
- 下拉菜单
- Empty
- 字段
- 悬停卡片
- 输入
- 输入组
- 输入 OTP
- 项目
- Kbd
- 标签
- 菜单栏
- 原生选择框
- 导航菜单 Navigation Menu
- 分页
- 弹出框
- 进度 Progress
- 单选框组
- 可调整大小
- 滚动区域 Scroll Area
- 选择框
- 分隔符 Separator
- 侧边栏 Sheet
- 侧边栏 Sidebar
- 骨架屏
- 滑块
- Sonner
- 加载指示器 Spinner
- 开关
- 表格
- 标签页 Tabs
- 文本域
- 吐司
- 切换按钮 Toggle
- 切换组
- 提示 Tooltip
- 排版
shadcn/ui 组件对从右到左 (RTL) 布局提供一流支持。文本对齐、定位和方向样式会自动适应阿拉伯语、希伯来语和波斯语等语言。
安装组件时,CLI 会自动将物理定位类转换为逻辑等价类,使您的组件能够在 LTR 和 RTL 两种上下文中无缝工作。
快速开始
选择您的框架,开始使用 RTL 支持。
工作原理
当您在 components.json 中设置 rtl: true 添加组件时,shadcn CLI 会自动转换类与属性,使其支持 RTL:
- 物理定位类如
left-*与right-*会转换为逻辑等价的start-*与end-*。 - 方向相关的属性将更新为使用逻辑值。
- 文本对齐和间距类相应调整。
- 支持的图标会自动通过
rtl:rotate-180翻转。
试用
点击下面的链接,打开一个包含 RTL 支持的 Next.js v0 项目。
支持的样式
通过 CLI 自动进行的 RTL 转换仅适用于使用 shadcn create 创建、使用新样式(比如 base-nova、radix-nova 等)的项目。
其他样式请参阅 迁移指南。
字体建议
为了获得最佳 RTL 体验,我们推荐使用对目标语言有良好支持的字体。Noto 是一个极佳的字体家族,且与 Inter 和 Geist 搭配良好。
有关如何安装和配置 RTL 字体的详情,请参阅您框架下的 RTL 指南,见 快速开始。
动画
CLI 同样处理动画类,自动将物理方向的动画转换为逻辑等价。例如,slide-in-from-right 会变为 slide-in-from-end。
这确保了下拉菜单、弹出框和工具提示等动画能根据文档的文本方向向正确方向播放。
关于 tw-animate-css 的说明:
tw-animate-css 库存在一个已知问题,逻辑滑动工具类无法正常工作。当前请确保为 portal 元素传入 dir 属性。
<Popover>
<PopoverTrigger>Open</PopoverTrigger>
<PopoverContent dir="rtl">
<div>Content</div>
</PopoverContent>
</Popover><Tooltip>
<TooltipTrigger>Open</TooltipTrigger>
<TooltipContent dir="rtl">
<div>Content</div>
</TooltipContent>
</Tooltip>迁移现有组件
如果您在启用 RTL 之前已经安装了组件,可以通过 CLI 进行迁移,步骤如下:
运行迁移命令
pnpm dlx shadcn@latest migrate rtl [path]
[path] 支持路径或通配符模式。如果不提供路径,则会迁移 ui 目录下所有文件。
手动迁移(可选)
以下组件不支持 CLI 自动迁移。请参考对应组件的 RTL 支持部分手动迁移。
迁移图标
部分图标如 ArrowRightIcon 或 ChevronLeftIcon 可能需要添加 rtl:rotate-180 类以正确翻转。请为图标组件添加该类。
<ArrowRightIcon className="rtl:rotate-180" />添加 Direction 组件
将方向组件添加到您的项目。
pnpm dlx shadcn@latest add direction
添加 DirectionProvider
请根据您框架的文档,了解如何将 DirectionProvider 组件添加到项目中。
详情请参阅 快速开始 部分关于添加 DirectionProvider 组件的说明。