良好实践
网页
使用 Markdown 模式可以提高可读性并简化维护,这对译者和您的网站脚本(用于提取内容)都很有益。
对于多语言网站中的命名锚点,一种有趣的方法是使用 Markdown 设计“硬编码”链接。
例如:对于带锚点的
<h2/>标签
当前语言标签
LLM 在保护链接方面比人类更有效,
LSDE
允许您检测不同语言版本之间的问题。
因此,您可以共享一个在所有语言中都有效的链接,并使用
LSDE
来管理废弃锚点的替换。
代码歧义
在使用数据驱动模型时,避免歧义。
示例:
不良实践:
术语 'key' 不明确,导致难以查找。
tsconst PRODUCTS: Product[] = [ { id: 'fcf7o', logo: '/icons/fcf7o-icon-40.webp', label: 'FCF7O', key: 'game:fcf7o.words.game_title', }, { id: 'lsde', logo: '/icons/lsde-icon-40.webp', label: '<c1>LSDE</c1>', key: 'software:lsde.name', }, { id: 'lsge', logo: '/icons/lsge.webp', label: 'LSGE', key: 'software:lsge.name', }, ];
良好实践:
采用单一且一致的约定。
术语
i18nKey
非常明确,可以通过正则表达式(Regex)精确查找此值。
tsconst PRODUCTS: Product[] = [ { id: 'fcf7o', logo: '/icons/fcf7o-icon-40.webp', label: 'FCF7O', i18nKey: 'game:fcf7o.words.game_title', }, { id: 'lsde', logo: '/icons/lsde-icon-40.webp', label: '<c1>LSDE</c1>', i18nKey: 'software:lsde.name', }, { id: 'lsge', logo: '/icons/lsge.webp', label: 'LSGE', i18nKey: 'software:lsge.name', }, ];
懒惰
糟糕的想法源于懒惰。
不要试图通过执行操作来检索内容,从而节省键。
示例:
javascriptconst [title, subtitle] = t( 'game:game.title' ).split( /[::]/ );
这是一个伪好主意,因为在某些语言中,字符可能不同,词序也可能改变。
标签格式
最大限度地减少直接在文本中用于设计的代码,以便从代码库中对其进行控制。
例如,您可以指示图像的位置,但不能指示其样式或渲染方式。
如果您必须进行设计更改,您肯定不想仅仅为了更改标签样式而被迫将文本重新翻译成 10 种语言!
标签可以包含一个标识符,但通常强烈不建议添加额外信息,这是一种不良实践。
示例:不要这样做
<img src='url' left />而是这样做
<img id=1 />然后您将获取图像标签的 ID,以便在代码库中应用所需的样式。
ID 应该按字面意思使用,而不是通过它们的索引。
因为在不同的语言中,标签可能会被移动,不再与初始索引对应。
使用自然索引还会给开发人员带来复杂性;试图猜测图像或标签对应的索引是一个真正的难题。
因此,当您希望在插值后能够自定义标签时,请使用带标识符的标签。
CSS
对于网站翻译,当您有段落时,请在翻译后选择最小高度 (`min-height`),以避免在语言切换时出现视觉偏移。
例如:`mih={'3lh'}`
这允许您根据占用行数最多的语言定义最小高度,从而确保一致且简洁的用户体验(UX)。
命名空间
始终在您的翻译键中包含“命名空间”,即使您只有一个。
这极大地简化了设置正则表达式模式以查找您的键的过程。
例如:
game:a.b.c,
common:a.b.c