Evgenii Legotckoi
Evgenii LegotckoiМамыр 30, 2016, 8:13 Т.Ж.

Qt/C++ - Сабақ 049. QTranslator - көптілді қолданбаны Qt тіліне динамикалық аудару

Ерте ме, кеш пе, Qt қосымшасының әзірлеушісі өз қолданбасында көптілділікті қолдау қажеттілігіне тап болады. Дәл осы кезде QTranslator сыныбы мен аударма жасауға арналған мамандандырылған қолданбасы Qt Linguist көмекке келеді.

QTranslator класының нысаны он алтылық аударма файлы болып табылатын .qm кеңейтімі бар арнайы файлдан аудармаларды жүктеу үшін пайдаланылады. Бұл файл XML пішіміндегі аударма файлынан құрастырылған, оның ts кеңейтімі бар және жобаның pro файлында жазылған. Бұл файлда tr() функциясына қосылған қолданбаның барлық жолдары бар. Мен сізге барлық қолданба интерфейсін ағылшын тілінде орнатуды ұсынамын, ол әдепкі тіл болады және аудармаларды қажетті тілмен жүктеңіз. аударма файлдарынан. Қажетті аударма файлы табылмаса, ағылшын тіліндегі аударма автоматты түрде жүктеледі. Әрине, әдепкі тіл ретінде басқа тілді пайдалануға болады.


Аударманы жүктеу мысалы

Аударма файлының атауының құрылымы QTranslator-пен жұмыс істеуде маңызды рөл атқарады. Минималды мысалды қарастырайық.

#include "mainwindow.h"
#include <QApplication>
#include <QTranslator>
#include <QLibraryInfo>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QTranslator qtLanguageTranslator;
    qtLanguageTranslator.load(QString("QtLanguage_") + QString("ru_RU"));
    qApp->installTranslator(&qtLanguageTranslator);

    MainWindow w;
    w.show();

    return a.exec();
}

Бұл мысалда QTranslator класының объектісі жасалды, оған бізді қызықтыратын файл көрсетілген тілмен жүктеледі. Бұл жағдайда аударма файлының толық атауы QtLanguage_en.qm. Яғни, аударма файлының жалпы атауы QtLanguage , ал мақсатты тілдің префиксі _ru болып табылады. . Бірақ сіз QtLanguage_ru_RU жолы жүктеу әдісі үшін аргумент ретінде құрылғанын байқадыңыз. Бұл тілдің қажетті диалектісін анықтау үшін жасалады, мысалы, американдық (en_US) немесе британдық ( kk_GB) Ағылшын. Бірақ егер аударма файлының атауында диалект көрсетілмесе, онда диалект көрсетілмей, файл таңдалады, яғни QtLanguage_ru.qm.

Аударма файлы жүктелгеннен кейін ол қолданбада орнатылуы керек. Бұл жағдайда qApp->installTranslator(&qtLanguageTranslator) қолданбасына жаһандық көрсеткіш.

Аударма файлын жасаңыз

Қолданбаға аударманы орнатудың ең аз әдісін анықтағаннан кейін, жалпы аударманы қалай жасауға болатынын анықтайық. Аударма жасау үшін қолданбадағы tr(), trUtf8(), translate() функцияларын және т.б. Яғни, аударма файлын кейінірек жасау үшін аударманы қажет ететін барлық мәтін осы функцияларда жиектелуі керек. Бұл келесідей болуы мүмкін:

label->setText(QApplication::translate("MainWindow", "Select Language", 0));
label_2->setText(tr("Hello"));
label_3->setText(trUtf8("Hello world"));

Қолданбада аудармаға қажетті барлық жолдар белгіленгеннен кейін аударма файлын жасау, аударманың өзін жасау және соңғы файлды құрастыру қажет болады. Ол үшін келесі бағдарламалар қолданылады:

  1. lupdate - pro файлындағы TRANSLATIONS өрісінен аударма файлын құруға, сонымен қатар аударманы қажет ететін қосымшадағы барлық жаңа жолдар туралы ақпаратты жаңартуға арналған бағдарлама.
  2. lrelease – қолданбада қолданылатын соңғы аударма файлын құруға арналған бағдарлама.
  3. Qt Linguist – аудармаларды жасауға арналған пакеттің өзі.

