У меня есть файл, где хранятся два массива - тексты на русском и английском языках. Смена языка осуществляется через inline кнопки. Выбранный язык для каждого пользователя бот сохраняет в БД (по умолчанию стоит русский), там хранится в отдельном столбце с типом данных boolean и достает каждый раз когда присылает сообщение (достает либо 0, либо 1).
Для обычных команд текст спокойно меняется на выбранный и выводится, но со всплывающими окнами в inline-моде возникли трудности
Сам код:
// Поменять язык на Английский
function english_language($user_id)
{
global $pdo;
$sql = "UPDATE users
SET language = 1
WHERE user_id = :user_id";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':user_id', $user_id, PDO::PARAM_INT);
$stmt->execute();
}
// Поменять язык на Русский
function russian_language($user_id)
{
global $pdo;
$sql = "UPDATE users
SET language = 0
WHERE user_id = :user_id";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':user_id', $user_id, PDO::PARAM_INT);
$stmt->execute();
}
// Достать id языка, используемого юзером
function get_language($user_id)
{
global $pdo;
$sql = "SELECT language
FROM users
WHERE user_id = :user_id";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':user_id', $user_id, PDO::PARAM_INT);
$stmt->execute();
return $stmt->fetch();
}
include 'secret_texts.php'; // Здесь находятся массивы с текстом на разных языках
$language = get_language($user_id);
$data = json_decode(file_get_contents('php://input'), JSON_OBJECT_AS_ARRAY);
$inline_query = $data['inline_query'];
$inline_query_id = $data['inline_query']['id'];
if (isset($inline_query)) { // Обработка инлайн запроса
$answer_inline_query = [
"inline_query_id" => $inline_query_id,
"results" => '',
];
if (preg_match('/@\w{5,}/', $inline_query_msg)) {
if ($language['language'] == 0) {
$response = sendRequest('answerInlineQuery?inline_query_id=' . $inline_query_id . '&cache_time=' . null . '&results=' . json_encode(
[
[
"type" => "article",
"id" => "2",
"title" => $russian_language['send_title'],
"description" => $russian_language['send_description'],
$secret_button = [[['text' => $russian_language['send_button'], 'callback_data' => $delete]]],
"reply_markup" => json_decode(inline_keyboard($secret_button)),
"input_message_content" => [
"message_text" => $russian_language['send_text_1'] . $inline_receiver_username . $russian_language['send_text_2']
],
"thumb_url" => "jpg",
"photo_width" => "512",
"photo_height" => "512"
]
]
));
} elseif ($language['language'] == 1) {
$response = sendRequest('answerInlineQuery?inline_query_id=' . $inline_query_id . '&cache_time=' . null . '&results=' . json_encode(
[
[
"type" => "article",
"id" => "2",
"title" => $english_language['send_title'],
"description" => $english_language['send_description'],
$secret_button = [[['text' => $english_language['send_button'], 'callback_data' => $delete]]],
"reply_markup" => json_decode(inline_keyboard($secret_button)),
"input_message_content" => [
"message_text" => $english_language['send_text_1'] . $inline_receiver_username . $english_language['send_text_2']
],
"thumb_url" => "jpg",
"photo_width" => "512",
"photo_height" => "512"
]
]
));
}
}
}
Бот в любом случае выводит текст только с первого условия (в моем случае на русском языке, если первым поставлю английский, то соответственно будет уже он отображаться)