存储字符串模板

Joh*_*ith -3 php

模板字符串.

这个链接可能有点帮助: PHP有像Python的模板字符串这样的功能吗?

什么我的主要问题是,是要知道是否有更好的方式存储文本字符串.

现在,这通常是通过一个文件夹(DIR)大量具有不同字符串的单个独立文件来完成的,并且根据可能需要的内容,获取一个文件的内容,处理并用替换{tags}.

或者,最好在一个文件数组[]中定义所有这些内容吗?

greetings.tpl.txt

['welcome'] = 'Welcome {firstname} {lastname}'.
['good_morning'] = 'Good morning {firstname}'.
['good_afternoon'] = 'Good afternoon {firstname}'.
Run Code Online (Sandbox Code Playgroud)

这是另一个例子,https://github.com/oren/string-template-example/blob/master/template.txt

Thx提前!

包含解决方案的答案,声明应该使用include("../ file.php"); 从来没有接受过这里.一个解决方案,演示如何将已定义字符串的LIST读入数组.该定义已基于数组.

t1g*_*gor 5

要向模板添加值,您可以使用strtr.示例如下:

$msg = strtr('Welcome {firstname} {lastname}', array(
    '{firstname}' => $user->getFistName(),
    '{lastname}' => $user->getLastName()
));
Run Code Online (Sandbox Code Playgroud)

关于存储字符串,您可以为每种语言保存一个数组,然后只加载相关的数组.例如,你将拥有一个包含2个文件的目录:

  • 语言
    • en.php
    • de.php

每个文件应包含以下内容:

<?php

return (object) array(
    'WELCOME' => 'Welcome {firstname} {lastname}'
);
Run Code Online (Sandbox Code Playgroud)

当您需要翻译时,您可以执行以下操作:

$dictionary = include('language/en.php');
Run Code Online (Sandbox Code Playgroud)

然后字典会有一个你可以解决的对象.更改上面的示例,它将是这样的:

$dic = include('language/en.php');
$msg = strtr($dic->WELCOME, array(
    '{firstname}' => $user->getFistName(),
    '{lastname}' => $user->getLastName()
));
Run Code Online (Sandbox Code Playgroud)

为避免在字典中没有模板时出现这种情况,可以使用带有默认文本的三元运算符:

$dic = include('language/en.php');
$tpl = $dic->WELCOME ?: 'Welcome {firstname} {lastname}';
$msg = strtr($tpl, array(
    '{firstname}' => $user->getFistName(),
    '{lastname}' => $user->getLastName()
));
Run Code Online (Sandbox Code Playgroud)

人们通常做什么来编辑db中的文本,你可以有一个简单的导出(例如var_export)脚本来从db同步到文件.

希望这可以帮助.