模板字符串.
这个链接可能有点帮助: PHP有像Python的模板字符串这样的功能吗?
什么我的主要问题是,是要知道是否有更好的方式存储文本字符串.
现在,这通常是通过一个文件夹(DIR)和大量具有不同字符串的单个独立文件来完成的,并且根据可能需要的内容,获取一个文件的内容,处理并用值替换{tags}.
或者,最好在一个文件数组[]中定义所有这些内容吗?
greetings.tpl.txt
['welcome'] = 'Welcome {firstname} {lastname}'. ['good_morning'] = 'Good morning {firstname}'. ['good_afternoon'] = 'Good afternoon {firstname}'.
这是另一个例子,https://github.com/oren/string-template-example/blob/master/template.txt
Thx提前!
包含解决方案的答案,声明应该使用include("../ file.php"); 从来没有接受过这里.一个解决方案,演示如何将已定义字符串的LIST读入数组.该定义已基于数组.
要向模板添加值,您可以使用strtr
.示例如下:
$msg = strtr('Welcome {firstname} {lastname}', array( '{firstname}' => $user->getFistName(), '{lastname}' => $user->getLastName() ));
关于存储字符串,您可以为每种语言保存一个数组,然后只加载相关的数组.例如,你将拥有一个包含2个文件的目录:
语言
en.php
de.php
每个文件应包含以下内容:
'Welcome {firstname} {lastname}' );
当您需要翻译时,您可以执行以下操作:
$dictionary = include('language/en.php');
然后字典会有一个你可以解决的对象.更改上面的示例,它将是这样的:
$dic = include('language/en.php'); $msg = strtr($dic->WELCOME, array( '{firstname}' => $user->getFistName(), '{lastname}' => $user->getLastName() ));
为避免在字典中没有模板时出现这种情况,可以使用带有默认文本的三元运算符:
$dic = include('language/en.php'); $tpl = $dic->WELCOME ?: 'Welcome {firstname} {lastname}'; $msg = strtr($tpl, array( '{firstname}' => $user->getFistName(), '{lastname}' => $user->getLastName() ));
人们通常做什么来编辑db中的文本,你可以有一个简单的导出(例如var_export
)脚本来从db同步到文件.
希望这可以帮助.