繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM