diff --git a/docroot/text.xml b/docroot/text.xml index 17a7cbe..0f854fc 100644 --- a/docroot/text.xml +++ b/docroot/text.xml @@ -10,6 +10,30 @@ Pair Transgender (M->F) Transgender (F->M) + Leave + Search + Inbox + History + In chat for {1} + Timeout in {1} + Conversations with already logged in users]]> + No previous conversations available. + Block user + Unblock user + Send + Send an image + Send image to user + Please select an image + Send image + Cancel + Uploaded and processed image + Name: + Password: + Login + Incorrect username or password. + Error 400 - Page not found + Error opening file. + Name
diff --git a/docroot/text_de_DE.xml b/docroot/text_de_DE.xml index a57c2eb..45590b0 100644 --- a/docroot/text_de_DE.xml +++ b/docroot/text_de_DE.xml @@ -10,6 +10,30 @@ Paar Transgender (M->F) Transgender (F->M) + Verlassen + Suche + Posteingang + Verlauf + Im Chat seit {1} + Timeout in {1} + Unterhaltungen mit bereits eingeloggten Nutzern]]> + Keine bisherigen Unterhaltungen vorhanden. + Benutzer blockieren + Blockierung aufheben + Senden + Bild senden + Bild an Benutzer senden + Bitte wähle ein Bild aus + Bild senden + Abbrechen + Hochgeladenes und verarbeitetes Bild + Name: + Passwort: + Login + Benutzername oder Passwort ist falsch. + Fehler 400 - Seite nicht gefunden + Fehler beim Öffnen der Datei. + Name
diff --git a/docroot/text_en_GB.xml b/docroot/text_en_GB.xml index fc8d516..0492a8b 100644 --- a/docroot/text_en_GB.xml +++ b/docroot/text_en_GB.xml @@ -10,6 +10,14 @@ Pair Transgender (M->F) Transgender (F->M) + Leave + Search + Inbox + History + In chat for {1} + Timeout in {1} + Conversations with already logged in users]]> + No previous conversations available.
diff --git a/docroot/text_en_US.xml b/docroot/text_en_US.xml index 39b12b2..0b993a1 100644 --- a/docroot/text_en_US.xml +++ b/docroot/text_en_US.xml @@ -10,6 +10,14 @@ Pair Transgender (M->F) Transgender (F->M) + Leave + Search + Inbox + History + In chat for {1} + Timeout in {1} + Conversations with already logged in users]]> + No previous conversations available.
diff --git a/docroot/text_es_ES.xml b/docroot/text_es_ES.xml index 1d2a07a..00846c0 100644 --- a/docroot/text_es_ES.xml +++ b/docroot/text_es_ES.xml @@ -10,6 +10,14 @@ Pareja Transgénero (H->M) Transgénero (M->H) + Salir + Buscar + Bandeja de entrada + Historial + En el chat desde {1} + Desconexión en {1} + Conversaciones con usuarios ya conectados]]> + No hay conversaciones anteriores disponibles.
diff --git a/docroot/text_fr_FR.xml b/docroot/text_fr_FR.xml index 94117ee..304b0eb 100644 --- a/docroot/text_fr_FR.xml +++ b/docroot/text_fr_FR.xml @@ -10,6 +10,14 @@ Couple Transgenre (H->F) Transgenre (F->H) + Quitter + Recherche + Boîte de réception + Historique + En chat depuis {1} + Expiration dans {1} + Conversations avec des utilisateurs déjà connectés]]> + Aucune conversation précédente disponible.
diff --git a/docroot/text_it_IT.xml b/docroot/text_it_IT.xml index b0fd750..961656d 100644 --- a/docroot/text_it_IT.xml +++ b/docroot/text_it_IT.xml @@ -10,6 +10,14 @@ Coppia Trans (M->F) Trans (F->M) + Esci + Cerca + Posta in arrivo + Cronologia + In chat da {1} + Timeout tra {1} + Conversazioni con utenti già collegati]]> + Nessuna conversazione precedente disponibile.
diff --git a/docroot/text_ja_JP.xml b/docroot/text_ja_JP.xml index d60431b..505808d 100644 --- a/docroot/text_ja_JP.xml +++ b/docroot/text_ja_JP.xml @@ -10,6 +10,14 @@ カップル トランスジェンダー (M->F) トランスジェンダー (F->M) + 退出 + 検索 + 受信トレイ + 履歴 + チャット中: {1} + タイムアウトまで {1} + すでにログインしているユーザーとの会話]]> + 過去の会話はありません。
diff --git a/docroot/text_th_TH.xml b/docroot/text_th_TH.xml index 7c0b9b5..5e2983f 100644 --- a/docroot/text_th_TH.xml +++ b/docroot/text_th_TH.xml @@ -10,6 +10,14 @@ คู่รัก ทรานส์เจนเดอร์ (ช->ญ) ทรานส์เจนเดอร์ (ญ->ช) + ออกจากห้อง + ค้นหา + กล่องจดหมาย + ประวัติ + อยู่ในห้องแชทมาแล้ว {1} + หมดเวลาในอีก {1} + การสนทนากับผู้ใช้ที่ล็อกอินอยู่แล้ว]]> + ยังไม่มีกิจกรรมการสนทนาก่อนหน้านี้
diff --git a/docroot/text_tl_PH.xml b/docroot/text_tl_PH.xml index 759cfb4..8b412df 100644 --- a/docroot/text_tl_PH.xml +++ b/docroot/text_tl_PH.xml @@ -10,6 +10,14 @@ Mag-partner Transgender (M->F) Transgender (F->M) + Umalis + Maghanap + Inbox + Kasaysayan + Nasa chat nang {1} + Mawawala sa {1} + Mga pag-uusap sa mga naka-log in na user]]> + Walang mga naunang pag-uusap.
diff --git a/docroot/text_zh_CN.xml b/docroot/text_zh_CN.xml index f981729..21b8fb3 100644 --- a/docroot/text_zh_CN.xml +++ b/docroot/text_zh_CN.xml @@ -10,6 +10,14 @@ 情侣 跨性别 (男->女) 跨性别 (女->男) + 离开 + 搜索 + 收件箱 + 历史 + 已在线 {1} + 将在 {1} 后断开 + 与已登录用户的会话]]> + 暂无历史会话。
diff --git a/src/app.cpp b/src/app.cpp index 71ca3f6..4095f20 100644 --- a/src/app.cpp +++ b/src/app.cpp @@ -532,7 +532,10 @@ std::unique_ptr App::createInfoText(Wt::Json::Object userData) { } std::unique_ptr App::createBlockButton(Wt::Json::Object userData) { - auto blockButton = std::make_unique((bool)userData["blocked"] ? "Unblock user" : "Block user"); + auto blockButton = std::make_unique( + (bool)userData["blocked"] + ? Wt::WString::tr("button_unblock_user") + : Wt::WString::tr("button_block_user")); blockButton->clicked().connect([=, this]() mutable { server_.toggleBlockUser(userName, (std::string)userData["name"], sessionId()); }); @@ -566,15 +569,15 @@ Wt::WLineEdit* App::createInputLine(Wt::WHBoxLayout* inputLayout) { Wt::WImage* App::createSendImageButton(Wt::WHBoxLayout* inputLayout) { auto sendImageButton = inputLayout->addWidget(std::make_unique(Wt::WLink("/image.png"))); - sendImageButton->setToolTip("Send an image"); + sendImageButton->setToolTip(Wt::WString::tr("tooltip_send_image")); sendImageButton->clicked().connect(this, &App::sendImage); return sendImageButton; } void App::sendImage() { - auto fileDialog = root()->addNew("Send Image to User"); + auto fileDialog = root()->addNew(Wt::WString::tr("dialog_send_image_title")); auto layout = fileDialog->contents()->setLayout(std::make_unique()); - layout->addWidget(std::make_unique("Please select an immage")); + layout->addWidget(std::make_unique(Wt::WString::tr("dialog_send_image_text"))); auto fileWidget = layout->addWidget(std::make_unique()); fileWidget->setFilters("image/*"); auto image = layout->addWidget(std::make_unique()); @@ -582,18 +585,20 @@ void App::sendImage() { image->setHeight(Wt::WLength::Auto); auto localImage = std::make_shared(); auto buttonsContainer = layout->addWidget(std::make_unique()); - auto okButton = buttonsContainer->addNew("Send image"); + auto okButton = buttonsContainer->addNew(Wt::WString::tr("dialog_send_image_ok")); fileWidget->uploaded().connect([=, this]() mutable { imageUploaded(fileWidget, localImage, image, okButton); }); fileWidget->changed().connect([=]() { fileWidget->upload(); }); - fileWidget->fileTooLarge().connect([](){ std::cout << "file too big" << std::endl; }); + fileWidget->fileTooLarge().connect([](){ + std::cout << "file too big" << std::endl; + }); okButton->setDisabled(true); okButton->clicked().connect([=, this]() { server_.addImage(sessionId(), currentConversationWith_, localImage); fileDialog->accept(); }); - auto cancelButton = buttonsContainer->addNew("Cancel"); + auto cancelButton = buttonsContainer->addNew(Wt::WString::tr("dialog_send_image_cancel")); cancelButton->clicked().connect([=](){ fileDialog->reject(); }); fileDialog->setClosable(true); fileDialog->setModal(true); @@ -617,7 +622,7 @@ void App::imageUploaded(Wt::WFileUpload *fileWidget, std::shared_ptr(mimeType); memoryResource->setData(static_cast(displayBlob.data()), displayBlob.length()); image->setImageLink(Wt::WLink(memoryResource)); - image->setAlternateText("Hochgeladenes und verarbeitetes Bild"); + image->setAlternateText(Wt::WString::tr("image_uploaded_processed")); okButton->setEnabled(true); triggerUpdate(); } catch (const std::exception& e) { @@ -673,14 +678,14 @@ void App::showAdminPage(std::string page) { void App::showAdminLogin(std::string page) { contentContainer_->clear(); auto loginContainer = contentContainer_->addNew(); - loginContainer->addNew("Name:"); + loginContainer->addNew(Wt::WString::tr("admin_name")); auto nameEdit = loginContainer->addNew(); loginContainer->addNew(); - loginContainer->addNew("Password:"); + loginContainer->addNew(Wt::WString::tr("admin_password")); auto passwordEdit = loginContainer->addNew(); passwordEdit->setEchoMode(Wt::EchoMode::Password); loginContainer->addNew(); - auto loginButton = loginContainer->addNew("Login"); + auto loginButton = loginContainer->addNew(Wt::WString::tr("admin_login_button")); auto messageLabel = loginContainer->addNew(); auto loginAction = [=, this] { if (nameEdit->text().toUTF8() == adminName && passwordEdit->text().toUTF8() == adminPassword) { @@ -689,7 +694,7 @@ void App::showAdminLogin(std::string page) { showAdminPage(page); } else { isLoggedInAsAdmin = false; - messageLabel->setText("Incorrect username or password."); + messageLabel->setText(Wt::WString::tr("admin_login_error")); messageLabel->decorationStyle().setForegroundColor(Wt::WColor("red")); } }; @@ -699,7 +704,7 @@ void App::showAdminLogin(std::string page) { void App::showPageNotExists() { contentContainer_->clear(); - auto errorMessageLabel = contentContainer_->addNew("Error 400 - Page not found"); + auto errorMessageLabel = contentContainer_->addNew(Wt::WString::tr("error_page_not_found")); errorMessageLabel->decorationStyle().setForegroundColor(Wt::WColor("red")); } @@ -708,7 +713,7 @@ void App::showAdminLogins() { contentContainer_->addNew("

Logins

", Wt::TextFormat::UnsafeXHTML); std::ifstream file("../logs/logins.log"); if (!file.is_open()) { - contentContainer_->addNew("Error opening file."); + contentContainer_->addNew(Wt::WString::tr("error_opening_file")); return; } std::stringstream buffer; @@ -718,10 +723,10 @@ void App::showAdminLogins() { Wt::Json::parse(fileContent, jsonArray); auto table = contentContainer_->addNew(); table->setHeaderCount(1); - table->elementAt(0, 0)->addNew("Name"); - table->elementAt(0, 1)->addNew("Country"); - table->elementAt(0, 2)->addNew("Gender"); - table->elementAt(0, 3)->addNew("Age"); + table->elementAt(0, 0)->addNew(Wt::WString::tr("label_name")); + table->elementAt(0, 1)->addNew(Wt::WString::tr("label_country")); + table->elementAt(0, 2)->addNew(Wt::WString::tr("label_gender")); + table->elementAt(0, 3)->addNew(Wt::WString::tr("label_age")); table->elementAt(0, 4)->addNew("Datum"); table->elementAt(0, 5)->addNew("Uhrzeit"); int row = 1; @@ -827,7 +832,7 @@ Wt::WContainerWidget* App::createSmileyBar(Wt::WContainerWidget* parent, Wt::WLi } Wt::WPushButton* App::createSendButton(Wt::WHBoxLayout* inputLayout, Wt::WLineEdit* inputLine) { - auto sendButton = inputLayout->addWidget(std::make_unique("Send")); + auto sendButton = inputLayout->addWidget(std::make_unique(Wt::WString::tr("button_send"))); auto sendMessageFunction = [=, this]() { sendMessage(inputLine); }; @@ -1002,7 +1007,8 @@ std::string App::replaceSmileys(std::string outputText) { } void App::showUnreadMessages(Wt::Json::Object data) { - Wt::WString buttonText = (int)data["data"] == 0 ? "Inbox" : Wt::WString("Inbox ({1})").arg((int)data["data"]); + Wt::WString base = Wt::WString::tr("menu_inbox"); + Wt::WString buttonText = (int)data["data"] == 0 ? base : Wt::WString("{1} ({2})").arg(base).arg((int)data["data"]); auto currentText = inbox_->text(); inbox_->setText(buttonText); std::string pattern{"Inbox\\(\\s*(\\d+)\\)"}; @@ -1016,7 +1022,7 @@ void App::showUnreadMessages(Wt::Json::Object data) { if (oldValue < (int)data["data"] && (int)data["data"] > 0) { doPlay = true; } - } else if (text == "Inbox" && buttonText != "Inbox") { + } else if (text == Wt::WString::tr("menu_inbox") && buttonText != Wt::WString::tr("menu_inbox")) { doPlay = true; } if (doPlay) { @@ -1138,7 +1144,7 @@ void App::createMenu() { } void App::addLeaveButton() { - auto leaveButton = menuContainer_->addNew("Leave"); + auto leaveButton = menuContainer_->addNew(Wt::WString::tr("menu_leave")); leaveButton->clicked().connect(this, &App::logout); } @@ -1153,7 +1159,7 @@ void App::logout() { } void App::addHistoryButton() { - auto history = menuContainer_->addNew("History"); + auto history = menuContainer_->addNew(Wt::WString::tr("menu_history")); history->clicked().connect(this, &App::requestHistory); } @@ -1173,12 +1179,12 @@ void App::addIdentifier() { } void App::addSearchButton() { - auto searchButton = menuContainer_->addNew("Search"); + auto searchButton = menuContainer_->addNew(Wt::WString::tr("menu_search")); searchButton->clicked().connect(this, &App::showSearchWindow); } void App::addInboxButton() { - inbox_ = menuContainer_->addNew("Inbox"); + inbox_ = menuContainer_->addNew(Wt::WString::tr("menu_inbox")); inbox_->clicked().connect(this, &App::openInbox); } @@ -1330,14 +1336,14 @@ void App::requestHistory() { void App::showHistory(Wt::Json::Object broadcast) { try { contentContainer_->clear(); - auto headerWidget = contentContainer_->addNew("

Conversations with already logged in users

"); + auto headerWidget = contentContainer_->addNew(Wt::WString::tr("history_title"), Wt::TextFormat::UnsafeXHTML); headerWidget->setInline(false); auto listWidget = contentContainer_->addNew(); auto dataArray = (Wt::Json::Array)broadcast["data"]; if (dataArray.empty()) { // Keine bisherigen Unterhaltungen vorhanden - contentContainer_->addNew("No previous conversations available."); + contentContainer_->addNew(Wt::WString::tr("history_empty")); } else { for (Wt::Json::Object user: dataArray) { auto userName = std::make_shared((std::string)user["name"]); @@ -1378,7 +1384,7 @@ void App::addLoginTimeView() { elapsedTimeStream << std::setw(2) << std::setfill('0') << hours << ":" << std::setw(2) << std::setfill('0') << minutes << " h"; std::string elapsedTimeString = elapsedTimeStream.str(); - loggedinTimeWidget->setText(Wt::WString("In chat for {1}").arg(elapsedTimeString)); + loggedinTimeWidget->setText(Wt::WString::tr("menu_in_chat_for").arg(elapsedTimeString)); }; loginTimer_->timeout().connect(loggedInRefresh); loggedInRefresh(); @@ -1398,7 +1404,7 @@ void App::addTimeoutView() { remainingTimeStream << std::setw(2) << std::setfill('0') << minutes << ":" << std::setw(2) << std::setfill('0') << seconds << " m"; std::string elapsedTimeString = remainingTimeStream.str(); - timeoutRemainingWidget->setText(Wt::WString("Timeout in {1}").arg(elapsedTimeString)); + timeoutRemainingWidget->setText(Wt::WString::tr("menu_timeout_in").arg(elapsedTimeString)); }; timeoutRemainingTimer_->timeout().connect(timeoutRemainingRefresh); timeoutRemainingRefresh();