【问题标题】:Include problems with PHP包括 PHP 的问题
【发布时间】:2018-10-09 12:20:47
【问题描述】:

我需要一点帮助!我正在使用 php 制作多语言网站,但遇到了问题。我想将数组包含到另一个数组中。

只有一个php文件

<?php
$lang = array(
    'en' => array(
        include ('translations/nav-translation/en.php');
    ),
    'lv' => array(
        include ('translations/nav-translation/lv.php');
    ),
);
?>

还有我想要包含的 php 文件

<?php
 "home" => "Home",
 "blog" => "Blog",
 "about" => "About me",
?>

【问题讨论】:

  • 您目前遇到什么问题?你能告诉我们你遇到的错误吗?
  • 您不能以这种方式包含文件
  • @KristersDzintars 我建议创建一个 PHP 函数来检查所选择的语言,一旦你这样做,你加载一个 PHP 文件,其中包含一个名为 text 的数组的内容,这个数组将是正确的文本显示。
  • 我真的建议使用 yaml,然后使用 symfony's yaml 组件读取它们。那么你可以更轻松地将它们组合在一起。
  • include (translations/nav-translation/XX.php) 中应该有引号(如果有的话)。您应该在启用错误报告的情况下收到解析错误。即:include ('translations/nav-translation/XX.php'),在 "about" =&gt; "About me", 的结尾逗号之上。然而,正如约翰所说;那不是如何包含文件。最好的办法是将文件包含在 switch case 中。

标签: php arrays include


【解决方案1】:

如果您不想使用 yaml,最好从 lang 文件中返回数组

en.php:

<?php
 return ["home" => "Home",....]
?>

index.php:

<?php
$lang = array(
    'en' => include("translations/nav-translation/en.php"),
    'lv' => ....

【讨论】:

  • 可能必须做(include '...');它不是一个函数,括号的工作方式也不一样。
  • 如果我想在那个“en”数组中包含更多文件?
  • 事情是这样的,如果你只想为给定的用户加载一组特定于语言的数据,那么用“你得到的一切”加载 $lang 数组是很浪费的。确定所需的语言,检查一种语言是否有与之关联的文件(有备用语言),然后只访问一个所需的文件。
【解决方案2】:

你不能像这样设置你的包含文件吗:

translations/nav-translation/en.php

<?php
    $lang['en'] = array(
        "home" => "Home",
        "blog" => "Blog",
        "about" => "About me"
    );
?>

然后:

<?php
    $lang = array();

    include ('translations/nav-translation/en.php');
    include ('translations/nav-translation/lv.php');

?>

似乎比任何其他建议都简单得多。

【讨论】:

    【解决方案3】:

    要创建多语言 PHP 站点,我建议使用检查用户指定语言的函数,然后从数据库加载文本或使用 JSON。

    使用 JSON

    创建一个带有 .txt 扩展名的文件,以 JSON 格式创建您的翻译并通过 PHP 读取它,以使用 PHP 读取文件:

    $json = json_decode(file_get_contents($file),TRUE);
    

    然后您可以使用 JSON 数据在 PHP 中设置变量以显示正确的语言。

    使用数据库

    您的数据库设置如下:

       ---------------------------
       Lang   |   Short   |   Text
       ---------------------------
    

    在你的数据库中,根据需要设置任意多的语言,在 lang 列中有语言名称的两个字母缩写,缩写应该是文本的名称,所以如果是主页标题,名称简短的home-title,然后文本应该是您希望以所需语言显示的文本。

    使用数据库将允许您通过数据库添加/编辑语言和翻译。

    【讨论】:

    • 感谢您的建议!将尝试使用 db。这是我第一次打赌。 :)
    【解决方案4】:
    $path = 'translations/nav-translation';
    $user_lang = 'nl';  // determine what the user actually wants
    $fallback_lang = 'en';
    if (file_exists("{$path}/{$user_lang}.php")) {
        include ("{$path}/{$user_lang}.php");
    } else {
        include ("{$path}/{$fallback_lang}.php");  // nominate a default
    }
    

    在语言文件(例如translations/nav-translation/en.php)中,提供一个完整的关联数组:

    $lang = [
        "home" => "Home",
        "blog" => "Blog",
        "about" => "About me"
    ];
    

    然后,在条件包含调用后返回原始文件,您可以引用 $lang['home'][cringe] 使用 extract()* 生成像 $home 这样的变量。

    *注意,我从来没有在我的任何项目中使用过extract(),使用它存在风险——我只是说你可以

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-22
      • 1970-01-01
      • 2011-09-17
      • 1970-01-01
      • 2011-04-08
      • 2015-08-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多