Я должен смочь постоянно заменить переменные в php файле с помощью php.
Я создаю многоязычный сайт с помощью codeigniter и с помощью помощника языка, который хранит текст в php файлах в переменных в этом формате: $lang['title'] = "Stuff";
Я смог получить доступ к простому тексту файлов с помощью fopen () и т.д., и я кажется, что я мог, вероятно, определить местоположение областей, с которыми я хочу отредактировать с регулярными выражениями и переписать файл, после того как я внес изменения, но это кажется небольшим hacky.
Там какой-либо простой способ состоит в том, чтобы отредактировать эти переменные постоянно с помощью php?
Удачи
Если вы имеете дело только с массивом, вы можете рассмотреть вариант var_export
. Он распечатает или вернет выражение в формате, соответствующем PHP-коду.
Итак, если у вас есть language_foo.php, содержащий кучу $ lang ['title'] = "Stuff";
строк, вы можете сделать что-нибудь вроде:
include('language_foo.php');
$lang['title2'] = 'stuff2';
$data = '$lang = ' . var_export($lang, true) . ';';
file_put_contents('language_foo.php', '<?PHP ' . $data . ' ?>');
В качестве альтернативы, если вы не захотите вручную редактировать их в будущем, вам следует рассмотреть возможность хранения данных другим способом (например, в базе данных или serialize ()
'd и т. д.).
Pear Config позволит вам читать и записывать файлы PHP, содержащие настройки, используя его контейнер 'PHPArray'. Я обнаружил, что сгенерированный PHP более читабелен, чем PHP из var_export ()
Предполагая, что
Вам нужен файл словаря в удобочитаемой и редактируемой человеком форме (без сериализации и т. Д.)
Массив Dictionary представляет собой одномерный ассоциативный массив:
Я бы
Включить () файл словаря внутри функции
Выполнить все необходимые операции с массивом $ lang
(добавить слова, удалить слова, изменить слова)
Записать $ lang
обратно в файл с помощью простого цикла:
foreach ($ lang as $ key => $ value)
fwrite ($ file, "\ $ lang ['$ key'] = '$ value '; \ n ";
, конечно, это крайне ограниченный подход. Мне было бы действительно интересно узнать, существует ли настоящий" синтаксический анализатор, средство изменения и записи исходного кода PHP ". Это должно быть возможно сделать с помощью функций токенизатора .
Кажется, намного проще хранить данные в другом месте (например, в базе данных) и написать простой скрипт для генерации файлов * .php с этим комментарием вверху:
#
# THIS FILE IS AUTOGENERATED - DO NOT EDIT
#
Если речь идет также о действительно многоязычном сайте, вам может быть интересно заглянуть в gettext расширение PHP. Он возвращается к библиотеке, которая использовалась для локализации в течение многих лет, и где инструменты, позволяющие не отставать от файлов перевода, существуют почти столько же. Это также делает поддержку всех языков в более поздних версиях продукта более интересной.
Что касается других новостей, я бы не использовал массив, а скорее подходящие определения, чтобы у вас был файл
switch ($lang) {
case 'de':
define('HELLO','Hallo.');
define('BYE','Auf wiedersehen.');
break;
case 'fr':
define('HELLO','Bonjour');
define('BYE','Au revoir.');
break;
case 'en':
default:
define ('HELLO','Hello.');
define ('BYE','Bye.');
}
И я бы также автоматически сгенерировал его из базы данных, если обслуживание становится проблемой.
Однажды я столкнулся с подобной проблемой. Я решил ее, просто добавив шаблон smarty. Я сделал это следующим образом:
Дайте мне знать, если это поможет.