feat: add Catalan strings (#1049)

## Summary

* **What is the goal of this PR?** (e.g., Implements the new feature for
file uploading.)

Add support for Catalan language user interface.
* **What changes are included?**

A new i18n file catalan.yml.

## Additional Context

* Add any other information that might be helpful for the reviewer
(e.g., performance implications, potential risks,
  specific areas to focus on).

---

### AI Usage

While CrossPoint doesn't have restrictions on AI tools in contributing,
please be transparent about their usage as it
helps set the right context for reviewers.

Did you use AI tools to help write this code?  NO
This commit is contained in:
Àngel
2026-02-21 10:26:50 +01:00
committed by GitHub
parent 693dba4c94
commit f02c9784ec
4 changed files with 328 additions and 1 deletions

View File

@@ -35,4 +35,7 @@ If you'd like to add your name to this list, please open a PR adding yourself an
- [dawiik](https://github.com/dawiik) - [dawiik](https://github.com/dawiik)
## Romanian ## Romanian
- [ariel-lindemann](https://github.com/ariel-lindemann) - [ariel-lindemann](https://github.com/ariel-lindemann)
## Catalan
- [angeldenom](https://github.com/angeldenom)

View File

@@ -14,6 +14,7 @@ extern const char* const STRINGS_PO[];
extern const char* const STRINGS_RU[]; extern const char* const STRINGS_RU[];
extern const char* const STRINGS_SV[]; extern const char* const STRINGS_SV[];
extern const char* const STRINGS_RO[]; extern const char* const STRINGS_RO[];
extern const char* const STRINGS_CA[];
} // namespace i18n_strings } // namespace i18n_strings
// Language enum // Language enum
@@ -27,6 +28,7 @@ enum class Language : uint8_t {
RUSSIAN = 6, RUSSIAN = 6,
SWEDISH = 7, SWEDISH = 7,
ROMANIAN = 8, ROMANIAN = 8,
CATALAN = 9,
_COUNT _COUNT
}; };
@@ -378,6 +380,8 @@ inline const char* const* getStringArray(Language lang) {
return i18n_strings::STRINGS_SV; return i18n_strings::STRINGS_SV;
case Language::ROMANIAN: case Language::ROMANIAN:
return i18n_strings::STRINGS_RO; return i18n_strings::STRINGS_RO;
case Language::CATALAN:
return i18n_strings::STRINGS_CA;
default: default:
return i18n_strings::STRINGS_EN; return i18n_strings::STRINGS_EN;
} }

View File

@@ -16,5 +16,6 @@ extern const char* const STRINGS_PO[];
extern const char* const STRINGS_RU[]; extern const char* const STRINGS_RU[];
extern const char* const STRINGS_SV[]; extern const char* const STRINGS_SV[];
extern const char* const STRINGS_RO[]; extern const char* const STRINGS_RO[];
extern const char* const STRINGS_CA[];
} // namespace i18n_strings } // namespace i18n_strings

View File

