Mercurial > minori
changeset 109:79714c95a145
*: add translation files and locale files
I forgot to add these in the last commit :p
also now you have to ask cmake to update the translations
because before the ts files were not tracked (obviously)
author | Paper <mrpapersonic@gmail.com> |
---|---|
date | Mon, 06 Nov 2023 01:51:44 -0500 |
parents | 2004b41d4a59 |
children | 2f3ae79adb02 |
files | CMakeLists.txt include/gui/locale.h rc/dark.qss rc/locale/en_GB.ts rc/locale/es.ts src/gui/locale.cc |
diffstat | 6 files changed, 1870 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/CMakeLists.txt Sun Nov 05 23:31:49 2023 -0500 +++ b/CMakeLists.txt Mon Nov 06 01:51:44 2023 -0500 @@ -12,6 +12,7 @@ option(BUILD_SHARED_LIBS "Build using shared libraries" ON) option(USE_QT6 "Force build with Qt 6" OFF) option(USE_QT5 "Force build with Qt 5" OFF) +option(UPDATE_TRANSLATIONS "Update *.ts translation files" OFF) add_subdirectory(dep/anitomy) add_subdirectory(dep/animia) @@ -22,7 +23,7 @@ if (USE_QT6) set(QT_VERSION_MAJOR 6) -elseif(USE_Qt5) +elseif(USE_QT5) set(QT_VERSION_MAJOR 5) else() find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core) @@ -123,9 +124,11 @@ set_source_files_properties(${TS_FILES} PROPERTIES OUTPUT_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/rc/locale") # dumb little hack to get this working on Qt5 and Qt6 -cmake_language(CALL qt${QT_VERSION_MAJOR}_create_translation ${SRC_FILES} ${TS_FILES} OPTIONS "-I${CMAKE_CURRENT_SOURCE_DIR}/include") +if (UPDATE_TRANSLATIONS) + cmake_language(CALL qt${QT_VERSION_MAJOR}_create_translation ${SRC_FILES} ${TS_FILES} OPTIONS "-I${CMAKE_CURRENT_SOURCE_DIR}/include") +endif() cmake_language(CALL qt${QT_VERSION_MAJOR}_add_translation QM_FILES ${TS_FILES}) -list(APPEND SRC_FILES ${QM_FILES}) +add_custom_target(translation ALL SOURCES ${QM_FILES} DEPENDS ${TS_FILES}) function(qt_create_resource_file outfile) set(QRC "<!DOCTYPE rcc><RCC version=\"1.0\">\n\t<qresource>\n") @@ -139,7 +142,7 @@ endfunction() qt_create_resource_file("${CMAKE_CURRENT_BINARY_DIR}/rc/locale.qrc" ${QM_FILES}) -list(APPEND SRC_FILES "${CMAKE_CURRENT_BINARY_DIR}/rc/locale.qrc") +add_custom_target(resources DEPENDS translation SOURCES "${CMAKE_CURRENT_BINARY_DIR}/rc/locale.qrc") # This is also used in the Win32 rc file set(RC_INFO_STRING "A lightweight anime tracker built with Qt.") @@ -173,6 +176,7 @@ endif() add_executable(minori WIN32 MACOSX_BUNDLE ${SRC_FILES}) +add_dependencies(minori resources) set_property(TARGET minori PROPERTY CXX_STANDARD 11) set_property(TARGET minori PROPERTY AUTOMOC ON) set_property(TARGET minori PROPERTY AUTORCC ON)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/include/gui/locale.h Mon Nov 06 01:51:44 2023 -0500 @@ -0,0 +1,35 @@ +#ifndef __gui__locale_h +#define __gui__locale_h + +#include <QLocale> +#include <QTranslator> +#include <vector> +#include <string> +#include <memory> + +namespace Locale { + +std::string GetLocaleFullName(const QLocale& locale); + +class Locale { +public: + Locale(); + Locale(const std::string& name); + QLocale GetLocale(); + std::vector<QLocale> GetAvailableLocales(); + void RefreshAvailableLocales(); // why would this ever be called? + bool IsLocaleAvailable(const QLocale& locale); + bool SetActiveLocale(const QLocale& locale); + +private: + bool SwitchTranslator(QTranslator& translator, const QString& name); + + QTranslator _translator; + QTranslator _translator_qt; + QLocale _locale; + std::vector<QLocale> _available_translations = {}; +}; + +} + +#endif // __gui__locale_h
--- a/rc/dark.qss Sun Nov 05 23:31:49 2023 -0500 +++ b/rc/dark.qss Mon Nov 06 01:51:44 2023 -0500 @@ -38,27 +38,26 @@ AnimeListPage::pane { margin: 0.04em; + border: 0.04em solid #808080; + top: -0.04em; + left: -0.04em; } -AnimeListPage::pane, QTabWidget::pane:top { border: 0.04em solid #808080; top: -0.04em; } -AnimeListPage::pane, QTabWidget::pane:bottom { border: 0.04em solid #808080; bottom: -0.04em; } -AnimeListPage::pane, QTabWidget::pane:left { border: 0.04em solid #808080; left: -0.04em; } -AnimeListPage::pane, QTabWidget::pane:right { border: 0.04em solid #808080; right: -0.04em; @@ -153,7 +152,7 @@ } QPushButton:hover { - background-color: rgba(57, 66, 75, 1.0); + background-color: #39424B; } /*
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rc/locale/en_GB.ts Mon Nov 06 01:51:44 2023 -0500 @@ -0,0 +1,852 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="en_GB"> +<context> + <name>AboutWindow</name> + <message> + <location filename="../../src/gui/dialog/about.cc" line="46"/> + <source>About Minori</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>AnimeInfoWidget</name> + <message> + <location filename="../../src/gui/widgets/anime_info.cc" line="12"/> + <source>Alternative titles</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/widgets/anime_info.cc" line="15"/> + <source>Details</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/widgets/anime_info.cc" line="15"/> + <source>Type: +Episodes: +Status: +Season: +Genres: +Score:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/widgets/anime_info.cc" line="18"/> + <source>Synopsis</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>AnimeListPage</name> + <message> + <location filename="../../src/gui/pages/anime_list.cc" line="225"/> + <location filename="../../src/gui/pages/anime_list.cc" line="261"/> + <source>Column visibility</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/pages/anime_list.cc" line="249"/> + <source>Reset to defaults</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/pages/anime_list.cc" line="278"/> + <source>Information</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/pages/anime_list.cc" line="289"/> + <source>Delete from list...</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>AnimeListPageModel</name> + <message> + <location filename="../../src/gui/pages/anime_list.cc" line="68"/> + <source>Anime title</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/pages/anime_list.cc" line="69"/> + <source>Progress</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/pages/anime_list.cc" line="70"/> + <source>Episodes</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/pages/anime_list.cc" line="71"/> + <source>Type</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/pages/anime_list.cc" line="72"/> + <source>Score</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/pages/anime_list.cc" line="73"/> + <source>Season</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/pages/anime_list.cc" line="74"/> + <source>Date started</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/pages/anime_list.cc" line="75"/> + <source>Date completed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/pages/anime_list.cc" line="76"/> + <source>Notes</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/pages/anime_list.cc" line="77"/> + <source>Average score</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/pages/anime_list.cc" line="78"/> + <source>Last updated</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>InformationDialog</name> + <message> + <location filename="../../src/gui/dialog/information.cc" line="46"/> + <source>Anime Information</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/information.cc" line="107"/> + <source>Anime list</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/information.cc" line="135"/> + <source>Episodes watched:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/information.cc" line="148"/> + <source>Rewatching</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/information.cc" line="161"/> + <source>Status:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/information.cc" line="180"/> + <source>Score:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/information.cc" line="196"/> + <source>Notes:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/information.cc" line="204"/> + <source>Enter your notes about this anime</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/information.cc" line="211"/> + <source>Date started:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/information.cc" line="228"/> + <source>Date completed:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/information.cc" line="98"/> + <source>Main information</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/information.cc" line="277"/> + <source>My list and settings</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>MainWindow</name> + <message> + <location filename="../../src/gui/window.cc" line="65"/> + <source>Now Playing</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="67"/> + <source>Anime List</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="68"/> + <source>History</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="69"/> + <source>Statistics</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="71"/> + <source>Search</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="72"/> + <source>Seasons</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="73"/> + <source>Torrents</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="117"/> + <source>&File</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="119"/> + <source>&Library folders</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="120"/> + <source>&Add new folder...</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="122"/> + <source>&Scan available episodes</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="126"/> + <source>Play &next episode</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="128"/> + <source>Play &random episode</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="133"/> + <source>E&xit</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="135"/> + <source>&Services</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="136"/> + <source>Synchronize &list</source> + <translation>Synchronise &list</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="141"/> + <source>&AniList</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="142"/> + <location filename="../../src/gui/window.cc" line="148"/> + <location filename="../../src/gui/window.cc" line="152"/> + <source>Go to my &profile</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="143"/> + <source>Go to my &stats</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="145"/> + <source>&Kitsu</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="146"/> + <source>Go to my &feed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="147"/> + <source>Go to my &library</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="150"/> + <source>&MyAnimeList</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="151"/> + <source>Go to my p&anel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="153"/> + <source>Go to my &history</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="155"/> + <source>&Tools</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="156"/> + <source>&Export anime list</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="157"/> + <source>Export as &Markdown...</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="158"/> + <source>Export as MyAnimeList &XML...</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="162"/> + <source>Enable anime &recognition</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="164"/> + <source>Enable auto &sharing</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="166"/> + <source>Enable &auto synchronization</source> + <translation>Enable &auto synchronisation</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="171"/> + <source>&Settings</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="177"/> + <source>&View</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="184"/> + <source>&Now Playing</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="188"/> + <source>&Anime List</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="193"/> + <source>&History</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="197"/> + <source>&Statistics</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="201"/> + <source>S&earch</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="205"/> + <source>Se&asons</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="209"/> + <source>&Torrents</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="220"/> + <source>Show sidebar</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="222"/> + <source>&Help</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="223"/> + <source>&About Minori</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="227"/> + <source>About &Qt</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="239"/> + <source>&Synchronize</source> + <translation>&Synchronise</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="246"/> + <source>Add new folder...</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="256"/> + <source>Placeholder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="264"/> + <source>S&ettings</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>NowPlayingPages::Default</name> + <message> + <location filename="../../src/gui/pages/now_playing.cc" line="49"/> + <source>Now Playing</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>QCoreApplication</name> + <message> + <location filename="../../src/gui/translate/anime.cc" line="10"/> + <source>Currently watching</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="11"/> + <source>Plan to watch</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="12"/> + <source>Completed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="13"/> + <source>Dropped</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="14"/> + <source>On hold</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="16"/> + <source>Not in list</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="22"/> + <source>TV</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="23"/> + <source>TV short</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="24"/> + <source>OVA</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="26"/> + <source>Special</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="27"/> + <source>ONA</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="28"/> + <source>Music</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="30"/> + <location filename="../../src/gui/translate/anime.cc" line="41"/> + <location filename="../../src/gui/translate/anime.cc" line="53"/> + <source>Unknown</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="36"/> + <source>Winter</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="37"/> + <source>Summer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="25"/> + <source>Movie</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="38"/> + <source>Fall</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="39"/> + <source>Spring</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="47"/> + <source>Currently airing</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="48"/> + <source>Finished airing</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="49"/> + <source>Not yet aired</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="50"/> + <source>Cancelled</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="51"/> + <source>On hiatus</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="59"/> + <source>AniList</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="61"/> + <source>None</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="78"/> + <source>Native</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="79"/> + <source>English</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="81"/> + <source>Romaji</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/about.cc" line="57"/> + <source>Author:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/about.cc" line="61"/> + <source>Third party components:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/about.cc" line="77"/> + <source>Special thanks:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/about.cc" line="80"/> + <source>for creating Taiga</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/about.cc" line="81"/> + <source>and</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/about.cc" line="82"/> + <source>for creating BreezeStyleSheets, on which the dark theme in this program is based off of</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/about.cc" line="84"/> + <source>for providing some sample code for detecting dark mode on Windows and macOS</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/about.cc" line="86"/> + <source>for providing information on getting open file descriptors on macOS</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>SettingsDialog</name> + <message> + <location filename="../../src/gui/dialog/settings.cc" line="76"/> + <source>Settings</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings.cc" line="89"/> + <source>Services</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings.cc" line="91"/> + <source>Application</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>SettingsPageApplication</name> + <message> + <location filename="../../src/gui/dialog/settings/application.cc" line="25"/> + <source>Actions</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/application.cc" line="33"/> + <source>Double click:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/application.cc" line="35"/> + <source>View anime info</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/application.cc" line="48"/> + <source>Middle click:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/application.cc" line="50"/> + <source>Play next episode</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/application.cc" line="65"/> + <source>Appearance</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/application.cc" line="73"/> + <source>Title language preference:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/application.cc" line="78"/> + <source>Romaji</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/application.cc" line="79"/> + <source>Native</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/application.cc" line="80"/> + <source>English</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/application.cc" line="91"/> + <source>Application theme:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/application.cc" line="97"/> + <source>Default</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/application.cc" line="98"/> + <source>Light</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/application.cc" line="99"/> + <source>Dark</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/application.cc" line="142"/> + <source>Highlight anime if next episode is available in library folders</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/application.cc" line="132"/> + <source>Display highlighted anime above others</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/application.cc" line="110"/> + <source>Set application locale (requires restart):</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/application.cc" line="161"/> + <source>Progress</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/application.cc" line="168"/> + <source>Display aired episodes (estimated)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/application.cc" line="176"/> + <source>Display available episodes in library folders</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/application.cc" line="202"/> + <source>Application</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/application.cc" line="210"/> + <source>Anime list</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>SettingsPageServices</name> + <message> + <location filename="../../src/gui/dialog/settings/services.cc" line="27"/> + <source>Active service and metadata provider:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/services.cc" line="33"/> + <location filename="../../src/gui/dialog/settings/services.cc" line="124"/> + <source>AniList</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/services.cc" line="21"/> + <source>Synchronization</source> + <translation>Synchronisation</translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/services.cc" line="42"/> + <source>Note: Minori is unable to synchronize multiple services at the same time.</source> + <translation>Note: Minori is unable to synchronise multiple services at the same time.</translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/services.cc" line="63"/> + <source>Account</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/services.cc" line="69"/> + <source>Username: (not your email address)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/services.cc" line="90"/> + <source>Authorize...</source> + <translation>Authorise...</translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/services.cc" line="90"/> + <source>Re-authorize...</source> + <translation>Re-authorise...</translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/services.cc" line="99"/> + <source><a href="http://anilist.co/">Create a new AniList account</a></source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/services.cc" line="120"/> + <source>Services</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/services.cc" line="123"/> + <source>Main</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>StatisticsPage</name> + <message> + <location filename="../../src/gui/pages/statistics.cc" line="24"/> + <source>Anime list</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/pages/statistics.cc" line="25"/> + <source>Anime count: +Episode count: +Time spent watching: +Time to complete: +Average score: +Score deviation:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/pages/statistics.cc" line="31"/> + <source>Score distribution</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/pages/statistics.cc" line="51"/> + <source>Minori</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/pages/statistics.cc" line="51"/> + <source>Uptime: +Requests made:</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rc/locale/es.ts Mon Nov 06 01:51:44 2023 -0500 @@ -0,0 +1,863 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="es"> +<context> + <name>AboutWindow</name> + <message> + <location filename="../../src/gui/dialog/about.cc" line="46"/> + <source>About Minori</source> + <translation>Acerca de Minori</translation> + </message> +</context> +<context> + <name>AnimeInfoWidget</name> + <message> + <location filename="../../src/gui/widgets/anime_info.cc" line="12"/> + <source>Alternative titles</source> + <translation>Títulos alternativos</translation> + </message> + <message> + <location filename="../../src/gui/widgets/anime_info.cc" line="15"/> + <source>Details</source> + <translation>Información</translation> + </message> + <message> + <location filename="../../src/gui/widgets/anime_info.cc" line="15"/> + <source>Type: +Episodes: +Status: +Season: +Genres: +Score:</source> + <translation>Formato: +Episodios: +Estado: +Temporada: +Géneros: +Puntuación:</translation> + </message> + <message> + <location filename="../../src/gui/widgets/anime_info.cc" line="18"/> + <source>Synopsis</source> + <translation>Sinopsis</translation> + </message> +</context> +<context> + <name>AnimeListPage</name> + <message> + <location filename="../../src/gui/pages/anime_list.cc" line="225"/> + <location filename="../../src/gui/pages/anime_list.cc" line="261"/> + <source>Column visibility</source> + <translation>Visibilidad de la columna</translation> + </message> + <message> + <location filename="../../src/gui/pages/anime_list.cc" line="249"/> + <source>Reset to defaults</source> + <translation>Restablecer valores predeterminado</translation> + </message> + <message> + <location filename="../../src/gui/pages/anime_list.cc" line="278"/> + <source>Information</source> + <translation>Información</translation> + </message> + <message> + <location filename="../../src/gui/pages/anime_list.cc" line="289"/> + <source>Delete from list...</source> + <translation>Borrar de la lista...</translation> + </message> +</context> +<context> + <name>AnimeListPageModel</name> + <message> + <location filename="../../src/gui/pages/anime_list.cc" line="68"/> + <source>Anime title</source> + <translation>Título del anime</translation> + </message> + <message> + <location filename="../../src/gui/pages/anime_list.cc" line="69"/> + <source>Progress</source> + <translation>Progreso</translation> + </message> + <message> + <location filename="../../src/gui/pages/anime_list.cc" line="70"/> + <source>Episodes</source> + <translation>Episodios</translation> + </message> + <message> + <location filename="../../src/gui/pages/anime_list.cc" line="71"/> + <source>Type</source> + <translation>Formato</translation> + </message> + <message> + <location filename="../../src/gui/pages/anime_list.cc" line="72"/> + <source>Score</source> + <translation>Puntuación</translation> + </message> + <message> + <location filename="../../src/gui/pages/anime_list.cc" line="73"/> + <source>Season</source> + <translation>Temporada</translation> + </message> + <message> + <location filename="../../src/gui/pages/anime_list.cc" line="74"/> + <source>Date started</source> + <translation>Fecha de inicio</translation> + </message> + <message> + <location filename="../../src/gui/pages/anime_list.cc" line="75"/> + <source>Date completed</source> + <translation>Fecha de finalización</translation> + </message> + <message> + <location filename="../../src/gui/pages/anime_list.cc" line="76"/> + <source>Notes</source> + <translation>Notas</translation> + </message> + <message> + <location filename="../../src/gui/pages/anime_list.cc" line="77"/> + <source>Average score</source> + <translation>Puntuación media</translation> + </message> + <message> + <location filename="../../src/gui/pages/anime_list.cc" line="78"/> + <source>Last updated</source> + <translation>Última actualización</translation> + </message> +</context> +<context> + <name>InformationDialog</name> + <message> + <location filename="../../src/gui/dialog/information.cc" line="46"/> + <source>Anime Information</source> + <translation>Información sobre el anime</translation> + </message> + <message> + <location filename="../../src/gui/dialog/information.cc" line="98"/> + <source>Main information</source> + <translation>Información principal</translation> + </message> + <message> + <location filename="../../src/gui/dialog/information.cc" line="107"/> + <source>Anime list</source> + <translation>Lista de anime</translation> + </message> + <message> + <location filename="../../src/gui/dialog/information.cc" line="135"/> + <source>Episodes watched:</source> + <translation>Episodios vistos:</translation> + </message> + <message> + <location filename="../../src/gui/dialog/information.cc" line="148"/> + <source>Rewatching</source> + <translation>Volver a ver</translation> + </message> + <message> + <location filename="../../src/gui/dialog/information.cc" line="161"/> + <source>Status:</source> + <translation>Estado:</translation> + </message> + <message> + <location filename="../../src/gui/dialog/information.cc" line="180"/> + <source>Score:</source> + <translation>Puntuación:</translation> + </message> + <message> + <location filename="../../src/gui/dialog/information.cc" line="196"/> + <source>Notes:</source> + <translation>Notas:</translation> + </message> + <message> + <location filename="../../src/gui/dialog/information.cc" line="204"/> + <source>Enter your notes about this anime</source> + <translation>Introduce tus notas sobre este anime</translation> + </message> + <message> + <location filename="../../src/gui/dialog/information.cc" line="211"/> + <source>Date started:</source> + <translation>Fecha de inicio:</translation> + </message> + <message> + <location filename="../../src/gui/dialog/information.cc" line="228"/> + <source>Date completed:</source> + <translation>Fecha de finalización:</translation> + </message> + <message> + <location filename="../../src/gui/dialog/information.cc" line="277"/> + <source>My list and settings</source> + <translation>Mi lista y configuración</translation> + </message> +</context> +<context> + <name>MainWindow</name> + <message> + <location filename="../../src/gui/window.cc" line="65"/> + <source>Now Playing</source> + <translation>Jugando ahora</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="67"/> + <source>Anime List</source> + <translation>Lista de anime</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="68"/> + <source>History</source> + <translation>Historia</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="69"/> + <source>Statistics</source> + <translation>Estadísticas</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="71"/> + <source>Search</source> + <translation>Buscar</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="72"/> + <source>Seasons</source> + <translation>Temporadas</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="73"/> + <source>Torrents</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="117"/> + <source>&File</source> + <translation>&Fichero</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="119"/> + <source>&Library folders</source> + <translation>Directorios de la biblioteca (&L)</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="120"/> + <source>&Add new folder...</source> + <translation>&Añadir una nueva directorios...</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="122"/> + <source>&Scan available episodes</source> + <translation>E&scanear episodios disponibles</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="126"/> + <source>Play &next episode</source> + <translation>Ver el próximo episodio (&N)</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="128"/> + <source>Play &random episode</source> + <translation>Ver episodio aleato&rio</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="133"/> + <source>E&xit</source> + <translation>Salida (&X)</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="135"/> + <source>&Services</source> + <translation>&Servicios</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="136"/> + <source>Synchronize &list</source> + <translation>Sincronizar &lista</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="141"/> + <source>&AniList</source> + <translation>&AniList</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="142"/> + <location filename="../../src/gui/window.cc" line="148"/> + <location filename="../../src/gui/window.cc" line="152"/> + <source>Go to my &profile</source> + <translation>Ir a mi &perfil</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="143"/> + <source>Go to my &stats</source> + <translation>Ir a mis e&stadísticas</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="145"/> + <source>&Kitsu</source> + <translation>&Kitsu</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="146"/> + <source>Go to my &feed</source> + <translation>Ir a mi &feed</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="147"/> + <source>Go to my &library</source> + <translation>Ir a mi biblioteca (&L)</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="150"/> + <source>&MyAnimeList</source> + <translation>&MyAnimeList</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="151"/> + <source>Go to my p&anel</source> + <translation>Ir a mi p&anel</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="153"/> + <source>Go to my &history</source> + <translation>Ir a mi &historia</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="155"/> + <source>&Tools</source> + <translation>Ins&trumentos</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="156"/> + <source>&Export anime list</source> + <translation>&Exportar lista de anime</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="157"/> + <source>Export as &Markdown...</source> + <translation>Exportar como &Markdown...</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="158"/> + <source>Export as MyAnimeList &XML...</source> + <translation>Exportar como &XML de MyAnimeList</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="162"/> + <source>Enable anime &recognition</source> + <translation>Activar el &reconocimiento de anime</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="164"/> + <source>Enable auto &sharing</source> + <translation>Activar el uso compartido automático (&S)</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="166"/> + <source>Enable &auto synchronization</source> + <translation>Activar la sincronización &automática</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="171"/> + <source>&Settings</source> + <translation>Configuración (&S)</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="177"/> + <source>&View</source> + <translation>&Ver</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="184"/> + <source>&Now Playing</source> + <translation>Jugando ahora (&N)</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="188"/> + <source>&Anime List</source> + <translation>Lista de &anime</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="193"/> + <source>&History</source> + <translation>&Historia</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="197"/> + <source>&Statistics</source> + <translation>E&stadísticas</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="201"/> + <source>S&earch</source> + <translation>Buscar (&S)</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="205"/> + <source>Se&asons</source> + <translation>Tempor&adas</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="209"/> + <source>&Torrents</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="220"/> + <source>Show sidebar</source> + <translation>Mostrar barra lateral</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="222"/> + <source>&Help</source> + <translation>Ayuda (&H)</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="223"/> + <source>&About Minori</source> + <translation>&Acerca de Minori</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="227"/> + <source>About &Qt</source> + <translation>Acerca de &Qt</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="239"/> + <source>&Synchronize</source> + <translation>&Sincronice</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="246"/> + <source>Add new folder...</source> + <translation>Añadir una nueva carpeta...</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="256"/> + <source>Placeholder</source> + <translation>Marcador de posición</translation> + </message> + <message> + <location filename="../../src/gui/window.cc" line="264"/> + <source>S&ettings</source> + <translation>Configuración (&S)</translation> + </message> +</context> +<context> + <name>NowPlayingPages::Default</name> + <message> + <location filename="../../src/gui/pages/now_playing.cc" line="49"/> + <source>Now Playing</source> + <translation>Jugando ahora</translation> + </message> +</context> +<context> + <name>QCoreApplication</name> + <message> + <location filename="../../src/gui/translate/anime.cc" line="10"/> + <source>Currently watching</source> + <translation>Actualmente viendo</translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="11"/> + <source>Plan to watch</source> + <translation>Plan para ver</translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="12"/> + <source>Completed</source> + <translation>Completado</translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="13"/> + <source>Dropped</source> + <translation>Dejado</translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="14"/> + <source>On hold</source> + <translation>En espera</translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="16"/> + <source>Not in list</source> + <translation>No en la lista</translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="22"/> + <source>TV</source> + <translation>TV</translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="23"/> + <source>TV short</source> + <translation>Corto</translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="24"/> + <source>OVA</source> + <translation>OVA</translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="25"/> + <source>Movie</source> + <translation>Película</translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="26"/> + <source>Special</source> + <translation>Especial</translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="27"/> + <source>ONA</source> + <translation>ONA</translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="28"/> + <source>Music</source> + <translation>Música</translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="30"/> + <location filename="../../src/gui/translate/anime.cc" line="41"/> + <location filename="../../src/gui/translate/anime.cc" line="53"/> + <source>Unknown</source> + <translation>Desconocido</translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="36"/> + <source>Winter</source> + <translation>Invierno</translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="37"/> + <source>Summer</source> + <translation>Verano</translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="38"/> + <source>Fall</source> + <translation>Otoño</translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="39"/> + <source>Spring</source> + <translation>Primavera</translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="47"/> + <source>Currently airing</source> + <translation>En emisión</translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="48"/> + <source>Finished airing</source> + <translation>Emisión terminada</translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="49"/> + <source>Not yet aired</source> + <translation>Aún no emitido</translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="50"/> + <source>Cancelled</source> + <translation>Cancelado</translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="51"/> + <source>On hiatus</source> + <translation>En pausa</translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="59"/> + <source>AniList</source> + <translation>AniList</translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="61"/> + <source>None</source> + <translation>Ninguno</translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="78"/> + <source>Native</source> + <translation>Nativo</translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="79"/> + <source>English</source> + <translation>Inglés</translation> + </message> + <message> + <location filename="../../src/gui/translate/anime.cc" line="81"/> + <source>Romaji</source> + <translation>Romaji</translation> + </message> + <message> + <location filename="../../src/gui/dialog/about.cc" line="57"/> + <source>Author:</source> + <translation>Autor:</translation> + </message> + <message> + <location filename="../../src/gui/dialog/about.cc" line="61"/> + <source>Third party components:</source> + <translation>Componentes de terceros:</translation> + </message> + <message> + <location filename="../../src/gui/dialog/about.cc" line="77"/> + <source>Special thanks:</source> + <translation>Agradecimientos especiales:</translation> + </message> + <message> + <location filename="../../src/gui/dialog/about.cc" line="80"/> + <source>for creating Taiga</source> + <translation>para crear Taiga</translation> + </message> + <message> + <location filename="../../src/gui/dialog/about.cc" line="81"/> + <source>and</source> + <translation>y</translation> + </message> + <message> + <location filename="../../src/gui/dialog/about.cc" line="82"/> + <source>for creating BreezeStyleSheets, on which the dark theme in this program is based off of</source> + <translation>para crear BreezeStyleSheets, en el que se basa el tema oscuro de este programa</translation> + </message> + <message> + <location filename="../../src/gui/dialog/about.cc" line="84"/> + <source>for providing some sample code for detecting dark mode on Windows and macOS</source> + <translation>por proporcionar algunos ejemplos de código para detectar el modo oscuro en Windows y macOS</translation> + </message> + <message> + <location filename="../../src/gui/dialog/about.cc" line="86"/> + <source>for providing information on getting open file descriptors on macOS</source> + <translation>para obtener información sobre descriptores de archivos abiertos en macOS</translation> + </message> +</context> +<context> + <name>SettingsDialog</name> + <message> + <location filename="../../src/gui/dialog/settings.cc" line="76"/> + <source>Settings</source> + <translation>Configuración</translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings.cc" line="89"/> + <source>Services</source> + <translation>Servicios</translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings.cc" line="91"/> + <source>Application</source> + <translation>Aplicación</translation> + </message> +</context> +<context> + <name>SettingsPageApplication</name> + <message> + <location filename="../../src/gui/dialog/settings/application.cc" line="25"/> + <source>Actions</source> + <translation>Acciones</translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/application.cc" line="33"/> + <source>Double click:</source> + <translation>Haz doble clic:</translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/application.cc" line="35"/> + <source>View anime info</source> + <translation>Ver información sobre el anime</translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/application.cc" line="48"/> + <source>Middle click:</source> + <translation>Clic central:</translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/application.cc" line="50"/> + <source>Play next episode</source> + <translation>Ver el próximo episodio</translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/application.cc" line="65"/> + <source>Appearance</source> + <translation>Apariencia</translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/application.cc" line="73"/> + <source>Title language preference:</source> + <translation>Preferencia lingüística del título</translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/application.cc" line="78"/> + <source>Romaji</source> + <translation>Romaji</translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/application.cc" line="79"/> + <source>Native</source> + <translation>Nativo</translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/application.cc" line="80"/> + <source>English</source> + <translation>Inglés</translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/application.cc" line="91"/> + <source>Application theme:</source> + <translation>Tema de aplicación:</translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/application.cc" line="97"/> + <source>Default</source> + <translation>Predeterminado</translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/application.cc" line="98"/> + <source>Light</source> + <translation>Luminoso</translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/application.cc" line="99"/> + <source>Dark</source> + <translation>Oscuro</translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/application.cc" line="110"/> + <source>Set application locale (requires restart):</source> + <translation>Establecer la configuración regional de la aplicación (requiere reinicio):</translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/application.cc" line="132"/> + <source>Display highlighted anime above others</source> + <translation>Mostrar el anime destacado por encima de los demás</translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/application.cc" line="142"/> + <source>Highlight anime if next episode is available in library folders</source> + <translation>Resaltar el anime si el siguiente episodio está disponible en las directorios de la biblioteca</translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/application.cc" line="161"/> + <source>Progress</source> + <translation>Progreso</translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/application.cc" line="168"/> + <source>Display aired episodes (estimated)</source> + <translation>Mostrar episodios emitidos (estimación)</translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/application.cc" line="176"/> + <source>Display available episodes in library folders</source> + <translation>Mostrar los episodios disponibles en las directorios de la biblioteca</translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/application.cc" line="202"/> + <source>Application</source> + <translation>Aplicación</translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/application.cc" line="210"/> + <source>Anime list</source> + <translation>Lista de anime</translation> + </message> +</context> +<context> + <name>SettingsPageServices</name> + <message> + <location filename="../../src/gui/dialog/settings/services.cc" line="21"/> + <source>Synchronization</source> + <translation>Sincronización</translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/services.cc" line="27"/> + <source>Active service and metadata provider:</source> + <translation>Proveedor activo de servicios y metadatos:</translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/services.cc" line="33"/> + <location filename="../../src/gui/dialog/settings/services.cc" line="124"/> + <source>AniList</source> + <translation>AniList</translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/services.cc" line="42"/> + <source>Note: Minori is unable to synchronize multiple services at the same time.</source> + <translation>Nota: Minori no puede sincronizar varios servicios al mismo tiempo.</translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/services.cc" line="63"/> + <source>Account</source> + <translation>Cuenta</translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/services.cc" line="69"/> + <source>Username: (not your email address)</source> + <translation>Nombre de usuario: (no su dirección de correo electrónico)</translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/services.cc" line="90"/> + <source>Authorize...</source> + <translation>Autoriza...</translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/services.cc" line="90"/> + <source>Re-authorize...</source> + <translation>Reautorizar...</translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/services.cc" line="99"/> + <source><a href="http://anilist.co/">Create a new AniList account</a></source> + <translation><a href="http://anilist.co/">Crear una nueva cuenta AniList</a></translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/services.cc" line="120"/> + <source>Services</source> + <translation>Servicios</translation> + </message> + <message> + <location filename="../../src/gui/dialog/settings/services.cc" line="123"/> + <source>Main</source> + <translation>Principal</translation> + </message> +</context> +<context> + <name>StatisticsPage</name> + <message> + <location filename="../../src/gui/pages/statistics.cc" line="24"/> + <source>Anime list</source> + <translation>Lista de anime</translation> + </message> + <message> + <location filename="../../src/gui/pages/statistics.cc" line="25"/> + <source>Anime count: +Episode count: +Time spent watching: +Time to complete: +Average score: +Score deviation:</source> + <translation>Recuento de animes: +Recuento de episodios: +Tiempo dedicado a ver: +Tiempo para completar: +Puntuación media: +Desviación de la puntuación:</translation> + </message> + <message> + <location filename="../../src/gui/pages/statistics.cc" line="31"/> + <source>Score distribution</source> + <translation>Distribución de la puntuación</translation> + </message> + <message> + <location filename="../../src/gui/pages/statistics.cc" line="51"/> + <source>Minori</source> + <translation>Minori</translation> + </message> + <message> + <location filename="../../src/gui/pages/statistics.cc" line="51"/> + <source>Uptime: +Requests made:</source> + <translation>Tiempo de actividad: +Peticiones realizadas:</translation> + </message> +</context> +</TS>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/gui/locale.cc Mon Nov 06 01:51:44 2023 -0500 @@ -0,0 +1,108 @@ +#include "gui/locale.h" +#include "core/strings.h" +#include <QTranslator> +#include <QLocale> +#include <QDir> +#include <QString> +#include <QApplication> +#include <iostream> + +namespace Locale { + +std::string GetLocaleFullName(const QLocale& locale) { + QString res = QLocale::languageToString(locale.language()); + if (locale.country() != QLocale::AnyCountry) + res += " (" + QLocale::countryToString(locale.country()) + ")"; + return Strings::ToUtf8String(res); +} + +Locale::Locale() { + RefreshAvailableLocales(); + + /* default to en_US */ + if (!IsLocaleAvailable(QLocale())) + SetActiveLocale(QLocale("en_US")); + else /* TODO: is this needed? */ + SetActiveLocale(QLocale()); +} + +Locale::Locale(const std::string& name) { + RefreshAvailableLocales(); + SetActiveLocale(QLocale(Strings::ToQString(name))); +} + +QLocale Locale::GetLocale() { + return _locale; +} + +std::vector<QLocale> Locale::GetAvailableLocales() { + return _available_translations; +} + +void Locale::RefreshAvailableLocales() { + _available_translations.clear(); + + /* we will always have en_US */ + _available_translations.push_back(QLocale("en_US")); + + QDir dir(":/locale"); + if (!dir.exists()) + return; + + QStringList translations = dir.entryList({"*.qm"}, QDir::Files); + + _available_translations.reserve(translations.size()); + for (const QString& str : translations) { + _available_translations.push_back(QLocale(str.mid(0, str.lastIndexOf(".")))); + } +} + +bool Locale::IsLocaleAvailable(const QLocale& locale) { + for (const QLocale& l : _available_translations) + if (l == locale) + return true; + return false; +} + +bool Locale::SetActiveLocale(const QLocale& locale) { + if (!IsLocaleAvailable(locale)) + return false; + if (_locale == locale) + return true; /* we're... already on this locale :) */ + + _locale = locale; + QLocale::setDefault(_locale); + + /* we can still do stuff even if one thing fails! */ + bool return_value = true; + + const QString name = _locale.name(); + if (!SwitchTranslator(_translator, QString(":/locale/%1.qm").arg(name))) + return_value = false; + + const QString path = qApp->applicationDirPath(); + if (!SwitchTranslator(_translator_qt, path + QString("/translations/qt_%1.qm").arg(name))) { + /* Sometimes Qt will have proper translations for the language, but not the specific + country. In that case, we still want to use that language. */ + const int underscore_index = name.lastIndexOf("_"); + if (!underscore_index) + return false; + + const QString short_name = name.mid(0, underscore_index); + if (!SwitchTranslator(_translator_qt, path + QString("/translations/qt_%1.qm").arg(short_name))) + return_value = false; + } + + return return_value; +} + +bool Locale::SwitchTranslator(QTranslator& translator, const QString& path) { + qApp->removeTranslator(&translator); + + if (!translator.load(path)) + return false; + qApp->installTranslator(&translator); + return true; +} + +}