我自己在写项目的时候,不喜欢使用php自身的模板,主要是各种PHP标签让我烦,而且对Html的标签兼容也不够友好,所以我后面采用了twig模板,配置之类的也是很方便,写起来也很顺手,但是在Yii2语言国际化翻译这块就遇到了坑,当我们指定文件类型,除了处理php扩展的之外,也处理twig扩展的文件的时候,就不会解析twig中的内容,因为不符合PHP的标签处理逻辑,在PHP中我们使用Yii::t(),但是在twig中使用的是Yii.t()这个函数在translator的配置中,显得很乏力,而且看源码也可以发现,实际上也只处理php文件,网上找了很多针对这个问题的处理方式,似乎也没有几个使用的。现在看下我是如何解决的
第一步 显示修改i18n配置
将twig扩展加入进去,修改后如下:
第二步 继承重写
创建文件app/commands/TranslatorController.php,内容如下
从上面的代码可以看出,实现了两个方法
和
本来是不需要实现这个方法的,但是父类中的private,试过了实例化类,但是需要传递需要的参数,为了避免出现问题,暂时没用实例化的方式。
最后 这个只是父类的copy版本。那么重点就在
判断如果文件是twig文件,则进行处理,处理逻辑我写的也很简单,暂时能解决问题
主要是将Yii.t转为了含有PHP标签的字符串,实际上父类也只是针对代码进行字符串的过滤处理,以此类推的话,如果有其他模板的话也可以采用此方法
到这里就处理完了,
但是执行的命令不是下面这个
而是下面这个
OK,问题解决,如您有其他方案,请指教
如果本文对你有帮助?请分享给更多人
领取专属 10元无门槛券
私享最新 技术干货