Files
FreshRSS/app/i18n/it/gen.php
Christian Weiske 1acc646222 Show time since when a feed has problems + new timeago() method and i18n plurals (#8670)
Closes https://github.com/FreshRSS/FreshRSS/issues/8508

Changes proposed in this pull request:

- Use an integer for `Feed::error` everywhere (follow up to #8646)
- Extract `Entry::machineReadableDate()` into function for use in HTML templates
- Add `timeago()` function that converts a unix timestamp into a "4 weeks ago" string
- Show the last successful feed update, and the last erroneous update

How to test the feature manually:

1. Update a feed
2. Modify the feed URL in the database and set it to a non-existing URL
3. Update the feed again
4. Open the "Manage feed" and see the expanded error message:

>  Blast! This feed has encountered a problem. If this situation persists, please verify that it is still reachable.
> Last successful update 3 hours ago, last erroneous update 1 hour ago. 

You can hover the relative dates to see the timestamp.

* Make Feed::error an int everywhere

Related: https://github.com/FreshRSS/FreshRSS/pull/8646

* Extract timestamptomachinedate()

.. for later usage in the feed error time display.

* Show time since when a feed has problems

We add our own "timeago" function that converts a unix timestamp
into a "4 weeks ago" string.

Resolves: https://github.com/FreshRSS/FreshRSS/issues/8508

* Add new translation keys

* i18n fr, en-US

* Minor XHTML preference

* Slightly shorter rewrite, also hopefully easier to read

* Rewrite to allow (simple) plural
I also moved some functions around for hopefully a more generic and better structure.
I made some changes for the sake of speed (e.g. second-based logic instead of datetime intervals).
Note: I used automatic translation as I was worried it would be too complicated to explain to translators... I proofread the few languages I have some familiarity with.

* Add reference to CLDR

* Slightly more compact syntax

* Always show last update, fix case of unknown error date

* Remove forgotten span

* No need for multi-lines anymore

* Fix error date thresshold

* plurals forms

* Extract gettext formula conversion script to cli

* Simplify a bit

* Escort excess parentheses to the door

* Simplify

* Avoid being too clever in localization

* Fix German

* Fix plural TODO parsing

* Ignore en-US translation

* make fix-all

* git update-index --chmod=+x cli/compile.plurals.php

* Heredoc indent PHP 7.3+

* compileAll: Continue on error

* PHP strict comparisons

* Light logical simplification

* Cache plural_message_families

* Avoid case of empty value

* A bit of documentation

---------

Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
Co-authored-by: Frans de Jonge <frans@clevercast.com>
Co-authored-by: Frans de Jonge <fransdejonge@gmail.com>
2026-04-07 22:56:02 +02:00

333 lines
11 KiB
PHP
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/******************************************************************************
* Each entry of that file can be associated with a comment to indicate its *
* state. When there is no comment, it means the entry is fully translated. *
* The recognized comments are (comment matching is case-insensitive): *
* + TODO: the entry has never been translated. *
* + DIRTY: the entry has been translated but needs to be updated. *
* + IGNORE: the entry does not need to be translated. *
* When a comment is not recognized, it is discarded. *
******************************************************************************/
return array(
'action' => array(
'actualize' => 'Aggiorna feeds',
'add' => 'Aggiungi',
'back_to_rss_feeds' => '← Indietro',
'cancel' => 'Annulla',
'close' => 'Chiudere',
'create' => 'Crea',
'delete_all_feeds' => 'Cancella tutti i feed',
'delete_errored_feeds' => 'Cancella i feed con errori',
'delete_muted_feeds' => 'Cancella i feed mutati',
'demote' => 'Retrocedi',
'disable' => 'Disabilita',
'download' => 'Download', // IGNORE
'empty' => 'Vuoto',
'enable' => 'Abilita',
'export' => 'Esporta',
'filter' => 'Filtra',
'import' => 'Importa',
'load_default_shortcuts' => 'Carica le scorciatoie di default',
'manage' => 'Gestisci',
'mark_read' => 'Segna come letto',
'menu' => array(
'open' => 'Aprire il menu',
),
'nav_buttons' => array(
'next' => 'Articolo successivo',
'prev' => 'Articolo precedente',
'up' => 'Salire',
),
'open_url' => 'Apri URL',
'promote' => 'Promuovi',
'purge' => 'Elimina',
'refresh_opml' => 'Ricarica OPML',
'remove' => 'Rimuovi',
'rename' => 'Rinomina',
'see_website' => 'Vai al sito',
'submit' => 'Conferma',
'truncate' => 'Cancella tutti gli articoli',
'update' => 'Aggiorna',
),
'auth' => array(
'accept_tos' => 'Accetto i <a href="%s">Termini e condizioni del servizio</a>.',
'email' => 'Indirizzo email',
'keep_logged_in' => 'Ricorda i dati <small>(%s giorni)</small>',
'login' => 'Accedi',
'logout' => 'Esci',
'password' => array(
'_' => 'Password', // IGNORE
'format' => '<small>almeno 7 caratteri</small>',
),
'reauth' => array(
'header' => 'Nuova autenticazione richiesta',
'tip' => 'Non ti verrà richiesto di autenticarti nuovamente per <u>%d minuti</u>',
'title' => 'Nuova autenticazione',
),
'registration' => array(
'_' => 'Nuovo profilo',
'ask' => 'Vuoi creare un nuovo profilo?',
'title' => 'Creazione profilo',
),
'username' => array(
'_' => 'Nome utente',
'format' => '<small>Massimo 16 caratteri alfanumerici</small>',
),
),
'date' => array(
'Apr' => '\\A\\p\\r\\i\\l\\e',
'Aug' => '\\A\\g\\o\\s\\t\\o',
'Dec' => '\\D\\i\\c\\e\\m\\b\\r\\e',
'Feb' => '\\F\\e\\b\\b\\r\\a\\i\\o',
'Jan' => '\\G\\e\\n\\n\\a\\i\\o',
'Jul' => '\\L\\u\\g\\l\\i\\o',
'Jun' => '\\G\\i\\u\\g\\n\\o',
'Mar' => '\\M\\a\\r\\z\\o',
'May' => '\\M\\a\\g\\g\\i\\o',
'Nov' => '\\N\\o\\v\\e\\m\\b\\r\\e',
'Oct' => '\\O\\t\\t\\o\\b\\r\\e',
'Sep' => '\\S\\e\\t\\t\\e\\m\\b\\r\\e',
'apr' => 'apr.',
'april' => 'aprile',
'aug' => 'ag.',
'august' => 'agosto',
'before_yesterday' => 'Meno recenti',
'dec' => 'dic.',
'december' => 'dicembre',
'feb' => 'febbr.',
'february' => 'febbraio',
'format_date' => 'j\\ %s Y',
'format_date_hour' => 'j\\ %s Y \\o\\r\\e H\\:i',
'fri' => 'Ven',
'jan' => 'genn.',
'january' => 'gennaio',
'jul' => 'jul',
'july' => 'luglio',
'jun' => 'jun',
'june' => 'giugno',
'last_2_year' => 'Ultimi due anni',
'last_3_month' => 'Ultimi tre mesi',
'last_3_year' => 'Ultimi tre anni',
'last_5_year' => 'Ultimi cinque anni',
'last_6_month' => 'Ultimi sei mesi',
'last_month' => 'Ultimo mese',
'last_week' => 'Ultima settimana',
'last_year' => 'Ultimo anno',
'mar' => 'mar.',
'march' => 'marzo',
'may' => 'maggio',
'may_' => 'Mag',
'mon' => 'Lun',
'month' => 'mesi',
'nov' => 'nov.',
'november' => 'novembre',
'oct' => 'ott.',
'october' => 'ottobre',
'sat' => 'Sab',
'sep' => 'sett.',
'september' => 'settembre',
'sun' => 'Dom',
'thu' => 'Gio',
'today' => 'Oggi',
'tue' => 'Mar',
'wed' => 'Mer',
'yesterday' => 'Ieri',
),
'dir' => 'ltr', // IGNORE
'freshrss' => array(
'_' => 'Feed RSS Reader',
'about' => 'Informazioni',
),
'interval' => array(
'day' => array(
0 => '%d giorno fa',
1 => '%d giorni fa',
),
'hour' => array(
0 => '%d ora fa',
1 => '%d ore fa',
),
'justnow' => 'proprio adesso',
'minute' => array(
0 => '%d minuto fa',
1 => '%d minuti fa',
),
'month' => array(
0 => '%d mese fa',
1 => '%d mesi fa',
),
'second' => array(
0 => '%d secondo fa',
1 => '%d secondi fa',
),
'year' => array(
0 => '%d anno fa',
1 => '%d anni fa',
),
),
'js' => array(
'category_empty' => 'Categoria vuota',
'confirm_action' => 'Sei sicuro di voler continuare?',
'confirm_action_feed_cat' => 'Sei sicuro di voler continuare? Verranno persi i preferiti e le ricerche utente correlate!',
'confirm_exit_slider' => 'Sei sicuro di voler perdere le impostazioni non salvate?',
'feedback' => array(
'body_new_articles' => 'Ci sono %%d nuovi articoli da leggere.',
'body_unread_articles' => '(non letti: %%d)',
'request_failed' => 'Richiesta fallita, probabilmente a causa di problemi di connessione',
'title_new_articles' => 'Feed RSS Reader: nuovi articoli!',
),
'labels_empty' => 'Nessun tag',
'new_article' => 'Sono disponibili nuovi articoli, clicca qui per caricarli.',
'should_be_activated' => 'JavaScript deve essere abilitato',
'unsafe_csp_header' => 'Lheader CSP attualmente utilizzato non è sicuro e quindi FreshRSS può essere vulnerabile ad attacchi XSS. <a target="_blank" href="https://freshrss.github.io/FreshRSS/en/admins/10_ServerConfig.html#security">Vedi la documentazione</a>',
),
'lang' => array(
'cs' => 'Čeština', // IGNORE
'de' => 'Deutsch', // IGNORE
'el' => 'Ελληνικά', // IGNORE
'en' => 'English', // IGNORE
'en-US' => 'English (United States)', // IGNORE
'es' => 'Español', // IGNORE
'fa' => 'فارسی', // IGNORE
'fi' => 'Suomi', // IGNORE
'fr' => 'Français', // IGNORE
'he' => 'עברית', // IGNORE
'hu' => 'Magyar', // IGNORE
'id' => 'Bahasa Indonesia', // IGNORE
'it' => 'Italiano', // IGNORE
'ja' => '日本語', // IGNORE
'ko' => '한국어', // IGNORE
'lv' => 'Latviešu', // IGNORE
'nl' => 'Nederlands', // IGNORE
'oc' => 'Occitan', // IGNORE
'pl' => 'Polski', // IGNORE
'pt-BR' => 'Português (Brasil)', // IGNORE
'pt-PT' => 'Português (Portugal)', // IGNORE
'ru' => 'Русский', // IGNORE
'sk' => 'Slovenčina', // IGNORE
'tr' => 'Türkçe', // IGNORE
'uk' => 'Українська', // IGNORE
'zh-CN' => '简体中文', // IGNORE
'zh-TW' => '正體中文', // IGNORE
),
'menu' => array(
'about' => 'Informazioni',
'account' => 'Profilo',
'admin' => 'Amministrazione',
'advanced_search' => 'Ricerca avanzata',
'archiving' => 'Archiviazione',
'authentication' => 'Autenticazione',
'check_install' => 'Installazione',
'configuration' => 'Configurazione',
'display' => 'Visualizzazione',
'extensions' => 'Estensioni',
'logs' => 'Log',
'privacy' => 'Privacy', // IGNORE
'queries' => 'Ricerche personali',
'reading' => 'Lettura',
'search' => 'Ricerca parole o #tags',
'search_help' => 'Vedi la documentazione per <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#with-the-search-field" target="_blank">parametri di ricerca avanzati</a>',
'sharing' => 'Condivisione',
'shortcuts' => 'Comandi tastiera',
'stats' => 'Statistiche',
'system' => 'Configurazione sistema',
'update' => 'Aggiornamento',
'user_management' => 'Gestione utenti',
'user_profile' => 'Profilo',
),
'period' => array(
'days' => 'giorni',
'hours' => 'ore',
'months' => 'mesi',
'weeks' => 'settimane',
'years' => 'anni',
),
'readme' => array(
'contribute' => 'contribute', // IGNORE
'language' => 'Language', // IGNORE
'translated' => 'Progress', // IGNORE
),
'search' => array(
'advanced_search_help' => 'Questo modulo aiuta nella costruzione delle ricerche, ma le ricerche manuali sono ancora più potenti.',
'authors' => 'Autori',
'categories' => 'Categorie',
'content' => 'Contenuto',
'date_from' => 'Da',
'date_modified' => 'Data di modifica da parte del server',
'date_past' => 'Nel passato',
'date_published' => 'Data di pubblicazione',
'date_range' => 'Intervallo date',
'date_received' => 'Data di ricezione',
'date_to' => 'A',
'date_user' => 'Data di modifica dellutente',
'feeds' => 'Feeds', // IGNORE
'free_text' => 'Testo libero',
'free_text_help' => 'Cerca sia nel titolo che nel contenuto',
'full_documentation' => 'Guarda la <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#with-the-search-field" target="_blank">documentazione sulla ricerca completa</a>',
'labels' => 'Le mie etichette',
'multiple_help' => 'Seleziona una o più (tieni premuto <kbd>Ctrl</kbd> o <kbd>Cmd</kbd>)',
'sources' => 'Fonti',
'tags' => 'Tag degli articoli',
'text' => 'Ricerca testuale',
'text_help' => 'Righe multiple sono combinate tramite degli <i>o</i> logici. Supporta anche le <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#regex" target="_blank">espressioni regolari</a>.',
'text_placeholder' => 'Parola chiave',
'title' => 'Titolo',
'url' => 'URL', // IGNORE
'user_queries' => 'Ricerche dellutente',
),
'share' => array(
'Known' => 'Siti basati su Known',
'archiveIS' => 'archive.is', // IGNORE
'archiveORG' => 'archive.org', // IGNORE
'archivePH' => 'archive.ph', // IGNORE
'bluesky' => 'Bluesky', // IGNORE
'buffer' => 'Buffer', // IGNORE
'clipboard' => 'Appunti',
'diaspora' => 'Diaspora*', // IGNORE
'email' => 'Email', // IGNORE
'email-webmail-firefox-fix' => 'Email (webmail - fix per Firefox)',
'facebook' => 'Facebook', // IGNORE
'gnusocial' => 'GNU social', // IGNORE
'jdh' => 'Journal du hacker', // IGNORE
'lemmy' => 'Lemmy', // IGNORE
'linkding' => 'Linkding', // IGNORE
'linkedin' => 'LinkedIn', // IGNORE
'mastodon' => 'Mastodon', // IGNORE
'movim' => 'Movim', // IGNORE
'omnivore' => 'Omnivore', // IGNORE
'pinboard' => 'Pinboard', // IGNORE
'pinterest' => 'Pinterest', // IGNORE
'print' => 'Stampa',
'raindrop' => 'Raindrop.io', // IGNORE
'reddit' => 'Reddit', // IGNORE
'shaarli' => 'Shaarli', // IGNORE
'telegram' => 'Telegram', // IGNORE
'twitter' => 'X (Twitter)', // IGNORE
'wallabag' => 'wallabag v1', // IGNORE
'wallabagv2' => 'wallabag v2', // IGNORE
'web-sharing-api' => 'Condivisione di sistema',
'whatsapp' => 'Whatsapp', // IGNORE
'xing' => 'Xing', // IGNORE
),
'short' => array(
'attention' => 'Attenzione!',
'blank_to_disable' => 'Lascia vuoto per disabilitare',
'by_author' => 'di:',
'by_default' => 'predefinito',
'damn' => 'Ops!',
'default_category' => 'Senza categoria',
'no' => 'No', // IGNORE
'not_applicable' => 'Non disponibile',
'ok' => 'OK!',
'or' => 'o',
'yes' => 'Si',
),
'stream' => array(
'load_more' => 'Carica altri articoli',
'mark_all_read' => 'Segna tutto come letto',
'nothing_to_load' => 'Non ci sono altri articoli',
),
);