ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

一文精通closure-templates国际化:msg、复数与性数模板的多语言支持完整指南

一文精通closure-templates国际化:msg、复数与性数模板的多语言支持完整指南 一文精通closure-templates国际化msg、复数与性数模板的多语言支持完整指南【免费下载链接】closure-templatesA client- and server-side templating system that helps you dynamically build reusable HTML and UI elements项目地址: https://gitcode.com/gh_mirrors/clo/closure-templatesclosure-templatesSoy是 Google 开源的客户端与服务端模板系统它的国际化i18n能力通过msg、plural和性别感知模板三大机制实现多语言支持你在模板里用英文写一次文案编译器自动提取为行业标准 XLIFF 文件交给翻译者再按目标语言插回模板渲染。本指南带你从零掌握这套完整的 closure-templates 国际化工作流。msg 命令多语言模板的基本单元 用{msg ... /msg}包裹需要翻译的文案desc属性是给人类翻译者的说明{msg descSays hello to a person.} Hello {$name}! {/msg}编译器会把内部的数据引用、HTML 标签转换成占位符。翻译者在 XLIFF 文件里看到的其实是Hello {NAME}!翻译时语序可以任意调整占位符保证还原正确。几个实用属性meaning英文相同但语义不同的消息如名词 Archive 与动词 Archive靠它生成不同的消息 IDphname/phex自定义占位符名称、提供占位符示例值帮助翻译者理解上下文⚠️ 不要把一句话拆成多个 msg控制流命令if/for不允许出现在 msg 内可先放入let块再打印结果官方示例可参考 features.soy 中的demoMsg模板。plural 命令复数形式的正确打开方式 不同语言的复数规则差异巨大波兰语有单数、双数、少数、多数四种。用plural声明数字文案翻译者会按目标语言自行补充用例{msg descShows draft count.} {plural $numDrafts} {case 0}No drafts {case 1}1 draft {default}{$numDrafts} drafts {/plural} {/msg}三条硬性规则至少声明case 1和default不能嵌套 plural若同一消息还需按性别变化必须把 plural 放在 select 内部性数模板genders 与 select 让语言更地道 ⚤英文不变、其他语言变的场景动词变位随性别变化时如法语 vous avez rejoint用genders属性声明性别变量即可英文文案保持单一{msg descInvite to community. genders$userGender, $targetGender} Join {$targetName}s community. {/msg}英文本身就变的场景英文中 he/she 需要分叉时用select显式写出各分支{msg descReply action. genders$userGender} {select $targetGender} {case female}Reply to her. {case male}Reply to him. {default}Reply to them. {/select} {/msg}性别表达式只识别female、male其他值按未知处理。XLIFF 工作流提取与插回翻译文件 closure-templates 内置SoyMsgExtractor提取消息XliffMsgPlugin读取翻译文件。以项目自带示例为参考提取结果examples_extracted.xlf英文插回examples_translated_en.xlf测试语言 x-zz 插回examples_translated_x-zz.xlf典型流程Java$ java -jar SoyMsgExtractor.jar --outputFile extracted.xlf aaa.soy bbb.soy每个trans-unit通过哈希 ID 与模板绑定note中携带desc和meaning说明翻译者据此准确理解语境。JavaScript 侧则通过SoyToJsSrcCompiler的--locales参数一次编译多语言产物。详细说明见 localization.md。fallbackmsg安全修改已翻译文案 修改线上消息时避免外国用户看到未翻译的新文案——把旧消息移入fallbackmsg{msg descbutton label meaningverb} Archive {fallbackmsg descbutton label meaningverb} Arcive {/msg}编译器自动选择新消息有译文用新的否则回退到旧译文。常见陷阱空值安全访问 plural/select的各分支占位符会全部提前求值因为真正选中哪个分支取决于译文某分支访问了不存在的字段就会运行时抛错{msg descWelcomes everybody.} {plural $people.length} {case 0}Nobody showed up :( {case 1}Greetings {$people[0]?.name} {default}Greetings yall {/plural} {/msg}用空安全访问?.即可让缺失值安静地求为 undefined。完整避坑指南见 messages.md 的 Pitfalls 章节。延伸阅读命令参考messages.md本地化开发流程localization.md双向文本Bidi支持localization.md 的 Bidi 章节运行时 XLIFF 插件源码xliffmsgplugin/【免费下载链接】closure-templatesA client- and server-side templating system that helps you dynamically build reusable HTML and UI elements项目地址: https://gitcode.com/gh_mirrors/clo/closure-templates创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表