Symfony 2的中文支持很好,实际上也没有什么特殊之处,如果能遵循最佳实践,不会出现任何问题。
首先是PHP的charset,SF2默认采用的就是UTF-8:
- 2.0分支的默认配置(/app/config/config.yml)是UTF-8。
- 2.1分支索性去掉了这个配置项,如果不打算采用UTF-8,需要在AppKernel里重载getCharset()方法来指定。
然后是各类数据源的字符集,如关系型数据库,NoSQL,外部数据文件等:
- 如果用Doctrine或者Propel等第三方库,都有相应的参数,Doctrine默认是UTF-8。
- 如果自己做数据接口封装,拿MySQL来举例,建表需要确认数据库字符集为UTF-8,创建连接时也需要指定字符集;外部文件如csv等,需要自己做转换后进行操作;较新的NoSQL一般都默认用UTF-8,所以不用操心。
视图层:
- 如果你把语言项全部写在模板里,需要保证模板文件的编码(也可以视作外部数据文件)是正确的。
- 如果输出HTML或其他标记语言内容,还需要确保在语义上也指定了正确的字符集(如HTML的charset)。
- 如果用SF2自带的Translations模块(可以用yaml,xml或gettext),需要指定正确的locale。
总结地说,就是要确保所有的代码文件和运行参数都是相同的编码(UTF-8)。
至于确保代码文件都是正确的字符集,用VCS的hook可以很好的处理,比如在提交文件时检查文件的字符集(pre-commit),如果不正确,则拒绝提交。