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)
+
+
+
+
+
+
+ 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)
+
+
+
+
+
+
+ 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)
+
+
+
+
+
+
+ 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)
+
+
+
+
+
+
+ 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)
+
+
+
+
+
+
+ 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)
+
+
+
+
+
+
+ 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)
+
+
+
+
+
+
+ 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)
+
+
+
+
+
+
+ すでにログインしているユーザーとの会話]]>
+ 過去の会話はありません。
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 @@
คู่รัก
ทรานส์เจนเดอร์ (ช->ญ)
ทรานส์เจนเดอร์ (ญ->ช)
+
+
+
+
+
+
+ การสนทนากับผู้ใช้ที่ล็อกอินอยู่แล้ว]]>
+ ยังไม่มีกิจกรรมการสนทนาก่อนหน้านี้
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)
+
+
+
+
+
+
+ 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 @@
情侣
跨性别 (男->女)
跨性别 (女->男)
+
+
+
+
+
+
+ 与已登录用户的会话]]>
+ 暂无历史会话。
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();