【问题标题】:Best way to manage text displayed to users in PHP在 PHP 中管理向用户显示的文本的最佳方法
【发布时间】:2011-02-20 14:30:17
【问题描述】:

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

【问题讨论】:

  • 你的问题没有特定的原因,只是心血来潮。为什么不想将文本保存在数据库中?这些文本是什么?菜单项?错误信息?页面内容?

标签: php message ini


【解决方案1】:

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

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')?>

【讨论】:

  • 谢谢我喜欢这种方法。这是最简单的解决方案,不应过多影响性能。 @aSeptik - 我想避免在我的代码中包含太多文本。我想保持它尽可能干净整洁,因为我正在做的项目不断变化并且变得越来越大,而且他们经常希望我更改一些文本,这样我就可以更轻松地将文本显示给用户在单独的资源文件中。
【解决方案2】:

为什么不使用带有逗号或一些不常见字符的纯文本文件来保存这些数据?您可以读取它并将其解析为数组

$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.

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

【讨论】:

    【解决方案3】:

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

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

    对于模板引擎,Smarty 是最知名的。也有纯基于 php 的模板系统,只需 Google 让他们找到适合您需要的。

    【讨论】:

      【解决方案4】:

      我喜欢这样:

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

      【讨论】:

        【解决方案5】:

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

        `return array("EN" => array("title" => "Welcome - Good Morning", ...), "TG" => array("title" => "Mabuhay - Magandang Umaga Po", ...) );'

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

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

        【讨论】:

          猜你喜欢
          • 2011-01-04
          • 1970-01-01
          • 2016-07-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-11
          • 2012-04-08
          • 1970-01-01
          相关资源
          最近更新 更多