如何向Google Cloud Translate API传递含占位符的分词字符串
Google Cloud Translate API 带占位符字符串翻译官方解决方案
Google Cloud Translate 官方针对包含插值占位符的文本翻译,推荐两种无需额外插入HTML标签的适配方案,均可避免占位符损坏问题,也不会和你原有字符串中的HTML片段产生冲突:
方案1:使用V3版API的正则不翻译规则(优先推荐)
V3版翻译API原生支持指定不翻译内容的匹配规则,无需预处理字符串:
- 调用
BatchTranslateText或TranslateText接口时,在请求参数中配置do_not_translate规则,添加正则匹配式\{\d+\},即可让API直接识别所有{数字}格式的占位符,完全保留其原始内容和位置不做翻译处理 - 根据你的文本内容类型设置
mime_type参数:如果需要保留原生HTML片段的格式就设置为text/html,仅需要翻译纯文本就设置为text/plain,两种格式下都可以正常生效不翻译规则
该方案完全不需要修改原字符串,不会和原有HTML内容冲突,官方原生支持,可以100%避免你遇到的占位符括号丢失、内容被修改的问题。
方案2:预处理替换占位符(兼容V2版API)
如果你还在使用V2版API,没有不翻译规则功能,可以用官方推荐的预处理+后处理流程:
- 预处理:提取原字符串中所有
{数字}格式的占位符,生成唯一映射表,将占位符替换为翻译模型不会修改的纯下划线+字母格式的令牌,比如Page {1} of {2}替换为Page ___TOKEN_0___ of ___TOKEN_1___,同时记录___TOKEN_0___对应{1}、___TOKEN_1___对应{2} - 调用翻译API时设置
mime_type为对应内容类型,发送替换后的文本 - 后处理:拿到翻译结果后,按照映射表把令牌换回原始的占位符即可
该方案同样不会和原有HTML内容冲突,也能完全避免占位符损坏的问题。
你之前用到的<span class="notranslate">方案仅适合无原生HTML的场景,上面两个方案都适配你的业务需求,长期使用更稳定。
内容的提问来源于stack exchange,提问作者Tom Hosker
相关产品推荐
相关产品推荐