Қолданбада аударманы қажет ететін жолдар жазылғаннан кейін жасалуы керек бірінші қадам жобаның pro файлына аударуға арналған файлды қосу болып табылады. Сондай-ақ аударма үшін пайдаланылатын кодтау туралы ақпаратты ұсынғыңыз келуі мүмкін.

TRANSLATIONS += QtLanguage_ru.ts

CODECFORSRC     = UTF-8

Содан кейін QtLanguage_ru.ts. файлын жасау үшін lupdate утилитасын пайдалану керек. Qt Creator бағдарламасында мына жерден қараңыз: Құралдар -> Сыртқы -> Лингвист -> lupdate* .

lupdate аударма үшін жолдарды іздеу нәтижесін хабарлайды.

Запускается внешняя утилита «D:\Qt\5.6\mingw49_32\bin\lupdate.exe» D:/AndroidQT/QTProjects/QtLanguage/QtLanguage.pro
Updating 'QtLanguage_ru.ts'...
    Found 4 source text(s) (0 new and 4 already existing)

«D:\Qt\5.6\mingw49_32\bin\lupdate.exe» завершилась

Содан кейін біз Qt Linguist ашамыз және қайсысы аударылғанын белгілей отырып, барлық жолдарды аударамыз (Бұл аудармашының өзі үшін таза қызмет ақпараты, ненің аударылғанын және не аудармағанын есте сақтамау үшін).

Аударманы жасағаннан кейін файлды сақтаңыз және lrelease. утилитасын пайдаланып аударма он алтылық файлын құрастырыңыз.Оны Qt Creator бағдарламасында lupdate сияқты жерден табуға болады немесе Qt Linguist бағдарламасынан іске қосуға болады: Файл -> Шығару.

Файлды пайдалану үшін оны қолданбаның орындалатын файлы бар каталогқа орналастырып, осы файлға жолды кодқа жазу керек.

Динамикалық қолданба аудармасы

Қолданбаның аудармасын жүктеу жақсы, бірақ аударманы динамикалық түрде өзгерту қажет болса ше? Қолданбадағы аударманы өзгертетін екі тілде: ағылшын және орыс тілдерінде QComboBox бар шағын мысалды қарастырайық.

Жоба құрылымы

  • QtLanguage.pro - жоба профилі;
  • main.cpp - негізгі функциясы бар жоба файлы
  • mainwindow.h - қолданбаның негізгі терезесінің тақырып файлы;
  • mainwindow.cpp - қолданбаның негізгі терезесі үшін бастапқы код файлы;
  • mainwindow.ui – қолданбаның негізгі терезесінің пішін файлы.

mainwindow.ui

Қолданбаның графикалық интерфейсін жасау үшін графикалық дизайнерді пайдаланғанды жөн көремін, себебі ол қолданбаның сыртқы көрінісінде күрделі нәрсе қажет болмаса, әзірлеуді тездетеді, сондықтан келесі көрінісі бар терезені жасайық.

Бұл терезе мыналарды қамтиды:

  • заттаңба
  • label_2
  • ComboBox

Оның аудармасымен біз жұмыс істейтін боламыз. Графикалық дизайнердің ыңғайлылығы сонымен қатар retranslateUi() әдісін автоматты түрде генерациялауында, ол қолданбада қолданылатын барлық қолтаңбалардың аудармасын өзгерту үшін пайдаланылады, бірақ ұқсас әдісті қолмен жазуға болады. Өзіңіз, бірақ жеке мен уақытты жоғалтқым келмейді, өйткені керемет нәрсе автоматты түрде жасалуы мүмкін. Мысалы, бұл сабақта ол келесідей көрінеді:

void retranslateUi(QMainWindow *MainWindow)
{
    MainWindow->setWindowTitle(QApplication::translate("MainWindow", "MainWindow", 0));
    label_2->setText(QApplication::translate("MainWindow", "The QTranslator class provides internationalization support for text output.An object of this class contains a set of translations from a source language to a target language. QTranslator provides functions to look up translations in a translation file. Translation files are created using Qt Linguist.", 0));
    label->setText(QApplication::translate("MainWindow", "Select Language", 0));
} // retranslateUi

