管理PHP中向用户显示的文本的最佳方法

时间:2011-02-20 14:30:17

标签: php message ini

确定已经有人问过并已经回答了,但是我找不到合适的教程。 我希望将文本显示给其他地方的用户,以防止我的代码变得太大而且不可读。 我的网站不会国际化。我只想拥有一些带键值结构的文件并从中获取文本。我希望将文本保存在文件中,而不是像某些教程所建议的那样保存在数据库中。 我找到了一个可行的解决方案,但我不确定这是否是一个好方法。 我正在考虑使用parse_ini_file并将我的文本保存在.ini文件中。这种方法有问题吗?你能提出更好的建议吗?

5 个答案:

答案 0 :(得分:6)

我把所有语言数据放在数组中。它很简单,我们也可以添加多语言支持

<强>郎/ en.php

<?php 
 return array(  
   'index' => 'Homepage',
   'feedback' => 'Feedback'
   'logout' => 'Logout from profile',
 )
?>

<强>郎/ 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')?>

答案 1 :(得分:1)

为什么不使用逗号或一些不常见字符的纯文本文件来保存这些数据?你可以阅读它并用

将其解析成一个数组
$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!";

这样的数组

文件可能如下所示:

1,The site is down.
2,Try again.
3,No soup for you!
4,Signs point to yes.

(我可能在这些函数中放错了一些参数 - 我总是忘记哪个是针,哪个是干草堆。)

答案 2 :(得分:0)

您可以在脚本中处理数据。在此脚本中,您可以调用某个源(例如您建议的ini文件)。然后使用模板引擎。对于此引擎,您指向模板文件并为模板提供所有变量。

模板生成html并在正确的位置插入变量。这样,您可以保持php(业务逻辑)代码干净,远离演示文稿(模板)。您也可以在一个文件中管理变量(ini / xml,但这可能完全不同)。

对于模板引擎,Smarty是最知名的。还有纯粹的基于php的模板系统,只有Google才能找到适合您需求的模板系统。

答案 3 :(得分:0)

我喜欢这个:

$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'需要加载任何东西或做任何操作,该函数只返回传递的参数

答案 4 :(得分:0)

我喜欢lang / en.php文件的答案。但是我没有为每种语言使用文件,而是为每个网页(或类等)使用一个文件。这样可以降低文件大小,并创建一个3D数组:

`返回数组(&#34; EN&#34; =&gt;数组(&#34;标题&#34; =&gt;&#34;欢迎 - 早安&#34;,......),            &#34; TG&#34; =&GT;数组(&#34;标题&#34; =&gt;&#34; Mabuhay - Magandang Umaga Po&#34;,...)     );&#39;

真的很容易添加新的语言字符串......

这使语言翻译承包商变得非常容易,因为他们可以在1个编辑器中看到与外国人非常接近的母语,