diff --git a/NEWS.md b/NEWS.md index 9c187cd..4155266 100644 --- a/NEWS.md +++ b/NEWS.md @@ -10,6 +10,9 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ### Added +- Czech translations + [#58](https://github.com/orontee/taranis/issues/58) + - Dump/Restore most of model in application state [#57](https://github.com/orontee/taranis/issues/57) diff --git a/README.md b/README.md index 56181a7..2e189e3 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ e-book reader. * History of locations -* Translations (English, French, Polish) +* Translations (English, Czech, French, Polish) Weather data is provided by [OpenWeather](https://openweathermap.org). diff --git a/src/about.cc.in b/src/about.cc.in index 4e0b735..edc2074 100644 --- a/src/about.cc.in +++ b/src/about.cc.in @@ -14,9 +14,8 @@ namespace taranis { "For more details, read GNU General Public License," " version 3 or later") << "\n\n" << GetLangText("Credits") << "\n" - << " ⸱ Cyfranek\n" - << " ⸱ neilswann80\n" - << " ⸱ Matthias Meulien" << std::endl; + << " Cyfranek - Matthias Meulien - neilswann80 - vita56" + << std::endl; return content.str(); } } diff --git a/src/l10n.h b/src/l10n.h index 18e7713..54ec65c 100644 --- a/src/l10n.h +++ b/src/l10n.h @@ -3,8 +3,19 @@ #include #include #include +#include +#include namespace taranis { + +typedef std::map Translations; + +namespace l10n { +const extern Translations cs_translations; +const extern Translations fr_translations; +const extern Translations pl_translations; +} // namespace l10n + inline void initialize_translations() { const auto current_language = currentLang(); @@ -12,205 +23,19 @@ inline void initialize_translations() { LoadLanguage(current_language); - if (std::strcmp(current_language, "fr") == 0) { - // French translations - - // about.cc.in - AddTranslation( - "This program is provided without any warranty. For more details, " - "read GNU General Public License, version 3 or later", - "Ce programme est fourni sans aucune garantie. Pour plus de détails, " - "lisez la License publique générale GNU, version 3 ou ultérieure."); - AddTranslation("Credits", "Crédits"); - - // alerts.h - AddTranslation("Alert", "Alerte"); - AddTranslation("Start", "Début"); - AddTranslation("Duration", "Durée"); - AddTranslation("Source", "Source"); - AddTranslation("Next alert", "Alerte suivante"); - - // app.h - AddTranslation("Unsupported software version", "Logiciel incompatible"); - AddTranslation("The application isn't compatible with the software version " - "of this reader.", - "L'application n'est pas compatible avec la version " - "logicielle de ce matériel."); - AddTranslation("Network error", "Erreur réseau"); - AddTranslation( - "Failure while fetching weather data. Check your network connection.", - "Échec lors du rapatriement des données météorologiques. Vérifier la " - "connexion réseau."); - AddTranslation("Service unavailable", "Service indisponible"); - AddTranslation("Invalid input", "Saisie invalide"); - AddTranslation( - "Make sure you enter a town then a country separated by a comma.", - "Assurez-vous d'avoir saisi des noms de ville et de pays séparés par " - "une virgule."); - - // currentconditionbox.h - AddTranslation("Felt", "Ressenti"); - - // errors.h - AddTranslation("Location unknown to the service providing weather data. " - "Check spelling.", - "Localité inconnue du fournisseur de données " - "météorologiques. Vérifier l'orthographe."); - AddTranslation("Sorry, an unexpected error was encountered. Report this to " - "the application author.", - "Désolé, une erreur inattendue est survenue. Contacter le " - "responsable de l'application."); - AddTranslation( - "An API key is required to consume weather data. Contact the " - "application maintainer.", - "Une clé d'API est requise pour consommer les données météorologiques. " - "Contacter le responsable de l'application."); - AddTranslation( - "Weather data can't be accessed with the provided API key.", - "La clé d'API ne permet pas de consulter les données météorologiques."); - AddTranslation("The service providing weather data isn't working as " - "expected. Retry later.", - "Le fournisseur de données météorologiques est " - "hors-service. Réessayer plus tard."); - - // locationlist.cc - AddTranslation("Longitude", "Longitude"); - AddTranslation("Latitude", "Latitude"); - - // menu.h - AddTranslation("Standard", "Standard"); - AddTranslation("Metric", "Système métrique"); - AddTranslation("Imperial", "Unités impériales"); - AddTranslation("Refresh", "Mettre à jour"); - AddTranslation("Locations", "Lieux"); - AddTranslation("Units", "Unités"); - AddTranslation("About…", "À propos…"); - AddTranslation("Quit", "Quitter"); - AddTranslation("Add to favorites", "Ajouter aux favoris"); - AddTranslation("Remove from favorites", "Retirer des favoris"); - AddTranslation("Empty", "Vide"); - - // statusbar.h - AddTranslation("Ongoing update…", "Mise à jour en cours…"); - AddTranslation("Last update:", "Mis à jour :"); - AddTranslation("Weather data from", "Données météorologiques de"); - - // ui.h - AddTranslation("Sunrise", "Lever"); - AddTranslation("Sunset", "Coucher"); - AddTranslation("Pressure", "Pression"); - AddTranslation("Humidity", "Humidité"); - AddTranslation("UV index", "Index UV"); - AddTranslation("Visibility", "Visibilité"); - AddTranslation("Wind", "Vent"); - AddTranslation("Gust", "Rafale"); - + const Translations *translations{nullptr}; + if (std::strcmp(current_language, "cs") == 0) { + translations = &l10n::cs_translations; + } else if (std::strcmp(current_language, "fr") == 0) { + translations = &l10n::fr_translations; } else if (std::strcmp(current_language, "pl") == 0) { - // Polish translations - - // about.cc.in - AddTranslation( - "This program is provided without any warranty. For more details, " - "read GNU General Public License, version 3 or later", - "Ta aplikacja jest dostarczona bez żadnej gwarancji. Aby poznać " - "więcej, " - "zapoznaj się z warunkami GNU General Public License w wersji 3 lub " - "nowszej."); - AddTranslation("Credits", "Kredyty"); - - // alerts.h - AddTranslation("Alert", "Alert"); - AddTranslation("Start", "Zacznij o"); - AddTranslation("Duration", "Przez"); - AddTranslation("Source", "Źródło"); - AddTranslation("Next alert", "Następne powiadomienie"); - - // app.h - AddTranslation("Unsupported software version", - "Nieobsługiwana wersja oprogramowania"); - AddTranslation("The application isn't compatible with the software version " - "of this reader.", - "Aplikacja nie jest zgodna z oprogramowaniem " - "tego czytnika."); - AddTranslation("Network error", "Błąd połączenia"); - AddTranslation( - "Failure while fetching weather data. Check your network connection.", - "Wystąpił błąd podczas pobierania danych pogodowych. Sprawdź " - "połączenie sieciowe."); - AddTranslation("Service unavailable", "Usługa niedostępna"); - AddTranslation("Invalid input", "Wprowadzono błędne dane"); - AddTranslation( - "Make sure you enter a town then a country separated by a comma.", - "Upewnij się, że podano poprawnie nazwę miasta i państwa " - "rozdzielone przecinkiem."); - - // currentconditionbox.h - AddTranslation("Felt", "Temp. odczuwalna"); - - // errors.h - AddTranslation("Location unknown to the service providing weather data. " - "Check spelling.", - "Lokalizacja nieznana w serwisie pogodowym. " - "Sprawdź pisownię."); - AddTranslation("Sorry, an unexpected error was encountered. Report this to " - "the application author.", - "Wystąpił błąd aplikacji. Poinformuj " - "autora."); - AddTranslation( - "An API key is required to consume weather data. Contact the " - "application maintainer.", - "Do pobierania danych pogodowych wymagany jest klucz API. " - "Skontaktuj się z autorem aplikacji."); - AddTranslation( - "Weather data can't be accessed with the provided API key.", - "Dane pogodowe nie są dostępne przy użyciu tego klucza API."); - AddTranslation("The service providing weather data isn't working as " - "expected. Retry later.", - "Serwis udostępniający dane pogodowe nie działa zgodnie" - "z oczekiwaniami. Spróbuj później."); - - // locationlist.cc - AddTranslation("Longitude", "Długość geo."); - AddTranslation("Latitude", "Szerokość"); - - // menu.h - AddTranslation("Standard", "SI"); - AddTranslation("Metric", "Metryczne"); - AddTranslation("Imperial", "Imperialne"); - AddTranslation("Refresh", "Odśwież"); - AddTranslation("Locations", "Lokalizacje"); - AddTranslation("Units", "Jednostki"); - AddTranslation("About…", "O aplikacji"); - AddTranslation("Quit", "Wyjście"); - AddTranslation("Add to favorites", "Dodaj do ulubionych"); - AddTranslation("Remove from favorites", "Usuń z ulubionych"); - AddTranslation("Empty", "Pusty"); - - // statusbar.h - AddTranslation("Ongoing update…", "Trwa aktualizacja…"); - AddTranslation("Last update:", "Ostatnia aktualizacja:"); - AddTranslation("Weather data from", "Dane pogodowe z"); - - // ui.h - AddTranslation("Sunrise", "Wschód słońca"); - AddTranslation("Sunset", "Zachód słońca"); - AddTranslation("Pressure", "Ciśnienie"); - AddTranslation("Humidity", "Wilgotność"); - AddTranslation("UV index", "Indeks UV"); - AddTranslation("Visibility", "Widoczność"); - AddTranslation("Wind", "Wiatr"); - AddTranslation("Gust", "Porywisty wiatr"); - - } else if (std::strcmp(current_language, "de") == 0) { - // German translations - - // currentconditionbox.h - AddTranslation("Felt", "Gefühlt"); + translations = &l10n::pl_translations; + } - // statusbar.h - AddTranslation("Ongoing update…", "Laufendes Update…"); - AddTranslation("Last update:", "Aktualisiert am:"); - AddTranslation("Weather data from", "Wetterdaten von"); + if (translations) { + for (const auto &translation : l10n::fr_translations) { + AddTranslation(translation.first.c_str(), translation.second.c_str()); + } } } } // namespace taranis diff --git a/src/l10n/cs.cc b/src/l10n/cs.cc new file mode 100644 index 0000000..9e6f03f --- /dev/null +++ b/src/l10n/cs.cc @@ -0,0 +1,94 @@ +#include "../l10n.h" + +namespace taranis { +namespace l10n { + +// Czech translations + +const Translations cs_translations{ + // about.cc.in + {"This program is provided without any warranty. For more details, " + "read GNU General Public License, version 3 or later", + "Tento program je bez jakékoliv záruky. Další podrobnosti jsou" + "v GNU General Public License, verze 3 nebo novější."}, + {"Credits", "Poděkování"}, + + // alerts.h + {"Alert", "Výstraha"}, + {"Start", "Začátek"}, + {"Duration", "Přes"}, + {"Source", "Zdroj"}, + {"Next alert", "Následující výstraha"}, + + // app.h + {"Unsupported software version", "Nepodporovaná verze programu"}, + {"The application isn't compatible with the software version " + "of this reader.", + "Aplikace není kompatibilní s programovou verzí " + "této čtečky."}, + {"Network error", "Chyba sítě"}, + {"Failure while fetching weather data. Check your network connection.", + "Chyba při stahování dat o počasí. Zkontroluj " + "síťové připojení."}, + {"Service unavailable", "Služba není dostupná"}, + {"Invalid input", "Neplatné zadání"}, + {"Make sure you enter a town then a country separated by a comma.", + "Zkontroluj, zda je správné jméno města a potom státu" + "oddělené čárkou."}, + + // currentconditionbox.h + {"Felt", "Pocitová teplota"}, + + // errors.h + {"Location unknown to the service providing weather data. " + "Check spelling.", + "Lokalita není známá ve službě počasí. " + "Zkontroluj zápis."}, + {"Sorry, an unexpected error was encountered. Report this to " + "the application author.", + "Chyba aplikace. Informuj autora."}, + {"An API key is required to consume weather data. Contact the " + "application maintainer.", + "Pro odběr daných dat o počasí je vyžadován klíč API. " + "Kontaktuj autora aplikace."}, + {"Weather data can't be accessed with the provided API key.", + "Data o počasí nejsou dostupná s tímto klíčem API."}, + {"The service providing weather data isn't working as " + "expected. Retry later.", + "Služba poskytující data o počasí nepracuje správně" + "Zkus později."}, + + // locationlist.cc + {"Longitude", "Zem. délka"}, + {"Latitude", "Zem. šířka"}, + + // menu.h + {"Standard", "SI"}, + {"Metric", "Metrické"}, + {"Imperial", "Imperiální"}, + {"Refresh", "Aktualizuj"}, + {"Locations", "Lokality"}, + {"Units", "Jednotky"}, + {"About…", "O aplikaci"}, + {"Quit", "Konec"}, + {"Add to favorites", "Přidat do oblíbených"}, + {"Remove from favorites", "Odebrat z oblíbených"}, + {"Empty", "Prázdný"}, + + // statusbar.h + {"Ongoing update…", "Probíhá aktualizace…"}, + {"Last update:", "Poslední aktualizace:"}, + {"Weather data from", "Data o počasí z"}, + + // ui.h + {"Sunrise", "Východ slunce"}, + {"Sunset", "Západ slunce"}, + {"Pressure", "Tlak"}, + {"Humidity", "Vlhkost"}, + {"UV index", "Index UV"}, + {"Visibility", "Viditelnost"}, + {"Wind", "Vítr"}, + {"Gust", "Nárazový vítr"}, +}; +} // namespace l10n +} // namespace taranis diff --git a/src/l10n/fr.cc b/src/l10n/fr.cc new file mode 100644 index 0000000..10737de --- /dev/null +++ b/src/l10n/fr.cc @@ -0,0 +1,95 @@ +#include "../l10n.h" + +namespace taranis { +namespace l10n { + +// French translations + +const Translations fr_translations{ + // about.cc.in + {"This program is provided without any warranty. For more details, " + "read GNU General Public License, version 3 or later", + "Ce programme est fourni sans aucune garantie. Pour plus de détails, " + "lisez la License publique générale GNU, version 3 ou ultérieure."}, + {"Credits", "Crédits"}, + + // alerts.h + {"Alert", "Alerte"}, + {"Start", "Début"}, + {"Duration", "Durée"}, + {"Source", "Source"}, + {"Next alert", "Alerte suivante"}, + + // app.h + {"Unsupported software version", "Logiciel incompatible"}, + {"The application isn't compatible with the software version " + "of this reader.", + "L'application n'est pas compatible avec la version " + "logicielle de ce matériel."}, + {"Network error", "Erreur réseau"}, + {"Failure while fetching weather data. Check your network connection.", + "Échec lors du rapatriement des données météorologiques. Vérifier la " + "connexion réseau."}, + {"Service unavailable", "Service indisponible"}, + {"Invalid input", "Saisie invalide"}, + {"Make sure you enter a town then a country separated by a comma.", + "Assurez-vous d'avoir saisi des noms de ville et de pays séparés par " + "une virgule."}, + + // currentconditionbox.h + {"Felt", "Ressenti"}, + + // errors.h + {"Location unknown to the service providing weather data. " + "Check spelling.", + "Localité inconnue du fournisseur de données " + "météorologiques. Vérifier l'orthographe."}, + {"Sorry, an unexpected error was encountered. Report this to " + "the application author.", + "Désolé, une erreur inattendue est survenue. Contacter le " + "responsable de l'application."}, + {"An API key is required to consume weather data. Contact the " + "application maintainer.", + "Une clé d'API est requise pour consommer les données météorologiques. " + "Contacter le responsable de l'application."}, + {"Weather data can't be accessed with the provided API key.", + "La clé d'API ne permet pas de consulter les données météorologiques."}, + {"The service providing weather data isn't working as " + "expected. Retry later.", + "Le fournisseur de données météorologiques est " + "hors-service. Réessayer plus tard."}, + + // locationlist.cc + {"Longitude", "Longitude"}, + {"Latitude", "Latitude"}, + + // menu.h + {"Standard", "Standard"}, + {"Metric", "Système métrique"}, + {"Imperial", "Unités impériales"}, + {"Refresh", "Mettre à jour"}, + {"Locations", "Lieux"}, + {"Units", "Unités"}, + {"About…", "À propos…"}, + {"Quit", "Quitter"}, + {"Add to favorites", "Ajouter aux favoris"}, + {"Remove from favorites", "Retirer des favoris"}, + {"Empty", "Vide"}, + + // statusbar.h + {"Ongoing update…", "Mise à jour en cours…"}, + {"Last update:", "Mis à jour :"}, + {"Weather data from", "Données météorologiques de"}, + + // ui.h + {"Sunrise", "Lever"}, + {"Sunset", "Coucher"}, + {"Pressure", "Pression"}, + {"Humidity", "Humidité"}, + {"UV index", "Index UV"}, + {"Visibility", "Visibilité"}, + {"Wind", "Vent"}, + {"Gust", "Rafale"}, +}; +} // namespace l10n +} // namespace taranis diff --git a/src/l10n/meson.build b/src/l10n/meson.build new file mode 100644 index 0000000..aac7415 --- /dev/null +++ b/src/l10n/meson.build @@ -0,0 +1,5 @@ +sources += files( + 'cs.cc', + 'fr.cc', + 'pl.cc', +) diff --git a/src/l10n/pl.cc b/src/l10n/pl.cc new file mode 100644 index 0000000..2cd1493 --- /dev/null +++ b/src/l10n/pl.cc @@ -0,0 +1,97 @@ +#include "../l10n.h" + +namespace taranis { +namespace l10n { + +// Polish translations + +const Translations pl_translations{ + // about.cc.in + {"This program is provided without any warranty. For more details, " + "read GNU General Public License, version 3 or later", + "Ta aplikacja jest dostarczona bez żadnej gwarancji. Aby poznać " + "więcej, " + "zapoznaj się z warunkami GNU General Public License w wersji 3 lub " + "nowszej."}, + {"Credits", "Kredyty"}, + + // alerts.h + {"Alert", "Alert"}, + {"Start", "Zacznij o"}, + {"Duration", "Przez"}, + {"Source", "Źródło"}, + {"Next alert", "Następne powiadomienie"}, + + // app.h + {"Unsupported software version", "Nieobsługiwana wersja oprogramowania"}, + {"The application isn't compatible with the software version " + "of this reader.", + "Aplikacja nie jest zgodna z oprogramowaniem " + "tego czytnika."}, + {"Network error", "Błąd połączenia"}, + {"Failure while fetching weather data. Check your network connection.", + "Wystąpił błąd podczas pobierania danych pogodowych. Sprawdź " + "połączenie sieciowe."}, + {"Service unavailable", "Usługa niedostępna"}, + {"Invalid input", "Wprowadzono błędne dane"}, + {"Make sure you enter a town then a country separated by a comma.", + "Upewnij się, że podano poprawnie nazwę miasta i państwa " + "rozdzielone przecinkiem."}, + + // currentconditionbox.h + {"Felt", "Temp. odczuwalna"}, + + // errors.h + {"Location unknown to the service providing weather data. " + "Check spelling.", + "Lokalizacja nieznana w serwisie pogodowym. " + "Sprawdź pisownię."}, + {"Sorry, an unexpected error was encountered. Report this to " + "the application author.", + "Wystąpił błąd aplikacji. Poinformuj " + "autora."}, + {"An API key is required to consume weather data. Contact the " + "application maintainer.", + "Do pobierania danych pogodowych wymagany jest klucz API. " + "Skontaktuj się z autorem aplikacji."}, + {"Weather data can't be accessed with the provided API key.", + "Dane pogodowe nie są dostępne przy użyciu tego klucza API."}, + {"The service providing weather data isn't working as " + "expected. Retry later.", + "Serwis udostępniający dane pogodowe nie działa zgodnie" + "z oczekiwaniami. Spróbuj później."}, + + // locationlist.cc + {"Longitude", "Długość geo."}, + {"Latitude", "Szerokość"}, + + // menu.h + {"Standard", "SI"}, + {"Metric", "Metryczne"}, + {"Imperial", "Imperialne"}, + {"Refresh", "Odśwież"}, + {"Locations", "Lokalizacje"}, + {"Units", "Jednostki"}, + {"About…", "O aplikacji"}, + {"Quit", "Wyjście"}, + {"Add to favorites", "Dodaj do ulubionych"}, + {"Remove from favorites", "Usuń z ulubionych"}, + {"Empty", "Pusty"}, + + // statusbar.h + {"Ongoing update…", "Trwa aktualizacja…"}, + {"Last update:", "Ostatnia aktualizacja:"}, + {"Weather data from", "Dane pogodowe z"}, + + // ui.h + {"Sunrise", "Wschód słońca"}, + {"Sunset", "Zachód słońca"}, + {"Pressure", "Ciśnienie"}, + {"Humidity", "Wilgotność"}, + {"UV index", "Indeks UV"}, + {"Visibility", "Widoczność"}, + {"Wind", "Wiatr"}, + {"Gust", "Porywisty wiatr"}, +}; +} // namespace l10n +} // namespace taranis diff --git a/src/meson.build b/src/meson.build index faaacdf..130c273 100644 --- a/src/meson.build +++ b/src/meson.build @@ -36,3 +36,4 @@ sources = [about_cc] + files( 'util.cc' ) +subdir('l10n')