Communitygithub.com

jubyuhanna-create/arabic-ready

确保阿拉伯语输出在首次尝试时即正确呈现。涵盖从右到左布局、连字成形、混合阿拉伯语/英语/数字排序、阿拉伯字体与排版、数字、日期、货币以及自然阿拉伯语措辞。

arabic-ready 是什么?

这是一个专门为AI代理设计的技能,旨在确保任何输出格式中的阿拉伯语内容在第一次尝试时就能正确渲染、阅读并保持原生感。它解决了一系列常见的阿拉伯语本地化问题,包括从右到左(RTL)布局声明、连字符成形、混合语言文本中LTR孤岛(如电话号码、URL)的隔离、镜像方向性图标,以及正确使用阿拉伯语字体和排版参数。该技能支持广泛的平台,包括HTML/CSS/Tailwind/React/Next.js/Vue等Web框架、React Native和Flutter移动框架、Word/PowerPoint/PDF文档、matplotlib/Pillow/SVG/canvas图表和图像、电子邮件、短信/WhatsApp/社交媒体帖子、Markdown和纯文本。它通过详细的决策树指导用户选择正确的区域设置、数字系统和语言风格,并提供自动化脚本(如RTL linting工具和文本成形器)来验证输出。该技能还包含一个全面的参考文件系统,涵盖布局、双向文本、排版、文档格式和文案写作,确保AI代理能够为任何输出类型生成高质量的阿拉伯语内容。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/jubyuhanna-create/arabic-ready/tree/HEAD/skills/arabic-ready

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

阿拉伯语就绪输出

目标:在任意输出格式中,首次尝试即让阿拉伯语正确渲染、阅读自然且具有原生感。

1. 在撰写任何内容之前,先决定三件事

决策项默认值何时更改
受众区域ar + 已知地区(如 ar-SA、ar-EG、ar-AE、ar-MA...)用户指定国家/城市/市场
数字UI、价格、电话、代码、图表中使用西方 0-9。面向埃及、沙特阿拉伯、伊拉克、黎凡特、苏丹、也门的正式/编辑文本使用阿拉伯-印度数字 ٠-٩用户要求,或品牌/地区明确使用 ٠-٩。马格里布(MA/DZ/TN)始终使用 0-9
语体现代标准阿拉伯语(فصحى),清晰现代,非古典语体用户要求方言(埃及、海湾、黎凡特...),或渠道为休闲场合(WhatsApp促销、社交媒体帖子):参见 references/writing.md

永远不要在同一个输出中混用数字系统。

2. 核心规则(适用于所有输出类型)

  1. 在根元素声明方向,仅一次。 然后让所有元素继承。 ❌ <html> + 在元素上散布 style="direction:rtl" ✅ <html lang="ar" dir="rtl"> · docx <w:bidi/> + <w:rtl/> · pptx rtl="1" · Flutter Directionality(textDirection: TextDirection.rtl) / locale: Locale('ar')
  2. 使用逻辑方向,永远不要用 left/right。 在阿拉伯语中,“Start”在右侧。 ❌ margin-left、ml-4、text-left、left: 0、EdgeInsets.only(left:) ✅ margin-inline-start、ms-4、text-start、inset-inline-start: 0、EdgeInsetsDirectional.only(start:)
  3. 隔离 LTR 孤岛(电话号码、电子邮件、URL、代码、数字旁边的英文名称、负数)。 ❌ اتصل على +966 50 123 4567. → 渲染为 4567 123 50 966+ ✅ اتصل على <bdi dir="ltr">+966 50 123 4567</bdi>. · 纯文本:包裹在 LRI…PDI(⁦…⁩)中,或在 -5 前放置 LRM ‎
  4. 电话、电子邮件、URL、代码、IBAN、密码的输入框保持 dir="ltr",即使在 RTL 表单内部(使用 text-end 对齐)。
  5. 仅镜像方向性图标。 后退/前进箭头、V形符号、发送、回复、撤销/重做、进度方向需要翻转。播放/暂停、媒体控件、对勾、时钟、搜索、徽标、品牌标识和数字不需要翻转。
  6. 排版: 使用专为阿拉伯语设计的字体(列表见 references/typography.md),正文行高 ≥ 1.6,并在上方和下方为发音符号(tashkeel)留出空间。切勿对阿拉伯语应用 letter-spacing/tracking-*、uppercase、italic 或过紧的 overflow:hidden 高度。
  7. 字形连接:将原始文本传递给支持字形的渲染器,将已连接的文本传递给不支持字形的渲染器。切勿两者都做。 浏览器、Word、LibreOffice、PowerPoint、WeasyPrint、Chromium PDF、matplotlib ≥ 3.11、支持 libraqm 的 Pillow、fpdf2 与 set_text_shaping() 本身就能连接阿拉伯语:传递原始字符串。 reportlab、PyMuPDF insert_text、OpenCV、matplotlib ≤ 3.10、不带 raqm 的 Pillow 逐字形绘制:传递 prepare(text)(来自 scripts/shape_text.py)。 为已经支持字形连接的渲染器重新连接文本会导致逆向操作(已在 matplotlib 3.11 和 Pillow+raqm 中验证)。
  8. 阿拉伯语标点符号: 使用 ، 逗号、؛ 分号、؟ 问号、«» 引号。保留 . 和 !。标点符号前无空格,后有一个空格。
  9. 以阿拉伯语原生方式写作,不要逐字翻译。 按钮使用祈使动词(أرسل、احفظ、ابدأ الآن),不要使用英语语序。参见 references/writing.md。
  10. 使用区域设置格式化数字/日期/货币,不要使用字符串拼接。 使用 Intl.NumberFormat('ar-SA', ...) / Intl.DateTimeFormat('ar-EG-u-nu-latn', ...),并始终显式设置 nu(数字)和 ca(日历)。

