现场
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}} 收到的是字段名(Status、Amount)时没问题;但多字段冲突走的是另一支,label 是一个带指示词的名词短语 —— InlineEditSaveBar.tsx:144 传 detail.concurrentUpdateRecordLabel(#3546 切片七刚回填,pt = este registro),于是 pt 用户看到:
uma versão mais recente de este registro durante sua edição
^^^^^^^^^
葡语里 de + este 必须缩合成 deste。de 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 插值缺陷)。
现场
ConcurrentUpdateDialog(OCC 冲突对话框)把detail.concurrentUpdateDescription按{{field}}切成两半,中间粗体渲染conflict.label || conflict.field:pt 包值:
洞前是裸介词
de。当{{field}}收到的是字段名(Status、Amount)时没问题;但多字段冲突走的是另一支,label是一个带指示词的名词短语 ——InlineEditSaveBar.tsx:144传detail.concurrentUpdateRecordLabel(#3546 切片七刚回填,pt =este registro),于是 pt 用户看到:葡语里
de + este必须缩合成deste。de este是母语者一眼可见的语法错误。为什么不能在叶子值上修
deste registro→ 渲染成de deste registro,更糟;registro(无限定词)→de registro,语法上说得过去但像机翻;de在外层句子里,而外层句子是既有包值。同类问题只有 pt 一个包:es
de este registro、frde cet enregistrement、de(与)von diesem Datensatz、ruверсию этой записи都不需要缩合(#3546 切片七的测试里逐包钉了 de 的第三格与 ru 的第二格)。建议修法(二选一,倾向 A)
A. 改写 pt 的外层句子,让洞前不是裸介词。 例如
或把介词挪进从句。改的是 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里有外加注释说明这是"当前真相"而非笔误,以及修法在外层句子。这一单落地时那条断言必须一起改。
关联:#3546(切片七回填
detail.concurrentUpdateRecordLabel)、#3512(同一族的无 provider 插值缺陷)。