QtLanguage.pro

Жоғарыда айтылғандай, біз жоба профилінде аударма файлының атын көрсетеміз.

#-------------------------------------------------
#
# Project created by QtCreator 2016-05-22T14:34:42
#
#-------------------------------------------------

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = QtLanguage
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp

HEADERS  += mainwindow.h

FORMS    += mainwindow.ui

TRANSLATIONS = QtLanguage_ru.ts

CODECFORSRC     = UTF-8

main.cpp

Бірақ бұл файлда біз ештеңені өзгертпейміз.

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    MainWindow w;
    w.show();

    return a.exec();
}

mainwindow.h

Негізгі қолданба терезесінің тақырып файлында QTranslator сыныбының нысанын жариялау керек және қолданба тілін өзгерту оқиғасын анықтайтын changeEvent(QEvent *event) әдісін қайта анықтау керек.

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTranslator>
#include <QEvent>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

protected:
    // Метод получения событий в главном окне приложения
    // В нём будет производиться проверка события смены перевода приложения
    void changeEvent(QEvent * event) override;

private:
    Ui::MainWindow *ui;
    QTranslator qtLanguageTranslator;   // Выделяем перевод в отдельном поле, иначе ничего работать не будет
};

#endif // MAINWINDOW_H

mainwindow.cpp

Қолданбаның логикасы келесідей болады: аралас терезедегі элементті өзгерткен кезде қолданбаның аудармасы өзгереді.

Ескерту. qm кеңейтімі бар аударма файлын қолданбаның орындалатын файлының жанына қоюды және қажетті dll файлдарын жинауды ұмытпаңыз, әйтпесе ол жұмыс істемейді.

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QApplication>
#include <QTranslator>
#include <QLibraryInfo>
#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // Задаём два пункта с текстом локалей в комбобоксе
    ui->comboBox->addItems(QStringList() << "ru_RU" << "en_US");

    // подключаем к сигналу изменения пункта комбобокса лямбда функцию,
    // в которой будет изменяться перевод приложения
    // Здесь имеется интересный момент. Поскольку QComboBox имеет перегрузку сигнатуры сигнала,
    // то нам необходимо скастовать сигнал к нужной сигнатуре.
    // В данном случае будем использовать название пункта при его изменении
    connect(ui->comboBox, static_cast<void (QComboBox::*)(const QString &)>(&QComboBox::currentIndexChanged),
            [=](const QString &str){
        qtLanguageTranslator.load("QtLanguage_" + str, ".");   // Загружаем перевод
        qApp->installTranslator(&qtLanguageTranslator);        // Устанавливаем перевод в приложение
    });

    // Сделаем первоначальную инициализацию перевода для окна прилоежния
    qtLanguageTranslator.load(QString("QtLanguage_") + QString("ru_RU"));
    qApp->installTranslator(&qtLanguageTranslator);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::changeEvent(QEvent *event)
{
    // В случае получения события изменения языка приложения
    if (event->type() == QEvent::LanguageChange) {
        ui->retranslateUi(this);    // переведём окно заново
    }
}

Барлығы

Нәтижесінде сіз графикалық интерфейсте екі тілді қолданба аласыз.

QTranslator көмегімен үлгі қолданбаны жүктеп алу

Бейне оқулық

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

w
  • Мамыр 16, 2017, 12:45 Т.Ж.

Не работает....

Evgenii Legotckoi
  • Мамыр 16, 2017, 12:51 Т.Ж.

Очень содержательный комментарий. По моему опыту, не работает всегда потому, что кто-то что-то не правильно делает. А в видео показано, что все отлично работает.

АК
  • Там. 24, 2017, 9:56 Т.Ж.

А к чему относится такая проблема? Есть QPlainTextEdit. У него есть горячие клавиши. Но они работает только на английском языке : Когда на клавиатуре нажимается ctrl + 'x', горячая клавиша "вырезать" срабатывает. Но при нажатии ctrl + 'ч' не срабатывает. Стоит создать тему на форуме или это что-то само собой разумеющиеся?
Данный код в main.cpp не помог :

    QString translatorFileName = QLatin1String("qt_");
    translatorFileName += QLocale::system().name();
    QTranslator *translator = new QTranslator(&a);
    if (translator->load(translatorFileName, QLibraryInfo::location(QLibraryInfo::TranslationsPath)))
        a.installTranslator(translator);

