仅测试英文和日文时 Canvas 2D 文本渲染看起来正常,但一旦加入西班牙语、法语、葡萄牙语,就会暴露四个常见陷阱。根源在于拉丁语系文本长度通常比日语长 1.4–2 倍(法语/葡萄牙语 1.4–1.7 倍,西班牙语可达近 3 倍),为日语优化的字号和最大宽度无法容纳拉丁语系。
模式一:基于空格的分词(text.split(/\s+/))对中日韩文(CJK)无效,整个句子成为不可分割的 token,在画布边缘截断。
模式二:使用 ASCII 类 tokenizer(如 [A-Za-z0-9'\-_])会把带有重音的字符(ç、é、ã)从单词中间分开,例如 produção 变成 produ / ç / ão。英文测试无法发现,只有生成实际 PNG 才能看见。
模式三:拉丁语系文本溢出到两行后被加省略号,被吃掉的部分往往是语义关键的尾部词(如 production / produção)。修复方法是将字段分为两类:可截断的字段用折行加省略号,不可截断的字段自动适配字号。
模式四:在 Canvas 一侧实现自动适配字号,但 DOM 预览保持固定字号,导致预览换行与下载 PNG 不一致。必须将字号计算集中到离屏 canvas,并同时应用到渲染和预览的 style.fontSize。
预发布检查清单:日语需检查最后一行渲染到最后一个字符;法语/西语/葡语需检查重音字符处不分裂;法语/葡语需检查省略号不吃掉尾词;所有五种语言需保证预览与下载 PNG 换行一致。验证时间:2026年4–5月,基于 Canvas 2D API / vanilla JS / 英日西法葡五种语言生产环境。
#开发者 #工具 #Canvas #i18n #多语言 #前端 #JavaScript #CJK #文本渲染
@DevToolboxHub