对于数据验证返回消息的多语言处理

#1 虞飞

近日在开发一个项目,依然拿我心爱的SpeedPHP开发。开发中,碰到如下问题:
1、如何实现返回消息的翻译,即根据不同语言的设置进行不同的翻译。
2、如何实现对返回消息的变量进行处理。例如maxlength的验证,在单语言环境下,一般会这样返回信息“XX的最大长度不能超过YYY个字符”。

第一个问题我已经初步解决,方法是建立多语言的字典文件,然后用SpController的setLang、getLang方法进行语言环境的设置和提取,然后在SpModel里面的checkrules方法中添加
spController::getLang();
来获取语言环境变量。
将原来的
$this->messages[$rkey][] = (isset($this->verifier["messages"][$rkey][$rule])) ? $this->verifier["messages"][$rkey][$rule] : $rule; 
加上T函数,改成
$this->messages[$rkey][] = (isset($this->verifier["messages"][$rkey][$rule])) ? T($this->verifier["messages"][$rkey][$rule]) : T($rule);
但这样就造成了第二个问题,字典文件里无法处理变量。类似
XX的最大长度不能超过YYY个字符
里的XX和YYY就无法处理了。不知道有什么好的方法解决没有




2013-01-06 09:24:55

#2 jake

按一般软件系统多语言惯例做法,任何一个提示都会在字典存在翻译,比如说:
一个提示是:不能超过10字符,
另一个提示是:不能超过12字符,

在字典里面,应该是两个翻译对比。

所以多语言字典是很大的,马虎不得。

2013-01-06 18:17:55

#3 虞飞

嗯,我就是想懒一点,最后还是和jake说的一样,一个提示一条信息了。还好我做的东西不大,一种语言的提示也就是一百多条记录。

2013-01-09 00:59:09