[英]Best way to manage text displayed to users in PHP
好的,可以肯定的是,已经有人问过并回答了这个问题,但是我不知何故找不到合适的教程。 我想让文本显示给其他地方的用户,并防止我的代码变得太大和不可读。 我的网站不会被国际化。 我只想拥有某种具有键值结构的文件,然后从那里获取文本。 我想将文本保留在文件中,而不是像某些教程所建议的那样保留在数据库中。 我找到了一个可行的解决方案,但是我不确定这是否是一个好方法。 我正在考虑使用parse_ini_file并将文本保存在.ini文件中。 这种方法有什么问题吗? 你能提出更好的建议吗?
我将所有语言数据放入数组中。 它很容易,我们也可以添加多语言支持
lang / en.php
<?php
return array(
'index' => 'Homepage',
'feedback' => 'Feedback'
'logout' => 'Logout from profile',
)
?>
lang / ru.php
<?php
return array(
'logout' => 'Выйти из профиля',
)
?>
然后,我们可以加载语言:
$lang = include('lang/en.php');
if(isset($_GET['lang']))
{
$lang = array_merge($lang, include('lang/ru.php'));
}
毕竟$ lang看起来像:
Array
(
[index] => Homepage
[feedback] => Feedback
[logout] => Выйти из профиля
)
我们可以非常简单地使用它:
function __($name) {
global $lang;
return $lang[$name];
}
网站模板中的某个位置:
...
<title><?=__('index')?></title>
</head>
<body>
<?=__('feedback')?>
为什么不使用带逗号或不常见字符的纯文本文件来保存此数据? 您可以读取它并将其解析为一个数组
$file = file_get_contents("/path/to/file");
$lines = explode('\r', $file);
foreach($lines as $line) $message[substr($line, 0, strpos($line, ','))] = substr($line, strpos($line, ','));
那么您应该有一个像$messages[3] = "No soup for you!";
的数组$messages[3] = "No soup for you!";
该文件可能如下所示:
1,The site is down.
2,Try again.
3,No soup for you!
4,Signs point to yes.
(我可能在这些函数中放错了一些参数-我总是忘记了哪个是针,哪个是干草堆。)
我喜欢lang / en.php文件的答案。 但是我不是为每种语言提供文件,而是为每个网页(或类等)使用文件。 这样可以减小文件大小,并创建3D数组:
`return array(“ EN” => array(“ title” =>“ Welcome-早安”,...),“ TG” => array(“ title” =>“ Mabuhay-Magandang Umaga Po”,.. ));'
也很容易添加新的语言字符串...
这对于语言翻译承包商来说非常容易,因为他们可以在1个编辑器中看到与外国人非常接近的母语,
您可以在脚本中处理数据。 在此脚本中,您调用某个来源(例如,您建议的ini文件)。 然后,您使用模板引擎。 对于此引擎,您指向模板文件,并为模板提供所有变量。
模板生成html并将变量插入正确的位置。 这样,您可以使php(业务逻辑)代码保持干净,远离演示文稿(模板)。 您也可以在一个文件中管理变量(ini / xml,但这可以完全不同)。
对于模板引擎,Smarty是最著名的。 还有纯基于php的模板系统,只有Google可以为他们找到适合您需求的模板系统。
我喜欢这样:
$defaultLang = array('Home','Logout',etc)
$otherLang=array( 'ru' => array('Home_in_ru','logout_in_ru',etc);
您这样翻译:
echo translate('Home');
功能是:
function translate($msg) {
if ($_GET['lang']=='en')
return $msg;
return $otherLang[$_GET['lang']][array_search($msg,$defaultLang)];
}
//注意,该函数在此处已简化
如您所见,默认情况下deosnt需要加载任何内容或执行任何操作,该函数只是返回传递的参数
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.