А вы случаем не переводили эти сочетания клавиш там, где они устанавливаются? Если где-то есть этот перевод, то есть там подставлена tr() b trUtf8() функция, то могут быть проблемы, лучше те куски кода не оборачивать в функции перевода и не делать перевода, тем более, что это и не нужно. Скорее всего коды клавиш неправильно определяются.

IscanderChe
  • Шілде 12, 2018, 6:08 Т.Ж.
Скачал пример, увы, не работает. Комбобокс исправно пашет, переключения языков нет.

Ещё подскажите, как без шаманства кастования переключать язык? Например, как это обычно бывает, после перезагрузки приложения.
Evgenii Legotckoi
  • Шілде 12, 2018, 6:11 Т.Ж.

Странно. Должен был бы работать... проверю на досуге.

Вообще сохраняют инфоромацию о языке в QSettings, который нужно установить. Закрывают приложение и после запуска из QSettings подтягивается инофрмация о локализации приложения, после чего загружается требуемый язык.
Evgenii Legotckoi
  • Шілде 12, 2018, 6:17 Т.Ж.

Если использовать QComboBox для выбора языка, то с новым синтаксисом сигналов и слотов без каста не получится, но можно использовать шаблонный функционал Qt для упрощения работы с сигналами и слотам. Подробнее в этой статье про QOverload

Arrow
  • Шілде 13, 2018, 7:55 Т.Ж.
Хорошая статья. Только один вопрос как это сделать для CMake?

Интересует именно запись в CMakeList

  1. TRANSLATIONS += QtLanguage_ru.ts
  2. CODECFORSRC = UTF-8
Пытался так, но не работает и хотя в документации написано так.

file(GLOB TRANSLATION_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.ts)

qt5_add_translation(TRANSLATION_QM ${TRANSLATION_FILES})
add_custom_target(translations DEPENDS ${TRANSLATION_QM})
Ругается на
qt5_add_translation
пишет - неизвестная команда.

qt5_create_translation понимает, но ничего не происходит.
Evgenii Legotckoi
  • Шілде 14, 2018, 2:49 Т.Қ.

У меня на руках есть один проект, где какие-то потуги с переводами и подключением этого добра в CMAKE делались.

Но там файл перевода добавляется прямо в ресурсы проекта. То есть бинарных qm файл переводов добавлялся в qrc файл. То есть при компилировании перевод сохранялся как ресурс, а потом уже из ресурсов забирался.
 
qt5_add_resources(RCC_RESOURCES
        resources/translations.qrc
        )

add_executable({RCC_RESOURCES})
Как понимаю,
qt5_add_translation или qt5_create_translation
Должны ещё создать этот самый бинарный qm файл переводов
Arrow
  • Шілде 14, 2018, 2:58 Т.Қ.

Спасибо,  попробую.

Arrow
  • Шілде 17, 2018, 9:34 Т.Ж.
Работает так:

