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


How to define a function for language terms in php

我有一个语言函数(就像Wordpress和其他cms的系统一样)返回定义语言中的术语

function lang($term) {
include "language/cn.php"; 
if(!empty($tans[$term])) {$translatedterm=$tans[$term];} 
else { $translated = $term;}
return $translated;
}

问题是我想在菜单上提供选择语言的选项,因为人们可以更改语言。为此,我需要为每种语言更新"include 'language/cn.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';
    // ...
}

你正在这样做:

include 'language/$language.php';

这不起作用,因为PHP只在字符串被双引号括起来时才解释字符串中的变量。在这里,它将简单地接受您指定的字符串,而不转换变量名。

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

include 'language/' . $language.php;

或者在字符串中使用双引号,如下:

include "language/{$language}.php";

(变量名周围的花括号在这个上下文中是可选的,但是推荐使用)

这两个都将导致$language在文件被包含之前被转换为所需的值。

希望对你有帮助。

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

你打算为每一个术语包括翻译文件吗?

加载你的翻译文件一次安全:

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];
}