我想以多种语言提供我的网站。
这两种做法的女巫会是最好的吗?
$TEXT01 = 'Hello'; $TEXT02 = 'Goodbye';
<?php echo $TEXT01; ?> Marie
。translator
,其中包含我需要翻译的每个文本的数组。<?php echo translator('Hello', 'en'); ?> Marie
。感谢。
答案 0 :(得分:1)
一种快速的方法是使用内存数据库。
也许首先构建您的数据文件,例如:
<强> en_US.csv 强>
hello_customer;Hello dear customer;
special_price;Special Price;
<强> fr_FR.csv 强>
hello_customer;Bonjour cher client;
special_price;Prix spécial;
...
然后安装并配置redis
(内存数据库中的键/值)。
获取扩展名(例如php:https://code.google.com/p/phpredis/)
现在构建一个脚本来填充redis数据库。也许是这些方面的东西:
<?php
$csv_path = 'path/to/csv/files';
function redis_import($f_name){
$handle = @fopen($f_name, "r");
$redis = new Redis();
$lang = explode('.', basename($f_name))[0];
if ($handle) {
$redis->connect('127.0.0.1', 6379);
while (($buffer = fgets($handle, 4096)) !== false) {
list($key, $value) = explode(';', trim($buffer));
$redis->set($lang.'.'.$key, $val);
}
if (!feof($handle)) {
echo "Erreur: fgets() a échoué\n";
}
fclose($handle);
}
}
if ($handle = opendir($csv_path)) {
while (false !== ($entry = readdir($handle))) {
if (!is_dir($entry)) {
redis_import($csv_path.PATH_SEPARATOR.$entry);
}
}
closedir($handle);
}
因此,每当修改csv文件时,请启动此脚本以填充数据库。
然后,您需要在脚本中使用一个函数来获取语言数据。
您可以使用会话来存储用户语言。假设你使用$_SESSION['user.lang']
这样做,你可以制作这样的东西:
function __translate($key){
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$translation = $redis->get($_SESSION['user.lang'] . $key);
$redis->close();
return $translation;
}
这个解决方案非常快,只有内存访问,并且仍然使用csv文件,真正的数据库是安全的,并且易于人工访问。
答案 1 :(得分:-1)
查看像Smarty这样的模板引擎,他们提供包含缓存的功能: http://www.smarty.net/