Skip to content

pt 的 detail.concurrentUpdateDescription 在洞前留了裸 "de",插入名词短语时渲染出 "de este registro"(葡语必须缩合成 deste)—— 叶子值无论怎么写都不可能对 #3877

Description

@yinlianghui

现场

ConcurrentUpdateDialog(OCC 冲突对话框)把 detail.concurrentUpdateDescription{{field}} 切成两半,中间粗体渲染 conflict.label || conflict.field:

packages/plugin-detail/src/ConcurrentUpdateDialog.tsx:124
  const descriptionTemplate = t('detail.concurrentUpdateDescription', { field: '{{field}}' });
  const [beforeField, afterField] = descriptionTemplate.split('{{field}}');

pt 包值:

"Outro usuário salvou uma versão mais recente de {{field}} durante sua edição. …"

洞前是裸介词 de 。当 {{field}} 收到的是字段名(StatusAmount)时没问题;但多字段冲突走的是另一支,label 是一个带指示词的名词短语 —— InlineEditSaveBar.tsx:144detail.concurrentUpdateRecordLabel(#3546 切片七刚回填,pt = este registro),于是 pt 用户看到:

uma versão mais recente de este registro durante sua edição
                          ^^^^^^^^^

葡语里 de + este 必须缩合成 destede este 是母语者一眼可见的语法错误。

为什么不能在叶子值上修

  • deste registro → 渲染成 de deste registro,更糟;
  • 写裸 registro(无限定词)→ de registro,语法上说得过去但像机翻;
  • de外层句子里,而外层句子是既有包值。

同类问题只有 pt 一个包:es de este registro、fr de cet enregistrement、de(与)von diesem Datensatz、ru версию этой записи 都不需要缩合(#3546 切片七的测试里逐包钉了 de 的第三格与 ru 的第二格)。

建议修法(二选一,倾向 A)

A. 改写 pt 的外层句子,让洞前不是裸介词。 例如

"Outro usuário salvou uma versão mais recente do seguinte campo: {{field}} durante sua edição. …"

或把介词挪进从句。改的是 pt 一个既有值,check-i18n-en-drift.mjs 不会红(en 未变),但要在同一 PR 里说明理由。优点:一处修死,叶子值不必迁就语法;缺点:pt 句式与其余九包略有分歧。

B. 让调用点传入已成句的标签。 InlineEditSaveBar 多字段分支不传名词短语,而是传字段名列表(它本来就有 keys.join(', ')),把"这条记录"的措辞交给一个独立的整句 key。优点:所有语言都不再有"洞前介词"的耦合;缺点:改的是行为(用户看到字段名而不是"这条记录"),属产品裁量,且 detail.concurrentUpdateRecordLabel 刚回填十包就会变成死键。

现状已在测试里钉住,不是被忽略

packages/i18n/src/__tests__/residue-namespaces-3546.test.tsx 里有

expect(composed('pt')).toContain('mais recente de este registro');

外加注释说明这是"当前真相"而非笔误,以及修法在外层句子。这一单落地时那条断言必须一起改。

关联:#3546(切片七回填 detail.concurrentUpdateRecordLabel)、#3512(同一族的无 provider 插值缺陷)。

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions