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 组件的说明。