你好,我正在用php构建一个multilenguaje应用程序,这是我第一次处理multilenguaje,我试图这样做。
以月为例
我有一个表"月"与id | month
结构
在users表中我有id | username | month_id
我的猜测(错误的猜测)是,我可以保存例如$january直接在数据库上,所以在PHP中,当它被调用时,它寻找定义的变量。
$january = "一月";如果我在西班牙语网站上,我把这个改成$january = "Enero";
,但这不起作用(显然是因为它作为调用$january的结果打印,它在数据库中保存为$january)
对于我想做的事情,最好的方法是什么?因为我迷失在这一点上…我在数据库中需要这个结构有很多原因,我现在就不提了,谢谢!
My code
This $row2['months']
打印此$january
即使在php代码中我已经设置了$january = "enero";
你应该重新考虑你的策略。
的例子:
对于10种语言,如果您保留10个php文件来定义月份名称或实际上所有语言区域设置单词,这将是足够的,您可以在不干扰数据库的情况下包含它们。
<?php
// this is words_en.php, you can make another like words_de.php etc.
$months = array('january','february','march','april'....etc );
?>
如果您的语言环境文件结构一致,例如:
$msgs = array(
'MSG1'=>'first message',...
}
在代码和数据库中只保留引用(如' msg1 ')就足够了。在这几个月里,您可以将它们与$msg分开,因为它们的用途是特定的,并且数字索引为它们的情况增加了编码的一致性。
注意,这不是语言区域设置的唯一方法,但这是一个易于维护的版本。
您应该在表中保存用户的语言环境,例如en_US
,并在此值的基础上进行进一步的翻译,并返回到默认语言
要让php计算该变量,您需要做的是eval:
$january='Enero';
$row='$january';
echo $row; //Prints $january
echo PHP_EOL;
echo eval("return ".$row.";"); //Prints Enero
这是在ideOne: http://ideone.com/f0LCT0