3. 根据输出类型加载参考文件

仅读取任务所需的文件:

输出类型读取文件
HTML、CSS、Tailwind、React、Next.js、Vue、React Native、Flutter、HTML邮件references/web.md + references/bidi.md
任何混合阿拉伯语+英语/数字的内容(包括 Markdown、纯文本、短信、JSON 字符串)references/bidi.md
字体、行高、发音符号、字重、两端对齐references/typography.md
Word (.docx)、PowerPoint (.pptx)、PDFreferences/documents.md
matplotlib、Pillow、SVG、canvas、OpenCV、Plotly、任何带文本的图像references/charts-images.md
文案写作、翻译、方言、数字、日期、货币、姓名、伊历references/writing.md

4. 在 RTL 中翻转和不变的内容

翻转(镜像布局)保持不变
阅读顺序、文本对齐、导航顺序、侧边栏位置电话号码、信用卡号、IBAN(始终 LTR)
面包屑导航、分页、步骤条:“下一步”指向左侧。文本 › > ( 自动镜像,但 → 和 SVG 图标不自动镜像代码块、终端输出、URL、电子邮件
后退/下一步箭头、V形符号、轮播/滑块滑动方向时间序列图表 x 轴(时间从左到右)。分类轴可能翻转
表格列顺序(第一列在右侧)媒体控件(播放 ▶、快进)、时钟、对勾
进度条和范围滑块从右侧填充徽标、品牌标识、照片、地图
表单标签在右侧,关闭按钮 × 在对话框左侧数学表达式和数字本身(1,234.5 保持 1,234.5)
Toast/抽屉滑入侧、头像上的徽章、列表项目符号键盘快捷键(Ctrl+S)

5. 完成之前

  1. 对生成的任何代码运行 linter(它只需要 Python 标准库): python <skill-dir>/scripts/rtl_check.py <文件或文件夹> 修复所有 error。除非有意为之,否则修复 warnings,并在有意保留的 warning 旁添加 rtl-ok 注释。
  2. 在可能的情况下渲染并观察,然后检查字母是否连接、第一个单词是否在右侧、标点符号是否在左端、数字顺序是否正确:
    • HTML:python -m playwright screenshot --full-page file://$PWD/index.html shot.png(或 npx playwright screenshot …)。如果浏览器不可用,weasyprint index.html out.pdf 可提供静态渲染。
    • docx/pptx:soffice --headless --convert-to pdf file.docx,然后将 PDF 栅格化。
    • PDF → PNG:python -c "import pymupdf; pymupdf.open('f.pdf')[0].get_pixmap(dpi=110).save('f.png')"
    • 图像/图表:打开您编写的 PNG 文件。
  3. 如果脚本无法运行(无 Python、无 shell),请手动检查此清单:
    • 根元素 dir="rtl" + lang="ar…"(或对应格式的等效项)
    • 间距、定位或对齐中无 left/right
    • 电话/电子邮件/URL/代码已隔离且为 LTR
    • 方向性图标已镜像,其他图标未改动
    • 已加载阿拉伯语字体,行高 ≥ 1.6,无字母间距、斜体或大写
    • 图像/PDF 文本:字形连接路径与渲染器匹配(规则 7)
    • 使用了 ، ؛ ؟,使用一种数字系统,自然的现代标准阿拉伯语(或要求的方言)

脚本

  • scripts/rtl_check.py <路径>:对 HTML/CSS/Tailwind/JSX/TSX/Vue/Svelte/React Native/Flutter 进行 RTL 错误检查。输出 文件:行、问题描述和确切的修复方法。有错误时退出码为 1。仅使用标准库。
  • scripts/shape_text.py:prepare(text, target) 用于不支持阿拉伯语字形连接的渲染器。它会检测 matplotlib/Pillow 的原生支持,并在不需要字形连接时原样返回文本。它使用 arabic-reshaper + python-bidi(按需 pip 安装),否则回退到内建的标准库字形连接器。python shape_text.py --check 报告当前机器需要什么。

相关技能