Вопрос или проблема
Я ищу
- статический генератор CMS на C, shell или PHP
- с многоязычной поддержкой через gettext.
- Исходный код страниц в markdown.
- Это будет размещено на UNIX.
- Системный администратор не хочет устанавливать Python, Go, Ruby или базу данных SQL.
- Одно из требований также — отсутствие JavaScript и
- соблюдение свободного программного обеспечения (GNU GPL, MIT и т.д.).
Я проверил https://staticsitegenerators.net/, но это не дало результата, http://qgoda.net имеет только инструкции по Docker, а у меня нет Docker.
Спасибо за ваше внимание.
Если вы хотите попробовать qgoda, но без Docker, вы все равно можете установить его из исходного кода. Похоже, он написан на Perl (и много JavaScript, который вы, видимо, не хотите…?)
Проверьте исходный код на Perl с помощью git clone
. Если повезет, qgoda будет работать как есть. Более вероятно, что вам все равно нужно будет запустить perl Makefile.PL
. И даже это не сработает без определенных одноразовых настроек. Я имею в виду, если вы никогда не работали с Perl раньше, вам, вероятно, придется настроить cpanm (CPANminus), менеджер пакетов Perl (аналог dpkg, apt, npm и т.д.), ответив на несколько вопросов о ваших предпочтениях (“Установить как root y/n?, и т.д.)
Ответ или решение
Для создания статического генератора контента на C, Shell или PHP с многоязыковой поддержкой через gettext, соответствующего всем указанным вами требованиям, я предлагаю следующий подход. Мы создадим простой генератор на PHP, который будет обрабатывать Markdown-файлы, поддерживать многоязычность через gettext и не требовать установки дополнительных зависимостей.
Шаг 1: Настройка окружения
-
Убедитесь, что у вас установлен PHP. Для работы с Markdown вам может понадобиться библиотека для обработки Markdown, такие как
Parsedown
, которую можно установить вручную. -
Установите gettext. Обычно он предустановлен на большинстве UNIX-систем, но убедитесь, что расширение
gettext
включено в вашей версии PHP. -
Создайте структуру директорий:
my_static_site/ ├── content/ │ ├── en/ │ │ └── index.md │ └── ru/ │ └── index.md ├── locales/ │ ├── en/ │ │ └── LC_MESSAGES/ │ │ └── messages.po │ └── ru/ │ └── LC_MESSAGES/ │ └── messages.po └── generate.php
Шаг 2: Подготовка Markdown-контента
В файле content/en/index.md
:
# Welcome to my static site!
This is an example of a static site generator written in PHP with multilingual support.
В файле content/ru/index.md
:
# Добро пожаловать на мой статический сайт!
Это пример статического генератора сайта, написанного на PHP с многоязычной поддержкой.
Шаг 3: Настройка переводов
Создайте файл locales/en/LC_MESSAGES/messages.po
:
msgid "Welcome to my static site!"
msgstr "Добро пожаловать на мой статический сайт!"
msgid "This is an example of a static site generator written in PHP with multilingual support."
msgstr "Это пример статического генератора сайта, написанного на PHP с многоязычной поддержкой."
Для генерации файлов .mo
, используйте программное обеспечение msgfmt
:
msgfmt locales/en/LC_MESSAGES/messages.po -o locales/en/LC_MESSAGES/messages.mo
msgfmt locales/ru/LC_MESSAGES/messages.po -o locales/ru/LC_MESSAGES/messages.mo
Шаг 4: Написание скрипта генерации
В файле generate.php
:
<?php
function generateSite($lang) {
// Устанавливаем локализацию
putenv("LC_ALL=$lang");
setlocale(LC_ALL, $lang);
bindtextdomain("messages", "./locales");
textdomain("messages");
// Загрузка Markdown файла
$markdownFilePath = "./content/$lang/index.md";
if (!file_exists($markdownFilePath)) {
die("Markdown file not found: $markdownFilePath");
}
$markdownContent = file_get_contents($markdownFilePath);
// Преобразование Markdown в HTML
require_once 'Parsedown.php'; // Путь к библиотеке Parsedown
$Parsedown = new Parsedown();
$htmlContent = $Parsedown->text($markdownContent);
// Генерация HTML файла
$htmlFilePath = "./output/$lang/index.html";
if (!file_exists('./output')) {
mkdir('./output', 0777, true);
}
file_put_contents($htmlFilePath, $htmlContent);
}
$languages = ['en', 'ru'];
foreach ($languages as $lang) {
generateSite($lang);
}
echo "Сайты успешно сгенерированы!";
Шаг 5: Запуск генерации
Запустите скрипт в терминале:
php generate.php
Заключение
Теперь у вас есть простой статический генератор сайта на PHP, который поддерживает многоязычность через gettext, использует Markdown для форматирования контента и выполняется без установки дополнительных инструментов. Вы можете легко добавлять новые языки и страницы, просто создавая новые Markdown-файлы и соответствующие .po
файлы для переводов.
Этот подход соответствует вашим требованиям по лицензии и свободе, так как PHP, Markdown и gettext все являются свободными инструментами.