Skip to content

fix(i18n): de 包 20 个值把德语开引号 „ 配到 ASCII 直引号,收尾引号改回 „…“ (#3876) - #3918

Draft
yinlianghui wants to merge 2 commits into
mainfrom
claude/issue-3876-de-quote-pairs
Draft

fix(i18n): de 包 20 个值把德语开引号 „ 配到 ASCII 直引号,收尾引号改回 „…“ (#3876)#3918
yinlianghui wants to merge 2 commits into
mainfrom
claude/issue-3876-de-quote-pairs

Conversation

@yinlianghui

Copy link
Copy Markdown
Collaborator

Fixes #3876

packages/i18n/src/locales/de.ts 里 20 个 key 用德语低九分号开引号 (U+201E)开场,却用 ASCII 直引号 "(U+0022)收尾。德语用户今天读到的是 Registerkarte „Alle Datensätze" anzeigensearch.resultsCount 最直观:值以 „{{query}}"" 结尾 —— 错配的收引号紧挨着 TS 字符串的结束符。

这从来不是本包约定:修前同一文件里已有 23 处写成正确的 „…“,两种写法在同 namespace 的邻键里并排坐着。现在所有错配收引号统一为 (U+201C),与德语正字法(DUDEN R11)和文件里的多数派一致。

落地重数(两种单位都对,差异记进代码)

卡片说「20 个值」、分诊在 b750823 复扫说「22 处错配」。两者各自都对,只是单位不同,这份差异现在写进了钉子文件的文件头,不再留给下一个人猜:

单位
承载错配的 key 20
错配出现次数 22

差 2 的原因:navigationSync.renamedPagenavigationSync.renamedDashboard 各在一句里引两个名字("Seite „alt“ in „neu“ umbenannt"),各贡献 2 处。

分诊当时在 b750823 量到 44× / 24×;本单在 2937bcf7d 实测 45 / 25 —— 切片七(#3546)那个刻意写成正确配对的 empty.interfacePageSourceMissing 之后又合进来一对,两边都不算错。全文件计数 修前 → 修后:

字符 修前 修后
U+201E 45 45
U+201C 25 47
U+201D 2 2
" U+0022 28 6

取证用 \p{L} + u 的 Unicode 属性类正则(#3866 教训:\w / [A-Za-z] 会静静漏掉德语引号里满是的 ä ö ü ß,于是方法本身少报、文件看起来是干净的),并用一个独立的「逐字符找最近引号」扫描器交叉核对,两者同为 22。20 个值逐值人工复核过:每一处被改的 " 都是德语散文里的收尾引号(视图名、Tab 名、搜索词、应用名),没有一处是代码/JSON/CLI 引用需要保留 ASCII。

持久不变量:没有采用卡片提议的 count(„) == count(“)

卡片建议钉 count(„) === count(“)那条在正确修完的文件上是假的(45 vs 47),照抄会让下一个读者去追一个不存在的 bug。原因:本包还有两个值是未翻译的英文散文,按英文风格用 “…”

  • grid.import.savedMappingHint
  • grid.import.savedMappingPreviewNote

它们的两个 是合法的引号,正是 45/47 那 2 的缺口。钉子改成配对本身:每个 之后第一个引号字符必须是 ,外加算术恒等式

count(“) === count(„) + count(”)

—— 每个德语 收尾,每个多出来的 是被 应答的英文开引号。那两个值将来被译成德语它依然成立(47 === 47 + 0),错配一旦回填立刻红(46 !== 47)。两条都带 presence 防空转断言(2914 个字符串值、不少于 40 个 ),import 坏掉或文件被改名不会静静空转变绿。

为什么必须落钉子

三道 i18n 门禁按设计都读不到值:all-locales-key-parity 比键名集合与占位符形状,check-i18n-call-site-keys.mjs 只判 key 能否解析,check-i18n-en-drift.mjs 只在 en 值变化时要求九包跟随 —— 这些值从落地起就是错的,不存在「变化」事件。没有一条值域断言,下一次回填还会从邻键把错配抄过去,这 20 个就是这么攒起来的。

⚠️ 越过了 PM 的文件面:动了 residue-namespaces-3546.test.tsx 一行

派单写的是「⛔ 不碰 3546 家族测试」,但 issue 正文明确点名这一处:

新增的 empty.interfacePageSourceMissing de 值刻意写成正确配对的 „{{name}}“ 而不是照抄邻键的错配形态,并在测试里把这处刻意分歧写明,所以那条断言就是这一单落地时必须回头看的地方

residue-namespaces-3546.test.tsx:707 原本 toContain('„{{name}}"') —— 它钉住的正是本单要删掉的错配形态。切片七已经合进 main(不是在飞),不改它 CI 必红。按 fixture 三分法这是「re-spell」:改钉收敛后的一致形态(两个姊妹值现在都是 „{{name}}“),覆盖面没有减少(仍钉邻键的配对),注释里留下这段来历与指向新钉子文件的指针。共 1 行断言 + 注释,请 PM 复核这次越面。

反向验证(方向先预判后运行)

预判:把任一错配还原,配对钉必须并点名 key —— 这里不存在反转或「计数归零而空过」的情形,因为断言直接钉修后字节,且缺陷计数是 0 → 1 并有 presence 兜底。

实跑还原 empty.objectNotFoundDescription + empty.pageNotFoundDescription 两个值:7 个测试红、2 个文件,与预判逐条对上;唯一保持绿的是 en 未受影响那条(正确,它管的是 en):

× pins the 20 fixed keys …
  AssertionError: de empty.objectNotFoundDescription lost the paired span „{{name}}“
× pins the four values the issue showcased, whole and byte-for-byte
  AssertionError: expected 'Die Seite „{{name}}" wurde nicht gefu…' to be 'Die Seite „{{name}}“ …'
× holds pack-wide: no „ in de is closed by anything but “ (the durable invariant)
× holds under an independent \p{L}-aware regex formulation (objectui#3866 lesson)
  AssertionError: „…" mismatches: empty.pageNotFoundDescription: „{{name}}"
× keeps the count identity …
  AssertionError: expected { open: 45, close: 45, rdq: 2 } to deeply equal { open: 45, close: 47, rdq: 2 }
× records the remaining straight quotes in de …
× residue-namespaces-3546 … each pack keeps its own typography …
  AssertionError: expected 'Definition des Objekts „{{name}}" feh…' to contain '„{{name}}“'
 Tests  7 failed | 43 passed (50)

顺带发现:pack-wide 那条原先先跑算术、后跑点名清单,还原时先炸的是 expected 43 to be 45(不点名)。已把点名清单的断言提到算术之前,失败第一行就说出是哪个 key、哪句话。

验证

消费半径 = packages/i18n 全包:

pnpm exec vitest run packages/i18n --maxWorkers=2
 Test Files  33 passed (33)
      Tests  583 passed (583)

en-drift 门(本单的关键否证项,en 必须一字未动):

node scripts/check-i18n-en-drift.mjs
Compared the ten locale packs at 2937bcf7d (merge-base with origin/main) with the
working tree: 0 en value(s) changed (0 key(s) added, 0 removed …)
No en value changed in this range.

其余:check-i18n-call-site-keys.mjs 2320/2320 解析;全仓 turbo run type-check --concurrency=2 78/78 successful;@object-ui/i18n lint 0 errors(33 条 warning 全在未触及文件);scripts/check-control-bytes.mjs OK(3794 文件),另按仓规自扫 grep -naP 控制字节零命中 —— 本单写钉子时确实在 String.fromCharCode(10) 那行落进过一个裸 NUL,导致整个文件被 grep 当二进制(零命中、无信号),自扫抓到并已清除。

范围

只改 de。其余九包一字未动;es 等按各自约定用 ASCII 双侧引号(residue 测试 701 行已钉),不是缺陷。fr / zh / ja 卡片已量干净,未扩包面。

发现但在本 PR 修(另立单):approvalsInbox 三个值(rejectOneTitle / inlineApproved / inlineRejected)用 ASCII 直引号双侧成对,而同族兄弟 approvalsInbox.approveOneTitle 是正确的 „…“ —— 这是另一种缺陷形态(一致的 ASCII 对,不是错配对),本单的不变量按设计也扫不到它(没有 )。已在钉子文件里把这 3 个 key 钉成显式清单,数目漂了会红,将来修它的人必须回来更新这份清单。


Generated by Claude Code

`packages/i18n/src/locales/de.ts` 里 20 个 key 用德语低九分号开引号 `„`(U+201E)
开场,却用 ASCII 直引号 `"`(U+0022)收尾,德语用户读到的是
`Registerkarte „Alle Datensätze" anzeigen`。`search.resultsCount` 最直观:值以
`„{{query}}""` 结尾,错配的收引号紧挨着 TS 字符串的结束符。

这从来不是本包约定 —— 修前同一文件里已有 23 处写成正确的 `„…“`,两种写法在同
namespace 的邻键里并排坐着。现在所有错配收引号统一为 `“`(U+201C),与德语正字法
(DUDEN R11)和文件里的多数派一致。en 与其余九包一字未动(en-drift 门实测
0 en value(s) changed)。

落地重数,两种单位都记下来:卡片说「20 个值」、分诊复扫说「22 处错配」,两者各自
都对 —— 20 个 key 承载 22 处错配,因为 `navigationSync.renamedPage` 与
`navigationSync.renamedDashboard` 各在一句里引两个名字("Seite „alt“ in „neu“
umbenannt"),各贡献 2 处。全文件计数 修前 → 修后:`„` 45 → 45,`“` 25 → 47,
`”` 2 → 2,`"` 28 → 6。

持久不变量没有采用卡片提议的 `count(„) === count(“)` —— 那条在**正确修完的文件
上是假的**(45 vs 47):`grid.import.savedMappingHint` 与
`grid.import.savedMappingPreviewNote` 两个值仍是未翻译的英文散文、按英文风格用
`“…”`,它们的两个 `“` 是合法的**开**引号。改钉成配对本身(每个 `„` 后第一个引号
字符必须是 `“`),外加算术恒等式 `count(“) === count(„) + count(”)` —— 那两个值
将来被译成德语它依然成立(47 === 47 + 0),而错配一旦回填立刻红。两者都带 presence
防空转断言。

`residue-namespaces-3546.test.tsx` 里那条断言是卡片正文点名「这一单落地时必须回头
看的地方」:它原本钉住邻键的错配形态以说明切片七的刻意分歧,现在改钉**收敛后**的
一致形态,并在注释里留下这段来历。
@vercel

vercel Bot commented Aug 9, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
objectui Ignored Ignored Aug 9, 2026 2:47am

Request Review

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Main entry (gzip) 28.1 KB 350 KB
Entry file index-CxKr1-D-.js
Status PASS

📦 Bundle Size Report

Package Size Gzipped
app-shell (index.js) 8.66KB 3.13KB
app-shell (runtime-config.js) 7.42KB 2.32KB
app-shell (types.js) 0.01KB 0.04KB
app-shell (urlParams.js) 7.57KB 2.97KB
auth (AuthContext.js) 0.31KB 0.24KB
auth (AuthGuard.js) 1.17KB 0.53KB
auth (AuthProvider.js) 22.10KB 4.37KB
auth (AuthShell.js) 3.49KB 1.40KB
auth (ForgotPasswordForm.js) 12.21KB 3.45KB
auth (LoginForm.js) 18.13KB 5.39KB
auth (PreviewBanner.js) 0.90KB 0.50KB
auth (RegisterForm.js) 6.64KB 2.21KB
auth (SocialSignInButtons.js) 9.60KB 3.89KB
auth (UserMenu.js) 3.40KB 1.22KB
auth (auth-gate-events.js) 1.29KB 0.66KB
auth (authStyles.js) 5.04KB 1.72KB
auth (createAuthClient.js) 35.76KB 9.11KB
auth (createAuthenticatedFetch.js) 4.37KB 1.69KB
auth (index.js) 2.35KB 1.07KB
auth (org-roles.js) 6.66KB 2.78KB
auth (phone-identifier.js) 1.11KB 0.66KB
auth (types.js) 0.59KB 0.35KB
auth (useAuth.js) 4.91KB 0.87KB
auth (useIsWorkspaceAdmin.js) 1.61KB 0.85KB
collaboration (CommentThread.js) 26.07KB 7.56KB
collaboration (LiveCursors.js) 3.17KB 1.27KB
collaboration (PresenceAvatars.js) 6.49KB 2.64KB
collaboration (PresenceProvider.js) 2.79KB 1.13KB
collaboration (index.js) 1.65KB 0.73KB
collaboration (useCollaborationTranslation.js) 6.05KB 2.52KB
collaboration (useCommentSearch.js) 1.98KB 0.88KB
collaboration (useConflictResolution.js) 7.75KB 1.86KB
collaboration (useMentionNotifications.js) 1.81KB 0.68KB
collaboration (usePresence.js) 6.33KB 1.84KB
collaboration (useRealtimeSubscription.js) 7.91KB 2.01KB
components (index.js) 482.39KB 106.34KB
core (index.js) 2.96KB 1.13KB
create-plugin (index.js) 10.08KB 3.26KB
data-objectstack (index.js) 139.61KB 35.99KB
fields (index.js) 230.97KB 56.74KB
i18n (LocalizationContext.js) 1.76KB 0.96KB
i18n (currency.js) 1.22KB 0.64KB
i18n (i18n.js) 4.32KB 1.77KB
i18n (index.js) 2.65KB 1.06KB
i18n (pickLocalized.js) 1.70KB 0.83KB
i18n (provider.js) 9.48KB 3.27KB
i18n (useObjectLabel.js) 27.59KB 6.63KB
i18n (useSafeTranslation.js) 4.52KB 1.96KB
layout (index.js) 38.53KB 10.71KB
mobile (MobileProvider.js) 0.92KB 0.49KB
mobile (ResponsiveContainer.js) 0.94KB 0.38KB
mobile (breakpoints.js) 1.51KB 0.70KB
mobile (createOfflineDataSource.js) 5.61KB 1.74KB
mobile (index.js) 1.50KB 0.62KB
mobile (offlineQueue.js) 3.91KB 1.35KB
mobile (pwa.js) 0.97KB 0.49KB
mobile (serviceWorker.js) 1.48KB 0.62KB
mobile (serviceWorkerSource.js) 3.41KB 1.48KB
mobile (useBreakpoint.js) 1.54KB 0.65KB
mobile (useGesture.js) 6.96KB 1.98KB
mobile (useOfflineSync.js) 1.99KB 0.72KB
mobile (usePullToRefresh.js) 2.53KB 0.85KB
mobile (useResponsive.js) 0.71KB 0.42KB
mobile (useResponsiveConfig.js) 1.36KB 0.63KB
mobile (useSpecGesture.js) 4.32KB 1.64KB
mobile (useTouchTarget.js) 1.01KB 0.54KB
permissions (MePermissionsProvider.js) 8.75KB 3.06KB
permissions (PermissionContext.js) 0.31KB 0.25KB
permissions (PermissionGuard.js) 0.89KB 0.45KB
permissions (PermissionProvider.js) 3.67KB 1.12KB
permissions (evaluator.js) 4.41KB 1.44KB
permissions (index.js) 0.91KB 0.41KB
permissions (store.js) 0.91KB 0.42KB
permissions (useFieldPermissions.js) 1.28KB 0.52KB
permissions (usePermissions.js) 1.55KB 0.71KB
plugin-ai (index.js) 15.71KB 3.79KB
plugin-calendar (index.js) 44.98KB 12.37KB
plugin-charts (index.js) 61.04KB 17.31KB
plugin-chatbot (index.js) 180.33KB 42.79KB
plugin-dashboard (index.js) 117.21KB 30.27KB
plugin-designer (index.js) 210.51KB 42.51KB
plugin-detail (index.js) 236.63KB 59.02KB
plugin-editor (index.js) 2.46KB 1.10KB
plugin-form (index.js) 112.10KB 27.10KB
plugin-gantt (index.js) 162.55KB 39.57KB
plugin-grid (index.js) 187.63KB 49.66KB
plugin-kanban (index.js) 48.30KB 13.28KB
plugin-list (index.js) 105.12KB 25.48KB
plugin-map (index.js) 16.81KB 5.24KB
plugin-markdown (index.js) 13.72KB 4.69KB
plugin-report (index.js) 40.58KB 10.58KB
plugin-timeline (index.js) 25.76KB 7.33KB
plugin-tree (index.js) 8.50KB 2.88KB
plugin-view (index.js) 84.03KB 20.55KB
providers (DataSourceProvider.js) 0.75KB 0.39KB
providers (MetadataProvider.js) 1.37KB 0.59KB
providers (ThemeProvider.js) 1.90KB 0.85KB
providers (UploadProvider.js) 11.71KB 3.53KB
providers (index.js) 0.44KB 0.22KB
providers (types.js) 0.01KB 0.04KB
react-runtime (index.js) 5.67KB 2.37KB
react (LazyPluginLoader.js) 3.77KB 1.33KB
react (SchemaRenderer.js) 19.28KB 6.38KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 1.02KB 0.55KB
react (spec-input.js) 0.20KB 0.18KB
sdui-parser (codegen.js) 4.09KB 1.74KB
sdui-parser (index.js) 4.47KB 2.03KB
sdui-parser (parse.js) 10.04KB 2.82KB
sdui-parser (types.js) 0.29KB 0.24KB
sdui-parser (validate.js) 4.69KB 1.48KB
types (ai.js) 0.20KB 0.17KB
types (api-types.js) 0.20KB 0.18KB
types (app.js) 2.87KB 0.99KB
types (base.js) 0.20KB 0.18KB
types (blocks.js) 0.20KB 0.18KB
types (complex.js) 0.20KB 0.18KB
types (crud.js) 0.20KB 0.18KB
types (data-display.js) 0.20KB 0.18KB
types (data-protocol.js) 0.20KB 0.19KB
types (data.js) 0.20KB 0.18KB
types (designer.js) 1.87KB 0.85KB
types (disclosure.js) 0.20KB 0.18KB
types (error-code.js) 1.54KB 0.88KB
types (feedback.js) 0.20KB 0.18KB
types (field-types.js) 0.20KB 0.18KB
types (form.js) 0.20KB 0.18KB
types (http-retry.js) 4.32KB 2.02KB
types (index.js) 2.71KB 1.34KB
types (layout.js) 0.20KB 0.18KB
types (managed-by.js) 0.19KB 0.18KB
types (mobile.js) 2.59KB 1.31KB
types (navigation.js) 0.20KB 0.18KB
types (objectql.js) 0.20KB 0.18KB
types (overlay.js) 0.20KB 0.18KB
types (permissions.js) 0.20KB 0.18KB
types (plugin-scope.js) 0.20KB 0.18KB
types (record-components.js) 0.20KB 0.19KB
types (record-semantics.js) 1.28KB 0.67KB
types (registry.js) 0.20KB 0.18KB
types (reports.js) 0.20KB 0.18KB
types (spec-report.js) 5.05KB 1.93KB
types (system-fields.js) 3.33KB 1.54KB
types (theme.js) 0.20KB 0.18KB
types (ui-action.js) 3.40KB 1.71KB
types (views.js) 0.20KB 0.18KB
types (widget.js) 0.20KB 0.18KB

Size Limits

  • ✅ Core packages should be < 50KB gzipped
  • ✅ Component packages should be < 100KB gzipped
  • ⚠️ Plugin packages should be < 150KB gzipped

原注释写「constants 用转义写、字面量只出现在期望表里」,实际两处都用字面量。
改成如实描述,并给四个常量都补上 U+ 码位 —— U+201E 与 U+201C 在多数编辑器字体里
只差一个像素,这个 bug 能活下来正是因为它们看起来一样。仅注释,无行为改动。
@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Main entry (gzip) 28.1 KB 350 KB
Entry file index-BXahTybG.js
Status PASS

📦 Bundle Size Report

Package Size Gzipped
app-shell (index.js) 8.66KB 3.13KB
app-shell (runtime-config.js) 7.42KB 2.32KB
app-shell (types.js) 0.01KB 0.04KB
app-shell (urlParams.js) 7.57KB 2.97KB
auth (AuthContext.js) 0.31KB 0.24KB
auth (AuthGuard.js) 1.17KB 0.53KB
auth (AuthProvider.js) 22.10KB 4.37KB
auth (AuthShell.js) 3.49KB 1.40KB
auth (ForgotPasswordForm.js) 12.21KB 3.45KB
auth (LoginForm.js) 18.13KB 5.39KB
auth (PreviewBanner.js) 0.90KB 0.50KB
auth (RegisterForm.js) 6.64KB 2.21KB
auth (SocialSignInButtons.js) 9.60KB 3.89KB
auth (UserMenu.js) 3.40KB 1.22KB
auth (auth-gate-events.js) 1.29KB 0.66KB
auth (authStyles.js) 5.04KB 1.72KB
auth (createAuthClient.js) 35.76KB 9.11KB
auth (createAuthenticatedFetch.js) 4.37KB 1.69KB
auth (index.js) 2.35KB 1.07KB
auth (org-roles.js) 6.66KB 2.78KB
auth (phone-identifier.js) 1.11KB 0.66KB
auth (types.js) 0.59KB 0.35KB
auth (useAuth.js) 4.91KB 0.87KB
auth (useIsWorkspaceAdmin.js) 1.61KB 0.85KB
collaboration (CommentThread.js) 26.07KB 7.56KB
collaboration (LiveCursors.js) 3.17KB 1.27KB
collaboration (PresenceAvatars.js) 6.49KB 2.64KB
collaboration (PresenceProvider.js) 2.79KB 1.13KB
collaboration (index.js) 1.65KB 0.73KB
collaboration (useCollaborationTranslation.js) 6.05KB 2.52KB
collaboration (useCommentSearch.js) 1.98KB 0.88KB
collaboration (useConflictResolution.js) 7.75KB 1.86KB
collaboration (useMentionNotifications.js) 1.81KB 0.68KB
collaboration (usePresence.js) 6.33KB 1.84KB
collaboration (useRealtimeSubscription.js) 7.91KB 2.01KB
components (index.js) 482.39KB 106.34KB
core (index.js) 2.96KB 1.13KB
create-plugin (index.js) 10.08KB 3.26KB
data-objectstack (index.js) 139.61KB 35.99KB
fields (index.js) 230.97KB 56.74KB
i18n (LocalizationContext.js) 1.76KB 0.96KB
i18n (currency.js) 1.22KB 0.64KB
i18n (i18n.js) 4.32KB 1.77KB
i18n (index.js) 2.65KB 1.06KB
i18n (pickLocalized.js) 1.70KB 0.83KB
i18n (provider.js) 9.48KB 3.27KB
i18n (useObjectLabel.js) 27.59KB 6.63KB
i18n (useSafeTranslation.js) 4.52KB 1.96KB
layout (index.js) 38.53KB 10.71KB
mobile (MobileProvider.js) 0.92KB 0.49KB
mobile (ResponsiveContainer.js) 0.94KB 0.38KB
mobile (breakpoints.js) 1.51KB 0.70KB
mobile (createOfflineDataSource.js) 5.61KB 1.74KB
mobile (index.js) 1.50KB 0.62KB
mobile (offlineQueue.js) 3.91KB 1.35KB
mobile (pwa.js) 0.97KB 0.49KB
mobile (serviceWorker.js) 1.48KB 0.62KB
mobile (serviceWorkerSource.js) 3.41KB 1.48KB
mobile (useBreakpoint.js) 1.54KB 0.65KB
mobile (useGesture.js) 6.96KB 1.98KB
mobile (useOfflineSync.js) 1.99KB 0.72KB
mobile (usePullToRefresh.js) 2.53KB 0.85KB
mobile (useResponsive.js) 0.71KB 0.42KB
mobile (useResponsiveConfig.js) 1.36KB 0.63KB
mobile (useSpecGesture.js) 4.32KB 1.64KB
mobile (useTouchTarget.js) 1.01KB 0.54KB
permissions (MePermissionsProvider.js) 8.75KB 3.06KB
permissions (PermissionContext.js) 0.31KB 0.25KB
permissions (PermissionGuard.js) 0.89KB 0.45KB
permissions (PermissionProvider.js) 3.67KB 1.12KB
permissions (evaluator.js) 4.41KB 1.44KB
permissions (index.js) 0.91KB 0.41KB
permissions (store.js) 0.91KB 0.42KB
permissions (useFieldPermissions.js) 1.28KB 0.52KB
permissions (usePermissions.js) 1.55KB 0.71KB
plugin-ai (index.js) 15.71KB 3.79KB
plugin-calendar (index.js) 44.98KB 12.37KB
plugin-charts (index.js) 61.04KB 17.31KB
plugin-chatbot (index.js) 180.33KB 42.79KB
plugin-dashboard (index.js) 117.21KB 30.27KB
plugin-designer (index.js) 210.51KB 42.51KB
plugin-detail (index.js) 236.63KB 59.02KB
plugin-editor (index.js) 2.46KB 1.10KB
plugin-form (index.js) 112.10KB 27.10KB
plugin-gantt (index.js) 162.55KB 39.57KB
plugin-grid (index.js) 187.63KB 49.66KB
plugin-kanban (index.js) 48.30KB 13.28KB
plugin-list (index.js) 105.12KB 25.48KB
plugin-map (index.js) 16.81KB 5.24KB
plugin-markdown (index.js) 13.72KB 4.69KB
plugin-report (index.js) 40.58KB 10.58KB
plugin-timeline (index.js) 25.76KB 7.33KB
plugin-tree (index.js) 8.50KB 2.88KB
plugin-view (index.js) 84.03KB 20.55KB
providers (DataSourceProvider.js) 0.75KB 0.39KB
providers (MetadataProvider.js) 1.37KB 0.59KB
providers (ThemeProvider.js) 1.90KB 0.85KB
providers (UploadProvider.js) 11.71KB 3.53KB
providers (index.js) 0.44KB 0.22KB
providers (types.js) 0.01KB 0.04KB
react-runtime (index.js) 5.67KB 2.37KB
react (LazyPluginLoader.js) 3.77KB 1.33KB
react (SchemaRenderer.js) 19.28KB 6.38KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 1.02KB 0.55KB
react (spec-input.js) 0.20KB 0.18KB
sdui-parser (codegen.js) 4.09KB 1.74KB
sdui-parser (index.js) 4.47KB 2.03KB
sdui-parser (parse.js) 10.04KB 2.82KB
sdui-parser (types.js) 0.29KB 0.24KB
sdui-parser (validate.js) 4.69KB 1.48KB
types (ai.js) 0.20KB 0.17KB
types (api-types.js) 0.20KB 0.18KB
types (app.js) 2.87KB 0.99KB
types (base.js) 0.20KB 0.18KB
types (blocks.js) 0.20KB 0.18KB
types (complex.js) 0.20KB 0.18KB
types (crud.js) 0.20KB 0.18KB
types (data-display.js) 0.20KB 0.18KB
types (data-protocol.js) 0.20KB 0.19KB
types (data.js) 0.20KB 0.18KB
types (designer.js) 1.87KB 0.85KB
types (disclosure.js) 0.20KB 0.18KB
types (error-code.js) 1.54KB 0.88KB
types (feedback.js) 0.20KB 0.18KB
types (field-types.js) 0.20KB 0.18KB
types (form.js) 0.20KB 0.18KB
types (http-retry.js) 4.32KB 2.02KB
types (index.js) 2.71KB 1.34KB
types (layout.js) 0.20KB 0.18KB
types (managed-by.js) 0.19KB 0.18KB
types (mobile.js) 2.59KB 1.31KB
types (navigation.js) 0.20KB 0.18KB
types (objectql.js) 0.20KB 0.18KB
types (overlay.js) 0.20KB 0.18KB
types (permissions.js) 0.20KB 0.18KB
types (plugin-scope.js) 0.20KB 0.18KB
types (record-components.js) 0.20KB 0.19KB
types (record-semantics.js) 1.28KB 0.67KB
types (registry.js) 0.20KB 0.18KB
types (reports.js) 0.20KB 0.18KB
types (spec-report.js) 5.05KB 1.93KB
types (system-fields.js) 3.33KB 1.54KB
types (theme.js) 0.20KB 0.18KB
types (ui-action.js) 3.40KB 1.71KB
types (views.js) 0.20KB 0.18KB
types (widget.js) 0.20KB 0.18KB

Size Limits

  • ✅ Core packages should be < 50KB gzipped
  • ✅ Component packages should be < 100KB gzipped
  • ⚠️ Plugin packages should be < 150KB gzipped

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

de 语言包 20 个值把德语开引号 „ 和 ASCII 直引号 " 配成一对(正确配对的只有 21 个),德语用户看到的收尾引号是错的

2 participants