Android多语言环境下如何为应用操作配置多触发短语?
Android多语言环境下如何为应用操作配置多触发短语?
嘿,看起来你正在给你的工时表应用做多语言的语音触发配置,这个需求真的很贴心!我来一步步帮你搞定:
第一步:搞定触发短语的本地化存储
要让不同语言的用户说出对应短语都能触发操作,首先得把这些短语按语言存到本地化资源里:
- 在你的项目
res目录下,为需要支持的语言创建对应的values-xx文件夹,比如values-zh-rCN对应简体中文、values-es对应西班牙语。 - 每个语言文件夹里创建
strings.xml,把触发短语对应翻译好。比如:
默认英语的res/values/strings.xml:
简体中文的<resources> <string name="voice_cmd_clock_in">clock-in</string> <string name="voice_cmd_clock_in_timesheet">clock-in with timesheet</string> <string name="voice_cmd_start_work">start work</string> </resources>res/values-zh-rCN/strings.xml:
系统会根据用户的设备语言自动加载对应的短语。<resources> <string name="voice_cmd_clock_in">打卡</string> <string name="voice_cmd_clock_in_timesheet">打开工时表打卡</string> <string name="voice_cmd_start_work">开始工作</string> </resources>
第二步:补全Intent Filter并关联语音触发
你之前的Intent Filter没写完,先把它补全,用来处理自定义URL跳转:
<intent-filter> <action android:name="android.intent.action.VIEW" /> <!-- 必须添加这两个category才能让外部调用生效 --> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <!-- 定义你的自定义URL协议,比如用timesheetapp://clockin作为触发地址 --> <data android:scheme="timesheetapp" android:host="clockin" /> </intent-filter>
接下来要把语音助手和这个Intent关联起来,通过App Actions实现:
- 在
res/xml目录下创建actions.xml,引用咱们本地化好的短语作为触发词:
<actions> <action intentName="android.intent.action.VIEW"> <!-- 对应咱们定义的自定义URL --> <parameter android:name="url" android:value="timesheetapp://clockin" /> <fulfillment android:url="timesheetapp://clockin" /> <!-- 这里直接引用本地化的触发短语,自动适配语言 --> <queryPatterns> <queryPattern android:pattern="@string/voice_cmd_clock_in" /> <queryPattern android:pattern="@string/voice_cmd_clock_in_timesheet" /> <queryPattern android:pattern="@string/voice_cmd_start_work" /> </queryPatterns> </action> </actions>
- 最后在
AndroidManifest.xml的<application>标签里声明这个配置文件,让系统识别:
<meta-data android:name="android.app.actions" android:resource="@xml/actions" />
最后测试和小提醒
- 测试时切换设备的系统语言,用对应语言说出触发短语,看看是否能成功唤起你的应用并触发打卡操作。
- 不同语音助手(比如Google Assistant、小爱同学)的适配细节可能略有不同,但核心的本地化思路是一致的——把短语按语言存在资源文件里。如果是第三方助手,可能需要去对应平台额外配置,但基础逻辑不变。
备注:内容来源于stack exchange,提问作者Robin Dijkhof
相关产品推荐
相关产品推荐

