summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/include/turns/app/windows/main.hpp4
-rw-r--r--app/src/windows/main.cpp8
-rw-r--r--app/tests/windows/main.cpp15
-rw-r--r--lang/CMakeLists.txt18
-rw-r--r--lang/include/turns/lang/messages.hpp23
-rw-r--r--lang/po/de.po12
-rw-r--r--lang/po/en_US.po12
-rw-r--r--lang/po/labels/de.po5
-rw-r--r--lang/po/labels/en_US.po5
-rw-r--r--lang/po/menu_items/de.po2
-rw-r--r--lang/po/menu_items/en_US.po2
-rw-r--r--lang/po/tooltips/de.po2
-rw-r--r--lang/po/tooltips/en_US.po2
-rw-r--r--lang/tests/labels.cpp30
-rw-r--r--lang/tests/menu_items.cpp29
-rw-r--r--lang/tests/tooltips.cpp (renamed from lang/tests/translations.cpp)14
-rw-r--r--res/windows/main_window.ui1
-rw-r--r--res/windows/windows.cmb1
18 files changed, 147 insertions, 38 deletions
diff --git a/app/include/turns/app/windows/main.hpp b/app/include/turns/app/windows/main.hpp
index 9d2e1c3..a39d156 100644
--- a/app/include/turns/app/windows/main.hpp
+++ b/app/include/turns/app/windows/main.hpp
@@ -5,6 +5,7 @@
#include <glibmm/refptr.h>
#include <gtkmm/applicationwindow.h>
#include <gtkmm/builder.h>
+#include <gtkmm/button.h>
namespace turns::app::windows
{
@@ -14,10 +15,11 @@ namespace turns::app::windows
main(BaseObjectType * base, Glib::RefPtr<Gtk::Builder> const builder);
private:
+ Gtk::Button * m_add_participant;
AdwApplicationWindow * m_adw;
AdwWindowTitle * m_title;
};
-} // namespace turns::app
+} // namespace turns::app::windows
#endif \ No newline at end of file
diff --git a/app/src/windows/main.cpp b/app/src/windows/main.cpp
index 0000f60..d8118c6 100644
--- a/app/src/windows/main.cpp
+++ b/app/src/windows/main.cpp
@@ -1,17 +1,23 @@
#include "turns/app/windows/main.hpp"
+#include "turns/lang/messages.hpp"
+
#include <adwaita.h>
#include <glibmm/i18n.h>
namespace turns::app::windows
{
+ using namespace turns::lang;
+
main::main(BaseObjectType * base, Glib::RefPtr<Gtk::Builder> const builder)
: Gtk::ApplicationWindow{base}
+ , m_add_participant{builder->get_widget<Gtk::Button>("add_participant")}
, m_adw{ADW_APPLICATION_WINDOW(gobj())}
, m_title(ADW_WINDOW_TITLE(builder->get_widget<Gtk::Widget>("title")->gobj()))
{
- adw_window_title_set_subtitle(m_title, _("No active turn-order"));
+ m_add_participant->set_tooltip_text(_(tooltips::add_a_participant));
+ adw_window_title_set_subtitle(m_title, _(labels::no_active_turn_order));
}
} // namespace turns::app::windows \ No newline at end of file
diff --git a/app/tests/windows/main.cpp b/app/tests/windows/main.cpp
index 53c9386..fca04fd 100644
--- a/app/tests/windows/main.cpp
+++ b/app/tests/windows/main.cpp
@@ -1,5 +1,7 @@
#include "turns/app/windows/main.hpp"
+#include "turns/lang/messages.hpp"
+
#include <catch2/catch_test_macros.hpp>
#include <catch2/generators/catch_generators.hpp>
@@ -9,11 +11,14 @@
#include <glibmm/i18n.h>
#include <glibmm/ustring.h>
#include <gtkmm/builder.h>
+#include <gtkmm/button.h>
#include <gtkmm/widget.h>
namespace turns::app::windows::tests
{
+ using namespace turns::lang;
+
TEST_CASE("Newly constructed main window", "[windows]")
{
auto locale = GENERATE("en_US.UTF-8", "de_CH.UTF-8");
@@ -38,7 +43,7 @@ namespace turns::app::windows::tests
{
auto widget = builder->get_widget<Gtk::Widget>("title");
auto adw = ADW_WINDOW_TITLE(widget->gobj());
- REQUIRE(adw_window_title_get_subtitle(adw) == Glib::ustring{_("No active turn-order")});
+ REQUIRE(adw_window_title_get_subtitle(adw) == Glib::ustring{_(labels::no_active_turn_order)});
}
SECTION("the window title is not empty")
@@ -52,7 +57,13 @@ namespace turns::app::windows::tests
{
auto widget = builder->get_widget<Gtk::Widget>("title");
auto adw = ADW_WINDOW_TITLE(widget->gobj());
- REQUIRE(adw_window_title_get_title(adw) == Glib::ustring{_("Turns")});
+ REQUIRE(adw_window_title_get_title(adw) == Glib::ustring{_(labels::turns)});
+ }
+
+ SECTION("the add_participant button has the correct tooltip")
+ {
+ auto widget = builder->get_widget<Gtk::Button>("add_participant");
+ REQUIRE(widget->get_tooltip_text() == Glib::ustring{_(tooltips::add_a_participant)});
}
}
diff --git a/lang/CMakeLists.txt b/lang/CMakeLists.txt
index 9ba960b..61e0488 100644
--- a/lang/CMakeLists.txt
+++ b/lang/CMakeLists.txt
@@ -4,7 +4,10 @@ set(TRANSLATIONS
)
foreach(LANG IN LISTS TRANSLATIONS)
- set(SOURCE_FILE "${CMAKE_CURRENT_SOURCE_DIR}/po/${LANG}.po")
+ set(BASE_SOURCE_FILE "${CMAKE_CURRENT_SOURCE_DIR}/po/${LANG}.po")
+ set(LABELS_SOURCE_FILE "${CMAKE_CURRENT_SOURCE_DIR}/po/labels/${LANG}.po")
+ set(MENU_ITEMS_SOURCE_FILE "${CMAKE_CURRENT_SOURCE_DIR}/po/menu_items/${LANG}.po")
+ set(TOOLTIPS_SOURCE_FILE "${CMAKE_CURRENT_SOURCE_DIR}/po/tooltips/${LANG}.po")
set(BINARY_FILE "${CMAKE_CURRENT_BINARY_DIR}/${LANG}/LC_MESSAGES/turns.mo")
list(APPEND TRANSLATION_BINARIES "${BINARY_FILE}")
@@ -14,7 +17,10 @@ foreach(LANG IN LISTS TRANSLATIONS)
ARGS
"-o"
"${BINARY_FILE}"
- "${SOURCE_FILE}"
+ "${BASE_SOURCE_FILE}"
+ "${LABELS_SOURCE_FILE}"
+ "${MENU_ITEMS_SOURCE_FILE}"
+ "${TOOLTIPS_SOURCE_FILE}"
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
DEPENDS "${SOURCE_FILE}"
COMMENT "Processing translation ${LANG}"
@@ -35,12 +41,18 @@ target_compile_definitions("lang" INTERFACE
"LOCALEDIR=\"${CMAKE_INSTALL_FULL_LOCALEDIR}\""
)
+target_include_directories("lang" INTERFACE
+ "include"
+)
+
add_dependencies("lang" "mofiles")
# Tests
add_executable("lang-tests"
- "tests/translations.cpp"
+ "tests/labels.cpp"
+ "tests/menu_items.cpp"
+ "tests/tooltips.cpp"
)
target_link_libraries("lang-tests" PRIVATE
diff --git a/lang/include/turns/lang/messages.hpp b/lang/include/turns/lang/messages.hpp
new file mode 100644
index 0000000..a6ff5ee
--- /dev/null
+++ b/lang/include/turns/lang/messages.hpp
@@ -0,0 +1,23 @@
+#ifndef TURNS_LANG_MESSAGES_HPP
+#define TURNS_LANG_MESSAGES_HPP
+
+namespace turns::lang
+{
+ namespace menu_items
+ {
+ auto constexpr static quit = "_Quit";
+ } // namespace menu_items
+
+ namespace labels
+ {
+ auto constexpr static no_active_turn_order = "No active turn-order";
+ auto constexpr static turns = "Turns";
+ } // namespace labels
+
+ namespace tooltips
+ {
+ auto constexpr static add_a_participant = "Add a participant";
+ } // namespace tooltips
+} // namespace turns::lang
+
+#endif \ No newline at end of file
diff --git a/lang/po/de.po b/lang/po/de.po
index aca650c..c775800 100644
--- a/lang/po/de.po
+++ b/lang/po/de.po
@@ -7,15 +7,3 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-msgid "Add a participant"
-msgstr "Teilnehmer hinzufügen"
-
-msgid "No active turn-order"
-msgstr "Keine aktive Zugreihenfolge"
-
-msgid "_Quit"
-msgstr "_Beenden"
-
-msgid "Turns"
-msgstr "Züge"
diff --git a/lang/po/en_US.po b/lang/po/en_US.po
index 31fa912..5ffcd74 100644
--- a/lang/po/en_US.po
+++ b/lang/po/en_US.po
@@ -7,15 +7,3 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-msgid "Add a participant"
-msgstr "Add a participant"
-
-msgid "No active turn-order"
-msgstr "No active turn-order"
-
-msgid "_Quit"
-msgstr "_Quit"
-
-msgid "Turns"
-msgstr "Turns"
diff --git a/lang/po/labels/de.po b/lang/po/labels/de.po
new file mode 100644
index 0000000..d1cf410
--- /dev/null
+++ b/lang/po/labels/de.po
@@ -0,0 +1,5 @@
+msgid "No active turn-order"
+msgstr "Keine aktive Zugreihenfolge"
+
+msgid "Turns"
+msgstr "Züge"
diff --git a/lang/po/labels/en_US.po b/lang/po/labels/en_US.po
new file mode 100644
index 0000000..1761c41
--- /dev/null
+++ b/lang/po/labels/en_US.po
@@ -0,0 +1,5 @@
+msgid "No active turn-order"
+msgstr "No active turn-order"
+
+msgid "Turns"
+msgstr "Turns"
diff --git a/lang/po/menu_items/de.po b/lang/po/menu_items/de.po
new file mode 100644
index 0000000..4351945
--- /dev/null
+++ b/lang/po/menu_items/de.po
@@ -0,0 +1,2 @@
+msgid "_Quit"
+msgstr "_Beenden"
diff --git a/lang/po/menu_items/en_US.po b/lang/po/menu_items/en_US.po
new file mode 100644
index 0000000..7b59e50
--- /dev/null
+++ b/lang/po/menu_items/en_US.po
@@ -0,0 +1,2 @@
+msgid "_Quit"
+msgstr "_Quit"
diff --git a/lang/po/tooltips/de.po b/lang/po/tooltips/de.po
new file mode 100644
index 0000000..da788ae
--- /dev/null
+++ b/lang/po/tooltips/de.po
@@ -0,0 +1,2 @@
+msgid "Add a participant"
+msgstr "Teilnehmer hinzufügen"
diff --git a/lang/po/tooltips/en_US.po b/lang/po/tooltips/en_US.po
new file mode 100644
index 0000000..cd80911
--- /dev/null
+++ b/lang/po/tooltips/en_US.po
@@ -0,0 +1,2 @@
+msgid "Add a participant"
+msgstr "Add a participant"
diff --git a/lang/tests/labels.cpp b/lang/tests/labels.cpp
new file mode 100644
index 0000000..3ebdf42
--- /dev/null
+++ b/lang/tests/labels.cpp
@@ -0,0 +1,30 @@
+#include "turns/lang/messages.hpp"
+
+#include <catch2/catch_test_macros.hpp>
+#include <catch2/generators/catch_generators.hpp>
+
+#include <format>
+#include <string>
+
+#include <libintl.h>
+
+namespace turns::lang::tests
+{
+
+ TEST_CASE("Label translations")
+ {
+ auto message = GENERATE(
+ labels::no_active_turn_order,
+ labels::turns
+ );
+
+ auto locale = GENERATE("de_CH.UTF-8", "de_DE.UTF-8", "de_AT.UTF-8");
+
+ SECTION(std::format("'{}' has a translation in '{}'", message, locale))
+ {
+ setlocale(LC_ALL, locale);
+ REQUIRE(std::string{gettext(message)} != message);
+ }
+ }
+
+} // namespace turns::lang::tests \ No newline at end of file
diff --git a/lang/tests/menu_items.cpp b/lang/tests/menu_items.cpp
new file mode 100644
index 0000000..71fdef5
--- /dev/null
+++ b/lang/tests/menu_items.cpp
@@ -0,0 +1,29 @@
+#include "turns/lang/messages.hpp"
+
+#include <catch2/catch_test_macros.hpp>
+#include <catch2/generators/catch_generators.hpp>
+
+#include <format>
+#include <string>
+
+#include <libintl.h>
+
+namespace turns::lang::tests
+{
+
+ TEST_CASE("Menu item translations")
+ {
+ auto message = GENERATE(
+ menu_items::quit
+ );
+
+ auto locale = GENERATE("de_CH.UTF-8", "de_DE.UTF-8", "de_AT.UTF-8");
+
+ SECTION(std::format("'{}' has a translation in '{}'", message, locale))
+ {
+ setlocale(LC_ALL, locale);
+ REQUIRE(std::string{gettext(message)} != message);
+ }
+ }
+
+} // namespace turns::lang::tests \ No newline at end of file
diff --git a/lang/tests/translations.cpp b/lang/tests/tooltips.cpp
index 1bb78a5..66b6d72 100644
--- a/lang/tests/translations.cpp
+++ b/lang/tests/tooltips.cpp
@@ -1,3 +1,5 @@
+#include "turns/lang/messages.hpp"
+
#include <catch2/catch_test_macros.hpp>
#include <catch2/generators/catch_generators.hpp>
@@ -6,13 +8,13 @@
#include <format>
#include <string>
-TEST_CASE("All supported languages have translations")
+namespace turns::lang::tests
+{
+
+TEST_CASE("Tooltip translations")
{
auto message = GENERATE(
- "Turns",
- "Add a participant",
- "No active turn-order",
- "_Quit"
+ tooltips::add_a_participant
);
auto locale = GENERATE(
@@ -27,3 +29,5 @@ TEST_CASE("All supported languages have translations")
REQUIRE(std::string{gettext(message)} != message);
}
}
+
+} \ No newline at end of file
diff --git a/res/windows/main_window.ui b/res/windows/main_window.ui
index 631e6a7..4106421 100644
--- a/res/windows/main_window.ui
+++ b/res/windows/main_window.ui
@@ -31,7 +31,6 @@
<child type="start">
<object class="GtkButton" id="add_participant">
<property name="icon-name">contact-new</property>
- <property name="tooltip-text" translatable="yes">Add a participant</property>
</object>
</child>
</object>
diff --git a/res/windows/windows.cmb b/res/windows/windows.cmb
index 09117bd..91a0184 100644
--- a/res/windows/windows.cmb
+++ b/res/windows/windows.cmb
@@ -30,7 +30,6 @@
(1,7,"GtkMenuButton","icon-name","open-menu",None,None,None,None,None,None,None,None,None),
(1,7,"GtkMenuButton","menu-model","9",None,None,None,None,None,None,None,None,None),
(1,8,"GtkButton","icon-name","contact-new",None,None,None,None,None,None,None,None,None),
- (1,8,"GtkWidget","tooltip-text","Add a participant",1,None,None,None,None,None,None,None,None),
(1,10,"(item)","action","app.quit",None,None,None,None,None,None,None,None,None),
(1,10,"(item)","label","_Quit",1,None,None,None,None,None,None,None,None)
</object_property>