在 Yii 2.0 中实现国际化,翻译英文描述中的一部分为中文描述(微信接口返回的英文信息)
1、在请求微信接口时,返回码:45028,返回的英文信息:has no masssend quota rid: 6103df2e-1505ba73-0eb14e1c。如图1
1 2 3 4 | { "errcode": 45028, "errmsg": "has no masssend quota rid: 6103df2e-1505ba73-0eb14e1c" } |
2、代码实现如下
1 2 3 4 5 | $responseData = $wxServiceApi ::wxMessageSendAll( $requestData ); if (!isset( $responseData [ 'msg_id' ])) { $errcode = array_key_exists ( 'errcode' , $responseData )? $responseData [ 'errcode' ]:205100; throw new ServerErrorHttpException(Yii::t( 'error' , Yii::t( 'error' , Yii::t( 'error' , '205100' ), [ 'error_code' => $errcode , 'error_msg' => $responseData [ 'errmsg' ]])), 205100); } |
3、计划将错误信息:has no masssend quota rid: 6103df2e-1505ba73-0eb14e1c 翻译为:没有群发配额。rid: 6103df2e-1505ba73-0eb14e1c。如图2
4、添加文件 common/messages/en-US/wx.php、common/messages/zh-CN/wx.php、wx/messages/en-US/wx.php、wx/messages/zh-CN/wx.php。如图3
common/messages/en-US/wx.php
1 2 3 | <?php return [ ]; |
common/messages/zh-CN/wx.php
1 2 3 4 5 | <?php return [ 'has no masssend quota' => '没有群发配额(订阅号为每天 1 次,服务号为每月 4 次)。' , 'invalid content' => '无效内容(内容中包含音频)。' , ]; |
wx/messages/en-US/wx.php
1 2 3 4 5 | <?php $commonMessages = require __DIR__ . '/../../../common/messages/en-US/wx.php' ; $messages = [ ]; return $commonMessages + $messages ; |
wx/messages/zh-CN/wx.php
1 2 3 4 5 | <?php $commonMessages = require __DIR__ . '/../../../common/messages/zh-CN/wx.php' ; $messages = [ ]; return $commonMessages + $messages ; |
5、代码实现如下。其中代码:substr($responseData[‘errmsg’], 0, $pos) 的结果为:has no masssend quota。其中代码:substr($responseData[‘errmsg’], $pos) 的结果为: rid: 6103df2e-1505ba73-0eb14e1c。将:has no masssend quota 翻译为:没有群发配额。后,再拼接上: rid: 6103df2e-1505ba73-0eb14e1c。
1 2 3 4 5 6 7 | $responseData = $wxServiceApi ::wxMessageSendAll( $requestData ); if (!isset( $responseData [ 'msg_id' ])) { $errcode = $responseData [ 'errcode' ] ?? 205100; $pos = strpos ( $responseData [ 'errmsg' ], ' rid:' ); $errorMsg = Yii::t( 'wx' , substr ( $responseData [ 'errmsg' ], 0, $pos )) . substr ( $responseData [ 'errmsg' ], $pos ); throw new ServerErrorHttpException(Yii::t( 'error' , Yii::t( 'error' , Yii::t( 'error' , '205100' ), [ 'error_code' => $errcode , 'error_msg' => $errorMsg ])), 205100); } |
6、针对返回的英文信息:invalid content hint: [pzRHda0286d228] rid: 61041ffe-5cefd269-6c9611ff,完善后的代码如下。根源在于源语言的消息不支持模糊匹配。
1 2 3 4 5 6 7 8 9 10 11 12 13 | $responseData = $wxServiceApi ::wxMessageSendAll( $requestData ); if (!isset( $responseData [ 'msg_id' ])) { $errcode = $responseData [ 'errcode' ] ?? 205100; $errorMsg = '' ; $pos = strpos ( $responseData [ 'errmsg' ], ' hint:' ); if ( $pos === false) { $pos = strpos ( $responseData [ 'errmsg' ], ' rid:' ); } if ( $pos !== false) { $errorMsg = Yii::t( 'wx' , substr ( $responseData [ 'errmsg' ], 0, $pos )) . substr ( $responseData [ 'errmsg' ], $pos ); } throw new ServerErrorHttpException(Yii::t( 'error' , Yii::t( 'error' , Yii::t( 'error' , '205100' ), [ 'error_code' => $errcode , 'error_msg' => $errorMsg ])), 205100); } |
7、测试翻译结果,has no masssend quota rid: 610a50c5-26966176-7cceb46e 已经被翻译为:没有群发配额(订阅号为每天 1 次,服务号为每月 4 次)。rid: 610a50c5-26966176-7cceb46e。符合预期。如图4
8、测试翻译结果,invalid content hint: [dN7TKA0474d139] rid: 610a5a7a-5907e6c6-270b8278 已经被翻译为:无效内容(内容中包含音频)。 hint: [dN7TKA0474d139] rid: 610a5a7a-5907e6c6-270b8278。符合预期。如图5
9、由于 invalid image size 还未被添加至语言包中,因此:invalid image size hint: [cl_6Oa0457mp13] rid: 6103c6d0-481a4bed-73e7120a 保持原样。符合预期。
1 2 3 4 5 6 | <?php return [ 'has no masssend quota' => '没有群发配额(订阅号为每天 1 次,服务号为每月 4 次)。' , 'invalid content' => '无效内容(内容中包含音频)。' , 'invalid image size' => '图片尺寸太大(大小必须在10MB以下)。' , ]; |
11、测试翻译结果,invalid image size hint: [flp8Ba0298w689] rid: 610a6969-72bb79c0-4b069755 已经被翻译为:invalid image size hint: [flp8Ba0298w689] rid: 610a6969-72bb79c0-4b069755。蓝框中是翻译前的英文信息,红框中是翻译后的中文信息。符合预期。如图6
近期评论