如何在php中为语言术语定义函数

如何在php中为语言术语定义函数,php,string,function,variables,Php,String,Function,Variables,我有一个语言功能(就像Wordpress和其他CMSE所拥有的系统)可以将定义语言中的术语重新运行为 function lang($term) { include "language/cn.php"; if(!empty($tans[$term])) {$translatedterm=$tans[$term];} else { $translated = $term;} return $translated; } 问题是我想提供在菜单上选择语言的选项,因为人们可以更改语言。为此,我需要为每

我有一个语言功能(就像Wordpress和其他CMSE所拥有的系统)可以将定义语言中的术语重新运行为

function lang($term) {
include "language/cn.php"; 
if(!empty($tans[$term])) {$translatedterm=$tans[$term];} 
else { $translated = $term;}
return $translated;
}
问题是我想提供在菜单上选择语言的选项,因为人们可以更改语言。为此,我需要为每种语言更新“include'language/cn.php'”的值。应该是
包含“language/$language.php”
$language
是来自菜单选择的字符串,不在函数范围内。您知道如何根据所选语言更改函数中的语言文件吗?

您正在执行以下操作:

include 'language/$language.php';
这是行不通的,因为当字符串被双引号引用时,PHP只解释字符串内的变量。在这里,它将只接受您指定的字符串,而不转换变量名

您可以将变量置于字符串之外,如下所示:

include 'language/' . $language.php;
或者对字符串使用双引号,如下所示:

include "language/{$language}.php";
(在此上下文中,变量名周围的大括号是可选的,但建议使用)

这两种情况都会导致在包含文件之前将
$language
转换为所需的值


希望有帮助。

在处理语言选择表单的代码中,您可以在会话中存储所选语言:

$allowed_languages = array('en', ...);
if (array_key_exists($_POST['language'], $allowed_languages)) {
    $_SESSION['language'] = $_POST['language'];
}
然后,在此函数中,从会话中提取语言(如果可用):

function lang($term) {
    $language = isset($_SESSION['language']) ? $_SESSION['language'] : 'en';
    require_once 'language/' . $langauge . '.php';
    // ...
}

你打算为每个学期都包括翻译文件吗

将翻译文件加载一次安全

function lang($term) {
  static $trans;
  if (!$trans) {
    global $language; // seems the problem as silly as this
    $langfile = "language/".basename($language).".php";
    if (!is_readable($langfile)) {
      $langfile = "language/default.php";
    }
    include $langfile;
  }

  return (empty($trans[$term]))?$term:$trans[$term];
}

根据Alex Howansky给出的提示,最终的解决方案是使用php变量,如$\u seision、$\u GET、$\u POST等。这些变量可以在函数中使用。但是,由于函数有自己的作用域,函数外部的静态字符串不能在函数内部读取。

这是编写代码时的一个输入错误。问题是php没有在函数中引入字符串。啊,对了。在这种情况下,要么传递它,要么使用全局函数(参见PHP手册),这是一个很好的观点$_会话可以在函数的范围内使用。这应该是一个微妙的解决方案。使用_SESSION还可以解决用户选择的$language值在不同页面之间持久化的问题……并使它无法为google索引其他语言。真聪明。我根据你的想法为这个问题添加了一个清晰的答案。再次感谢!我为这个问题挣扎了好几天,并在几个论坛上进行了讨论。这种微妙的方法:)没有“菜单选择”PHP语句。你能确定这个变量的来源吗?我的意思是从网站菜单中选择一个值(不是php),但它仍然没有意义。没有“网站菜单”PHP声明,鼓励使用
global
变量值得投反对票(另一个带有迷信的有趣正统派:伊莫哈哈哈)