@@ -0,0 +1,319 @@
_language_name: "Català"
_language_code: "CATALAN"
_order: "9"
STR_CROSSPOINT: "CrossPoint"
STR_BOOTING: "ARRENCANT"
STR_SLEEPING: "ENTRANT EN REPÒS"
STR_ENTERING_SLEEP: "Entrant en repòs"
STR_BROWSE_FILES: "Explora fitxers"
STR_FILE_TRANSFER: "Transferència"
STR_SETTINGS_TITLE: "Configuració"
STR_CALIBRE_LIBRARY: "Biblioteca del Calibre"
STR_CONTINUE_READING: "Continua llegint"
STR_NO_OPEN_BOOK: "Cap llibre obert"
STR_START_READING: "Inicia la lectura a continuació"
STR_BOOKS: "Llibres"
STR_NO_BOOKS_FOUND: "No s'ha trobat cap llibre"
STR_SELECT_CHAPTER: "Selecciona el capítol"
STR_NO_CHAPTERS: "Sense capítols"
STR_END_OF_BOOK: "Final del llibre"
STR_EMPTY_CHAPTER: "Capítol buit"
STR_INDEXING: "S'està indexant"
STR_MEMORY_ERROR: "Error de memòria"
STR_PAGE_LOAD_ERROR: "Error en carregar la pàgina"
STR_EMPTY_FILE: "Fitxer buit"
STR_OUT_OF_BOUNDS: "Fora de límits"
STR_LOADING: "S'està carregant..."
STR_LOADING_POPUP: "S'està carregant"
STR_LOAD_XTC_FAILED: "No s'ha pogut carregar l'XTC"
STR_LOAD_TXT_FAILED: "No s'ha pogut carregar el TXT"
STR_LOAD_EPUB_FAILED: "No s'ha pogut carregar l'EPUB"
STR_SD_CARD_ERROR: "Error de targeta SD"
STR_WIFI_NETWORKS: "Xarxes WiFi"
STR_NO_NETWORKS: "No s'han trobat xarxes"
STR_NETWORKS_FOUND: "%zu xarxes trobades"
STR_SCANNING: "S'està escanejant..."
STR_CONNECTING: "S'està connectant..."
STR_CONNECTED: "S'ha connectat!"
STR_CONNECTION_FAILED: "Error de connexió"
STR_CONNECTION_TIMEOUT: "S'ha esgotat el temps de connexió"
STR_FORGET_NETWORK: "Voleu oblidar aquesta xarxa?"
STR_SAVE_PASSWORD: "Voleu desar la contrasenya per a la propera vegada?"
STR_REMOVE_PASSWORD: "Voleu suprimir la contrasenya desada?"
STR_PRESS_OK_SCAN: "Premeu OK per tornar a escanejar"
STR_PRESS_ANY_CONTINUE: "Premeu qualsevol botó per continuar"
STR_SELECT_HINT: "ESQUERRA/DRETA: Selecciona | OK: Confirma"
STR_HOW_CONNECT: "Com voleu connectar-vos?"
STR_JOIN_NETWORK: "Uneix-te a una xarxa"
STR_CREATE_HOTSPOT: "Crea un punt d'accés"
STR_JOIN_DESC: "Connecta't a una xarxa WiFi existent"
STR_HOTSPOT_DESC: "Crea una xarxa WiFi per unir-s'hi"
STR_STARTING_HOTSPOT: "S'està iniciant el punt d'accés..."
STR_HOTSPOT_MODE: "Mode de punt d'accés"
STR_CONNECT_WIFI_HINT: "Connecteu el dispositiu a aquesta xarxa WiFi"
STR_OPEN_URL_HINT: "Obriu aquest URL al navegador"
STR_OR_HTTP_PREFIX: "o http://"
STR_SCAN_QR_HINT: "o escanegeu el codi QR amb el telèfon:"
STR_CALIBRE_WIRELESS: "Calibre sense fils"
STR_CALIBRE_WEB_URL: "URL web del Calibre"
STR_CONNECT_WIRELESS: "Connecta com a dispositiu sense fils"
STR_NETWORK_LEGEND: "* = Encriptat | + = Desat"
STR_MAC_ADDRESS: "Adreça MAC:"
STR_CHECKING_WIFI: "S'està comprovant el WiFi..."
STR_ENTER_WIFI_PASSWORD: "Introduïu la contrasenya WiFi"
STR_ENTER_TEXT: "Introduïu el text"
STR_TO_PREFIX: "a "
STR_CALIBRE_DISCOVERING: "S'està descobrint el Calibre..."
STR_CALIBRE_CONNECTING_TO: "S'està connectant a "
STR_CALIBRE_CONNECTED_TO: "S'ha connectat a "
STR_CALIBRE_WAITING_COMMANDS: "S'estan esperant les ordres..."
STR_CONNECTION_FAILED_RETRYING: "(La connexió ha fallat, s'està tornant a intentar)"
STR_CALIBRE_DISCONNECTED: "Calibre desconnectat"
STR_CALIBRE_WAITING_TRANSFER: "S'està esperant la transferència..."
STR_CALIBRE_TRANSFER_HINT: "Si la transferència falla, activeu\\n'Ignora l'espai lliure' a la configuració del\\nconnector SmartDevice a Calibre."
STR_CALIBRE_RECEIVING: "S'està rebent: "
STR_CALIBRE_RECEIVED: "S'ha rebut: "
STR_CALIBRE_WAITING_MORE: "S'està esperant més..."
STR_CALIBRE_FAILED_CREATE_FILE: "No s'ha pogut crear el fitxer"
STR_CALIBRE_PASSWORD_REQUIRED: "Contrasenya requerida"
STR_CALIBRE_TRANSFER_INTERRUPTED: "Transferència interrompuda"
STR_CALIBRE_INSTRUCTION_1: "1) Instal·leu el connector CrossPoint Reader"
STR_CALIBRE_INSTRUCTION_2: "2) Estigueu a la mateixa xarxa WiFi"
STR_CALIBRE_INSTRUCTION_3: "3) A Calibre: \"Envia a un dispositiu\""
STR_CALIBRE_INSTRUCTION_4: "\"Mantingueu aquesta pantalla oberta mentre s'envia\""
STR_CAT_DISPLAY: "Visualització"
STR_CAT_READER: "Lector"
STR_CAT_CONTROLS: "Controls"
STR_CAT_SYSTEM: "Sistema"
STR_SLEEP_SCREEN: "Pantalla de repòs"
STR_SLEEP_COVER_MODE: "Mode de pantalla de repòs"
STR_STATUS_BAR: "Barra d'estat"
STR_HIDE_BATTERY: "Oculta el % de bateria"
STR_EXTRA_SPACING: "Espaiat de paràgraf extra"
STR_TEXT_AA: "Antialiàsing del text"
STR_SHORT_PWR_BTN: "Clic curt del botó d'engegada"
STR_ORIENTATION: "Orientació de lectura"
STR_FRONT_BTN_LAYOUT: "Disposició dels botons frontals"
STR_SIDE_BTN_LAYOUT: "Disposició botons laterals"
STR_LONG_PRESS_SKIP: "Pressió llarga omet el capítol"
STR_FONT_FAMILY: "Tipus de lletra"
STR_EXT_READER_FONT: "Tipus de lletra extern"
STR_EXT_CHINESE_FONT: "Tipus de lletra"
STR_EXT_UI_FONT: "Tipus de lletra (UI)"
STR_FONT_SIZE: "Mida de la lletra (UI)"
STR_LINE_SPACING: "Interlineat del lector"
STR_ASCII_LETTER_SPACING: "Espaiat de la lletra ASCII"
STR_ASCII_DIGIT_SPACING: "Espaiat del dígit ASCII"
STR_CJK_SPACING: "Espaiat CJK"
STR_COLOR_MODE: "Mode de color"
STR_SCREEN_MARGIN: "Marge de pantalla del lector"
STR_PARA_ALIGNMENT: "Alineació de paràgrafs del lector"
STR_HYPHENATION: "Partició de mots"
STR_TIME_TO_SLEEP: "Temps per entrar en repòs"
STR_REFRESH_FREQ: "Freqüència de refresc"
STR_CALIBRE_SETTINGS: "Configuració del Calibre"
STR_KOREADER_SYNC: "Sincronització del KOReader"
STR_CHECK_UPDATES: "Comprova si hi ha actualitzacions"
STR_LANGUAGE: "Idioma"
STR_SELECT_WALLPAPER: "Selecciona un fons de pantalla"
STR_CLEAR_READING_CACHE: "Esborra la memòria cau de lectura"
STR_CALIBRE: "Calibre"
STR_USERNAME: "Nom d'usuari"
STR_PASSWORD: "Contrasenya"
STR_SYNC_SERVER_URL: "URL del servidor de sincronització"
STR_DOCUMENT_MATCHING: "Coincidència de documents"
STR_AUTHENTICATE: "Autentica"
STR_KOREADER_USERNAME: "Nom d'usuari del KOReader"
STR_KOREADER_PASSWORD: "Contrasenya del KOReader"
STR_FILENAME: "Nom de fitxer"
STR_BINARY: "Binari"
STR_SET_CREDENTIALS_FIRST: "Estableix les credencials primer"
STR_WIFI_CONN_FAILED: "Connexió WiFi fallida"
STR_AUTHENTICATING: "S'està autenticant..."
STR_AUTH_SUCCESS: "Autenticació correcta!"
STR_KOREADER_AUTH: "Autenticació del KOReader"
STR_SYNC_READY: "La sincronització del KOReader està preparada per utilitzar-se"
STR_AUTH_FAILED: "Autenticació fallida"
STR_DONE: "Fet"
STR_CLEAR_CACHE_WARNING_1: "Això esborrarà totes les dades de lectura de la memòria cau."
STR_CLEAR_CACHE_WARNING_2: "Es perdrà tot el progrés de lectura!"
STR_CLEAR_CACHE_WARNING_3: "Els llibres hauran de ser reindexats"
STR_CLEAR_CACHE_WARNING_4: "quan s'obrin de nou."
STR_CLEARING_CACHE: "S'està esborrant la memòria cau..."
STR_CACHE_CLEARED: "Memòria cau esborrada"
STR_ITEMS_REMOVED: "elements suprimits"
STR_FAILED_LOWER: "ha fallat"
STR_CLEAR_CACHE_FAILED: "No s'ha pogut esborrar la memòria cau"
STR_CHECK_SERIAL_OUTPUT: "Comprova la sortida en sèrie per obtenir detalls"
STR_DARK: "Fosc"
STR_LIGHT: "Clar"
STR_CUSTOM: "Personalitzat"
STR_COVER: "Portada"
STR_NONE_OPT: "Cap"
STR_FIT: "Ajustar"
STR_CROP: "Retallar"
STR_NO_PROGRESS: "Sense progrés"
STR_FULL_OPT: "Completa"
STR_NEVER: "Mai"
STR_IN_READER: "Al lector"
STR_ALWAYS: "Sempre"
STR_IGNORE: "Ignora"
STR_SLEEP: "Dormir"
STR_PAGE_TURN: "Canvi de pàgina"
STR_PORTRAIT: "Vertical"
STR_LANDSCAPE_CW: "Horitzontal horari"
STR_INVERTED: "Invertit"
STR_LANDSCAPE_CCW: "Horitzontal antihorari"
STR_FRONT_LAYOUT_BCLR: "Enr, Cnfrm, Esq, Dreta"
STR_FRONT_LAYOUT_LRBC: "Esq, Dreta, Enr, Cnfrm"
STR_FRONT_LAYOUT_LBCR: "Esq, Enr, Cnfrm, Dreta"
STR_PREV_NEXT: "Anterior/Següent"
STR_NEXT_PREV: "Següent/Anterior"
STR_BOOKERLY: "Bookerly"
STR_NOTO_SANS: "Noto Sans"
STR_OPEN_DYSLEXIC: "Open Dyslexic"
STR_SMALL: "Petita"
STR_MEDIUM: "Mitjana"
STR_LARGE: "Gran"
STR_X_LARGE: "Molt gran"
STR_TIGHT: "Estret"
STR_NORMAL: "Normal"
STR_WIDE: "Ample"
STR_JUSTIFY: "Justificat"
STR_ALIGN_LEFT: "Esquerra"
STR_CENTER: "Centre"
STR_ALIGN_RIGHT: "Dreta"
STR_MIN_1: "1 min"
STR_MIN_5: "5 min"
STR_MIN_10: "10 min"
STR_MIN_15: "15 min"
STR_MIN_30: "30 min"
STR_PAGES_1: "1 pàgina"
STR_PAGES_5: "5 pàgines"
STR_PAGES_10: "10 pàgines"
STR_PAGES_15: "15 pàgines"
STR_PAGES_30: "30 pàgines"
STR_UPDATE: "Actualitza"
STR_CHECKING_UPDATE: "S'està comprovant si hi ha actualitzacions..."
STR_NEW_UPDATE: "Nova actualització disponible!"
STR_CURRENT_VERSION: "Versió actual: "
STR_NEW_VERSION: "Nova versió: "
STR_UPDATING: "S'està actualitzant..."
STR_NO_UPDATE: "No hi ha actualitzacions disponibles"
STR_UPDATE_FAILED: "Ha fallat l'actualització"
STR_UPDATE_COMPLETE: "Actualització completada"
STR_POWER_ON_HINT: "Premeu i manteniu premut el botó d'encesa per tornar a engegar"
STR_EXTERNAL_FONT: "Tipus de lletra extern"
STR_BUILTIN_DISABLED: "Integrat (desactivat)"
STR_NO_ENTRIES: "No s'ha trobat cap entrada"
STR_DOWNLOADING: "S'està baixant..."
STR_DOWNLOAD_FAILED: "Ha fallat la baixada"
STR_ERROR_MSG: "Error:"
STR_UNNAMED: "Sense nom"
STR_NO_SERVER_URL: "No s'ha configurat cap URL de servidor"
STR_FETCH_FEED_FAILED: "Ha fallat l'obtenció del feed"
STR_PARSE_FEED_FAILED: "Ha fallat l'anàlisi del feed"
STR_NETWORK_PREFIX: "Xarxa: "
STR_IP_ADDRESS_PREFIX: "Adreça IP: "
STR_SCAN_QR_WIFI_HINT: "o escanegeu el codi QR amb el telèfon per connectar el WiFi."
STR_ERROR_GENERAL_FAILURE: "Error: Fallada general"
STR_ERROR_NETWORK_NOT_FOUND: "Error: No s'ha trobat la xarxa"
STR_ERROR_CONNECTION_TIMEOUT: "Error: temps de connexió esgotat"
STR_SD_CARD: "Targeta SD"
STR_BACK: "« Enrere"
STR_EXIT: "« Surt"
STR_HOME: "« Inici"
STR_SAVE: "« Desa"
STR_SELECT: "Selecciona"
STR_TOGGLE: "Canvia"
STR_CONFIRM: "Confirma"
STR_CANCEL: "Cancel·la"
STR_CONNECT: "Connecta"
STR_OPEN: "Obre"
STR_DOWNLOAD: "Descarrega"
STR_RETRY: "Nou intent"
STR_YES: "Sí"
STR_NO: "No"
STR_STATE_ON: "ON"
STR_STATE_OFF: "OFF"
STR_SET: "Establert"
STR_NOT_SET: "No establert"
STR_DIR_LEFT: "Esquerra"
STR_DIR_RIGHT: "Dreta"
STR_DIR_UP: "Amunt"
STR_DIR_DOWN: "Avall"
STR_CAPS_ON: "MAJS"
STR_CAPS_OFF: "majs"
STR_OK_BUTTON: "OK"
STR_ON_MARKER: "[ON]"
STR_SLEEP_COVER_FILTER: "Filtre de pantalla de repòs"
STR_FILTER_CONTRAST: "Contrast"
STR_STATUS_BAR_FULL_PERCENT: "Amb percentatge"
STR_STATUS_BAR_FULL_BOOK: "Amb progrés llibre"
STR_STATUS_BAR_BOOK_ONLY: "Només progrés llibre"
STR_STATUS_BAR_FULL_CHAPTER: "Amb progrés capítol"
STR_UI_THEME: "Tema de la interfície"
STR_THEME_CLASSIC: "Clàssic"
STR_THEME_LYRA: "Lyra"
STR_THEME_LYRA_EXTENDED: "Lyra Ampliat"
STR_SUNLIGHT_FADING_FIX: "Correcció de l'esvaïment pel sol"
STR_REMAP_FRONT_BUTTONS: "Reassigna els botons frontals"
STR_OPDS_BROWSER: "Navegador OPDS"
STR_COVER_CUSTOM: "Portada + Personalitzat"
STR_RECENTS: "Recents"
STR_MENU_RECENT_BOOKS: "Llibres recents"
STR_NO_RECENT_BOOKS: "No hi ha llibres recents"
STR_CALIBRE_DESC: "Usa les transferències sense fils de Calibre"
STR_FORGET_AND_REMOVE: "Voleu suprimir la contrasenya desada?"
STR_FORGET_BUTTON: "Oblida"
STR_CALIBRE_STARTING: "S'està iniciant el Calibre..."
STR_CALIBRE_SETUP: "Configura"
STR_CALIBRE_STATUS: "Estat"
STR_CLEAR_BUTTON: "Esborra"
STR_DEFAULT_VALUE: "Per defecte"
STR_REMAP_PROMPT: "Premeu un botó frontal per a cada rol"
STR_UNASSIGNED: "No assignat"
STR_ALREADY_ASSIGNED: "Ja assignat"
STR_REMAP_RESET_HINT: "Botó lateral Amunt: Restableix la disposició per defecte"
STR_REMAP_CANCEL_HINT: "Botó lateral Avall: Cancel·la la reassignació"
STR_HW_BACK_LABEL: "Enrere (1r botó)"
STR_HW_CONFIRM_LABEL: "Confirma (2n botó)"
STR_HW_LEFT_LABEL: "Esquerra (3r botó)"
STR_HW_RIGHT_LABEL: "Dreta (4t botó)"
STR_GO_TO_PERCENT: "Ves al %"
STR_GO_HOME_BUTTON: "Ves a l'inici"
STR_SYNC_PROGRESS: "Sincronitza el progrés"
STR_DELETE_CACHE: "Esborra la memòria cau del llibre"
STR_CHAPTER_PREFIX: "Capítol: "
STR_PAGES_SEPARATOR: " pàgines | "
STR_BOOK_PREFIX: "Llibre: "
STR_KBD_SHIFT: "maj"
STR_KBD_SHIFT_CAPS: "MAJ"
STR_KBD_LOCK: "BLOCA"
STR_CALIBRE_URL_HINT: "Per al Calibre, afegiu /opds a la URL"
STR_PERCENT_STEP_HINT: "Esquerra/Dreta: 1% Amunt/Avall: 10%"
STR_SYNCING_TIME: "S'està sincronitzant el temps..."
STR_CALC_HASH: "S'està calculant el hash del document..."
STR_HASH_FAILED: "No s'ha pogut calcular el hash del document"
STR_FETCH_PROGRESS: "S'està obtenint el progrés remot..."
STR_UPLOAD_PROGRESS: "S'està pujant el progrés..."
STR_NO_CREDENTIALS_MSG: "No s'han configurat credencials"
STR_KOREADER_SETUP_HINT: "Configureu el compte de KOReader a la configuració"
STR_PROGRESS_FOUND: "S'ha trobat progrés!"
STR_REMOTE_LABEL: "Remot:"
STR_LOCAL_LABEL: "Local:"
STR_PAGE_OVERALL_FORMAT: "Pàgina %d, %.2f%% total"
STR_PAGE_TOTAL_OVERALL_FORMAT: "Pàgina %d/%d, %.2f%% total"
STR_DEVICE_FROM_FORMAT: " De: %s"
STR_APPLY_REMOTE: "Aplica el progrés remot"
STR_UPLOAD_LOCAL: "Puja el progrés local"
STR_NO_REMOTE_MSG: "No s'ha trobat progrés remot"
STR_UPLOAD_PROMPT: "Voleu pujar la posició actual?"
STR_UPLOAD_SUCCESS: "Progrés pujat!"
STR_SYNC_FAILED_MSG: "Sincronització fallida"
STR_SECTION_PREFIX: "Secció "
STR_UPLOAD: "Puja"
STR_BOOK_S_STYLE: "Estil del llibre"
STR_EMBEDDED_STYLE: "Estil incrustat"
STR_OPDS_SERVER_URL: "URL del servidor OPDS"