find_package (Qt5LinguistTools)
file (GLOB TS_FILES ${SOURCE_DIR}/translations/*.ts)
qt5_add_translation (QM_FILES ${TS_FILES})
add_custom_target (translations ALL DEPENDS ${QM_FILES})
......
add_executable (${PROJECT_NAME} ${SOURCE_FILES} ${HEADER_FILES} ${UI_FILES} ${RESOURCES} ${QM_FILES})
grig_p
  • Там. 13, 2019, 10:17 Т.Ж.

Здравствуйте!

Все работает, кроме одного.
Есть у меня ряд строковых локализуемых констант. Например:

static const QString V01 = "Вариант 01";
static const QString V02 = "Вариант 02";

Потом, они используются в мэпе:

QMap<int, QString> Variants =
{
    std::pair<int, QString> (1, V01)
  , std::pair<int, QString> (2, V02)
}

В конце есть функция, возвращающая сроку по коду:

QString variant(const int varCode)
{
    return Variants.value(varCode);
}

Как быть в такой ситуации? Константы в tr() не обернешь.

Сделал так:

static const QString V01 = QCoreApplication::tr("Вариант 01");
static const QString V02 = QCoreApplication::tr("Вариант 02");

Лингвист видит эти значения в контексте QCoreApplication,
позволяет их перевести, но доступа к переводу нет,
выводится на русском языке.
Что я делаю не так?

Evgenii Legotckoi
  • Там. 13, 2019, 10:43 Т.Ж.

Самая главная проблема в том, что у вас это константные переменные, и инициализируется они один единственный раз при запуске программы.
Поэтому делать динамический перевод в таком случае у вас не получится. Вам нужно иначе подходить к этой проблеме.

Напишите код так.

QString variant(const int varCode)
{
    switch (varCode)
    {
        case 1: return QCoreApplication::tr("Вариант 01");
        case 2: return QCoreApplication::tr("Вариант 02");
        default: return QString();
    }
}
grig_p
  • Там. 14, 2019, 1:27 Т.Ж.
  • (өңделген)

Спасибо большое. Получилось

P
  • Қар. 19, 2019, 2:10 Т.Қ.

Здравствуйте.
Спасибо за статью. Сделал перевод программы. Все работает.
Только я делал не динамический, но это пока и не надо.
Но с одной проблемой все же столкнулся.
В программе есть сцена. На ней создаются некие графические элементы.
в конструкторе элементов устанавливаю всплывающую подсказку,
например такую

this->setToolTip(tr("Кнопка"));

Все переводится кроме тултипов.
Не подскажете куда копать?

Evgenii Legotckoi
  • Қар. 20, 2019, 2:50 Т.Ж.

Добрый день.

Вы используете QGraphicsItem? вообще побольшу бы кусок кода, чтобы иметь большее представление. Мысли есть, но не уверен

P
  • Қар. 20, 2019, 3:10 Т.Ж.
  • (өңделген)

да, есть классы наследуемые от QGraphicsItem.
в программе при нажатии определенных кнопок(слева на картинке), на сцене появляются Item-ы
с разными настройками. в конструкторе ни чего особого нет,только координаты,название,тултип.

перевод загружается так

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QTranslator translator;
    translator.load(QString("Language_en"));
    a.installTranslator(&translator);
    MainWindow w;
    w.show();

    return a.exec();
}
Evgenii Legotckoi
  • Қар. 20, 2019, 3:25 Т.Ж.
  • (өңделген)

Вообще, метод tr является частью класса QObject, если он у вас используется в конструкторе, то вы должны были использовать множественное наследование для вашей кастомной кнопки. Поскольку графические объекты одни из немногих классов, которые не наследуются от QObject, кроме QGraphicsObject, но там также множественное наследование используется.

То есть заголовочный код вашей кнопки должен выглядеть так

class Button : public QObject, public QGraphicsItem
{
    Q_OBJECT
public:
    /* и так далее */
}

Убедитесь, что у вас присутсвует макрос Q_OBJECT, он отвечает за мета информацию и включение возможности перевода.

Если же вы не наследовались от QObject, то перевод можно также включить с помощью другого макроса

class Button : public QGraphicsItem
{
    Q_DECLARE_TR_FUNCTIONS(Button)
public:
    /* и так далее */
}
Evgenii Legotckoi
  • Қар. 20, 2019, 3:30 Т.Ж.

И в качестве дополнения из личного опыта. Пишите лучше все тексты на английском языке в функциях tr )))

P
  • Қар. 20, 2019, 3:43 Т.Ж.

у меня множественное наследование.
сначала основной класс myitem

