文 / Jessica Dene Earley-Cha
正在考虑让您的 Google 助理操作支持多种语言?那您需要将它本地化!本地化可以让使用不同语言的受众都理解您的操作,帮助您接触新的受众。通过本地化,您可以为自己的操作和用户创建并自定义不同语言的体验。查看您在本地化操作时适用的全部语言和语言区域,然后开始操作。
过程中需要一些帮助?不用担心,我们为您准备了一些提示。以下是帮助您通过本地化接触国际受众的五个最佳实践:
在进行本地化前,请确认您的操作具备高级全面功能,包括:
强大的训练语句 — 请务必为每个意图添加超过 15 个训练语句,以确保大量不同类型的用户都能够访问操作的不同功能
广泛的特色和功能 — 确保您已构建多个 MVP,并且拥有已准备好扩展到许多用户的操作
实现错误处理 — 这意味着您的操作能够处理无输入的情况,具有回退功能,并且可以随时提供帮助等。
提供响应变量 — 这可以为您的操作提供更加自然的体验,并且有助于译者提供更优秀的译文,下面是 “Anything else”(别的什么)语句的响应变量示例:
“Now, what else can I help you with?”(现在,还有什么可以帮您?)
“Is there anything else I can help you with?”(还有什么可以帮您?)
将代码外的响应模块化(为您的响应附加 JSON 文件)。以这种方式组织您的代码,这可以清除您的代码并支持转换为使用 i18n 库进行本地化。查看示例代码 https://github.com/actions-on-google/dialogflow-number-genie-nodejs,了解其自行组织方式。
使用有意义的响应变量名称,以使变量保持有序。即:
{
“WELCOME_NEW”: “Welcome to …”,
“WELCOME_BACK”: “Welcome back! I …”,
“REPROMPT_1”: “Sorry, I didn’t hear …”,
“REPROMPT_2”: “Sorry, I still didn’t …”,
“IS_FINAL_REPROMPT”: “I’m sorry I’m …”,
“FAREWELLS”: [
“See you at our next meetup!”,
“Thanks for hanging out, talk to you soon!”
…
],
}
为每个意图提供文本和语音响应选项,尽管在最初编写时使用的本机语言中并不需要这些。这样,您就可以视需要在 SSML 中改变参数,而无需在每次需要时更改代码。即:
{
“WELCOME_NEW_TEXT”: “Welcome to …”,
“WELCOME_NEW_SPEECH”: “<speech> Welcome to …”,
“WELCOME_BACK_TEXT”: “Welcome back!…”,
“WELCOME_BACK_SPEECH”: “<speech> Welcome back! …”
}
使用支持 i18n 的优秀客户端库
关于 Actions on Google 的 Node.js 客户端库,请查看 https://developers.google.com/actions/localization/fulfillment
如果您使用 JavaScript 和动态翻译文本的字符串格式,请使用 {{{ }}}(三个花括号)来支持特殊字符
如果使用 Actions on Google 的 Node.js 客户端库,您会用到 i18n-node 和异步:使用 i18n-node 时,您需要为每个请求设置语言区域,常用方法是从用户处获取语言区域,然后在中间件中进行设置(中间件 示例 https://github.com/actions-on-google/dialogflow-number-genie-nodejs/blob/master/functions/index.js/#LC57)。但如果需要使用异步,您会遇到与 i18n 形成竞争条件的情况。i18n 的文档只有一个用于设置语言区域的共享全局实例,因此,为确保不会与多个设置冲突语言区域的对话形成竞争条件,不需要使用异步。换言之,当您在处理法语请求时,可能进入一个西班牙语请求,并且覆盖法语请求的语言区域,因为 i18n 处于全局命名空间中。这种情况的解决方法是将 i18n.setLocale() 和 moment.locale() 封装到中间件的 conv.localize() 中,并在每个意图的开头调用它,当您进行任何异步调用时,请查看以下代码:
// Modules needed for localization
const i18n = require(‘i18n’);
const moment = require(‘moment’);// Configuration of i18n
i18n.configure({
directory: path.join(__dirname, ‘/locales’),
objectNotation: true,
fallbacks: {
‘it-IT’: ‘it’,
‘es-MX’: ‘es’,
‘de-DE’: ‘de’,
‘pt-BR’: ‘pt’,
‘ja-JP’: ‘ja’,
},
});app.intent(‘intent name’, async (conv) => {
conv.localize();
//do thing
if (something) {
variable = await function(parameters);
conv.localize();
}
}app.middleware((conv) => {
conv.localize = () => {
i18n.setLocale(conv.user.locale);
moment.locale(conv.user.locale);
};
});
在操作控制台中测试您的操作
请人来听每种语言的 TTS 以修正语法,然后使用 SSML 使语音听起来更加自然。即:
{
“FALLBACKPROMPT_2_TEXT”: “Sorry, I still didn’t get that. I can tell you about the GDG or when our next event is, or if you’re finished just say ‘goodbye’.”,
“FALLBACKPROMPT_2_SPEECH” : “Sorry, I still didn’t get that. I can tell you about the GDG, or when our next event is. Or, if you’re finished just say ‘goodbye’.”,
}
如需详细了解如何修改您的 TTS,请查看《使用对话设计师博客构建操作的 5 个提示》(https://medium.com/google-developers/5-tips-from-building-an-action-with-a-conversation-designer-ac8ec6bfff6a)
想要操作本地化的分步指南?请查看 国际化 — 将您的操作本地化。该指南会指引您完成针对使用 Dialogflow 和 fulfillment 的操作的本地化。当您在面向更大的用户受众执行操作本地化时,希望这些提示能够对您有所助益!
更多 AI 相关阅读: