PHP开发Google Assistant Webhook:如何将月份改为意大利语
解决Google Assistant Fulfillment中PHP月份显示意大利语的问题
我来帮你搞定这个问题!你遇到的核心卡点是PHP的date()函数完全不遵循setlocale()设置的区域规则——它不管你怎么配置locale,始终输出英文的日期格式。要让月份显示成意大利语,你需要做这几个调整:
1. 替换date()为strftime()
strftime()是PHP里真正受locale控制的日期格式化函数,它会根据你设置的区域规则输出对应语言的日期文本。把你代码里的这一行:
$oggi = date( "d F", strtotime($giorno) );
改成:
$oggi = strftime( "%d %B", strtotime($giorno) );
注意这里的格式符是%d(两位日期)和%B(完整月份名称),和date()的格式符不一样,别搞混了。
2. 确保服务器安装了意大利语locale包
有时候setlocale()不生效,是因为服务器上根本没有安装对应的意大利语区域包。你可以通过SSH登录服务器,执行locale -a命令,看看输出里有没有it_IT.utf8或者it_IT:
- 如果是Debian/Ubuntu系统,安装命令是:
sudo apt-get install language-pack-it - 如果是CentOS/RHEL系统,安装命令是:
sudo yum install glibc-langpack-it
3. 增强setlocale的生效稳定性
有些环境下直接调用setlocale()可能因为环境变量问题不生效,你可以先设置环境变量再调用:
putenv('LC_TIME=it_IT.utf8'); setlocale(LC_TIME, 'it_IT.utf8', 'ita');
修改后的完整代码
header( 'Access-Control-Allow-Headers: *' ); header( 'Access-Control-Allow-Origin: *' ); header( "Access-Control-Allow-Credentials: true" ); header( 'Content-Type: application/json' ); $postdata = file_get_contents( "php://input" ); $input = json_decode( $postdata, true ); // 先设置环境变量再调用setlocale putenv('LC_TIME=it_IT.utf8'); setlocale (LC_TIME, 'it_IT.utf8','ita'); $intent = $input[ 'queryResult' ][ 'intent' ][ 'displayName' ]; $giorno = $input[ 'queryResult' ][ 'parameters' ][ 'giorno' ]; $guest = $input[ 'queryResult' ][ 'parameters' ][ 'guest' ]; $telefono = $input[ 'queryResult' ][ 'parameters' ][ 'telefono' ]; $tempo = $input[ 'queryResult' ][ 'parameters' ][ 'time' ][ 0 ]; $nome = $input[ 'queryResult' ][ 'parameters' ][ 'nome' ]; // 用strftime替换date $oggi = strftime( "%d %B", strtotime($giorno) ); echo "{ 'fulfillmentText': 'Grazie " . $nome . ", ti confermo la tua prenotazione per ".$guest." persone alle ore " . substr( $tempo, -14, 5 ) . " del giorno " . $oggi . ".', 'fulfillmentMessages': [ {'text': {'text': ['Grazie " . $nome . ", ti confermo la tua prenotazione per ".$guest." persone alle ore " . substr( $tempo, -14, 5 ) . " del giorno " . $oggi . ".'] }}], 'source':'webhook' }";
这样修改之后,Google Assistant返回的月份就应该是意大利语的了。如果还是不行,先检查服务器的locale包有没有安装到位,这是最常见的坑。
内容的提问来源于stack exchange,提问作者DigitalXP
相关产品推荐
相关产品推荐