class myItem : public QObject, public QGraphicsItem
{
    Q_OBJECT
    Q_INTERFACES(QGraphicsItem)
public:
    myItem(int x, int y, int w, int h);
    .....
    .....
    ..

со всякими переменными.

а потом от него все остальные , которые появляются на сцене.

"Пишите лучше все тексты на английском языке в функциях tr"
понимаю, просто программа очень спецефическая(это конфигуратор для устройства на микроконтроллере)
и не планировалась для других языков. но потом подтянулись иностранные граждане и попросили перевести..

Evgenii Legotckoi
  • Қар. 20, 2019, 3:55 Т.Ж.

Покажите, как выглядит реализация конструктора. Поскольку на данный момент я не вижу причин, чтобы переводы не работали.

P
  • Қар. 20, 2019, 4:02 Т.Ж.
myButton::myButton(int x, int y, int w, int h) : myItem (x, y, w, h)
{
  static int i = 1;
  myVar.text = "Btn" + QString::number(i++);
  myVar.myType = typeSimpleButton;
  this->setToolTip(tr("Кнопка"));
  myVar.func_read = 1;
  configVisibleWidgets |= 1<<visibleSettings::Hsize | 1<<visibleSettings::Wsize
      | 1<<visibleSettings::Color1 | 1<<visibleSettings::ColorText | 1<<visibleSettings::Color2
      | 1<<visibleSettings::TextEdit | 1<<visibleSettings::ModbusWrite
      | 1<<visibleSettings::Toggle | 1<<fontSizeSelect | 1<<itSlave;
}
myItem::myItem(int x, int y, int w, int h)
{
  myVar.rect.x =x;
  myVar.rect.y=y;
  myVar.rect.w=w;
  myVar.rect.h=h;
  setFlags(QGraphicsItem::ItemIsMovable |
           QGraphicsItem::ItemIsSelectable |
           QGraphicsRectItem::ItemIsFocusable);
}
P
  • Қар. 20, 2019, 4:14 Т.Ж.

при этом тултипы заданные в редакторе форм переводятся...

Evgenii Legotckoi
  • Қар. 20, 2019, 4:29 Т.Ж.

проблема в конструкторе, напишите так

myItem::myItem(int x, int y, int w, int h) : QObject()
{
  myVar.rect.x =x;
  myVar.rect.y=y;
  myVar.rect.w=w;
  myVar.rect.h=h;
  setFlags(QGraphicsItem::ItemIsMovable |
           QGraphicsItem::ItemIsSelectable |
           QGraphicsRectItem::ItemIsFocusable);
}
P
  • Қар. 20, 2019, 5:05 Т.Ж.

добавил : QObject()
ни чего не изменилось.

ладно. что-нибудь придумаю

Evgenii Legotckoi
  • Қар. 20, 2019, 5:08 Т.Ж.

Тогда хоть убейте, не знаю. Где-то не хватает или макроса или корректной реализации конструктора.

Пікірлер

Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
Кіріңіз немесе Тіркеліңіз
OI
  • Ora Iro
  • Жел. 24, 2024, 6:38 Т.Ж.

C++ - Тест 001. Первая программа и типы данных

  • Нәтиже:40ұпай,
  • Бағалау ұпайлары-8
AD

C++ - Тест 004. Указатели, Массивы и Циклы

  • Нәтиже:50ұпай,
  • Бағалау ұпайлары-4
m
  • molni99
  • Қаз. 26, 2024, 1:37 Т.Ж.

C++ - Тест 004. Указатели, Массивы и Циклы

  • Нәтиже:80ұпай,
  • Бағалау ұпайлары4
Соңғы пікірлер
ИМ
Игорь МаксимовҚар. 22, 2024, 11:51 Т.Ж.
Django - Оқулық 017. Теңшелген Django кіру беті Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Evgenii Legotckoi
Evgenii LegotckoiҚаз. 31, 2024, 2:37 Т.Қ.
Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
A
ALO1ZEҚаз. 19, 2024, 8:19 Т.Ж.
Qt Creator көмегімен fb3 файл оқу құралы Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь МаксимовҚаз. 5, 2024, 7:51 Т.Ж.
Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas5Шілде 5, 2024, 11:02 Т.Ж.
QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Енді форумда талқылаңыз
Evgenii Legotckoi
Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
t
tonypeachey1Қар. 15, 2024, 6:04 Т.Ж.
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
NSProject
NSProjectМаусым 4, 2022, 3:49 Т.Ж.
Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…
9
9AnonimҚаз. 25, 2024, 9:10 Т.Ж.
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

Бізді әлеуметтік желілерде бақылаңыз