Как определить функцию для языковых терминов в php - PullRequest
0 голосов
/ 19 сентября 2011

У меня есть функция для языка (например, система, которая есть в 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 является строкой, исходящей из выбора меню и не входящей в функцию. У вас есть идеи, как изменить языковой файл внутри функции в зависимости от выбранного языка?

Ответы [ 4 ]

1 голос
/ 19 сентября 2011

В коде, который обрабатывает форму выбора языка, вы можете сохранить выбранный язык в сеансе:

$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';
    // ...
}
0 голосов
/ 20 сентября 2011

Согласно подсказке Алекса Ховански, окончательное решение - использовать переменную php, такую ​​как $ _SEESION, $ _GET, $ _POST и т. Д. Эти переменные можно использовать внутри функции.Однако, поскольку функция имеет собственную область видимости, статическая строка извне функции не может быть прочитана внутри функции.

0 голосов
/ 19 сентября 2011

вы собираетесь включить файл переводов для КАЖДОГО термина?

загрузить файл перевода один раз и сейф :

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];
}
0 голосов
/ 19 сентября 2011

Вы делаете это:

include 'language/$language.php';

Это не будет работать, потому что PHP интерпретирует переменные внутри строки только тогда, когда строка в двойных кавычках.Когда он у вас есть, он просто примет строку в том виде, в котором вы ее указали, без преобразования имени переменной.

Вы можете взять переменную вне строки, например:

include 'language/' . $language.php;

или используйте двойные кавычки для вашей строки, например:

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

(фигурные скобки вокруг имени переменной необязательны в этом контексте, но рекомендуется)

Обаэто приведет к преобразованию $language в требуемое значение до включения файла.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...